diff --git a/.agents/notes/implemented/process/2026-09-11-persistence-type-history.i18n.yaml b/.agents/notes/implemented/process/2026-09-11-persistence-type-history.i18n.yaml
index 83a051efa6..a1afea9eb1 100644
--- a/.agents/notes/implemented/process/2026-09-11-persistence-type-history.i18n.yaml
+++ b/.agents/notes/implemented/process/2026-09-11-persistence-type-history.i18n.yaml
@@ -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 .agents/notes/implemented/process/2026-09-11-persistence-type-history.md
-2026-09-11-persistence-type-history.md: 251ac7e1ba9f87e712c5e1d92a80640b527ed4a3
-2026-09-11-persistence-type-history.zh.md: fee3bf7f7babf3dc9bece0b66880155318bdad70
+2026-09-11-persistence-type-history.md: e1fd4ac704f6908daab573ee63eacc1c93780896
+2026-09-11-persistence-type-history.zh.md: d54c0d845f24ca23b17bf8f386995b68f718d43a
diff --git a/.agents/notes/implemented/process/2026-09-11-persistence-type-history.md b/.agents/notes/implemented/process/2026-09-11-persistence-type-history.md
index 251ac7e1ba..e1fd4ac704 100644
--- a/.agents/notes/implemented/process/2026-09-11-persistence-type-history.md
+++ b/.agents/notes/implemented/process/2026-09-11-persistence-type-history.md
@@ -10,11 +10,11 @@ A persisted event can retain the same payload type expression while a referenced
## Decision
-One normalized type model supplies the readable persistence catalog, the complete schema inventory, and transitive per-root digests. Roots identify the logical Session header, the physical JSONL header line, the event envelope, and every repository-declared event. Source locations, alias names, comments, and property order are presentation details outside the digest. Historical records retain source file paths without line numbers because their selected source trees differ from the current checkout. Referenced and recursive types participate in structural comparison; opaque values retain explicit coverage limits.
+One normalized type model supplies the readable persistence catalog, the complete schema inventory, and transitive per-root digests. Roots identify the logical Session header, the physical JSONL header line, the event envelope, and every repository-declared event. Source locations, alias names, ordinary comments, and property order are presentation details outside the digest. Explicit compatibility annotations carry fingerprinted policy data under the [source-attribution policy](2026-09-17-persistence-schema-review.md). Historical records retain source file paths without line numbers because their selected source trees differ from the current checkout. Referenced and recursive types participate in structural comparison; opaque values retain explicit coverage limits.
The dedicated [persistence-change records](../../../../docs/persistence-changes/README.md) bind acknowledgement to the after digest of each affected root. A generated companion stores complete after schemas. The initial record covers all roots; later records name each root's predecessor. A predecessor's after schema supplies the next before schema. Verification rejects ambiguous history and requires current source to match the terminal recorded state without consulting Git history or remote services.
-Automatic classification permits optional body additions, required-to-optional body changes, and ordinary event additions within one version. Other structural changes require a version-bump decision that includes an increasing header version in that record. The [format-version procedure](../../../../docs/cookbook/adding-a-session-format-version.md) continues to own adjacent migration work. Every structural difference requires an explicit record, including additions allowed within the same version.
+Automatic classification permits optional body additions, required-to-optional body changes, and ordinary event additions within one version. The scoped [source-attribution policy](2026-09-17-persistence-schema-review.md) also permits qualified new producer kinds when both saved schemas opt in. Other structural changes require a version-bump decision that includes an increasing header version in that record. The [format-version procedure](../../../../docs/cookbook/adding-a-session-format-version.md) continues to own adjacent migration work. Every structural difference requires an explicit record, including additions allowed within the same version.
The new document kind preserves the compatibility reasoning and evidence for a historical type transition. Agent Notes retain mechanism-level decisions; they do not become a growing inventory of individual acknowledgements. Machine declarations remain identical across the bilingual pair and are parsed once.
diff --git a/.agents/notes/implemented/process/2026-09-11-persistence-type-history.zh.md b/.agents/notes/implemented/process/2026-09-11-persistence-type-history.zh.md
index fee3bf7f7b..d54c0d845f 100644
--- a/.agents/notes/implemented/process/2026-09-11-persistence-type-history.zh.md
+++ b/.agents/notes/implemented/process/2026-09-11-persistence-type-history.zh.md
@@ -10,11 +10,11 @@ Status: implemented
## 决策
-一个规范化类型模型提供可读持久化目录、完整 schema 清单和包含传递引用的逐根摘要。根标识逻辑会话头、物理 JSONL 头行、事件封装以及每个仓库内声明的事件。源码位置、别名名称、注释和属性顺序属于摘要之外的展示细节。历史记录保留源码文件路径而不包含行号,因为其选定的源码树与当前工作树不同。被引用类型和递归类型参与结构比较;不透明值保留明确的覆盖限制。
+一个规范化类型模型提供可读持久化目录、完整 schema 清单和包含传递引用的逐根摘要。根标识逻辑会话头、物理 JSONL 头行、事件封装以及每个仓库内声明的事件。源码位置、别名名称、普通注释和属性顺序属于摘要之外的展示细节。历史记录保留源码文件路径而不包含行号,因为其选定的源码树与当前工作树不同。被引用类型和递归类型参与结构比较;不透明值保留明确的覆盖限制。显式兼容性标记依照[消息源归属策略](2026-09-17-persistence-schema-review.zh.md)携带纳入指纹的策略数据。
专用的[持久化变更记录](../../../../docs/persistence-changes/README.zh.md)将确认绑定到每个受影响根的变更后摘要。生成的伴随文件保存完整的变更后 schema。初始记录覆盖所有根;后续记录为每个根指定前驱。前驱的变更后 schema 提供下一次的变更前 schema。验证拒绝有歧义的历史,并要求当前源码匹配最终记录状态,无需查询 Git 历史或远端服务。
-自动分类允许可选事件体新增、事件体属性从必选改为可选,以及普通事件新增保持同一版本。其他结构变更需要升版本决策,并在该记录中包含递增的头部版本。[格式版本流程](../../../../docs/cookbook/adding-a-session-format-version.zh.md)继续负责相邻迁移工作。每个结构差异都需要显式记录,包括允许保持同一版本的新增。
+自动分类允许可选事件体新增、事件体属性从必选改为可选,以及普通事件新增保持同一版本。当双方保存的 schema 均声明支持时,受限的[消息源归属策略](2026-09-17-persistence-schema-review.zh.md)也允许添加符合条件的生产者 kind。其他结构变更需要升版本决策,并在该记录中包含递增的头部版本。[格式版本流程](../../../../docs/cookbook/adding-a-session-format-version.zh.md)继续负责相邻迁移工作。每个结构差异都需要显式记录,包括允许保持同一版本的新增。
新文档类型保留历史类型转换的兼容性说明和证据。Agent Note 保留机制层面的决策,不积累单次确认清单。双语对中的机器声明保持相同,且只解析一次。
diff --git a/.agents/notes/implemented/process/2026-09-17-persistence-schema-review.i18n.yaml b/.agents/notes/implemented/process/2026-09-17-persistence-schema-review.i18n.yaml
new file mode 100644
index 0000000000..6e8c8c5809
--- /dev/null
+++ b/.agents/notes/implemented/process/2026-09-17-persistence-schema-review.i18n.yaml
@@ -0,0 +1,6 @@
+# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
+# 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 .agents/notes/implemented/process/2026-09-17-persistence-schema-review.md
+2026-09-17-persistence-schema-review.md: c4b5f87e0bc37a7f1bba8999317b045f4a367847
+2026-09-17-persistence-schema-review.zh.md: 8707d304eb8e3653a97c73b5876b6977fea3ac83
diff --git a/.agents/notes/implemented/process/2026-09-17-persistence-schema-review.md b/.agents/notes/implemented/process/2026-09-17-persistence-schema-review.md
new file mode 100644
index 0000000000..c4b5f87e0b
--- /dev/null
+++ b/.agents/notes/implemented/process/2026-09-17-persistence-schema-review.md
@@ -0,0 +1,35 @@
+# Agent Note: Persistence schema policy and review
+
+Status: implemented
+
+English | [中文](2026-09-17-persistence-schema-review.zh.md)
+
+## Problem
+
+Structural fingerprints identify changed persistence types, but a fingerprint alone cannot explain a shared change or distinguish a declared reader promise from an assumption about runtime behavior. Names derived from union positions and traversal paths also change when unrelated siblings are added, obscuring the fields a reviewer needs to inspect.
+
+## Decision
+
+Inventory format 2 records supported compatibility metadata with the affected property. The metadata names its binding, policy version, literal discriminator, unknown-kind preservation promise, and qualified attribution kinds. Policy-bearing graphs use a separate fingerprint domain; graphs without a bound policy retain format-1 normalization and fingerprints. Inventory versions describe schema tooling, independently of Session format versions.
+
+The extractor accepts explicit source bindings only at the core-owned source declaration and requires a literal user or developer role at each use. Producer annotations qualify complete wire-kind groups. The classifier permits a qualified new attribution kind only when both saved schemas carry matching promises. Existing kinds remain subject to structural comparison; removals, retroactive qualification, reserved identities, and unrelated breaking changes retain strict classification. Runtime owners establish and test the promised preservation behavior before activating a binding.
+
+Current inventories retain authored names and source locations as descriptive metadata. Structural digests identify types and provide catalog anchors. Catalogs group source alternatives by literal `kind` and retain every `form` alternative, required field, index signature, and link to its complete definition. Bounded array labels describe their elements instead of inheriting the first event that reached the array. Historical references retain their frozen rendering.
+
+The read-only `persistence-review` command accepts explicit before and after inventories. It matches unchanged schemas by digest and changed alternatives only when literal discriminators identify them uniquely. Ambiguous alternatives remain separate additions and removals. Shared structural evidence lists every affected root, while a separate section preserves the authoritative classifier diagnostics. The [history mechanism](2026-09-11-persistence-type-history.md) continues to own acknowledgement and version requirements.
+
+## Alternatives considered
+
+**Ignore all source changes.** A source can carry replay or validation meaning. Explicit, fingerprinted opt-ins constrain the supported exception and leave other changes visible.
+
+**Use traversal paths as type identities.** Union positions and first-owner paths describe one walk through a graph. Unrelated insertions and shared references can change them without changing the persisted type.
+
+**Infer renames from similar fields.** Several alternatives can have the same discriminator or similar structure. Keeping ambiguous additions and removals avoids presenting an unsupported correspondence as fact.
+
+**Replace compatibility checks with a readable diff.** Review explanations group evidence for a human reader. They cannot relax the classifier or replace the in-tree acknowledgement history.
+
+## Consequences
+
+Declared compatibility promises participate in fingerprints and remain available when comparing historical snapshots. The tooling does not infer or enforce runtime preservation; the owner of an activated binding supplies that behavior. Ordinary comments, labels, and source locations remain outside structural identity.
+
+Complete nested schema graphs remain stored in each inventory. Stable labels and grouped review output reduce presentation noise without changing that storage encoding or rewriting frozen historical records. The [cookbook](../../../../docs/cookbook/reviewing-persistence-type-changes.md) describes the review command and acknowledgement workflow.
diff --git a/.agents/notes/implemented/process/2026-09-17-persistence-schema-review.zh.md b/.agents/notes/implemented/process/2026-09-17-persistence-schema-review.zh.md
new file mode 100644
index 0000000000..8707d304eb
--- /dev/null
+++ b/.agents/notes/implemented/process/2026-09-17-persistence-schema-review.zh.md
@@ -0,0 +1,35 @@
+# Agent Note: 持久化 schema 策略与审阅
+
+Status: implemented
+
+[English](2026-09-17-persistence-schema-review.md) | 中文
+
+## 问题
+
+结构指纹能标识变化的持久化类型,但单凭指纹无法解释共享变更,也无法区分已声明的读取承诺与对运行时行为的假设。由联合类型位置和遍历路径生成的名称还会因无关分支新增而变化,遮蔽审阅者需要检查的字段。
+
+## 决策
+
+Inventory format 2 在受影响属性上记录受支持的兼容性元数据。元数据包含绑定、策略版本、字面量判别字段、未知 kind 保留承诺和符合条件的归属 kind。带策略的图使用独立指纹域;没有绑定策略的图保留 format-1 规范化和指纹。Inventory 版本描述 schema 工具,独立于 Session 格式版本。
+
+提取器仅接受核心拥有的 source 声明上的显式绑定,并要求每个使用位置具有 user 或 developer 字面量角色。生产者标记对完整 wire-kind 分组赋予资格。仅当双方保存的 schema 携带匹配承诺时,分类器才允许新增符合条件的归属 kind。已有 kind 仍须进行结构比较;删除、追认资格、保留标识和无关破坏性变更继续采用严格分类。运行时所有者在激活绑定前实现并验证承诺的保留行为。
+
+当前 inventory 将人工声明名称和源码位置保留为描述性元数据。结构摘要标识类型并提供目录锚点。目录按字面量 `kind` 对消息源分支分组,并保留每个 `form` 分支、必需字段、索引签名及指向完整定义的链接。有界数组标签描述元素,不继承最先到达该数组的事件名称。历史参考保留冻结的渲染方式。
+
+只读 `persistence-review` 命令接受显式的变更前后 inventory。它按摘要匹配未变 schema,仅当字面量判别字段唯一标识分支时才匹配变化分支。有歧义的分支保留为独立新增与删除。共享结构证据列出每个受影响根,独立章节保留权威分类器诊断。[历史机制](2026-09-11-persistence-type-history.zh.md)继续负责确认和版本要求。
+
+## 考虑过的替代方案
+
+**忽略所有 source 变更。** 消息源可能承载回放或校验语义。显式且纳入指纹的选择加入约束受支持的例外,并使其他变更保持可见。
+
+**将遍历路径用作类型身份。** 联合类型位置和首个引用者路径描述的是一次图遍历。无关插入和共享引用可能改变它们,而持久化类型并未改变。
+
+**从相似字段推断重命名。** 多个分支可能具有相同判别值或相似结构。保留有歧义的新增与删除,避免将缺乏依据的对应关系呈现为事实。
+
+**用可读 diff 取代兼容性检查。** 审阅说明为读者归并证据,不能放宽分类器,也不能取代目录内的确认历史。
+
+## 影响
+
+声明的兼容性承诺参与指纹,并在比较历史快照时保持可用。工具不会推断或强制运行时保留行为;激活绑定的所有者提供该行为。普通注释、标签和源码位置仍处于结构身份之外。
+
+每份 inventory 继续存储完整嵌套 schema 图。稳定标签和分组审阅输出减少展示噪音,不改变存储编码,也不重写冻结历史记录。[实操手册](../../../../docs/cookbook/reviewing-persistence-type-changes.zh.md)介绍审阅命令和确认流程。
diff --git a/docs/cookbook/reviewing-persistence-type-changes.i18n.yaml b/docs/cookbook/reviewing-persistence-type-changes.i18n.yaml
index 67a9df2ffb..d917dc6604 100644
--- a/docs/cookbook/reviewing-persistence-type-changes.i18n.yaml
+++ b/docs/cookbook/reviewing-persistence-type-changes.i18n.yaml
@@ -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/cookbook/reviewing-persistence-type-changes.md
-reviewing-persistence-type-changes.md: 881bc689af656f0c4976e909a49848e38d53c453
-reviewing-persistence-type-changes.zh.md: f1961013886cfab1abdbd7e2cd7e09bcfce2101d
+reviewing-persistence-type-changes.md: 28c1600fac95b30d667073889ddbca4892c53ac5
+reviewing-persistence-type-changes.zh.md: 9abd1630a1ae70b5df26c19d1cdb7fda68230c3b
diff --git a/docs/cookbook/reviewing-persistence-type-changes.md b/docs/cookbook/reviewing-persistence-type-changes.md
index 881bc689af..28c1600fac 100644
--- a/docs/cookbook/reviewing-persistence-type-changes.md
+++ b/docs/cookbook/reviewing-persistence-type-changes.md
@@ -33,6 +33,14 @@ Use `--silent` when consuming JSON: pnpm otherwise appends lifecycle failure tex
Read the reported root, path, change kind, and version requirement. A referenced type can affect several event digests; inspect every affected root. Until the history covers the new schemas, verification fails. A stale generated inventory also fails verification; the recording command refreshes it. If `changes` is empty after reordering fields or union alternatives, run `pnpm run gen-persistence-catalog` and repeat the check. An unchanged digest needs no new acknowledgement even when copied declarations or source locations produce a catalog diff.
+To review a PR independently of its acknowledgement history, save the base and head inventories as local JSON files and run:
+
+```sh
+pnpm --silent run persistence-review --before .artifacts/base.schema.json --after docs/persistence-schema.json
+```
+
+Record the commits supplying those files with the report. Add `--json` for structured output. This read-only comparison groups shared changes with their affected roots and uses actual literal `kind`/`form` values instead of union positions. Ambiguous alternatives remain separate additions and removals. Its compatibility section copies every root's authoritative classifier result; the structural explanation does not replace acknowledgement checks. Current catalog labels and declaration names are descriptive metadata; structural anchors and fingerprints identify types.
+
## 1. Record the change
diff --git a/docs/cookbook/reviewing-persistence-type-changes.zh.md b/docs/cookbook/reviewing-persistence-type-changes.zh.md
index f196101388..9abd1630a1 100644
--- a/docs/cookbook/reviewing-persistence-type-changes.zh.md
+++ b/docs/cookbook/reviewing-persistence-type-changes.zh.md
@@ -33,6 +33,14 @@ pnpm --silent run verify-persistence-changes --json
阅读报告中的根、路径、变更种类和版本要求。被引用类型可能影响多个事件摘要;检查每个受影响的根。在历史覆盖新 schema 之前,验证会失败。陈旧生成清单也会导致验证失败;记录命令会刷新它。若重排字段或联合类型分支后 `changes` 为空,运行 `pnpm run gen-persistence-catalog` 并重新检查。即使复制的声明或源码位置产生目录 diff,未变的摘要也无需新增确认记录。
+要独立于确认历史评审 PR,先将 base 和 head 的目录保存为本地 JSON 文件,再运行:
+
+```sh
+pnpm --silent run persistence-review --before .artifacts/base.schema.json --after docs/persistence-schema.json
+```
+
+在报告旁记录这些文件对应的 commit。添加 `--json` 可获取结构化输出。此只读比较将共享变更与受影响的根类型归组,使用实际字面量 `kind`/`form` 值代替联合类型位置。无法唯一匹配的候选项保留为独立的新增与删除。兼容性部分复制每个根类型的权威分类结果;结构说明不替代确认检查。当前目录标签和声明名称是描述元数据;结构锚点和指纹标识类型。
+
## 1. 记录变更
diff --git a/docs/persistence-catalog.i18n.yaml b/docs/persistence-catalog.i18n.yaml
index a358d3106c..f735c9b997 100644
--- a/docs/persistence-catalog.i18n.yaml
+++ b/docs/persistence-catalog.i18n.yaml
@@ -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/persistence-catalog.md
-persistence-catalog.md: 7938e1e9dad5c728603dcda78997afa8487d5e93
-persistence-catalog.zh.md: 04952406fe691ce8409abc4b313305a7d92f19bd
+persistence-catalog.md: ba70d5713012d09708882fe6dbd1fa9356099327
+persistence-catalog.zh.md: aa6cc3fe44753dff0408e5271f1e068e2de92ad1
diff --git a/docs/persistence-catalog.md b/docs/persistence-catalog.md
index 7938e1e9da..ba70d57130 100644
--- a/docs/persistence-catalog.md
+++ b/docs/persistence-catalog.md
@@ -17,67 +17,67 @@ The [format references](persistence-changes/historical-formats/README.md) cover
| Root | Kind | SHA-256 | Resolved type |
|---|---|---|---|
-| `SessionHeader` | header | `1a3440e3577382704d42a6263aa463504eb74c566734a55e9503a63efcd02445` | [`packages/core/session/src/types.ts#SessionHeader`](#persistence-type-packagescoresessionsrctypestssessionheader) |
-| `JsonlHeaderLine` | header | `18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f` | [`packages/session/session-persistence-jsonl/src/format.ts#HeaderLine`](#persistence-type-packagessessionsession-persistence-jsonlsrcformattsheaderline) |
-| `SessionEventEnvelope` | envelope | `5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc` | [`SessionEventEnvelope`](#persistence-type-sessioneventenvelope) |
-| `event:agent-preset/selected` | event | `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b` | [`event:agent-preset/selected`](#persistence-type-eventagent-presetselected) |
-| `event:agent/inbox/spliced` | event | `646c2f1d243d3a78c5bc9305786fb340f5209c48a97e65f2a186cc5195491f3f` | [`event:agent/inbox/spliced`](#persistence-type-eventagentinboxspliced) |
-| `event:approval/asked` | event | `3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1` | [`event:approval/asked`](#persistence-type-eventapprovalasked) |
-| `event:approval/decided` | event | `bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3` | [`event:approval/decided`](#persistence-type-eventapprovaldecided) |
-| `event:approval/policy` | event | `26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78` | [`event:approval/policy`](#persistence-type-eventapprovalpolicy) |
-| `event:assistant/attempt` | event | `c80c89da83c46db7a454f034c10f969e03cfb574859c7316e5bff683f5a14b0e` | [`event:assistant/attempt`](#persistence-type-eventassistantattempt) |
-| `event:assistant/message` | event | `1169b301aaabcd992657b93ec93750c43175dda81ada5cac086f14f2eaaeed6d` | [`event:assistant/message`](#persistence-type-eventassistantmessage) |
-| `event:command/done` | event | `15196447222782e773eb943c92b18316ce96b9af0f0cfddb6e57ba8274ecc5ff` | [`event:command/done`](#persistence-type-eventcommanddone) |
-| `event:command/run` | event | `37184378c6439257d105c4e2022d80fc9c3a3f7c7f6ac661b00bc9f18d871006` | [`event:command/run`](#persistence-type-eventcommandrun) |
-| `event:compaction/end` | event | `b0127044ab31a702bddfd785d345f5abd7a70876746e895ce443afa3e60ddf2d` | [`event:compaction/end`](#persistence-type-eventcompactionend) |
-| `event:compaction/prune` | event | `7f7fd5a6b0064f597534b29ff62ef26e786dffccf5e14f654a7d4fcea2c35f04` | [`event:compaction/prune`](#persistence-type-eventcompactionprune) |
-| `event:compaction/start` | event | `db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965` | [`event:compaction/start`](#persistence-type-eventcompactionstart) |
-| `event:compaction/summary` | event | `f6f3f30109e9008fccf7da2a3268a63da8646b59dd7cf7b75bcd9cf08ac08a59` | [`event:compaction/summary`](#persistence-type-eventcompactionsummary) |
-| `event:deliverables/presented` | event | `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176` | [`event:deliverables/presented`](#persistence-type-eventdeliverablespresented) |
-| `event:feedback/message-delete` | event | `3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796` | [`event:feedback/message-delete`](#persistence-type-eventfeedbackmessage-delete) |
-| `event:feedback/message-put` | event | `b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf` | [`event:feedback/message-put`](#persistence-type-eventfeedbackmessage-put) |
-| `event:feedback/record` | event | `b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8` | [`event:feedback/record`](#persistence-type-eventfeedbackrecord) |
-| `event:goal/change` | event | `763c8a20af487263a0080548274f7437ef4a86e0ba8769127d1ced10a72c664d` | [`event:goal/change`](#persistence-type-eventgoalchange) |
-| `event:hook/invoked` | event | `8a6e1ec9e8db346b0e02f027db73c07a94f067a26d40c1aef1abd09c47ce7ba0` | [`event:hook/invoked`](#persistence-type-eventhookinvoked) |
-| `event:hook/result` | event | `e75916628f3f10c2d50658bd143052a46285fbf1a9a700ba54947614603d26b4` | [`event:hook/result`](#persistence-type-eventhookresult) |
-| `event:image/offload` | event | `b222069eea2d768065161c1147b1f2c78c1b54328c84b3586ae5c8f91b8ed35e` | [`event:image/offload`](#persistence-type-eventimageoffload) |
-| `event:llm/retry` | event | `525254db03b1d1e6b74cf55aced52817568331ac1f96c0818728910b6692e336` | [`event:llm/retry`](#persistence-type-eventllmretry) |
-| `event:llm/retry-started` | event | `48e5c9861f16ac07e78cb7b5ae9dabdf7bb85c58baed5a51b4ad275050ea58e3` | [`event:llm/retry-started`](#persistence-type-eventllmretry-started) |
-| `event:model/selection` | event | `35203ba7ad5ef6f97d556b85df20ae98f04f09c65748cecdf8eefdb8b6405ffc` | [`event:model/selection`](#persistence-type-eventmodelselection) |
-| `event:permission/preset` | event | `5c45bf4c544a7211dcd8ba6ba7e5f1bc39b49e7a9df9d5cbdc8e87c22771b37b` | [`event:permission/preset`](#persistence-type-eventpermissionpreset) |
-| `event:plan/mode` | event | `a7cf43ce7c2a4c038feed1885cd7a00d5c6ee2d90a7e0d56b46f78a3e1ca327f` | [`event:plan/mode`](#persistence-type-eventplanmode) |
-| `event:request/context` | event | `37cbc9cf06d494cfe5c67f078af1605eacb8e4c2c853e9e26455b73de0ee7ccf` | [`event:request/context`](#persistence-type-eventrequestcontext) |
-| `event:request/header` | event | `8ea13bcd983eab596dbfd41c5c2b62a0b318b71cd2a987a6fd752c6ced7e4489` | [`event:request/header`](#persistence-type-eventrequestheader) |
-| `event:sandbox/mode` | event | `516da4cdd6d2f1e5ce488e648578ca51f40e458f707b803e5b24de870e799415` | [`event:sandbox/mode`](#persistence-type-eventsandboxmode) |
-| `event:schedule/change` | event | `2a7f86849ae54b3398ee49661a757c4fcb59a6192b7036ee2ff514617e13fb42` | [`event:schedule/change`](#persistence-type-eventschedulechange) |
-| `event:session-log-deepseek/delivery-accepted` | event | `d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9` | [`event:session-log-deepseek/delivery-accepted`](#persistence-type-eventsession-log-deepseekdelivery-accepted) |
-| `event:session/end-seed` | event | `5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e` | [`event:session/end-seed`](#persistence-type-eventsessionend-seed) |
-| `event:session/title` | event | `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5` | [`event:session/title`](#persistence-type-eventsessiontitle) |
-| `event:session/title-llm-request` | event | `e0b5bf44c27bbfc6ab144239e3e4169c4d21146645e0e3121bbb359c3bc8591d` | [`event:session/title-llm-request`](#persistence-type-eventsessiontitle-llm-request) |
-| `event:step/end` | event | `e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05` | [`event:step/end`](#persistence-type-eventstepend) |
-| `event:step/start` | event | `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986` | [`event:step/start`](#persistence-type-eventstepstart) |
-| `event:subagent/catalog` | event | `ae1f7110feeec697b8cab42b68f7709aa7b3279764099dfb53c25890d2e5c871` | [`event:subagent/catalog`](#persistence-type-eventsubagentcatalog) |
-| `event:subagent/descriptor` | event | `b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5` | [`event:subagent/descriptor`](#persistence-type-eventsubagentdescriptor) |
-| `event:subagent/model-selection-policy` | event | `a6567ccb2e530606b775371eb4fa31468d72084339968e8b0440a516a23b39dc` | [`event:subagent/model-selection-policy`](#persistence-type-eventsubagentmodel-selection-policy) |
-| `event:system/message` | event | `69becfb6b2d3fd5da91518089454cae8ef33f1835637ec44dde35dd077fd4bae` | [`event:system/message`](#persistence-type-eventsystemmessage) |
-| `event:team/member` | event | `4fb59762612c3e3ac3a3bd4f84c9c148d3c3893bd422ba2b201cc039fabd49bc` | [`event:team/member`](#persistence-type-eventteammember) |
-| `event:team/message/delivered` | event | `48f9c19417a1abbedfa59f4667bba36b93ac2db407adf5e84cb3ba0de30942cb` | [`event:team/message/delivered`](#persistence-type-eventteammessagedelivered) |
-| `event:team/message/queued` | event | `443371ec07a03a82a0e93d93abca3e70b03bca55ba5b01d507030fcb66e8fbb4` | [`event:team/message/queued`](#persistence-type-eventteammessagequeued) |
-| `event:team/task` | event | `d595ec73b32b016a6055333c67a5d646032b22e672da1d4a09c5b1ae398a093a` | [`event:team/task`](#persistence-type-eventteamtask) |
-| `event:todo/write` | event | `b978cff734e62143eb56c9125423ec275405eda969802d42aaf73ecb987d3b26` | [`event:todo/write`](#persistence-type-eventtodowrite) |
-| `event:tool-workflow/agent-end` | event | `babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7` | [`event:tool-workflow/agent-end`](#persistence-type-eventtool-workflowagent-end) |
-| `event:tool-workflow/agent-start` | event | `5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627` | [`event:tool-workflow/agent-start`](#persistence-type-eventtool-workflowagent-start) |
-| `event:tool-workflow/run-end` | event | `42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f` | [`event:tool-workflow/run-end`](#persistence-type-eventtool-workflowrun-end) |
-| `event:tool-workflow/run-start` | event | `c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058` | [`event:tool-workflow/run-start`](#persistence-type-eventtool-workflowrun-start) |
-| `event:tool/call` | event | `3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48` | [`event:tool/call`](#persistence-type-eventtoolcall) |
-| `event:tool/ptc-dispatch` | event | `b33142af8176323ffbb20762541be81c1d51b60a60887803836e0b146e5bef0c` | [`event:tool/ptc-dispatch`](#persistence-type-eventtoolptc-dispatch) |
-| `event:tool/ptc-dispatch-start` | event | `ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93` | [`event:tool/ptc-dispatch-start`](#persistence-type-eventtoolptc-dispatch-start) |
-| `event:tool/result` | event | `29af48b840d0cd9e48b6f50bf3b354f8f6340607c5b99220a48e74f60beac9e2` | [`event:tool/result`](#persistence-type-eventtoolresult) |
-| `event:turn/end` | event | `0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce` | [`event:turn/end`](#persistence-type-eventturnend) |
-| `event:turn/start` | event | `aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8` | [`event:turn/start`](#persistence-type-eventturnstart) |
-| `event:user/message` | event | `314765bdff29c7862fb6ce820f1773563ba3094a680d163ea21180a2591b8578` | [`event:user/message`](#persistence-type-eventusermessage) |
-| `event:web/deepseek-search-llm-request` | event | `cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331` | [`event:web/deepseek-search-llm-request`](#persistence-type-eventwebdeepseek-search-llm-request) |
-| `event:workspace/changes` | event | `e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72` | [`event:workspace/changes`](#persistence-type-eventworkspacechanges) |
+| `SessionHeader` | header | `1a3440e3577382704d42a6263aa463504eb74c566734a55e9503a63efcd02445` | [`SessionHeader`](#persistence-type-sha256-1a3440e3577382704d42a6263aa463504eb74c566734a55e9503a63efcd02445) |
+| `JsonlHeaderLine` | header | `18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f` | [`HeaderLine`](#persistence-type-sha256-18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f) |
+| `SessionEventEnvelope` | envelope | `5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc` | [`union (3 variants)`](#persistence-type-sha256-5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc) |
+| `event:agent-preset/selected` | event | `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b` | [`{ type: "agent-preset/selected" }`](#persistence-type-sha256-a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b) |
+| `event:agent/inbox/spliced` | event | `646c2f1d243d3a78c5bc9305786fb340f5209c48a97e65f2a186cc5195491f3f` | [`{ type: "agent/inbox/spliced" }`](#persistence-type-sha256-646c2f1d243d3a78c5bc9305786fb340f5209c48a97e65f2a186cc5195491f3f) |
+| `event:approval/asked` | event | `3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1` | [`{ type: "approval/asked" }`](#persistence-type-sha256-3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1) |
+| `event:approval/decided` | event | `bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3` | [`{ type: "approval/decided" }`](#persistence-type-sha256-bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3) |
+| `event:approval/policy` | event | `26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78` | [`{ type: "approval/policy" }`](#persistence-type-sha256-26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78) |
+| `event:assistant/attempt` | event | `c80c89da83c46db7a454f034c10f969e03cfb574859c7316e5bff683f5a14b0e` | [`{ type: "assistant/attempt" }`](#persistence-type-sha256-c80c89da83c46db7a454f034c10f969e03cfb574859c7316e5bff683f5a14b0e) |
+| `event:assistant/message` | event | `1169b301aaabcd992657b93ec93750c43175dda81ada5cac086f14f2eaaeed6d` | [`{ type: "assistant/message" }`](#persistence-type-sha256-1169b301aaabcd992657b93ec93750c43175dda81ada5cac086f14f2eaaeed6d) |
+| `event:command/done` | event | `15196447222782e773eb943c92b18316ce96b9af0f0cfddb6e57ba8274ecc5ff` | [`{ type: "command/done" }`](#persistence-type-sha256-15196447222782e773eb943c92b18316ce96b9af0f0cfddb6e57ba8274ecc5ff) |
+| `event:command/run` | event | `37184378c6439257d105c4e2022d80fc9c3a3f7c7f6ac661b00bc9f18d871006` | [`{ type: "command/run" }`](#persistence-type-sha256-37184378c6439257d105c4e2022d80fc9c3a3f7c7f6ac661b00bc9f18d871006) |
+| `event:compaction/end` | event | `b0127044ab31a702bddfd785d345f5abd7a70876746e895ce443afa3e60ddf2d` | [`{ type: "compaction/end" }`](#persistence-type-sha256-b0127044ab31a702bddfd785d345f5abd7a70876746e895ce443afa3e60ddf2d) |
+| `event:compaction/prune` | event | `7f7fd5a6b0064f597534b29ff62ef26e786dffccf5e14f654a7d4fcea2c35f04` | [`{ type: "compaction/prune" }`](#persistence-type-sha256-7f7fd5a6b0064f597534b29ff62ef26e786dffccf5e14f654a7d4fcea2c35f04) |
+| `event:compaction/start` | event | `db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965` | [`{ type: "compaction/start" }`](#persistence-type-sha256-db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965) |
+| `event:compaction/summary` | event | `f6f3f30109e9008fccf7da2a3268a63da8646b59dd7cf7b75bcd9cf08ac08a59` | [`{ type: "compaction/summary" }`](#persistence-type-sha256-f6f3f30109e9008fccf7da2a3268a63da8646b59dd7cf7b75bcd9cf08ac08a59) |
+| `event:deliverables/presented` | event | `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176` | [`{ type: "deliverables/presented" }`](#persistence-type-sha256-13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176) |
+| `event:feedback/message-delete` | event | `3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796` | [`{ type: "feedback/message-delete" }`](#persistence-type-sha256-3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796) |
+| `event:feedback/message-put` | event | `b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf` | [`{ type: "feedback/message-put" }`](#persistence-type-sha256-b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf) |
+| `event:feedback/record` | event | `b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8` | [`{ type: "feedback/record" }`](#persistence-type-sha256-b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8) |
+| `event:goal/change` | event | `763c8a20af487263a0080548274f7437ef4a86e0ba8769127d1ced10a72c664d` | [`{ type: "goal/change" }`](#persistence-type-sha256-763c8a20af487263a0080548274f7437ef4a86e0ba8769127d1ced10a72c664d) |
+| `event:hook/invoked` | event | `8a6e1ec9e8db346b0e02f027db73c07a94f067a26d40c1aef1abd09c47ce7ba0` | [`{ type: "hook/invoked" }`](#persistence-type-sha256-8a6e1ec9e8db346b0e02f027db73c07a94f067a26d40c1aef1abd09c47ce7ba0) |
+| `event:hook/result` | event | `e75916628f3f10c2d50658bd143052a46285fbf1a9a700ba54947614603d26b4` | [`{ type: "hook/result" }`](#persistence-type-sha256-e75916628f3f10c2d50658bd143052a46285fbf1a9a700ba54947614603d26b4) |
+| `event:image/offload` | event | `b222069eea2d768065161c1147b1f2c78c1b54328c84b3586ae5c8f91b8ed35e` | [`{ type: "image/offload" }`](#persistence-type-sha256-b222069eea2d768065161c1147b1f2c78c1b54328c84b3586ae5c8f91b8ed35e) |
+| `event:llm/retry` | event | `525254db03b1d1e6b74cf55aced52817568331ac1f96c0818728910b6692e336` | [`{ type: "llm/retry" }`](#persistence-type-sha256-525254db03b1d1e6b74cf55aced52817568331ac1f96c0818728910b6692e336) |
+| `event:llm/retry-started` | event | `48e5c9861f16ac07e78cb7b5ae9dabdf7bb85c58baed5a51b4ad275050ea58e3` | [`{ type: "llm/retry-started" }`](#persistence-type-sha256-48e5c9861f16ac07e78cb7b5ae9dabdf7bb85c58baed5a51b4ad275050ea58e3) |
+| `event:model/selection` | event | `35203ba7ad5ef6f97d556b85df20ae98f04f09c65748cecdf8eefdb8b6405ffc` | [`{ type: "model/selection" }`](#persistence-type-sha256-35203ba7ad5ef6f97d556b85df20ae98f04f09c65748cecdf8eefdb8b6405ffc) |
+| `event:permission/preset` | event | `5c45bf4c544a7211dcd8ba6ba7e5f1bc39b49e7a9df9d5cbdc8e87c22771b37b` | [`{ type: "permission/preset" }`](#persistence-type-sha256-5c45bf4c544a7211dcd8ba6ba7e5f1bc39b49e7a9df9d5cbdc8e87c22771b37b) |
+| `event:plan/mode` | event | `a7cf43ce7c2a4c038feed1885cd7a00d5c6ee2d90a7e0d56b46f78a3e1ca327f` | [`{ type: "plan/mode" }`](#persistence-type-sha256-a7cf43ce7c2a4c038feed1885cd7a00d5c6ee2d90a7e0d56b46f78a3e1ca327f) |
+| `event:request/context` | event | `37cbc9cf06d494cfe5c67f078af1605eacb8e4c2c853e9e26455b73de0ee7ccf` | [`{ type: "request/context" }`](#persistence-type-sha256-37cbc9cf06d494cfe5c67f078af1605eacb8e4c2c853e9e26455b73de0ee7ccf) |
+| `event:request/header` | event | `8ea13bcd983eab596dbfd41c5c2b62a0b318b71cd2a987a6fd752c6ced7e4489` | [`{ type: "request/header" }`](#persistence-type-sha256-8ea13bcd983eab596dbfd41c5c2b62a0b318b71cd2a987a6fd752c6ced7e4489) |
+| `event:sandbox/mode` | event | `516da4cdd6d2f1e5ce488e648578ca51f40e458f707b803e5b24de870e799415` | [`{ type: "sandbox/mode" }`](#persistence-type-sha256-516da4cdd6d2f1e5ce488e648578ca51f40e458f707b803e5b24de870e799415) |
+| `event:schedule/change` | event | `2a7f86849ae54b3398ee49661a757c4fcb59a6192b7036ee2ff514617e13fb42` | [`{ type: "schedule/change" }`](#persistence-type-sha256-2a7f86849ae54b3398ee49661a757c4fcb59a6192b7036ee2ff514617e13fb42) |
+| `event:session-log-deepseek/delivery-accepted` | event | `d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9` | [`{ type: "session-log-deepseek/delivery-accepted" }`](#persistence-type-sha256-d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9) |
+| `event:session/end-seed` | event | `5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e` | [`{ type: "session/end-seed" }`](#persistence-type-sha256-5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e) |
+| `event:session/title` | event | `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5` | [`{ type: "session/title" }`](#persistence-type-sha256-1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5) |
+| `event:session/title-llm-request` | event | `e0b5bf44c27bbfc6ab144239e3e4169c4d21146645e0e3121bbb359c3bc8591d` | [`{ type: "session/title-llm-request" }`](#persistence-type-sha256-e0b5bf44c27bbfc6ab144239e3e4169c4d21146645e0e3121bbb359c3bc8591d) |
+| `event:step/end` | event | `e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05` | [`{ type: "step/end" }`](#persistence-type-sha256-e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05) |
+| `event:step/start` | event | `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986` | [`{ type: "step/start" }`](#persistence-type-sha256-4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986) |
+| `event:subagent/catalog` | event | `ae1f7110feeec697b8cab42b68f7709aa7b3279764099dfb53c25890d2e5c871` | [`{ type: "subagent/catalog" }`](#persistence-type-sha256-ae1f7110feeec697b8cab42b68f7709aa7b3279764099dfb53c25890d2e5c871) |
+| `event:subagent/descriptor` | event | `b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5` | [`{ type: "subagent/descriptor" }`](#persistence-type-sha256-b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5) |
+| `event:subagent/model-selection-policy` | event | `a6567ccb2e530606b775371eb4fa31468d72084339968e8b0440a516a23b39dc` | [`{ type: "subagent/model-selection-policy" }`](#persistence-type-sha256-a6567ccb2e530606b775371eb4fa31468d72084339968e8b0440a516a23b39dc) |
+| `event:system/message` | event | `69becfb6b2d3fd5da91518089454cae8ef33f1835637ec44dde35dd077fd4bae` | [`{ type: "system/message" }`](#persistence-type-sha256-69becfb6b2d3fd5da91518089454cae8ef33f1835637ec44dde35dd077fd4bae) |
+| `event:team/member` | event | `4fb59762612c3e3ac3a3bd4f84c9c148d3c3893bd422ba2b201cc039fabd49bc` | [`{ type: "team/member" }`](#persistence-type-sha256-4fb59762612c3e3ac3a3bd4f84c9c148d3c3893bd422ba2b201cc039fabd49bc) |
+| `event:team/message/delivered` | event | `48f9c19417a1abbedfa59f4667bba36b93ac2db407adf5e84cb3ba0de30942cb` | [`{ type: "team/message/delivered" }`](#persistence-type-sha256-48f9c19417a1abbedfa59f4667bba36b93ac2db407adf5e84cb3ba0de30942cb) |
+| `event:team/message/queued` | event | `443371ec07a03a82a0e93d93abca3e70b03bca55ba5b01d507030fcb66e8fbb4` | [`{ type: "team/message/queued" }`](#persistence-type-sha256-443371ec07a03a82a0e93d93abca3e70b03bca55ba5b01d507030fcb66e8fbb4) |
+| `event:team/task` | event | `d595ec73b32b016a6055333c67a5d646032b22e672da1d4a09c5b1ae398a093a` | [`{ type: "team/task" }`](#persistence-type-sha256-d595ec73b32b016a6055333c67a5d646032b22e672da1d4a09c5b1ae398a093a) |
+| `event:todo/write` | event | `b978cff734e62143eb56c9125423ec275405eda969802d42aaf73ecb987d3b26` | [`{ type: "todo/write" }`](#persistence-type-sha256-b978cff734e62143eb56c9125423ec275405eda969802d42aaf73ecb987d3b26) |
+| `event:tool-workflow/agent-end` | event | `babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7` | [`{ type: "tool-workflow/agent-end" }`](#persistence-type-sha256-babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7) |
+| `event:tool-workflow/agent-start` | event | `5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627` | [`{ type: "tool-workflow/agent-start" }`](#persistence-type-sha256-5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627) |
+| `event:tool-workflow/run-end` | event | `42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f` | [`{ type: "tool-workflow/run-end" }`](#persistence-type-sha256-42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f) |
+| `event:tool-workflow/run-start` | event | `c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058` | [`{ type: "tool-workflow/run-start" }`](#persistence-type-sha256-c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058) |
+| `event:tool/call` | event | `3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48` | [`{ type: "tool/call" }`](#persistence-type-sha256-3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48) |
+| `event:tool/ptc-dispatch` | event | `b33142af8176323ffbb20762541be81c1d51b60a60887803836e0b146e5bef0c` | [`{ type: "tool/ptc-dispatch" }`](#persistence-type-sha256-b33142af8176323ffbb20762541be81c1d51b60a60887803836e0b146e5bef0c) |
+| `event:tool/ptc-dispatch-start` | event | `ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93` | [`{ type: "tool/ptc-dispatch-start" }`](#persistence-type-sha256-ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93) |
+| `event:tool/result` | event | `29af48b840d0cd9e48b6f50bf3b354f8f6340607c5b99220a48e74f60beac9e2` | [`{ type: "tool/result" }`](#persistence-type-sha256-29af48b840d0cd9e48b6f50bf3b354f8f6340607c5b99220a48e74f60beac9e2) |
+| `event:turn/end` | event | `0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce` | [`{ type: "turn/end" }`](#persistence-type-sha256-0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce) |
+| `event:turn/start` | event | `aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8` | [`{ type: "turn/start" }`](#persistence-type-sha256-aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8) |
+| `event:user/message` | event | `314765bdff29c7862fb6ce820f1773563ba3094a680d163ea21180a2591b8578` | [`{ type: "user/message" }`](#persistence-type-sha256-314765bdff29c7862fb6ce820f1773563ba3094a680d163ea21180a2591b8578) |
+| `event:web/deepseek-search-llm-request` | event | `cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331` | [`{ type: "web/deepseek-search-llm-request" }`](#persistence-type-sha256-cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331) |
+| `event:workspace/changes` | event | `e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72` | [`{ type: "workspace/changes" }`](#persistence-type-sha256-e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72) |
## Event envelope
@@ -1264,39 +1264,7 @@ Source: [`packages/deliverables/workspace-changes/src/types.ts:106`](../packages
Each definition appears once. References preserve sharing and recursion; the digest beside a definition includes its complete reachable structure. Source names and locations identify its declarations but are excluded from its digest.
-
-
-### `0`
-
-SHA-256: `93d38436347f67c9022aacbc4472e283d722bcab8eb73fc376aaf7b6a6b9fb35`
-
-`0`
-
-
-
-### `1`
-
-SHA-256: `f88f1b7b6bb733f685f5fb6a8744a5db9199fa53c90463ea1a33bad51153671d`
-
-`1`
-
-
-
-### `2`
-
-SHA-256: `a0f906856fc06f1c6f2083eb970e5a657a82b1a84c06c095445e5d6d161cda80`
-
-`2`
-
-
-
-### `4`
-
-SHA-256: `af6e173f7be819bcd0a5c8d77918649c10ce761d8a184ff472f2e01ce64eb2e0`
-
-`4`
-
-
+
### `"aborted"`
@@ -1304,7 +1272,7 @@ SHA-256: `1e0b0b66b6f0c53fc72e52289d06b4708d776f1ca9df4c86a22bff621d403cf0`
`"aborted"`
-
+
### `"active"`
@@ -1312,7 +1280,7 @@ SHA-256: `c8e6f48878cc2a2f0dc59682280d81f407943fb503f32c64bf9ff3d9393c3eff`
`"active"`
-
+
### `"after"`
@@ -1320,7 +1288,7 @@ SHA-256: `5b232a9b9bfcc0fc6794dab7865bcf203a65785c5de5aa647a51228bff628413`
`"after"`
-
+
### `"agent-instructions"`
@@ -1328,7 +1296,7 @@ SHA-256: `fbd2c74b346a1595b376139c587fadd23e4a21acc9c0abce342975b6cfc60986`
`"agent-instructions"`
-
+
### `"agent-message"`
@@ -1336,7 +1304,7 @@ SHA-256: `82470020b5bfcb1a843e2aa05602af7d37df99e82d01f015c7c589ba054fd89d`
`"agent-message"`
-
+
### `"agent-preset/selected"`
@@ -1344,7 +1312,7 @@ SHA-256: `557e148d30b79ee48645850832b30c717d7c3b64641deb5d6133b8b4e91ee0b8`
`"agent-preset/selected"`
-
+
### `"agent/inbox/spliced"`
@@ -1352,7 +1320,7 @@ SHA-256: `829a2fb3be6efd4ba36aef8ed2d381a4c6fb2a0aaf50c823a6f3f8290786b809`
`"agent/inbox/spliced"`
-
+
### `"allowed-once"`
@@ -1360,7 +1328,7 @@ SHA-256: `811229eedcec57979dbadca7dbea832a59f8580cff30cb217fca5e2da16314bd`
`"allowed-once"`
-
+
### `"always"`
@@ -1368,7 +1336,7 @@ SHA-256: `142c37d302aa22a0a57915b5255939d3ca91c1811ca13fddcf84cf76ea00758a`
`"always"`
-
+
### `"append"`
@@ -1376,7 +1344,7 @@ SHA-256: `e438a9d4fb883b3e4a8d9fc8913aa1550ed50eb384bfbf943100a5605b537498`
`"append"`
-
+
### `"approval/asked"`
@@ -1384,7 +1352,7 @@ SHA-256: `cd186c309e2bef305705e1d324139240f5e681f4f6a957d6a25b0225f65560df`
`"approval/asked"`
-
+
### `"approval/decided"`
@@ -1392,7 +1360,7 @@ SHA-256: `378f90f9f6022a0991928a1eaf7991094ea1920fe89a9248358a1da106e1a970`
`"approval/decided"`
-
+
### `"approval/policy"`
@@ -1400,7 +1368,7 @@ SHA-256: `36d6a9a871d949ea4f3edd919d81d66aa69218bebef38899d2a1282c39420a1f`
`"approval/policy"`
-
+
### `"ask"`
@@ -1408,7 +1376,7 @@ SHA-256: `9e07693fd7cd9babe0688c22c986e4d519ae1c0e40eeea13b2dc583bed2abc86`
`"ask"`
-
+
### `"assistant"`
@@ -1416,7 +1384,7 @@ SHA-256: `95c0e88fcf0bafb2087f912ad9e2369de6ae6530cc0c4c2772c96205b57f7f60`
`"assistant"`
-
+
### `"assistant/attempt"`
@@ -1424,7 +1392,7 @@ SHA-256: `e95f957154b2b1b58692af53d4131180b6dd19e2264869f876dbaa959991494e`
`"assistant/attempt"`
-
+
### `"assistant/message"`
@@ -1432,7 +1400,7 @@ SHA-256: `6ab45ac76839722df912f3ba50f1c6b41f2d614bde11f1aabfae04117ccdc80d`
`"assistant/message"`
-
+
### `"at"`
@@ -1440,7 +1408,7 @@ SHA-256: `17aae616ef020b8b9f011ec398ec935450fb06d3e2a0722c456f63aeaf5ff728`
`"at"`
-
+
### `"block"`
@@ -1448,7 +1416,7 @@ SHA-256: `1e346446e183ee76f48d7994c97ecb302bddc682abb60b8a10ea0bb26223a69c`
`"block"`
-
+
### `"block-end"`
@@ -1456,7 +1424,7 @@ SHA-256: `eefbea819caeeea91ccb02dfafc16c68dd7f961cf9c1b2be25a2084509cf5c5a`
`"block-end"`
-
+
### `"block-start"`
@@ -1464,7 +1432,7 @@ SHA-256: `cbca49bde16b656d5b8fbe4a8a507769f7b594c6287782b809c03814941bc5e3`
`"block-start"`
-
+
### `"blocked"`
@@ -1472,15 +1440,7 @@ SHA-256: `254dce209e735f9cb6f6b7aec0354712b1611759ec02af4d35a96f2081e666f6`
`"blocked"`
-
-
-### `boolean`
-
-SHA-256: `aa93010d0e521ad7c42273f58d5c9b8bf1dfc94edf1b805a3971b364a35c1877`
-
-`boolean`
-
-
+
### `"canceled"`
@@ -1488,7 +1448,7 @@ SHA-256: `d4e4d575abeb4b72d616dc65c17ac0eaa943cc135609395044c38d5afcb10e31`
`"canceled"`
-
+
### `"cancelled"`
@@ -1496,7 +1456,7 @@ SHA-256: `2142e391b9ccb60d487afcf373ce74db98d952f69e8289eddb352a7e16e996c5`
`"cancelled"`
-
+
### `"catalog"`
@@ -1504,7 +1464,7 @@ SHA-256: `aec150797b655c5f15ebb7a501454b0c208fbaccec9ace49d7de2171fc02f47d`
`"catalog"`
-
+
### `"change"`
@@ -1512,7 +1472,7 @@ SHA-256: `f789af5ab844827eb5a4f357c0afae1eeed108c6c22d8ca1a56e586b349a7c85`
`"change"`
-
+
### `"chunk"`
@@ -1520,7 +1480,7 @@ SHA-256: `14230f9b8b5797bb7e8c621fa636531cfbde2ffba1ef5f1fd058216ff21952a0`
`"chunk"`
-
+
### `"claude-code"`
@@ -1528,7 +1488,7 @@ SHA-256: `aff60ef947c18b012644852bdd0d5bfe72065e061dd563787c76c646b4a10f6b`
`"claude-code"`
-
+
### `"clear"`
@@ -1536,7 +1496,7 @@ SHA-256: `e7e154d47d5fbc5366330fb4dade1f108c6dfe4335044d21ded14b7bf1dce084`
`"clear"`
-
+
### `"codex"`
@@ -1544,7 +1504,7 @@ SHA-256: `15495614ccfa9cbdeefb0ec2abd76406435f4c6ff3dae42acae8e09ef42025c9`
`"codex"`
-
+
### `"command/done"`
@@ -1552,7 +1512,7 @@ SHA-256: `8cdd3fdd295cee53035de16a1b23411716f75e9f994fe9510cac5d7fef605c76`
`"command/done"`
-
+
### `"command/run"`
@@ -1560,7 +1520,7 @@ SHA-256: `f1996af2602e6f62b5ab179ca5c4af00d8753938b74cc6ef102de09e99e74a7e`
`"command/run"`
-
+
### `"compaction/end"`
@@ -1568,7 +1528,7 @@ SHA-256: `1986c2664009c99155e44795676c887fa67f7c55cd2d5e6b648ff763e0ab033a`
`"compaction/end"`
-
+
### `"compaction/prune"`
@@ -1576,7 +1536,7 @@ SHA-256: `10e386801903f9d424602c31d3ff837a94aef623c8b391376d8d9e253525fabe`
`"compaction/prune"`
-
+
### `"compaction/start"`
@@ -1584,7 +1544,7 @@ SHA-256: `e2d0367e5716bc188435e51718ebff8ce873190625fa93b1c5331102d98758fa`
`"compaction/start"`
-
+
### `"compaction/summary"`
@@ -1592,7 +1552,7 @@ SHA-256: `ef4f00923b9edbae15c7ef05320280bf61147ca17146cf59690359bfd5e5da45`
`"compaction/summary"`
-
+
### `"complete"`
@@ -1600,7 +1560,7 @@ SHA-256: `d9196086e41e4dd5c2ce87f5c25529c8112a1731d258cf0728747d41a9ee3241`
`"complete"`
-
+
### `"completed"`
@@ -1608,7 +1568,7 @@ SHA-256: `1ebc6f9ff3aa9e3a38f8695f49bacdab1f8b7a3832741853ca46f40af56ccd01`
`"completed"`
-
+
### `"continuable"`
@@ -1616,7 +1576,7 @@ SHA-256: `e5d3828df1ec3e2a66879de0659e0f4866d9cfffc00825ee731a66f8a0c03d98`
`"continuable"`
-
+
### `"create"`
@@ -1624,7 +1584,7 @@ SHA-256: `7624ca28c61ca0eaa4f015140f3cea6e0c16cce2f2960fab5f531203d253903e`
`"create"`
-
+
### `"danger-full-access"`
@@ -1632,7 +1592,7 @@ SHA-256: `18fce9540bb20897a66275499faee6b8296c97e9901fa1ff45a191772448ad1a`
`"danger-full-access"`
-
+
### `"delegation"`
@@ -1640,7 +1600,7 @@ SHA-256: `76632533f67879dcb346fcae640540dbc89b2472b0bce88c59f7e48fc5c0e668`
`"delegation"`
-
+
### `"delete"`
@@ -1648,7 +1608,7 @@ SHA-256: `d0fbb0ca1bbba059830826f33f801da1aced35a2504376d61e020bdfec8d50c0`
`"delete"`
-
+
### `"deleted"`
@@ -1656,7 +1616,7 @@ SHA-256: `e7e8f1318170b8284f16ab45a557afd4675c96071c0f2a456636481dab20b427`
`"deleted"`
-
+
### `"deliverables/presented"`
@@ -1664,7 +1624,7 @@ SHA-256: `1a2718b00937b236a0d0910ef5dab2f9f8b65e4bde410cc21f15fbbf29f584d3`
`"deliverables/presented"`
-
+
### `"dispatch"`
@@ -1672,7 +1632,7 @@ SHA-256: `26c879bdd130e8b8683a6ce588414fad2244783d6573ca399fa0de184a2b0bb1`
`"dispatch"`
-
+
### `"disposed"`
@@ -1680,7 +1640,7 @@ SHA-256: `b38f206d59bad891fa58c89f97a0036987b3defe7685acbd318fa55eb85f9751`
`"disposed"`
-
+
### `"edit"`
@@ -1688,7 +1648,7 @@ SHA-256: `ad22a5ca5bbaab2e1440779cd3648e85ddfc6f73b5207394eda699555cf31430`
`"edit"`
-
+
### `"error"`
@@ -1696,2380 +1656,7 @@ SHA-256: `a2be0f0cb59f0d4a06557d45847d1938aced238baa77a6da416e590b8b958553`
`"error"`
-
-
-### `event:agent-preset/selected`
-
-SHA-256: `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:agent-preset/selected.data`](#persistence-type-eventagent-presetselecteddata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"agent-preset/selected"` |
-
-
-
-### `event:agent-preset/selected.data`
-
-SHA-256: `6e52dd55a1d48954ed5464ec46fe34d9eb65f709baabc9561e7a279910b0c406`
-
-Sources: [`packages/preset/agent-presets/src/session.ts:28`](../packages/preset/agent-presets/src/session.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `agentPreset` | required | `string` |
-
-
-
-### `event:agent/inbox/spliced`
-
-SHA-256: `646c2f1d243d3a78c5bc9305786fb340f5209c48a97e65f2a186cc5195491f3f`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:agent/inbox/spliced.data`](#persistence-type-eventagentinboxspliceddata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"agent/inbox/spliced"` |
-
-
-
-### `event:agent/inbox/spliced.data`
-
-SHA-256: `a6a195c1b4a906d953d24ab5864c9f1881d545460e080a51144adfc9cb058cfe`
-
-Sources: [`packages/core/agent/src/types.ts:87`](../packages/core/agent/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `inserted` | required | [`event:agent/inbox/spliced.data.inserted`](#persistence-type-eventagentinboxspliceddatainserted) |
-| `outcome` | optional | `"canceled"` |
-| `removedCount` | optional | `number` |
-| `start` | required | `number` |
-| `target` | required | [`packages/core/agent/src/types.ts#InboxTarget`](#persistence-type-packagescoreagentsrctypestsinboxtarget) |
-
-
-
-### `event:agent/inbox/spliced.data.inserted`
-
-SHA-256: `300341f890f7b9506a1749fff4fa5239d16ea1c63ff6b15851acb03c20f3b48d`
-
-Array of [`packages/llm/llm/src/message.ts#UserMessage`](#persistence-type-packagesllmllmsrcmessagetsusermessage).
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].content`
-
-SHA-256: `bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75`
-
-Array of [`packages/llm/llm/src/types.ts#ContentBlock`](#persistence-type-packagesllmllmsrctypestscontentblock).
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].content[0][2].attachment.originalDimensions`
-
-SHA-256: `0f46153645c297846a3fad3911636659ca4717a5e7d71c9f50bffacd312115ef`
-
-Sources: [`packages/attachment/attachment/src/types.ts:28`](../packages/attachment/attachment/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `height` | required | `number` |
-| `width` | required | `number` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[0]`
-
-SHA-256: `ada310bf0bdb8fed51f3b56ea63f6ea6b18bbd587f04fccb63a14ab0b2a24e05`
-
-Sources: [`packages/core/session/src/types.ts:189`](../packages/core/session/src/types.ts) · [`packages/interaction/commands/src/types.ts:75`](../packages/interaction/commands/src/types.ts) · [`packages/interaction/commands/src/types.ts:79`](../packages/interaction/commands/src/types.ts) · [`packages/llm/llm/src/message.ts:103`](../packages/llm/llm/src/message.ts) · [`packages/session/session-title/src/types.ts:35`](../packages/session/session-title/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `kind` | required | `"user"` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[1]`
-
-SHA-256: `0ddab4577db37a3e0d9e3a91761735c8ef6f5629d526ab8ecaeeea19c097c8f8`
-
-| Property | Presence | Type |
-|---|---|---|
-| `kind` | required | `"plugin"` |
-| `plugin` | required | `string` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[11]`
-
-SHA-256: `6a4f72e2e179e17b922f2a9392c0e1c8f8c707f32494372454850a3eb184a6e7`
-
-Sources: [`packages/api/session-controller/src/types.ts:385`](../packages/api/session-controller/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `clientTimeZone` | optional | `string` |
-| `kind` | required | `"user"` |
-| `rpcId` | required | `string` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[15].references`
-
-SHA-256: `df843efd87c78cf8de98f8e0d0216956cd568d0d0e56a22c853663e274aa1a18`
-
-Array of [`event:agent/inbox/spliced.data.inserted[0].source[15].references[0]`](#persistence-type-eventagentinboxspliceddatainserted0source15references0).
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[15].references[0]`
-
-SHA-256: `4f91f187baeabef5c7950c4780d31bbe39f3345dff591a6cf26ac7e135ac1cf4`
-
-Sources: [`packages/context/session-reference/src/types.ts:18`](../packages/context/session-reference/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `capturedFormatVersion` | optional | `number` |
-| `capturedThroughSeq` | required | [`event:compaction/end.data.turn`](#persistence-type-eventcompactionenddataturn) |
-| `compacted` | required | `boolean` |
-| `inputIndex` | required | `number` |
-| `label` | required | `string` |
-| `omittedBytes` | required | `number` |
-| `omittedMessages` | required | `number` |
-| `originalMessages` | required | `number` |
-| `retainedMessages` | required | `number` |
-| `sessionId` | required | `string` |
-| `truncated` | required | `boolean` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[16].changes`
-
-SHA-256: `2ab12a0e345658f9342816d773fe610f049982bcad82631f43b9205abe43e5ee`
-
-Array of [`packages/context/agent-instructions/src/render.ts#AgentInstructionChange`](#persistence-type-packagescontextagent-instructionssrcrendertsagentinstructionchange).
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[16].changes[0].action`
-
-SHA-256: `904bf499d98be4a3a5f836fcac533b6c4899569b018071e6604e1d32657d00fd`
-
-One of:
-
-- `"remove"`
-- `"replace"`
-- `"set"`
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[17].entries`
-
-SHA-256: `aba175fb20ffc71112c55efe70458ff5d7dbfb83501892b4ba8d077f0ea5d7ba`
-
-Array of [`event:agent/inbox/spliced.data.inserted[0].source[17].entries[0]`](#persistence-type-eventagentinboxspliceddatainserted0source17entries0).
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[17].entries[0]`
-
-SHA-256: `83079c8a3f733ac3fa603eefa0fbb4737ca4d8b69e7e2e7298b60f9ac4098693`
-
-Sources: [`packages/skill/tool-skill/src/index.ts:40`](../packages/skill/tool-skill/src/index.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `description` | required | `string` |
-| `name` | required | `string` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[19]`
-
-SHA-256: `9edc162949abf93bd5ff049191b345454ba104f583937ce5580fb50f067d2b94`
-
-Sources: [`packages/webhook/webhook/src/types.ts:74`](../packages/webhook/webhook/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `deliveryId` | required | `string` |
-| `form` | required | `"notice"` |
-| `kind` | required | `"webhook"` |
-| `provider` | required | `string` |
-| `ruleId` | required | `string` |
-| `source` | required | `string` |
-| `summary` | required | `string` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[2]`
-
-SHA-256: `dda6e111a8ccfc12f6e742e977a1a4e3549e8c03732a5ff6c8d7c3d4bcb7a412`
-
-| Property | Presence | Type |
-|---|---|---|
-| `form` | required | `"instructions"` |
-| `kind` | required | `"plugin"` |
-| `plugin` | required | `string` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[3]`
-
-SHA-256: `2f90a7b3646fea3e677bd7b4000aa96f3b8964f107b614e204e11ad4051c24fc`
-
-| Property | Presence | Type |
-|---|---|---|
-| `form` | required | `"catalog"` |
-| `kind` | required | `"plugin"` |
-| `plugin` | required | `string` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[4]`
-
-SHA-256: `e8d26e6993445743e6c4342c31b284c7d8f5574369abdd6021183af1a6b3538f`
-
-| Property | Presence | Type |
-|---|---|---|
-| `form` | required | `"snapshot"` |
-| `kind` | required | `"plugin"` |
-| `plugin` | required | `string` |
-| `sections` | required | [`event:agent/inbox/spliced.data.inserted[0].source[4].sections`](#persistence-type-eventagentinboxspliceddatainserted0source4sections) |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[4].sections`
-
-SHA-256: `c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262`
-
-Array of [`packages/llm/llm/src/message.ts#ContextSnapshotSection`](#persistence-type-packagesllmllmsrcmessagetscontextsnapshotsection).
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[5]`
-
-SHA-256: `b4d298d90c798fa4d1f5b030ce3ce8031c4c41beafdb05323bec8b2a06903b43`
-
-| Property | Presence | Type |
-|---|---|---|
-| `form` | required | `"notice"` |
-| `kind` | required | `"plugin"` |
-| `plugin` | required | `string` |
-| `summary` | required | `string` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[6]`
-
-SHA-256: `2ce7ef3b3daebf95815c7ae454a751d3e67ca7a22e2e0734fe2942df393bb66c`
-
-| Property | Presence | Type |
-|---|---|---|
-| `form` | required | `"relay"` |
-| `kind` | required | `"plugin"` |
-| `plugin` | required | `string` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[7]`
-
-SHA-256: `85e1bd563d6c80c1f377f99f91103fec4e315148a7330f3b3dae7c2d04e33b01`
-
-| Property | Presence | Type |
-|---|---|---|
-| `form` | required | `"recall"` |
-| `kind` | required | `"plugin"` |
-| `plugin` | required | `string` |
-
-
-
-### `event:approval/asked`
-
-SHA-256: `3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:approval/asked.data`](#persistence-type-eventapprovalaskeddata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"approval/asked"` |
-
-
-
-### `event:approval/asked.data`
-
-SHA-256: `45f2a07ea94573123b6ae14db787a40062dec3834f36d8be92c523d40ba28448`
-
-Sources: [`packages/interaction/user-approval/src/types.ts:44`](../packages/interaction/user-approval/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `callId` | optional | `string` |
-| `id` | required | `string` |
-| `reason` | optional | `string` |
-| `toolName` | required | `string` |
-
-
-
-### `event:approval/decided`
-
-SHA-256: `bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:approval/decided.data`](#persistence-type-eventapprovaldecideddata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"approval/decided"` |
-
-
-
-### `event:approval/decided.data`
-
-SHA-256: `93cbbc5a7fd0b1aa1ff1b9a6bb5ec52b073f48e5a5200365c45c0cd54059e1b9`
-
-Sources: [`packages/interaction/user-approval/src/types.ts:55`](../packages/interaction/user-approval/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `id` | required | `string` |
-| `outcome` | required | [`packages/interaction/user-approval/src/types.ts#ApprovalOutcome`](#persistence-type-packagesinteractionuser-approvalsrctypestsapprovaloutcome) |
-
-
-
-### `event:approval/policy`
-
-SHA-256: `26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:approval/policy.data`](#persistence-type-eventapprovalpolicydata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"approval/policy"` |
-
-
-
-### `event:approval/policy.data`
-
-SHA-256: `11f70b595aa76897fc4e25a352bfa718c659f44b799e5aa14e84e5a38fe72912`
-
-Sources: [`packages/interaction/user-approval/src/index.ts:33`](../packages/interaction/user-approval/src/index.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `policy` | required | [`packages/interaction/user-approval/src/index.ts#ApprovalPolicy`](#persistence-type-packagesinteractionuser-approvalsrcindextsapprovalpolicy) |
-| `source` | optional | `"delegation"` |
-
-
-
-### `event:assistant/attempt`
-
-SHA-256: `c80c89da83c46db7a454f034c10f969e03cfb574859c7316e5bff683f5a14b0e`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:assistant/attempt.data`](#persistence-type-eventassistantattemptdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"assistant/attempt"` |
-
-
-
-### `event:assistant/attempt.data`
-
-SHA-256: `0c6412d3ba5e41adfaa6929c7d4093f2d52d8598c03f35844fc0d55e3070a3b1`
-
-Sources: [`packages/core/session/src/types.ts:342`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `step` | required | `number` |
-| `stream` | required | [`event:assistant/attempt.data.stream`](#persistence-type-eventassistantattemptdatastream) |
-| `turn` | required | `number` |
-
-
-
-### `event:assistant/attempt.data.stream`
-
-SHA-256: `26f3bb7529cfce1e3a0f1ededa365d8b426758ca0feeb0beabeee805f8bb8346`
-
-Array of [`packages/llm/llm/src/assistant-stream.ts#AssistantStreamRecord`](#persistence-type-packagesllmllmsrcassistant-streamtsassistantstreamrecord).
-
-
-
-### `event:assistant/attempt.data.stream[0][0]`
-
-SHA-256: `e72269f931559e901e5e8fe1cfcbd0669fb795f43cc038ff39fba62f60403c33`
-
-Sources: [`packages/llm/llm/src/assistant-stream.ts:21`](../packages/llm/llm/src/assistant-stream.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `dt` | required | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `index` | required | `number` |
-| `texts` | required | [`event:assistant/attempt.data.stream[0][0].texts`](#persistence-type-eventassistantattemptdatastream00texts) |
-| `time0` | required | `number` |
-| `type` | required | `"text-chunks"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][0].texts`
-
-SHA-256: `93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2`
-
-Array of `string`.
-
-
-
-### `event:assistant/attempt.data.stream[0][1]`
-
-SHA-256: `71bb3254ec8f1e491ce63b762a7b5f18709de23aa4e8abcc8b886f4b6ce051dd`
-
-Sources: [`packages/llm/llm/src/assistant-stream.ts:28`](../packages/llm/llm/src/assistant-stream.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `dt` | required | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `index` | required | `number` |
-| `texts` | required | [`event:assistant/attempt.data.stream[0][0].texts`](#persistence-type-eventassistantattemptdatastream00texts) |
-| `time0` | required | `number` |
-| `type` | required | `"reasoning-chunks"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][2]`
-
-SHA-256: `3860b4757d512a2869be833acb0faf834335b1b056bf3f83df5474dce95f8fa6`
-
-Sources: [`packages/llm/llm/src/assistant-stream.ts:35`](../packages/llm/llm/src/assistant-stream.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `args` | required | [`event:assistant/attempt.data.stream[0][0].texts`](#persistence-type-eventassistantattemptdatastream00texts) |
-| `dt` | required | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `id` | required | `string` |
-| `index` | required | `number` |
-| `name` | optional | `string` |
-| `time0` | required | `number` |
-| `type` | required | `"tool-call-chunks"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3]`
-
-SHA-256: `c93b6f51b399607349b4bcc66b58e848a44250ffc1e2537207bd092dfff94192`
-
-Sources: [`packages/llm/llm/src/assistant-stream.ts:44`](../packages/llm/llm/src/assistant-stream.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `chunk` | required | [`packages/llm/llm/src/types.ts#StreamChunk`](#persistence-type-packagesllmllmsrctypestsstreamchunk) |
-| `time` | required | `number` |
-| `type` | required | `"chunk"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[0]`
-
-SHA-256: `647cb2e3aeb58e27d1d4d60011f208bb66dce257e8654193c533b47c4c22c253`
-
-Sources: [`packages/llm/llm/src/types.ts:427`](../packages/llm/llm/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `blockType` | required | [`packages/llm/llm/src/types.ts#ContentBlockType`](#persistence-type-packagesllmllmsrctypestscontentblocktype) |
-| `index` | required | `number` |
-| `type` | required | `"block-start"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[1]`
-
-SHA-256: `95080295115fbd83544520ba247b68a03790131f6a2eac323d388758cb542f65`
-
-Sources: [`packages/llm/llm/src/types.ts:428`](../packages/llm/llm/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `index` | required | `number` |
-| `text` | required | `string` |
-| `type` | required | `"text-delta"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[2]`
-
-SHA-256: `2abb711460e6238d851c30f3e4bdd87a2aa1887ee70575b3d3b7b25610673095`
-
-Sources: [`packages/llm/llm/src/types.ts:429`](../packages/llm/llm/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `index` | required | `number` |
-| `text` | required | `string` |
-| `type` | required | `"reasoning-delta"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[3]`
-
-SHA-256: `88a610b831be6d92612a464be5c7d0b88ec24d97bd299837bf74bf7672183c9a`
-
-Sources: [`packages/llm/llm/src/types.ts:430`](../packages/llm/llm/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `argumentsDelta` | required | `string` |
-| `id` | required | `string` |
-| `index` | required | `number` |
-| `name` | optional | `string` |
-| `type` | required | `"tool-call-delta"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[4]`
-
-SHA-256: `90c811b8c2668898515e69a24e82caffeb08517f9c7aa193867ff0380f3b535d`
-
-Sources: [`packages/llm/llm/src/types.ts:431`](../packages/llm/llm/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `block` | required | [`packages/llm/llm/src/types.ts#ContentBlock`](#persistence-type-packagesllmllmsrctypestscontentblock) |
-| `index` | required | `number` |
-| `type` | required | `"block-end"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[5]`
-
-SHA-256: `f1a96afe7503ac1817de769cd0ba13d9b80111c7034c50106b3344ecc14cc515`
-
-Sources: [`packages/llm/llm/src/types.ts:432`](../packages/llm/llm/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `type` | required | `"usage"` |
-| `usage` | required | [`packages/llm/llm/src/types.ts#TokenUsage`](#persistence-type-packagesllmllmsrctypeststokenusage) |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[6]`
-
-SHA-256: `a2b49331716ba0a7078b026d145306a70eae64b7313c3e6204bd931e75ec3bb1`
-
-Sources: [`packages/llm/llm/src/types.ts:433`](../packages/llm/llm/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `reason` | required | [`packages/llm/llm/src/types.ts#FinishReason`](#persistence-type-packagesllmllmsrctypestsfinishreason) |
-| `replayState` | optional | [`packages/llm/llm/src/types.ts#ReplayEnvelope`](#persistence-type-packagesllmllmsrctypestsreplayenvelope) |
-| `type` | required | `"finish"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[6].reason[0]`
-
-SHA-256: `8e31bb958e9b015e6f8407eaade32217068159e816f3cc99c3ad76eb889732e0`
-
-Sources: [`packages/llm/llm/src/types.ts:147`](../packages/llm/llm/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `failure` | required | [`packages/llm/llm/src/types.ts#LlmFailure`](#persistence-type-packagesllmllmsrctypestsllmfailure) |
-| `kind` | required | `"aborted"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[6].reason[1]`
-
-SHA-256: `693f4952fb5565da96c06bace8924b098ac2fbc915fde0ff8019701183abc057`
-
-Sources: [`packages/llm/llm/src/types.ts:148`](../packages/llm/llm/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `failure` | required | [`packages/llm/llm/src/types.ts#LlmFailure`](#persistence-type-packagesllmllmsrctypestsllmfailure) |
-| `kind` | required | `"error"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[6].reason[2]`
-
-SHA-256: `ab7ec5f9eb2c6dfacca5da4c37cf7ba85d04172053ee6b1ebf1709ffcd99c1a7`
-
-Sources: [`packages/core/session/src/types.ts:213`](../packages/core/session/src/types.ts) · [`packages/llm/llm/src/types.ts:146`](../packages/llm/llm/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `kind` | required | `"max-tokens"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[6].reason[3]`
-
-SHA-256: `1d76406cbb2ddadb0dbbb51e9d8bc6cf678fed455cf8eb512f36f7c86d37a62f`
-
-Sources: [`packages/llm/llm/src/types.ts:144`](../packages/llm/llm/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `kind` | required | `"stop"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[6].reason[4]`
-
-SHA-256: `287211846beea1eccb5f9acee00d20388a38fcb2e95858fa2332d6f58529379a`
-
-Sources: [`packages/llm/llm/src/types.ts:145`](../packages/llm/llm/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `kind` | required | `"tool-calls"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[6].replayState.blocks`
-
-SHA-256: `b1664fa89f8eab49a14e7e3168d8bc4da4aa9fd76332f6c4a053d839e5276ae7`
-
-Array of `unknown` (opaque).
-
-
-
-### `event:assistant/message`
-
-SHA-256: `1169b301aaabcd992657b93ec93750c43175dda81ada5cac086f14f2eaaeed6d`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:assistant/message.data`](#persistence-type-eventassistantmessagedata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `surfaceOp` | required | [`packages/core/session/src/types.ts#SurfaceOp`](#persistence-type-packagescoresessionsrctypestssurfaceop) |
-| `time` | required | `number` |
-| `type` | required | `"assistant/message"` |
-
-
-
-### `event:assistant/message.data`
-
-SHA-256: `77b8491f946edfc8cc77ebae3ba49183759da31ba2dfa83d4c9e9e618c4b91d2`
-
-Sources: [`packages/core/session/src/types.ts:328`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `interrupted` | optional | `true` |
-| `message` | required | [`packages/llm/llm/src/message.ts#AssistantMessage`](#persistence-type-packagesllmllmsrcmessagetsassistantmessage) |
-| `step` | required | `number` |
-| `stream` | required | [`event:assistant/attempt.data.stream`](#persistence-type-eventassistantattemptdatastream) |
-| `turn` | required | `number` |
-| `usage` | optional | [`packages/llm/llm/src/types.ts#TokenUsage`](#persistence-type-packagesllmllmsrctypeststokenusage) |
-
-
-
-### `event:command/done`
-
-SHA-256: `15196447222782e773eb943c92b18316ce96b9af0f0cfddb6e57ba8274ecc5ff`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:command/done.data`](#persistence-type-eventcommanddonedata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"command/done"` |
-
-
-
-### `event:command/done.data`
-
-SHA-256: `5b6fb1f226ff56402db08a6aae82af76100b14056271875f69ec526a1ae05d51`
-
-Sources: [`packages/interaction/commands/src/types.ts:112`](../packages/interaction/commands/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `commandId` | required | `string` |
-| `kind` | required | [`event:command/done.data.kind`](#persistence-type-eventcommanddonedatakind) |
-| `sourceEventSeq` | optional | `number` |
-| `text` | optional | `string` |
-
-
-
-### `event:command/done.data.kind`
-
-SHA-256: `1ab2ef1296f157ba96998f179bb5daa9d21a82480da2901127aeab2730797c92`
-
-One of:
-
-- `"error"`
-- `"success"`
-
-
-
-### `event:command/run`
-
-SHA-256: `37184378c6439257d105c4e2022d80fc9c3a3f7c7f6ac661b00bc9f18d871006`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:command/run.data`](#persistence-type-eventcommandrundata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"command/run"` |
-
-
-
-### `event:command/run.data`
-
-SHA-256: `a853902cfab417b8f08aa51ad6855fea46f34ed4588a74e47403035111d0fb86`
-
-Sources: [`packages/interaction/commands/src/types.ts:105`](../packages/interaction/commands/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `args` | optional | `string` |
-| `commandId` | required | `string` |
-| `name` | required | `string` |
-| `source` | required | [`event:agent/inbox/spliced.data.inserted[0].source[0]`](#persistence-type-eventagentinboxspliceddatainserted0source0) |
-
-
-
-### `event:compaction/end`
-
-SHA-256: `b0127044ab31a702bddfd785d345f5abd7a70876746e895ce443afa3e60ddf2d`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:compaction/end.data`](#persistence-type-eventcompactionenddata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"compaction/end"` |
-
-
-
-### `event:compaction/end.data`
-
-SHA-256: `ca59530d1a4f3e191b4032bc4a20eded0d827db8b5a7efb27b3af9e9b456c6f2`
-
-Sources: [`packages/compaction/compaction/src/types.ts:72`](../packages/compaction/compaction/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `compactionId` | required | `string` |
-| `error` | optional | `string` |
-| `sourceCommandId` | optional | `string` |
-| `turn` | required | [`event:compaction/end.data.turn`](#persistence-type-eventcompactionenddataturn) |
-
-
-
-### `event:compaction/end.data.turn`
-
-SHA-256: `3bd652ebfa8726b3ce3937a4f1bd2759e02f86b3a08a20f9e41a8513656fbc5f`
-
-Sources: [`packages/core/session/src/types.ts:64`](../packages/core/session/src/types.ts)
-
-One of:
-
-- `null`
-- `number`
-
-
-
-### `event:compaction/prune`
-
-SHA-256: `7f7fd5a6b0064f597534b29ff62ef26e786dffccf5e14f654a7d4fcea2c35f04`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:compaction/prune.data`](#persistence-type-eventcompactionprunedata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"compaction/prune"` |
-
-
-
-### `event:compaction/prune.data`
-
-SHA-256: `5dd766ccd1702a1142ad8b4bd44f2242f8e8a6752669ad3de0a5d224329b1438`
-
-Sources: [`packages/compaction/compaction/src/types.ts:82`](../packages/compaction/compaction/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `shadowedRange` | required | [`event:compaction/prune.data.shadowedRange`](#persistence-type-eventcompactionprunedatashadowedrange) |
-| `shadowedSeqs` | required | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `shadowedTokenCount` | required | `number` |
-
-
-
-### `event:compaction/prune.data.shadowedRange`
-
-SHA-256: `9e41386b3a0c9572b0d63078492ebb3997da7d3a830d44e0259418bd02f4bcb2`
-
-Sources: [`packages/compaction/compaction/src/types.ts:38`](../packages/compaction/compaction/src/types.ts) · [`packages/compaction/compaction/src/types.ts:84`](../packages/compaction/compaction/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `end` | required | `number` |
-| `start` | required | `number` |
-
-
-
-### `event:compaction/start`
-
-SHA-256: `db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:compaction/start.data`](#persistence-type-eventcompactionstartdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"compaction/start"` |
-
-
-
-### `event:compaction/start.data`
-
-SHA-256: `3e4e7683b0192c9f0e6a75c59076108f017892cdb302a98032c2632fd79c356f`
-
-Sources: [`packages/compaction/compaction/src/types.ts:24`](../packages/compaction/compaction/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `compactionId` | required | `string` |
-| `sourceCommandId` | optional | `string` |
-| `turn` | required | [`event:compaction/end.data.turn`](#persistence-type-eventcompactionenddataturn) |
-
-
-
-### `event:compaction/summary`
-
-SHA-256: `f6f3f30109e9008fccf7da2a3268a63da8646b59dd7cf7b75bcd9cf08ac08a59`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:compaction/summary.data`](#persistence-type-eventcompactionsummarydata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"compaction/summary"` |
-
-
-
-### `event:compaction/summary.data`
-
-SHA-256: `feb329074f0206ecc06d8a1aa0a0b3e2f47fd27524ba020fbc849ba63e938896`
-
-One of:
-
-- [`event:compaction/summary.data[0]`](#persistence-type-eventcompactionsummarydata0)
-- [`event:compaction/summary.data[1]`](#persistence-type-eventcompactionsummarydata1)
-
-
-
-### `event:compaction/summary.data[0]`
-
-SHA-256: `9ff2ad8dddb836f75e8f6197fff2371323dfc396c3c6fb667e6e0b42fda79a5c`
-
-| Property | Presence | Type |
-|---|---|---|
-| `compactionId` | required | `string` |
-| `llmStreamCall` | required | `true` |
-| `maxTokens` | optional | `number` |
-| `model` | required | `string` |
-| `provider` | required | `string` |
-| `rawOutput` | required | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `shadowedRange` | required | [`event:compaction/prune.data.shadowedRange`](#persistence-type-eventcompactionprunedatashadowedrange) |
-| `shadowedSeqs` | required | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `shadowedTokenCount` | required | `number` |
-| `sourceCommandId` | optional | `string` |
-| `summary` | required | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `usage` | optional | [`packages/llm/llm/src/types.ts#TokenUsage`](#persistence-type-packagesllmllmsrctypeststokenusage) |
-
-
-
-### `event:compaction/summary.data[1]`
-
-SHA-256: `3aa261c8516b5c955ed12080e6257a56cbe513f6c9f0ac9274c12e96c196ebca`
-
-| Property | Presence | Type |
-|---|---|---|
-| `compactionId` | required | `string` |
-| `maxTokens` | optional | `number` |
-| `model` | required | `string` |
-| `provider` | required | `string` |
-| `rawOutput` | optional | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `shadowedRange` | required | [`event:compaction/prune.data.shadowedRange`](#persistence-type-eventcompactionprunedatashadowedrange) |
-| `shadowedSeqs` | required | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `shadowedTokenCount` | required | `number` |
-| `sourceCommandId` | optional | `string` |
-| `summary` | required | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `usage` | optional | [`packages/llm/llm/src/types.ts#TokenUsage`](#persistence-type-packagesllmllmsrctypeststokenusage) |
-
-
-
-### `event:deliverables/presented`
-
-SHA-256: `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:deliverables/presented.data`](#persistence-type-eventdeliverablespresenteddata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"deliverables/presented"` |
-
-
-
-### `event:deliverables/presented.data`
-
-SHA-256: `1528539c63db8b23506f0209a99ce77d8ad138adfbfcee3d4769b7382d93756c`
-
-Sources: [`packages/deliverables/tool-present/src/types.ts:15`](../packages/deliverables/tool-present/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `callId` | required | `string` |
-| `files` | required | [`event:deliverables/presented.data.files`](#persistence-type-eventdeliverablespresenteddatafiles) |
-| `turn` | required | `number` |
-
-
-
-### `event:deliverables/presented.data.files`
-
-SHA-256: `1d9cb3caa96100b18b1911fa3ff8c751ef6992971a03c5f4d9aefc1a0004a345`
-
-Array of [`packages/deliverables/tool-present/src/types.ts#PresentedFile`](#persistence-type-packagesdeliverablestool-presentsrctypestspresentedfile).
-
-
-
-### `event:feedback/message-delete`
-
-SHA-256: `3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/feedback/message-feedback/src/types.ts#MessageFeedbackDelete`](#persistence-type-packagesfeedbackmessage-feedbacksrctypestsmessagefeedbackdelete) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"feedback/message-delete"` |
-
-
-
-### `event:feedback/message-put`
-
-SHA-256: `b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/feedback/message-feedback/src/types.ts#MessageFeedbackPut`](#persistence-type-packagesfeedbackmessage-feedbacksrctypestsmessagefeedbackput) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"feedback/message-put"` |
-
-
-
-### `event:feedback/message-put.data.item.category`
-
-SHA-256: `3305a4bb6b6c29b482ba91d59c60b47e8f98282d3dacc8c29e4a4c2712209bdd`
-
-One of:
-
-- `"instruction-following"`
-- `"other"`
-- `"product-interaction"`
-- `"resource-cost"`
-- `"security-privacy-permission"`
-- `"service-stability"`
-- `"task-result"`
-
-
-
-### `event:feedback/record`
-
-SHA-256: `b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/feedback/command-feedback/src/types.ts#FeedbackRecord`](#persistence-type-packagesfeedbackcommand-feedbacksrctypestsfeedbackrecord) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"feedback/record"` |
-
-
-
-### `event:goal/change`
-
-SHA-256: `763c8a20af487263a0080548274f7437ef4a86e0ba8769127d1ced10a72c664d`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/goal/goal/src/domain.ts#GoalChangeMeta`](#persistence-type-packagesgoalgoalsrcdomaintsgoalchangemeta) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"goal/change"` |
-
-
-
-### `event:goal/change.data[0].operation`
-
-SHA-256: `62e6a429ff3f390a46ac39fb468692032f42936ca0db19b53454184189401379`
-
-One of:
-
-- `"block"`
-- `"complete"`
-- `"create"`
-- `"edit"`
-- `"pause"`
-- `"resume"`
-
-
-
-### `event:hook/invoked`
-
-SHA-256: `8a6e1ec9e8db346b0e02f027db73c07a94f067a26d40c1aef1abd09c47ce7ba0`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:hook/invoked.data`](#persistence-type-eventhookinvokeddata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"hook/invoked"` |
-
-
-
-### `event:hook/invoked.data`
-
-SHA-256: `119abe2b9c0b2f46ecb31d82b9acba4d4b30e049f655e2475e8b4ae12d5a9e25`
-
-Sources: [`packages/hooks/hook-protocol/src/types.ts:19`](../packages/hooks/hook-protocol/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `dialect` | required | [`packages/hooks/hook-protocol/src/types.ts#HookDialect`](#persistence-type-packageshookshook-protocolsrctypestshookdialect) |
-| `handlerId` | required | `string` |
-| `matcher` | optional | `string` |
-| `point` | required | `string` |
-| `turn` | required | `number` |
-
-
-
-### `event:hook/result`
-
-SHA-256: `e75916628f3f10c2d50658bd143052a46285fbf1a9a700ba54947614603d26b4`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:hook/result.data`](#persistence-type-eventhookresultdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"hook/result"` |
-
-
-
-### `event:hook/result.data`
-
-SHA-256: `8ad45ad053b4d89f8865c17cc9ff3b8748e86045f3f0fb816269a34af2619141`
-
-Sources: [`packages/hooks/hook-protocol/src/types.ts:31`](../packages/hooks/hook-protocol/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `decision` | required | `string` |
-| `durationMs` | required | `number` |
-| `exitCode` | optional | `number` |
-| `handlerId` | required | `string` |
-| `point` | required | `string` |
-| `stderrSummary` | optional | `string` |
-| `turn` | required | `number` |
-
-
-
-### `event:image/offload`
-
-SHA-256: `b222069eea2d768065161c1147b1f2c78c1b54328c84b3586ae5c8f91b8ed35e`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:image/offload.data`](#persistence-type-eventimageoffloaddata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"image/offload"` |
-
-
-
-### `event:image/offload.data`
-
-SHA-256: `477614bca595a9e7adb5a1870be446b9a8684f3ba8950259d6289f2d3b74f028`
-
-Sources: [`packages/compaction/compaction-image-offload/src/projection.ts:25`](../packages/compaction/compaction-image-offload/src/projection.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `targets` | required | [`event:image/offload.data.targets`](#persistence-type-eventimageoffloaddatatargets) |
-
-
-
-### `event:image/offload.data.targets`
-
-SHA-256: `9e2c06d8653585b33d72d5c1a80da79c8a24a88c284409bca15cc0f0ead5ebfb`
-
-Array of [`packages/compaction/compaction-image-offload/src/projection.ts#ImageOffloadTarget`](#persistence-type-packagescompactioncompaction-image-offloadsrcprojectiontsimageoffloadtarget).
-
-
-
-### `event:llm/retry`
-
-SHA-256: `525254db03b1d1e6b74cf55aced52817568331ac1f96c0818728910b6692e336`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/llm/llm-retry/src/types.ts#LlmRetryEventData`](#persistence-type-packagesllmllm-retrysrctypestsllmretryeventdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"llm/retry"` |
-
-
-
-### `event:llm/retry-started`
-
-SHA-256: `48e5c9861f16ac07e78cb7b5ae9dabdf7bb85c58baed5a51b4ad275050ea58e3`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/llm/llm-retry/src/types.ts#LlmRetryStartedEventData`](#persistence-type-packagesllmllm-retrysrctypestsllmretrystartedeventdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"llm/retry-started"` |
-
-
-
-### `event:llm/retry.data[0]`
-
-SHA-256: `cdee10e87dbed8440d8b6935888624884878efc7af95402e94171b29f173dced`
-
-Sources: [`packages/llm/llm-retry/src/types.ts:17`](../packages/llm/llm-retry/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `delayMs` | required | `number` |
-| `failure` | required | [`packages/llm/llm/src/types.ts#LlmFailure`](#persistence-type-packagesllmllmsrctypestsllmfailure) |
-| `maxRetries` | required | `number` |
-| `mode` | required | `"normal"` |
-| `policyKey` | required | `string` |
-| `provider` | required | `string` |
-| `retry` | required | `number` |
-| `retryId` | required | `string` |
-| `step` | required | `number` |
-| `turn` | required | `number` |
-
-
-
-### `event:llm/retry.data[1]`
-
-SHA-256: `374fdd68aee5ff844e378c0cbdd961d247a0f22e4ade0bb03d800cd2a46a2b8b`
-
-Sources: [`packages/llm/llm-retry/src/types.ts:30`](../packages/llm/llm-retry/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `delayMs` | required | `number` |
-| `failure` | required | [`packages/llm/llm/src/types.ts#LlmFailure`](#persistence-type-packagesllmllmsrctypestsllmfailure) |
-| `mode` | required | `"always"` |
-| `policyKey` | required | `string` |
-| `provider` | required | `string` |
-| `retry` | required | `number` |
-| `retryId` | required | `string` |
-| `step` | required | `number` |
-| `turn` | required | `number` |
-
-
-
-### `event:model/selection`
-
-SHA-256: `35203ba7ad5ef6f97d556b85df20ae98f04f09c65748cecdf8eefdb8b6405ffc`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/api/session-controller/src/types.ts#ModelSelection`](#persistence-type-packagesapisession-controllersrctypestsmodelselection) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"model/selection"` |
-
-
-
-### `event:permission/preset`
-
-SHA-256: `5c45bf4c544a7211dcd8ba6ba7e5f1bc39b49e7a9df9d5cbdc8e87c22771b37b`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:permission/preset.data`](#persistence-type-eventpermissionpresetdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"permission/preset"` |
-
-
-
-### `event:permission/preset.data`
-
-SHA-256: `8a9c990773f798eac10ca8878e6bcc531ee080bc589cac956730e462cc6a09ad`
-
-Sources: [`packages/interaction/permission-presets/src/index.ts:57`](../packages/interaction/permission-presets/src/index.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `preset` | required | `string` |
-
-
-
-### `event:plan/mode`
-
-SHA-256: `a7cf43ce7c2a4c038feed1885cd7a00d5c6ee2d90a7e0d56b46f78a3e1ca327f`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:plan/mode.data`](#persistence-type-eventplanmodedata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"plan/mode"` |
-
-
-
-### `event:plan/mode.data`
-
-SHA-256: `20a57544bbf204dacd1ae6beb2ab29444365c3c869f2afdf489dcdcbc3d9c8c5`
-
-Sources: [`packages/plan/plan-mode/src/index.ts:47`](../packages/plan/plan-mode/src/index.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `active` | required | `boolean` |
-
-
-
-### `event:request/context`
-
-SHA-256: `37cbc9cf06d494cfe5c67f078af1605eacb8e4c2c853e9e26455b73de0ee7ccf`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/core/session/src/types.ts#RequestContext`](#persistence-type-packagescoresessionsrctypestsrequestcontext) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"request/context"` |
-
-
-
-### `event:request/header`
-
-SHA-256: `8ea13bcd983eab596dbfd41c5c2b62a0b318b71cd2a987a6fd752c6ced7e4489`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:request/header.data`](#persistence-type-eventrequestheaderdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"request/header"` |
-
-
-
-### `event:request/header.data`
-
-SHA-256: `2f0aefb72ab453c4bf21a6687f436775d359dc6f8f10410fd4c0615b20bd9d76`
-
-Sources: [`packages/core/session/src/types.ts:377`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `header` | required | [`packages/core/session/src/types.ts#EpochHeader`](#persistence-type-packagescoresessionsrctypestsepochheader) |
-| `reason` | required | [`packages/core/session/src/types.ts#RequestHeaderReason`](#persistence-type-packagescoresessionsrctypestsrequestheaderreason) |
-| `startsSeries` | optional | `true` |
-
-
-
-### `event:request/header.data.header.tools`
-
-SHA-256: `6d63f25a28b70801937a46b1058be5f52d4efbaf3516141470463ae469b59c23`
-
-Array of [`packages/llm/llm/src/types.ts#ToolSchema`](#persistence-type-packagesllmllmsrctypeststoolschema).
-
-
-
-### `event:request/header.data.header.tools[0].parameters`
-
-SHA-256: `0aa62ab51b36c0e64b134bd03ba8725d758744180a1a447da49beaad194f219f`
-
-| Property | Presence | Type |
-|---|---|---|
-| [`string`] | index signature | `unknown` (opaque) |
-
-
-
-### `event:sandbox/mode`
-
-SHA-256: `516da4cdd6d2f1e5ce488e648578ca51f40e458f707b803e5b24de870e799415`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:sandbox/mode.data`](#persistence-type-eventsandboxmodedata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"sandbox/mode"` |
-
-
-
-### `event:sandbox/mode.data`
-
-SHA-256: `9890113e97dd3541787bfe6704f2b223d3a890b5325ca0acae2b0398909b413e`
-
-Sources: [`packages/sandbox/sandbox-policy/src/session-mode.ts:33`](../packages/sandbox/sandbox-policy/src/session-mode.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `mode` | required | [`packages/sandbox/sandbox/src/index.ts#SandboxMode`](#persistence-type-packagessandboxsandboxsrcindextssandboxmode) |
-| `source` | optional | `"delegation"` |
-
-
-
-### `event:schedule/change`
-
-SHA-256: `2a7f86849ae54b3398ee49661a757c4fcb59a6192b7036ee2ff514617e13fb42`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/schedule/schedule/src/types.ts#ScheduleChange`](#persistence-type-packagesscheduleschedulesrctypestsschedulechange) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"schedule/change"` |
-
-
-
-### `event:session-log-deepseek/delivery-accepted`
-
-SHA-256: `d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:session-log-deepseek/delivery-accepted.data`](#persistence-type-eventsession-log-deepseekdelivery-accepteddata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"session-log-deepseek/delivery-accepted"` |
-
-
-
-### `event:session-log-deepseek/delivery-accepted.data`
-
-SHA-256: `8bb8c3751a6ce64b61aba1ec7ae798c00a5803c4d868a0430873216c6569ed52`
-
-Sources: [`packages/session/session-log-deepseek/src/types.ts:81`](../packages/session/session-log-deepseek/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `sessionFormatVersion` | optional | `number` |
-| `sessionId` | required | `string` |
-| `throughSeq` | required | `number` |
-
-
-
-### `event:session/end-seed`
-
-SHA-256: `5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:session/end-seed.data`](#persistence-type-eventsessionend-seeddata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"session/end-seed"` |
-
-
-
-### `event:session/end-seed.data`
-
-SHA-256: `17d1afb770d9941936130996da00dc86782cfef731d8d6526162c301256a4ac3`
-
-Sources: [`packages/core/session/src/types.ts:414`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `inherited` | optional | `true` |
-
-
-
-### `event:session/title`
-
-SHA-256: `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/session/session-title/src/types.ts#SessionTitleEventData`](#persistence-type-packagessessionsession-titlesrctypestssessiontitleeventdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"session/title"` |
-
-
-
-### `event:session/title-llm-request`
-
-SHA-256: `e0b5bf44c27bbfc6ab144239e3e4169c4d21146645e0e3121bbb359c3bc8591d`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/session/session-title-llm/src/index.ts#SessionTitleLlmRequestEventData`](#persistence-type-packagessessionsession-title-llmsrcindextssessiontitlellmrequesteventdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"session/title-llm-request"` |
-
-
-
-### `event:session/title-llm-request.data.messages`
-
-SHA-256: `478738df7e7d2b103b09fb937817a9302c81076809f2b341169e00a9419c5665`
-
-Array of [`packages/llm/llm/src/message.ts#Message`](#persistence-type-packagesllmllmsrcmessagetsmessage).
-
-
-
-### `event:session/title-llm-request.data.messages[0].role`
-
-SHA-256: `acd36e1717d2b4ef9e98a8e6fac17ca1203f3f448e5bca51677f129a8f4999e2`
-
-One of:
-
-- `"assistant"`
-- `"system"`
-- `"user"`
-
-
-
-### `event:session/title.data.source[0]`
-
-SHA-256: `1b5649238876e28811e80f10ec67a00c197ad3babd4ecc61a22b09064b88c597`
-
-Sources: [`packages/session/session-title/src/types.ts:29`](../packages/session/session-title/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `kind` | required | `"fallback"` |
-
-
-
-### `event:session/title.data.source[1]`
-
-SHA-256: `b81e9de81a481b24e1e1f9adf038bfc59e57b4f35ce62f8f1e45284186f4f812`
-
-Sources: [`packages/session/session-title/src/types.ts:30`](../packages/session/session-title/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `kind` | required | `"provider"` |
-| `model` | optional | [`packages/session/session-title/src/types.ts#SessionTitleModelIdentity`](#persistence-type-packagessessionsession-titlesrctypestssessiontitlemodelidentity) |
-| `provider` | required | `string` |
-
-
-
-### `event:step/end`
-
-SHA-256: `e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:step/end.data`](#persistence-type-eventstependdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"step/end"` |
-
-
-
-### `event:step/end.data`
-
-SHA-256: `ef11a3b7fa2033ae4279545ff8a8a2ee4e301b9b73e5b91654c48e6d08283545`
-
-Sources: [`packages/core/session/src/types.ts:294`](../packages/core/session/src/types.ts) · [`packages/core/session/src/types.ts:296`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `step` | required | `number` |
-| `turn` | required | `number` |
-
-
-
-### `event:step/start`
-
-SHA-256: `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:step/end.data`](#persistence-type-eventstependdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"step/start"` |
-
-
-
-### `event:subagent/catalog`
-
-SHA-256: `ae1f7110feeec697b8cab42b68f7709aa7b3279764099dfb53c25890d2e5c871`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/subagent/subagent/src/catalog.ts#SubagentCatalogEvent`](#persistence-type-packagessubagentsubagentsrccatalogtssubagentcatalogevent) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"subagent/catalog"` |
-
-
-
-### `event:subagent/catalog.data[0]`
-
-SHA-256: `5d542ac7bdf13310c46e1a884dec9fb18ad8c6e153cff207e639cd7bf9d7e694`
-
-| Property | Presence | Type |
-|---|---|---|
-| `childCreatedAt` | required | `number` |
-| `childId` | required | `string` |
-| `label` | optional | `string` |
-| `mode` | required | `"one-shot"` |
-| `version` | required | `0` |
-
-
-
-### `event:subagent/catalog.data[1]`
-
-SHA-256: `0e10d7c096b47e61defe372a5fc8bd37d835199410eac44367f95c45082498bd`
-
-| Property | Presence | Type |
-|---|---|---|
-| `childCreatedAt` | required | `number` |
-| `childId` | required | `string` |
-| `label` | required | `string` |
-| `mode` | required | `"continuable"` |
-| `version` | required | `0` |
-
-
-
-### `event:subagent/descriptor`
-
-SHA-256: `b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/subagent/subagent/src/descriptor.ts#SubagentDescriptorData`](#persistence-type-packagessubagentsubagentsrcdescriptortssubagentdescriptordata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"subagent/descriptor"` |
-
-
-
-### `event:subagent/model-selection-policy`
-
-SHA-256: `a6567ccb2e530606b775371eb4fa31468d72084339968e8b0440a516a23b39dc`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:subagent/model-selection-policy.data`](#persistence-type-eventsubagentmodel-selection-policydata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"subagent/model-selection-policy"` |
-
-
-
-### `event:subagent/model-selection-policy.data`
-
-SHA-256: `0d47a8f3d847243c4488e755ad4cab7a04ac5d4621b9c81865524cf3f4d8536f`
-
-Sources: [`packages/subagent/tool-subagent/src/model-selection-state.ts:17`](../packages/subagent/tool-subagent/src/model-selection-state.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `allowedModels` | required | [`event:subagent/model-selection-policy.data.allowedModels`](#persistence-type-eventsubagentmodel-selection-policydataallowedmodels) |
-
-
-
-### `event:subagent/model-selection-policy.data.allowedModels`
-
-SHA-256: `ba77b58995e36f14bb13886b0493d0a1a63d5db10b1a6cd9f6ac65a72cf832ec`
-
-Array of [`packages/session/session-title/src/types.ts#SessionTitleModelIdentity`](#persistence-type-packagessessionsession-titlesrctypestssessiontitlemodelidentity).
-
-
-
-### `event:system/message`
-
-SHA-256: `69becfb6b2d3fd5da91518089454cae8ef33f1835637ec44dde35dd077fd4bae`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:system/message.data`](#persistence-type-eventsystemmessagedata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `sourceEventSeqs` | optional | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `surfaceOp` | required | [`packages/core/session/src/types.ts#SurfaceOp`](#persistence-type-packagescoresessionsrctypestssurfaceop) |
-| `time` | required | `number` |
-| `type` | required | `"system/message"` |
-
-
-
-### `event:system/message.data`
-
-SHA-256: `2074f40221b76c75fd314246db558965dc3477dfb440bcc952b1eedc9778e366`
-
-Sources: [`packages/core/session/src/types.ts:317`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `message` | required | [`packages/llm/llm/src/message.ts#SystemMessage`](#persistence-type-packagesllmllmsrcmessagetssystemmessage) |
-| `step` | required | `number` |
-| `turn` | required | `number` |
-
-
-
-### `event:system/message.data.message.source`
-
-SHA-256: `23cf7e0cf3fec1283b60fa15713506169bc9c079a08e124d1cb9733baca80b40`
-
-One of:
-
-- [`event:agent/inbox/spliced.data.inserted[0].source[4]`](#persistence-type-eventagentinboxspliceddatainserted0source4)
-- [`event:agent/inbox/spliced.data.inserted[0].source[5]`](#persistence-type-eventagentinboxspliceddatainserted0source5)
-- [`event:agent/inbox/spliced.data.inserted[0].source[3]`](#persistence-type-eventagentinboxspliceddatainserted0source3)
-- [`event:agent/inbox/spliced.data.inserted[0].source[2]`](#persistence-type-eventagentinboxspliceddatainserted0source2)
-- [`event:agent/inbox/spliced.data.inserted[0].source[7]`](#persistence-type-eventagentinboxspliceddatainserted0source7)
-- [`event:agent/inbox/spliced.data.inserted[0].source[6]`](#persistence-type-eventagentinboxspliceddatainserted0source6)
-- [`event:agent/inbox/spliced.data.inserted[0].source[1]`](#persistence-type-eventagentinboxspliceddatainserted0source1)
-
-
-
-### `event:team/member`
-
-SHA-256: `4fb59762612c3e3ac3a3bd4f84c9c148d3c3893bd422ba2b201cc039fabd49bc`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:team/member.data`](#persistence-type-eventteammemberdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"team/member"` |
-
-
-
-### `event:team/member.data`
-
-SHA-256: `b1ebd5cda47d90d980bb05bffc3f970c51537b9aff15b3bc3d639811727741b1`
-
-Sources: [`packages/experimental/agent-team/src/types.ts:221`](../packages/experimental/agent-team/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `member` | required | [`packages/experimental/agent-team/src/types.ts#TeamMemberSnapshot`](#persistence-type-packagesexperimentalagent-teamsrctypeststeammembersnapshot) |
-| `teamId` | required | `string` |
-| `version` | required | `2` |
-
-
-
-### `event:team/member.data.member.context`
-
-SHA-256: `50cf02d875f8a1f1411f4a6fbcffab9120ccef5f74a47331fbf29480e5f68f48`
-
-One of:
-
-- `"fork"`
-- `"fresh"`
-
-
-
-### `event:team/message/delivered`
-
-SHA-256: `48f9c19417a1abbedfa59f4667bba36b93ac2db407adf5e84cb3ba0de30942cb`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:team/message/delivered.data`](#persistence-type-eventteammessagedelivereddata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"team/message/delivered"` |
-
-
-
-### `event:team/message/delivered.data`
-
-SHA-256: `0bcfaf5566d271028429ac7b562cb59053c9d78b8ae14708c35fac835108d1b1`
-
-Sources: [`packages/experimental/agent-team/src/types.ts:227`](../packages/experimental/agent-team/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `messageId` | required | `string` |
-| `targetId` | required | `string` |
-| `teamId` | required | `string` |
-| `version` | required | `2` |
-
-
-
-### `event:team/message/queued`
-
-SHA-256: `443371ec07a03a82a0e93d93abca3e70b03bca55ba5b01d507030fcb66e8fbb4`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:team/message/queued.data`](#persistence-type-eventteammessagequeueddata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"team/message/queued"` |
-
-
-
-### `event:team/message/queued.data`
-
-SHA-256: `0c3f4d2248d9bc9700e2d7253fa71aa9935f5c39af6f11de5727f08cccaf8383`
-
-Sources: [`packages/experimental/agent-team/src/types.ts:225`](../packages/experimental/agent-team/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `message` | required | [`packages/experimental/agent-team/src/types.ts#TeamMessageSnapshot`](#persistence-type-packagesexperimentalagent-teamsrctypeststeammessagesnapshot) |
-| `teamId` | required | `string` |
-| `version` | required | `2` |
-
-
-
-### `event:team/task`
-
-SHA-256: `d595ec73b32b016a6055333c67a5d646032b22e672da1d4a09c5b1ae398a093a`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:team/task.data`](#persistence-type-eventteamtaskdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"team/task"` |
-
-
-
-### `event:team/task.data`
-
-SHA-256: `a40d12070f6f4a124f32fb3cc86e7857554702e32f0eda3080a25c4b9ac9b18c`
-
-Sources: [`packages/experimental/agent-team/src/types.ts:223`](../packages/experimental/agent-team/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `task` | required | [`packages/experimental/agent-team/src/types.ts#TeamTaskSnapshot`](#persistence-type-packagesexperimentalagent-teamsrctypeststeamtasksnapshot) |
-| `teamId` | required | `string` |
-| `version` | required | `2` |
-
-
-
-### `event:todo/write`
-
-SHA-256: `b978cff734e62143eb56c9125423ec275405eda969802d42aaf73ecb987d3b26`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:todo/write.data`](#persistence-type-eventtodowritedata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"todo/write"` |
-
-
-
-### `event:todo/write.data`
-
-SHA-256: `79ddc907312f97cf9553d4841e8b3fc937097bd8d97900a790efad3c05255e99`
-
-Sources: [`packages/todo/tool-todo/src/types.ts:31`](../packages/todo/tool-todo/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `todos` | required | [`event:todo/write.data.todos`](#persistence-type-eventtodowritedatatodos) |
-
-
-
-### `event:todo/write.data.todos`
-
-SHA-256: `4b7ddaf3710b88ff9b8df66304f5f97bf03688fd19730eedc2e9535203c820ea`
-
-Array of [`packages/todo/tool-todo/src/types.ts#TodoItem`](#persistence-type-packagestodotool-todosrctypeststodoitem).
-
-
-
-### `event:todo/write.data.todos[0].status`
-
-SHA-256: `fd0d91a1f9dd2efb8959bdf5e07f8f0a98b1cdfa38ce8d4732ebde0b44c3abd4`
-
-One of:
-
-- `"completed"`
-- `"in_progress"`
-- `"pending"`
-
-
-
-### `event:tool-workflow/agent-end`
-
-SHA-256: `babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/workflow/tool-workflow/src/types.ts#ToolWorkflowAgentEndData`](#persistence-type-packagesworkflowtool-workflowsrctypeststoolworkflowagentenddata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"tool-workflow/agent-end"` |
-
-
-
-### `event:tool-workflow/agent-start`
-
-SHA-256: `5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/workflow/tool-workflow/src/types.ts#ToolWorkflowAgentStartData`](#persistence-type-packagesworkflowtool-workflowsrctypeststoolworkflowagentstartdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"tool-workflow/agent-start"` |
-
-
-
-### `event:tool-workflow/run-end`
-
-SHA-256: `42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/workflow/tool-workflow/src/types.ts#ToolWorkflowRunEndData`](#persistence-type-packagesworkflowtool-workflowsrctypeststoolworkflowrunenddata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"tool-workflow/run-end"` |
-
-
-
-### `event:tool-workflow/run-start`
-
-SHA-256: `c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/workflow/tool-workflow/src/types.ts#ToolWorkflowRunStartData`](#persistence-type-packagesworkflowtool-workflowsrctypeststoolworkflowrunstartdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"tool-workflow/run-start"` |
-
-
-
-### `event:tool/call`
-
-SHA-256: `3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:tool/call.data`](#persistence-type-eventtoolcalldata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"tool/call"` |
-
-
-
-### `event:tool/call.data`
-
-SHA-256: `e4c18e294232c3ba6c9f1999f168263cc55956147cfe4121720899be8e52edd1`
-
-Sources: [`packages/core/session/src/types.ts:348`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `arguments` | required | `string` |
-| `callId` | required | `string` |
-| `name` | required | `string` |
-| `step` | required | `number` |
-| `turn` | required | `number` |
-
-
-
-### `event:tool/ptc-dispatch`
-
-SHA-256: `b33142af8176323ffbb20762541be81c1d51b60a60887803836e0b146e5bef0c`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/core/tools/src/types.ts#PtcDispatchEventData`](#persistence-type-packagescoretoolssrctypestsptcdispatcheventdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"tool/ptc-dispatch"` |
-
-
-
-### `event:tool/ptc-dispatch-start`
-
-SHA-256: `ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/core/tools/src/types.ts#PtcDispatchStartEventData`](#persistence-type-packagescoretoolssrctypestsptcdispatchstarteventdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"tool/ptc-dispatch-start"` |
-
-
-
-### `event:tool/ptc-dispatch.data.error`
-
-SHA-256: `a81059ca06999da1e712414520c2c65e491d052fcf9640fae20aa38f0a5dc735`
-
-Sources: [`packages/core/session/src/types.ts:370`](../packages/core/session/src/types.ts) · [`packages/core/tools/src/types.ts:24`](../packages/core/tools/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `code` | required | `string` |
-| `name` | required | `string` |
-| `reason` | optional | `string` |
-
-
-
-### `event:tool/result`
-
-SHA-256: `29af48b840d0cd9e48b6f50bf3b354f8f6340607c5b99220a48e74f60beac9e2`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:tool/result.data`](#persistence-type-eventtoolresultdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `sourceEventSeqs` | optional | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `surfaceOp` | required | [`packages/core/session/src/types.ts#SurfaceOp`](#persistence-type-packagescoresessionsrctypestssurfaceop) |
-| `time` | required | `number` |
-| `type` | required | `"tool/result"` |
-
-
-
-### `event:tool/result.data`
-
-SHA-256: `356aad27134a0e31af67c994ff8b9e4b91acfb6c4917b3bc1f7a62bbf82794d5`
-
-Sources: [`packages/core/session/src/types.ts:362`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `error` | optional | [`event:tool/ptc-dispatch.data.error`](#persistence-type-eventtoolptc-dispatchdataerror) |
-| `message` | required | [`packages/llm/llm/src/message.ts#ToolResultMessage`](#persistence-type-packagesllmllmsrcmessagetstoolresultmessage) |
-| `meta` | optional | [`event:tool/result.data.meta`](#persistence-type-eventtoolresultdatameta) |
-| `step` | required | `number` |
-| `turn` | required | `number` |
-
-
-
-### `event:tool/result.data.message.content`
-
-SHA-256: `8d6a011f3ef7096a4a922ef420458419ff6b20e1eaeece5d331db7585d2f08d6`
-
-| Position | Presence | Type |
-|---|---|---|
-| 0 | required | [`packages/llm/llm/src/types.ts#ToolResultBlock`](#persistence-type-packagesllmllmsrctypeststoolresultblock) |
-
-
-
-### `event:tool/result.data.meta`
-
-SHA-256: `c592ce75aab73fcab19c1d7845684c72cf402b78d2e1f2833a58ecf9f3598ed6`
-
-Sources: [`packages/util/values/src/index.ts:4`](../packages/util/values/src/index.ts)
-
-One of:
-
-- [`event:tool/result.data.meta[5]`](#persistence-type-eventtoolresultdatameta5)
-- [`event:tool/result.data.meta[5][0][6]`](#persistence-type-eventtoolresultdatameta506)
-- `string`
-- `boolean`
-- `null`
-- `number`
-
-
-
-### `event:tool/result.data.meta[5]`
-
-SHA-256: `72ec79127a9c0d0241b1106a74cc2b24c81ce467170f1c3c93f7b71a9496d227`
-
-Array of [`event:tool/result.data.meta`](#persistence-type-eventtoolresultdatameta).
-
-
-
-### `event:tool/result.data.meta[5][0][6]`
-
-SHA-256: `529e0ccd0e34079ab4ff21ed87f810cee0388246263bf22e8aba5986b56fae05`
-
-Sources: [`packages/util/values/src/index.ts:4`](../packages/util/values/src/index.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| [`string`] | index signature | [`event:tool/result.data.meta`](#persistence-type-eventtoolresultdatameta) |
-
-
-
-### `event:turn/end`
-
-SHA-256: `0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:turn/end.data`](#persistence-type-eventturnenddata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"turn/end"` |
-
-
-
-### `event:turn/end.data`
-
-SHA-256: `e481c46af3813e0010558e93f578b2986acd658404cec2d1679e3ac2a6c48654`
-
-Sources: [`packages/core/session/src/types.ts:292`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `reason` | required | [`packages/core/session/src/types.ts#TurnEndReason`](#persistence-type-packagescoresessionsrctypeststurnendreason) |
-| `turn` | required | `number` |
-
-
-
-### `event:turn/end.data.reason[0]`
-
-SHA-256: `b6ef9c6210be8350cd465f485cf520031fffa6bf3809c61a1e713e834c5982d0`
-
-Sources: [`packages/core/session/src/types.ts:201`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `kind` | required | `"completed"` |
-
-
-
-### `event:turn/end.data.reason[1]`
-
-SHA-256: `0a30c3be336cdd4f8f34e66543a3d46d611c43986edd9b3ce6cbb9b721d3b5d3`
-
-Sources: [`packages/core/session/src/types.ts:203`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `kind` | required | `"aborted"` |
-| `reason` | required | [`packages/core/session/src/types.ts#TurnEndCancelCause`](#persistence-type-packagescoresessionsrctypeststurnendcancelcause) |
-
-
-
-### `event:turn/end.data.reason[1].reason[1]`
-
-SHA-256: `6c03546143cdf6ae88f1745ac98c5139efa1588d1415249bbc5f3104d32ab800`
-
-Sources: [`packages/core/session/src/types.ts:190`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `kind` | required | `"parent"` |
-
-
-
-### `event:turn/end.data.reason[1].reason[2]`
-
-SHA-256: `6c5a37d42ebdb12db4410699259335f1e149e3a0260425684c00b153afc8990d`
-
-Sources: [`packages/core/session/src/types.ts:191`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `kind` | required | `"hook"` |
-| `reason` | required | `string` |
-
-
-
-### `event:turn/end.data.reason[1].reason[3]`
-
-SHA-256: `4bb451330ff699f36b45539ceb0eb2606ead72084e2c5bb637c36cc80e2252db`
-
-Sources: [`packages/core/session/src/types.ts:192`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `kind` | required | `"disposed"` |
-
-
-
-### `event:turn/end.data.reason[1].reason[4]`
-
-SHA-256: `eaa71be0fbf0f702df8ea6c11d0aa2f9782263d45a10d0fb14eda662f4bfe04c`
-
-Sources: [`packages/core/session/src/types.ts:195`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `kind` | required | `"legacy"` |
-
-
-
-### `event:turn/end.data.reason[2]`
-
-SHA-256: `023a355b2be0d688fb6e4df8388dadb942761d46cfe96d0f499aae9631a159d4`
-
-Sources: [`packages/core/session/src/types.ts:205`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `kind` | required | `"blocked"` |
-
-
-
-### `event:turn/end.data.reason[3]`
-
-SHA-256: `79650cfa10aa3c52440328d85e8a25f0ffadc8d7efd784e3c0819d8bb74a1985`
-
-Sources: [`packages/core/session/src/types.ts:211`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `error` | required | [`packages/llm/llm/src/types.ts#LlmFailure`](#persistence-type-packagesllmllmsrctypestsllmfailure) |
-| `kind` | required | `"error"` |
-
-
-
-### `event:turn/end.data.reason[5]`
-
-SHA-256: `56b7c047694875a843ba020dfea3c8380d54ae4ff88ab349e72004dc21e07c23`
-
-Sources: [`packages/core/session/src/types.ts:220`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `kind` | required | `"interrupted"` |
-
-
-
-### `event:turn/end.data.reason[6]`
-
-SHA-256: `ec8b5ff7c77ca6893ac7ba5a0c5b2aefeb52f12c64450b7359660c2a7e8a53d7`
-
-Sources: [`packages/core/session/src/types.ts:227`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `kind` | required | `"forked"` |
-
-
-
-### `event:turn/start`
-
-SHA-256: `aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:turn/start.data`](#persistence-type-eventturnstartdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"turn/start"` |
-
-
-
-### `event:turn/start.data`
-
-SHA-256: `f90eb4ab2d3897bc20c521a038e3119d581f791ec974b1a0004f63a8ab9e232d`
-
-Sources: [`packages/core/session/src/types.ts:283`](../packages/core/session/src/types.ts) · [`packages/deliverables/workspace-changes/src/types.ts:106`](../packages/deliverables/workspace-changes/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `turn` | required | `number` |
-
-
-
-### `event:user/message`
-
-SHA-256: `314765bdff29c7862fb6ce820f1773563ba3094a680d163ea21180a2591b8578`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/llm/llm/src/message.ts#UserMessage`](#persistence-type-packagesllmllmsrcmessagetsusermessage) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `sourceEventSeqs` | optional | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `surfaceOp` | required | [`packages/core/session/src/types.ts#SurfaceOp`](#persistence-type-packagescoresessionsrctypestssurfaceop) |
-| `time` | required | `number` |
-| `type` | required | `"user/message"` |
-
-
-
-### `event:web/deepseek-search-llm-request`
-
-SHA-256: `cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`packages/web/web-search-deepseek/src/provider.ts#DeepSeekSearchLlmRequest`](#persistence-type-packageswebweb-search-deepseeksrcprovidertsdeepseeksearchllmrequest) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"web/deepseek-search-llm-request"` |
-
-
-
-### `event:web/deepseek-search-llm-request.data.body`
-
-SHA-256: `930a6567a10bb62ddd157bd8abdf4b182810c8c3b49d91309b3b009a5fed9731`
-
-Sources: [`packages/web/web-search-deepseek/src/provider.ts:61`](../packages/web/web-search-deepseek/src/provider.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `max_tokens` | required | `number` |
-| `messages` | required | [`event:web/deepseek-search-llm-request.data.body.messages`](#persistence-type-eventwebdeepseek-search-llm-requestdatabodymessages) |
-| `model` | required | `string` |
-| `tools` | required | [`event:web/deepseek-search-llm-request.data.body.tools`](#persistence-type-eventwebdeepseek-search-llm-requestdatabodytools) |
-
-
-
-### `event:web/deepseek-search-llm-request.data.body.messages`
-
-SHA-256: `b993441f8ce7d27b80e619e113e232ae8e62d3d5a8340f6bfe12d8c4c018e62f`
-
-| Position | Presence | Type |
-|---|---|---|
-| 0 | required | [`event:web/deepseek-search-llm-request.data.body.messages[0]`](#persistence-type-eventwebdeepseek-search-llm-requestdatabodymessages0) |
-
-
-
-### `event:web/deepseek-search-llm-request.data.body.messages[0]`
-
-SHA-256: `9a2a9029f8d7ede05336980d8342737557f487b913bfd28853d0ab5214600ab5`
-
-Sources: [`packages/web/web-search-deepseek/src/provider.ts:64`](../packages/web/web-search-deepseek/src/provider.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `content` | required | [`event:web/deepseek-search-llm-request.data.body.messages[0].content`](#persistence-type-eventwebdeepseek-search-llm-requestdatabodymessages0content) |
-| `role` | required | `"user"` |
-
-
-
-### `event:web/deepseek-search-llm-request.data.body.messages[0].content`
-
-SHA-256: `8f6d609794bf5afc01d7ccf3e03811d32f4b8047f58a2c9a98db0154c2ad7cb9`
-
-| Position | Presence | Type |
-|---|---|---|
-| 0 | required | [`event:web/deepseek-search-llm-request.data.body.messages[0].content[0]`](#persistence-type-eventwebdeepseek-search-llm-requestdatabodymessages0content0) |
-
-
-
-### `event:web/deepseek-search-llm-request.data.body.messages[0].content[0]`
-
-SHA-256: `4e887768586528565381dadbddee6cef555874148089f4579e0b4b1ad096fc9c`
-
-Sources: [`packages/llm/llm/src/types.ts:61`](../packages/llm/llm/src/types.ts) · [`packages/web/web-search-deepseek/src/provider.ts:66`](../packages/web/web-search-deepseek/src/provider.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `text` | required | `string` |
-| `type` | required | `"text"` |
-
-
-
-### `event:web/deepseek-search-llm-request.data.body.tools`
-
-SHA-256: `4aed17ec726b5397c29f6cb4bcd7905dc1a12bb6140f1657f073cd24380f2af8`
-
-| Position | Presence | Type |
-|---|---|---|
-| 0 | required | [`event:web/deepseek-search-llm-request.data.body.tools[0]`](#persistence-type-eventwebdeepseek-search-llm-requestdatabodytools0) |
-
-
-
-### `event:web/deepseek-search-llm-request.data.body.tools[0]`
-
-SHA-256: `2d11ca7b0d4493e244b74eba093227866b33249841e59a1e9bf56afed38604c3`
-
-Sources: [`packages/web/web-search-deepseek/src/provider.ts:71`](../packages/web/web-search-deepseek/src/provider.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `max_uses` | required | `number` |
-| `name` | required | `"web_search"` |
-| `type` | required | `"web_search_20250305"` |
-
-
-
-### `event:workspace/changes`
-
-SHA-256: `e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72`
-
-| Property | Presence | Type |
-|---|---|---|
-| `data` | required | [`event:turn/start.data`](#persistence-type-eventturnstartdata) |
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `"workspace/changes"` |
-
-
+
### `"every"`
@@ -4077,7 +1664,7 @@ SHA-256: `e42b0f40b5d0b628c6e1c44a8fb9eda0780037a81959e1b93d2dfb47b46b0e87`
`"every"`
-
+
### `"failed"`
@@ -4085,7 +1672,7 @@ SHA-256: `b57a2889408de36e4516807194c73bdecd51a92f633ccd05db81bf049200f420`
`"failed"`
-
+
### `"fallback"`
@@ -4093,15 +1680,7 @@ SHA-256: `d6e654b88b584fcdf290a56802b1730bc7b9847ae86baa4265ab7769eb48990c`
`"fallback"`
-
-
-### `false`
-
-SHA-256: `0c4205180f75b9ee1e0d878bd9a9851628b5dc18448486389d9c5fdc3f1ccda3`
-
-`false`
-
-
+
### `"feedback/message-delete"`
@@ -4109,7 +1688,7 @@ SHA-256: `44818000e56acb97afdb5045ce235eb55e3fb1ccabc9fc7d0750bb38f36a7f8e`
`"feedback/message-delete"`
-
+
### `"feedback/message-put"`
@@ -4117,7 +1696,7 @@ SHA-256: `6cda0d6d3b4336d83998fe580628426df81c2afbab5d768b8813b56d569120e8`
`"feedback/message-put"`
-
+
### `"feedback/record"`
@@ -4125,7 +1704,7 @@ SHA-256: `c99e20441bf15341e9db54385e558e5c03d21dff2eb1ac08ccbf47c2d8747954`
`"feedback/record"`
-
+
### `"file"`
@@ -4133,7 +1712,7 @@ SHA-256: `277b61f9c6f8170425fa6ffe06cfa14376757a896a4749cb82a687d7364c4fc9`
`"file"`
-
+
### `"finish"`
@@ -4141,7 +1720,7 @@ SHA-256: `bd499eac047efe091a4df7382eadd06d25cf0cb31fee3981e8b24d85762841cd`
`"finish"`
-
+
### `"fork"`
@@ -4149,7 +1728,7 @@ SHA-256: `2da725e554cd89301d829ed9dc45a572c3cd1b93b5e91d0d71f007976d8a0863`
`"fork"`
-
+
### `"forked"`
@@ -4157,7 +1736,7 @@ SHA-256: `b2245a906e13aa94f2d3cc6cf7b04cfa0267f7b7f4d468de1b00b1a314e54626`
`"forked"`
-
+
### `"fresh"`
@@ -4165,7 +1744,7 @@ SHA-256: `dd2780e7e07684332f7a9ab047237798d260e7eaffb1321cb38eca695d184c3d`
`"fresh"`
-
+
### `"goal"`
@@ -4173,7 +1752,7 @@ SHA-256: `b815d7b91cdd9fc6ccc7dcba05cfc5ce1d55fab5fc0c0801803cd3630cedb602`
`"goal"`
-
+
### `"goal/change"`
@@ -4181,7 +1760,7 @@ SHA-256: `237c004c73b6b288246816e0d7fde16e09c63a47aa3b1227383d7afe58666163`
`"goal/change"`
-
+
### `"hook"`
@@ -4189,7 +1768,7 @@ SHA-256: `dbdafceb9a900183cccc80596498d386f3bf7bddead2b8cfde68453aa4739edc`
`"hook"`
-
+
### `"hook/invoked"`
@@ -4197,7 +1776,7 @@ SHA-256: `b9305f0ea75ccd6a6061c27fde19f2ab85534f9f3c1a717b573b077ebae0f611`
`"hook/invoked"`
-
+
### `"hook/result"`
@@ -4205,7 +1784,7 @@ SHA-256: `a3a259a1aa5401af786ce08c4a8419681d3000d73467991b5fc563389bc4ebd2`
`"hook/result"`
-
+
### `"image"`
@@ -4213,7 +1792,7 @@ SHA-256: `fb8b6a2e53cb9cf44c551176de0fb77d1ddc60037b99a891ff8a860b6d5c29a0`
`"image"`
-
+
### `"image/gif"`
@@ -4221,7 +1800,7 @@ SHA-256: `de30b1fa12c75f81df6aa4096e1595296d2d04e2be14a7c29849cf8028b79048`
`"image/gif"`
-
+
### `"image/jpeg"`
@@ -4229,7 +1808,7 @@ SHA-256: `3f74ba74acd10644c1ed6947a411d8088bd2cfac74f61bb8540f96d68e31f004`
`"image/jpeg"`
-
+
### `"image/offload"`
@@ -4237,7 +1816,7 @@ SHA-256: `9acbe713f3f641921dd3333b240aa72e176d795327c24e8d9db9b68b16771b49`
`"image/offload"`
-
+
### `"image/png"`
@@ -4245,7 +1824,7 @@ SHA-256: `58f94390b982f8a5ac1f4f235ba612557f4a1dc4a995d8b1cec63ce7639decb0`
`"image/png"`
-
+
### `"image/webp"`
@@ -4253,7 +1832,11 @@ SHA-256: `ebb768d85ec87fb68e42fc14fd7d8535b5ac11791b14d04c6770180f0a719bf8`
`"image/webp"`
-
+
+
+
+
+
### `"in-history"`
@@ -4263,7 +1846,7 @@ Sources: [`packages/llm/llm/src/types.ts:383`](../packages/llm/llm/src/types.ts)
`"in-history"`
-
+
### `"in_progress"`
@@ -4271,7 +1854,7 @@ SHA-256: `94c56aeb1564ad735eb773d88636b40761d063efa1610f1308004d32923f5378`
`"in_progress"`
-
+
### `"initial"`
@@ -4279,7 +1862,7 @@ SHA-256: `e7ce49f12953583fad217bf80fb9f1463acff2c3e9471a823782661675fb124c`
`"initial"`
-
+
### `"instruction-following"`
@@ -4287,7 +1870,7 @@ SHA-256: `e4cac694f8b6e1d52e48c699464f1c4c26111ef87e558f7931040d00fdc8d486`
`"instruction-following"`
-
+
### `"instructions"`
@@ -4295,7 +1878,7 @@ SHA-256: `fee1caf8ab6a65c1bc981f5a1730164490f22a2a89ffa3d0b76f1f432c44c8b5`
`"instructions"`
-
+
### `"interrupted"`
@@ -4303,7 +1886,7 @@ SHA-256: `69d238a6e9b08d67f601b1825962963d8d3523cb69ebf6208c697dc5d058c199`
`"interrupted"`
-
+
### `"legacy"`
@@ -4311,7 +1894,7 @@ SHA-256: `ad3b56aa2fc1ad4250e7399295d34a8eae592e1907e85852e2291b2e498a30bc`
`"legacy"`
-
+
### `"llm/retry"`
@@ -4319,7 +1902,7 @@ SHA-256: `611cae9a3539733aa0c42f66035a7d90f19dcbbdfb5d9e3b628b13705253942d`
`"llm/retry"`
-
+
### `"llm/retry-started"`
@@ -4327,7 +1910,7 @@ SHA-256: `4ae007ed190a72c92138b22d059b83208079c7551ca13fb59ae8cf5e23693964`
`"llm/retry-started"`
-
+
### `"max-tokens"`
@@ -4335,7 +1918,7 @@ SHA-256: `68141cbe3994a5ffcd064c07c75996538437fd9dbf77ce8a2927e89ec577fabe`
`"max-tokens"`
-
+
### `"model"`
@@ -4343,7 +1926,7 @@ SHA-256: `2765e9119edf5816ac1ab4c95c5ee32c90403f3742962eff11544f7752d59d2e`
`"model"`
-
+
### `"model/selection"`
@@ -4351,7 +1934,7 @@ SHA-256: `1d5f04a03ea75fc8eeece544129eba0f49f0c82046e9c404461920390135c7b2`
`"model/selection"`
-
+
### `"negative"`
@@ -4359,7 +1942,7 @@ SHA-256: `b1f62380f6746fedd629e71065e3583cef83334875b499ac9665c2eb87acfbf5`
`"negative"`
-
+
### `"never"`
@@ -4367,7 +1950,7 @@ SHA-256: `1571525adc95a24e5d25b5a6440df401cd7cdd881b745178e85f5a333435cd1b`
`"never"`
-
+
### `"next-step"`
@@ -4375,7 +1958,7 @@ SHA-256: `3e2ece4967cfebe95f450a93f45523dff99d6749f6269f2f60f84dfecfcf3693`
`"next-step"`
-
+
### `"next-turn"`
@@ -4383,7 +1966,7 @@ SHA-256: `62ecb62dc0fe1b5e70217f8a80c39256a40ee3a1917be14e5ca899d20c35f7fd`
`"next-turn"`
-
+
### `"normal"`
@@ -4391,7 +1974,7 @@ SHA-256: `3bc287e765d58dc3a22672a0495a6cfd561220dd38fbaecef80aa95b96caed79`
`"normal"`
-
+
### `"notice"`
@@ -4399,25 +1982,7 @@ SHA-256: `e8de0f457fed5b9ff94dc4950b59ef75fd8ba8af665cc7899485924a62653367`
`"notice"`
-
-
-### `null`
-
-SHA-256: `938f7c7357bc403ea3b281a9dd016939df7a0880fc8db12612585be574d0d615`
-
-`null`
-
-
-
-### `number`
-
-SHA-256: `0657d3ca5ac4e7bf79b00bcf860b1c7159d01a9da137497221ec2f1776e365f7`
-
-Sources: [`packages/core/session/src/types.ts:31`](../packages/core/session/src/types.ts)
-
-`number`
-
-
+
### `"one-shot"`
@@ -4425,7 +1990,7 @@ SHA-256: `d28765f87d6b6ab408e0b2f3e7e297791b004b806d8e302c49903ebae815feb2`
`"one-shot"`
-
+
### `"other"`
@@ -4433,83 +1998,753 @@ SHA-256: `9d80129e13edfb6feb03ed327e6085c6ef60b97ad074244b2f5fd4667424a6a4`
`"other"`
-
+
-### `packages/api/session-controller/src/types.ts#ModelSelection`
+### `"parent"`
-SHA-256: `f09e5e7acf5ff5ccd193ff2eeec015fa2ff7c29d98bc465f8c3302058d47e29b`
+SHA-256: `e6411b09c1d982f789bf741ca74e2bea69df56029847f86a6148e722039ee732`
-Sources: [`packages/api/session-controller/src/types.ts:86`](../packages/api/session-controller/src/types.ts)
+`"parent"`
+
+
+
+### `"pause"`
+
+SHA-256: `1d8798b1a5e8c545ee4dcd2b4e75c0b4c9ffd985e4744c6d1a1aab992f859721`
+
+`"pause"`
+
+
+
+### `"paused"`
+
+SHA-256: `c43b119ce579b3e9983a0d3adc4ba402ebb9ba773d89738a2dab01ecf5813943`
+
+`"paused"`
+
+
+
+### `"pending"`
+
+SHA-256: `234142ee4f996f38cc9fa3b8b3e3de29b03c9aefe5ebf6c224eddd564505aa85`
+
+`"pending"`
+
+
+
+### `"permission/preset"`
+
+SHA-256: `ae63d9d1080ed8945031594d93f8d96651d7101b848719cc3e1475875cd3d649`
+
+`"permission/preset"`
+
+
+
+### `"plan/mode"`
+
+SHA-256: `f634871d1e18b1eb199497ac8ab72d3964f48d03fbf611dc7521a1970cf429d9`
+
+`"plan/mode"`
+
+
+
+### `"plugin"`
+
+SHA-256: `e654d28d1e6c471147310d2fba396d00969cfe6ed9022626d3f2c2312e0b1cbb`
+
+`"plugin"`
+
+
+
+### `"positive"`
+
+SHA-256: `df5d9709b7db2a72510dc52052a23f0c38f39730af1504bab8bccabc14fae528`
+
+`"positive"`
+
+
+
+### `"product-interaction"`
+
+SHA-256: `0341d4c3dfcd53253cdc1e789d9130d3cd848b6f8b0706bf92f313a68b39ff23`
+
+`"product-interaction"`
+
+
+
+### `"provider"`
+
+SHA-256: `e31572180d6b28b73f073ad30ae19d5d82982d3daf984723984e23da1e7c459a`
+
+`"provider"`
+
+
+
+### `"provisioning"`
+
+SHA-256: `871bfd6f7bb91061246768d3377f3fd58d6b8ea7c31f44c714ae7ab215650d62`
+
+`"provisioning"`
+
+
+
+### `"read-only"`
+
+SHA-256: `12a0cfa619ac4a5fc6c3e8e359c8dae15769edc61497a575935c78d5842f8e42`
+
+`"read-only"`
+
+
+
+### `"reasoning"`
+
+SHA-256: `3c2535ca0a2062f172f15344f8040755002b5ac506cf94fc4ebaa822b15feb8c`
+
+`"reasoning"`
+
+
+
+### `"reasoning-chunks"`
+
+SHA-256: `688e853dc149f0d30b31765c12ec7e3be74169bdf1a4c6463a10b945d50cc1b8`
+
+`"reasoning-chunks"`
+
+
+
+### `"reasoning-delta"`
+
+SHA-256: `6f091fe32ab24407236090ca9d710bbaf59bb57466e9f3b8f1f6e4862bc863c6`
+
+`"reasoning-delta"`
+
+
+
+### `"recall"`
+
+SHA-256: `383cf73ae4748e5beb281ae74857ba1ffb92ae01075b9fbf51af78b666007a8f`
+
+`"recall"`
+
+
+
+### `"rejected"`
+
+SHA-256: `fab35c4520883c0d69e42d079c9f543fc5ac7a2d15b537b5572fcd99059c7018`
+
+`"rejected"`
+
+
+
+### `"relay"`
+
+SHA-256: `16d0507cb94b4cfc84a87446b1ba7652d6ec1d65ee1684789e747e30d542800e`
+
+`"relay"`
+
+
+
+### `"remove"`
+
+SHA-256: `7382c4fc95fe8c5db65ca4d9da572b115d0dbb818b7f32c22ab040318ffbb4bc`
+
+`"remove"`
+
+
+
+### `"replace"`
+
+SHA-256: `f6cb462f808309e315fea634f1ed86268b8346bbcee6774d9097ca6eed7ac1f8`
+
+`"replace"`
+
+
+
+### `"request/context"`
+
+SHA-256: `70b082fe78991edf13cf66e1b4d06cd2dcff9cacfd76f8cfb996bfb61939e7b2`
+
+`"request/context"`
+
+
+
+### `"request/header"`
+
+SHA-256: `3e0eff5946255ff05d88a10839c60305135801f97794ea48d409f8503303317e`
+
+`"request/header"`
+
+
+
+### `"resource-cost"`
+
+SHA-256: `5bd310104cfe448e530beb11422d2f791e2e32e8e95fdc528a15f9ca693dae75`
+
+`"resource-cost"`
+
+
+
+### `"resume"`
+
+SHA-256: `34d1ab5c5df378186d6054b1a1beea9a41e41965d6f336f0bc0025c441a82e66`
+
+`"resume"`
+
+
+
+### `"sandbox/mode"`
+
+SHA-256: `ca085dba2c877feceebf3c62f9d39c6c2a4d2314d97b94b3927a780fe8fe2bb2`
+
+`"sandbox/mode"`
+
+
+
+### `"schedule/change"`
+
+SHA-256: `0e7b2a97f54f1afdb8cdfad1635abe9145327db539bfb69b4045c19d8c17755d`
+
+`"schedule/change"`
+
+
+
+### `"security-privacy-permission"`
+
+SHA-256: `07eccc9ea2f9b5439d76cc77d5e062936677d43f07a23da749819b0a22ee36b7`
+
+`"security-privacy-permission"`
+
+
+
+### `"series"`
+
+SHA-256: `4f507598cf476214aa7646ce7841a7064a9dcb05d0a1eaaefaf79c2b738f160f`
+
+`"series"`
+
+
+
+### `"service-stability"`
+
+SHA-256: `7180844e1066230c5e891f1b9ccd942423b0fe48aac6ded7eef2a285b288a732`
+
+`"service-stability"`
+
+
+
+### `"session"`
+
+SHA-256: `e41bdebe246abe17154de7e7a1d81035437eee8d20e7f1edff0d91e2598ad828`
+
+`"session"`
+
+
+
+### `"session-log-deepseek/delivery-accepted"`
+
+SHA-256: `47e5d84f1a93450a78c7f3954b43990d0f629af7c034a56313e5deb63e772c1b`
+
+`"session-log-deepseek/delivery-accepted"`
+
+
+
+### `"session-reference"`
+
+SHA-256: `7f13860ee89a2d35ce09f958e85a04566cd59cb1de1d73a9619a9b631961dc71`
+
+`"session-reference"`
+
+
+
+### `"session/end-seed"`
+
+SHA-256: `1c2686c0682e7bc51d61117b2652bd4a80707e331aa276d6ef915ae32534a330`
+
+`"session/end-seed"`
+
+
+
+### `"session/title"`
+
+SHA-256: `7a651f3b672c52fb615f22c0ce9cb3cc5b22aad92e6bbeefb0808fd7b9233a50`
+
+`"session/title"`
+
+
+
+### `"session/title-llm-request"`
+
+SHA-256: `587bb11da730e06aa52b62c087d217d6f8f22459b25f31cb9e1e1baf17944e5e`
+
+`"session/title-llm-request"`
+
+
+
+### `"set"`
+
+SHA-256: `b765ee31033cea463863faf3fc6a0a1b85c47c6a2f13fe1ce833abe56105114b`
+
+`"set"`
+
+
+
+### `"skill-catalog"`
+
+SHA-256: `6ebcc2dbec9f2dabca9f668ae6d39e877899b180740570f453409db339221df3`
+
+`"skill-catalog"`
+
+
+
+### `"skill-invocation"`
+
+SHA-256: `1922cd79a70806c17758185a6ef0458bc1fb3900363906733421c16414da2509`
+
+`"skill-invocation"`
+
+
+
+### `"snapshot"`
+
+SHA-256: `6f9e00383836275e46c0a9915767f9bb561be5fc30aae490174908a93e99a912`
+
+`"snapshot"`
+
+
+
+### `"step/end"`
+
+SHA-256: `c219efbdfd53b836786202ab4532913d555798f0a8615a4e9629736e3799fb70`
+
+`"step/end"`
+
+
+
+### `"step/start"`
+
+SHA-256: `2c64d4bc7264fd3f8bed47e96ab8a593bce05a1e4e1c436dcd244a3b7e0c2a9d`
+
+`"step/start"`
+
+
+
+### `"stop"`
+
+SHA-256: `57f3f606ff8b6c84d9c443faace9d1dd10cca0354f37a4f515ef075f7c351b90`
+
+`"stop"`
+
+
+
+### `"subagent"`
+
+SHA-256: `aacda84a69739238aa782eea902d3073017d9d74b9808de2bf5a83c9738cbdc6`
+
+`"subagent"`
+
+
+
+### `"subagent-settled"`
+
+SHA-256: `bf16d2e98a7f13894ded2cffe5ce857bf473954a0e3c0ed9bc7739e2e1c7b78a`
+
+`"subagent-settled"`
+
+
+
+### `"subagent/catalog"`
+
+SHA-256: `44c8c77aa9aa100b0d74d2deee85474b29faa6eee0ac0f662f7abe9931ddd7f2`
+
+`"subagent/catalog"`
+
+
+
+### `"subagent/descriptor"`
+
+SHA-256: `5ebce1317eacd2c148456627a09668e927ee15c204f0643f5ea76b46b54a2647`
+
+`"subagent/descriptor"`
+
+
+
+### `"subagent/model-selection-policy"`
+
+SHA-256: `0a8a062bc9c3c0d97fd97742262f2ea53dd32297f834e81114870d38ac3dc6da`
+
+`"subagent/model-selection-policy"`
+
+
+
+### `"success"`
+
+SHA-256: `511801b0a6470d98566e8385d3dffddb2b67f79fcf73ed6056f46c3cc0a245a7`
+
+`"success"`
+
+
+
+### `"system"`
+
+SHA-256: `8af841fc9b265ade3441caf9fe40dd24db24226befba48150e6d0eeccc1389c3`
+
+`"system"`
+
+
+
+### `"system/message"`
+
+SHA-256: `1c5a58f4599bd4a9711712551ffe2442a5e5fcd0758bafe630cc4ead850bdaa7`
+
+`"system/message"`
+
+
+
+### `"task-result"`
+
+SHA-256: `f05fb85e715af4ab4de0b6ba111166dd0435bd8bb74a0fa0f32b9d174113fc7c`
+
+`"task-result"`
+
+
+
+### `"team-message"`
+
+SHA-256: `2e4debca12f2c449f96dc6574f3fbf2fb346193443114a241d01a236362ec48c`
+
+`"team-message"`
+
+
+
+### `"team/member"`
+
+SHA-256: `18fcdd273a2f2f9d813a3be5e71df5903a963a5c88e46b90b14de6e2db890da0`
+
+`"team/member"`
+
+
+
+### `"team/message/delivered"`
+
+SHA-256: `a8a2b9011fc067862df7ce40748868467e5778283d7ac193c13f77684a914c57`
+
+`"team/message/delivered"`
+
+
+
+### `"team/message/queued"`
+
+SHA-256: `4e011753f8263f436efaabfbb3b4db53a98fc55342c5ded2daf7208b217be159`
+
+`"team/message/queued"`
+
+
+
+### `"team/task"`
+
+SHA-256: `b57ae1b37e52bee0a21cbdace168dc6a15582bcda8c306dad962c5dcc8a8e28b`
+
+`"team/task"`
+
+
+
+### `"text"`
+
+SHA-256: `4e44c9118152f6829634bfd508e47669ab0497caffa380c94b4be91f9390d35d`
+
+`"text"`
+
+
+
+### `"text-chunks"`
+
+SHA-256: `f9cfc89e8fe085b4fcc9cd32b74b6f103608c54d7d8cd97b47c01de34f252ba3`
+
+`"text-chunks"`
+
+
+
+### `"text-delta"`
+
+SHA-256: `5abab3a27fd2736660ecddd94b28d6bbf114986dd894880153bd1be3ccacb563`
+
+`"text-delta"`
+
+
+
+### `"todo/write"`
+
+SHA-256: `af0750d32d97d47b12b7361a587db41894b17e04c9a805fe212f0114aa2248c7`
+
+`"todo/write"`
+
+
+
+### `"tool"`
+
+SHA-256: `a13d8f379222ece8a02a86efe4c8334af4f108ecb3034b38c0a42bb3046e6847`
+
+`"tool"`
+
+
+
+### `"tool-call"`
+
+SHA-256: `1f0133217eeeffd8d387baf1ec8ed9856e719bcd999dc08e48624cba96d75fd7`
+
+`"tool-call"`
+
+
+
+### `"tool-call-chunks"`
+
+SHA-256: `616f93a5047de668e1c30d57b1786abd76beeb4123599637ec1dc5290320ede5`
+
+`"tool-call-chunks"`
+
+
+
+### `"tool-call-delta"`
+
+SHA-256: `9b4fd974c124c83743efe030ba4e1250e087505f3f74588716a521fb8d453267`
+
+`"tool-call-delta"`
+
+
+
+### `"tool-calls"`
+
+SHA-256: `6c1cccb433ddc153facb380c7dda956237ba5c31f8a532a69142dc277890cc9b`
+
+`"tool-calls"`
+
+
+
+### `"tool-result"`
+
+SHA-256: `e5244812c495a80c2e78ba2c2690dca5f6b58ea8d3fe5531ff94a6f9ac5e5d66`
+
+`"tool-result"`
+
+
+
+### `"tool-workflow/agent-end"`
+
+SHA-256: `5d17f27a1ef9f7026c0232714adf7573961536d75f3303ca97973975f5af170e`
+
+`"tool-workflow/agent-end"`
+
+
+
+### `"tool-workflow/agent-start"`
+
+SHA-256: `ad92f473a03ae72599ff26c86e897c25e16269519ad2a87340f0bea946517af8`
+
+`"tool-workflow/agent-start"`
+
+
+
+### `"tool-workflow/run-end"`
+
+SHA-256: `fe792a6cd430494503837e21e79f91677704ccdd9e870c679aabd7d43ed47ddd`
+
+`"tool-workflow/run-end"`
+
+
+
+### `"tool-workflow/run-start"`
+
+SHA-256: `cdca80b8dad24d4e7b1d5a288a8475ba8d8d46be385bd2da85f122ee836f1670`
+
+`"tool-workflow/run-start"`
+
+
+
+### `"tool/call"`
+
+SHA-256: `c589e938cc0e4989df8b82abef6339de621f0dc4fe62c230d145b94996af7f92`
+
+`"tool/call"`
+
+
+
+### `"tool/ptc-dispatch"`
+
+SHA-256: `fb5e0517050d2c6d40e5b8145db1f7c5ca7044d5d50fada6ff80e0b22c6ca973`
+
+`"tool/ptc-dispatch"`
+
+
+
+### `"tool/ptc-dispatch-start"`
+
+SHA-256: `2aed07493b1c65b6d00de5586da1e743cf501684b9ad43a1765fb4007d4ea456`
+
+`"tool/ptc-dispatch-start"`
+
+
+
+### `"tool/result"`
+
+SHA-256: `570e85022434613394418ad33e77e9f1f7a05699b33d0b62eae0677a638c3833`
+
+`"tool/result"`
+
+
+
+### `"turn/end"`
+
+SHA-256: `4312134fc6f9cad507c31390bd3d147535492dd77621ec517c5e85f853d53a03`
+
+`"turn/end"`
+
+
+
+### `"turn/start"`
+
+SHA-256: `0af3ecfb8c60d416fc40a7cc4fb2c4851a8e46608b2b38ab9e510670c971aa1f`
+
+`"turn/start"`
+
+
+
+### `"unavailable"`
+
+SHA-256: `2c4c21f19f426a58f2dac914e34313aa43f8408972de857a486d1f086d5adb6c`
+
+`"unavailable"`
+
+
+
+### `"usage"`
+
+SHA-256: `0bdaf9cb63594be4ef034b68901fffe792fe09d6d5f6bac42d7f56f6e7834fb9`
+
+`"usage"`
+
+
+
+### `"user"`
+
+SHA-256: `68f44f59e91c41395076cb77265981a601680ec8a381bbbeb6ab754ffdc94573`
+
+`"user"`
+
+
+
+### `"user/message"`
+
+SHA-256: `de25352d2dc4196309bd84b5bac6319f6d5c898ea0e82bb5ae66c5738d0d426f`
+
+`"user/message"`
+
+
+
+### `"web/deepseek-search-llm-request"`
+
+SHA-256: `6f611bed14b2106542480c4a230b4a83baf76dc0d8ac0cd13319a7cb8dae7675`
+
+`"web/deepseek-search-llm-request"`
+
+
+
+### `"web_search"`
+
+SHA-256: `935c8d486292b13c87b57ca280eb8c58b5b2f5239be86fcd4334c33fdeb87682`
+
+`"web_search"`
+
+
+
+### `"web_search_20250305"`
+
+SHA-256: `0116b1f89c05221d56b0ba35c83d302bf4857bc7277d247e9bbaf74b27d2c66e`
+
+`"web_search_20250305"`
+
+
+
+### `"webhook"`
+
+SHA-256: `db6c5246911d47a7969f6b4cb47c7d0dbbde75c402710b22ace3672fa97bebe0`
+
+`"webhook"`
+
+
+
+### `"workspace-write"`
+
+SHA-256: `a3edd1efd1fef21b72c55e213c8a8b24196b091abde2b89db52be0b2aaae3cfa`
+
+`"workspace-write"`
+
+
+
+### `"workspace/changes"`
+
+SHA-256: `8e8155594e07812356b67d732196dda894b0f9c91a5969d51612cf490b0a016d`
+
+`"workspace/changes"`
+
+
+
+### `0`
+
+SHA-256: `93d38436347f67c9022aacbc4472e283d722bcab8eb73fc376aaf7b6a6b9fb35`
+
+`0`
+
+
+
+### `1`
+
+SHA-256: `f88f1b7b6bb733f685f5fb6a8744a5db9199fa53c90463ea1a33bad51153671d`
+
+`1`
+
+
+
+### `2`
+
+SHA-256: `a0f906856fc06f1c6f2083eb970e5a657a82b1a84c06c095445e5d6d161cda80`
+
+`2`
+
+
+
+### `4`
+
+SHA-256: `af6e173f7be819bcd0a5c8d77918649c10ce761d8a184ff472f2e01ce64eb2e0`
+
+`4`
+
+
+
+
+
+
+
+### `AfterScheduleRecord`
+
+SHA-256: `27e337d3d6b402b221e50c247a3f518a70d0c474cc60beee15fac3e9c5cbfcbe`
+
+Sources: [`packages/schedule/schedule/src/types.ts:13`](../packages/schedule/schedule/src/types.ts)
| Property | Presence | Type |
|---|---|---|
-| `model` | required | `string` |
-| `provider` | required | `string` |
-| `reasoningEffort` | optional | `string` |
+| `afterSeconds` | required | `number` |
+| `id` | required | `string` |
+| `kind` | required | `"after"` |
+| `prompt` | required | `string` |
+| `scheduledAt` | required | `string` |
-
+
-### `packages/attachment/attachment/src/types.ts#FileAttachmentRef`
-
-SHA-256: `f19bee84bf3d20904553cdcd57465232bc1c2a194f54c4d195292ba0487223a6`
-
-Sources: [`packages/attachment/attachment/src/types.ts:39`](../packages/attachment/attachment/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `attachmentId` | required | `string` |
-| `bytes` | required | `number` |
-| `name` | required | `string` |
-
-
-
-### `packages/attachment/attachment/src/types.ts#ImageAttachmentRef`
-
-SHA-256: `b0b0eb1b16490f6bee135b2377e8f8c39227974c799ad7d49ff418af23ecbc35`
-
-Sources: [`packages/attachment/attachment/src/types.ts:11`](../packages/attachment/attachment/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `attachmentId` | required | `string` |
-| `bytes` | required | `number` |
-| `height` | required | `number` |
-| `mediaType` | required | [`packages/attachment/attachment/src/types.ts#ImageMediaType`](#persistence-type-packagesattachmentattachmentsrctypestsimagemediatype) |
-| `name` | optional | `string` |
-| `originalDimensions` | optional | [`event:agent/inbox/spliced.data.inserted[0].content[0][2].attachment.originalDimensions`](#persistence-type-eventagentinboxspliceddatainserted0content02attachmentoriginaldimensions) |
-| `width` | required | `number` |
-
-
-
-### `packages/attachment/attachment/src/types.ts#ImageMediaType`
-
-SHA-256: `2f1e6a7ebace43d727ae138ddcd352eb3813960009e5805b8c5ac84300c97716`
-
-Sources: [`packages/attachment/attachment/src/types.ts:8`](../packages/attachment/attachment/src/types.ts)
-
-One of:
-
-- `"image/gif"`
-- `"image/jpeg"`
-- `"image/png"`
-- `"image/webp"`
-
-
-
-### `packages/compaction/compaction-image-offload/src/projection.ts#ImageOffloadTarget`
-
-SHA-256: `1cde1bedde79c5e8a56aee9c05c8e0a579cf5bc611deb85b93fa331a16ca978f`
-
-Sources: [`packages/compaction/compaction-image-offload/src/projection.ts:9`](../packages/compaction/compaction-image-offload/src/projection.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `imageIndexes` | required | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `seq` | required | `number` |
+
-### `packages/context/agent-instructions/src/render.ts#AgentInstructionChange`
+### `AgentInstructionChange`
SHA-256: `83da72c6857601c75da11212ef847f57d457b9c99f0a82246dcdff3e26700239`
@@ -4517,14 +2752,26 @@ Sources: [`packages/context/agent-instructions/src/render.ts:47`](../packages/co
| Property | Presence | Type |
|---|---|---|
-| `action` | required | [`event:agent/inbox/spliced.data.inserted[0].source[16].changes[0].action`](#persistence-type-eventagentinboxspliceddatainserted0source16changes0action) |
+| `action` | required | [`union (3 variants)`](#persistence-type-sha256-904bf499d98be4a3a5f836fcac533b6c4899569b018071e6604e1d32657d00fd) |
| `digest` | optional | `string` |
| `path` | required | `string` |
| `scope` | required | `string` |
+
+
+### `AgentInstructionChange[]`
+
+SHA-256: `2ab12a0e345658f9342816d773fe610f049982bcad82631f43b9205abe43e5ee`
+
+Array of [`AgentInstructionChange`](#persistence-type-sha256-83da72c6857601c75da11212ef847f57d457b9c99f0a82246dcdff3e26700239).
+
+
+
+
+
-### `packages/context/agent-instructions/src/state.ts#AgentInstructionSource`
+### `AgentInstructionSource`
SHA-256: `6f22a9d02b9a1f1157f3b0e7bdccd7e7b12b085c4efdb709dfc74a465cd4e590`
@@ -4534,527 +2781,35 @@ Sources: [`packages/context/agent-instructions/src/state.ts:37`](../packages/con
|---|---|---|
| `baseline` | optional | `true` |
| `baselineIdentity` | optional | `string` |
-| `changes` | required | [`event:agent/inbox/spliced.data.inserted[0].source[16].changes`](#persistence-type-eventagentinboxspliceddatainserted0source16changes) |
+| `changes` | required | [`AgentInstructionChange[]`](#persistence-type-sha256-2ab12a0e345658f9342816d773fe610f049982bcad82631f43b9205abe43e5ee) |
| `form` | required | `"instructions"` |
| `kind` | required | `"agent-instructions"` |
-
+
-### `packages/context/session-reference/src/types.ts#SessionReferenceSource`
+
-SHA-256: `f56c5b59ca0161310c338d31dd16cf14287ccd602ff4181058df178c1c286d7f`
+
-Sources: [`packages/context/session-reference/src/types.ts:13`](../packages/context/session-reference/src/types.ts)
+### `AgentMessageSource`
+
+SHA-256: `4a9bef9f27a942520cc2279ca7dd3082556e4bff543f66b5c0333e1bbed1cd86`
+
+Sources: [`packages/subagent/subagent/src/continuation-messages.ts:15`](../packages/subagent/subagent/src/continuation-messages.ts)
| Property | Presence | Type |
|---|---|---|
-| `form` | required | `"recall"` |
-| `kind` | required | `"session-reference"` |
-| `references` | required | [`event:agent/inbox/spliced.data.inserted[0].source[15].references`](#persistence-type-eventagentinboxspliceddatainserted0source15references) |
-| `version` | required | `1` |
+| `form` | required | `"relay"` |
+| `kind` | required | `"agent-message"` |
+| `senderSessionId` | required | `string` |
-
+
-### `packages/core/agent/src/types.ts#InboxTarget`
-
-SHA-256: `96f4a9c81fc0f940ef71528a8cc66731ae4cf1f40d79680c5fe3c39f96d7723c`
-
-Sources: [`packages/core/agent/src/types.ts:30`](../packages/core/agent/src/types.ts)
-
-One of:
-
-- `"next-step"`
-- `"next-turn"`
-
-
-
-### `packages/core/session/src/types.ts#EpochHeader`
-
-SHA-256: `c55a891c7aac496de6ee64c91c1fb65728c977314013033e42c863428aada854`
-
-Sources: [`packages/core/session/src/types.ts:239`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `adapterDefaults` | optional | [`packages/llm/llm/src/call-config.ts#LlmCallConfigAdapterDefaults`](#persistence-type-packagesllmllmsrccall-configtsllmcallconfigadapterdefaults) |
-| `config` | required | [`packages/llm/llm/src/call-config.ts#LlmCallConfig`](#persistence-type-packagesllmllmsrccall-configtsllmcallconfig) |
-| `tools` | optional | [`event:request/header.data.header.tools`](#persistence-type-eventrequestheaderdataheadertools) |
-
-
-
-### `packages/core/session/src/types.ts#RequestContext`
-
-SHA-256: `b158f3ff6923714807c0d73882f0b05dc87f8fa85c9e90814852d48bbc866081`
-
-Sources: [`packages/core/session/src/types.ts:249`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `contextWindow` | optional | `number` |
-| `model` | required | `string` |
-| `provider` | required | `string` |
-| `systemPromptUpdate` | optional | `"in-history"` |
-
-
-
-### `packages/core/session/src/types.ts#RequestHeaderReason`
-
-SHA-256: `530da6c0267813bb4511af72883cc518834e624e3b3220a7062955fd57a788a6`
-
-Sources: [`packages/core/session/src/types.ts:268`](../packages/core/session/src/types.ts)
-
-One of:
-
-- `"change"`
-- `"initial"`
-- `"resume"`
-- `"series"`
-
-
-
-### `packages/core/session/src/types.ts#SessionHeader`
-
-SHA-256: `1a3440e3577382704d42a6263aa463504eb74c566734a55e9503a63efcd02445`
-
-Sources: [`packages/core/session/src/types.ts:93`](../packages/core/session/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `agentPreset` | optional | `string` |
-| `createdAt` | required | `number` |
-| `cwd` | optional | `string` |
-| `delegationDepth` | optional | `number` |
-| `id` | required | `string` |
-| `isSeeded` | required | `boolean` |
-| `origin` | optional | `"subagent"` |
-| `parentSession` | optional | `string` |
-| `version` | required | `4` |
-
-
-
-### `packages/core/session/src/types.ts#SurfaceOp`
-
-SHA-256: `335e242de1fcc17b6ca920fc420d71bec2d76e53e37955c00948b65ab77f05c5`
-
-Sources: [`packages/core/session/src/types.ts:448`](../packages/core/session/src/types.ts)
-
-One of:
-
-- `"append"`
-- [`SessionEventEnvelope[6].surfaceOp[1]`](#persistence-type-sessioneventenvelope6surfaceop1)
-
-
-
-### `packages/core/session/src/types.ts#TurnEndCancelCause`
-
-SHA-256: `1f8c126cfab3df812cd115cfc23e3256f0fa2383400f4ce91ecad313577e59b0`
-
-Sources: [`packages/core/session/src/types.ts:195`](../packages/core/session/src/types.ts)
-
-One of:
-
-- [`event:turn/end.data.reason[1].reason[2]`](#persistence-type-eventturnenddatareason1reason2)
-- [`event:turn/end.data.reason[1].reason[3]`](#persistence-type-eventturnenddatareason1reason3)
-- [`event:turn/end.data.reason[1].reason[4]`](#persistence-type-eventturnenddatareason1reason4)
-- [`event:turn/end.data.reason[1].reason[1]`](#persistence-type-eventturnenddatareason1reason1)
-- [`event:agent/inbox/spliced.data.inserted[0].source[0]`](#persistence-type-eventagentinboxspliceddatainserted0source0)
-
-
-
-### `packages/core/session/src/types.ts#TurnEndReason`
-
-SHA-256: `f1687f982fa3d41ef29e159feed154ecd13af4dd209acaee16038f223f2e9402`
-
-Sources: [`packages/core/session/src/types.ts:231`](../packages/core/session/src/types.ts)
-
-One of:
-
-- [`event:turn/end.data.reason[0]`](#persistence-type-eventturnenddatareason0)
-- [`event:turn/end.data.reason[6]`](#persistence-type-eventturnenddatareason6)
-- [`event:turn/end.data.reason[5]`](#persistence-type-eventturnenddatareason5)
-- [`event:assistant/attempt.data.stream[0][3].chunk[6].reason[2]`](#persistence-type-eventassistantattemptdatastream03chunk6reason2)
-- [`event:turn/end.data.reason[3]`](#persistence-type-eventturnenddatareason3)
-- [`event:turn/end.data.reason[1]`](#persistence-type-eventturnenddatareason1)
-- [`event:turn/end.data.reason[2]`](#persistence-type-eventturnenddatareason2)
-
-
-
-### `packages/core/tools/src/index.ts#ToolRestriction`
-
-SHA-256: `3cfc3a56502da1f8c6153c2c56657bab4b749056968634dd0991d325ec1c919f`
-
-Sources: [`packages/core/tools/src/index.ts:682`](../packages/core/tools/src/index.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `allow` | optional | [`event:assistant/attempt.data.stream[0][0].texts`](#persistence-type-eventassistantattemptdatastream00texts) |
-| `deny` | optional | [`event:assistant/attempt.data.stream[0][0].texts`](#persistence-type-eventassistantattemptdatastream00texts) |
-
-
-
-### `packages/core/tools/src/types.ts#PtcDispatchEventData`
-
-SHA-256: `8d2e5a3c4230e6ea6c0b5151f02241d0db02cd2551f2df1b6b9700cddcc0dca3`
-
-Sources: [`packages/core/tools/src/types.ts:20`](../packages/core/tools/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `arguments` | required | `unknown` (opaque) |
-| `content` | required | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `error` | optional | [`event:tool/ptc-dispatch.data.error`](#persistence-type-eventtoolptc-dispatchdataerror) |
-| `isError` | required | `boolean` |
-| `name` | required | `string` |
-| `parentCallId` | required | `string` |
-| `rootCallId` | required | `string` |
-| `subCallId` | required | `string` |
-
-
-
-### `packages/core/tools/src/types.ts#PtcDispatchStartEventData`
-
-SHA-256: `2fe5026daf14bd4ff2b7bfb7cf9791c302d9cbba06802178b6dfec00b892698f`
-
-Sources: [`packages/core/tools/src/types.ts:11`](../packages/core/tools/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `arguments` | required | `unknown` (opaque) |
-| `name` | required | `string` |
-| `parentCallId` | required | `string` |
-| `rootCallId` | required | `string` |
-| `subCallId` | required | `string` |
-
-
-
-### `packages/deliverables/tool-present/src/types.ts#PresentedFile`
-
-SHA-256: `b8fc636a2121df9d8423c242e03c9d23b7ab7c6fdce00e45746932c60b730f97`
-
-Sources: [`packages/deliverables/tool-present/src/types.ts:5`](../packages/deliverables/tool-present/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `description` | optional | `string` |
-| `path` | required | `string` |
-
-
-
-### `packages/experimental/agent-team/src/types.ts#TeamMemberPhase`
-
-SHA-256: `dfce5db4aa42b7ebe0bb79eca92553587287e18c06b9eba85cbfb9d332e26acd`
-
-Sources: [`packages/experimental/agent-team/src/types.ts:44`](../packages/experimental/agent-team/src/types.ts)
-
-One of:
-
-- `"active"`
-- `"failed"`
-- `"provisioning"`
-
-
-
-### `packages/experimental/agent-team/src/types.ts#TeamMemberSnapshot`
-
-SHA-256: `6598cd6da253948d6b207c6374a45335804c79b576866d6215649c2d1bc85e25`
-
-Sources: [`packages/experimental/agent-team/src/types.ts:47`](../packages/experimental/agent-team/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `context` | required | [`event:team/member.data.member.context`](#persistence-type-eventteammemberdatamembercontext) |
-| `description` | required | `string` |
-| `error` | optional | `string` |
-| `id` | required | `string` |
-| `name` | required | `string` |
-| `phase` | required | [`packages/experimental/agent-team/src/types.ts#TeamMemberPhase`](#persistence-type-packagesexperimentalagent-teamsrctypeststeammemberphase) |
-| `provider` | required | `string` |
-
-
-
-### `packages/experimental/agent-team/src/types.ts#TeamMessageSnapshot`
-
-SHA-256: `5b694f394d5e11609887a3ccfa82844935d49806c37e336b30be2186d649ab94`
-
-Sources: [`packages/experimental/agent-team/src/types.ts:106`](../packages/experimental/agent-team/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `content` | required | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `id` | required | `string` |
-| `senderId` | required | `string` |
-| `senderName` | required | `string` |
-| `targetId` | required | `string` |
-
-
-
-### `packages/experimental/agent-team/src/types.ts#TeamMessageSource`
-
-SHA-256: `2152caf1a71e588e4df2358a806dea24936c1c47131134f01a12939d12cdc0c0`
-
-Sources: [`packages/experimental/agent-team/src/types.ts:115`](../packages/experimental/agent-team/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `kind` | required | `"team-message"` |
-| `messageId` | required | `string` |
-| `senderId` | required | `string` |
-| `senderName` | required | `string` |
-| `teamId` | required | `string` |
-
-
-
-### `packages/experimental/agent-team/src/types.ts#TeamTaskSnapshot`
-
-SHA-256: `51edec100659da3a9bd9c3f6ba1180f5e64ec9a1585e5057080df45c180bd357`
-
-Sources: [`packages/experimental/agent-team/src/types.ts:74`](../packages/experimental/agent-team/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `blockedBy` | required | [`event:assistant/attempt.data.stream[0][0].texts`](#persistence-type-eventassistantattemptdatastream00texts) |
-| `description` | required | `string` |
-| `id` | required | `string` |
-| `ownerId` | optional | `string` |
-| `revision` | required | `number` |
-| `status` | required | [`packages/experimental/agent-team/src/types.ts#TeamTaskStatus`](#persistence-type-packagesexperimentalagent-teamsrctypeststeamtaskstatus) |
-| `subject` | required | `string` |
-| `writeScopes` | required | [`event:assistant/attempt.data.stream[0][0].texts`](#persistence-type-eventassistantattemptdatastream00texts) |
-
-
-
-### `packages/experimental/agent-team/src/types.ts#TeamTaskStatus`
-
-SHA-256: `b2d2a01e51341a3bfec809198952c8c830a7899f4cb6ecd3c1dc0b5d9a2af943`
-
-Sources: [`packages/experimental/agent-team/src/types.ts:71`](../packages/experimental/agent-team/src/types.ts)
-
-One of:
-
-- `"completed"`
-- `"deleted"`
-- `"in_progress"`
-- `"pending"`
-
-
-
-### `packages/feedback/command-feedback/src/types.ts#FeedbackRecord`
-
-SHA-256: `7d54a5a5e629e2e7783bfac72683bcc5e969e9f43426b9289826aaf294ff6344`
-
-Sources: [`packages/feedback/command-feedback/src/types.ts:27`](../packages/feedback/command-feedback/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `category` | optional | [`event:feedback/message-put.data.item.category`](#persistence-type-eventfeedbackmessage-putdataitemcategory) |
-| `text` | optional | `string` |
-
-
-
-### `packages/feedback/message-feedback/src/types.ts#MessageFeedbackDelete`
-
-SHA-256: `7c6129b6961cf4b2a030f36c78d2b0a5be38617651a9b81322e054ee512bee06`
-
-Sources: [`packages/feedback/message-feedback/src/types.ts:46`](../packages/feedback/message-feedback/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `messageId` | required | `string` |
-| `sessionId` | required | `string` |
-
-
-
-### `packages/feedback/message-feedback/src/types.ts#MessageFeedbackItem`
-
-SHA-256: `3d7d07060a7be77984feb651ea2bf1925d3e0477911d9d3ed86330d1e8ca6182`
-
-Sources: [`packages/feedback/message-feedback/src/types.ts:20`](../packages/feedback/message-feedback/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `category` | optional | [`event:feedback/message-put.data.item.category`](#persistence-type-eventfeedbackmessage-putdataitemcategory) |
-| `createdAt` | required | `number` |
-| `messageId` | required | `string` |
-| `note` | optional | `string` |
-| `rating` | required | [`packages/feedback/message-feedback/src/types.ts#MessageFeedbackRating`](#persistence-type-packagesfeedbackmessage-feedbacksrctypestsmessagefeedbackrating) |
-| `updatedAt` | required | `number` |
-| `version` | required | `string` |
-
-
-
-### `packages/feedback/message-feedback/src/types.ts#MessageFeedbackPut`
-
-SHA-256: `aa7bc2817014ca6c45719b1c193c5c131be718a0921f34345098ff250f444626`
-
-Sources: [`packages/feedback/message-feedback/src/types.ts:38`](../packages/feedback/message-feedback/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `item` | required | [`packages/feedback/message-feedback/src/types.ts#MessageFeedbackItem`](#persistence-type-packagesfeedbackmessage-feedbacksrctypestsmessagefeedbackitem) |
-| `sessionId` | required | `string` |
-
-
-
-### `packages/feedback/message-feedback/src/types.ts#MessageFeedbackRating`
-
-SHA-256: `390eed1028aba02774f14408647acec10ec5516e97d4f15ecde2b9989d5a69f2`
-
-Sources: [`packages/feedback/message-feedback/src/types.ts:17`](../packages/feedback/message-feedback/src/types.ts)
-
-One of:
-
-- `"negative"`
-- `"positive"`
-
-
-
-### `packages/goal/goal/src/domain.ts#GoalChangeMeta`
-
-SHA-256: `7d226b9fd95b4ba213d4237c22e930a91c3c769c95ca7f92977b9d625ba13438`
-
-Sources: [`packages/goal/goal/src/domain.ts:44`](../packages/goal/goal/src/domain.ts)
-
-One of:
-
-- [`packages/goal/goal/src/domain.ts#GoalClearChangeMeta`](#persistence-type-packagesgoalgoalsrcdomaintsgoalclearchangemeta)
-- [`packages/goal/goal/src/domain.ts#GoalSnapshotChangeMeta`](#persistence-type-packagesgoalgoalsrcdomaintsgoalsnapshotchangemeta)
-
-
-
-### `packages/goal/goal/src/domain.ts#GoalClearChangeMeta`
-
-SHA-256: `cffcdc19881ab61ec0a9ce18743996f7ac44ac8889f34dfac36ae745574aa22f`
-
-Sources: [`packages/goal/goal/src/domain.ts:35`](../packages/goal/goal/src/domain.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `cleared` | required | [`packages/goal/goal/src/types.ts#GoalRef`](#persistence-type-packagesgoalgoalsrctypestsgoalref) |
-| `clearedAt` | required | `number` |
-| `kind` | required | `"goal/change"` |
-| `operation` | required | `"clear"` |
-| `version` | required | `1` |
-
-
-
-### `packages/goal/goal/src/domain.ts#GoalMessageSource`
-
-SHA-256: `7f959241c24128b4983b559984811861dc59774b85905c8fa57c6cb0148a3dbc`
-
-Sources: [`packages/goal/goal/src/domain.ts:47`](../packages/goal/goal/src/domain.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `goalId` | required | `string` |
-| `kind` | required | `"goal"` |
-| `revision` | required | `number` |
-| `round` | required | `number` |
-
-
-
-### `packages/goal/goal/src/domain.ts#GoalSnapshotChangeMeta`
-
-SHA-256: `1df34a6c086866ffdc2dd9e8e5c581c3751a010cdf6b8538a7327f7a3237f0b4`
-
-Sources: [`packages/goal/goal/src/domain.ts:24`](../packages/goal/goal/src/domain.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `createdAt` | required | `number` |
-| `goal` | required | [`packages/goal/goal/src/types.ts#GoalSnapshot`](#persistence-type-packagesgoalgoalsrctypestsgoalsnapshot) |
-| `kind` | required | `"goal/change"` |
-| `operation` | required | [`event:goal/change.data[0].operation`](#persistence-type-eventgoalchangedata0operation) |
-| `roundsStarted` | required | `number` |
-| `updatedAt` | required | `number` |
-| `version` | required | `1` |
-
-
-
-### `packages/goal/goal/src/types.ts#GoalBlockReason`
-
-SHA-256: `84ac8c1a66ffc697262e181f42e851259eae14038c113ca329fb4700ccdb1f7c`
-
-Sources: [`packages/goal/goal/src/types.ts:52`](../packages/goal/goal/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `code` | required | `string` |
-| `message` | required | `string` |
-
-
-
-### `packages/goal/goal/src/types.ts#GoalPhase`
-
-SHA-256: `b8327af7ee5767952d1300cb4f03b7fc04197ae5ba275e13981c689ff7506172`
-
-Sources: [`packages/goal/goal/src/types.ts:45`](../packages/goal/goal/src/types.ts)
-
-One of:
-
-- `"active"`
-- `"blocked"`
-- `"complete"`
-- `"paused"`
-
-
-
-### `packages/goal/goal/src/types.ts#GoalRef`
-
-SHA-256: `0b6d718c693fdf7f06dcccb0bcbbabe78cc63514eafc62d6b2a3899735279d6f`
-
-Sources: [`packages/goal/goal/src/types.ts:20`](../packages/goal/goal/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `id` | required | `string` |
-| `revision` | required | `number` |
-
-
-
-### `packages/goal/goal/src/types.ts#GoalSnapshot`
-
-SHA-256: `6bbe793f6a93dc8d50a4d4d3fbb6f8ed15650bcb7e151d28669628f7b7c3fc25`
-
-Sources: [`packages/goal/goal/src/types.ts:60`](../packages/goal/goal/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `blockedReason` | optional | [`packages/goal/goal/src/types.ts#GoalBlockReason`](#persistence-type-packagesgoalgoalsrctypestsgoalblockreason) |
-| `id` | required | `string` |
-| `maxGoalRounds` | required | `number` |
-| `objective` | required | `string` |
-| `phase` | required | [`packages/goal/goal/src/types.ts#GoalPhase`](#persistence-type-packagesgoalgoalsrctypestsgoalphase) |
-| `revision` | required | `number` |
-
-
-
-### `packages/hooks/hook-protocol/src/types.ts#HookDialect`
-
-SHA-256: `a6b41f5bede8094d7bf635be5d69b1bd7a25e006ca9cf9415bceb9322f1a7feb`
-
-Sources: [`packages/hooks/hook-protocol/src/types.ts:48`](../packages/hooks/hook-protocol/src/types.ts)
-
-One of:
-
-- `"claude-code"`
-- `"codex"`
-
-
-
-### `packages/interaction/user-approval/src/index.ts#ApprovalPolicy`
-
-SHA-256: `05d2ae1e0c7f8770f83f9a09047afb39a335d8ac986df3193659aa1e581472cf`
-
-Sources: [`packages/interaction/user-approval/src/index.ts:60`](../packages/interaction/user-approval/src/index.ts)
-
-One of:
-
-- `"ask"`
-- `"never"`
+
-### `packages/interaction/user-approval/src/types.ts#ApprovalOutcome`
+### `ApprovalOutcome`
SHA-256: `930c1cd289def119d443e19dd90008916bf035f0a4d23e07241e7f050f2b89b7`
@@ -5067,82 +2822,30 @@ One of:
- `"rejected"`
- `"unavailable"`
-
+
-### `packages/llm/llm-retry/src/types.ts#LlmRetryEventData`
+
-SHA-256: `c170da8ab7c37635b10867b2571811d9e317ac3ec394e8ff8efe53f902fc41c1`
+
-Sources: [`packages/llm/llm-retry/src/types.ts:16`](../packages/llm/llm-retry/src/types.ts)
+### `ApprovalPolicy`
+
+SHA-256: `05d2ae1e0c7f8770f83f9a09047afb39a335d8ac986df3193659aa1e581472cf`
+
+Sources: [`packages/interaction/user-approval/src/index.ts:60`](../packages/interaction/user-approval/src/index.ts)
One of:
-- [`event:llm/retry.data[0]`](#persistence-type-eventllmretrydata0)
-- [`event:llm/retry.data[1]`](#persistence-type-eventllmretrydata1)
+- `"ask"`
+- `"never"`
-
+
-### `packages/llm/llm-retry/src/types.ts#LlmRetryStartedEventData`
-
-SHA-256: `6f72ece8f317cd080c4f20a93f1bf709965f5b81ac4669528f5a023191cfcf20`
-
-Sources: [`packages/llm/llm-retry/src/types.ts:43`](../packages/llm/llm-retry/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `retry` | required | `number` |
-| `retryId` | required | `string` |
-| `step` | required | `number` |
-| `turn` | required | `number` |
-
-
-
-### `packages/llm/llm/src/assistant-stream.ts#AssistantStreamRecord`
-
-SHA-256: `86cf1e44038cb8b11659863dd0efafe682e41b9c782265c1d50e0a687debfc60`
-
-Sources: [`packages/llm/llm/src/assistant-stream.ts:20`](../packages/llm/llm/src/assistant-stream.ts)
-
-One of:
-
-- [`event:assistant/attempt.data.stream[0][2]`](#persistence-type-eventassistantattemptdatastream02)
-- [`event:assistant/attempt.data.stream[0][3]`](#persistence-type-eventassistantattemptdatastream03)
-- [`event:assistant/attempt.data.stream[0][1]`](#persistence-type-eventassistantattemptdatastream01)
-- [`event:assistant/attempt.data.stream[0][0]`](#persistence-type-eventassistantattemptdatastream00)
-
-
-
-### `packages/llm/llm/src/call-config.ts#LlmCallConfig`
-
-SHA-256: `67d5f73ceae82f5265258142ad6cf172de2c1fef93ba551b7f0454e0a93bffe0`
-
-Sources: [`packages/llm/llm/src/call-config.ts:23`](../packages/llm/llm/src/call-config.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `maxTokens` | optional | `number` |
-| `model` | required | `string` |
-| `provider` | required | `string` |
-| `reasoningEffort` | optional | `string` |
-| `stop` | optional | [`event:assistant/attempt.data.stream[0][0].texts`](#persistence-type-eventassistantattemptdatastream00texts) |
-| `temperature` | optional | `number` |
-
-
-
-### `packages/llm/llm/src/call-config.ts#LlmCallConfigAdapterDefaults`
-
-SHA-256: `326a9bfda27dda5882fb3cbe6e715df41dae2298fdae3d66437457268a665693`
-
-Sources: [`packages/llm/llm/src/call-config.ts:36`](../packages/llm/llm/src/call-config.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `maxTokens` | optional | `true` |
-| `reasoningEffort` | optional | `true` |
+
-### `packages/llm/llm/src/message.ts#AssistantMessage`
+### `AssistantMessage`
SHA-256: `e50b0a3ed8e6c80b672e4f855c91984f03b5c3fdd5d475bf171171f391a86c83`
@@ -5150,146 +2853,80 @@ Sources: [`packages/llm/llm/src/message.ts:148`](../packages/llm/llm/src/message
| Property | Presence | Type |
|---|---|---|
-| `content` | required | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
+| `content` | required | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
| `id` | required | `string` |
| `role` | required | `"assistant"` |
-| `source` | required | [`packages/llm/llm/src/message.ts#ModelMessageSource`](#persistence-type-packagesllmllmsrcmessagetsmodelmessagesource) |
+| `source` | required | [`ModelMessageSource`](#persistence-type-sha256-719c51f67074f97034a6c94297fe1f4b5d3c8d392c57586dab732aa5398c7a91) |
-
+
-### `packages/llm/llm/src/message.ts#ContextSnapshotSection`
+
-SHA-256: `86e1e384495ee09ac2d60c9db3610f1f1fddac2d248f6f1d6000e78054680219`
+
-Sources: [`packages/llm/llm/src/message.ts:65`](../packages/llm/llm/src/message.ts)
+### `AssistantStreamRecord`
-| Property | Presence | Type |
-|---|---|---|
-| `name` | required | `string` |
-| `text` | required | `string` |
+SHA-256: `86cf1e44038cb8b11659863dd0efafe682e41b9c782265c1d50e0a687debfc60`
-
-
-### `packages/llm/llm/src/message.ts#Message`
-
-SHA-256: `23c7cce57d20589897f4e2bd5898affc6fc611b87cd0cc8b95be1cfdd8b3a7eb`
-
-Sources: [`packages/llm/llm/src/message.ts:131`](../packages/llm/llm/src/message.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `content` | required | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `id` | required | `string` |
-| `role` | required | [`event:session/title-llm-request.data.messages[0].role`](#persistence-type-eventsessiontitle-llm-requestdatamessages0role) |
-| `source` | required | [`packages/llm/llm/src/message.ts#MessageSource`](#persistence-type-packagesllmllmsrcmessagetsmessagesource) |
-
-
-
-### `packages/llm/llm/src/message.ts#MessageSource`
-
-SHA-256: `4c965666d5b42116945bc356087cd5e1fd549e6dece560785ed60511059a8283`
-
-Sources: [`packages/llm/llm/src/message.ts:128`](../packages/llm/llm/src/message.ts)
+Sources: [`packages/llm/llm/src/assistant-stream.ts:20`](../packages/llm/llm/src/assistant-stream.ts)
One of:
-- [`packages/context/agent-instructions/src/state.ts#AgentInstructionSource`](#persistence-type-packagescontextagent-instructionssrcstatetsagentinstructionsource)
-- [`packages/llm/llm/src/message.ts#ToolMessageSource`](#persistence-type-packagesllmllmsrcmessagetstoolmessagesource)
-- [`event:agent/inbox/spliced.data.inserted[0].source[11]`](#persistence-type-eventagentinboxspliceddatainserted0source11)
-- [`event:agent/inbox/spliced.data.inserted[0].source[19]`](#persistence-type-eventagentinboxspliceddatainserted0source19)
-- [`packages/skill/tool-skill/src/index.ts#SkillCatalogSource`](#persistence-type-packagesskilltool-skillsrcindextsskillcatalogsource)
-- [`packages/skill/skill/src/index.ts#SkillInvocationSource`](#persistence-type-packagesskillskillsrcindextsskillinvocationsource)
-- [`event:agent/inbox/spliced.data.inserted[0].source[4]`](#persistence-type-eventagentinboxspliceddatainserted0source4)
-- [`event:agent/inbox/spliced.data.inserted[0].source[5]`](#persistence-type-eventagentinboxspliceddatainserted0source5)
-- [`event:agent/inbox/spliced.data.inserted[0].source[6]`](#persistence-type-eventagentinboxspliceddatainserted0source6)
-- [`event:agent/inbox/spliced.data.inserted[0].source[3]`](#persistence-type-eventagentinboxspliceddatainserted0source3)
-- [`event:agent/inbox/spliced.data.inserted[0].source[2]`](#persistence-type-eventagentinboxspliceddatainserted0source2)
-- [`event:agent/inbox/spliced.data.inserted[0].source[7]`](#persistence-type-eventagentinboxspliceddatainserted0source7)
-- [`packages/context/session-reference/src/types.ts#SessionReferenceSource`](#persistence-type-packagescontextsession-referencesrctypestssessionreferencesource)
-- [`packages/subagent/subagent/src/continuation-messages.ts#SubagentSettledMessageSource`](#persistence-type-packagessubagentsubagentsrccontinuation-messagestssubagentsettledmessagesource)
-- [`packages/subagent/subagent/src/continuation-messages.ts#AgentMessageSource`](#persistence-type-packagessubagentsubagentsrccontinuation-messagestsagentmessagesource)
-- [`packages/goal/goal/src/domain.ts#GoalMessageSource`](#persistence-type-packagesgoalgoalsrcdomaintsgoalmessagesource)
-- [`packages/experimental/agent-team/src/types.ts#TeamMessageSource`](#persistence-type-packagesexperimentalagent-teamsrctypeststeammessagesource)
-- [`packages/llm/llm/src/message.ts#ModelMessageSource`](#persistence-type-packagesllmllmsrcmessagetsmodelmessagesource)
-- [`event:agent/inbox/spliced.data.inserted[0].source[1]`](#persistence-type-eventagentinboxspliceddatainserted0source1)
-- [`event:agent/inbox/spliced.data.inserted[0].source[0]`](#persistence-type-eventagentinboxspliceddatainserted0source0)
+- [`{ type: "tool-call-chunks" }`](#persistence-type-sha256-3860b4757d512a2869be833acb0faf834335b1b056bf3f83df5474dce95f8fa6)
+- [`{ type: "chunk" }`](#persistence-type-sha256-c93b6f51b399607349b4bcc66b58e848a44250ffc1e2537207bd092dfff94192)
+- [`{ type: "reasoning-chunks" }`](#persistence-type-sha256-71bb3254ec8f1e491ce63b762a7b5f18709de23aa4e8abcc8b886f4b6ce051dd)
+- [`{ type: "text-chunks" }`](#persistence-type-sha256-e72269f931559e901e5e8fe1cfcbd0669fb795f43cc038ff39fba62f60403c33)
-
+
-### `packages/llm/llm/src/message.ts#ModelMessageSource`
+### `AssistantStreamRecord[]`
-SHA-256: `719c51f67074f97034a6c94297fe1f4b5d3c8d392c57586dab732aa5398c7a91`
+SHA-256: `26f3bb7529cfce1e3a0f1ededa365d8b426758ca0feeb0beabeee805f8bb8346`
-Sources: [`packages/llm/llm/src/message.ts:24`](../packages/llm/llm/src/message.ts)
+Array of [`AssistantStreamRecord`](#persistence-type-sha256-86cf1e44038cb8b11659863dd0efafe682e41b9c782265c1d50e0a687debfc60).
+
+
+
+
+
+
+
+### `AtScheduleRecord`
+
+SHA-256: `658d895d187b26d83f3b53109a3bf77bbfba9f6f9a6d4bc4ee4315b4eb36239e`
+
+Sources: [`packages/schedule/schedule/src/types.ts:27`](../packages/schedule/schedule/src/types.ts)
| Property | Presence | Type |
|---|---|---|
-| `kind` | required | `"model"` |
-| `model` | required | `string` |
-| `provider` | required | `string` |
-| `replayState` | optional | `unknown` (opaque) |
-
-
-
-### `packages/llm/llm/src/message.ts#SystemMessage`
-
-SHA-256: `302b01ddddcbb3b16cfa3fba2a5d99f5082a55fbd9dc5c83a179a228b8a6a0ca`
-
-Sources: [`packages/llm/llm/src/message.ts:158`](../packages/llm/llm/src/message.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `content` | required | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
| `id` | required | `string` |
-| `role` | required | `"system"` |
-| `source` | required | [`event:system/message.data.message.source`](#persistence-type-eventsystemmessagedatamessagesource) |
+| `kind` | required | `"at"` |
+| `prompt` | required | `string` |
+| `scheduledAt` | required | `string` |
-
+
-### `packages/llm/llm/src/message.ts#ToolMessageSource`
+
-SHA-256: `d9c462b9f62fdd3efc76a44b9524dc8781f6b91cd9c7e584b17d971defafebab`
+
-Sources: [`packages/llm/llm/src/message.ts:29`](../packages/llm/llm/src/message.ts)
+### `CommandSource`
+
+SHA-256: `ada310bf0bdb8fed51f3b56ea63f6ea6b18bbd587f04fccb63a14ab0b2a24e05`
+
+Sources: [`packages/core/session/src/types.ts:189`](../packages/core/session/src/types.ts) · [`packages/interaction/commands/src/types.ts:75`](../packages/interaction/commands/src/types.ts) · [`packages/interaction/commands/src/types.ts:79`](../packages/interaction/commands/src/types.ts) · [`packages/llm/llm/src/message.ts:103`](../packages/llm/llm/src/message.ts) · [`packages/session/session-title/src/types.ts:35`](../packages/session/session-title/src/types.ts)
| Property | Presence | Type |
|---|---|---|
-| `callId` | required | `string` |
-| `kind` | required | `"tool"` |
+| `kind` | required | `"user"` |
-
+
-### `packages/llm/llm/src/message.ts#ToolResultMessage`
-
-SHA-256: `1b573e2d5c094fa87e2a8bf409ddd4ac5ba92a123085e168de44b9ccdbd5244c`
-
-Sources: [`packages/llm/llm/src/message.ts:164`](../packages/llm/llm/src/message.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `content` | required | [`event:tool/result.data.message.content`](#persistence-type-eventtoolresultdatamessagecontent) |
-| `id` | required | `string` |
-| `role` | required | `"user"` |
-| `source` | required | [`packages/llm/llm/src/message.ts#ToolMessageSource`](#persistence-type-packagesllmllmsrcmessagetstoolmessagesource) |
-
-
-
-### `packages/llm/llm/src/message.ts#UserMessage`
-
-SHA-256: `4de5e7644130ed715ef6b5a4d86a87b30dca4096d1a6683c66acf6f7809379c7`
-
-Sources: [`packages/llm/llm/src/message.ts:143`](../packages/llm/llm/src/message.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `content` | required | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `id` | required | `string` |
-| `role` | required | `"user"` |
-| `source` | required | [`packages/llm/llm/src/message.ts#MessageSource`](#persistence-type-packagesllmllmsrcmessagetsmessagesource) |
+
-### `packages/llm/llm/src/types.ts#ContentBlock`
+### `ContentBlock`
SHA-256: `c7b24be059d34d08929593049a1a81eaa3855166aacfe9d7603c0bc8bb728d56`
@@ -5297,16 +2934,20 @@ Sources: [`packages/llm/llm/src/types.ts:137`](../packages/llm/llm/src/types.ts)
One of:
-- [`packages/llm/llm/src/types.ts#ReasoningBlock`](#persistence-type-packagesllmllmsrctypestsreasoningblock)
-- [`event:web/deepseek-search-llm-request.data.body.messages[0].content[0]`](#persistence-type-eventwebdeepseek-search-llm-requestdatabodymessages0content0)
-- [`packages/llm/llm/src/types.ts#ToolCallBlock`](#persistence-type-packagesllmllmsrctypeststoolcallblock)
-- [`packages/llm/llm/src/types.ts#ImageBlock`](#persistence-type-packagesllmllmsrctypestsimageblock)
-- [`packages/llm/llm/src/types.ts#FileBlock`](#persistence-type-packagesllmllmsrctypestsfileblock)
-- [`packages/llm/llm/src/types.ts#ToolResultBlock`](#persistence-type-packagesllmllmsrctypeststoolresultblock)
+- [`ReasoningBlock`](#persistence-type-sha256-814d9434e1ddf9078612b3b34322f26e9363b469213335007f7e9ba7fee9464e)
+- [`TextBlock`](#persistence-type-sha256-4e887768586528565381dadbddee6cef555874148089f4579e0b4b1ad096fc9c)
+- [`ToolCallBlock`](#persistence-type-sha256-c1f0f17b6493b85db6453bb30e01b208d703731b25bc1e68e5d4fc72eea9cdea)
+- [`ImageBlock`](#persistence-type-sha256-12d5808fac1996b9b3c2afa806e03022252ba2d7b88f835862ae1896591f60c7)
+- [`FileBlock`](#persistence-type-sha256-f2da0f27c1e6add59982c37b15e4a4912c5b33466859cce3b13d503600e24aef)
+- [`ToolResultBlock`](#persistence-type-sha256-d61574d68558c5a184429e70b04da393dd5460bf5cc3ddef814546e659bd5127)
+
+
+
+
-### `packages/llm/llm/src/types.ts#ContentBlockType`
+### `ContentBlockType`
SHA-256: `757013fff5879d73d5753d8d1120faab56110e88ac3932485ab7e034d9e9ce61`
@@ -5321,219 +2962,106 @@ One of:
- `"tool-call"`
- `"tool-result"`
-
+
-### `packages/llm/llm/src/types.ts#FileBlock`
+### `ContentBlock[]`
-SHA-256: `f2da0f27c1e6add59982c37b15e4a4912c5b33466859cce3b13d503600e24aef`
+SHA-256: `bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75`
-Sources: [`packages/llm/llm/src/types.ts:97`](../packages/llm/llm/src/types.ts)
+Array of [`ContentBlock`](#persistence-type-sha256-c7b24be059d34d08929593049a1a81eaa3855166aacfe9d7603c0bc8bb728d56).
-| Property | Presence | Type |
-|---|---|---|
-| `attachment` | required | [`packages/attachment/attachment/src/types.ts#FileAttachmentRef`](#persistence-type-packagesattachmentattachmentsrctypestsfileattachmentref) |
-| `type` | required | `"file"` |
+
-
+
-### `packages/llm/llm/src/types.ts#FinishReason`
+
-SHA-256: `5808e36c95355f0e745201b5db1b6bcec4ebf5adb75d3e82d7d59cc89635ab80`
+### `ContextSnapshotSection`
-Sources: [`packages/llm/llm/src/types.ts:152`](../packages/llm/llm/src/types.ts)
+SHA-256: `86e1e384495ee09ac2d60c9db3610f1f1fddac2d248f6f1d6000e78054680219`
-One of:
-
-- [`event:assistant/attempt.data.stream[0][3].chunk[6].reason[3]`](#persistence-type-eventassistantattemptdatastream03chunk6reason3)
-- [`event:assistant/attempt.data.stream[0][3].chunk[6].reason[4]`](#persistence-type-eventassistantattemptdatastream03chunk6reason4)
-- [`event:assistant/attempt.data.stream[0][3].chunk[6].reason[0]`](#persistence-type-eventassistantattemptdatastream03chunk6reason0)
-- [`event:assistant/attempt.data.stream[0][3].chunk[6].reason[1]`](#persistence-type-eventassistantattemptdatastream03chunk6reason1)
-- [`event:assistant/attempt.data.stream[0][3].chunk[6].reason[2]`](#persistence-type-eventassistantattemptdatastream03chunk6reason2)
-
-
-
-### `packages/llm/llm/src/types.ts#ImageBlock`
-
-SHA-256: `12d5808fac1996b9b3c2afa806e03022252ba2d7b88f835862ae1896591f60c7`
-
-Sources: [`packages/llm/llm/src/types.ts:78`](../packages/llm/llm/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `attachment` | required | [`packages/attachment/attachment/src/types.ts#ImageAttachmentRef`](#persistence-type-packagesattachmentattachmentsrctypestsimageattachmentref) |
-| `offloaded` | optional | `true` |
-| `type` | required | `"image"` |
-
-
-
-### `packages/llm/llm/src/types.ts#LlmFailure`
-
-SHA-256: `5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca`
-
-Sources: [`packages/llm/llm/src/types.ts:40`](../packages/llm/llm/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `code` | required | `string` |
-| `message` | required | `string` |
-| `offloadImages` | optional | `number` |
-| `providerRetryAfterMs` | optional | `number` |
-| `requestId` | optional | `string` |
-| `status` | optional | `number` |
-
-
-
-### `packages/llm/llm/src/types.ts#ReasoningBlock`
-
-SHA-256: `814d9434e1ddf9078612b3b34322f26e9363b469213335007f7e9ba7fee9464e`
-
-Sources: [`packages/llm/llm/src/types.ts:67`](../packages/llm/llm/src/types.ts)
+Sources: [`packages/llm/llm/src/message.ts:65`](../packages/llm/llm/src/message.ts)
| Property | Presence | Type |
|---|---|---|
+| `name` | required | `string` |
| `text` | required | `string` |
-| `type` | required | `"reasoning"` |
-
+
-### `packages/llm/llm/src/types.ts#ReplayEnvelope`
+### `ContextSnapshotSection[]`
-SHA-256: `0acd94fe8794574c9ae72c7855ee16d29c546096d4af760d16d1225385764555`
+SHA-256: `c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262`
-Sources: [`packages/llm/llm/src/types.ts:404`](../packages/llm/llm/src/types.ts)
+Array of [`ContextSnapshotSection`](#persistence-type-sha256-86e1e384495ee09ac2d60c9db3610f1f1fddac2d248f6f1d6000e78054680219).
+
+
+
+
+
+
+
+### `ContinuableSubagentDescriptorData`
+
+SHA-256: `6487b10ba7542f3c447b1e41a1c6a590b7bfafe0b9b66b49f34028da85bb970f`
+
+Sources: [`packages/subagent/subagent/src/descriptor.ts:72`](../packages/subagent/subagent/src/descriptor.ts)
| Property | Presence | Type |
|---|---|---|
-| `blocks` | optional | [`event:assistant/attempt.data.stream[0][3].chunk[6].replayState.blocks`](#persistence-type-eventassistantattemptdatastream03chunk6replaystateblocks) |
-| `response` | required | `unknown` (opaque) |
+| `agentModel` | optional | `string` |
+| `agentProvider` | optional | `string` |
+| `agentReasoningEffort` | optional | `string` |
+| `label` | required | `string` |
+| `mode` | required | `"continuable"` |
+| `persona` | optional | `string` |
+| `provider` | required | `string` |
+| `toolFilter` | optional | [`ToolRestriction`](#persistence-type-sha256-3cfc3a56502da1f8c6153c2c56657bab4b749056968634dd0991d325ec1c919f) |
+| `version` | required | `number` |
-
+
-### `packages/llm/llm/src/types.ts#StreamChunk`
+
-SHA-256: `071d92b9dac661fcc826c678cf64d188f26fb93aab79c627b11a03acdd34dfca`
+
-Sources: [`packages/llm/llm/src/types.ts:426`](../packages/llm/llm/src/types.ts)
+### `DeepSeekSearchLlmRequest`
-One of:
+SHA-256: `2517ba143a271508d3ca35126d5aca8f7f1facf5aaddce4adf011832042fa2b9`
-- [`event:assistant/attempt.data.stream[0][3].chunk[3]`](#persistence-type-eventassistantattemptdatastream03chunk3)
-- [`event:assistant/attempt.data.stream[0][3].chunk[4]`](#persistence-type-eventassistantattemptdatastream03chunk4)
-- [`event:assistant/attempt.data.stream[0][3].chunk[0]`](#persistence-type-eventassistantattemptdatastream03chunk0)
-- [`event:assistant/attempt.data.stream[0][3].chunk[2]`](#persistence-type-eventassistantattemptdatastream03chunk2)
-- [`event:assistant/attempt.data.stream[0][3].chunk[1]`](#persistence-type-eventassistantattemptdatastream03chunk1)
-- [`event:assistant/attempt.data.stream[0][3].chunk[6]`](#persistence-type-eventassistantattemptdatastream03chunk6)
-- [`event:assistant/attempt.data.stream[0][3].chunk[5]`](#persistence-type-eventassistantattemptdatastream03chunk5)
-
-
-
-### `packages/llm/llm/src/types.ts#TokenUsage`
-
-SHA-256: `fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394`
-
-Sources: [`packages/llm/llm/src/types.ts:162`](../packages/llm/llm/src/types.ts)
+Sources: [`packages/web/web-search-deepseek/src/provider.ts:55`](../packages/web/web-search-deepseek/src/provider.ts)
| Property | Presence | Type |
|---|---|---|
-| `cacheReadTokens` | optional | `number` |
-| `cacheWriteTokens` | optional | `number` |
-| `inputTokens` | required | `number` |
-| `outputTokens` | required | `number` |
-| `reasoningTokens` | optional | `number` |
-| `totalTokens` | optional | `number` |
+| `apiVersion` | required | `string` |
+| `body` | required | [`{ max_tokens, messages, model, tools }`](#persistence-type-sha256-930a6567a10bb62ddd157bd8abdf4b182810c8c3b49d91309b3b009a5fed9731) |
+| `endpoint` | required | `string` |
-
+
-### `packages/llm/llm/src/types.ts#ToolCallBlock`
+
-SHA-256: `c1f0f17b6493b85db6453bb30e01b208d703731b25bc1e68e5d4fc72eea9cdea`
+
-Sources: [`packages/llm/llm/src/types.ts:104`](../packages/llm/llm/src/types.ts)
+### `EpochHeader`
+
+SHA-256: `c55a891c7aac496de6ee64c91c1fb65728c977314013033e42c863428aada854`
+
+Sources: [`packages/core/session/src/types.ts:239`](../packages/core/session/src/types.ts)
| Property | Presence | Type |
|---|---|---|
-| `arguments` | required | `string` |
-| `id` | required | `string` |
-| `name` | required | `string` |
-| `type` | required | `"tool-call"` |
+| `adapterDefaults` | optional | [`LlmCallConfigAdapterDefaults`](#persistence-type-sha256-326a9bfda27dda5882fb3cbe6e715df41dae2298fdae3d66437457268a665693) |
+| `config` | required | [`LlmCallConfig`](#persistence-type-sha256-67d5f73ceae82f5265258142ad6cf172de2c1fef93ba551b7f0454e0a93bffe0) |
+| `tools` | optional | [`ToolSchema[]`](#persistence-type-sha256-6d63f25a28b70801937a46b1058be5f52d4efbaf3516141470463ae469b59c23) |
-
+
-### `packages/llm/llm/src/types.ts#ToolResultBlock`
-
-SHA-256: `d61574d68558c5a184429e70b04da393dd5460bf5cc3ddef814546e659bd5127`
-
-Sources: [`packages/llm/llm/src/types.ts:114`](../packages/llm/llm/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `content` | required | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `isError` | optional | `boolean` |
-| `toolCallId` | required | `string` |
-| `type` | required | `"tool-result"` |
-
-
-
-### `packages/llm/llm/src/types.ts#ToolSchema`
-
-SHA-256: `7f5f2a8618c2ece530a18b1358b890fb57fb8c35705e47b66bff2296f8c6e889`
-
-Sources: [`packages/llm/llm/src/types.ts:447`](../packages/llm/llm/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `description` | required | `string` |
-| `name` | required | `string` |
-| `parameters` | required | [`event:request/header.data.header.tools[0].parameters`](#persistence-type-eventrequestheaderdataheadertools0parameters) |
-
-
-
-### `packages/sandbox/sandbox/src/index.ts#SandboxMode`
-
-SHA-256: `fab2bb09bc5e3b9db0685e8f5500b029af1a2b33e70bc703c1d5d0f596fbc1fd`
-
-Sources: [`packages/sandbox/sandbox/src/index.ts:29`](../packages/sandbox/sandbox/src/index.ts)
-
-One of:
-
-- `"danger-full-access"`
-- `"read-only"`
-- `"workspace-write"`
-
-
-
-### `packages/schedule/schedule/src/types.ts#AfterScheduleRecord`
-
-SHA-256: `27e337d3d6b402b221e50c247a3f518a70d0c474cc60beee15fac3e9c5cbfcbe`
-
-Sources: [`packages/schedule/schedule/src/types.ts:13`](../packages/schedule/schedule/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `afterSeconds` | required | `number` |
-| `id` | required | `string` |
-| `kind` | required | `"after"` |
-| `prompt` | required | `string` |
-| `scheduledAt` | required | `string` |
-
-
-
-### `packages/schedule/schedule/src/types.ts#AtScheduleRecord`
-
-SHA-256: `658d895d187b26d83f3b53109a3bf77bbfba9f6f9a6d4bc4ee4315b4eb36239e`
-
-Sources: [`packages/schedule/schedule/src/types.ts:27`](../packages/schedule/schedule/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `id` | required | `string` |
-| `kind` | required | `"at"` |
-| `prompt` | required | `string` |
-| `scheduledAt` | required | `string` |
+
-### `packages/schedule/schedule/src/types.ts#EveryScheduleDispatchChange`
+### `EveryScheduleDispatchChange`
SHA-256: `e6063d0451dc02026fd9b54ad3f77c7b1b6392ad3e872a7737ac84e13ca72344`
@@ -5546,9 +3074,13 @@ Sources: [`packages/schedule/schedule/src/types.ts:93`](../packages/schedule/sch
| `operation` | required | `"dispatch"` |
| `version` | required | `1` |
+
+
+
+
-### `packages/schedule/schedule/src/types.ts#EveryScheduleRecord`
+### `EveryScheduleRecord`
SHA-256: `66ece68282d8c06330fb83329a24ae54c386d5ccfab296bbf18369da8beb7d14`
@@ -5562,80 +3094,239 @@ Sources: [`packages/schedule/schedule/src/types.ts:39`](../packages/schedule/sch
| `prompt` | required | `string` |
| `scheduledAt` | required | `string` |
-
+
-### `packages/schedule/schedule/src/types.ts#OneShotScheduleDispatchChange`
+
-SHA-256: `8e8e91646a5cae3fc78f7532a0013ff2088ae47077642c2edd507a508209b8af`
+
-Sources: [`packages/schedule/schedule/src/types.ts:86`](../packages/schedule/schedule/src/types.ts)
+### `FeedbackRecord`
+
+SHA-256: `7d54a5a5e629e2e7783bfac72683bcc5e969e9f43426b9289826aaf294ff6344`
+
+Sources: [`packages/feedback/command-feedback/src/types.ts:27`](../packages/feedback/command-feedback/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `category` | optional | [`union (7 variants)`](#persistence-type-sha256-3305a4bb6b6c29b482ba91d59c60b47e8f98282d3dacc8c29e4a4c2712209bdd) |
+| `text` | optional | `string` |
+
+
+
+
+
+
+
+### `FileAttachmentRef`
+
+SHA-256: `f19bee84bf3d20904553cdcd57465232bc1c2a194f54c4d195292ba0487223a6`
+
+Sources: [`packages/attachment/attachment/src/types.ts:39`](../packages/attachment/attachment/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `attachmentId` | required | `string` |
+| `bytes` | required | `number` |
+| `name` | required | `string` |
+
+
+
+
+
+
+
+### `FileBlock`
+
+SHA-256: `f2da0f27c1e6add59982c37b15e4a4912c5b33466859cce3b13d503600e24aef`
+
+Sources: [`packages/llm/llm/src/types.ts:97`](../packages/llm/llm/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `attachment` | required | [`FileAttachmentRef`](#persistence-type-sha256-f19bee84bf3d20904553cdcd57465232bc1c2a194f54c4d195292ba0487223a6) |
+| `type` | required | `"file"` |
+
+
+
+
+
+
+
+### `FinishReason`
+
+SHA-256: `5808e36c95355f0e745201b5db1b6bcec4ebf5adb75d3e82d7d59cc89635ab80`
+
+Sources: [`packages/llm/llm/src/types.ts:152`](../packages/llm/llm/src/types.ts)
+
+| kind | Form property | Other required fields | Full definition |
+|---|---|---|---|
+| `aborted` | not declared | `failure`: [`LlmFailure`](#persistence-type-sha256-5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca) | [`{ failure, kind: "aborted" }`](#persistence-type-sha256-8e31bb958e9b015e6f8407eaade32217068159e816f3cc99c3ad76eb889732e0) |
+| `error` | not declared | `failure`: [`LlmFailure`](#persistence-type-sha256-5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca) | [`{ failure, kind: "error" }`](#persistence-type-sha256-693f4952fb5565da96c06bace8924b098ac2fbc915fde0ff8019701183abc057) |
+| `max-tokens` | not declared | none | [`{ kind: "max-tokens" }`](#persistence-type-sha256-ab7ec5f9eb2c6dfacca5da4c37cf7ba85d04172053ee6b1ebf1709ffcd99c1a7) |
+| `stop` | not declared | none | [`{ kind: "stop" }`](#persistence-type-sha256-1d76406cbb2ddadb0dbbb51e9d8bc6cf678fed455cf8eb512f36f7c86d37a62f) |
+| `tool-calls` | not declared | none | [`{ kind: "tool-calls" }`](#persistence-type-sha256-287211846beea1eccb5f9acee00d20388a38fcb2e95858fa2332d6f58529379a) |
+
+
+
+
+
+
+
+### `GoalBlockReason`
+
+SHA-256: `84ac8c1a66ffc697262e181f42e851259eae14038c113ca329fb4700ccdb1f7c`
+
+Sources: [`packages/goal/goal/src/types.ts:52`](../packages/goal/goal/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `code` | required | `string` |
+| `message` | required | `string` |
+
+
+
+
+
+
+
+### `GoalChangeMeta`
+
+SHA-256: `7d226b9fd95b4ba213d4237c22e930a91c3c769c95ca7f92977b9d625ba13438`
+
+Sources: [`packages/goal/goal/src/domain.ts:44`](../packages/goal/goal/src/domain.ts)
+
+| kind | Form property | Other required fields | Full definition |
+|---|---|---|---|
+| `goal/change` | not declared | `createdAt`: `number`; `goal`: [`GoalSnapshot`](#persistence-type-sha256-6bbe793f6a93dc8d50a4d4d3fbb6f8ed15650bcb7e151d28669628f7b7c3fc25); `operation`: [`union (6 variants)`](#persistence-type-sha256-62e6a429ff3f390a46ac39fb468692032f42936ca0db19b53454184189401379); `roundsStarted`: `number`; `updatedAt`: `number`; `version`: `1` | [`GoalSnapshotChangeMeta`](#persistence-type-sha256-1df34a6c086866ffdc2dd9e8e5c581c3751a010cdf6b8538a7327f7a3237f0b4) |
+| `goal/change` | not declared | `cleared`: [`GoalRef`](#persistence-type-sha256-0b6d718c693fdf7f06dcccb0bcbbabe78cc63514eafc62d6b2a3899735279d6f); `clearedAt`: `number`; `operation`: `"clear"`; `version`: `1` | [`GoalClearChangeMeta`](#persistence-type-sha256-cffcdc19881ab61ec0a9ce18743996f7ac44ac8889f34dfac36ae745574aa22f) |
+
+
+
+
+
+
+
+### `GoalClearChangeMeta`
+
+SHA-256: `cffcdc19881ab61ec0a9ce18743996f7ac44ac8889f34dfac36ae745574aa22f`
+
+Sources: [`packages/goal/goal/src/domain.ts:35`](../packages/goal/goal/src/domain.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `cleared` | required | [`GoalRef`](#persistence-type-sha256-0b6d718c693fdf7f06dcccb0bcbbabe78cc63514eafc62d6b2a3899735279d6f) |
+| `clearedAt` | required | `number` |
+| `kind` | required | `"goal/change"` |
+| `operation` | required | `"clear"` |
+| `version` | required | `1` |
+
+
+
+
+
+
+
+### `GoalMessageSource`
+
+SHA-256: `7f959241c24128b4983b559984811861dc59774b85905c8fa57c6cb0148a3dbc`
+
+Sources: [`packages/goal/goal/src/domain.ts:47`](../packages/goal/goal/src/domain.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `goalId` | required | `string` |
+| `kind` | required | `"goal"` |
+| `revision` | required | `number` |
+| `round` | required | `number` |
+
+
+
+
+
+
+
+### `GoalPhase`
+
+SHA-256: `b8327af7ee5767952d1300cb4f03b7fc04197ae5ba275e13981c689ff7506172`
+
+Sources: [`packages/goal/goal/src/types.ts:45`](../packages/goal/goal/src/types.ts)
+
+One of:
+
+- `"active"`
+- `"blocked"`
+- `"complete"`
+- `"paused"`
+
+
+
+
+
+
+
+### `GoalRef`
+
+SHA-256: `0b6d718c693fdf7f06dcccb0bcbbabe78cc63514eafc62d6b2a3899735279d6f`
+
+Sources: [`packages/goal/goal/src/types.ts:20`](../packages/goal/goal/src/types.ts)
| Property | Presence | Type |
|---|---|---|
| `id` | required | `string` |
-| `operation` | required | `"dispatch"` |
-| `version` | required | `1` |
+| `revision` | required | `number` |
-
+
-### `packages/schedule/schedule/src/types.ts#ScheduleChange`
+
-SHA-256: `e1d0e52dcd1855ffb803efc18f8f7b776c48d1c25757e8a75c0281fa298c02e1`
+
-Sources: [`packages/schedule/schedule/src/types.ts:105`](../packages/schedule/schedule/src/types.ts)
+### `GoalSnapshot`
-One of:
+SHA-256: `6bbe793f6a93dc8d50a4d4d3fbb6f8ed15650bcb7e151d28669628f7b7c3fc25`
-- [`packages/schedule/schedule/src/types.ts#EveryScheduleDispatchChange`](#persistence-type-packagesscheduleschedulesrctypestseveryscheduledispatchchange)
-- [`packages/schedule/schedule/src/types.ts#ScheduleDeleteChange`](#persistence-type-packagesscheduleschedulesrctypestsscheduledeletechange)
-- [`packages/schedule/schedule/src/types.ts#OneShotScheduleDispatchChange`](#persistence-type-packagesscheduleschedulesrctypestsoneshotscheduledispatchchange)
-- [`packages/schedule/schedule/src/types.ts#ScheduleCreateChange`](#persistence-type-packagesscheduleschedulesrctypestsschedulecreatechange)
-
-
-
-### `packages/schedule/schedule/src/types.ts#ScheduleCreateChange`
-
-SHA-256: `ca6425edd20afe34d0cedc6ad1abad1ad7b32e2fbc4c1d24db53939e80bf887f`
-
-Sources: [`packages/schedule/schedule/src/types.ts:72`](../packages/schedule/schedule/src/types.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `operation` | required | `"create"` |
-| `schedule` | required | [`packages/schedule/schedule/src/types.ts#ScheduleRecord`](#persistence-type-packagesscheduleschedulesrctypestsschedulerecord) |
-| `version` | required | `1` |
-
-
-
-### `packages/schedule/schedule/src/types.ts#ScheduleDeleteChange`
-
-SHA-256: `18dc21f12bbac8ade8377e6fbb54179e20c3d955d73fba3244c57fb6bf001df0`
-
-Sources: [`packages/schedule/schedule/src/types.ts:79`](../packages/schedule/schedule/src/types.ts)
+Sources: [`packages/goal/goal/src/types.ts:60`](../packages/goal/goal/src/types.ts)
| Property | Presence | Type |
|---|---|---|
+| `blockedReason` | optional | [`GoalBlockReason`](#persistence-type-sha256-84ac8c1a66ffc697262e181f42e851259eae14038c113ca329fb4700ccdb1f7c) |
| `id` | required | `string` |
-| `operation` | required | `"delete"` |
+| `maxGoalRounds` | required | `number` |
+| `objective` | required | `string` |
+| `phase` | required | [`GoalPhase`](#persistence-type-sha256-b8327af7ee5767952d1300cb4f03b7fc04197ae5ba275e13981c689ff7506172) |
+| `revision` | required | `number` |
+
+
+
+
+
+
+
+### `GoalSnapshotChangeMeta`
+
+SHA-256: `1df34a6c086866ffdc2dd9e8e5c581c3751a010cdf6b8538a7327f7a3237f0b4`
+
+Sources: [`packages/goal/goal/src/domain.ts:24`](../packages/goal/goal/src/domain.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `createdAt` | required | `number` |
+| `goal` | required | [`GoalSnapshot`](#persistence-type-sha256-6bbe793f6a93dc8d50a4d4d3fbb6f8ed15650bcb7e151d28669628f7b7c3fc25) |
+| `kind` | required | `"goal/change"` |
+| `operation` | required | [`union (6 variants)`](#persistence-type-sha256-62e6a429ff3f390a46ac39fb468692032f42936ca0db19b53454184189401379) |
+| `roundsStarted` | required | `number` |
+| `updatedAt` | required | `number` |
| `version` | required | `1` |
-
+
-### `packages/schedule/schedule/src/types.ts#ScheduleRecord`
+
-SHA-256: `d8f868c6b3e7189de6c1ffe2ea04794ea2aa31315b6347d12536e46020afac87`
-
-Sources: [`packages/schedule/schedule/src/types.ts:69`](../packages/schedule/schedule/src/types.ts)
-
-One of:
-
-- [`packages/schedule/schedule/src/types.ts#AfterScheduleRecord`](#persistence-type-packagesscheduleschedulesrctypestsafterschedulerecord)
-- [`packages/schedule/schedule/src/types.ts#EveryScheduleRecord`](#persistence-type-packagesscheduleschedulesrctypestseveryschedulerecord)
-- [`packages/schedule/schedule/src/types.ts#AtScheduleRecord`](#persistence-type-packagesscheduleschedulesrctypestsatschedulerecord)
+
-### `packages/session/session-persistence-jsonl/src/format.ts#HeaderLine`
+### `HeaderLine`
SHA-256: `18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f`
@@ -5654,158 +3345,445 @@ Sources: [`packages/session/session-persistence-jsonl/src/format.ts:82`](../pack
| `type` | required | `"session"` |
| `version` | required | `number` |
-
+
-### `packages/session/session-title-llm/src/index.ts#SessionTitleLlmRequestEventData`
+
-SHA-256: `9fe0e77a7816b7fdb4b953ec0e2f0cd7bbd22c5de5c3567e612d1b20eb0992e6`
+
-Sources: [`packages/session/session-title-llm/src/index.ts:27`](../packages/session/session-title-llm/src/index.ts)
+### `HookDialect`
+
+SHA-256: `a6b41f5bede8094d7bf635be5d69b1bd7a25e006ca9cf9415bceb9322f1a7feb`
+
+Sources: [`packages/hooks/hook-protocol/src/types.ts:48`](../packages/hooks/hook-protocol/src/types.ts)
+
+One of:
+
+- `"claude-code"`
+- `"codex"`
+
+
+
+
+
+
+
+### `ImageAttachmentRef`
+
+SHA-256: `b0b0eb1b16490f6bee135b2377e8f8c39227974c799ad7d49ff418af23ecbc35`
+
+Sources: [`packages/attachment/attachment/src/types.ts:11`](../packages/attachment/attachment/src/types.ts)
| Property | Presence | Type |
|---|---|---|
-| `maxTokens` | required | `number` |
-| `messageSeqs` | required | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `messages` | required | [`event:session/title-llm-request.data.messages`](#persistence-type-eventsessiontitle-llm-requestdatamessages) |
-| `route` | required | [`packages/session/session-title/src/types.ts#SessionTitleModelIdentity`](#persistence-type-packagessessionsession-titlesrctypestssessiontitlemodelidentity) |
-| `system` | required | `string` |
-| `titleProvider` | required | `string` |
+| `attachmentId` | required | `string` |
+| `bytes` | required | `number` |
+| `height` | required | `number` |
+| `mediaType` | required | [`ImageMediaType`](#persistence-type-sha256-2f1e6a7ebace43d727ae138ddcd352eb3813960009e5805b8c5ac84300c97716) |
+| `name` | optional | `string` |
+| `originalDimensions` | optional | [`{ height, width }`](#persistence-type-sha256-0f46153645c297846a3fad3911636659ca4717a5e7d71c9f50bffacd312115ef) |
+| `width` | required | `number` |
-
+
-### `packages/session/session-title/src/types.ts#SessionTitleEventData`
+
-SHA-256: `b56f6a885da3dc394c69a3e3cc5c0cfc4da15601b63fda4989eee8f40efc5be4`
+
-Sources: [`packages/session/session-title/src/types.ts:41`](../packages/session/session-title/src/types.ts)
+### `ImageBlock`
+
+SHA-256: `12d5808fac1996b9b3c2afa806e03022252ba2d7b88f835862ae1896591f60c7`
+
+Sources: [`packages/llm/llm/src/types.ts:78`](../packages/llm/llm/src/types.ts)
| Property | Presence | Type |
|---|---|---|
-| `messageSeqs` | required | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `source` | required | [`packages/session/session-title/src/types.ts#SessionTitleSource`](#persistence-type-packagessessionsession-titlesrctypestssessiontitlesource) |
-| `title` | required | `string` |
+| `attachment` | required | [`ImageAttachmentRef`](#persistence-type-sha256-b0b0eb1b16490f6bee135b2377e8f8c39227974c799ad7d49ff418af23ecbc35) |
+| `offloaded` | optional | `true` |
+| `type` | required | `"image"` |
-
+
-### `packages/session/session-title/src/types.ts#SessionTitleModelIdentity`
+
-SHA-256: `07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235`
+
-Sources: [`packages/session/session-title/src/types.ts:20`](../packages/session/session-title/src/types.ts) · [`packages/subagent/tool-subagent/src/model-selection.ts:9`](../packages/subagent/tool-subagent/src/model-selection.ts)
+### `ImageMediaType`
+
+SHA-256: `2f1e6a7ebace43d727ae138ddcd352eb3813960009e5805b8c5ac84300c97716`
+
+Sources: [`packages/attachment/attachment/src/types.ts:8`](../packages/attachment/attachment/src/types.ts)
+
+One of:
+
+- `"image/gif"`
+- `"image/jpeg"`
+- `"image/png"`
+- `"image/webp"`
+
+
+
+
+
+
+
+### `ImageOffloadTarget`
+
+SHA-256: `1cde1bedde79c5e8a56aee9c05c8e0a579cf5bc611deb85b93fa331a16ca978f`
+
+Sources: [`packages/compaction/compaction-image-offload/src/projection.ts:9`](../packages/compaction/compaction-image-offload/src/projection.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `imageIndexes` | required | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `seq` | required | `number` |
+
+
+
+### `ImageOffloadTarget[]`
+
+SHA-256: `9e2c06d8653585b33d72d5c1a80da79c8a24a88c284409bca15cc0f0ead5ebfb`
+
+Array of [`ImageOffloadTarget`](#persistence-type-sha256-1cde1bedde79c5e8a56aee9c05c8e0a579cf5bc611deb85b93fa331a16ca978f).
+
+
+
+
+
+
+
+### `InboxTarget`
+
+SHA-256: `96f4a9c81fc0f940ef71528a8cc66731ae4cf1f40d79680c5fe3c39f96d7723c`
+
+Sources: [`packages/core/agent/src/types.ts:30`](../packages/core/agent/src/types.ts)
+
+One of:
+
+- `"next-step"`
+- `"next-turn"`
+
+
+
+
+
+
+
+### `JsonValue`
+
+SHA-256: `c592ce75aab73fcab19c1d7845684c72cf402b78d2e1f2833a58ecf9f3598ed6`
+
+Sources: [`packages/util/values/src/index.ts:4`](../packages/util/values/src/index.ts)
+
+One of:
+
+- [`JsonValue[]`](#persistence-type-sha256-72ec79127a9c0d0241b1106a74cc2b24c81ce467170f1c3c93f7b71a9496d227)
+- [`{}`](#persistence-type-sha256-529e0ccd0e34079ab4ff21ed87f810cee0388246263bf22e8aba5986b56fae05)
+- `string`
+- `boolean`
+- `null`
+- `number`
+
+
+
+### `JsonValue[]`
+
+SHA-256: `72ec79127a9c0d0241b1106a74cc2b24c81ce467170f1c3c93f7b71a9496d227`
+
+Array of [`JsonValue`](#persistence-type-sha256-c592ce75aab73fcab19c1d7845684c72cf402b78d2e1f2833a58ecf9f3598ed6).
+
+
+
+
+
+
+
+### `LlmCallConfig`
+
+SHA-256: `67d5f73ceae82f5265258142ad6cf172de2c1fef93ba551b7f0454e0a93bffe0`
+
+Sources: [`packages/llm/llm/src/call-config.ts:23`](../packages/llm/llm/src/call-config.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `maxTokens` | optional | `number` |
+| `model` | required | `string` |
+| `provider` | required | `string` |
+| `reasoningEffort` | optional | `string` |
+| `stop` | optional | [`string[]`](#persistence-type-sha256-93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2) |
+| `temperature` | optional | `number` |
+
+
+
+
+
+
+
+### `LlmCallConfigAdapterDefaults`
+
+SHA-256: `326a9bfda27dda5882fb3cbe6e715df41dae2298fdae3d66437457268a665693`
+
+Sources: [`packages/llm/llm/src/call-config.ts:36`](../packages/llm/llm/src/call-config.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `maxTokens` | optional | `true` |
+| `reasoningEffort` | optional | `true` |
+
+
+
+
+
+
+
+### `LlmFailure`
+
+SHA-256: `5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca`
+
+Sources: [`packages/llm/llm/src/types.ts:40`](../packages/llm/llm/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `code` | required | `string` |
+| `message` | required | `string` |
+| `offloadImages` | optional | `number` |
+| `providerRetryAfterMs` | optional | `number` |
+| `requestId` | optional | `string` |
+| `status` | optional | `number` |
+
+
+
+
+
+
+
+### `LlmRetryEventData`
+
+SHA-256: `c170da8ab7c37635b10867b2571811d9e317ac3ec394e8ff8efe53f902fc41c1`
+
+Sources: [`packages/llm/llm-retry/src/types.ts:16`](../packages/llm/llm-retry/src/types.ts)
+
+One of:
+
+- [`{ delayMs, failure, maxRetries, mode, … }`](#persistence-type-sha256-cdee10e87dbed8440d8b6935888624884878efc7af95402e94171b29f173dced)
+- [`{ delayMs, failure, mode, policyKey, … }`](#persistence-type-sha256-374fdd68aee5ff844e378c0cbdd961d247a0f22e4ade0bb03d800cd2a46a2b8b)
+
+
+
+
+
+
+
+### `LlmRetryStartedEventData`
+
+SHA-256: `6f72ece8f317cd080c4f20a93f1bf709965f5b81ac4669528f5a023191cfcf20`
+
+Sources: [`packages/llm/llm-retry/src/types.ts:43`](../packages/llm/llm-retry/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `retry` | required | `number` |
+| `retryId` | required | `string` |
+| `step` | required | `number` |
+| `turn` | required | `number` |
+
+
+
+
+
+
+
+### `Message`
+
+SHA-256: `23c7cce57d20589897f4e2bd5898affc6fc611b87cd0cc8b95be1cfdd8b3a7eb`
+
+Sources: [`packages/llm/llm/src/message.ts:131`](../packages/llm/llm/src/message.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `content` | required | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `id` | required | `string` |
+| `role` | required | [`union (3 variants)`](#persistence-type-sha256-acd36e1717d2b4ef9e98a8e6fac17ca1203f3f448e5bca51677f129a8f4999e2) |
+| `source` | required | [`MessageSource`](#persistence-type-sha256-4c965666d5b42116945bc356087cd5e1fd549e6dece560785ed60511059a8283) |
+
+
+
+
+
+
+
+### `MessageFeedbackDelete`
+
+SHA-256: `7c6129b6961cf4b2a030f36c78d2b0a5be38617651a9b81322e054ee512bee06`
+
+Sources: [`packages/feedback/message-feedback/src/types.ts:46`](../packages/feedback/message-feedback/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `messageId` | required | `string` |
+| `sessionId` | required | `string` |
+
+
+
+
+
+
+
+### `MessageFeedbackItem`
+
+SHA-256: `3d7d07060a7be77984feb651ea2bf1925d3e0477911d9d3ed86330d1e8ca6182`
+
+Sources: [`packages/feedback/message-feedback/src/types.ts:20`](../packages/feedback/message-feedback/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `category` | optional | [`union (7 variants)`](#persistence-type-sha256-3305a4bb6b6c29b482ba91d59c60b47e8f98282d3dacc8c29e4a4c2712209bdd) |
+| `createdAt` | required | `number` |
+| `messageId` | required | `string` |
+| `note` | optional | `string` |
+| `rating` | required | [`MessageFeedbackRating`](#persistence-type-sha256-390eed1028aba02774f14408647acec10ec5516e97d4f15ecde2b9989d5a69f2) |
+| `updatedAt` | required | `number` |
+| `version` | required | `string` |
+
+
+
+
+
+
+
+### `MessageFeedbackPut`
+
+SHA-256: `aa7bc2817014ca6c45719b1c193c5c131be718a0921f34345098ff250f444626`
+
+Sources: [`packages/feedback/message-feedback/src/types.ts:38`](../packages/feedback/message-feedback/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `item` | required | [`MessageFeedbackItem`](#persistence-type-sha256-3d7d07060a7be77984feb651ea2bf1925d3e0477911d9d3ed86330d1e8ca6182) |
+| `sessionId` | required | `string` |
+
+
+
+
+
+
+
+### `MessageFeedbackRating`
+
+SHA-256: `390eed1028aba02774f14408647acec10ec5516e97d4f15ecde2b9989d5a69f2`
+
+Sources: [`packages/feedback/message-feedback/src/types.ts:17`](../packages/feedback/message-feedback/src/types.ts)
+
+One of:
+
+- `"negative"`
+- `"positive"`
+
+
+
+
+
+
+
+### `MessageSource`
+
+SHA-256: `4c965666d5b42116945bc356087cd5e1fd549e6dece560785ed60511059a8283`
+
+Sources: [`packages/llm/llm/src/message.ts:128`](../packages/llm/llm/src/message.ts)
+
+| kind | Form property | Other required fields | Full definition |
+|---|---|---|---|
+| `agent-instructions` | `"instructions"` | `changes`: [`AgentInstructionChange[]`](#persistence-type-sha256-2ab12a0e345658f9342816d773fe610f049982bcad82631f43b9205abe43e5ee) | [`AgentInstructionSource`](#persistence-type-sha256-6f22a9d02b9a1f1157f3b0e7bdccd7e7b12b085c4efdb709dfc74a465cd4e590) |
+| `agent-message` | `"relay"` | `senderSessionId`: `string` | [`AgentMessageSource`](#persistence-type-sha256-4a9bef9f27a942520cc2279ca7dd3082556e4bff543f66b5c0333e1bbed1cd86) |
+| `goal` | not declared | `goalId`: `string`; `revision`: `number`; `round`: `number` | [`GoalMessageSource`](#persistence-type-sha256-7f959241c24128b4983b559984811861dc59774b85905c8fa57c6cb0148a3dbc) |
+| `model` | not declared | `model`: `string`; `provider`: `string` | [`ModelMessageSource`](#persistence-type-sha256-719c51f67074f97034a6c94297fe1f4b5d3c8d392c57586dab732aa5398c7a91) |
+| `plugin` | `"catalog"` | `plugin`: `string` | [`{ kind: "plugin", form: "catalog" }`](#persistence-type-sha256-2f90a7b3646fea3e677bd7b4000aa96f3b8964f107b614e204e11ad4051c24fc) |
+| `plugin` | `"instructions"` | `plugin`: `string` | [`{ kind: "plugin", form: "instructions" }`](#persistence-type-sha256-dda6e111a8ccfc12f6e742e977a1a4e3549e8c03732a5ff6c8d7c3d4bcb7a412) |
+| `plugin` | `"notice"` | `plugin`: `string`; `summary`: `string` | [`{ kind: "plugin", form: "notice" }`](#persistence-type-sha256-b4d298d90c798fa4d1f5b030ce3ce8031c4c41beafdb05323bec8b2a06903b43) |
+| `plugin` | `"recall"` | `plugin`: `string` | [`{ kind: "plugin", form: "recall" }`](#persistence-type-sha256-85e1bd563d6c80c1f377f99f91103fec4e315148a7330f3b3dae7c2d04e33b01) |
+| `plugin` | `"relay"` | `plugin`: `string` | [`{ kind: "plugin", form: "relay" }`](#persistence-type-sha256-2ce7ef3b3daebf95815c7ae454a751d3e67ca7a22e2e0734fe2942df393bb66c) |
+| `plugin` | `"snapshot"` | `plugin`: `string`; `sections`: [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) | [`{ kind: "plugin", form: "snapshot" }`](#persistence-type-sha256-e8d26e6993445743e6c4342c31b284c7d8f5574369abdd6021183af1a6b3538f) |
+| `plugin` | not declared | `plugin`: `string` | [`{ kind: "plugin" }`](#persistence-type-sha256-0ddab4577db37a3e0d9e3a91761735c8ef6f5629d526ab8ecaeeea19c097c8f8) |
+| `session-reference` | `"recall"` | `references`: [`{ capturedFormatVersion?, capturedThroughSeq, compacted, inputIndex, … }[]`](#persistence-type-sha256-df843efd87c78cf8de98f8e0d0216956cd568d0d0e56a22c853663e274aa1a18); `version`: `1` | [`SessionReferenceSource`](#persistence-type-sha256-f56c5b59ca0161310c338d31dd16cf14287ccd602ff4181058df178c1c286d7f) |
+| `skill-catalog` | `"catalog"` | `entries`: [`{ description, name }[]`](#persistence-type-sha256-aba175fb20ffc71112c55efe70458ff5d7dbfb83501892b4ba8d077f0ea5d7ba) | [`SkillCatalogSource`](#persistence-type-sha256-fc2ae6962f9f8801c2b1e414668e1e17cbb7544c4f39381198977a38bd10c093) |
+| `skill-invocation` | `"instructions"` | `name`: `string` | [`SkillInvocationSource`](#persistence-type-sha256-672c4aa2a9b736e3d6e5da6346d2e2ed5e3573f2d0baafa18e7407c9f3fee3db) |
+| `subagent-settled` | `"notice"` | `senderSessionId`: `string`; `summary`: `string` | [`SubagentSettledMessageSource`](#persistence-type-sha256-4e97c3d85c0fc817ee58873c38c25a2474abaaa0af4839311b50b68db3b8cf1a) |
+| `team-message` | not declared | `messageId`: `string`; `senderId`: `string`; `senderName`: `string`; `teamId`: `string` | [`TeamMessageSource`](#persistence-type-sha256-2152caf1a71e588e4df2358a806dea24936c1c47131134f01a12939d12cdc0c0) |
+| `tool` | not declared | `callId`: `string` | [`ToolMessageSource`](#persistence-type-sha256-d9c462b9f62fdd3efc76a44b9524dc8781f6b91cd9c7e584b17d971defafebab) |
+| `user` | not declared | `rpcId`: `string` | [`{ kind: "user" }`](#persistence-type-sha256-6a4f72e2e179e17b922f2a9392c0e1c8f8c707f32494372454850a3eb184a6e7) |
+| `user` | not declared | none | [`CommandSource`](#persistence-type-sha256-ada310bf0bdb8fed51f3b56ea63f6ea6b18bbd587f04fccb63a14ab0b2a24e05) |
+| `webhook` | `"notice"` | `deliveryId`: `string`; `provider`: `string`; `ruleId`: `string`; `source`: `string`; `summary`: `string` | [`{ kind: "webhook", form: "notice" }`](#persistence-type-sha256-9edc162949abf93bd5ff049191b345454ba104f583937ce5580fb50f067d2b94) |
+
+
+
+### `Message[]`
+
+SHA-256: `478738df7e7d2b103b09fb937817a9302c81076809f2b341169e00a9419c5665`
+
+Array of [`Message`](#persistence-type-sha256-23c7cce57d20589897f4e2bd5898affc6fc611b87cd0cc8b95be1cfdd8b3a7eb).
+
+
+
+
+
+
+
+### `ModelMessageSource`
+
+SHA-256: `719c51f67074f97034a6c94297fe1f4b5d3c8d392c57586dab732aa5398c7a91`
+
+Sources: [`packages/llm/llm/src/message.ts:24`](../packages/llm/llm/src/message.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `kind` | required | `"model"` |
+| `model` | required | `string` |
+| `provider` | required | `string` |
+| `replayState` | optional | `unknown` (opaque) |
+
+
+
+
+
+
+
+### `ModelSelection`
+
+SHA-256: `f09e5e7acf5ff5ccd193ff2eeec015fa2ff7c29d98bc465f8c3302058d47e29b`
+
+Sources: [`packages/api/session-controller/src/types.ts:86`](../packages/api/session-controller/src/types.ts)
| Property | Presence | Type |
|---|---|---|
| `model` | required | `string` |
| `provider` | required | `string` |
+| `reasoningEffort` | optional | `string` |
-
+
-### `packages/session/session-title/src/types.ts#SessionTitleSource`
+
-SHA-256: `30d5a537b296685770b1241c4b4bbde19d5a31ff81aa23df73fab5e90b8fc65f`
+
-Sources: [`packages/session/session-title/src/types.ts:28`](../packages/session/session-title/src/types.ts)
+### `OneShotScheduleDispatchChange`
-One of:
+SHA-256: `8e8e91646a5cae3fc78f7532a0013ff2088ae47077642c2edd507a508209b8af`
-- [`event:session/title.data.source[1]`](#persistence-type-eventsessiontitledatasource1)
-- [`event:session/title.data.source[0]`](#persistence-type-eventsessiontitledatasource0)
-- [`event:agent/inbox/spliced.data.inserted[0].source[0]`](#persistence-type-eventagentinboxspliceddatainserted0source0)
-
-
-
-### `packages/skill/skill/src/index.ts#SkillInvocationSource`
-
-SHA-256: `672c4aa2a9b736e3d6e5da6346d2e2ed5e3573f2d0baafa18e7407c9f3fee3db`
-
-Sources: [`packages/skill/skill/src/index.ts:146`](../packages/skill/skill/src/index.ts)
+Sources: [`packages/schedule/schedule/src/types.ts:86`](../packages/schedule/schedule/src/types.ts)
| Property | Presence | Type |
|---|---|---|
-| `form` | required | `"instructions"` |
-| `kind` | required | `"skill-invocation"` |
-| `name` | required | `string` |
+| `id` | required | `string` |
+| `operation` | required | `"dispatch"` |
+| `version` | required | `1` |
-
+
-### `packages/skill/tool-skill/src/index.ts#SkillCatalogSource`
-
-SHA-256: `fc2ae6962f9f8801c2b1e414668e1e17cbb7544c4f39381198977a38bd10c093`
-
-Sources: [`packages/skill/tool-skill/src/index.ts:34`](../packages/skill/tool-skill/src/index.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `entries` | required | [`event:agent/inbox/spliced.data.inserted[0].source[17].entries`](#persistence-type-eventagentinboxspliceddatainserted0source17entries) |
-| `form` | required | `"catalog"` |
-| `kind` | required | `"skill-catalog"` |
-| `update` | optional | `true` |
-
-
-
-### `packages/subagent/subagent/src/catalog.ts#SubagentCatalogEvent`
-
-SHA-256: `3ac1196f59d5e9e0e9345122c8c403b102478b526404a2e591a38f613483321e`
-
-Sources: [`packages/subagent/subagent/src/catalog.ts:24`](../packages/subagent/subagent/src/catalog.ts)
-
-One of:
-
-- [`event:subagent/catalog.data[1]`](#persistence-type-eventsubagentcatalogdata1)
-- [`event:subagent/catalog.data[0]`](#persistence-type-eventsubagentcatalogdata0)
-
-
-
-### `packages/subagent/subagent/src/continuation-messages.ts#AgentMessageSource`
-
-SHA-256: `4a9bef9f27a942520cc2279ca7dd3082556e4bff543f66b5c0333e1bbed1cd86`
-
-Sources: [`packages/subagent/subagent/src/continuation-messages.ts:15`](../packages/subagent/subagent/src/continuation-messages.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `form` | required | `"relay"` |
-| `kind` | required | `"agent-message"` |
-| `senderSessionId` | required | `string` |
-
-
-
-### `packages/subagent/subagent/src/continuation-messages.ts#SubagentSettledMessageSource`
-
-SHA-256: `4e97c3d85c0fc817ee58873c38c25a2474abaaa0af4839311b50b68db3b8cf1a`
-
-Sources: [`packages/subagent/subagent/src/continuation-messages.ts:30`](../packages/subagent/subagent/src/continuation-messages.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `form` | required | `"notice"` |
-| `kind` | required | `"subagent-settled"` |
-| `senderSessionId` | required | `string` |
-| `summary` | required | `string` |
-
-
-
-### `packages/subagent/subagent/src/descriptor.ts#ContinuableSubagentDescriptorData`
-
-SHA-256: `6487b10ba7542f3c447b1e41a1c6a590b7bfafe0b9b66b49f34028da85bb970f`
-
-Sources: [`packages/subagent/subagent/src/descriptor.ts:72`](../packages/subagent/subagent/src/descriptor.ts)
-
-| Property | Presence | Type |
-|---|---|---|
-| `agentModel` | optional | `string` |
-| `agentProvider` | optional | `string` |
-| `agentReasoningEffort` | optional | `string` |
-| `label` | required | `string` |
-| `mode` | required | `"continuable"` |
-| `persona` | optional | `string` |
-| `provider` | required | `string` |
-| `toolFilter` | optional | [`packages/core/tools/src/index.ts#ToolRestriction`](#persistence-type-packagescoretoolssrcindextstoolrestriction) |
-| `version` | required | `number` |
+
-### `packages/subagent/subagent/src/descriptor.ts#OneShotSubagentDescriptorData`
+### `OneShotSubagentDescriptorData`
SHA-256: `5f758f3de5f00c18968a7c6d347083aac5c9ae13f6a79c78f6611b23c4973564`
@@ -5818,9 +3796,466 @@ Sources: [`packages/subagent/subagent/src/descriptor.ts:61`](../packages/subagen
| `provider` | required | `string` |
| `version` | required | `number` |
+
+
+
+
+
+
+### `OptionalSessionSeq`
+
+SHA-256: `3bd652ebfa8726b3ce3937a4f1bd2759e02f86b3a08a20f9e41a8513656fbc5f`
+
+Sources: [`packages/core/session/src/types.ts:64`](../packages/core/session/src/types.ts)
+
+One of:
+
+- `null`
+- `number`
+
+
+
+
+
+
+
+### `PresentedFile`
+
+SHA-256: `b8fc636a2121df9d8423c242e03c9d23b7ab7c6fdce00e45746932c60b730f97`
+
+Sources: [`packages/deliverables/tool-present/src/types.ts:5`](../packages/deliverables/tool-present/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `description` | optional | `string` |
+| `path` | required | `string` |
+
+
+
+### `PresentedFile[]`
+
+SHA-256: `1d9cb3caa96100b18b1911fa3ff8c751ef6992971a03c5f4d9aefc1a0004a345`
+
+Array of [`PresentedFile`](#persistence-type-sha256-b8fc636a2121df9d8423c242e03c9d23b7ab7c6fdce00e45746932c60b730f97).
+
+
+
+
+
+
+
+### `PtcDispatchEventData`
+
+SHA-256: `8d2e5a3c4230e6ea6c0b5151f02241d0db02cd2551f2df1b6b9700cddcc0dca3`
+
+Sources: [`packages/core/tools/src/types.ts:20`](../packages/core/tools/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `arguments` | required | `unknown` (opaque) |
+| `content` | required | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `error` | optional | [`{ code, name, reason? }`](#persistence-type-sha256-a81059ca06999da1e712414520c2c65e491d052fcf9640fae20aa38f0a5dc735) |
+| `isError` | required | `boolean` |
+| `name` | required | `string` |
+| `parentCallId` | required | `string` |
+| `rootCallId` | required | `string` |
+| `subCallId` | required | `string` |
+
+
+
+
+
+
+
+### `PtcDispatchStartEventData`
+
+SHA-256: `2fe5026daf14bd4ff2b7bfb7cf9791c302d9cbba06802178b6dfec00b892698f`
+
+Sources: [`packages/core/tools/src/types.ts:11`](../packages/core/tools/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `arguments` | required | `unknown` (opaque) |
+| `name` | required | `string` |
+| `parentCallId` | required | `string` |
+| `rootCallId` | required | `string` |
+| `subCallId` | required | `string` |
+
+
+
+
+
+
+
+### `ReasoningBlock`
+
+SHA-256: `814d9434e1ddf9078612b3b34322f26e9363b469213335007f7e9ba7fee9464e`
+
+Sources: [`packages/llm/llm/src/types.ts:67`](../packages/llm/llm/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `text` | required | `string` |
+| `type` | required | `"reasoning"` |
+
+
+
+
+
+
+
+### `ReplayEnvelope`
+
+SHA-256: `0acd94fe8794574c9ae72c7855ee16d29c546096d4af760d16d1225385764555`
+
+Sources: [`packages/llm/llm/src/types.ts:404`](../packages/llm/llm/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `blocks` | optional | [`unknown[]`](#persistence-type-sha256-b1664fa89f8eab49a14e7e3168d8bc4da4aa9fd76332f6c4a053d839e5276ae7) |
+| `response` | required | `unknown` (opaque) |
+
+
+
+
+
+
+
+### `RequestContext`
+
+SHA-256: `b158f3ff6923714807c0d73882f0b05dc87f8fa85c9e90814852d48bbc866081`
+
+Sources: [`packages/core/session/src/types.ts:249`](../packages/core/session/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `contextWindow` | optional | `number` |
+| `model` | required | `string` |
+| `provider` | required | `string` |
+| `systemPromptUpdate` | optional | `"in-history"` |
+
+
+
+
+
+
+
+### `RequestHeaderReason`
+
+SHA-256: `530da6c0267813bb4511af72883cc518834e624e3b3220a7062955fd57a788a6`
+
+Sources: [`packages/core/session/src/types.ts:268`](../packages/core/session/src/types.ts)
+
+One of:
+
+- `"change"`
+- `"initial"`
+- `"resume"`
+- `"series"`
+
+
+
+
+
+
+
+### `SandboxMode`
+
+SHA-256: `fab2bb09bc5e3b9db0685e8f5500b029af1a2b33e70bc703c1d5d0f596fbc1fd`
+
+Sources: [`packages/sandbox/sandbox/src/index.ts:29`](../packages/sandbox/sandbox/src/index.ts)
+
+One of:
+
+- `"danger-full-access"`
+- `"read-only"`
+- `"workspace-write"`
+
+
+
+
+
+
+
+### `ScheduleChange`
+
+SHA-256: `e1d0e52dcd1855ffb803efc18f8f7b776c48d1c25757e8a75c0281fa298c02e1`
+
+Sources: [`packages/schedule/schedule/src/types.ts:105`](../packages/schedule/schedule/src/types.ts)
+
+One of:
+
+- [`EveryScheduleDispatchChange`](#persistence-type-sha256-e6063d0451dc02026fd9b54ad3f77c7b1b6392ad3e872a7737ac84e13ca72344)
+- [`ScheduleDeleteChange`](#persistence-type-sha256-18dc21f12bbac8ade8377e6fbb54179e20c3d955d73fba3244c57fb6bf001df0)
+- [`OneShotScheduleDispatchChange`](#persistence-type-sha256-8e8e91646a5cae3fc78f7532a0013ff2088ae47077642c2edd507a508209b8af)
+- [`ScheduleCreateChange`](#persistence-type-sha256-ca6425edd20afe34d0cedc6ad1abad1ad7b32e2fbc4c1d24db53939e80bf887f)
+
+
+
+
+
+
+
+### `ScheduleCreateChange`
+
+SHA-256: `ca6425edd20afe34d0cedc6ad1abad1ad7b32e2fbc4c1d24db53939e80bf887f`
+
+Sources: [`packages/schedule/schedule/src/types.ts:72`](../packages/schedule/schedule/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `operation` | required | `"create"` |
+| `schedule` | required | [`ScheduleRecord`](#persistence-type-sha256-d8f868c6b3e7189de6c1ffe2ea04794ea2aa31315b6347d12536e46020afac87) |
+| `version` | required | `1` |
+
+
+
+
+
+
+
+### `ScheduleDeleteChange`
+
+SHA-256: `18dc21f12bbac8ade8377e6fbb54179e20c3d955d73fba3244c57fb6bf001df0`
+
+Sources: [`packages/schedule/schedule/src/types.ts:79`](../packages/schedule/schedule/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `id` | required | `string` |
+| `operation` | required | `"delete"` |
+| `version` | required | `1` |
+
+
+
+
+
+
+
+### `ScheduleRecord`
+
+SHA-256: `d8f868c6b3e7189de6c1ffe2ea04794ea2aa31315b6347d12536e46020afac87`
+
+Sources: [`packages/schedule/schedule/src/types.ts:69`](../packages/schedule/schedule/src/types.ts)
+
+| kind | Form property | Other required fields | Full definition |
+|---|---|---|---|
+| `after` | not declared | `afterSeconds`: `number`; `id`: `string`; `prompt`: `string`; `scheduledAt`: `string` | [`AfterScheduleRecord`](#persistence-type-sha256-27e337d3d6b402b221e50c247a3f518a70d0c474cc60beee15fac3e9c5cbfcbe) |
+| `at` | not declared | `id`: `string`; `prompt`: `string`; `scheduledAt`: `string` | [`AtScheduleRecord`](#persistence-type-sha256-658d895d187b26d83f3b53109a3bf77bbfba9f6f9a6d4bc4ee4315b4eb36239e) |
+| `every` | not declared | `everySeconds`: `number`; `id`: `string`; `prompt`: `string`; `scheduledAt`: `string` | [`EveryScheduleRecord`](#persistence-type-sha256-66ece68282d8c06330fb83329a24ae54c386d5ccfab296bbf18369da8beb7d14) |
+
+
+
+
+
+
+
+### `SessionHeader`
+
+SHA-256: `1a3440e3577382704d42a6263aa463504eb74c566734a55e9503a63efcd02445`
+
+Sources: [`packages/core/session/src/types.ts:93`](../packages/core/session/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `agentPreset` | optional | `string` |
+| `createdAt` | required | `number` |
+| `cwd` | optional | `string` |
+| `delegationDepth` | optional | `number` |
+| `id` | required | `string` |
+| `isSeeded` | required | `boolean` |
+| `origin` | optional | `"subagent"` |
+| `parentSession` | optional | `string` |
+| `version` | required | `4` |
+
+
+
+
+
+
+
+### `SessionReferenceSource`
+
+SHA-256: `f56c5b59ca0161310c338d31dd16cf14287ccd602ff4181058df178c1c286d7f`
+
+Sources: [`packages/context/session-reference/src/types.ts:13`](../packages/context/session-reference/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `form` | required | `"recall"` |
+| `kind` | required | `"session-reference"` |
+| `references` | required | [`{ capturedFormatVersion?, capturedThroughSeq, compacted, inputIndex, … }[]`](#persistence-type-sha256-df843efd87c78cf8de98f8e0d0216956cd568d0d0e56a22c853663e274aa1a18) |
+| `version` | required | `1` |
+
+
+
+
+
+
+
+### `SessionTitleEventData`
+
+SHA-256: `b56f6a885da3dc394c69a3e3cc5c0cfc4da15601b63fda4989eee8f40efc5be4`
+
+Sources: [`packages/session/session-title/src/types.ts:41`](../packages/session/session-title/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `messageSeqs` | required | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `source` | required | [`SessionTitleSource`](#persistence-type-sha256-30d5a537b296685770b1241c4b4bbde19d5a31ff81aa23df73fab5e90b8fc65f) |
+| `title` | required | `string` |
+
+
+
+
+
+
+
+### `SessionTitleLlmRequestEventData`
+
+SHA-256: `9fe0e77a7816b7fdb4b953ec0e2f0cd7bbd22c5de5c3567e612d1b20eb0992e6`
+
+Sources: [`packages/session/session-title-llm/src/index.ts:27`](../packages/session/session-title-llm/src/index.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `maxTokens` | required | `number` |
+| `messageSeqs` | required | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `messages` | required | [`Message[]`](#persistence-type-sha256-478738df7e7d2b103b09fb937817a9302c81076809f2b341169e00a9419c5665) |
+| `route` | required | [`SessionTitleModelIdentity`](#persistence-type-sha256-07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235) |
+| `system` | required | `string` |
+| `titleProvider` | required | `string` |
+
+
+
+
+
+
+
+
+
+
+
+### `SessionTitleModelIdentity`
+
+SHA-256: `07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235`
+
+Sources: [`packages/session/session-title/src/types.ts:20`](../packages/session/session-title/src/types.ts) · [`packages/subagent/tool-subagent/src/model-selection.ts:9`](../packages/subagent/tool-subagent/src/model-selection.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `model` | required | `string` |
+| `provider` | required | `string` |
+
+
+
+### `SessionTitleModelIdentity[]`
+
+SHA-256: `ba77b58995e36f14bb13886b0493d0a1a63d5db10b1a6cd9f6ac65a72cf832ec`
+
+Array of [`SessionTitleModelIdentity`](#persistence-type-sha256-07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235).
+
+
+
+
+
+
+
+### `SessionTitleSource`
+
+SHA-256: `30d5a537b296685770b1241c4b4bbde19d5a31ff81aa23df73fab5e90b8fc65f`
+
+Sources: [`packages/session/session-title/src/types.ts:28`](../packages/session/session-title/src/types.ts)
+
+| kind | Form property | Other required fields | Full definition |
+|---|---|---|---|
+| `fallback` | not declared | none | [`{ kind: "fallback" }`](#persistence-type-sha256-1b5649238876e28811e80f10ec67a00c197ad3babd4ecc61a22b09064b88c597) |
+| `provider` | not declared | `provider`: `string` | [`{ kind: "provider" }`](#persistence-type-sha256-b81e9de81a481b24e1e1f9adf038bfc59e57b4f35ce62f8f1e45284186f4f812) |
+| `user` | not declared | none | [`CommandSource`](#persistence-type-sha256-ada310bf0bdb8fed51f3b56ea63f6ea6b18bbd587f04fccb63a14ab0b2a24e05) |
+
+
+
+
+
+
+
+### `SkillCatalogSource`
+
+SHA-256: `fc2ae6962f9f8801c2b1e414668e1e17cbb7544c4f39381198977a38bd10c093`
+
+Sources: [`packages/skill/tool-skill/src/index.ts:34`](../packages/skill/tool-skill/src/index.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `entries` | required | [`{ description, name }[]`](#persistence-type-sha256-aba175fb20ffc71112c55efe70458ff5d7dbfb83501892b4ba8d077f0ea5d7ba) |
+| `form` | required | `"catalog"` |
+| `kind` | required | `"skill-catalog"` |
+| `update` | optional | `true` |
+
+
+
+
+
+
+
+### `SkillInvocationSource`
+
+SHA-256: `672c4aa2a9b736e3d6e5da6346d2e2ed5e3573f2d0baafa18e7407c9f3fee3db`
+
+Sources: [`packages/skill/skill/src/index.ts:146`](../packages/skill/skill/src/index.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `form` | required | `"instructions"` |
+| `kind` | required | `"skill-invocation"` |
+| `name` | required | `string` |
+
+
+
+
+
+
+
+### `StreamChunk`
+
+SHA-256: `071d92b9dac661fcc826c678cf64d188f26fb93aab79c627b11a03acdd34dfca`
+
+Sources: [`packages/llm/llm/src/types.ts:426`](../packages/llm/llm/src/types.ts)
+
+One of:
+
+- [`{ type: "tool-call-delta" }`](#persistence-type-sha256-88a610b831be6d92612a464be5c7d0b88ec24d97bd299837bf74bf7672183c9a)
+- [`{ type: "block-end" }`](#persistence-type-sha256-90c811b8c2668898515e69a24e82caffeb08517f9c7aa193867ff0380f3b535d)
+- [`{ type: "block-start" }`](#persistence-type-sha256-647cb2e3aeb58e27d1d4d60011f208bb66dce257e8654193c533b47c4c22c253)
+- [`{ type: "reasoning-delta" }`](#persistence-type-sha256-2abb711460e6238d851c30f3e4bdd87a2aa1887ee70575b3d3b7b25610673095)
+- [`{ type: "text-delta" }`](#persistence-type-sha256-95080295115fbd83544520ba247b68a03790131f6a2eac323d388758cb542f65)
+- [`{ type: "finish" }`](#persistence-type-sha256-a2b49331716ba0a7078b026d145306a70eae64b7313c3e6204bd931e75ec3bb1)
+- [`{ type: "usage" }`](#persistence-type-sha256-f1a96afe7503ac1817de769cd0ba13d9b80111c7034c50106b3344ecc14cc515)
+
+
+
+
+
+
+
+### `SubagentCatalogEvent`
+
+SHA-256: `3ac1196f59d5e9e0e9345122c8c403b102478b526404a2e591a38f613483321e`
+
+Sources: [`packages/subagent/subagent/src/catalog.ts:24`](../packages/subagent/subagent/src/catalog.ts)
+
+One of:
+
+- [`{ childCreatedAt, childId, label, mode, … }`](#persistence-type-sha256-0e10d7c096b47e61defe372a5fc8bd37d835199410eac44367f95c45082498bd)
+- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-5d542ac7bdf13310c46e1a884dec9fb18ad8c6e153cff207e639cd7bf9d7e694)
+
+
+
-### `packages/subagent/subagent/src/descriptor.ts#SubagentDescriptorData`
+
+
+### `SubagentDescriptorData`
SHA-256: `86d1d0e9cfebb240421187e3dc37fb71cc38a1501885cf32f8f9adef7b0a2bde`
@@ -5828,12 +4263,210 @@ Sources: [`packages/subagent/subagent/src/descriptor.ts:89`](../packages/subagen
One of:
-- [`packages/subagent/subagent/src/descriptor.ts#ContinuableSubagentDescriptorData`](#persistence-type-packagessubagentsubagentsrcdescriptortscontinuablesubagentdescriptordata)
-- [`packages/subagent/subagent/src/descriptor.ts#OneShotSubagentDescriptorData`](#persistence-type-packagessubagentsubagentsrcdescriptortsoneshotsubagentdescriptordata)
+- [`ContinuableSubagentDescriptorData`](#persistence-type-sha256-6487b10ba7542f3c447b1e41a1c6a590b7bfafe0b9b66b49f34028da85bb970f)
+- [`OneShotSubagentDescriptorData`](#persistence-type-sha256-5f758f3de5f00c18968a7c6d347083aac5c9ae13f6a79c78f6611b23c4973564)
+
+
+
+
+
+
+
+### `SubagentSettledMessageSource`
+
+SHA-256: `4e97c3d85c0fc817ee58873c38c25a2474abaaa0af4839311b50b68db3b8cf1a`
+
+Sources: [`packages/subagent/subagent/src/continuation-messages.ts:30`](../packages/subagent/subagent/src/continuation-messages.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `form` | required | `"notice"` |
+| `kind` | required | `"subagent-settled"` |
+| `senderSessionId` | required | `string` |
+| `summary` | required | `string` |
+
+
+
+
+
+
+
+### `SurfaceOp`
+
+SHA-256: `335e242de1fcc17b6ca920fc420d71bec2d76e53e37955c00948b65ab77f05c5`
+
+Sources: [`packages/core/session/src/types.ts:448`](../packages/core/session/src/types.ts)
+
+One of:
+
+- `"append"`
+- [`{ endSeq, op, startSeq }`](#persistence-type-sha256-bcf0caf62d964b2fcf5404bd5c909cfa9a21c3f3c96e6b7e36d9e33565223825)
+
+
+
+
+
+
+
+### `SystemMessage`
+
+SHA-256: `302b01ddddcbb3b16cfa3fba2a5d99f5082a55fbd9dc5c83a179a228b8a6a0ca`
+
+Sources: [`packages/llm/llm/src/message.ts:158`](../packages/llm/llm/src/message.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `content` | required | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `id` | required | `string` |
+| `role` | required | `"system"` |
+| `source` | required | [`union (7 variants)`](#persistence-type-sha256-23cf7e0cf3fec1283b60fa15713506169bc9c079a08e124d1cb9733baca80b40) |
+
+
+
+
+
+
+
+### `TeamMemberPhase`
+
+SHA-256: `dfce5db4aa42b7ebe0bb79eca92553587287e18c06b9eba85cbfb9d332e26acd`
+
+Sources: [`packages/experimental/agent-team/src/types.ts:44`](../packages/experimental/agent-team/src/types.ts)
+
+One of:
+
+- `"active"`
+- `"failed"`
+- `"provisioning"`
+
+
+
+
+
+
+
+### `TeamMemberSnapshot`
+
+SHA-256: `6598cd6da253948d6b207c6374a45335804c79b576866d6215649c2d1bc85e25`
+
+Sources: [`packages/experimental/agent-team/src/types.ts:47`](../packages/experimental/agent-team/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `context` | required | [`union (2 variants)`](#persistence-type-sha256-50cf02d875f8a1f1411f4a6fbcffab9120ccef5f74a47331fbf29480e5f68f48) |
+| `description` | required | `string` |
+| `error` | optional | `string` |
+| `id` | required | `string` |
+| `name` | required | `string` |
+| `phase` | required | [`TeamMemberPhase`](#persistence-type-sha256-dfce5db4aa42b7ebe0bb79eca92553587287e18c06b9eba85cbfb9d332e26acd) |
+| `provider` | required | `string` |
+
+
+
+
+
+
+
+### `TeamMessageSnapshot`
+
+SHA-256: `5b694f394d5e11609887a3ccfa82844935d49806c37e336b30be2186d649ab94`
+
+Sources: [`packages/experimental/agent-team/src/types.ts:106`](../packages/experimental/agent-team/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `content` | required | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `id` | required | `string` |
+| `senderId` | required | `string` |
+| `senderName` | required | `string` |
+| `targetId` | required | `string` |
+
+
+
+
+
+
+
+### `TeamMessageSource`
+
+SHA-256: `2152caf1a71e588e4df2358a806dea24936c1c47131134f01a12939d12cdc0c0`
+
+Sources: [`packages/experimental/agent-team/src/types.ts:115`](../packages/experimental/agent-team/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `kind` | required | `"team-message"` |
+| `messageId` | required | `string` |
+| `senderId` | required | `string` |
+| `senderName` | required | `string` |
+| `teamId` | required | `string` |
+
+
+
+
+
+
+
+### `TeamTaskSnapshot`
+
+SHA-256: `51edec100659da3a9bd9c3f6ba1180f5e64ec9a1585e5057080df45c180bd357`
+
+Sources: [`packages/experimental/agent-team/src/types.ts:74`](../packages/experimental/agent-team/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `blockedBy` | required | [`string[]`](#persistence-type-sha256-93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2) |
+| `description` | required | `string` |
+| `id` | required | `string` |
+| `ownerId` | optional | `string` |
+| `revision` | required | `number` |
+| `status` | required | [`TeamTaskStatus`](#persistence-type-sha256-b2d2a01e51341a3bfec809198952c8c830a7899f4cb6ecd3c1dc0b5d9a2af943) |
+| `subject` | required | `string` |
+| `writeScopes` | required | [`string[]`](#persistence-type-sha256-93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2) |
+
+
+
+
+
+
+
+### `TeamTaskStatus`
+
+SHA-256: `b2d2a01e51341a3bfec809198952c8c830a7899f4cb6ecd3c1dc0b5d9a2af943`
+
+Sources: [`packages/experimental/agent-team/src/types.ts:71`](../packages/experimental/agent-team/src/types.ts)
+
+One of:
+
+- `"completed"`
+- `"deleted"`
+- `"in_progress"`
+- `"pending"`
+
+
+
+
+
+
+
+### `TextBlock`
+
+SHA-256: `4e887768586528565381dadbddee6cef555874148089f4579e0b4b1ad096fc9c`
+
+Sources: [`packages/llm/llm/src/types.ts:61`](../packages/llm/llm/src/types.ts) · [`packages/web/web-search-deepseek/src/provider.ts:66`](../packages/web/web-search-deepseek/src/provider.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `text` | required | `string` |
+| `type` | required | `"text"` |
+
+
-### `packages/todo/tool-todo/src/types.ts#TodoItem`
+
+
+### `TodoItem`
SHA-256: `a99f76fd149051c363f960bfeeb5b9509587ecaf7591a42797e4bfe810d8987a`
@@ -5842,25 +4475,161 @@ Sources: [`packages/todo/tool-todo/src/types.ts:21`](../packages/todo/tool-todo/
| Property | Presence | Type |
|---|---|---|
| `content` | required | `string` |
-| `status` | required | [`event:todo/write.data.todos[0].status`](#persistence-type-eventtodowritedatatodos0status) |
+| `status` | required | [`union (3 variants)`](#persistence-type-sha256-fd0d91a1f9dd2efb8959bdf5e07f8f0a98b1cdfa38ce8d4732ebde0b44c3abd4) |
-
+
-### `packages/web/web-search-deepseek/src/provider.ts#DeepSeekSearchLlmRequest`
+### `TodoItem[]`
-SHA-256: `2517ba143a271508d3ca35126d5aca8f7f1facf5aaddce4adf011832042fa2b9`
+SHA-256: `4b7ddaf3710b88ff9b8df66304f5f97bf03688fd19730eedc2e9535203c820ea`
-Sources: [`packages/web/web-search-deepseek/src/provider.ts:55`](../packages/web/web-search-deepseek/src/provider.ts)
+Array of [`TodoItem`](#persistence-type-sha256-a99f76fd149051c363f960bfeeb5b9509587ecaf7591a42797e4bfe810d8987a).
+
+
+
+
+
+
+
+### `TokenUsage`
+
+SHA-256: `fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394`
+
+Sources: [`packages/llm/llm/src/types.ts:162`](../packages/llm/llm/src/types.ts)
| Property | Presence | Type |
|---|---|---|
-| `apiVersion` | required | `string` |
-| `body` | required | [`event:web/deepseek-search-llm-request.data.body`](#persistence-type-eventwebdeepseek-search-llm-requestdatabody) |
-| `endpoint` | required | `string` |
+| `cacheReadTokens` | optional | `number` |
+| `cacheWriteTokens` | optional | `number` |
+| `inputTokens` | required | `number` |
+| `outputTokens` | required | `number` |
+| `reasoningTokens` | optional | `number` |
+| `totalTokens` | optional | `number` |
+
+
+
+
+
+
+
+### `ToolCallBlock`
+
+SHA-256: `c1f0f17b6493b85db6453bb30e01b208d703731b25bc1e68e5d4fc72eea9cdea`
+
+Sources: [`packages/llm/llm/src/types.ts:104`](../packages/llm/llm/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `arguments` | required | `string` |
+| `id` | required | `string` |
+| `name` | required | `string` |
+| `type` | required | `"tool-call"` |
+
+
+
+
+
+
+
+### `ToolMessageSource`
+
+SHA-256: `d9c462b9f62fdd3efc76a44b9524dc8781f6b91cd9c7e584b17d971defafebab`
+
+Sources: [`packages/llm/llm/src/message.ts:29`](../packages/llm/llm/src/message.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `callId` | required | `string` |
+| `kind` | required | `"tool"` |
+
+
+
+
+
+
+
+### `ToolRestriction`
+
+SHA-256: `3cfc3a56502da1f8c6153c2c56657bab4b749056968634dd0991d325ec1c919f`
+
+Sources: [`packages/core/tools/src/index.ts:682`](../packages/core/tools/src/index.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `allow` | optional | [`string[]`](#persistence-type-sha256-93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2) |
+| `deny` | optional | [`string[]`](#persistence-type-sha256-93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2) |
+
+
+
+
+
+
+
+### `ToolResultBlock`
+
+SHA-256: `d61574d68558c5a184429e70b04da393dd5460bf5cc3ddef814546e659bd5127`
+
+Sources: [`packages/llm/llm/src/types.ts:114`](../packages/llm/llm/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `content` | required | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `isError` | optional | `boolean` |
+| `toolCallId` | required | `string` |
+| `type` | required | `"tool-result"` |
+
+
+
+
+
+
+
+### `ToolResultMessage`
+
+SHA-256: `1b573e2d5c094fa87e2a8bf409ddd4ac5ba92a123085e168de44b9ccdbd5244c`
+
+Sources: [`packages/llm/llm/src/message.ts:164`](../packages/llm/llm/src/message.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `content` | required | [`tuple (1 positions)`](#persistence-type-sha256-8d6a011f3ef7096a4a922ef420458419ff6b20e1eaeece5d331db7585d2f08d6) |
+| `id` | required | `string` |
+| `role` | required | `"user"` |
+| `source` | required | [`ToolMessageSource`](#persistence-type-sha256-d9c462b9f62fdd3efc76a44b9524dc8781f6b91cd9c7e584b17d971defafebab) |
+
+
+
+
+
+
+
+### `ToolSchema`
+
+SHA-256: `7f5f2a8618c2ece530a18b1358b890fb57fb8c35705e47b66bff2296f8c6e889`
+
+Sources: [`packages/llm/llm/src/types.ts:447`](../packages/llm/llm/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `description` | required | `string` |
+| `name` | required | `string` |
+| `parameters` | required | [`{}`](#persistence-type-sha256-0aa62ab51b36c0e64b134bd03ba8725d758744180a1a447da49beaad194f219f) |
+
+
+
+### `ToolSchema[]`
+
+SHA-256: `6d63f25a28b70801937a46b1058be5f52d4efbaf3516141470463ae469b59c23`
+
+Array of [`ToolSchema`](#persistence-type-sha256-7f5f2a8618c2ece530a18b1358b890fb57fb8c35705e47b66bff2296f8c6e889).
+
+
-### `packages/workflow/tool-workflow/src/types.ts#ToolWorkflowAgentEndData`
+
+
+### `ToolWorkflowAgentEndData`
SHA-256: `c0ea97bc89dfc46fa94eab956f5c3ee6af2f964aa7db6327cb18b451f207bef7`
@@ -5868,13 +4637,17 @@ Sources: [`packages/workflow/tool-workflow/src/types.ts:29`](../packages/workflo
| Property | Presence | Type |
|---|---|---|
-| `outcome` | required | [`packages/workflow/workflow/src/types.ts#WorkflowAgentOutcome`](#persistence-type-packagesworkflowworkflowsrctypestsworkflowagentoutcome) |
+| `outcome` | required | [`WorkflowAgentOutcome`](#persistence-type-sha256-c2deb7c9183735d4e0fffddf5c623f4e34daa1c8e96b111982e957dfcbbcf896) |
| `runId` | required | `string` |
| `seq` | required | `number` |
+
+
-### `packages/workflow/tool-workflow/src/types.ts#ToolWorkflowAgentStartData`
+
+
+### `ToolWorkflowAgentStartData`
SHA-256: `9a410ddf56792b2b7cd4a224a2e54dc4dee30a8e8e6b1c2b9a1d19992b217adc`
@@ -5888,9 +4661,13 @@ Sources: [`packages/workflow/tool-workflow/src/types.ts:20`](../packages/workflo
| `runId` | required | `string` |
| `seq` | required | `number` |
+
+
-### `packages/workflow/tool-workflow/src/types.ts#ToolWorkflowRunEndData`
+
+
+### `ToolWorkflowRunEndData`
SHA-256: `7f9365bae9fcb73e1e34061a1acfe0422c1a5fd351848cace9bebbe806f28462`
@@ -5899,11 +4676,15 @@ Sources: [`packages/workflow/tool-workflow/src/types.ts:36`](../packages/workflo
| Property | Presence | Type |
|---|---|---|
| `runId` | required | `string` |
-| `stopReason` | required | [`packages/workflow/workflow/src/types.ts#WorkflowStopReason`](#persistence-type-packagesworkflowworkflowsrctypestsworkflowstopreason) |
+| `stopReason` | required | [`WorkflowStopReason`](#persistence-type-sha256-8465ece5e9d9007c038b357015d849c15262cb0bc25abc59e47692d87ee01a15) |
+
+
-### `packages/workflow/tool-workflow/src/types.ts#ToolWorkflowRunStartData`
+
+
+### `ToolWorkflowRunStartData`
SHA-256: `a6da9ad5d42ae83a6833a8288b076688e8e0801633ea36cbdd8a30a6d9f3160c`
@@ -5914,9 +4695,82 @@ Sources: [`packages/workflow/tool-workflow/src/types.ts:14`](../packages/workflo
| `name` | required | `string` |
| `runId` | required | `string` |
+
+
+
+
+
+
+### `TurnEndCancelCause`
+
+SHA-256: `1f8c126cfab3df812cd115cfc23e3256f0fa2383400f4ce91ecad313577e59b0`
+
+Sources: [`packages/core/session/src/types.ts:195`](../packages/core/session/src/types.ts)
+
+| kind | Form property | Other required fields | Full definition |
+|---|---|---|---|
+| `disposed` | not declared | none | [`{ kind: "disposed" }`](#persistence-type-sha256-4bb451330ff699f36b45539ceb0eb2606ead72084e2c5bb637c36cc80e2252db) |
+| `hook` | not declared | `reason`: `string` | [`{ kind: "hook" }`](#persistence-type-sha256-6c5a37d42ebdb12db4410699259335f1e149e3a0260425684c00b153afc8990d) |
+| `legacy` | not declared | none | [`{ kind: "legacy" }`](#persistence-type-sha256-eaa71be0fbf0f702df8ea6c11d0aa2f9782263d45a10d0fb14eda662f4bfe04c) |
+| `parent` | not declared | none | [`{ kind: "parent" }`](#persistence-type-sha256-6c03546143cdf6ae88f1745ac98c5139efa1588d1415249bbc5f3104d32ab800) |
+| `user` | not declared | none | [`CommandSource`](#persistence-type-sha256-ada310bf0bdb8fed51f3b56ea63f6ea6b18bbd587f04fccb63a14ab0b2a24e05) |
+
+
+
+
+
+
+
+### `TurnEndReason`
+
+SHA-256: `f1687f982fa3d41ef29e159feed154ecd13af4dd209acaee16038f223f2e9402`
+
+Sources: [`packages/core/session/src/types.ts:231`](../packages/core/session/src/types.ts)
+
+| kind | Form property | Other required fields | Full definition |
+|---|---|---|---|
+| `aborted` | not declared | `reason`: [`TurnEndCancelCause`](#persistence-type-sha256-1f8c126cfab3df812cd115cfc23e3256f0fa2383400f4ce91ecad313577e59b0) | [`{ kind: "aborted", reason }`](#persistence-type-sha256-0a30c3be336cdd4f8f34e66543a3d46d611c43986edd9b3ce6cbb9b721d3b5d3) |
+| `blocked` | not declared | none | [`{ kind: "blocked" }`](#persistence-type-sha256-023a355b2be0d688fb6e4df8388dadb942761d46cfe96d0f499aae9631a159d4) |
+| `completed` | not declared | none | [`{ kind: "completed" }`](#persistence-type-sha256-b6ef9c6210be8350cd465f485cf520031fffa6bf3809c61a1e713e834c5982d0) |
+| `error` | not declared | `error`: [`LlmFailure`](#persistence-type-sha256-5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca) | [`{ error, kind: "error" }`](#persistence-type-sha256-79650cfa10aa3c52440328d85e8a25f0ffadc8d7efd784e3c0819d8bb74a1985) |
+| `forked` | not declared | none | [`{ kind: "forked" }`](#persistence-type-sha256-ec8b5ff7c77ca6893ac7ba5a0c5b2aefeb52f12c64450b7359660c2a7e8a53d7) |
+| `interrupted` | not declared | none | [`{ kind: "interrupted" }`](#persistence-type-sha256-56b7c047694875a843ba020dfea3c8380d54ae4ff88ab349e72004dc21e07c23) |
+| `max-tokens` | not declared | none | [`{ kind: "max-tokens" }`](#persistence-type-sha256-ab7ec5f9eb2c6dfacca5da4c37cf7ba85d04172053ee6b1ebf1709ffcd99c1a7) |
+
+
+
+
+
+
+
+### `UserMessage`
+
+SHA-256: `4de5e7644130ed715ef6b5a4d86a87b30dca4096d1a6683c66acf6f7809379c7`
+
+Sources: [`packages/llm/llm/src/message.ts:143`](../packages/llm/llm/src/message.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `content` | required | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `id` | required | `string` |
+| `role` | required | `"user"` |
+| `source` | required | [`MessageSource`](#persistence-type-sha256-4c965666d5b42116945bc356087cd5e1fd549e6dece560785ed60511059a8283) |
+
+
+
+### `UserMessage[]`
+
+SHA-256: `300341f890f7b9506a1749fff4fa5239d16ea1c63ff6b15851acb03c20f3b48d`
+
+Array of [`UserMessage`](#persistence-type-sha256-4de5e7644130ed715ef6b5a4d86a87b30dca4096d1a6683c66acf6f7809379c7).
+
+
+
-### `packages/workflow/workflow/src/types.ts#WorkflowAgentOutcome`
+
+
+### `WorkflowAgentOutcome`
SHA-256: `c2deb7c9183735d4e0fffddf5c623f4e34daa1c8e96b111982e957dfcbbcf896`
@@ -5928,9 +4782,13 @@ One of:
- `"completed"`
- `"failed"`
+
+
-### `packages/workflow/workflow/src/types.ts#WorkflowStopReason`
+
+
+### `WorkflowStopReason`
SHA-256: `8465ece5e9d9007c038b357015d849c15262cb0bc25abc59e47692d87ee01a15`
@@ -5942,335 +4800,719 @@ One of:
- `"completed"`
- `"error"`
-
+
-### `"parent"`
+### `boolean`
-SHA-256: `e6411b09c1d982f789bf741ca74e2bea69df56029847f86a6148e722039ee732`
+SHA-256: `aa93010d0e521ad7c42273f58d5c9b8bf1dfc94edf1b805a3971b364a35c1877`
-`"parent"`
+`boolean`
-
+
-### `"pause"`
+### `false`
-SHA-256: `1d8798b1a5e8c545ee4dcd2b4e75c0b4c9ffd985e4744c6d1a1aab992f859721`
+SHA-256: `0c4205180f75b9ee1e0d878bd9a9851628b5dc18448486389d9c5fdc3f1ccda3`
-`"pause"`
+`false`
-
+
-### `"paused"`
+### `null`
-SHA-256: `c43b119ce579b3e9983a0d3adc4ba402ebb9ba773d89738a2dab01ecf5813943`
+SHA-256: `938f7c7357bc403ea3b281a9dd016939df7a0880fc8db12612585be574d0d615`
-`"paused"`
+`null`
-
+
-### `"pending"`
+
-SHA-256: `234142ee4f996f38cc9fa3b8b3e3de29b03c9aefe5ebf6c224eddd564505aa85`
+
-`"pending"`
+### `number`
-
+SHA-256: `0657d3ca5ac4e7bf79b00bcf860b1c7159d01a9da137497221ec2f1776e365f7`
-### `"permission/preset"`
+Sources: [`packages/core/session/src/types.ts:31`](../packages/core/session/src/types.ts)
-SHA-256: `ae63d9d1080ed8945031594d93f8d96651d7101b848719cc3e1475875cd3d649`
+`number`
-`"permission/preset"`
+
-
-
-### `"plan/mode"`
-
-SHA-256: `f634871d1e18b1eb199497ac8ab72d3964f48d03fbf611dc7521a1970cf429d9`
-
-`"plan/mode"`
-
-
-
-### `"plugin"`
-
-SHA-256: `e654d28d1e6c471147310d2fba396d00969cfe6ed9022626d3f2c2312e0b1cbb`
-
-`"plugin"`
-
-
-
-### `"positive"`
-
-SHA-256: `df5d9709b7db2a72510dc52052a23f0c38f39730af1504bab8bccabc14fae528`
-
-`"positive"`
-
-
-
-### `"product-interaction"`
-
-SHA-256: `0341d4c3dfcd53253cdc1e789d9130d3cd848b6f8b0706bf92f313a68b39ff23`
-
-`"product-interaction"`
-
-
-
-### `"provider"`
-
-SHA-256: `e31572180d6b28b73f073ad30ae19d5d82982d3daf984723984e23da1e7c459a`
-
-`"provider"`
-
-
-
-### `"provisioning"`
-
-SHA-256: `871bfd6f7bb91061246768d3377f3fd58d6b8ea7c31f44c714ae7ab215650d62`
-
-`"provisioning"`
-
-
-
-### `"read-only"`
-
-SHA-256: `12a0cfa619ac4a5fc6c3e8e359c8dae15769edc61497a575935c78d5842f8e42`
-
-`"read-only"`
-
-
-
-### `"reasoning"`
-
-SHA-256: `3c2535ca0a2062f172f15344f8040755002b5ac506cf94fc4ebaa822b15feb8c`
-
-`"reasoning"`
-
-
-
-### `"reasoning-chunks"`
-
-SHA-256: `688e853dc149f0d30b31765c12ec7e3be74169bdf1a4c6463a10b945d50cc1b8`
-
-`"reasoning-chunks"`
-
-
-
-### `"reasoning-delta"`
-
-SHA-256: `6f091fe32ab24407236090ca9d710bbaf59bb57466e9f3b8f1f6e4862bc863c6`
-
-`"reasoning-delta"`
-
-
-
-### `"recall"`
-
-SHA-256: `383cf73ae4748e5beb281ae74857ba1ffb92ae01075b9fbf51af78b666007a8f`
-
-`"recall"`
-
-
-
-### `"rejected"`
-
-SHA-256: `fab35c4520883c0d69e42d079c9f543fc5ac7a2d15b537b5572fcd99059c7018`
-
-`"rejected"`
-
-
-
-### `"relay"`
-
-SHA-256: `16d0507cb94b4cfc84a87446b1ba7652d6ec1d65ee1684789e747e30d542800e`
-
-`"relay"`
-
-
-
-### `"remove"`
-
-SHA-256: `7382c4fc95fe8c5db65ca4d9da572b115d0dbb818b7f32c22ab040318ffbb4bc`
-
-`"remove"`
-
-
-
-### `"replace"`
-
-SHA-256: `f6cb462f808309e315fea634f1ed86268b8346bbcee6774d9097ca6eed7ac1f8`
-
-`"replace"`
-
-
-
-### `"request/context"`
-
-SHA-256: `70b082fe78991edf13cf66e1b4d06cd2dcff9cacfd76f8cfb996bfb61939e7b2`
-
-`"request/context"`
-
-
-
-### `"request/header"`
-
-SHA-256: `3e0eff5946255ff05d88a10839c60305135801f97794ea48d409f8503303317e`
-
-`"request/header"`
-
-
-
-### `"resource-cost"`
-
-SHA-256: `5bd310104cfe448e530beb11422d2f791e2e32e8e95fdc528a15f9ca693dae75`
-
-`"resource-cost"`
-
-
-
-### `"resume"`
-
-SHA-256: `34d1ab5c5df378186d6054b1a1beea9a41e41965d6f336f0bc0025c441a82e66`
-
-`"resume"`
-
-
-
-### `"sandbox/mode"`
-
-SHA-256: `ca085dba2c877feceebf3c62f9d39c6c2a4d2314d97b94b3927a780fe8fe2bb2`
-
-`"sandbox/mode"`
-
-
-
-### `"schedule/change"`
-
-SHA-256: `0e7b2a97f54f1afdb8cdfad1635abe9145327db539bfb69b4045c19d8c17755d`
-
-`"schedule/change"`
-
-
-
-### `"security-privacy-permission"`
-
-SHA-256: `07eccc9ea2f9b5439d76cc77d5e062936677d43f07a23da749819b0a22ee36b7`
-
-`"security-privacy-permission"`
-
-
-
-### `"series"`
-
-SHA-256: `4f507598cf476214aa7646ce7841a7064a9dcb05d0a1eaaefaf79c2b738f160f`
-
-`"series"`
-
-
-
-### `"service-stability"`
-
-SHA-256: `7180844e1066230c5e891f1b9ccd942423b0fe48aac6ded7eef2a285b288a732`
-
-`"service-stability"`
-
-
-
-### `"session"`
-
-SHA-256: `e41bdebe246abe17154de7e7a1d81035437eee8d20e7f1edff0d91e2598ad828`
-
-`"session"`
-
-
-
-### `"session-log-deepseek/delivery-accepted"`
-
-SHA-256: `47e5d84f1a93450a78c7f3954b43990d0f629af7c034a56313e5deb63e772c1b`
-
-`"session-log-deepseek/delivery-accepted"`
-
-
-
-### `"session-reference"`
-
-SHA-256: `7f13860ee89a2d35ce09f958e85a04566cd59cb1de1d73a9619a9b631961dc71`
-
-`"session-reference"`
-
-
-
-### `"session/end-seed"`
-
-SHA-256: `1c2686c0682e7bc51d61117b2652bd4a80707e331aa276d6ef915ae32534a330`
-
-`"session/end-seed"`
-
-
-
-### `SessionEventEnvelope`
-
-SHA-256: `5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc`
-
-One of:
-
-- [`SessionEventEnvelope[39]`](#persistence-type-sessioneventenvelope39)
-- [`SessionEventEnvelope[6]`](#persistence-type-sessioneventenvelope6)
-- [`SessionEventEnvelope[0]`](#persistence-type-sessioneventenvelope0)
-
-
-
-### `SessionEventEnvelope[0]`
-
-SHA-256: `e3e77b26f0148755a505f5b8ea843a3be117827d4703bb5754d9dc8ddbef521f`
-
-| Property | Presence | Type |
-|---|---|---|
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `time` | required | `number` |
-| `type` | required | `string` |
-
-
-
-### `SessionEventEnvelope[39]`
-
-SHA-256: `998f22585a5d73ec005365e203f07fc3b3a029e82323fdda3fd7f13b0a9639d0`
-
-| Property | Presence | Type |
-|---|---|---|
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `sourceEventSeqs` | optional | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `surfaceOp` | required | [`packages/core/session/src/types.ts#SurfaceOp`](#persistence-type-packagescoresessionsrctypestssurfaceop) |
-| `time` | required | `number` |
-| `type` | required | `string` |
-
-
-
-### `SessionEventEnvelope[39].sourceEventSeqs`
+### `number[]`
SHA-256: `5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78`
Array of `number`.
-
+
-### `SessionEventEnvelope[6]`
+
-SHA-256: `7af85bf70d4eafce63e739adae38ea85501e68df3a0e22f97f3a0be90fd9e4cb`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+### `string`
+
+SHA-256: `4cd48f3e5108bd6ebedf7301c3638839b8b2b9db8dbd493974177fbdeb91a01b`
+
+Sources: [`packages/api/session-controller/src/types.ts:380`](../packages/api/session-controller/src/types.ts) · [`packages/attachment/attachment/src/brand.ts:6`](../packages/attachment/attachment/src/brand.ts) · [`packages/compaction/compaction/src/brand.ts:4`](../packages/compaction/compaction/src/brand.ts) · [`packages/core/session/src/types.ts:19`](../packages/core/session/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:20`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:32`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:8`](../packages/experimental/agent-team/src/types.ts) · [`packages/feedback/message-feedback/src/types.ts:14`](../packages/feedback/message-feedback/src/types.ts) · [`packages/goal/goal/src/types.ts:17`](../packages/goal/goal/src/types.ts) · [`packages/interaction/commands/src/brand.ts:31`](../packages/interaction/commands/src/brand.ts) · [`packages/interaction/user-approval/src/types.ts:17`](../packages/interaction/user-approval/src/types.ts) · [`packages/llm/llm-retry/src/brand.ts:4`](../packages/llm/llm-retry/src/brand.ts) · [`packages/llm/llm/src/brand.ts:16`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:31`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:43`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:67`](../packages/llm/llm/src/brand.ts) · [`packages/schedule/schedule/src/types.ts:10`](../packages/schedule/schedule/src/types.ts) · [`packages/session/session-title/src/index.ts:42`](../packages/session/session-title/src/index.ts) · [`packages/session/session-title/src/types.ts:17`](../packages/session/session-title/src/types.ts) · [`packages/webhook/webhook/src/brand.ts:12`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:6`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:9`](../packages/webhook/webhook/src/brand.ts) · [`packages/workflow/workflow/src/types.ts:13`](../packages/workflow/workflow/src/types.ts)
+
+`string`
+
+
+
+### `string[]`
+
+SHA-256: `93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2`
+
+Array of `string`.
+
+
+
+### `true`
+
+SHA-256: `dacf3d5f3e4ff619c1320e64a48dec5e7ecd7870bece65fbd449a0e63adfa521`
+
+`true`
+
+
+
+### `tuple (1 positions)`
+
+SHA-256: `4aed17ec726b5397c29f6cb4bcd7905dc1a12bb6140f1657f073cd24380f2af8`
+
+| Position | Presence | Type |
+|---|---|---|
+| 0 | required | [`{ type: "web_search_20250305" }`](#persistence-type-sha256-2d11ca7b0d4493e244b74eba093227866b33249841e59a1e9bf56afed38604c3) |
+
+
+
+### `tuple (1 positions)`
+
+SHA-256: `8d6a011f3ef7096a4a922ef420458419ff6b20e1eaeece5d331db7585d2f08d6`
+
+| Position | Presence | Type |
+|---|---|---|
+| 0 | required | [`ToolResultBlock`](#persistence-type-sha256-d61574d68558c5a184429e70b04da393dd5460bf5cc3ddef814546e659bd5127) |
+
+
+
+### `tuple (1 positions)`
+
+SHA-256: `8f6d609794bf5afc01d7ccf3e03811d32f4b8047f58a2c9a98db0154c2ad7cb9`
+
+| Position | Presence | Type |
+|---|---|---|
+| 0 | required | [`TextBlock`](#persistence-type-sha256-4e887768586528565381dadbddee6cef555874148089f4579e0b4b1ad096fc9c) |
+
+
+
+### `tuple (1 positions)`
+
+SHA-256: `b993441f8ce7d27b80e619e113e232ae8e62d3d5a8340f6bfe12d8c4c018e62f`
+
+| Position | Presence | Type |
+|---|---|---|
+| 0 | required | [`{ role: "user" }`](#persistence-type-sha256-9a2a9029f8d7ede05336980d8342737557f487b913bfd28853d0ab5214600ab5) |
+
+
+
+### `union (2 variants)`
+
+SHA-256: `1ab2ef1296f157ba96998f179bb5daa9d21a82480da2901127aeab2730797c92`
+
+One of:
+
+- `"error"`
+- `"success"`
+
+
+
+### `union (2 variants)`
+
+SHA-256: `50cf02d875f8a1f1411f4a6fbcffab9120ccef5f74a47331fbf29480e5f68f48`
+
+One of:
+
+- `"fork"`
+- `"fresh"`
+
+
+
+### `union (2 variants)`
+
+SHA-256: `feb329074f0206ecc06d8a1aa0a0b3e2f47fd27524ba020fbc849ba63e938896`
+
+One of:
+
+- [`{ compactionId, llmStreamCall, maxTokens?, model, … }`](#persistence-type-sha256-9ff2ad8dddb836f75e8f6197fff2371323dfc396c3c6fb667e6e0b42fda79a5c)
+- [`{ compactionId, maxTokens?, model, provider, … }`](#persistence-type-sha256-3aa261c8516b5c955ed12080e6257a56cbe513f6c9f0ac9274c12e96c196ebca)
+
+
+
+
+
+### `union (3 variants)`
+
+SHA-256: `5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc`
+
+One of:
+
+- [`{ ignorable?, seq, sourceEventSeqs?, surfaceOp, … }`](#persistence-type-sha256-998f22585a5d73ec005365e203f07fc3b3a029e82323fdda3fd7f13b0a9639d0)
+- [`{ ignorable?, seq, surfaceOp, time, … }`](#persistence-type-sha256-7af85bf70d4eafce63e739adae38ea85501e68df3a0e22f97f3a0be90fd9e4cb)
+- [`{ ignorable?, seq, time, type }`](#persistence-type-sha256-e3e77b26f0148755a505f5b8ea843a3be117827d4703bb5754d9dc8ddbef521f)
+
+
+
+### `union (3 variants)`
+
+SHA-256: `904bf499d98be4a3a5f836fcac533b6c4899569b018071e6604e1d32657d00fd`
+
+One of:
+
+- `"remove"`
+- `"replace"`
+- `"set"`
+
+
+
+### `union (3 variants)`
+
+SHA-256: `acd36e1717d2b4ef9e98a8e6fac17ca1203f3f448e5bca51677f129a8f4999e2`
+
+One of:
+
+- `"assistant"`
+- `"system"`
+- `"user"`
+
+
+
+### `union (3 variants)`
+
+SHA-256: `fd0d91a1f9dd2efb8959bdf5e07f8f0a98b1cdfa38ce8d4732ebde0b44c3abd4`
+
+One of:
+
+- `"completed"`
+- `"in_progress"`
+- `"pending"`
+
+
+
+### `union (6 variants)`
+
+SHA-256: `62e6a429ff3f390a46ac39fb468692032f42936ca0db19b53454184189401379`
+
+One of:
+
+- `"block"`
+- `"complete"`
+- `"create"`
+- `"edit"`
+- `"pause"`
+- `"resume"`
+
+
+
+### `union (7 variants)`
+
+SHA-256: `23cf7e0cf3fec1283b60fa15713506169bc9c079a08e124d1cb9733baca80b40`
+
+| kind | Form property | Other required fields | Full definition |
+|---|---|---|---|
+| `plugin` | `"catalog"` | `plugin`: `string` | [`{ kind: "plugin", form: "catalog" }`](#persistence-type-sha256-2f90a7b3646fea3e677bd7b4000aa96f3b8964f107b614e204e11ad4051c24fc) |
+| `plugin` | `"instructions"` | `plugin`: `string` | [`{ kind: "plugin", form: "instructions" }`](#persistence-type-sha256-dda6e111a8ccfc12f6e742e977a1a4e3549e8c03732a5ff6c8d7c3d4bcb7a412) |
+| `plugin` | `"notice"` | `plugin`: `string`; `summary`: `string` | [`{ kind: "plugin", form: "notice" }`](#persistence-type-sha256-b4d298d90c798fa4d1f5b030ce3ce8031c4c41beafdb05323bec8b2a06903b43) |
+| `plugin` | `"recall"` | `plugin`: `string` | [`{ kind: "plugin", form: "recall" }`](#persistence-type-sha256-85e1bd563d6c80c1f377f99f91103fec4e315148a7330f3b3dae7c2d04e33b01) |
+| `plugin` | `"relay"` | `plugin`: `string` | [`{ kind: "plugin", form: "relay" }`](#persistence-type-sha256-2ce7ef3b3daebf95815c7ae454a751d3e67ca7a22e2e0734fe2942df393bb66c) |
+| `plugin` | `"snapshot"` | `plugin`: `string`; `sections`: [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) | [`{ kind: "plugin", form: "snapshot" }`](#persistence-type-sha256-e8d26e6993445743e6c4342c31b284c7d8f5574369abdd6021183af1a6b3538f) |
+| `plugin` | not declared | `plugin`: `string` | [`{ kind: "plugin" }`](#persistence-type-sha256-0ddab4577db37a3e0d9e3a91761735c8ef6f5629d526ab8ecaeeea19c097c8f8) |
+
+
+
+### `union (7 variants)`
+
+SHA-256: `3305a4bb6b6c29b482ba91d59c60b47e8f98282d3dacc8c29e4a4c2712209bdd`
+
+One of:
+
+- `"instruction-following"`
+- `"other"`
+- `"product-interaction"`
+- `"resource-cost"`
+- `"security-privacy-permission"`
+- `"service-stability"`
+- `"task-result"`
+
+
+
+### `unknown`
+
+SHA-256: `bbc5696e3f13c758237b316e3cf08cda0b9fd51ffe672539883457769faa185d`
+
+`unknown`: the declaration does not expose the stored value's internal fields.
+
+
+
+### `unknown[]`
+
+SHA-256: `b1664fa89f8eab49a14e7e3168d8bc4da4aa9fd76332f6c4a053d839e5276ae7`
+
+Array of `unknown` (opaque).
+
+
+
+### `{ active }`
+
+SHA-256: `20a57544bbf204dacd1ae6beb2ab29444365c3c869f2afdf489dcdcbc3d9c8c5`
+
+Sources: [`packages/plan/plan-mode/src/index.ts:47`](../packages/plan/plan-mode/src/index.ts)
| Property | Presence | Type |
|---|---|---|
-| `ignorable` | optional | `true` |
-| `seq` | required | `number` |
-| `surfaceOp` | required | [`packages/core/session/src/types.ts#SurfaceOp`](#persistence-type-packagescoresessionsrctypestssurfaceop) |
-| `time` | required | `number` |
-| `type` | required | `string` |
+| `active` | required | `boolean` |
-
+
-### `SessionEventEnvelope[6].surfaceOp[1]`
+### `{ agentPreset }`
+
+SHA-256: `6e52dd55a1d48954ed5464ec46fe34d9eb65f709baabc9561e7a279910b0c406`
+
+Sources: [`packages/preset/agent-presets/src/session.ts:28`](../packages/preset/agent-presets/src/session.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `agentPreset` | required | `string` |
+
+
+
+### `{ allowedModels }`
+
+SHA-256: `0d47a8f3d847243c4488e755ad4cab7a04ac5d4621b9c81865524cf3f4d8536f`
+
+Sources: [`packages/subagent/tool-subagent/src/model-selection-state.ts:17`](../packages/subagent/tool-subagent/src/model-selection-state.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `allowedModels` | required | [`SessionTitleModelIdentity[]`](#persistence-type-sha256-ba77b58995e36f14bb13886b0493d0a1a63d5db10b1a6cd9f6ac65a72cf832ec) |
+
+
+
+### `{ args?, commandId, name, source }`
+
+SHA-256: `a853902cfab417b8f08aa51ad6855fea46f34ed4588a74e47403035111d0fb86`
+
+Sources: [`packages/interaction/commands/src/types.ts:105`](../packages/interaction/commands/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `args` | optional | `string` |
+| `commandId` | required | `string` |
+| `name` | required | `string` |
+| `source` | required | [`CommandSource`](#persistence-type-sha256-ada310bf0bdb8fed51f3b56ea63f6ea6b18bbd587f04fccb63a14ab0b2a24e05) |
+
+
+
+### `{ arguments, callId, name, step, … }`
+
+SHA-256: `e4c18e294232c3ba6c9f1999f168263cc55956147cfe4121720899be8e52edd1`
+
+Sources: [`packages/core/session/src/types.ts:348`](../packages/core/session/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `arguments` | required | `string` |
+| `callId` | required | `string` |
+| `name` | required | `string` |
+| `step` | required | `number` |
+| `turn` | required | `number` |
+
+
+
+### `{ callId, files, turn }`
+
+SHA-256: `1528539c63db8b23506f0209a99ce77d8ad138adfbfcee3d4769b7382d93756c`
+
+Sources: [`packages/deliverables/tool-present/src/types.ts:15`](../packages/deliverables/tool-present/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `callId` | required | `string` |
+| `files` | required | [`PresentedFile[]`](#persistence-type-sha256-1d9cb3caa96100b18b1911fa3ff8c751ef6992971a03c5f4d9aefc1a0004a345) |
+| `turn` | required | `number` |
+
+
+
+### `{ callId?, id, reason?, toolName }`
+
+SHA-256: `45f2a07ea94573123b6ae14db787a40062dec3834f36d8be92c523d40ba28448`
+
+Sources: [`packages/interaction/user-approval/src/types.ts:44`](../packages/interaction/user-approval/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `callId` | optional | `string` |
+| `id` | required | `string` |
+| `reason` | optional | `string` |
+| `toolName` | required | `string` |
+
+
+
+### `{ capturedFormatVersion?, capturedThroughSeq, compacted, inputIndex, … }`
+
+SHA-256: `4f91f187baeabef5c7950c4780d31bbe39f3345dff591a6cf26ac7e135ac1cf4`
+
+Sources: [`packages/context/session-reference/src/types.ts:18`](../packages/context/session-reference/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `capturedFormatVersion` | optional | `number` |
+| `capturedThroughSeq` | required | [`OptionalSessionSeq`](#persistence-type-sha256-3bd652ebfa8726b3ce3937a4f1bd2759e02f86b3a08a20f9e41a8513656fbc5f) |
+| `compacted` | required | `boolean` |
+| `inputIndex` | required | `number` |
+| `label` | required | `string` |
+| `omittedBytes` | required | `number` |
+| `omittedMessages` | required | `number` |
+| `originalMessages` | required | `number` |
+| `retainedMessages` | required | `number` |
+| `sessionId` | required | `string` |
+| `truncated` | required | `boolean` |
+
+
+
+### `{ capturedFormatVersion?, capturedThroughSeq, compacted, inputIndex, … }[]`
+
+SHA-256: `df843efd87c78cf8de98f8e0d0216956cd568d0d0e56a22c853663e274aa1a18`
+
+Array of [`{ capturedFormatVersion?, capturedThroughSeq, compacted, inputIndex, … }`](#persistence-type-sha256-4f91f187baeabef5c7950c4780d31bbe39f3345dff591a6cf26ac7e135ac1cf4).
+
+
+
+### `{ childCreatedAt, childId, label, mode, … }`
+
+SHA-256: `0e10d7c096b47e61defe372a5fc8bd37d835199410eac44367f95c45082498bd`
+
+| Property | Presence | Type |
+|---|---|---|
+| `childCreatedAt` | required | `number` |
+| `childId` | required | `string` |
+| `label` | required | `string` |
+| `mode` | required | `"continuable"` |
+| `version` | required | `0` |
+
+
+
+### `{ childCreatedAt, childId, label?, mode, … }`
+
+SHA-256: `5d542ac7bdf13310c46e1a884dec9fb18ad8c6e153cff207e639cd7bf9d7e694`
+
+| Property | Presence | Type |
+|---|---|---|
+| `childCreatedAt` | required | `number` |
+| `childId` | required | `string` |
+| `label` | optional | `string` |
+| `mode` | required | `"one-shot"` |
+| `version` | required | `0` |
+
+
+
+### `{ code, name, reason? }`
+
+SHA-256: `a81059ca06999da1e712414520c2c65e491d052fcf9640fae20aa38f0a5dc735`
+
+Sources: [`packages/core/session/src/types.ts:370`](../packages/core/session/src/types.ts) · [`packages/core/tools/src/types.ts:24`](../packages/core/tools/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `code` | required | `string` |
+| `name` | required | `string` |
+| `reason` | optional | `string` |
+
+
+
+### `{ commandId, kind, sourceEventSeq?, text? }`
+
+SHA-256: `5b6fb1f226ff56402db08a6aae82af76100b14056271875f69ec526a1ae05d51`
+
+Sources: [`packages/interaction/commands/src/types.ts:112`](../packages/interaction/commands/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `commandId` | required | `string` |
+| `kind` | required | [`union (2 variants)`](#persistence-type-sha256-1ab2ef1296f157ba96998f179bb5daa9d21a82480da2901127aeab2730797c92) |
+| `sourceEventSeq` | optional | `number` |
+| `text` | optional | `string` |
+
+
+
+### `{ compactionId, error?, sourceCommandId?, turn }`
+
+SHA-256: `ca59530d1a4f3e191b4032bc4a20eded0d827db8b5a7efb27b3af9e9b456c6f2`
+
+Sources: [`packages/compaction/compaction/src/types.ts:72`](../packages/compaction/compaction/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `compactionId` | required | `string` |
+| `error` | optional | `string` |
+| `sourceCommandId` | optional | `string` |
+| `turn` | required | [`OptionalSessionSeq`](#persistence-type-sha256-3bd652ebfa8726b3ce3937a4f1bd2759e02f86b3a08a20f9e41a8513656fbc5f) |
+
+
+
+### `{ compactionId, llmStreamCall, maxTokens?, model, … }`
+
+SHA-256: `9ff2ad8dddb836f75e8f6197fff2371323dfc396c3c6fb667e6e0b42fda79a5c`
+
+| Property | Presence | Type |
+|---|---|---|
+| `compactionId` | required | `string` |
+| `llmStreamCall` | required | `true` |
+| `maxTokens` | optional | `number` |
+| `model` | required | `string` |
+| `provider` | required | `string` |
+| `rawOutput` | required | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `shadowedRange` | required | [`{ end, start }`](#persistence-type-sha256-9e41386b3a0c9572b0d63078492ebb3997da7d3a830d44e0259418bd02f4bcb2) |
+| `shadowedSeqs` | required | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `shadowedTokenCount` | required | `number` |
+| `sourceCommandId` | optional | `string` |
+| `summary` | required | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `usage` | optional | [`TokenUsage`](#persistence-type-sha256-fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394) |
+
+
+
+### `{ compactionId, maxTokens?, model, provider, … }`
+
+SHA-256: `3aa261c8516b5c955ed12080e6257a56cbe513f6c9f0ac9274c12e96c196ebca`
+
+| Property | Presence | Type |
+|---|---|---|
+| `compactionId` | required | `string` |
+| `maxTokens` | optional | `number` |
+| `model` | required | `string` |
+| `provider` | required | `string` |
+| `rawOutput` | optional | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `shadowedRange` | required | [`{ end, start }`](#persistence-type-sha256-9e41386b3a0c9572b0d63078492ebb3997da7d3a830d44e0259418bd02f4bcb2) |
+| `shadowedSeqs` | required | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `shadowedTokenCount` | required | `number` |
+| `sourceCommandId` | optional | `string` |
+| `summary` | required | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `usage` | optional | [`TokenUsage`](#persistence-type-sha256-fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394) |
+
+
+
+### `{ compactionId, sourceCommandId?, turn }`
+
+SHA-256: `3e4e7683b0192c9f0e6a75c59076108f017892cdb302a98032c2632fd79c356f`
+
+Sources: [`packages/compaction/compaction/src/types.ts:24`](../packages/compaction/compaction/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `compactionId` | required | `string` |
+| `sourceCommandId` | optional | `string` |
+| `turn` | required | [`OptionalSessionSeq`](#persistence-type-sha256-3bd652ebfa8726b3ce3937a4f1bd2759e02f86b3a08a20f9e41a8513656fbc5f) |
+
+
+
+### `{ decision, durationMs, exitCode?, handlerId, … }`
+
+SHA-256: `8ad45ad053b4d89f8865c17cc9ff3b8748e86045f3f0fb816269a34af2619141`
+
+Sources: [`packages/hooks/hook-protocol/src/types.ts:31`](../packages/hooks/hook-protocol/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `decision` | required | `string` |
+| `durationMs` | required | `number` |
+| `exitCode` | optional | `number` |
+| `handlerId` | required | `string` |
+| `point` | required | `string` |
+| `stderrSummary` | optional | `string` |
+| `turn` | required | `number` |
+
+
+
+### `{ delayMs, failure, maxRetries, mode, … }`
+
+SHA-256: `cdee10e87dbed8440d8b6935888624884878efc7af95402e94171b29f173dced`
+
+Sources: [`packages/llm/llm-retry/src/types.ts:17`](../packages/llm/llm-retry/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `delayMs` | required | `number` |
+| `failure` | required | [`LlmFailure`](#persistence-type-sha256-5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca) |
+| `maxRetries` | required | `number` |
+| `mode` | required | `"normal"` |
+| `policyKey` | required | `string` |
+| `provider` | required | `string` |
+| `retry` | required | `number` |
+| `retryId` | required | `string` |
+| `step` | required | `number` |
+| `turn` | required | `number` |
+
+
+
+### `{ delayMs, failure, mode, policyKey, … }`
+
+SHA-256: `374fdd68aee5ff844e378c0cbdd961d247a0f22e4ade0bb03d800cd2a46a2b8b`
+
+Sources: [`packages/llm/llm-retry/src/types.ts:30`](../packages/llm/llm-retry/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `delayMs` | required | `number` |
+| `failure` | required | [`LlmFailure`](#persistence-type-sha256-5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca) |
+| `mode` | required | `"always"` |
+| `policyKey` | required | `string` |
+| `provider` | required | `string` |
+| `retry` | required | `number` |
+| `retryId` | required | `string` |
+| `step` | required | `number` |
+| `turn` | required | `number` |
+
+
+
+### `{ description, name }`
+
+SHA-256: `83079c8a3f733ac3fa603eefa0fbb4737ca4d8b69e7e2e7298b60f9ac4098693`
+
+Sources: [`packages/skill/tool-skill/src/index.ts:40`](../packages/skill/tool-skill/src/index.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `description` | required | `string` |
+| `name` | required | `string` |
+
+
+
+### `{ description, name }[]`
+
+SHA-256: `aba175fb20ffc71112c55efe70458ff5d7dbfb83501892b4ba8d077f0ea5d7ba`
+
+Array of [`{ description, name }`](#persistence-type-sha256-83079c8a3f733ac3fa603eefa0fbb4737ca4d8b69e7e2e7298b60f9ac4098693).
+
+
+
+### `{ dialect, handlerId, matcher?, point, … }`
+
+SHA-256: `119abe2b9c0b2f46ecb31d82b9acba4d4b30e049f655e2475e8b4ae12d5a9e25`
+
+Sources: [`packages/hooks/hook-protocol/src/types.ts:19`](../packages/hooks/hook-protocol/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `dialect` | required | [`HookDialect`](#persistence-type-sha256-a6b41f5bede8094d7bf635be5d69b1bd7a25e006ca9cf9415bceb9322f1a7feb) |
+| `handlerId` | required | `string` |
+| `matcher` | optional | `string` |
+| `point` | required | `string` |
+| `turn` | required | `number` |
+
+
+
+### `{ end, start }`
+
+SHA-256: `9e41386b3a0c9572b0d63078492ebb3997da7d3a830d44e0259418bd02f4bcb2`
+
+Sources: [`packages/compaction/compaction/src/types.ts:38`](../packages/compaction/compaction/src/types.ts) · [`packages/compaction/compaction/src/types.ts:84`](../packages/compaction/compaction/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `end` | required | `number` |
+| `start` | required | `number` |
+
+
+
+### `{ endSeq, op, startSeq }`
SHA-256: `bcf0caf62d964b2fcf5404bd5c909cfa9a21c3f3c96e6b7e36d9e33565223825`
@@ -6282,452 +5524,1848 @@ Sources: [`packages/core/session/src/types.ts:450`](../packages/core/session/src
| `op` | required | `"replace"` |
| `startSeq` | required | `number` |
-
+
-### `"session/title"`
+### `{ error, kind: "error" }`
-SHA-256: `7a651f3b672c52fb615f22c0ce9cb3cc5b22aad92e6bbeefb0808fd7b9233a50`
+SHA-256: `79650cfa10aa3c52440328d85e8a25f0ffadc8d7efd784e3c0819d8bb74a1985`
-`"session/title"`
+Sources: [`packages/core/session/src/types.ts:211`](../packages/core/session/src/types.ts)
-
+| Property | Presence | Type |
+|---|---|---|
+| `error` | required | [`LlmFailure`](#persistence-type-sha256-5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca) |
+| `kind` | required | `"error"` |
-### `"session/title-llm-request"`
+
-SHA-256: `587bb11da730e06aa52b62c087d217d6f8f22459b25f31cb9e1e1baf17944e5e`
+### `{ error?, message, meta?, step, … }`
-`"session/title-llm-request"`
+SHA-256: `356aad27134a0e31af67c994ff8b9e4b91acfb6c4917b3bc1f7a62bbf82794d5`
-
+Sources: [`packages/core/session/src/types.ts:362`](../packages/core/session/src/types.ts)
-### `"set"`
+| Property | Presence | Type |
+|---|---|---|
+| `error` | optional | [`{ code, name, reason? }`](#persistence-type-sha256-a81059ca06999da1e712414520c2c65e491d052fcf9640fae20aa38f0a5dc735) |
+| `message` | required | [`ToolResultMessage`](#persistence-type-sha256-1b573e2d5c094fa87e2a8bf409ddd4ac5ba92a123085e168de44b9ccdbd5244c) |
+| `meta` | optional | [`JsonValue`](#persistence-type-sha256-c592ce75aab73fcab19c1d7845684c72cf402b78d2e1f2833a58ecf9f3598ed6) |
+| `step` | required | `number` |
+| `turn` | required | `number` |
-SHA-256: `b765ee31033cea463863faf3fc6a0a1b85c47c6a2f13fe1ce833abe56105114b`
+
-`"set"`
+### `{ failure, kind: "aborted" }`
-
+SHA-256: `8e31bb958e9b015e6f8407eaade32217068159e816f3cc99c3ad76eb889732e0`
-### `"skill-catalog"`
+Sources: [`packages/llm/llm/src/types.ts:147`](../packages/llm/llm/src/types.ts)
-SHA-256: `6ebcc2dbec9f2dabca9f668ae6d39e877899b180740570f453409db339221df3`
+| Property | Presence | Type |
+|---|---|---|
+| `failure` | required | [`LlmFailure`](#persistence-type-sha256-5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca) |
+| `kind` | required | `"aborted"` |
-`"skill-catalog"`
+
-
+### `{ failure, kind: "error" }`
-### `"skill-invocation"`
+SHA-256: `693f4952fb5565da96c06bace8924b098ac2fbc915fde0ff8019701183abc057`
-SHA-256: `1922cd79a70806c17758185a6ef0458bc1fb3900363906733421c16414da2509`
+Sources: [`packages/llm/llm/src/types.ts:148`](../packages/llm/llm/src/types.ts)
-`"skill-invocation"`
+| Property | Presence | Type |
+|---|---|---|
+| `failure` | required | [`LlmFailure`](#persistence-type-sha256-5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca) |
+| `kind` | required | `"error"` |
-
+
-### `"snapshot"`
+### `{ header, reason, startsSeries? }`
-SHA-256: `6f9e00383836275e46c0a9915767f9bb561be5fc30aae490174908a93e99a912`
+SHA-256: `2f0aefb72ab453c4bf21a6687f436775d359dc6f8f10410fd4c0615b20bd9d76`
-`"snapshot"`
+Sources: [`packages/core/session/src/types.ts:377`](../packages/core/session/src/types.ts)
-
+| Property | Presence | Type |
+|---|---|---|
+| `header` | required | [`EpochHeader`](#persistence-type-sha256-c55a891c7aac496de6ee64c91c1fb65728c977314013033e42c863428aada854) |
+| `reason` | required | [`RequestHeaderReason`](#persistence-type-sha256-530da6c0267813bb4511af72883cc518834e624e3b3220a7062955fd57a788a6) |
+| `startsSeries` | optional | `true` |
-### `"step/end"`
+
-SHA-256: `c219efbdfd53b836786202ab4532913d555798f0a8615a4e9629736e3799fb70`
+### `{ height, width }`
-`"step/end"`
+SHA-256: `0f46153645c297846a3fad3911636659ca4717a5e7d71c9f50bffacd312115ef`
-
+Sources: [`packages/attachment/attachment/src/types.ts:28`](../packages/attachment/attachment/src/types.ts)
-### `"step/start"`
+| Property | Presence | Type |
+|---|---|---|
+| `height` | required | `number` |
+| `width` | required | `number` |
-SHA-256: `2c64d4bc7264fd3f8bed47e96ab8a593bce05a1e4e1c436dcd244a3b7e0c2a9d`
+
-`"step/start"`
+### `{ id, outcome }`
-
+SHA-256: `93cbbc5a7fd0b1aa1ff1b9a6bb5ec52b073f48e5a5200365c45c0cd54059e1b9`
-### `"stop"`
+Sources: [`packages/interaction/user-approval/src/types.ts:55`](../packages/interaction/user-approval/src/types.ts)
-SHA-256: `57f3f606ff8b6c84d9c443faace9d1dd10cca0354f37a4f515ef075f7c351b90`
+| Property | Presence | Type |
+|---|---|---|
+| `id` | required | `string` |
+| `outcome` | required | [`ApprovalOutcome`](#persistence-type-sha256-930c1cd289def119d443e19dd90008916bf035f0a4d23e07241e7f050f2b89b7) |
-`"stop"`
+
-
+### `{ ignorable?, seq, sourceEventSeqs?, surfaceOp, … }`
-### `string`
+SHA-256: `998f22585a5d73ec005365e203f07fc3b3a029e82323fdda3fd7f13b0a9639d0`
-SHA-256: `4cd48f3e5108bd6ebedf7301c3638839b8b2b9db8dbd493974177fbdeb91a01b`
+| Property | Presence | Type |
+|---|---|---|
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `sourceEventSeqs` | optional | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `surfaceOp` | required | [`SurfaceOp`](#persistence-type-sha256-335e242de1fcc17b6ca920fc420d71bec2d76e53e37955c00948b65ab77f05c5) |
+| `time` | required | `number` |
+| `type` | required | `string` |
-Sources: [`packages/api/session-controller/src/types.ts:380`](../packages/api/session-controller/src/types.ts) · [`packages/attachment/attachment/src/brand.ts:6`](../packages/attachment/attachment/src/brand.ts) · [`packages/compaction/compaction/src/brand.ts:4`](../packages/compaction/compaction/src/brand.ts) · [`packages/core/session/src/types.ts:19`](../packages/core/session/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:20`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:32`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:8`](../packages/experimental/agent-team/src/types.ts) · [`packages/feedback/message-feedback/src/types.ts:14`](../packages/feedback/message-feedback/src/types.ts) · [`packages/goal/goal/src/types.ts:17`](../packages/goal/goal/src/types.ts) · [`packages/interaction/commands/src/brand.ts:31`](../packages/interaction/commands/src/brand.ts) · [`packages/interaction/user-approval/src/types.ts:17`](../packages/interaction/user-approval/src/types.ts) · [`packages/llm/llm-retry/src/brand.ts:4`](../packages/llm/llm-retry/src/brand.ts) · [`packages/llm/llm/src/brand.ts:16`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:31`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:43`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:67`](../packages/llm/llm/src/brand.ts) · [`packages/schedule/schedule/src/types.ts:10`](../packages/schedule/schedule/src/types.ts) · [`packages/session/session-title/src/index.ts:42`](../packages/session/session-title/src/index.ts) · [`packages/session/session-title/src/types.ts:17`](../packages/session/session-title/src/types.ts) · [`packages/webhook/webhook/src/brand.ts:12`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:6`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:9`](../packages/webhook/webhook/src/brand.ts) · [`packages/workflow/workflow/src/types.ts:13`](../packages/workflow/workflow/src/types.ts)
+
-`string`
+### `{ ignorable?, seq, surfaceOp, time, … }`
-
+SHA-256: `7af85bf70d4eafce63e739adae38ea85501e68df3a0e22f97f3a0be90fd9e4cb`
-### `"subagent"`
+| Property | Presence | Type |
+|---|---|---|
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `surfaceOp` | required | [`SurfaceOp`](#persistence-type-sha256-335e242de1fcc17b6ca920fc420d71bec2d76e53e37955c00948b65ab77f05c5) |
+| `time` | required | `number` |
+| `type` | required | `string` |
-SHA-256: `aacda84a69739238aa782eea902d3073017d9d74b9808de2bf5a83c9738cbdc6`
+
-`"subagent"`
+### `{ ignorable?, seq, time, type }`
-
+SHA-256: `e3e77b26f0148755a505f5b8ea843a3be117827d4703bb5754d9dc8ddbef521f`
-### `"subagent-settled"`
+| Property | Presence | Type |
+|---|---|---|
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `string` |
-SHA-256: `bf16d2e98a7f13894ded2cffe5ce857bf473954a0e3c0ed9bc7739e2e1c7b78a`
+
-`"subagent-settled"`
+### `{ inherited? }`
-
+SHA-256: `17d1afb770d9941936130996da00dc86782cfef731d8d6526162c301256a4ac3`
-### `"subagent/catalog"`
+Sources: [`packages/core/session/src/types.ts:414`](../packages/core/session/src/types.ts)
-SHA-256: `44c8c77aa9aa100b0d74d2deee85474b29faa6eee0ac0f662f7abe9931ddd7f2`
+| Property | Presence | Type |
+|---|---|---|
+| `inherited` | optional | `true` |
-`"subagent/catalog"`
+
-
+### `{ inserted, outcome?, removedCount?, start, … }`
-### `"subagent/descriptor"`
+SHA-256: `a6a195c1b4a906d953d24ab5864c9f1881d545460e080a51144adfc9cb058cfe`
-SHA-256: `5ebce1317eacd2c148456627a09668e927ee15c204f0643f5ea76b46b54a2647`
+Sources: [`packages/core/agent/src/types.ts:87`](../packages/core/agent/src/types.ts)
-`"subagent/descriptor"`
+| Property | Presence | Type |
+|---|---|---|
+| `inserted` | required | [`UserMessage[]`](#persistence-type-sha256-300341f890f7b9506a1749fff4fa5239d16ea1c63ff6b15851acb03c20f3b48d) |
+| `outcome` | optional | `"canceled"` |
+| `removedCount` | optional | `number` |
+| `start` | required | `number` |
+| `target` | required | [`InboxTarget`](#persistence-type-sha256-96f4a9c81fc0f940ef71528a8cc66731ae4cf1f40d79680c5fe3c39f96d7723c) |
-
+
-### `"subagent/model-selection-policy"`
+### `{ interrupted?, message, step, stream, … }`
-SHA-256: `0a8a062bc9c3c0d97fd97742262f2ea53dd32297f834e81114870d38ac3dc6da`
+SHA-256: `77b8491f946edfc8cc77ebae3ba49183759da31ba2dfa83d4c9e9e618c4b91d2`
-`"subagent/model-selection-policy"`
+Sources: [`packages/core/session/src/types.ts:328`](../packages/core/session/src/types.ts)
-
+| Property | Presence | Type |
+|---|---|---|
+| `interrupted` | optional | `true` |
+| `message` | required | [`AssistantMessage`](#persistence-type-sha256-e50b0a3ed8e6c80b672e4f855c91984f03b5c3fdd5d475bf171171f391a86c83) |
+| `step` | required | `number` |
+| `stream` | required | [`AssistantStreamRecord[]`](#persistence-type-sha256-26f3bb7529cfce1e3a0f1ededa365d8b426758ca0feeb0beabeee805f8bb8346) |
+| `turn` | required | `number` |
+| `usage` | optional | [`TokenUsage`](#persistence-type-sha256-fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394) |
-### `"success"`
+
-SHA-256: `511801b0a6470d98566e8385d3dffddb2b67f79fcf73ed6056f46c3cc0a245a7`
+### `{ kind: "aborted", reason }`
-`"success"`
+SHA-256: `0a30c3be336cdd4f8f34e66543a3d46d611c43986edd9b3ce6cbb9b721d3b5d3`
-
+Sources: [`packages/core/session/src/types.ts:203`](../packages/core/session/src/types.ts)
-### `"system"`
+| Property | Presence | Type |
+|---|---|---|
+| `kind` | required | `"aborted"` |
+| `reason` | required | [`TurnEndCancelCause`](#persistence-type-sha256-1f8c126cfab3df812cd115cfc23e3256f0fa2383400f4ce91ecad313577e59b0) |
-SHA-256: `8af841fc9b265ade3441caf9fe40dd24db24226befba48150e6d0eeccc1389c3`
+
-`"system"`
+### `{ kind: "blocked" }`
-
+SHA-256: `023a355b2be0d688fb6e4df8388dadb942761d46cfe96d0f499aae9631a159d4`
-### `"system/message"`
+Sources: [`packages/core/session/src/types.ts:205`](../packages/core/session/src/types.ts)
-SHA-256: `1c5a58f4599bd4a9711712551ffe2442a5e5fcd0758bafe630cc4ead850bdaa7`
+| Property | Presence | Type |
+|---|---|---|
+| `kind` | required | `"blocked"` |
-`"system/message"`
+
-
+### `{ kind: "completed" }`
-### `"task-result"`
+SHA-256: `b6ef9c6210be8350cd465f485cf520031fffa6bf3809c61a1e713e834c5982d0`
-SHA-256: `f05fb85e715af4ab4de0b6ba111166dd0435bd8bb74a0fa0f32b9d174113fc7c`
+Sources: [`packages/core/session/src/types.ts:201`](../packages/core/session/src/types.ts)
-`"task-result"`
+| Property | Presence | Type |
+|---|---|---|
+| `kind` | required | `"completed"` |
-
+
-### `"team-message"`
+### `{ kind: "disposed" }`
-SHA-256: `2e4debca12f2c449f96dc6574f3fbf2fb346193443114a241d01a236362ec48c`
+SHA-256: `4bb451330ff699f36b45539ceb0eb2606ead72084e2c5bb637c36cc80e2252db`
-`"team-message"`
+Sources: [`packages/core/session/src/types.ts:192`](../packages/core/session/src/types.ts)
-
+| Property | Presence | Type |
+|---|---|---|
+| `kind` | required | `"disposed"` |
-### `"team/member"`
+
-SHA-256: `18fcdd273a2f2f9d813a3be5e71df5903a963a5c88e46b90b14de6e2db890da0`
+### `{ kind: "fallback" }`
-`"team/member"`
+SHA-256: `1b5649238876e28811e80f10ec67a00c197ad3babd4ecc61a22b09064b88c597`
-
+Sources: [`packages/session/session-title/src/types.ts:29`](../packages/session/session-title/src/types.ts)
-### `"team/message/delivered"`
+| Property | Presence | Type |
+|---|---|---|
+| `kind` | required | `"fallback"` |
-SHA-256: `a8a2b9011fc067862df7ce40748868467e5778283d7ac193c13f77684a914c57`
+
-`"team/message/delivered"`
+### `{ kind: "forked" }`
-
+SHA-256: `ec8b5ff7c77ca6893ac7ba5a0c5b2aefeb52f12c64450b7359660c2a7e8a53d7`
-### `"team/message/queued"`
+Sources: [`packages/core/session/src/types.ts:227`](../packages/core/session/src/types.ts)
-SHA-256: `4e011753f8263f436efaabfbb3b4db53a98fc55342c5ded2daf7208b217be159`
+| Property | Presence | Type |
+|---|---|---|
+| `kind` | required | `"forked"` |
-`"team/message/queued"`
+
-
+### `{ kind: "hook" }`
-### `"team/task"`
+SHA-256: `6c5a37d42ebdb12db4410699259335f1e149e3a0260425684c00b153afc8990d`
-SHA-256: `b57ae1b37e52bee0a21cbdace168dc6a15582bcda8c306dad962c5dcc8a8e28b`
+Sources: [`packages/core/session/src/types.ts:191`](../packages/core/session/src/types.ts)
-`"team/task"`
+| Property | Presence | Type |
+|---|---|---|
+| `kind` | required | `"hook"` |
+| `reason` | required | `string` |
-
+
-### `"text"`
+### `{ kind: "interrupted" }`
-SHA-256: `4e44c9118152f6829634bfd508e47669ab0497caffa380c94b4be91f9390d35d`
+SHA-256: `56b7c047694875a843ba020dfea3c8380d54ae4ff88ab349e72004dc21e07c23`
-`"text"`
+Sources: [`packages/core/session/src/types.ts:220`](../packages/core/session/src/types.ts)
-
+| Property | Presence | Type |
+|---|---|---|
+| `kind` | required | `"interrupted"` |
-### `"text-chunks"`
+
-SHA-256: `f9cfc89e8fe085b4fcc9cd32b74b6f103608c54d7d8cd97b47c01de34f252ba3`
+### `{ kind: "legacy" }`
-`"text-chunks"`
+SHA-256: `eaa71be0fbf0f702df8ea6c11d0aa2f9782263d45a10d0fb14eda662f4bfe04c`
-
+Sources: [`packages/core/session/src/types.ts:195`](../packages/core/session/src/types.ts)
-### `"text-delta"`
+| Property | Presence | Type |
+|---|---|---|
+| `kind` | required | `"legacy"` |
-SHA-256: `5abab3a27fd2736660ecddd94b28d6bbf114986dd894880153bd1be3ccacb563`
+
-`"text-delta"`
+### `{ kind: "max-tokens" }`
-
+SHA-256: `ab7ec5f9eb2c6dfacca5da4c37cf7ba85d04172053ee6b1ebf1709ffcd99c1a7`
-### `"todo/write"`
+Sources: [`packages/core/session/src/types.ts:213`](../packages/core/session/src/types.ts) · [`packages/llm/llm/src/types.ts:146`](../packages/llm/llm/src/types.ts)
-SHA-256: `af0750d32d97d47b12b7361a587db41894b17e04c9a805fe212f0114aa2248c7`
+| Property | Presence | Type |
+|---|---|---|
+| `kind` | required | `"max-tokens"` |
-`"todo/write"`
+
-
+### `{ kind: "parent" }`
-### `"tool"`
+SHA-256: `6c03546143cdf6ae88f1745ac98c5139efa1588d1415249bbc5f3104d32ab800`
-SHA-256: `a13d8f379222ece8a02a86efe4c8334af4f108ecb3034b38c0a42bb3046e6847`
+Sources: [`packages/core/session/src/types.ts:190`](../packages/core/session/src/types.ts)
-`"tool"`
+| Property | Presence | Type |
+|---|---|---|
+| `kind` | required | `"parent"` |
-
+
-### `"tool-call"`
+### `{ kind: "plugin" }`
-SHA-256: `1f0133217eeeffd8d387baf1ec8ed9856e719bcd999dc08e48624cba96d75fd7`
+SHA-256: `0ddab4577db37a3e0d9e3a91761735c8ef6f5629d526ab8ecaeeea19c097c8f8`
-`"tool-call"`
+| Property | Presence | Type |
+|---|---|---|
+| `kind` | required | `"plugin"` |
+| `plugin` | required | `string` |
-
+
-### `"tool-call-chunks"`
+### `{ kind: "plugin", form: "catalog" }`
-SHA-256: `616f93a5047de668e1c30d57b1786abd76beeb4123599637ec1dc5290320ede5`
+SHA-256: `2f90a7b3646fea3e677bd7b4000aa96f3b8964f107b614e204e11ad4051c24fc`
-`"tool-call-chunks"`
+| Property | Presence | Type |
+|---|---|---|
+| `form` | required | `"catalog"` |
+| `kind` | required | `"plugin"` |
+| `plugin` | required | `string` |
-
+
-### `"tool-call-delta"`
+### `{ kind: "plugin", form: "instructions" }`
-SHA-256: `9b4fd974c124c83743efe030ba4e1250e087505f3f74588716a521fb8d453267`
+SHA-256: `dda6e111a8ccfc12f6e742e977a1a4e3549e8c03732a5ff6c8d7c3d4bcb7a412`
-`"tool-call-delta"`
+| Property | Presence | Type |
+|---|---|---|
+| `form` | required | `"instructions"` |
+| `kind` | required | `"plugin"` |
+| `plugin` | required | `string` |
-
+
-### `"tool-calls"`
+### `{ kind: "plugin", form: "notice" }`
-SHA-256: `6c1cccb433ddc153facb380c7dda956237ba5c31f8a532a69142dc277890cc9b`
+SHA-256: `b4d298d90c798fa4d1f5b030ce3ce8031c4c41beafdb05323bec8b2a06903b43`
-`"tool-calls"`
+| Property | Presence | Type |
+|---|---|---|
+| `form` | required | `"notice"` |
+| `kind` | required | `"plugin"` |
+| `plugin` | required | `string` |
+| `summary` | required | `string` |
-
+
-### `"tool-result"`
+### `{ kind: "plugin", form: "recall" }`
-SHA-256: `e5244812c495a80c2e78ba2c2690dca5f6b58ea8d3fe5531ff94a6f9ac5e5d66`
+SHA-256: `85e1bd563d6c80c1f377f99f91103fec4e315148a7330f3b3dae7c2d04e33b01`
-`"tool-result"`
+| Property | Presence | Type |
+|---|---|---|
+| `form` | required | `"recall"` |
+| `kind` | required | `"plugin"` |
+| `plugin` | required | `string` |
-
+
-### `"tool-workflow/agent-end"`
+### `{ kind: "plugin", form: "relay" }`
-SHA-256: `5d17f27a1ef9f7026c0232714adf7573961536d75f3303ca97973975f5af170e`
+SHA-256: `2ce7ef3b3daebf95815c7ae454a751d3e67ca7a22e2e0734fe2942df393bb66c`
-`"tool-workflow/agent-end"`
+| Property | Presence | Type |
+|---|---|---|
+| `form` | required | `"relay"` |
+| `kind` | required | `"plugin"` |
+| `plugin` | required | `string` |
-
+
-### `"tool-workflow/agent-start"`
+### `{ kind: "plugin", form: "snapshot" }`
-SHA-256: `ad92f473a03ae72599ff26c86e897c25e16269519ad2a87340f0bea946517af8`
+SHA-256: `e8d26e6993445743e6c4342c31b284c7d8f5574369abdd6021183af1a6b3538f`
-`"tool-workflow/agent-start"`
+| Property | Presence | Type |
+|---|---|---|
+| `form` | required | `"snapshot"` |
+| `kind` | required | `"plugin"` |
+| `plugin` | required | `string` |
+| `sections` | required | [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) |
-
+
-### `"tool-workflow/run-end"`
+### `{ kind: "provider" }`
-SHA-256: `fe792a6cd430494503837e21e79f91677704ccdd9e870c679aabd7d43ed47ddd`
+SHA-256: `b81e9de81a481b24e1e1f9adf038bfc59e57b4f35ce62f8f1e45284186f4f812`
-`"tool-workflow/run-end"`
+Sources: [`packages/session/session-title/src/types.ts:30`](../packages/session/session-title/src/types.ts)
-
+| Property | Presence | Type |
+|---|---|---|
+| `kind` | required | `"provider"` |
+| `model` | optional | [`SessionTitleModelIdentity`](#persistence-type-sha256-07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235) |
+| `provider` | required | `string` |
-### `"tool-workflow/run-start"`
+
-SHA-256: `cdca80b8dad24d4e7b1d5a288a8475ba8d8d46be385bd2da85f122ee836f1670`
+### `{ kind: "stop" }`
-`"tool-workflow/run-start"`
+SHA-256: `1d76406cbb2ddadb0dbbb51e9d8bc6cf678fed455cf8eb512f36f7c86d37a62f`
-
+Sources: [`packages/llm/llm/src/types.ts:144`](../packages/llm/llm/src/types.ts)
-### `"tool/call"`
+| Property | Presence | Type |
+|---|---|---|
+| `kind` | required | `"stop"` |
-SHA-256: `c589e938cc0e4989df8b82abef6339de621f0dc4fe62c230d145b94996af7f92`
+
-`"tool/call"`
+### `{ kind: "tool-calls" }`
-
+SHA-256: `287211846beea1eccb5f9acee00d20388a38fcb2e95858fa2332d6f58529379a`
-### `"tool/ptc-dispatch"`
+Sources: [`packages/llm/llm/src/types.ts:145`](../packages/llm/llm/src/types.ts)
-SHA-256: `fb5e0517050d2c6d40e5b8145db1f7c5ca7044d5d50fada6ff80e0b22c6ca973`
+| Property | Presence | Type |
+|---|---|---|
+| `kind` | required | `"tool-calls"` |
-`"tool/ptc-dispatch"`
+
-
+### `{ kind: "user" }`
-### `"tool/ptc-dispatch-start"`
+SHA-256: `6a4f72e2e179e17b922f2a9392c0e1c8f8c707f32494372454850a3eb184a6e7`
-SHA-256: `2aed07493b1c65b6d00de5586da1e743cf501684b9ad43a1765fb4007d4ea456`
+Sources: [`packages/api/session-controller/src/types.ts:385`](../packages/api/session-controller/src/types.ts)
-`"tool/ptc-dispatch-start"`
+| Property | Presence | Type |
+|---|---|---|
+| `clientTimeZone` | optional | `string` |
+| `kind` | required | `"user"` |
+| `rpcId` | required | `string` |
-
+
-### `"tool/result"`
+### `{ kind: "webhook", form: "notice" }`
-SHA-256: `570e85022434613394418ad33e77e9f1f7a05699b33d0b62eae0677a638c3833`
+SHA-256: `9edc162949abf93bd5ff049191b345454ba104f583937ce5580fb50f067d2b94`
-`"tool/result"`
+Sources: [`packages/webhook/webhook/src/types.ts:74`](../packages/webhook/webhook/src/types.ts)
-
+| Property | Presence | Type |
+|---|---|---|
+| `deliveryId` | required | `string` |
+| `form` | required | `"notice"` |
+| `kind` | required | `"webhook"` |
+| `provider` | required | `string` |
+| `ruleId` | required | `string` |
+| `source` | required | `string` |
+| `summary` | required | `string` |
-### `true`
+
-SHA-256: `dacf3d5f3e4ff619c1320e64a48dec5e7ecd7870bece65fbd449a0e63adfa521`
+### `{ max_tokens, messages, model, tools }`
-`true`
+SHA-256: `930a6567a10bb62ddd157bd8abdf4b182810c8c3b49d91309b3b009a5fed9731`
-
+Sources: [`packages/web/web-search-deepseek/src/provider.ts:61`](../packages/web/web-search-deepseek/src/provider.ts)
-### `"turn/end"`
+| Property | Presence | Type |
+|---|---|---|
+| `max_tokens` | required | `number` |
+| `messages` | required | [`tuple (1 positions)`](#persistence-type-sha256-b993441f8ce7d27b80e619e113e232ae8e62d3d5a8340f6bfe12d8c4c018e62f) |
+| `model` | required | `string` |
+| `tools` | required | [`tuple (1 positions)`](#persistence-type-sha256-4aed17ec726b5397c29f6cb4bcd7905dc1a12bb6140f1657f073cd24380f2af8) |
-SHA-256: `4312134fc6f9cad507c31390bd3d147535492dd77621ec517c5e85f853d53a03`
+
-`"turn/end"`
+### `{ member, teamId, version }`
-
+SHA-256: `b1ebd5cda47d90d980bb05bffc3f970c51537b9aff15b3bc3d639811727741b1`
-### `"turn/start"`
+Sources: [`packages/experimental/agent-team/src/types.ts:221`](../packages/experimental/agent-team/src/types.ts)
-SHA-256: `0af3ecfb8c60d416fc40a7cc4fb2c4851a8e46608b2b38ab9e510670c971aa1f`
+| Property | Presence | Type |
+|---|---|---|
+| `member` | required | [`TeamMemberSnapshot`](#persistence-type-sha256-6598cd6da253948d6b207c6374a45335804c79b576866d6215649c2d1bc85e25) |
+| `teamId` | required | `string` |
+| `version` | required | `2` |
-`"turn/start"`
+
-
+### `{ message, step, turn }`
-### `"unavailable"`
+SHA-256: `2074f40221b76c75fd314246db558965dc3477dfb440bcc952b1eedc9778e366`
-SHA-256: `2c4c21f19f426a58f2dac914e34313aa43f8408972de857a486d1f086d5adb6c`
+Sources: [`packages/core/session/src/types.ts:317`](../packages/core/session/src/types.ts)
-`"unavailable"`
+| Property | Presence | Type |
+|---|---|---|
+| `message` | required | [`SystemMessage`](#persistence-type-sha256-302b01ddddcbb3b16cfa3fba2a5d99f5082a55fbd9dc5c83a179a228b8a6a0ca) |
+| `step` | required | `number` |
+| `turn` | required | `number` |
-
+
-### `unknown`
+### `{ message, teamId, version }`
-SHA-256: `bbc5696e3f13c758237b316e3cf08cda0b9fd51ffe672539883457769faa185d`
+SHA-256: `0c3f4d2248d9bc9700e2d7253fa71aa9935f5c39af6f11de5727f08cccaf8383`
-`unknown`: the declaration does not expose the stored value's internal fields.
+Sources: [`packages/experimental/agent-team/src/types.ts:225`](../packages/experimental/agent-team/src/types.ts)
-
+| Property | Presence | Type |
+|---|---|---|
+| `message` | required | [`TeamMessageSnapshot`](#persistence-type-sha256-5b694f394d5e11609887a3ccfa82844935d49806c37e336b30be2186d649ab94) |
+| `teamId` | required | `string` |
+| `version` | required | `2` |
-### `"usage"`
+
-SHA-256: `0bdaf9cb63594be4ef034b68901fffe792fe09d6d5f6bac42d7f56f6e7834fb9`
+### `{ messageId, targetId, teamId, version }`
-`"usage"`
+SHA-256: `0bcfaf5566d271028429ac7b562cb59053c9d78b8ae14708c35fac835108d1b1`
-
+Sources: [`packages/experimental/agent-team/src/types.ts:227`](../packages/experimental/agent-team/src/types.ts)
-### `"user"`
+| Property | Presence | Type |
+|---|---|---|
+| `messageId` | required | `string` |
+| `targetId` | required | `string` |
+| `teamId` | required | `string` |
+| `version` | required | `2` |
-SHA-256: `68f44f59e91c41395076cb77265981a601680ec8a381bbbeb6ab754ffdc94573`
+
-`"user"`
+### `{ mode, source? }`
-
+SHA-256: `9890113e97dd3541787bfe6704f2b223d3a890b5325ca0acae2b0398909b413e`
-### `"user/message"`
+Sources: [`packages/sandbox/sandbox-policy/src/session-mode.ts:33`](../packages/sandbox/sandbox-policy/src/session-mode.ts)
-SHA-256: `de25352d2dc4196309bd84b5bac6319f6d5c898ea0e82bb5ae66c5738d0d426f`
+| Property | Presence | Type |
+|---|---|---|
+| `mode` | required | [`SandboxMode`](#persistence-type-sha256-fab2bb09bc5e3b9db0685e8f5500b029af1a2b33e70bc703c1d5d0f596fbc1fd) |
+| `source` | optional | `"delegation"` |
-`"user/message"`
+
-
+### `{ policy, source? }`
-### `"web_search"`
+SHA-256: `11f70b595aa76897fc4e25a352bfa718c659f44b799e5aa14e84e5a38fe72912`
-SHA-256: `935c8d486292b13c87b57ca280eb8c58b5b2f5239be86fcd4334c33fdeb87682`
+Sources: [`packages/interaction/user-approval/src/index.ts:33`](../packages/interaction/user-approval/src/index.ts)
-`"web_search"`
+| Property | Presence | Type |
+|---|---|---|
+| `policy` | required | [`ApprovalPolicy`](#persistence-type-sha256-05d2ae1e0c7f8770f83f9a09047afb39a335d8ac986df3193659aa1e581472cf) |
+| `source` | optional | `"delegation"` |
-
+
-### `"web_search_20250305"`
+### `{ preset }`
-SHA-256: `0116b1f89c05221d56b0ba35c83d302bf4857bc7277d247e9bbaf74b27d2c66e`
+SHA-256: `8a9c990773f798eac10ca8878e6bcc531ee080bc589cac956730e462cc6a09ad`
-`"web_search_20250305"`
+Sources: [`packages/interaction/permission-presets/src/index.ts:57`](../packages/interaction/permission-presets/src/index.ts)
-
+| Property | Presence | Type |
+|---|---|---|
+| `preset` | required | `string` |
-### `"web/deepseek-search-llm-request"`
+
-SHA-256: `6f611bed14b2106542480c4a230b4a83baf76dc0d8ac0cd13319a7cb8dae7675`
+### `{ reason, turn }`
-`"web/deepseek-search-llm-request"`
+SHA-256: `e481c46af3813e0010558e93f578b2986acd658404cec2d1679e3ac2a6c48654`
-
+Sources: [`packages/core/session/src/types.ts:292`](../packages/core/session/src/types.ts)
-### `"webhook"`
+| Property | Presence | Type |
+|---|---|---|
+| `reason` | required | [`TurnEndReason`](#persistence-type-sha256-f1687f982fa3d41ef29e159feed154ecd13af4dd209acaee16038f223f2e9402) |
+| `turn` | required | `number` |
-SHA-256: `db6c5246911d47a7969f6b4cb47c7d0dbbde75c402710b22ace3672fa97bebe0`
+
-`"webhook"`
+### `{ role: "user" }`
-
+SHA-256: `9a2a9029f8d7ede05336980d8342737557f487b913bfd28853d0ab5214600ab5`
-### `"workspace-write"`
+Sources: [`packages/web/web-search-deepseek/src/provider.ts:64`](../packages/web/web-search-deepseek/src/provider.ts)
-SHA-256: `a3edd1efd1fef21b72c55e213c8a8b24196b091abde2b89db52be0b2aaae3cfa`
+| Property | Presence | Type |
+|---|---|---|
+| `content` | required | [`tuple (1 positions)`](#persistence-type-sha256-8f6d609794bf5afc01d7ccf3e03811d32f4b8047f58a2c9a98db0154c2ad7cb9) |
+| `role` | required | `"user"` |
-`"workspace-write"`
+
-
+### `{ sessionFormatVersion?, sessionId, throughSeq }`
-### `"workspace/changes"`
+SHA-256: `8bb8c3751a6ce64b61aba1ec7ae798c00a5803c4d868a0430873216c6569ed52`
-SHA-256: `8e8155594e07812356b67d732196dda894b0f9c91a5969d51612cf490b0a016d`
+Sources: [`packages/session/session-log-deepseek/src/types.ts:81`](../packages/session/session-log-deepseek/src/types.ts)
-`"workspace/changes"`
+| Property | Presence | Type |
+|---|---|---|
+| `sessionFormatVersion` | optional | `number` |
+| `sessionId` | required | `string` |
+| `throughSeq` | required | `number` |
+
+
+
+### `{ shadowedRange, shadowedSeqs, shadowedTokenCount }`
+
+SHA-256: `5dd766ccd1702a1142ad8b4bd44f2242f8e8a6752669ad3de0a5d224329b1438`
+
+Sources: [`packages/compaction/compaction/src/types.ts:82`](../packages/compaction/compaction/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `shadowedRange` | required | [`{ end, start }`](#persistence-type-sha256-9e41386b3a0c9572b0d63078492ebb3997da7d3a830d44e0259418bd02f4bcb2) |
+| `shadowedSeqs` | required | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `shadowedTokenCount` | required | `number` |
+
+
+
+### `{ step, stream, turn }`
+
+SHA-256: `0c6412d3ba5e41adfaa6929c7d4093f2d52d8598c03f35844fc0d55e3070a3b1`
+
+Sources: [`packages/core/session/src/types.ts:342`](../packages/core/session/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `step` | required | `number` |
+| `stream` | required | [`AssistantStreamRecord[]`](#persistence-type-sha256-26f3bb7529cfce1e3a0f1ededa365d8b426758ca0feeb0beabeee805f8bb8346) |
+| `turn` | required | `number` |
+
+
+
+### `{ step, turn }`
+
+SHA-256: `ef11a3b7fa2033ae4279545ff8a8a2ee4e301b9b73e5b91654c48e6d08283545`
+
+Sources: [`packages/core/session/src/types.ts:294`](../packages/core/session/src/types.ts) · [`packages/core/session/src/types.ts:296`](../packages/core/session/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `step` | required | `number` |
+| `turn` | required | `number` |
+
+
+
+### `{ targets }`
+
+SHA-256: `477614bca595a9e7adb5a1870be446b9a8684f3ba8950259d6289f2d3b74f028`
+
+Sources: [`packages/compaction/compaction-image-offload/src/projection.ts:25`](../packages/compaction/compaction-image-offload/src/projection.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `targets` | required | [`ImageOffloadTarget[]`](#persistence-type-sha256-9e2c06d8653585b33d72d5c1a80da79c8a24a88c284409bca15cc0f0ead5ebfb) |
+
+
+
+### `{ task, teamId, version }`
+
+SHA-256: `a40d12070f6f4a124f32fb3cc86e7857554702e32f0eda3080a25c4b9ac9b18c`
+
+Sources: [`packages/experimental/agent-team/src/types.ts:223`](../packages/experimental/agent-team/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `task` | required | [`TeamTaskSnapshot`](#persistence-type-sha256-51edec100659da3a9bd9c3f6ba1180f5e64ec9a1585e5057080df45c180bd357) |
+| `teamId` | required | `string` |
+| `version` | required | `2` |
+
+
+
+### `{ todos }`
+
+SHA-256: `79ddc907312f97cf9553d4841e8b3fc937097bd8d97900a790efad3c05255e99`
+
+Sources: [`packages/todo/tool-todo/src/types.ts:31`](../packages/todo/tool-todo/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `todos` | required | [`TodoItem[]`](#persistence-type-sha256-4b7ddaf3710b88ff9b8df66304f5f97bf03688fd19730eedc2e9535203c820ea) |
+
+
+
+### `{ turn }`
+
+SHA-256: `f90eb4ab2d3897bc20c521a038e3119d581f791ec974b1a0004f63a8ab9e232d`
+
+Sources: [`packages/core/session/src/types.ts:283`](../packages/core/session/src/types.ts) · [`packages/deliverables/workspace-changes/src/types.ts:106`](../packages/deliverables/workspace-changes/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `turn` | required | `number` |
+
+
+
+
+
+### `{ type: "agent-preset/selected" }`
+
+SHA-256: `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ agentPreset }`](#persistence-type-sha256-6e52dd55a1d48954ed5464ec46fe34d9eb65f709baabc9561e7a279910b0c406) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"agent-preset/selected"` |
+
+
+
+
+
+### `{ type: "agent/inbox/spliced" }`
+
+SHA-256: `646c2f1d243d3a78c5bc9305786fb340f5209c48a97e65f2a186cc5195491f3f`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ inserted, outcome?, removedCount?, start, … }`](#persistence-type-sha256-a6a195c1b4a906d953d24ab5864c9f1881d545460e080a51144adfc9cb058cfe) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"agent/inbox/spliced"` |
+
+
+
+
+
+### `{ type: "approval/asked" }`
+
+SHA-256: `3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ callId?, id, reason?, toolName }`](#persistence-type-sha256-45f2a07ea94573123b6ae14db787a40062dec3834f36d8be92c523d40ba28448) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"approval/asked"` |
+
+
+
+
+
+### `{ type: "approval/decided" }`
+
+SHA-256: `bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ id, outcome }`](#persistence-type-sha256-93cbbc5a7fd0b1aa1ff1b9a6bb5ec52b073f48e5a5200365c45c0cd54059e1b9) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"approval/decided"` |
+
+
+
+
+
+### `{ type: "approval/policy" }`
+
+SHA-256: `26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ policy, source? }`](#persistence-type-sha256-11f70b595aa76897fc4e25a352bfa718c659f44b799e5aa14e84e5a38fe72912) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"approval/policy"` |
+
+
+
+
+
+### `{ type: "assistant/attempt" }`
+
+SHA-256: `c80c89da83c46db7a454f034c10f969e03cfb574859c7316e5bff683f5a14b0e`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ step, stream, turn }`](#persistence-type-sha256-0c6412d3ba5e41adfaa6929c7d4093f2d52d8598c03f35844fc0d55e3070a3b1) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"assistant/attempt"` |
+
+
+
+
+
+### `{ type: "assistant/message" }`
+
+SHA-256: `1169b301aaabcd992657b93ec93750c43175dda81ada5cac086f14f2eaaeed6d`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ interrupted?, message, step, stream, … }`](#persistence-type-sha256-77b8491f946edfc8cc77ebae3ba49183759da31ba2dfa83d4c9e9e618c4b91d2) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `surfaceOp` | required | [`SurfaceOp`](#persistence-type-sha256-335e242de1fcc17b6ca920fc420d71bec2d76e53e37955c00948b65ab77f05c5) |
+| `time` | required | `number` |
+| `type` | required | `"assistant/message"` |
+
+
+
+### `{ type: "block-end" }`
+
+SHA-256: `90c811b8c2668898515e69a24e82caffeb08517f9c7aa193867ff0380f3b535d`
+
+Sources: [`packages/llm/llm/src/types.ts:431`](../packages/llm/llm/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `block` | required | [`ContentBlock`](#persistence-type-sha256-c7b24be059d34d08929593049a1a81eaa3855166aacfe9d7603c0bc8bb728d56) |
+| `index` | required | `number` |
+| `type` | required | `"block-end"` |
+
+
+
+### `{ type: "block-start" }`
+
+SHA-256: `647cb2e3aeb58e27d1d4d60011f208bb66dce257e8654193c533b47c4c22c253`
+
+Sources: [`packages/llm/llm/src/types.ts:427`](../packages/llm/llm/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `blockType` | required | [`ContentBlockType`](#persistence-type-sha256-757013fff5879d73d5753d8d1120faab56110e88ac3932485ab7e034d9e9ce61) |
+| `index` | required | `number` |
+| `type` | required | `"block-start"` |
+
+
+
+### `{ type: "chunk" }`
+
+SHA-256: `c93b6f51b399607349b4bcc66b58e848a44250ffc1e2537207bd092dfff94192`
+
+Sources: [`packages/llm/llm/src/assistant-stream.ts:44`](../packages/llm/llm/src/assistant-stream.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `chunk` | required | [`StreamChunk`](#persistence-type-sha256-071d92b9dac661fcc826c678cf64d188f26fb93aab79c627b11a03acdd34dfca) |
+| `time` | required | `number` |
+| `type` | required | `"chunk"` |
+
+
+
+
+
+### `{ type: "command/done" }`
+
+SHA-256: `15196447222782e773eb943c92b18316ce96b9af0f0cfddb6e57ba8274ecc5ff`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ commandId, kind, sourceEventSeq?, text? }`](#persistence-type-sha256-5b6fb1f226ff56402db08a6aae82af76100b14056271875f69ec526a1ae05d51) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"command/done"` |
+
+
+
+
+
+### `{ type: "command/run" }`
+
+SHA-256: `37184378c6439257d105c4e2022d80fc9c3a3f7c7f6ac661b00bc9f18d871006`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ args?, commandId, name, source }`](#persistence-type-sha256-a853902cfab417b8f08aa51ad6855fea46f34ed4588a74e47403035111d0fb86) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"command/run"` |
+
+
+
+
+
+### `{ type: "compaction/end" }`
+
+SHA-256: `b0127044ab31a702bddfd785d345f5abd7a70876746e895ce443afa3e60ddf2d`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ compactionId, error?, sourceCommandId?, turn }`](#persistence-type-sha256-ca59530d1a4f3e191b4032bc4a20eded0d827db8b5a7efb27b3af9e9b456c6f2) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"compaction/end"` |
+
+
+
+
+
+### `{ type: "compaction/prune" }`
+
+SHA-256: `7f7fd5a6b0064f597534b29ff62ef26e786dffccf5e14f654a7d4fcea2c35f04`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ shadowedRange, shadowedSeqs, shadowedTokenCount }`](#persistence-type-sha256-5dd766ccd1702a1142ad8b4bd44f2242f8e8a6752669ad3de0a5d224329b1438) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"compaction/prune"` |
+
+
+
+
+
+### `{ type: "compaction/start" }`
+
+SHA-256: `db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ compactionId, sourceCommandId?, turn }`](#persistence-type-sha256-3e4e7683b0192c9f0e6a75c59076108f017892cdb302a98032c2632fd79c356f) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"compaction/start"` |
+
+
+
+
+
+### `{ type: "compaction/summary" }`
+
+SHA-256: `f6f3f30109e9008fccf7da2a3268a63da8646b59dd7cf7b75bcd9cf08ac08a59`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`union (2 variants)`](#persistence-type-sha256-feb329074f0206ecc06d8a1aa0a0b3e2f47fd27524ba020fbc849ba63e938896) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"compaction/summary"` |
+
+
+
+
+
+### `{ type: "deliverables/presented" }`
+
+SHA-256: `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ callId, files, turn }`](#persistence-type-sha256-1528539c63db8b23506f0209a99ce77d8ad138adfbfcee3d4769b7382d93756c) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"deliverables/presented"` |
+
+
+
+
+
+### `{ type: "feedback/message-delete" }`
+
+SHA-256: `3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`MessageFeedbackDelete`](#persistence-type-sha256-7c6129b6961cf4b2a030f36c78d2b0a5be38617651a9b81322e054ee512bee06) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"feedback/message-delete"` |
+
+
+
+
+
+### `{ type: "feedback/message-put" }`
+
+SHA-256: `b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`MessageFeedbackPut`](#persistence-type-sha256-aa7bc2817014ca6c45719b1c193c5c131be718a0921f34345098ff250f444626) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"feedback/message-put"` |
+
+
+
+
+
+### `{ type: "feedback/record" }`
+
+SHA-256: `b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`FeedbackRecord`](#persistence-type-sha256-7d54a5a5e629e2e7783bfac72683bcc5e969e9f43426b9289826aaf294ff6344) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"feedback/record"` |
+
+
+
+### `{ type: "finish" }`
+
+SHA-256: `a2b49331716ba0a7078b026d145306a70eae64b7313c3e6204bd931e75ec3bb1`
+
+Sources: [`packages/llm/llm/src/types.ts:433`](../packages/llm/llm/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `reason` | required | [`FinishReason`](#persistence-type-sha256-5808e36c95355f0e745201b5db1b6bcec4ebf5adb75d3e82d7d59cc89635ab80) |
+| `replayState` | optional | [`ReplayEnvelope`](#persistence-type-sha256-0acd94fe8794574c9ae72c7855ee16d29c546096d4af760d16d1225385764555) |
+| `type` | required | `"finish"` |
+
+
+
+
+
+### `{ type: "goal/change" }`
+
+SHA-256: `763c8a20af487263a0080548274f7437ef4a86e0ba8769127d1ced10a72c664d`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`GoalChangeMeta`](#persistence-type-sha256-7d226b9fd95b4ba213d4237c22e930a91c3c769c95ca7f92977b9d625ba13438) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"goal/change"` |
+
+
+
+
+
+### `{ type: "hook/invoked" }`
+
+SHA-256: `8a6e1ec9e8db346b0e02f027db73c07a94f067a26d40c1aef1abd09c47ce7ba0`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ dialect, handlerId, matcher?, point, … }`](#persistence-type-sha256-119abe2b9c0b2f46ecb31d82b9acba4d4b30e049f655e2475e8b4ae12d5a9e25) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"hook/invoked"` |
+
+
+
+
+
+### `{ type: "hook/result" }`
+
+SHA-256: `e75916628f3f10c2d50658bd143052a46285fbf1a9a700ba54947614603d26b4`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ decision, durationMs, exitCode?, handlerId, … }`](#persistence-type-sha256-8ad45ad053b4d89f8865c17cc9ff3b8748e86045f3f0fb816269a34af2619141) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"hook/result"` |
+
+
+
+
+
+### `{ type: "image/offload" }`
+
+SHA-256: `b222069eea2d768065161c1147b1f2c78c1b54328c84b3586ae5c8f91b8ed35e`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ targets }`](#persistence-type-sha256-477614bca595a9e7adb5a1870be446b9a8684f3ba8950259d6289f2d3b74f028) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"image/offload"` |
+
+
+
+
+
+### `{ type: "llm/retry" }`
+
+SHA-256: `525254db03b1d1e6b74cf55aced52817568331ac1f96c0818728910b6692e336`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`LlmRetryEventData`](#persistence-type-sha256-c170da8ab7c37635b10867b2571811d9e317ac3ec394e8ff8efe53f902fc41c1) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"llm/retry"` |
+
+
+
+
+
+### `{ type: "llm/retry-started" }`
+
+SHA-256: `48e5c9861f16ac07e78cb7b5ae9dabdf7bb85c58baed5a51b4ad275050ea58e3`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`LlmRetryStartedEventData`](#persistence-type-sha256-6f72ece8f317cd080c4f20a93f1bf709965f5b81ac4669528f5a023191cfcf20) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"llm/retry-started"` |
+
+
+
+
+
+### `{ type: "model/selection" }`
+
+SHA-256: `35203ba7ad5ef6f97d556b85df20ae98f04f09c65748cecdf8eefdb8b6405ffc`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`ModelSelection`](#persistence-type-sha256-f09e5e7acf5ff5ccd193ff2eeec015fa2ff7c29d98bc465f8c3302058d47e29b) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"model/selection"` |
+
+
+
+
+
+### `{ type: "permission/preset" }`
+
+SHA-256: `5c45bf4c544a7211dcd8ba6ba7e5f1bc39b49e7a9df9d5cbdc8e87c22771b37b`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ preset }`](#persistence-type-sha256-8a9c990773f798eac10ca8878e6bcc531ee080bc589cac956730e462cc6a09ad) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"permission/preset"` |
+
+
+
+
+
+### `{ type: "plan/mode" }`
+
+SHA-256: `a7cf43ce7c2a4c038feed1885cd7a00d5c6ee2d90a7e0d56b46f78a3e1ca327f`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ active }`](#persistence-type-sha256-20a57544bbf204dacd1ae6beb2ab29444365c3c869f2afdf489dcdcbc3d9c8c5) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"plan/mode"` |
+
+
+
+### `{ type: "reasoning-chunks" }`
+
+SHA-256: `71bb3254ec8f1e491ce63b762a7b5f18709de23aa4e8abcc8b886f4b6ce051dd`
+
+Sources: [`packages/llm/llm/src/assistant-stream.ts:28`](../packages/llm/llm/src/assistant-stream.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `dt` | required | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `index` | required | `number` |
+| `texts` | required | [`string[]`](#persistence-type-sha256-93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2) |
+| `time0` | required | `number` |
+| `type` | required | `"reasoning-chunks"` |
+
+
+
+### `{ type: "reasoning-delta" }`
+
+SHA-256: `2abb711460e6238d851c30f3e4bdd87a2aa1887ee70575b3d3b7b25610673095`
+
+Sources: [`packages/llm/llm/src/types.ts:429`](../packages/llm/llm/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `index` | required | `number` |
+| `text` | required | `string` |
+| `type` | required | `"reasoning-delta"` |
+
+
+
+
+
+### `{ type: "request/context" }`
+
+SHA-256: `37cbc9cf06d494cfe5c67f078af1605eacb8e4c2c853e9e26455b73de0ee7ccf`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`RequestContext`](#persistence-type-sha256-b158f3ff6923714807c0d73882f0b05dc87f8fa85c9e90814852d48bbc866081) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"request/context"` |
+
+
+
+
+
+### `{ type: "request/header" }`
+
+SHA-256: `8ea13bcd983eab596dbfd41c5c2b62a0b318b71cd2a987a6fd752c6ced7e4489`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ header, reason, startsSeries? }`](#persistence-type-sha256-2f0aefb72ab453c4bf21a6687f436775d359dc6f8f10410fd4c0615b20bd9d76) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"request/header"` |
+
+
+
+
+
+### `{ type: "sandbox/mode" }`
+
+SHA-256: `516da4cdd6d2f1e5ce488e648578ca51f40e458f707b803e5b24de870e799415`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ mode, source? }`](#persistence-type-sha256-9890113e97dd3541787bfe6704f2b223d3a890b5325ca0acae2b0398909b413e) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"sandbox/mode"` |
+
+
+
+
+
+### `{ type: "schedule/change" }`
+
+SHA-256: `2a7f86849ae54b3398ee49661a757c4fcb59a6192b7036ee2ff514617e13fb42`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`ScheduleChange`](#persistence-type-sha256-e1d0e52dcd1855ffb803efc18f8f7b776c48d1c25757e8a75c0281fa298c02e1) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"schedule/change"` |
+
+
+
+
+
+### `{ type: "session-log-deepseek/delivery-accepted" }`
+
+SHA-256: `d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ sessionFormatVersion?, sessionId, throughSeq }`](#persistence-type-sha256-8bb8c3751a6ce64b61aba1ec7ae798c00a5803c4d868a0430873216c6569ed52) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"session-log-deepseek/delivery-accepted"` |
+
+
+
+
+
+### `{ type: "session/end-seed" }`
+
+SHA-256: `5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ inherited? }`](#persistence-type-sha256-17d1afb770d9941936130996da00dc86782cfef731d8d6526162c301256a4ac3) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"session/end-seed"` |
+
+
+
+
+
+### `{ type: "session/title" }`
+
+SHA-256: `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`SessionTitleEventData`](#persistence-type-sha256-b56f6a885da3dc394c69a3e3cc5c0cfc4da15601b63fda4989eee8f40efc5be4) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"session/title"` |
+
+
+
+
+
+### `{ type: "session/title-llm-request" }`
+
+SHA-256: `e0b5bf44c27bbfc6ab144239e3e4169c4d21146645e0e3121bbb359c3bc8591d`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`SessionTitleLlmRequestEventData`](#persistence-type-sha256-9fe0e77a7816b7fdb4b953ec0e2f0cd7bbd22c5de5c3567e612d1b20eb0992e6) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"session/title-llm-request"` |
+
+
+
+
+
+### `{ type: "step/end" }`
+
+SHA-256: `e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ step, turn }`](#persistence-type-sha256-ef11a3b7fa2033ae4279545ff8a8a2ee4e301b9b73e5b91654c48e6d08283545) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"step/end"` |
+
+
+
+
+
+### `{ type: "step/start" }`
+
+SHA-256: `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ step, turn }`](#persistence-type-sha256-ef11a3b7fa2033ae4279545ff8a8a2ee4e301b9b73e5b91654c48e6d08283545) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"step/start"` |
+
+
+
+
+
+### `{ type: "subagent/catalog" }`
+
+SHA-256: `ae1f7110feeec697b8cab42b68f7709aa7b3279764099dfb53c25890d2e5c871`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`SubagentCatalogEvent`](#persistence-type-sha256-3ac1196f59d5e9e0e9345122c8c403b102478b526404a2e591a38f613483321e) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"subagent/catalog"` |
+
+
+
+
+
+### `{ type: "subagent/descriptor" }`
+
+SHA-256: `b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`SubagentDescriptorData`](#persistence-type-sha256-86d1d0e9cfebb240421187e3dc37fb71cc38a1501885cf32f8f9adef7b0a2bde) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"subagent/descriptor"` |
+
+
+
+
+
+### `{ type: "subagent/model-selection-policy" }`
+
+SHA-256: `a6567ccb2e530606b775371eb4fa31468d72084339968e8b0440a516a23b39dc`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ allowedModels }`](#persistence-type-sha256-0d47a8f3d847243c4488e755ad4cab7a04ac5d4621b9c81865524cf3f4d8536f) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"subagent/model-selection-policy"` |
+
+
+
+
+
+### `{ type: "system/message" }`
+
+SHA-256: `69becfb6b2d3fd5da91518089454cae8ef33f1835637ec44dde35dd077fd4bae`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ message, step, turn }`](#persistence-type-sha256-2074f40221b76c75fd314246db558965dc3477dfb440bcc952b1eedc9778e366) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `sourceEventSeqs` | optional | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `surfaceOp` | required | [`SurfaceOp`](#persistence-type-sha256-335e242de1fcc17b6ca920fc420d71bec2d76e53e37955c00948b65ab77f05c5) |
+| `time` | required | `number` |
+| `type` | required | `"system/message"` |
+
+
+
+
+
+### `{ type: "team/member" }`
+
+SHA-256: `4fb59762612c3e3ac3a3bd4f84c9c148d3c3893bd422ba2b201cc039fabd49bc`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ member, teamId, version }`](#persistence-type-sha256-b1ebd5cda47d90d980bb05bffc3f970c51537b9aff15b3bc3d639811727741b1) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"team/member"` |
+
+
+
+
+
+### `{ type: "team/message/delivered" }`
+
+SHA-256: `48f9c19417a1abbedfa59f4667bba36b93ac2db407adf5e84cb3ba0de30942cb`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ messageId, targetId, teamId, version }`](#persistence-type-sha256-0bcfaf5566d271028429ac7b562cb59053c9d78b8ae14708c35fac835108d1b1) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"team/message/delivered"` |
+
+
+
+
+
+### `{ type: "team/message/queued" }`
+
+SHA-256: `443371ec07a03a82a0e93d93abca3e70b03bca55ba5b01d507030fcb66e8fbb4`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ message, teamId, version }`](#persistence-type-sha256-0c3f4d2248d9bc9700e2d7253fa71aa9935f5c39af6f11de5727f08cccaf8383) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"team/message/queued"` |
+
+
+
+
+
+### `{ type: "team/task" }`
+
+SHA-256: `d595ec73b32b016a6055333c67a5d646032b22e672da1d4a09c5b1ae398a093a`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ task, teamId, version }`](#persistence-type-sha256-a40d12070f6f4a124f32fb3cc86e7857554702e32f0eda3080a25c4b9ac9b18c) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"team/task"` |
+
+
+
+### `{ type: "text-chunks" }`
+
+SHA-256: `e72269f931559e901e5e8fe1cfcbd0669fb795f43cc038ff39fba62f60403c33`
+
+Sources: [`packages/llm/llm/src/assistant-stream.ts:21`](../packages/llm/llm/src/assistant-stream.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `dt` | required | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `index` | required | `number` |
+| `texts` | required | [`string[]`](#persistence-type-sha256-93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2) |
+| `time0` | required | `number` |
+| `type` | required | `"text-chunks"` |
+
+
+
+### `{ type: "text-delta" }`
+
+SHA-256: `95080295115fbd83544520ba247b68a03790131f6a2eac323d388758cb542f65`
+
+Sources: [`packages/llm/llm/src/types.ts:428`](../packages/llm/llm/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `index` | required | `number` |
+| `text` | required | `string` |
+| `type` | required | `"text-delta"` |
+
+
+
+
+
+### `{ type: "todo/write" }`
+
+SHA-256: `b978cff734e62143eb56c9125423ec275405eda969802d42aaf73ecb987d3b26`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ todos }`](#persistence-type-sha256-79ddc907312f97cf9553d4841e8b3fc937097bd8d97900a790efad3c05255e99) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"todo/write"` |
+
+
+
+### `{ type: "tool-call-chunks" }`
+
+SHA-256: `3860b4757d512a2869be833acb0faf834335b1b056bf3f83df5474dce95f8fa6`
+
+Sources: [`packages/llm/llm/src/assistant-stream.ts:35`](../packages/llm/llm/src/assistant-stream.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `args` | required | [`string[]`](#persistence-type-sha256-93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2) |
+| `dt` | required | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `id` | required | `string` |
+| `index` | required | `number` |
+| `name` | optional | `string` |
+| `time0` | required | `number` |
+| `type` | required | `"tool-call-chunks"` |
+
+
+
+### `{ type: "tool-call-delta" }`
+
+SHA-256: `88a610b831be6d92612a464be5c7d0b88ec24d97bd299837bf74bf7672183c9a`
+
+Sources: [`packages/llm/llm/src/types.ts:430`](../packages/llm/llm/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `argumentsDelta` | required | `string` |
+| `id` | required | `string` |
+| `index` | required | `number` |
+| `name` | optional | `string` |
+| `type` | required | `"tool-call-delta"` |
+
+
+
+
+
+### `{ type: "tool-workflow/agent-end" }`
+
+SHA-256: `babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`ToolWorkflowAgentEndData`](#persistence-type-sha256-c0ea97bc89dfc46fa94eab956f5c3ee6af2f964aa7db6327cb18b451f207bef7) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"tool-workflow/agent-end"` |
+
+
+
+
+
+### `{ type: "tool-workflow/agent-start" }`
+
+SHA-256: `5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`ToolWorkflowAgentStartData`](#persistence-type-sha256-9a410ddf56792b2b7cd4a224a2e54dc4dee30a8e8e6b1c2b9a1d19992b217adc) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"tool-workflow/agent-start"` |
+
+
+
+
+
+### `{ type: "tool-workflow/run-end" }`
+
+SHA-256: `42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`ToolWorkflowRunEndData`](#persistence-type-sha256-7f9365bae9fcb73e1e34061a1acfe0422c1a5fd351848cace9bebbe806f28462) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"tool-workflow/run-end"` |
+
+
+
+
+
+### `{ type: "tool-workflow/run-start" }`
+
+SHA-256: `c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`ToolWorkflowRunStartData`](#persistence-type-sha256-a6da9ad5d42ae83a6833a8288b076688e8e0801633ea36cbdd8a30a6d9f3160c) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"tool-workflow/run-start"` |
+
+
+
+
+
+### `{ type: "tool/call" }`
+
+SHA-256: `3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ arguments, callId, name, step, … }`](#persistence-type-sha256-e4c18e294232c3ba6c9f1999f168263cc55956147cfe4121720899be8e52edd1) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"tool/call"` |
+
+
+
+
+
+### `{ type: "tool/ptc-dispatch" }`
+
+SHA-256: `b33142af8176323ffbb20762541be81c1d51b60a60887803836e0b146e5bef0c`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`PtcDispatchEventData`](#persistence-type-sha256-8d2e5a3c4230e6ea6c0b5151f02241d0db02cd2551f2df1b6b9700cddcc0dca3) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"tool/ptc-dispatch"` |
+
+
+
+
+
+### `{ type: "tool/ptc-dispatch-start" }`
+
+SHA-256: `ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`PtcDispatchStartEventData`](#persistence-type-sha256-2fe5026daf14bd4ff2b7bfb7cf9791c302d9cbba06802178b6dfec00b892698f) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"tool/ptc-dispatch-start"` |
+
+
+
+
+
+### `{ type: "tool/result" }`
+
+SHA-256: `29af48b840d0cd9e48b6f50bf3b354f8f6340607c5b99220a48e74f60beac9e2`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ error?, message, meta?, step, … }`](#persistence-type-sha256-356aad27134a0e31af67c994ff8b9e4b91acfb6c4917b3bc1f7a62bbf82794d5) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `sourceEventSeqs` | optional | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `surfaceOp` | required | [`SurfaceOp`](#persistence-type-sha256-335e242de1fcc17b6ca920fc420d71bec2d76e53e37955c00948b65ab77f05c5) |
+| `time` | required | `number` |
+| `type` | required | `"tool/result"` |
+
+
+
+
+
+### `{ type: "turn/end" }`
+
+SHA-256: `0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ reason, turn }`](#persistence-type-sha256-e481c46af3813e0010558e93f578b2986acd658404cec2d1679e3ac2a6c48654) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"turn/end"` |
+
+
+
+
+
+### `{ type: "turn/start" }`
+
+SHA-256: `aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ turn }`](#persistence-type-sha256-f90eb4ab2d3897bc20c521a038e3119d581f791ec974b1a0004f63a8ab9e232d) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"turn/start"` |
+
+
+
+### `{ type: "usage" }`
+
+SHA-256: `f1a96afe7503ac1817de769cd0ba13d9b80111c7034c50106b3344ecc14cc515`
+
+Sources: [`packages/llm/llm/src/types.ts:432`](../packages/llm/llm/src/types.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `type` | required | `"usage"` |
+| `usage` | required | [`TokenUsage`](#persistence-type-sha256-fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394) |
+
+
+
+
+
+### `{ type: "user/message" }`
+
+SHA-256: `314765bdff29c7862fb6ce820f1773563ba3094a680d163ea21180a2591b8578`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`UserMessage`](#persistence-type-sha256-4de5e7644130ed715ef6b5a4d86a87b30dca4096d1a6683c66acf6f7809379c7) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `sourceEventSeqs` | optional | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `surfaceOp` | required | [`SurfaceOp`](#persistence-type-sha256-335e242de1fcc17b6ca920fc420d71bec2d76e53e37955c00948b65ab77f05c5) |
+| `time` | required | `number` |
+| `type` | required | `"user/message"` |
+
+
+
+
+
+### `{ type: "web/deepseek-search-llm-request" }`
+
+SHA-256: `cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`DeepSeekSearchLlmRequest`](#persistence-type-sha256-2517ba143a271508d3ca35126d5aca8f7f1facf5aaddce4adf011832042fa2b9) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"web/deepseek-search-llm-request"` |
+
+
+
+### `{ type: "web_search_20250305" }`
+
+SHA-256: `2d11ca7b0d4493e244b74eba093227866b33249841e59a1e9bf56afed38604c3`
+
+Sources: [`packages/web/web-search-deepseek/src/provider.ts:71`](../packages/web/web-search-deepseek/src/provider.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| `max_uses` | required | `number` |
+| `name` | required | `"web_search"` |
+| `type` | required | `"web_search_20250305"` |
+
+
+
+
+
+### `{ type: "workspace/changes" }`
+
+SHA-256: `e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72`
+
+| Property | Presence | Type |
+|---|---|---|
+| `data` | required | [`{ turn }`](#persistence-type-sha256-f90eb4ab2d3897bc20c521a038e3119d581f791ec974b1a0004f63a8ab9e232d) |
+| `ignorable` | optional | `true` |
+| `seq` | required | `number` |
+| `time` | required | `number` |
+| `type` | required | `"workspace/changes"` |
+
+
+
+### `{}`
+
+SHA-256: `0aa62ab51b36c0e64b134bd03ba8725d758744180a1a447da49beaad194f219f`
+
+| Property | Presence | Type |
+|---|---|---|
+| [`string`] | index signature | `unknown` (opaque) |
+
+
+
+### `{}`
+
+SHA-256: `529e0ccd0e34079ab4ff21ed87f810cee0388246263bf22e8aba5986b56fae05`
+
+Sources: [`packages/util/values/src/index.ts:4`](../packages/util/values/src/index.ts)
+
+| Property | Presence | Type |
+|---|---|---|
+| [`string`] | index signature | [`JsonValue`](#persistence-type-sha256-c592ce75aab73fcab19c1d7845684c72cf402b78d2e1f2833a58ecf9f3598ed6) |
diff --git a/docs/persistence-catalog.zh.md b/docs/persistence-catalog.zh.md
index 04952406fe..aa6cc3fe44 100644
--- a/docs/persistence-catalog.zh.md
+++ b/docs/persistence-catalog.zh.md
@@ -19,67 +19,67 @@
| 根类型 | 类别 | SHA-256 | 已解析类型 |
|---|---|---|---|
-| `SessionHeader` | header | `1a3440e3577382704d42a6263aa463504eb74c566734a55e9503a63efcd02445` | [`packages/core/session/src/types.ts#SessionHeader`](#persistence-type-packagescoresessionsrctypestssessionheader) |
-| `JsonlHeaderLine` | header | `18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f` | [`packages/session/session-persistence-jsonl/src/format.ts#HeaderLine`](#persistence-type-packagessessionsession-persistence-jsonlsrcformattsheaderline) |
-| `SessionEventEnvelope` | envelope | `5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc` | [`SessionEventEnvelope`](#persistence-type-sessioneventenvelope) |
-| `event:agent-preset/selected` | event | `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b` | [`event:agent-preset/selected`](#persistence-type-eventagent-presetselected) |
-| `event:agent/inbox/spliced` | event | `646c2f1d243d3a78c5bc9305786fb340f5209c48a97e65f2a186cc5195491f3f` | [`event:agent/inbox/spliced`](#persistence-type-eventagentinboxspliced) |
-| `event:approval/asked` | event | `3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1` | [`event:approval/asked`](#persistence-type-eventapprovalasked) |
-| `event:approval/decided` | event | `bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3` | [`event:approval/decided`](#persistence-type-eventapprovaldecided) |
-| `event:approval/policy` | event | `26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78` | [`event:approval/policy`](#persistence-type-eventapprovalpolicy) |
-| `event:assistant/attempt` | event | `c80c89da83c46db7a454f034c10f969e03cfb574859c7316e5bff683f5a14b0e` | [`event:assistant/attempt`](#persistence-type-eventassistantattempt) |
-| `event:assistant/message` | event | `1169b301aaabcd992657b93ec93750c43175dda81ada5cac086f14f2eaaeed6d` | [`event:assistant/message`](#persistence-type-eventassistantmessage) |
-| `event:command/done` | event | `15196447222782e773eb943c92b18316ce96b9af0f0cfddb6e57ba8274ecc5ff` | [`event:command/done`](#persistence-type-eventcommanddone) |
-| `event:command/run` | event | `37184378c6439257d105c4e2022d80fc9c3a3f7c7f6ac661b00bc9f18d871006` | [`event:command/run`](#persistence-type-eventcommandrun) |
-| `event:compaction/end` | event | `b0127044ab31a702bddfd785d345f5abd7a70876746e895ce443afa3e60ddf2d` | [`event:compaction/end`](#persistence-type-eventcompactionend) |
-| `event:compaction/prune` | event | `7f7fd5a6b0064f597534b29ff62ef26e786dffccf5e14f654a7d4fcea2c35f04` | [`event:compaction/prune`](#persistence-type-eventcompactionprune) |
-| `event:compaction/start` | event | `db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965` | [`event:compaction/start`](#persistence-type-eventcompactionstart) |
-| `event:compaction/summary` | event | `f6f3f30109e9008fccf7da2a3268a63da8646b59dd7cf7b75bcd9cf08ac08a59` | [`event:compaction/summary`](#persistence-type-eventcompactionsummary) |
-| `event:deliverables/presented` | event | `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176` | [`event:deliverables/presented`](#persistence-type-eventdeliverablespresented) |
-| `event:feedback/message-delete` | event | `3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796` | [`event:feedback/message-delete`](#persistence-type-eventfeedbackmessage-delete) |
-| `event:feedback/message-put` | event | `b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf` | [`event:feedback/message-put`](#persistence-type-eventfeedbackmessage-put) |
-| `event:feedback/record` | event | `b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8` | [`event:feedback/record`](#persistence-type-eventfeedbackrecord) |
-| `event:goal/change` | event | `763c8a20af487263a0080548274f7437ef4a86e0ba8769127d1ced10a72c664d` | [`event:goal/change`](#persistence-type-eventgoalchange) |
-| `event:hook/invoked` | event | `8a6e1ec9e8db346b0e02f027db73c07a94f067a26d40c1aef1abd09c47ce7ba0` | [`event:hook/invoked`](#persistence-type-eventhookinvoked) |
-| `event:hook/result` | event | `e75916628f3f10c2d50658bd143052a46285fbf1a9a700ba54947614603d26b4` | [`event:hook/result`](#persistence-type-eventhookresult) |
-| `event:image/offload` | event | `b222069eea2d768065161c1147b1f2c78c1b54328c84b3586ae5c8f91b8ed35e` | [`event:image/offload`](#persistence-type-eventimageoffload) |
-| `event:llm/retry` | event | `525254db03b1d1e6b74cf55aced52817568331ac1f96c0818728910b6692e336` | [`event:llm/retry`](#persistence-type-eventllmretry) |
-| `event:llm/retry-started` | event | `48e5c9861f16ac07e78cb7b5ae9dabdf7bb85c58baed5a51b4ad275050ea58e3` | [`event:llm/retry-started`](#persistence-type-eventllmretry-started) |
-| `event:model/selection` | event | `35203ba7ad5ef6f97d556b85df20ae98f04f09c65748cecdf8eefdb8b6405ffc` | [`event:model/selection`](#persistence-type-eventmodelselection) |
-| `event:permission/preset` | event | `5c45bf4c544a7211dcd8ba6ba7e5f1bc39b49e7a9df9d5cbdc8e87c22771b37b` | [`event:permission/preset`](#persistence-type-eventpermissionpreset) |
-| `event:plan/mode` | event | `a7cf43ce7c2a4c038feed1885cd7a00d5c6ee2d90a7e0d56b46f78a3e1ca327f` | [`event:plan/mode`](#persistence-type-eventplanmode) |
-| `event:request/context` | event | `37cbc9cf06d494cfe5c67f078af1605eacb8e4c2c853e9e26455b73de0ee7ccf` | [`event:request/context`](#persistence-type-eventrequestcontext) |
-| `event:request/header` | event | `8ea13bcd983eab596dbfd41c5c2b62a0b318b71cd2a987a6fd752c6ced7e4489` | [`event:request/header`](#persistence-type-eventrequestheader) |
-| `event:sandbox/mode` | event | `516da4cdd6d2f1e5ce488e648578ca51f40e458f707b803e5b24de870e799415` | [`event:sandbox/mode`](#persistence-type-eventsandboxmode) |
-| `event:schedule/change` | event | `2a7f86849ae54b3398ee49661a757c4fcb59a6192b7036ee2ff514617e13fb42` | [`event:schedule/change`](#persistence-type-eventschedulechange) |
-| `event:session-log-deepseek/delivery-accepted` | event | `d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9` | [`event:session-log-deepseek/delivery-accepted`](#persistence-type-eventsession-log-deepseekdelivery-accepted) |
-| `event:session/end-seed` | event | `5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e` | [`event:session/end-seed`](#persistence-type-eventsessionend-seed) |
-| `event:session/title` | event | `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5` | [`event:session/title`](#persistence-type-eventsessiontitle) |
-| `event:session/title-llm-request` | event | `e0b5bf44c27bbfc6ab144239e3e4169c4d21146645e0e3121bbb359c3bc8591d` | [`event:session/title-llm-request`](#persistence-type-eventsessiontitle-llm-request) |
-| `event:step/end` | event | `e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05` | [`event:step/end`](#persistence-type-eventstepend) |
-| `event:step/start` | event | `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986` | [`event:step/start`](#persistence-type-eventstepstart) |
-| `event:subagent/catalog` | event | `ae1f7110feeec697b8cab42b68f7709aa7b3279764099dfb53c25890d2e5c871` | [`event:subagent/catalog`](#persistence-type-eventsubagentcatalog) |
-| `event:subagent/descriptor` | event | `b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5` | [`event:subagent/descriptor`](#persistence-type-eventsubagentdescriptor) |
-| `event:subagent/model-selection-policy` | event | `a6567ccb2e530606b775371eb4fa31468d72084339968e8b0440a516a23b39dc` | [`event:subagent/model-selection-policy`](#persistence-type-eventsubagentmodel-selection-policy) |
-| `event:system/message` | event | `69becfb6b2d3fd5da91518089454cae8ef33f1835637ec44dde35dd077fd4bae` | [`event:system/message`](#persistence-type-eventsystemmessage) |
-| `event:team/member` | event | `4fb59762612c3e3ac3a3bd4f84c9c148d3c3893bd422ba2b201cc039fabd49bc` | [`event:team/member`](#persistence-type-eventteammember) |
-| `event:team/message/delivered` | event | `48f9c19417a1abbedfa59f4667bba36b93ac2db407adf5e84cb3ba0de30942cb` | [`event:team/message/delivered`](#persistence-type-eventteammessagedelivered) |
-| `event:team/message/queued` | event | `443371ec07a03a82a0e93d93abca3e70b03bca55ba5b01d507030fcb66e8fbb4` | [`event:team/message/queued`](#persistence-type-eventteammessagequeued) |
-| `event:team/task` | event | `d595ec73b32b016a6055333c67a5d646032b22e672da1d4a09c5b1ae398a093a` | [`event:team/task`](#persistence-type-eventteamtask) |
-| `event:todo/write` | event | `b978cff734e62143eb56c9125423ec275405eda969802d42aaf73ecb987d3b26` | [`event:todo/write`](#persistence-type-eventtodowrite) |
-| `event:tool-workflow/agent-end` | event | `babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7` | [`event:tool-workflow/agent-end`](#persistence-type-eventtool-workflowagent-end) |
-| `event:tool-workflow/agent-start` | event | `5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627` | [`event:tool-workflow/agent-start`](#persistence-type-eventtool-workflowagent-start) |
-| `event:tool-workflow/run-end` | event | `42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f` | [`event:tool-workflow/run-end`](#persistence-type-eventtool-workflowrun-end) |
-| `event:tool-workflow/run-start` | event | `c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058` | [`event:tool-workflow/run-start`](#persistence-type-eventtool-workflowrun-start) |
-| `event:tool/call` | event | `3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48` | [`event:tool/call`](#persistence-type-eventtoolcall) |
-| `event:tool/ptc-dispatch` | event | `b33142af8176323ffbb20762541be81c1d51b60a60887803836e0b146e5bef0c` | [`event:tool/ptc-dispatch`](#persistence-type-eventtoolptc-dispatch) |
-| `event:tool/ptc-dispatch-start` | event | `ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93` | [`event:tool/ptc-dispatch-start`](#persistence-type-eventtoolptc-dispatch-start) |
-| `event:tool/result` | event | `29af48b840d0cd9e48b6f50bf3b354f8f6340607c5b99220a48e74f60beac9e2` | [`event:tool/result`](#persistence-type-eventtoolresult) |
-| `event:turn/end` | event | `0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce` | [`event:turn/end`](#persistence-type-eventturnend) |
-| `event:turn/start` | event | `aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8` | [`event:turn/start`](#persistence-type-eventturnstart) |
-| `event:user/message` | event | `314765bdff29c7862fb6ce820f1773563ba3094a680d163ea21180a2591b8578` | [`event:user/message`](#persistence-type-eventusermessage) |
-| `event:web/deepseek-search-llm-request` | event | `cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331` | [`event:web/deepseek-search-llm-request`](#persistence-type-eventwebdeepseek-search-llm-request) |
-| `event:workspace/changes` | event | `e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72` | [`event:workspace/changes`](#persistence-type-eventworkspacechanges) |
+| `SessionHeader` | header | `1a3440e3577382704d42a6263aa463504eb74c566734a55e9503a63efcd02445` | [`SessionHeader`](#persistence-type-sha256-1a3440e3577382704d42a6263aa463504eb74c566734a55e9503a63efcd02445) |
+| `JsonlHeaderLine` | header | `18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f` | [`HeaderLine`](#persistence-type-sha256-18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f) |
+| `SessionEventEnvelope` | envelope | `5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc` | [`union (3 variants)`](#persistence-type-sha256-5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc) |
+| `event:agent-preset/selected` | event | `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b` | [`{ type: "agent-preset/selected" }`](#persistence-type-sha256-a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b) |
+| `event:agent/inbox/spliced` | event | `646c2f1d243d3a78c5bc9305786fb340f5209c48a97e65f2a186cc5195491f3f` | [`{ type: "agent/inbox/spliced" }`](#persistence-type-sha256-646c2f1d243d3a78c5bc9305786fb340f5209c48a97e65f2a186cc5195491f3f) |
+| `event:approval/asked` | event | `3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1` | [`{ type: "approval/asked" }`](#persistence-type-sha256-3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1) |
+| `event:approval/decided` | event | `bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3` | [`{ type: "approval/decided" }`](#persistence-type-sha256-bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3) |
+| `event:approval/policy` | event | `26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78` | [`{ type: "approval/policy" }`](#persistence-type-sha256-26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78) |
+| `event:assistant/attempt` | event | `c80c89da83c46db7a454f034c10f969e03cfb574859c7316e5bff683f5a14b0e` | [`{ type: "assistant/attempt" }`](#persistence-type-sha256-c80c89da83c46db7a454f034c10f969e03cfb574859c7316e5bff683f5a14b0e) |
+| `event:assistant/message` | event | `1169b301aaabcd992657b93ec93750c43175dda81ada5cac086f14f2eaaeed6d` | [`{ type: "assistant/message" }`](#persistence-type-sha256-1169b301aaabcd992657b93ec93750c43175dda81ada5cac086f14f2eaaeed6d) |
+| `event:command/done` | event | `15196447222782e773eb943c92b18316ce96b9af0f0cfddb6e57ba8274ecc5ff` | [`{ type: "command/done" }`](#persistence-type-sha256-15196447222782e773eb943c92b18316ce96b9af0f0cfddb6e57ba8274ecc5ff) |
+| `event:command/run` | event | `37184378c6439257d105c4e2022d80fc9c3a3f7c7f6ac661b00bc9f18d871006` | [`{ type: "command/run" }`](#persistence-type-sha256-37184378c6439257d105c4e2022d80fc9c3a3f7c7f6ac661b00bc9f18d871006) |
+| `event:compaction/end` | event | `b0127044ab31a702bddfd785d345f5abd7a70876746e895ce443afa3e60ddf2d` | [`{ type: "compaction/end" }`](#persistence-type-sha256-b0127044ab31a702bddfd785d345f5abd7a70876746e895ce443afa3e60ddf2d) |
+| `event:compaction/prune` | event | `7f7fd5a6b0064f597534b29ff62ef26e786dffccf5e14f654a7d4fcea2c35f04` | [`{ type: "compaction/prune" }`](#persistence-type-sha256-7f7fd5a6b0064f597534b29ff62ef26e786dffccf5e14f654a7d4fcea2c35f04) |
+| `event:compaction/start` | event | `db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965` | [`{ type: "compaction/start" }`](#persistence-type-sha256-db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965) |
+| `event:compaction/summary` | event | `f6f3f30109e9008fccf7da2a3268a63da8646b59dd7cf7b75bcd9cf08ac08a59` | [`{ type: "compaction/summary" }`](#persistence-type-sha256-f6f3f30109e9008fccf7da2a3268a63da8646b59dd7cf7b75bcd9cf08ac08a59) |
+| `event:deliverables/presented` | event | `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176` | [`{ type: "deliverables/presented" }`](#persistence-type-sha256-13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176) |
+| `event:feedback/message-delete` | event | `3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796` | [`{ type: "feedback/message-delete" }`](#persistence-type-sha256-3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796) |
+| `event:feedback/message-put` | event | `b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf` | [`{ type: "feedback/message-put" }`](#persistence-type-sha256-b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf) |
+| `event:feedback/record` | event | `b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8` | [`{ type: "feedback/record" }`](#persistence-type-sha256-b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8) |
+| `event:goal/change` | event | `763c8a20af487263a0080548274f7437ef4a86e0ba8769127d1ced10a72c664d` | [`{ type: "goal/change" }`](#persistence-type-sha256-763c8a20af487263a0080548274f7437ef4a86e0ba8769127d1ced10a72c664d) |
+| `event:hook/invoked` | event | `8a6e1ec9e8db346b0e02f027db73c07a94f067a26d40c1aef1abd09c47ce7ba0` | [`{ type: "hook/invoked" }`](#persistence-type-sha256-8a6e1ec9e8db346b0e02f027db73c07a94f067a26d40c1aef1abd09c47ce7ba0) |
+| `event:hook/result` | event | `e75916628f3f10c2d50658bd143052a46285fbf1a9a700ba54947614603d26b4` | [`{ type: "hook/result" }`](#persistence-type-sha256-e75916628f3f10c2d50658bd143052a46285fbf1a9a700ba54947614603d26b4) |
+| `event:image/offload` | event | `b222069eea2d768065161c1147b1f2c78c1b54328c84b3586ae5c8f91b8ed35e` | [`{ type: "image/offload" }`](#persistence-type-sha256-b222069eea2d768065161c1147b1f2c78c1b54328c84b3586ae5c8f91b8ed35e) |
+| `event:llm/retry` | event | `525254db03b1d1e6b74cf55aced52817568331ac1f96c0818728910b6692e336` | [`{ type: "llm/retry" }`](#persistence-type-sha256-525254db03b1d1e6b74cf55aced52817568331ac1f96c0818728910b6692e336) |
+| `event:llm/retry-started` | event | `48e5c9861f16ac07e78cb7b5ae9dabdf7bb85c58baed5a51b4ad275050ea58e3` | [`{ type: "llm/retry-started" }`](#persistence-type-sha256-48e5c9861f16ac07e78cb7b5ae9dabdf7bb85c58baed5a51b4ad275050ea58e3) |
+| `event:model/selection` | event | `35203ba7ad5ef6f97d556b85df20ae98f04f09c65748cecdf8eefdb8b6405ffc` | [`{ type: "model/selection" }`](#persistence-type-sha256-35203ba7ad5ef6f97d556b85df20ae98f04f09c65748cecdf8eefdb8b6405ffc) |
+| `event:permission/preset` | event | `5c45bf4c544a7211dcd8ba6ba7e5f1bc39b49e7a9df9d5cbdc8e87c22771b37b` | [`{ type: "permission/preset" }`](#persistence-type-sha256-5c45bf4c544a7211dcd8ba6ba7e5f1bc39b49e7a9df9d5cbdc8e87c22771b37b) |
+| `event:plan/mode` | event | `a7cf43ce7c2a4c038feed1885cd7a00d5c6ee2d90a7e0d56b46f78a3e1ca327f` | [`{ type: "plan/mode" }`](#persistence-type-sha256-a7cf43ce7c2a4c038feed1885cd7a00d5c6ee2d90a7e0d56b46f78a3e1ca327f) |
+| `event:request/context` | event | `37cbc9cf06d494cfe5c67f078af1605eacb8e4c2c853e9e26455b73de0ee7ccf` | [`{ type: "request/context" }`](#persistence-type-sha256-37cbc9cf06d494cfe5c67f078af1605eacb8e4c2c853e9e26455b73de0ee7ccf) |
+| `event:request/header` | event | `8ea13bcd983eab596dbfd41c5c2b62a0b318b71cd2a987a6fd752c6ced7e4489` | [`{ type: "request/header" }`](#persistence-type-sha256-8ea13bcd983eab596dbfd41c5c2b62a0b318b71cd2a987a6fd752c6ced7e4489) |
+| `event:sandbox/mode` | event | `516da4cdd6d2f1e5ce488e648578ca51f40e458f707b803e5b24de870e799415` | [`{ type: "sandbox/mode" }`](#persistence-type-sha256-516da4cdd6d2f1e5ce488e648578ca51f40e458f707b803e5b24de870e799415) |
+| `event:schedule/change` | event | `2a7f86849ae54b3398ee49661a757c4fcb59a6192b7036ee2ff514617e13fb42` | [`{ type: "schedule/change" }`](#persistence-type-sha256-2a7f86849ae54b3398ee49661a757c4fcb59a6192b7036ee2ff514617e13fb42) |
+| `event:session-log-deepseek/delivery-accepted` | event | `d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9` | [`{ type: "session-log-deepseek/delivery-accepted" }`](#persistence-type-sha256-d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9) |
+| `event:session/end-seed` | event | `5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e` | [`{ type: "session/end-seed" }`](#persistence-type-sha256-5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e) |
+| `event:session/title` | event | `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5` | [`{ type: "session/title" }`](#persistence-type-sha256-1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5) |
+| `event:session/title-llm-request` | event | `e0b5bf44c27bbfc6ab144239e3e4169c4d21146645e0e3121bbb359c3bc8591d` | [`{ type: "session/title-llm-request" }`](#persistence-type-sha256-e0b5bf44c27bbfc6ab144239e3e4169c4d21146645e0e3121bbb359c3bc8591d) |
+| `event:step/end` | event | `e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05` | [`{ type: "step/end" }`](#persistence-type-sha256-e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05) |
+| `event:step/start` | event | `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986` | [`{ type: "step/start" }`](#persistence-type-sha256-4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986) |
+| `event:subagent/catalog` | event | `ae1f7110feeec697b8cab42b68f7709aa7b3279764099dfb53c25890d2e5c871` | [`{ type: "subagent/catalog" }`](#persistence-type-sha256-ae1f7110feeec697b8cab42b68f7709aa7b3279764099dfb53c25890d2e5c871) |
+| `event:subagent/descriptor` | event | `b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5` | [`{ type: "subagent/descriptor" }`](#persistence-type-sha256-b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5) |
+| `event:subagent/model-selection-policy` | event | `a6567ccb2e530606b775371eb4fa31468d72084339968e8b0440a516a23b39dc` | [`{ type: "subagent/model-selection-policy" }`](#persistence-type-sha256-a6567ccb2e530606b775371eb4fa31468d72084339968e8b0440a516a23b39dc) |
+| `event:system/message` | event | `69becfb6b2d3fd5da91518089454cae8ef33f1835637ec44dde35dd077fd4bae` | [`{ type: "system/message" }`](#persistence-type-sha256-69becfb6b2d3fd5da91518089454cae8ef33f1835637ec44dde35dd077fd4bae) |
+| `event:team/member` | event | `4fb59762612c3e3ac3a3bd4f84c9c148d3c3893bd422ba2b201cc039fabd49bc` | [`{ type: "team/member" }`](#persistence-type-sha256-4fb59762612c3e3ac3a3bd4f84c9c148d3c3893bd422ba2b201cc039fabd49bc) |
+| `event:team/message/delivered` | event | `48f9c19417a1abbedfa59f4667bba36b93ac2db407adf5e84cb3ba0de30942cb` | [`{ type: "team/message/delivered" }`](#persistence-type-sha256-48f9c19417a1abbedfa59f4667bba36b93ac2db407adf5e84cb3ba0de30942cb) |
+| `event:team/message/queued` | event | `443371ec07a03a82a0e93d93abca3e70b03bca55ba5b01d507030fcb66e8fbb4` | [`{ type: "team/message/queued" }`](#persistence-type-sha256-443371ec07a03a82a0e93d93abca3e70b03bca55ba5b01d507030fcb66e8fbb4) |
+| `event:team/task` | event | `d595ec73b32b016a6055333c67a5d646032b22e672da1d4a09c5b1ae398a093a` | [`{ type: "team/task" }`](#persistence-type-sha256-d595ec73b32b016a6055333c67a5d646032b22e672da1d4a09c5b1ae398a093a) |
+| `event:todo/write` | event | `b978cff734e62143eb56c9125423ec275405eda969802d42aaf73ecb987d3b26` | [`{ type: "todo/write" }`](#persistence-type-sha256-b978cff734e62143eb56c9125423ec275405eda969802d42aaf73ecb987d3b26) |
+| `event:tool-workflow/agent-end` | event | `babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7` | [`{ type: "tool-workflow/agent-end" }`](#persistence-type-sha256-babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7) |
+| `event:tool-workflow/agent-start` | event | `5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627` | [`{ type: "tool-workflow/agent-start" }`](#persistence-type-sha256-5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627) |
+| `event:tool-workflow/run-end` | event | `42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f` | [`{ type: "tool-workflow/run-end" }`](#persistence-type-sha256-42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f) |
+| `event:tool-workflow/run-start` | event | `c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058` | [`{ type: "tool-workflow/run-start" }`](#persistence-type-sha256-c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058) |
+| `event:tool/call` | event | `3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48` | [`{ type: "tool/call" }`](#persistence-type-sha256-3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48) |
+| `event:tool/ptc-dispatch` | event | `b33142af8176323ffbb20762541be81c1d51b60a60887803836e0b146e5bef0c` | [`{ type: "tool/ptc-dispatch" }`](#persistence-type-sha256-b33142af8176323ffbb20762541be81c1d51b60a60887803836e0b146e5bef0c) |
+| `event:tool/ptc-dispatch-start` | event | `ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93` | [`{ type: "tool/ptc-dispatch-start" }`](#persistence-type-sha256-ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93) |
+| `event:tool/result` | event | `29af48b840d0cd9e48b6f50bf3b354f8f6340607c5b99220a48e74f60beac9e2` | [`{ type: "tool/result" }`](#persistence-type-sha256-29af48b840d0cd9e48b6f50bf3b354f8f6340607c5b99220a48e74f60beac9e2) |
+| `event:turn/end` | event | `0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce` | [`{ type: "turn/end" }`](#persistence-type-sha256-0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce) |
+| `event:turn/start` | event | `aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8` | [`{ type: "turn/start" }`](#persistence-type-sha256-aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8) |
+| `event:user/message` | event | `314765bdff29c7862fb6ce820f1773563ba3094a680d163ea21180a2591b8578` | [`{ type: "user/message" }`](#persistence-type-sha256-314765bdff29c7862fb6ce820f1773563ba3094a680d163ea21180a2591b8578) |
+| `event:web/deepseek-search-llm-request` | event | `cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331` | [`{ type: "web/deepseek-search-llm-request" }`](#persistence-type-sha256-cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331) |
+| `event:workspace/changes` | event | `e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72` | [`{ type: "workspace/changes" }`](#persistence-type-sha256-e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72) |
## 事件信封
@@ -1266,39 +1266,7 @@ export type SessionEvent = {
每个类型定义仅列出一次。引用保留共享和递归关系;定义旁的摘要涵盖其完整可达结构。源码名称和位置标识声明来源,但不参与摘要计算。
-
-
-### `0`
-
-SHA-256: `93d38436347f67c9022aacbc4472e283d722bcab8eb73fc376aaf7b6a6b9fb35`
-
-`0`
-
-
-
-### `1`
-
-SHA-256: `f88f1b7b6bb733f685f5fb6a8744a5db9199fa53c90463ea1a33bad51153671d`
-
-`1`
-
-
-
-### `2`
-
-SHA-256: `a0f906856fc06f1c6f2083eb970e5a657a82b1a84c06c095445e5d6d161cda80`
-
-`2`
-
-
-
-### `4`
-
-SHA-256: `af6e173f7be819bcd0a5c8d77918649c10ce761d8a184ff472f2e01ce64eb2e0`
-
-`4`
-
-
+
### `"aborted"`
@@ -1306,7 +1274,7 @@ SHA-256: `1e0b0b66b6f0c53fc72e52289d06b4708d776f1ca9df4c86a22bff621d403cf0`
`"aborted"`
-
+
### `"active"`
@@ -1314,7 +1282,7 @@ SHA-256: `c8e6f48878cc2a2f0dc59682280d81f407943fb503f32c64bf9ff3d9393c3eff`
`"active"`
-
+
### `"after"`
@@ -1322,7 +1290,7 @@ SHA-256: `5b232a9b9bfcc0fc6794dab7865bcf203a65785c5de5aa647a51228bff628413`
`"after"`
-
+
### `"agent-instructions"`
@@ -1330,7 +1298,7 @@ SHA-256: `fbd2c74b346a1595b376139c587fadd23e4a21acc9c0abce342975b6cfc60986`
`"agent-instructions"`
-
+
### `"agent-message"`
@@ -1338,7 +1306,7 @@ SHA-256: `82470020b5bfcb1a843e2aa05602af7d37df99e82d01f015c7c589ba054fd89d`
`"agent-message"`
-
+
### `"agent-preset/selected"`
@@ -1346,7 +1314,7 @@ SHA-256: `557e148d30b79ee48645850832b30c717d7c3b64641deb5d6133b8b4e91ee0b8`
`"agent-preset/selected"`
-
+
### `"agent/inbox/spliced"`
@@ -1354,7 +1322,7 @@ SHA-256: `829a2fb3be6efd4ba36aef8ed2d381a4c6fb2a0aaf50c823a6f3f8290786b809`
`"agent/inbox/spliced"`
-
+
### `"allowed-once"`
@@ -1362,7 +1330,7 @@ SHA-256: `811229eedcec57979dbadca7dbea832a59f8580cff30cb217fca5e2da16314bd`
`"allowed-once"`
-
+
### `"always"`
@@ -1370,7 +1338,7 @@ SHA-256: `142c37d302aa22a0a57915b5255939d3ca91c1811ca13fddcf84cf76ea00758a`
`"always"`
-
+
### `"append"`
@@ -1378,7 +1346,7 @@ SHA-256: `e438a9d4fb883b3e4a8d9fc8913aa1550ed50eb384bfbf943100a5605b537498`
`"append"`
-
+
### `"approval/asked"`
@@ -1386,7 +1354,7 @@ SHA-256: `cd186c309e2bef305705e1d324139240f5e681f4f6a957d6a25b0225f65560df`
`"approval/asked"`
-
+
### `"approval/decided"`
@@ -1394,7 +1362,7 @@ SHA-256: `378f90f9f6022a0991928a1eaf7991094ea1920fe89a9248358a1da106e1a970`
`"approval/decided"`
-
+
### `"approval/policy"`
@@ -1402,7 +1370,7 @@ SHA-256: `36d6a9a871d949ea4f3edd919d81d66aa69218bebef38899d2a1282c39420a1f`
`"approval/policy"`
-
+
### `"ask"`
@@ -1410,7 +1378,7 @@ SHA-256: `9e07693fd7cd9babe0688c22c986e4d519ae1c0e40eeea13b2dc583bed2abc86`
`"ask"`
-
+
### `"assistant"`
@@ -1418,7 +1386,7 @@ SHA-256: `95c0e88fcf0bafb2087f912ad9e2369de6ae6530cc0c4c2772c96205b57f7f60`
`"assistant"`
-
+
### `"assistant/attempt"`
@@ -1426,7 +1394,7 @@ SHA-256: `e95f957154b2b1b58692af53d4131180b6dd19e2264869f876dbaa959991494e`
`"assistant/attempt"`
-
+
### `"assistant/message"`
@@ -1434,7 +1402,7 @@ SHA-256: `6ab45ac76839722df912f3ba50f1c6b41f2d614bde11f1aabfae04117ccdc80d`
`"assistant/message"`
-
+
### `"at"`
@@ -1442,7 +1410,7 @@ SHA-256: `17aae616ef020b8b9f011ec398ec935450fb06d3e2a0722c456f63aeaf5ff728`
`"at"`
-
+
### `"block"`
@@ -1450,7 +1418,7 @@ SHA-256: `1e346446e183ee76f48d7994c97ecb302bddc682abb60b8a10ea0bb26223a69c`
`"block"`
-
+
### `"block-end"`
@@ -1458,7 +1426,7 @@ SHA-256: `eefbea819caeeea91ccb02dfafc16c68dd7f961cf9c1b2be25a2084509cf5c5a`
`"block-end"`
-
+
### `"block-start"`
@@ -1466,7 +1434,7 @@ SHA-256: `cbca49bde16b656d5b8fbe4a8a507769f7b594c6287782b809c03814941bc5e3`
`"block-start"`
-
+
### `"blocked"`
@@ -1474,15 +1442,7 @@ SHA-256: `254dce209e735f9cb6f6b7aec0354712b1611759ec02af4d35a96f2081e666f6`
`"blocked"`
-
-
-### `boolean`
-
-SHA-256: `aa93010d0e521ad7c42273f58d5c9b8bf1dfc94edf1b805a3971b364a35c1877`
-
-`boolean`
-
-
+
### `"canceled"`
@@ -1490,7 +1450,7 @@ SHA-256: `d4e4d575abeb4b72d616dc65c17ac0eaa943cc135609395044c38d5afcb10e31`
`"canceled"`
-
+
### `"cancelled"`
@@ -1498,7 +1458,7 @@ SHA-256: `2142e391b9ccb60d487afcf373ce74db98d952f69e8289eddb352a7e16e996c5`
`"cancelled"`
-
+
### `"catalog"`
@@ -1506,7 +1466,7 @@ SHA-256: `aec150797b655c5f15ebb7a501454b0c208fbaccec9ace49d7de2171fc02f47d`
`"catalog"`
-
+
### `"change"`
@@ -1514,7 +1474,7 @@ SHA-256: `f789af5ab844827eb5a4f357c0afae1eeed108c6c22d8ca1a56e586b349a7c85`
`"change"`
-
+
### `"chunk"`
@@ -1522,7 +1482,7 @@ SHA-256: `14230f9b8b5797bb7e8c621fa636531cfbde2ffba1ef5f1fd058216ff21952a0`
`"chunk"`
-
+
### `"claude-code"`
@@ -1530,7 +1490,7 @@ SHA-256: `aff60ef947c18b012644852bdd0d5bfe72065e061dd563787c76c646b4a10f6b`
`"claude-code"`
-
+
### `"clear"`
@@ -1538,7 +1498,7 @@ SHA-256: `e7e154d47d5fbc5366330fb4dade1f108c6dfe4335044d21ded14b7bf1dce084`
`"clear"`
-
+
### `"codex"`
@@ -1546,7 +1506,7 @@ SHA-256: `15495614ccfa9cbdeefb0ec2abd76406435f4c6ff3dae42acae8e09ef42025c9`
`"codex"`
-
+
### `"command/done"`
@@ -1554,7 +1514,7 @@ SHA-256: `8cdd3fdd295cee53035de16a1b23411716f75e9f994fe9510cac5d7fef605c76`
`"command/done"`
-
+
### `"command/run"`
@@ -1562,7 +1522,7 @@ SHA-256: `f1996af2602e6f62b5ab179ca5c4af00d8753938b74cc6ef102de09e99e74a7e`
`"command/run"`
-
+
### `"compaction/end"`
@@ -1570,7 +1530,7 @@ SHA-256: `1986c2664009c99155e44795676c887fa67f7c55cd2d5e6b648ff763e0ab033a`
`"compaction/end"`
-
+
### `"compaction/prune"`
@@ -1578,7 +1538,7 @@ SHA-256: `10e386801903f9d424602c31d3ff837a94aef623c8b391376d8d9e253525fabe`
`"compaction/prune"`
-
+
### `"compaction/start"`
@@ -1586,7 +1546,7 @@ SHA-256: `e2d0367e5716bc188435e51718ebff8ce873190625fa93b1c5331102d98758fa`
`"compaction/start"`
-
+
### `"compaction/summary"`
@@ -1594,7 +1554,7 @@ SHA-256: `ef4f00923b9edbae15c7ef05320280bf61147ca17146cf59690359bfd5e5da45`
`"compaction/summary"`
-
+
### `"complete"`
@@ -1602,7 +1562,7 @@ SHA-256: `d9196086e41e4dd5c2ce87f5c25529c8112a1731d258cf0728747d41a9ee3241`
`"complete"`
-
+
### `"completed"`
@@ -1610,7 +1570,7 @@ SHA-256: `1ebc6f9ff3aa9e3a38f8695f49bacdab1f8b7a3832741853ca46f40af56ccd01`
`"completed"`
-
+
### `"continuable"`
@@ -1618,7 +1578,7 @@ SHA-256: `e5d3828df1ec3e2a66879de0659e0f4866d9cfffc00825ee731a66f8a0c03d98`
`"continuable"`
-
+
### `"create"`
@@ -1626,7 +1586,7 @@ SHA-256: `7624ca28c61ca0eaa4f015140f3cea6e0c16cce2f2960fab5f531203d253903e`
`"create"`
-
+
### `"danger-full-access"`
@@ -1634,7 +1594,7 @@ SHA-256: `18fce9540bb20897a66275499faee6b8296c97e9901fa1ff45a191772448ad1a`
`"danger-full-access"`
-
+
### `"delegation"`
@@ -1642,7 +1602,7 @@ SHA-256: `76632533f67879dcb346fcae640540dbc89b2472b0bce88c59f7e48fc5c0e668`
`"delegation"`
-
+
### `"delete"`
@@ -1650,7 +1610,7 @@ SHA-256: `d0fbb0ca1bbba059830826f33f801da1aced35a2504376d61e020bdfec8d50c0`
`"delete"`
-
+
### `"deleted"`
@@ -1658,7 +1618,7 @@ SHA-256: `e7e8f1318170b8284f16ab45a557afd4675c96071c0f2a456636481dab20b427`
`"deleted"`
-
+
### `"deliverables/presented"`
@@ -1666,7 +1626,7 @@ SHA-256: `1a2718b00937b236a0d0910ef5dab2f9f8b65e4bde410cc21f15fbbf29f584d3`
`"deliverables/presented"`
-
+
### `"dispatch"`
@@ -1674,7 +1634,7 @@ SHA-256: `26c879bdd130e8b8683a6ce588414fad2244783d6573ca399fa0de184a2b0bb1`
`"dispatch"`
-
+
### `"disposed"`
@@ -1682,7 +1642,7 @@ SHA-256: `b38f206d59bad891fa58c89f97a0036987b3defe7685acbd318fa55eb85f9751`
`"disposed"`
-
+
### `"edit"`
@@ -1690,7 +1650,7 @@ SHA-256: `ad22a5ca5bbaab2e1440779cd3648e85ddfc6f73b5207394eda699555cf31430`
`"edit"`
-
+
### `"error"`
@@ -1698,2380 +1658,7 @@ SHA-256: `a2be0f0cb59f0d4a06557d45847d1938aced238baa77a6da416e590b8b958553`
`"error"`
-
-
-### `event:agent-preset/selected`
-
-SHA-256: `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:agent-preset/selected.data`](#persistence-type-eventagent-presetselecteddata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"agent-preset/selected"` |
-
-
-
-### `event:agent-preset/selected.data`
-
-SHA-256: `6e52dd55a1d48954ed5464ec46fe34d9eb65f709baabc9561e7a279910b0c406`
-
-来源:[`packages/preset/agent-presets/src/session.ts:28`](../packages/preset/agent-presets/src/session.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `agentPreset` | 必需 | `string` |
-
-
-
-### `event:agent/inbox/spliced`
-
-SHA-256: `646c2f1d243d3a78c5bc9305786fb340f5209c48a97e65f2a186cc5195491f3f`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:agent/inbox/spliced.data`](#persistence-type-eventagentinboxspliceddata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"agent/inbox/spliced"` |
-
-
-
-### `event:agent/inbox/spliced.data`
-
-SHA-256: `a6a195c1b4a906d953d24ab5864c9f1881d545460e080a51144adfc9cb058cfe`
-
-来源:[`packages/core/agent/src/types.ts:87`](../packages/core/agent/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `inserted` | 必需 | [`event:agent/inbox/spliced.data.inserted`](#persistence-type-eventagentinboxspliceddatainserted) |
-| `outcome` | 可选 | `"canceled"` |
-| `removedCount` | 可选 | `number` |
-| `start` | 必需 | `number` |
-| `target` | 必需 | [`packages/core/agent/src/types.ts#InboxTarget`](#persistence-type-packagescoreagentsrctypestsinboxtarget) |
-
-
-
-### `event:agent/inbox/spliced.data.inserted`
-
-SHA-256: `300341f890f7b9506a1749fff4fa5239d16ea1c63ff6b15851acb03c20f3b48d`
-
-[`packages/llm/llm/src/message.ts#UserMessage`](#persistence-type-packagesllmllmsrcmessagetsusermessage) 的数组。
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].content`
-
-SHA-256: `bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75`
-
-[`packages/llm/llm/src/types.ts#ContentBlock`](#persistence-type-packagesllmllmsrctypestscontentblock) 的数组。
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].content[0][2].attachment.originalDimensions`
-
-SHA-256: `0f46153645c297846a3fad3911636659ca4717a5e7d71c9f50bffacd312115ef`
-
-来源:[`packages/attachment/attachment/src/types.ts:28`](../packages/attachment/attachment/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `height` | 必需 | `number` |
-| `width` | 必需 | `number` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[0]`
-
-SHA-256: `ada310bf0bdb8fed51f3b56ea63f6ea6b18bbd587f04fccb63a14ab0b2a24e05`
-
-来源:[`packages/core/session/src/types.ts:189`](../packages/core/session/src/types.ts) · [`packages/interaction/commands/src/types.ts:75`](../packages/interaction/commands/src/types.ts) · [`packages/interaction/commands/src/types.ts:79`](../packages/interaction/commands/src/types.ts) · [`packages/llm/llm/src/message.ts:103`](../packages/llm/llm/src/message.ts) · [`packages/session/session-title/src/types.ts:35`](../packages/session/session-title/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `kind` | 必需 | `"user"` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[1]`
-
-SHA-256: `0ddab4577db37a3e0d9e3a91761735c8ef6f5629d526ab8ecaeeea19c097c8f8`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `kind` | 必需 | `"plugin"` |
-| `plugin` | 必需 | `string` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[11]`
-
-SHA-256: `6a4f72e2e179e17b922f2a9392c0e1c8f8c707f32494372454850a3eb184a6e7`
-
-来源:[`packages/api/session-controller/src/types.ts:385`](../packages/api/session-controller/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `clientTimeZone` | 可选 | `string` |
-| `kind` | 必需 | `"user"` |
-| `rpcId` | 必需 | `string` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[15].references`
-
-SHA-256: `df843efd87c78cf8de98f8e0d0216956cd568d0d0e56a22c853663e274aa1a18`
-
-[`event:agent/inbox/spliced.data.inserted[0].source[15].references[0]`](#persistence-type-eventagentinboxspliceddatainserted0source15references0) 的数组。
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[15].references[0]`
-
-SHA-256: `4f91f187baeabef5c7950c4780d31bbe39f3345dff591a6cf26ac7e135ac1cf4`
-
-来源:[`packages/context/session-reference/src/types.ts:18`](../packages/context/session-reference/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `capturedFormatVersion` | 可选 | `number` |
-| `capturedThroughSeq` | 必需 | [`event:compaction/end.data.turn`](#persistence-type-eventcompactionenddataturn) |
-| `compacted` | 必需 | `boolean` |
-| `inputIndex` | 必需 | `number` |
-| `label` | 必需 | `string` |
-| `omittedBytes` | 必需 | `number` |
-| `omittedMessages` | 必需 | `number` |
-| `originalMessages` | 必需 | `number` |
-| `retainedMessages` | 必需 | `number` |
-| `sessionId` | 必需 | `string` |
-| `truncated` | 必需 | `boolean` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[16].changes`
-
-SHA-256: `2ab12a0e345658f9342816d773fe610f049982bcad82631f43b9205abe43e5ee`
-
-[`packages/context/agent-instructions/src/render.ts#AgentInstructionChange`](#persistence-type-packagescontextagent-instructionssrcrendertsagentinstructionchange) 的数组。
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[16].changes[0].action`
-
-SHA-256: `904bf499d98be4a3a5f836fcac533b6c4899569b018071e6604e1d32657d00fd`
-
-以下类型之一:
-
-- `"remove"`
-- `"replace"`
-- `"set"`
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[17].entries`
-
-SHA-256: `aba175fb20ffc71112c55efe70458ff5d7dbfb83501892b4ba8d077f0ea5d7ba`
-
-[`event:agent/inbox/spliced.data.inserted[0].source[17].entries[0]`](#persistence-type-eventagentinboxspliceddatainserted0source17entries0) 的数组。
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[17].entries[0]`
-
-SHA-256: `83079c8a3f733ac3fa603eefa0fbb4737ca4d8b69e7e2e7298b60f9ac4098693`
-
-来源:[`packages/skill/tool-skill/src/index.ts:40`](../packages/skill/tool-skill/src/index.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `description` | 必需 | `string` |
-| `name` | 必需 | `string` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[19]`
-
-SHA-256: `9edc162949abf93bd5ff049191b345454ba104f583937ce5580fb50f067d2b94`
-
-来源:[`packages/webhook/webhook/src/types.ts:74`](../packages/webhook/webhook/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `deliveryId` | 必需 | `string` |
-| `form` | 必需 | `"notice"` |
-| `kind` | 必需 | `"webhook"` |
-| `provider` | 必需 | `string` |
-| `ruleId` | 必需 | `string` |
-| `source` | 必需 | `string` |
-| `summary` | 必需 | `string` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[2]`
-
-SHA-256: `dda6e111a8ccfc12f6e742e977a1a4e3549e8c03732a5ff6c8d7c3d4bcb7a412`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `form` | 必需 | `"instructions"` |
-| `kind` | 必需 | `"plugin"` |
-| `plugin` | 必需 | `string` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[3]`
-
-SHA-256: `2f90a7b3646fea3e677bd7b4000aa96f3b8964f107b614e204e11ad4051c24fc`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `form` | 必需 | `"catalog"` |
-| `kind` | 必需 | `"plugin"` |
-| `plugin` | 必需 | `string` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[4]`
-
-SHA-256: `e8d26e6993445743e6c4342c31b284c7d8f5574369abdd6021183af1a6b3538f`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `form` | 必需 | `"snapshot"` |
-| `kind` | 必需 | `"plugin"` |
-| `plugin` | 必需 | `string` |
-| `sections` | 必需 | [`event:agent/inbox/spliced.data.inserted[0].source[4].sections`](#persistence-type-eventagentinboxspliceddatainserted0source4sections) |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[4].sections`
-
-SHA-256: `c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262`
-
-[`packages/llm/llm/src/message.ts#ContextSnapshotSection`](#persistence-type-packagesllmllmsrcmessagetscontextsnapshotsection) 的数组。
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[5]`
-
-SHA-256: `b4d298d90c798fa4d1f5b030ce3ce8031c4c41beafdb05323bec8b2a06903b43`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `form` | 必需 | `"notice"` |
-| `kind` | 必需 | `"plugin"` |
-| `plugin` | 必需 | `string` |
-| `summary` | 必需 | `string` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[6]`
-
-SHA-256: `2ce7ef3b3daebf95815c7ae454a751d3e67ca7a22e2e0734fe2942df393bb66c`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `form` | 必需 | `"relay"` |
-| `kind` | 必需 | `"plugin"` |
-| `plugin` | 必需 | `string` |
-
-
-
-### `event:agent/inbox/spliced.data.inserted[0].source[7]`
-
-SHA-256: `85e1bd563d6c80c1f377f99f91103fec4e315148a7330f3b3dae7c2d04e33b01`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `form` | 必需 | `"recall"` |
-| `kind` | 必需 | `"plugin"` |
-| `plugin` | 必需 | `string` |
-
-
-
-### `event:approval/asked`
-
-SHA-256: `3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:approval/asked.data`](#persistence-type-eventapprovalaskeddata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"approval/asked"` |
-
-
-
-### `event:approval/asked.data`
-
-SHA-256: `45f2a07ea94573123b6ae14db787a40062dec3834f36d8be92c523d40ba28448`
-
-来源:[`packages/interaction/user-approval/src/types.ts:44`](../packages/interaction/user-approval/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `callId` | 可选 | `string` |
-| `id` | 必需 | `string` |
-| `reason` | 可选 | `string` |
-| `toolName` | 必需 | `string` |
-
-
-
-### `event:approval/decided`
-
-SHA-256: `bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:approval/decided.data`](#persistence-type-eventapprovaldecideddata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"approval/decided"` |
-
-
-
-### `event:approval/decided.data`
-
-SHA-256: `93cbbc5a7fd0b1aa1ff1b9a6bb5ec52b073f48e5a5200365c45c0cd54059e1b9`
-
-来源:[`packages/interaction/user-approval/src/types.ts:55`](../packages/interaction/user-approval/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `id` | 必需 | `string` |
-| `outcome` | 必需 | [`packages/interaction/user-approval/src/types.ts#ApprovalOutcome`](#persistence-type-packagesinteractionuser-approvalsrctypestsapprovaloutcome) |
-
-
-
-### `event:approval/policy`
-
-SHA-256: `26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:approval/policy.data`](#persistence-type-eventapprovalpolicydata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"approval/policy"` |
-
-
-
-### `event:approval/policy.data`
-
-SHA-256: `11f70b595aa76897fc4e25a352bfa718c659f44b799e5aa14e84e5a38fe72912`
-
-来源:[`packages/interaction/user-approval/src/index.ts:33`](../packages/interaction/user-approval/src/index.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `policy` | 必需 | [`packages/interaction/user-approval/src/index.ts#ApprovalPolicy`](#persistence-type-packagesinteractionuser-approvalsrcindextsapprovalpolicy) |
-| `source` | 可选 | `"delegation"` |
-
-
-
-### `event:assistant/attempt`
-
-SHA-256: `c80c89da83c46db7a454f034c10f969e03cfb574859c7316e5bff683f5a14b0e`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:assistant/attempt.data`](#persistence-type-eventassistantattemptdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"assistant/attempt"` |
-
-
-
-### `event:assistant/attempt.data`
-
-SHA-256: `0c6412d3ba5e41adfaa6929c7d4093f2d52d8598c03f35844fc0d55e3070a3b1`
-
-来源:[`packages/core/session/src/types.ts:342`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `step` | 必需 | `number` |
-| `stream` | 必需 | [`event:assistant/attempt.data.stream`](#persistence-type-eventassistantattemptdatastream) |
-| `turn` | 必需 | `number` |
-
-
-
-### `event:assistant/attempt.data.stream`
-
-SHA-256: `26f3bb7529cfce1e3a0f1ededa365d8b426758ca0feeb0beabeee805f8bb8346`
-
-[`packages/llm/llm/src/assistant-stream.ts#AssistantStreamRecord`](#persistence-type-packagesllmllmsrcassistant-streamtsassistantstreamrecord) 的数组。
-
-
-
-### `event:assistant/attempt.data.stream[0][0]`
-
-SHA-256: `e72269f931559e901e5e8fe1cfcbd0669fb795f43cc038ff39fba62f60403c33`
-
-来源:[`packages/llm/llm/src/assistant-stream.ts:21`](../packages/llm/llm/src/assistant-stream.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `dt` | 必需 | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `index` | 必需 | `number` |
-| `texts` | 必需 | [`event:assistant/attempt.data.stream[0][0].texts`](#persistence-type-eventassistantattemptdatastream00texts) |
-| `time0` | 必需 | `number` |
-| `type` | 必需 | `"text-chunks"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][0].texts`
-
-SHA-256: `93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2`
-
-`string` 的数组。
-
-
-
-### `event:assistant/attempt.data.stream[0][1]`
-
-SHA-256: `71bb3254ec8f1e491ce63b762a7b5f18709de23aa4e8abcc8b886f4b6ce051dd`
-
-来源:[`packages/llm/llm/src/assistant-stream.ts:28`](../packages/llm/llm/src/assistant-stream.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `dt` | 必需 | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `index` | 必需 | `number` |
-| `texts` | 必需 | [`event:assistant/attempt.data.stream[0][0].texts`](#persistence-type-eventassistantattemptdatastream00texts) |
-| `time0` | 必需 | `number` |
-| `type` | 必需 | `"reasoning-chunks"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][2]`
-
-SHA-256: `3860b4757d512a2869be833acb0faf834335b1b056bf3f83df5474dce95f8fa6`
-
-来源:[`packages/llm/llm/src/assistant-stream.ts:35`](../packages/llm/llm/src/assistant-stream.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `args` | 必需 | [`event:assistant/attempt.data.stream[0][0].texts`](#persistence-type-eventassistantattemptdatastream00texts) |
-| `dt` | 必需 | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `id` | 必需 | `string` |
-| `index` | 必需 | `number` |
-| `name` | 可选 | `string` |
-| `time0` | 必需 | `number` |
-| `type` | 必需 | `"tool-call-chunks"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3]`
-
-SHA-256: `c93b6f51b399607349b4bcc66b58e848a44250ffc1e2537207bd092dfff94192`
-
-来源:[`packages/llm/llm/src/assistant-stream.ts:44`](../packages/llm/llm/src/assistant-stream.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `chunk` | 必需 | [`packages/llm/llm/src/types.ts#StreamChunk`](#persistence-type-packagesllmllmsrctypestsstreamchunk) |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"chunk"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[0]`
-
-SHA-256: `647cb2e3aeb58e27d1d4d60011f208bb66dce257e8654193c533b47c4c22c253`
-
-来源:[`packages/llm/llm/src/types.ts:427`](../packages/llm/llm/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `blockType` | 必需 | [`packages/llm/llm/src/types.ts#ContentBlockType`](#persistence-type-packagesllmllmsrctypestscontentblocktype) |
-| `index` | 必需 | `number` |
-| `type` | 必需 | `"block-start"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[1]`
-
-SHA-256: `95080295115fbd83544520ba247b68a03790131f6a2eac323d388758cb542f65`
-
-来源:[`packages/llm/llm/src/types.ts:428`](../packages/llm/llm/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `index` | 必需 | `number` |
-| `text` | 必需 | `string` |
-| `type` | 必需 | `"text-delta"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[2]`
-
-SHA-256: `2abb711460e6238d851c30f3e4bdd87a2aa1887ee70575b3d3b7b25610673095`
-
-来源:[`packages/llm/llm/src/types.ts:429`](../packages/llm/llm/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `index` | 必需 | `number` |
-| `text` | 必需 | `string` |
-| `type` | 必需 | `"reasoning-delta"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[3]`
-
-SHA-256: `88a610b831be6d92612a464be5c7d0b88ec24d97bd299837bf74bf7672183c9a`
-
-来源:[`packages/llm/llm/src/types.ts:430`](../packages/llm/llm/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `argumentsDelta` | 必需 | `string` |
-| `id` | 必需 | `string` |
-| `index` | 必需 | `number` |
-| `name` | 可选 | `string` |
-| `type` | 必需 | `"tool-call-delta"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[4]`
-
-SHA-256: `90c811b8c2668898515e69a24e82caffeb08517f9c7aa193867ff0380f3b535d`
-
-来源:[`packages/llm/llm/src/types.ts:431`](../packages/llm/llm/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `block` | 必需 | [`packages/llm/llm/src/types.ts#ContentBlock`](#persistence-type-packagesllmllmsrctypestscontentblock) |
-| `index` | 必需 | `number` |
-| `type` | 必需 | `"block-end"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[5]`
-
-SHA-256: `f1a96afe7503ac1817de769cd0ba13d9b80111c7034c50106b3344ecc14cc515`
-
-来源:[`packages/llm/llm/src/types.ts:432`](../packages/llm/llm/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `type` | 必需 | `"usage"` |
-| `usage` | 必需 | [`packages/llm/llm/src/types.ts#TokenUsage`](#persistence-type-packagesllmllmsrctypeststokenusage) |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[6]`
-
-SHA-256: `a2b49331716ba0a7078b026d145306a70eae64b7313c3e6204bd931e75ec3bb1`
-
-来源:[`packages/llm/llm/src/types.ts:433`](../packages/llm/llm/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `reason` | 必需 | [`packages/llm/llm/src/types.ts#FinishReason`](#persistence-type-packagesllmllmsrctypestsfinishreason) |
-| `replayState` | 可选 | [`packages/llm/llm/src/types.ts#ReplayEnvelope`](#persistence-type-packagesllmllmsrctypestsreplayenvelope) |
-| `type` | 必需 | `"finish"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[6].reason[0]`
-
-SHA-256: `8e31bb958e9b015e6f8407eaade32217068159e816f3cc99c3ad76eb889732e0`
-
-来源:[`packages/llm/llm/src/types.ts:147`](../packages/llm/llm/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `failure` | 必需 | [`packages/llm/llm/src/types.ts#LlmFailure`](#persistence-type-packagesllmllmsrctypestsllmfailure) |
-| `kind` | 必需 | `"aborted"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[6].reason[1]`
-
-SHA-256: `693f4952fb5565da96c06bace8924b098ac2fbc915fde0ff8019701183abc057`
-
-来源:[`packages/llm/llm/src/types.ts:148`](../packages/llm/llm/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `failure` | 必需 | [`packages/llm/llm/src/types.ts#LlmFailure`](#persistence-type-packagesllmllmsrctypestsllmfailure) |
-| `kind` | 必需 | `"error"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[6].reason[2]`
-
-SHA-256: `ab7ec5f9eb2c6dfacca5da4c37cf7ba85d04172053ee6b1ebf1709ffcd99c1a7`
-
-来源:[`packages/core/session/src/types.ts:213`](../packages/core/session/src/types.ts) · [`packages/llm/llm/src/types.ts:146`](../packages/llm/llm/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `kind` | 必需 | `"max-tokens"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[6].reason[3]`
-
-SHA-256: `1d76406cbb2ddadb0dbbb51e9d8bc6cf678fed455cf8eb512f36f7c86d37a62f`
-
-来源:[`packages/llm/llm/src/types.ts:144`](../packages/llm/llm/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `kind` | 必需 | `"stop"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[6].reason[4]`
-
-SHA-256: `287211846beea1eccb5f9acee00d20388a38fcb2e95858fa2332d6f58529379a`
-
-来源:[`packages/llm/llm/src/types.ts:145`](../packages/llm/llm/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `kind` | 必需 | `"tool-calls"` |
-
-
-
-### `event:assistant/attempt.data.stream[0][3].chunk[6].replayState.blocks`
-
-SHA-256: `b1664fa89f8eab49a14e7e3168d8bc4da4aa9fd76332f6c4a053d839e5276ae7`
-
-`unknown`(不透明) 的数组。
-
-
-
-### `event:assistant/message`
-
-SHA-256: `1169b301aaabcd992657b93ec93750c43175dda81ada5cac086f14f2eaaeed6d`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:assistant/message.data`](#persistence-type-eventassistantmessagedata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `surfaceOp` | 必需 | [`packages/core/session/src/types.ts#SurfaceOp`](#persistence-type-packagescoresessionsrctypestssurfaceop) |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"assistant/message"` |
-
-
-
-### `event:assistant/message.data`
-
-SHA-256: `77b8491f946edfc8cc77ebae3ba49183759da31ba2dfa83d4c9e9e618c4b91d2`
-
-来源:[`packages/core/session/src/types.ts:328`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `interrupted` | 可选 | `true` |
-| `message` | 必需 | [`packages/llm/llm/src/message.ts#AssistantMessage`](#persistence-type-packagesllmllmsrcmessagetsassistantmessage) |
-| `step` | 必需 | `number` |
-| `stream` | 必需 | [`event:assistant/attempt.data.stream`](#persistence-type-eventassistantattemptdatastream) |
-| `turn` | 必需 | `number` |
-| `usage` | 可选 | [`packages/llm/llm/src/types.ts#TokenUsage`](#persistence-type-packagesllmllmsrctypeststokenusage) |
-
-
-
-### `event:command/done`
-
-SHA-256: `15196447222782e773eb943c92b18316ce96b9af0f0cfddb6e57ba8274ecc5ff`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:command/done.data`](#persistence-type-eventcommanddonedata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"command/done"` |
-
-
-
-### `event:command/done.data`
-
-SHA-256: `5b6fb1f226ff56402db08a6aae82af76100b14056271875f69ec526a1ae05d51`
-
-来源:[`packages/interaction/commands/src/types.ts:112`](../packages/interaction/commands/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `commandId` | 必需 | `string` |
-| `kind` | 必需 | [`event:command/done.data.kind`](#persistence-type-eventcommanddonedatakind) |
-| `sourceEventSeq` | 可选 | `number` |
-| `text` | 可选 | `string` |
-
-
-
-### `event:command/done.data.kind`
-
-SHA-256: `1ab2ef1296f157ba96998f179bb5daa9d21a82480da2901127aeab2730797c92`
-
-以下类型之一:
-
-- `"error"`
-- `"success"`
-
-
-
-### `event:command/run`
-
-SHA-256: `37184378c6439257d105c4e2022d80fc9c3a3f7c7f6ac661b00bc9f18d871006`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:command/run.data`](#persistence-type-eventcommandrundata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"command/run"` |
-
-
-
-### `event:command/run.data`
-
-SHA-256: `a853902cfab417b8f08aa51ad6855fea46f34ed4588a74e47403035111d0fb86`
-
-来源:[`packages/interaction/commands/src/types.ts:105`](../packages/interaction/commands/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `args` | 可选 | `string` |
-| `commandId` | 必需 | `string` |
-| `name` | 必需 | `string` |
-| `source` | 必需 | [`event:agent/inbox/spliced.data.inserted[0].source[0]`](#persistence-type-eventagentinboxspliceddatainserted0source0) |
-
-
-
-### `event:compaction/end`
-
-SHA-256: `b0127044ab31a702bddfd785d345f5abd7a70876746e895ce443afa3e60ddf2d`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:compaction/end.data`](#persistence-type-eventcompactionenddata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"compaction/end"` |
-
-
-
-### `event:compaction/end.data`
-
-SHA-256: `ca59530d1a4f3e191b4032bc4a20eded0d827db8b5a7efb27b3af9e9b456c6f2`
-
-来源:[`packages/compaction/compaction/src/types.ts:72`](../packages/compaction/compaction/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `compactionId` | 必需 | `string` |
-| `error` | 可选 | `string` |
-| `sourceCommandId` | 可选 | `string` |
-| `turn` | 必需 | [`event:compaction/end.data.turn`](#persistence-type-eventcompactionenddataturn) |
-
-
-
-### `event:compaction/end.data.turn`
-
-SHA-256: `3bd652ebfa8726b3ce3937a4f1bd2759e02f86b3a08a20f9e41a8513656fbc5f`
-
-来源:[`packages/core/session/src/types.ts:64`](../packages/core/session/src/types.ts)
-
-以下类型之一:
-
-- `null`
-- `number`
-
-
-
-### `event:compaction/prune`
-
-SHA-256: `7f7fd5a6b0064f597534b29ff62ef26e786dffccf5e14f654a7d4fcea2c35f04`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:compaction/prune.data`](#persistence-type-eventcompactionprunedata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"compaction/prune"` |
-
-
-
-### `event:compaction/prune.data`
-
-SHA-256: `5dd766ccd1702a1142ad8b4bd44f2242f8e8a6752669ad3de0a5d224329b1438`
-
-来源:[`packages/compaction/compaction/src/types.ts:82`](../packages/compaction/compaction/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `shadowedRange` | 必需 | [`event:compaction/prune.data.shadowedRange`](#persistence-type-eventcompactionprunedatashadowedrange) |
-| `shadowedSeqs` | 必需 | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `shadowedTokenCount` | 必需 | `number` |
-
-
-
-### `event:compaction/prune.data.shadowedRange`
-
-SHA-256: `9e41386b3a0c9572b0d63078492ebb3997da7d3a830d44e0259418bd02f4bcb2`
-
-来源:[`packages/compaction/compaction/src/types.ts:38`](../packages/compaction/compaction/src/types.ts) · [`packages/compaction/compaction/src/types.ts:84`](../packages/compaction/compaction/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `end` | 必需 | `number` |
-| `start` | 必需 | `number` |
-
-
-
-### `event:compaction/start`
-
-SHA-256: `db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:compaction/start.data`](#persistence-type-eventcompactionstartdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"compaction/start"` |
-
-
-
-### `event:compaction/start.data`
-
-SHA-256: `3e4e7683b0192c9f0e6a75c59076108f017892cdb302a98032c2632fd79c356f`
-
-来源:[`packages/compaction/compaction/src/types.ts:24`](../packages/compaction/compaction/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `compactionId` | 必需 | `string` |
-| `sourceCommandId` | 可选 | `string` |
-| `turn` | 必需 | [`event:compaction/end.data.turn`](#persistence-type-eventcompactionenddataturn) |
-
-
-
-### `event:compaction/summary`
-
-SHA-256: `f6f3f30109e9008fccf7da2a3268a63da8646b59dd7cf7b75bcd9cf08ac08a59`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:compaction/summary.data`](#persistence-type-eventcompactionsummarydata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"compaction/summary"` |
-
-
-
-### `event:compaction/summary.data`
-
-SHA-256: `feb329074f0206ecc06d8a1aa0a0b3e2f47fd27524ba020fbc849ba63e938896`
-
-以下类型之一:
-
-- [`event:compaction/summary.data[0]`](#persistence-type-eventcompactionsummarydata0)
-- [`event:compaction/summary.data[1]`](#persistence-type-eventcompactionsummarydata1)
-
-
-
-### `event:compaction/summary.data[0]`
-
-SHA-256: `9ff2ad8dddb836f75e8f6197fff2371323dfc396c3c6fb667e6e0b42fda79a5c`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `compactionId` | 必需 | `string` |
-| `llmStreamCall` | 必需 | `true` |
-| `maxTokens` | 可选 | `number` |
-| `model` | 必需 | `string` |
-| `provider` | 必需 | `string` |
-| `rawOutput` | 必需 | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `shadowedRange` | 必需 | [`event:compaction/prune.data.shadowedRange`](#persistence-type-eventcompactionprunedatashadowedrange) |
-| `shadowedSeqs` | 必需 | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `shadowedTokenCount` | 必需 | `number` |
-| `sourceCommandId` | 可选 | `string` |
-| `summary` | 必需 | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `usage` | 可选 | [`packages/llm/llm/src/types.ts#TokenUsage`](#persistence-type-packagesllmllmsrctypeststokenusage) |
-
-
-
-### `event:compaction/summary.data[1]`
-
-SHA-256: `3aa261c8516b5c955ed12080e6257a56cbe513f6c9f0ac9274c12e96c196ebca`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `compactionId` | 必需 | `string` |
-| `maxTokens` | 可选 | `number` |
-| `model` | 必需 | `string` |
-| `provider` | 必需 | `string` |
-| `rawOutput` | 可选 | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `shadowedRange` | 必需 | [`event:compaction/prune.data.shadowedRange`](#persistence-type-eventcompactionprunedatashadowedrange) |
-| `shadowedSeqs` | 必需 | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `shadowedTokenCount` | 必需 | `number` |
-| `sourceCommandId` | 可选 | `string` |
-| `summary` | 必需 | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `usage` | 可选 | [`packages/llm/llm/src/types.ts#TokenUsage`](#persistence-type-packagesllmllmsrctypeststokenusage) |
-
-
-
-### `event:deliverables/presented`
-
-SHA-256: `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:deliverables/presented.data`](#persistence-type-eventdeliverablespresenteddata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"deliverables/presented"` |
-
-
-
-### `event:deliverables/presented.data`
-
-SHA-256: `1528539c63db8b23506f0209a99ce77d8ad138adfbfcee3d4769b7382d93756c`
-
-来源:[`packages/deliverables/tool-present/src/types.ts:15`](../packages/deliverables/tool-present/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `callId` | 必需 | `string` |
-| `files` | 必需 | [`event:deliverables/presented.data.files`](#persistence-type-eventdeliverablespresenteddatafiles) |
-| `turn` | 必需 | `number` |
-
-
-
-### `event:deliverables/presented.data.files`
-
-SHA-256: `1d9cb3caa96100b18b1911fa3ff8c751ef6992971a03c5f4d9aefc1a0004a345`
-
-[`packages/deliverables/tool-present/src/types.ts#PresentedFile`](#persistence-type-packagesdeliverablestool-presentsrctypestspresentedfile) 的数组。
-
-
-
-### `event:feedback/message-delete`
-
-SHA-256: `3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/feedback/message-feedback/src/types.ts#MessageFeedbackDelete`](#persistence-type-packagesfeedbackmessage-feedbacksrctypestsmessagefeedbackdelete) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"feedback/message-delete"` |
-
-
-
-### `event:feedback/message-put`
-
-SHA-256: `b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/feedback/message-feedback/src/types.ts#MessageFeedbackPut`](#persistence-type-packagesfeedbackmessage-feedbacksrctypestsmessagefeedbackput) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"feedback/message-put"` |
-
-
-
-### `event:feedback/message-put.data.item.category`
-
-SHA-256: `3305a4bb6b6c29b482ba91d59c60b47e8f98282d3dacc8c29e4a4c2712209bdd`
-
-以下类型之一:
-
-- `"instruction-following"`
-- `"other"`
-- `"product-interaction"`
-- `"resource-cost"`
-- `"security-privacy-permission"`
-- `"service-stability"`
-- `"task-result"`
-
-
-
-### `event:feedback/record`
-
-SHA-256: `b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/feedback/command-feedback/src/types.ts#FeedbackRecord`](#persistence-type-packagesfeedbackcommand-feedbacksrctypestsfeedbackrecord) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"feedback/record"` |
-
-
-
-### `event:goal/change`
-
-SHA-256: `763c8a20af487263a0080548274f7437ef4a86e0ba8769127d1ced10a72c664d`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/goal/goal/src/domain.ts#GoalChangeMeta`](#persistence-type-packagesgoalgoalsrcdomaintsgoalchangemeta) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"goal/change"` |
-
-
-
-### `event:goal/change.data[0].operation`
-
-SHA-256: `62e6a429ff3f390a46ac39fb468692032f42936ca0db19b53454184189401379`
-
-以下类型之一:
-
-- `"block"`
-- `"complete"`
-- `"create"`
-- `"edit"`
-- `"pause"`
-- `"resume"`
-
-
-
-### `event:hook/invoked`
-
-SHA-256: `8a6e1ec9e8db346b0e02f027db73c07a94f067a26d40c1aef1abd09c47ce7ba0`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:hook/invoked.data`](#persistence-type-eventhookinvokeddata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"hook/invoked"` |
-
-
-
-### `event:hook/invoked.data`
-
-SHA-256: `119abe2b9c0b2f46ecb31d82b9acba4d4b30e049f655e2475e8b4ae12d5a9e25`
-
-来源:[`packages/hooks/hook-protocol/src/types.ts:19`](../packages/hooks/hook-protocol/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `dialect` | 必需 | [`packages/hooks/hook-protocol/src/types.ts#HookDialect`](#persistence-type-packageshookshook-protocolsrctypestshookdialect) |
-| `handlerId` | 必需 | `string` |
-| `matcher` | 可选 | `string` |
-| `point` | 必需 | `string` |
-| `turn` | 必需 | `number` |
-
-
-
-### `event:hook/result`
-
-SHA-256: `e75916628f3f10c2d50658bd143052a46285fbf1a9a700ba54947614603d26b4`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:hook/result.data`](#persistence-type-eventhookresultdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"hook/result"` |
-
-
-
-### `event:hook/result.data`
-
-SHA-256: `8ad45ad053b4d89f8865c17cc9ff3b8748e86045f3f0fb816269a34af2619141`
-
-来源:[`packages/hooks/hook-protocol/src/types.ts:31`](../packages/hooks/hook-protocol/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `decision` | 必需 | `string` |
-| `durationMs` | 必需 | `number` |
-| `exitCode` | 可选 | `number` |
-| `handlerId` | 必需 | `string` |
-| `point` | 必需 | `string` |
-| `stderrSummary` | 可选 | `string` |
-| `turn` | 必需 | `number` |
-
-
-
-### `event:image/offload`
-
-SHA-256: `b222069eea2d768065161c1147b1f2c78c1b54328c84b3586ae5c8f91b8ed35e`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:image/offload.data`](#persistence-type-eventimageoffloaddata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"image/offload"` |
-
-
-
-### `event:image/offload.data`
-
-SHA-256: `477614bca595a9e7adb5a1870be446b9a8684f3ba8950259d6289f2d3b74f028`
-
-来源:[`packages/compaction/compaction-image-offload/src/projection.ts:25`](../packages/compaction/compaction-image-offload/src/projection.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `targets` | 必需 | [`event:image/offload.data.targets`](#persistence-type-eventimageoffloaddatatargets) |
-
-
-
-### `event:image/offload.data.targets`
-
-SHA-256: `9e2c06d8653585b33d72d5c1a80da79c8a24a88c284409bca15cc0f0ead5ebfb`
-
-[`packages/compaction/compaction-image-offload/src/projection.ts#ImageOffloadTarget`](#persistence-type-packagescompactioncompaction-image-offloadsrcprojectiontsimageoffloadtarget) 的数组。
-
-
-
-### `event:llm/retry`
-
-SHA-256: `525254db03b1d1e6b74cf55aced52817568331ac1f96c0818728910b6692e336`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/llm/llm-retry/src/types.ts#LlmRetryEventData`](#persistence-type-packagesllmllm-retrysrctypestsllmretryeventdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"llm/retry"` |
-
-
-
-### `event:llm/retry-started`
-
-SHA-256: `48e5c9861f16ac07e78cb7b5ae9dabdf7bb85c58baed5a51b4ad275050ea58e3`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/llm/llm-retry/src/types.ts#LlmRetryStartedEventData`](#persistence-type-packagesllmllm-retrysrctypestsllmretrystartedeventdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"llm/retry-started"` |
-
-
-
-### `event:llm/retry.data[0]`
-
-SHA-256: `cdee10e87dbed8440d8b6935888624884878efc7af95402e94171b29f173dced`
-
-来源:[`packages/llm/llm-retry/src/types.ts:17`](../packages/llm/llm-retry/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `delayMs` | 必需 | `number` |
-| `failure` | 必需 | [`packages/llm/llm/src/types.ts#LlmFailure`](#persistence-type-packagesllmllmsrctypestsllmfailure) |
-| `maxRetries` | 必需 | `number` |
-| `mode` | 必需 | `"normal"` |
-| `policyKey` | 必需 | `string` |
-| `provider` | 必需 | `string` |
-| `retry` | 必需 | `number` |
-| `retryId` | 必需 | `string` |
-| `step` | 必需 | `number` |
-| `turn` | 必需 | `number` |
-
-
-
-### `event:llm/retry.data[1]`
-
-SHA-256: `374fdd68aee5ff844e378c0cbdd961d247a0f22e4ade0bb03d800cd2a46a2b8b`
-
-来源:[`packages/llm/llm-retry/src/types.ts:30`](../packages/llm/llm-retry/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `delayMs` | 必需 | `number` |
-| `failure` | 必需 | [`packages/llm/llm/src/types.ts#LlmFailure`](#persistence-type-packagesllmllmsrctypestsllmfailure) |
-| `mode` | 必需 | `"always"` |
-| `policyKey` | 必需 | `string` |
-| `provider` | 必需 | `string` |
-| `retry` | 必需 | `number` |
-| `retryId` | 必需 | `string` |
-| `step` | 必需 | `number` |
-| `turn` | 必需 | `number` |
-
-
-
-### `event:model/selection`
-
-SHA-256: `35203ba7ad5ef6f97d556b85df20ae98f04f09c65748cecdf8eefdb8b6405ffc`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/api/session-controller/src/types.ts#ModelSelection`](#persistence-type-packagesapisession-controllersrctypestsmodelselection) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"model/selection"` |
-
-
-
-### `event:permission/preset`
-
-SHA-256: `5c45bf4c544a7211dcd8ba6ba7e5f1bc39b49e7a9df9d5cbdc8e87c22771b37b`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:permission/preset.data`](#persistence-type-eventpermissionpresetdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"permission/preset"` |
-
-
-
-### `event:permission/preset.data`
-
-SHA-256: `8a9c990773f798eac10ca8878e6bcc531ee080bc589cac956730e462cc6a09ad`
-
-来源:[`packages/interaction/permission-presets/src/index.ts:57`](../packages/interaction/permission-presets/src/index.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `preset` | 必需 | `string` |
-
-
-
-### `event:plan/mode`
-
-SHA-256: `a7cf43ce7c2a4c038feed1885cd7a00d5c6ee2d90a7e0d56b46f78a3e1ca327f`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:plan/mode.data`](#persistence-type-eventplanmodedata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"plan/mode"` |
-
-
-
-### `event:plan/mode.data`
-
-SHA-256: `20a57544bbf204dacd1ae6beb2ab29444365c3c869f2afdf489dcdcbc3d9c8c5`
-
-来源:[`packages/plan/plan-mode/src/index.ts:47`](../packages/plan/plan-mode/src/index.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `active` | 必需 | `boolean` |
-
-
-
-### `event:request/context`
-
-SHA-256: `37cbc9cf06d494cfe5c67f078af1605eacb8e4c2c853e9e26455b73de0ee7ccf`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/core/session/src/types.ts#RequestContext`](#persistence-type-packagescoresessionsrctypestsrequestcontext) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"request/context"` |
-
-
-
-### `event:request/header`
-
-SHA-256: `8ea13bcd983eab596dbfd41c5c2b62a0b318b71cd2a987a6fd752c6ced7e4489`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:request/header.data`](#persistence-type-eventrequestheaderdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"request/header"` |
-
-
-
-### `event:request/header.data`
-
-SHA-256: `2f0aefb72ab453c4bf21a6687f436775d359dc6f8f10410fd4c0615b20bd9d76`
-
-来源:[`packages/core/session/src/types.ts:377`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `header` | 必需 | [`packages/core/session/src/types.ts#EpochHeader`](#persistence-type-packagescoresessionsrctypestsepochheader) |
-| `reason` | 必需 | [`packages/core/session/src/types.ts#RequestHeaderReason`](#persistence-type-packagescoresessionsrctypestsrequestheaderreason) |
-| `startsSeries` | 可选 | `true` |
-
-
-
-### `event:request/header.data.header.tools`
-
-SHA-256: `6d63f25a28b70801937a46b1058be5f52d4efbaf3516141470463ae469b59c23`
-
-[`packages/llm/llm/src/types.ts#ToolSchema`](#persistence-type-packagesllmllmsrctypeststoolschema) 的数组。
-
-
-
-### `event:request/header.data.header.tools[0].parameters`
-
-SHA-256: `0aa62ab51b36c0e64b134bd03ba8725d758744180a1a447da49beaad194f219f`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| [`string`] | 索引签名 | `unknown`(不透明) |
-
-
-
-### `event:sandbox/mode`
-
-SHA-256: `516da4cdd6d2f1e5ce488e648578ca51f40e458f707b803e5b24de870e799415`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:sandbox/mode.data`](#persistence-type-eventsandboxmodedata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"sandbox/mode"` |
-
-
-
-### `event:sandbox/mode.data`
-
-SHA-256: `9890113e97dd3541787bfe6704f2b223d3a890b5325ca0acae2b0398909b413e`
-
-来源:[`packages/sandbox/sandbox-policy/src/session-mode.ts:33`](../packages/sandbox/sandbox-policy/src/session-mode.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `mode` | 必需 | [`packages/sandbox/sandbox/src/index.ts#SandboxMode`](#persistence-type-packagessandboxsandboxsrcindextssandboxmode) |
-| `source` | 可选 | `"delegation"` |
-
-
-
-### `event:schedule/change`
-
-SHA-256: `2a7f86849ae54b3398ee49661a757c4fcb59a6192b7036ee2ff514617e13fb42`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/schedule/schedule/src/types.ts#ScheduleChange`](#persistence-type-packagesscheduleschedulesrctypestsschedulechange) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"schedule/change"` |
-
-
-
-### `event:session-log-deepseek/delivery-accepted`
-
-SHA-256: `d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:session-log-deepseek/delivery-accepted.data`](#persistence-type-eventsession-log-deepseekdelivery-accepteddata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"session-log-deepseek/delivery-accepted"` |
-
-
-
-### `event:session-log-deepseek/delivery-accepted.data`
-
-SHA-256: `8bb8c3751a6ce64b61aba1ec7ae798c00a5803c4d868a0430873216c6569ed52`
-
-来源:[`packages/session/session-log-deepseek/src/types.ts:81`](../packages/session/session-log-deepseek/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `sessionFormatVersion` | 可选 | `number` |
-| `sessionId` | 必需 | `string` |
-| `throughSeq` | 必需 | `number` |
-
-
-
-### `event:session/end-seed`
-
-SHA-256: `5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:session/end-seed.data`](#persistence-type-eventsessionend-seeddata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"session/end-seed"` |
-
-
-
-### `event:session/end-seed.data`
-
-SHA-256: `17d1afb770d9941936130996da00dc86782cfef731d8d6526162c301256a4ac3`
-
-来源:[`packages/core/session/src/types.ts:414`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `inherited` | 可选 | `true` |
-
-
-
-### `event:session/title`
-
-SHA-256: `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/session/session-title/src/types.ts#SessionTitleEventData`](#persistence-type-packagessessionsession-titlesrctypestssessiontitleeventdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"session/title"` |
-
-
-
-### `event:session/title-llm-request`
-
-SHA-256: `e0b5bf44c27bbfc6ab144239e3e4169c4d21146645e0e3121bbb359c3bc8591d`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/session/session-title-llm/src/index.ts#SessionTitleLlmRequestEventData`](#persistence-type-packagessessionsession-title-llmsrcindextssessiontitlellmrequesteventdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"session/title-llm-request"` |
-
-
-
-### `event:session/title-llm-request.data.messages`
-
-SHA-256: `478738df7e7d2b103b09fb937817a9302c81076809f2b341169e00a9419c5665`
-
-[`packages/llm/llm/src/message.ts#Message`](#persistence-type-packagesllmllmsrcmessagetsmessage) 的数组。
-
-
-
-### `event:session/title-llm-request.data.messages[0].role`
-
-SHA-256: `acd36e1717d2b4ef9e98a8e6fac17ca1203f3f448e5bca51677f129a8f4999e2`
-
-以下类型之一:
-
-- `"assistant"`
-- `"system"`
-- `"user"`
-
-
-
-### `event:session/title.data.source[0]`
-
-SHA-256: `1b5649238876e28811e80f10ec67a00c197ad3babd4ecc61a22b09064b88c597`
-
-来源:[`packages/session/session-title/src/types.ts:29`](../packages/session/session-title/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `kind` | 必需 | `"fallback"` |
-
-
-
-### `event:session/title.data.source[1]`
-
-SHA-256: `b81e9de81a481b24e1e1f9adf038bfc59e57b4f35ce62f8f1e45284186f4f812`
-
-来源:[`packages/session/session-title/src/types.ts:30`](../packages/session/session-title/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `kind` | 必需 | `"provider"` |
-| `model` | 可选 | [`packages/session/session-title/src/types.ts#SessionTitleModelIdentity`](#persistence-type-packagessessionsession-titlesrctypestssessiontitlemodelidentity) |
-| `provider` | 必需 | `string` |
-
-
-
-### `event:step/end`
-
-SHA-256: `e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:step/end.data`](#persistence-type-eventstependdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"step/end"` |
-
-
-
-### `event:step/end.data`
-
-SHA-256: `ef11a3b7fa2033ae4279545ff8a8a2ee4e301b9b73e5b91654c48e6d08283545`
-
-来源:[`packages/core/session/src/types.ts:294`](../packages/core/session/src/types.ts) · [`packages/core/session/src/types.ts:296`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `step` | 必需 | `number` |
-| `turn` | 必需 | `number` |
-
-
-
-### `event:step/start`
-
-SHA-256: `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:step/end.data`](#persistence-type-eventstependdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"step/start"` |
-
-
-
-### `event:subagent/catalog`
-
-SHA-256: `ae1f7110feeec697b8cab42b68f7709aa7b3279764099dfb53c25890d2e5c871`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/subagent/subagent/src/catalog.ts#SubagentCatalogEvent`](#persistence-type-packagessubagentsubagentsrccatalogtssubagentcatalogevent) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"subagent/catalog"` |
-
-
-
-### `event:subagent/catalog.data[0]`
-
-SHA-256: `5d542ac7bdf13310c46e1a884dec9fb18ad8c6e153cff207e639cd7bf9d7e694`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `childCreatedAt` | 必需 | `number` |
-| `childId` | 必需 | `string` |
-| `label` | 可选 | `string` |
-| `mode` | 必需 | `"one-shot"` |
-| `version` | 必需 | `0` |
-
-
-
-### `event:subagent/catalog.data[1]`
-
-SHA-256: `0e10d7c096b47e61defe372a5fc8bd37d835199410eac44367f95c45082498bd`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `childCreatedAt` | 必需 | `number` |
-| `childId` | 必需 | `string` |
-| `label` | 必需 | `string` |
-| `mode` | 必需 | `"continuable"` |
-| `version` | 必需 | `0` |
-
-
-
-### `event:subagent/descriptor`
-
-SHA-256: `b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/subagent/subagent/src/descriptor.ts#SubagentDescriptorData`](#persistence-type-packagessubagentsubagentsrcdescriptortssubagentdescriptordata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"subagent/descriptor"` |
-
-
-
-### `event:subagent/model-selection-policy`
-
-SHA-256: `a6567ccb2e530606b775371eb4fa31468d72084339968e8b0440a516a23b39dc`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:subagent/model-selection-policy.data`](#persistence-type-eventsubagentmodel-selection-policydata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"subagent/model-selection-policy"` |
-
-
-
-### `event:subagent/model-selection-policy.data`
-
-SHA-256: `0d47a8f3d847243c4488e755ad4cab7a04ac5d4621b9c81865524cf3f4d8536f`
-
-来源:[`packages/subagent/tool-subagent/src/model-selection-state.ts:17`](../packages/subagent/tool-subagent/src/model-selection-state.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `allowedModels` | 必需 | [`event:subagent/model-selection-policy.data.allowedModels`](#persistence-type-eventsubagentmodel-selection-policydataallowedmodels) |
-
-
-
-### `event:subagent/model-selection-policy.data.allowedModels`
-
-SHA-256: `ba77b58995e36f14bb13886b0493d0a1a63d5db10b1a6cd9f6ac65a72cf832ec`
-
-[`packages/session/session-title/src/types.ts#SessionTitleModelIdentity`](#persistence-type-packagessessionsession-titlesrctypestssessiontitlemodelidentity) 的数组。
-
-
-
-### `event:system/message`
-
-SHA-256: `69becfb6b2d3fd5da91518089454cae8ef33f1835637ec44dde35dd077fd4bae`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:system/message.data`](#persistence-type-eventsystemmessagedata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `sourceEventSeqs` | 可选 | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `surfaceOp` | 必需 | [`packages/core/session/src/types.ts#SurfaceOp`](#persistence-type-packagescoresessionsrctypestssurfaceop) |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"system/message"` |
-
-
-
-### `event:system/message.data`
-
-SHA-256: `2074f40221b76c75fd314246db558965dc3477dfb440bcc952b1eedc9778e366`
-
-来源:[`packages/core/session/src/types.ts:317`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `message` | 必需 | [`packages/llm/llm/src/message.ts#SystemMessage`](#persistence-type-packagesllmllmsrcmessagetssystemmessage) |
-| `step` | 必需 | `number` |
-| `turn` | 必需 | `number` |
-
-
-
-### `event:system/message.data.message.source`
-
-SHA-256: `23cf7e0cf3fec1283b60fa15713506169bc9c079a08e124d1cb9733baca80b40`
-
-以下类型之一:
-
-- [`event:agent/inbox/spliced.data.inserted[0].source[4]`](#persistence-type-eventagentinboxspliceddatainserted0source4)
-- [`event:agent/inbox/spliced.data.inserted[0].source[5]`](#persistence-type-eventagentinboxspliceddatainserted0source5)
-- [`event:agent/inbox/spliced.data.inserted[0].source[3]`](#persistence-type-eventagentinboxspliceddatainserted0source3)
-- [`event:agent/inbox/spliced.data.inserted[0].source[2]`](#persistence-type-eventagentinboxspliceddatainserted0source2)
-- [`event:agent/inbox/spliced.data.inserted[0].source[7]`](#persistence-type-eventagentinboxspliceddatainserted0source7)
-- [`event:agent/inbox/spliced.data.inserted[0].source[6]`](#persistence-type-eventagentinboxspliceddatainserted0source6)
-- [`event:agent/inbox/spliced.data.inserted[0].source[1]`](#persistence-type-eventagentinboxspliceddatainserted0source1)
-
-
-
-### `event:team/member`
-
-SHA-256: `4fb59762612c3e3ac3a3bd4f84c9c148d3c3893bd422ba2b201cc039fabd49bc`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:team/member.data`](#persistence-type-eventteammemberdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"team/member"` |
-
-
-
-### `event:team/member.data`
-
-SHA-256: `b1ebd5cda47d90d980bb05bffc3f970c51537b9aff15b3bc3d639811727741b1`
-
-来源:[`packages/experimental/agent-team/src/types.ts:221`](../packages/experimental/agent-team/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `member` | 必需 | [`packages/experimental/agent-team/src/types.ts#TeamMemberSnapshot`](#persistence-type-packagesexperimentalagent-teamsrctypeststeammembersnapshot) |
-| `teamId` | 必需 | `string` |
-| `version` | 必需 | `2` |
-
-
-
-### `event:team/member.data.member.context`
-
-SHA-256: `50cf02d875f8a1f1411f4a6fbcffab9120ccef5f74a47331fbf29480e5f68f48`
-
-以下类型之一:
-
-- `"fork"`
-- `"fresh"`
-
-
-
-### `event:team/message/delivered`
-
-SHA-256: `48f9c19417a1abbedfa59f4667bba36b93ac2db407adf5e84cb3ba0de30942cb`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:team/message/delivered.data`](#persistence-type-eventteammessagedelivereddata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"team/message/delivered"` |
-
-
-
-### `event:team/message/delivered.data`
-
-SHA-256: `0bcfaf5566d271028429ac7b562cb59053c9d78b8ae14708c35fac835108d1b1`
-
-来源:[`packages/experimental/agent-team/src/types.ts:227`](../packages/experimental/agent-team/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `messageId` | 必需 | `string` |
-| `targetId` | 必需 | `string` |
-| `teamId` | 必需 | `string` |
-| `version` | 必需 | `2` |
-
-
-
-### `event:team/message/queued`
-
-SHA-256: `443371ec07a03a82a0e93d93abca3e70b03bca55ba5b01d507030fcb66e8fbb4`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:team/message/queued.data`](#persistence-type-eventteammessagequeueddata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"team/message/queued"` |
-
-
-
-### `event:team/message/queued.data`
-
-SHA-256: `0c3f4d2248d9bc9700e2d7253fa71aa9935f5c39af6f11de5727f08cccaf8383`
-
-来源:[`packages/experimental/agent-team/src/types.ts:225`](../packages/experimental/agent-team/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `message` | 必需 | [`packages/experimental/agent-team/src/types.ts#TeamMessageSnapshot`](#persistence-type-packagesexperimentalagent-teamsrctypeststeammessagesnapshot) |
-| `teamId` | 必需 | `string` |
-| `version` | 必需 | `2` |
-
-
-
-### `event:team/task`
-
-SHA-256: `d595ec73b32b016a6055333c67a5d646032b22e672da1d4a09c5b1ae398a093a`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:team/task.data`](#persistence-type-eventteamtaskdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"team/task"` |
-
-
-
-### `event:team/task.data`
-
-SHA-256: `a40d12070f6f4a124f32fb3cc86e7857554702e32f0eda3080a25c4b9ac9b18c`
-
-来源:[`packages/experimental/agent-team/src/types.ts:223`](../packages/experimental/agent-team/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `task` | 必需 | [`packages/experimental/agent-team/src/types.ts#TeamTaskSnapshot`](#persistence-type-packagesexperimentalagent-teamsrctypeststeamtasksnapshot) |
-| `teamId` | 必需 | `string` |
-| `version` | 必需 | `2` |
-
-
-
-### `event:todo/write`
-
-SHA-256: `b978cff734e62143eb56c9125423ec275405eda969802d42aaf73ecb987d3b26`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:todo/write.data`](#persistence-type-eventtodowritedata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"todo/write"` |
-
-
-
-### `event:todo/write.data`
-
-SHA-256: `79ddc907312f97cf9553d4841e8b3fc937097bd8d97900a790efad3c05255e99`
-
-来源:[`packages/todo/tool-todo/src/types.ts:31`](../packages/todo/tool-todo/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `todos` | 必需 | [`event:todo/write.data.todos`](#persistence-type-eventtodowritedatatodos) |
-
-
-
-### `event:todo/write.data.todos`
-
-SHA-256: `4b7ddaf3710b88ff9b8df66304f5f97bf03688fd19730eedc2e9535203c820ea`
-
-[`packages/todo/tool-todo/src/types.ts#TodoItem`](#persistence-type-packagestodotool-todosrctypeststodoitem) 的数组。
-
-
-
-### `event:todo/write.data.todos[0].status`
-
-SHA-256: `fd0d91a1f9dd2efb8959bdf5e07f8f0a98b1cdfa38ce8d4732ebde0b44c3abd4`
-
-以下类型之一:
-
-- `"completed"`
-- `"in_progress"`
-- `"pending"`
-
-
-
-### `event:tool-workflow/agent-end`
-
-SHA-256: `babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/workflow/tool-workflow/src/types.ts#ToolWorkflowAgentEndData`](#persistence-type-packagesworkflowtool-workflowsrctypeststoolworkflowagentenddata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"tool-workflow/agent-end"` |
-
-
-
-### `event:tool-workflow/agent-start`
-
-SHA-256: `5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/workflow/tool-workflow/src/types.ts#ToolWorkflowAgentStartData`](#persistence-type-packagesworkflowtool-workflowsrctypeststoolworkflowagentstartdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"tool-workflow/agent-start"` |
-
-
-
-### `event:tool-workflow/run-end`
-
-SHA-256: `42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/workflow/tool-workflow/src/types.ts#ToolWorkflowRunEndData`](#persistence-type-packagesworkflowtool-workflowsrctypeststoolworkflowrunenddata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"tool-workflow/run-end"` |
-
-
-
-### `event:tool-workflow/run-start`
-
-SHA-256: `c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/workflow/tool-workflow/src/types.ts#ToolWorkflowRunStartData`](#persistence-type-packagesworkflowtool-workflowsrctypeststoolworkflowrunstartdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"tool-workflow/run-start"` |
-
-
-
-### `event:tool/call`
-
-SHA-256: `3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:tool/call.data`](#persistence-type-eventtoolcalldata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"tool/call"` |
-
-
-
-### `event:tool/call.data`
-
-SHA-256: `e4c18e294232c3ba6c9f1999f168263cc55956147cfe4121720899be8e52edd1`
-
-来源:[`packages/core/session/src/types.ts:348`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `arguments` | 必需 | `string` |
-| `callId` | 必需 | `string` |
-| `name` | 必需 | `string` |
-| `step` | 必需 | `number` |
-| `turn` | 必需 | `number` |
-
-
-
-### `event:tool/ptc-dispatch`
-
-SHA-256: `b33142af8176323ffbb20762541be81c1d51b60a60887803836e0b146e5bef0c`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/core/tools/src/types.ts#PtcDispatchEventData`](#persistence-type-packagescoretoolssrctypestsptcdispatcheventdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"tool/ptc-dispatch"` |
-
-
-
-### `event:tool/ptc-dispatch-start`
-
-SHA-256: `ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/core/tools/src/types.ts#PtcDispatchStartEventData`](#persistence-type-packagescoretoolssrctypestsptcdispatchstarteventdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"tool/ptc-dispatch-start"` |
-
-
-
-### `event:tool/ptc-dispatch.data.error`
-
-SHA-256: `a81059ca06999da1e712414520c2c65e491d052fcf9640fae20aa38f0a5dc735`
-
-来源:[`packages/core/session/src/types.ts:370`](../packages/core/session/src/types.ts) · [`packages/core/tools/src/types.ts:24`](../packages/core/tools/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `code` | 必需 | `string` |
-| `name` | 必需 | `string` |
-| `reason` | 可选 | `string` |
-
-
-
-### `event:tool/result`
-
-SHA-256: `29af48b840d0cd9e48b6f50bf3b354f8f6340607c5b99220a48e74f60beac9e2`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:tool/result.data`](#persistence-type-eventtoolresultdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `sourceEventSeqs` | 可选 | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `surfaceOp` | 必需 | [`packages/core/session/src/types.ts#SurfaceOp`](#persistence-type-packagescoresessionsrctypestssurfaceop) |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"tool/result"` |
-
-
-
-### `event:tool/result.data`
-
-SHA-256: `356aad27134a0e31af67c994ff8b9e4b91acfb6c4917b3bc1f7a62bbf82794d5`
-
-来源:[`packages/core/session/src/types.ts:362`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `error` | 可选 | [`event:tool/ptc-dispatch.data.error`](#persistence-type-eventtoolptc-dispatchdataerror) |
-| `message` | 必需 | [`packages/llm/llm/src/message.ts#ToolResultMessage`](#persistence-type-packagesllmllmsrcmessagetstoolresultmessage) |
-| `meta` | 可选 | [`event:tool/result.data.meta`](#persistence-type-eventtoolresultdatameta) |
-| `step` | 必需 | `number` |
-| `turn` | 必需 | `number` |
-
-
-
-### `event:tool/result.data.message.content`
-
-SHA-256: `8d6a011f3ef7096a4a922ef420458419ff6b20e1eaeece5d331db7585d2f08d6`
-
-| 位置 | 存在性 | 类型 |
-|---|---|---|
-| 0 | 必需 | [`packages/llm/llm/src/types.ts#ToolResultBlock`](#persistence-type-packagesllmllmsrctypeststoolresultblock) |
-
-
-
-### `event:tool/result.data.meta`
-
-SHA-256: `c592ce75aab73fcab19c1d7845684c72cf402b78d2e1f2833a58ecf9f3598ed6`
-
-来源:[`packages/util/values/src/index.ts:4`](../packages/util/values/src/index.ts)
-
-以下类型之一:
-
-- [`event:tool/result.data.meta[5]`](#persistence-type-eventtoolresultdatameta5)
-- [`event:tool/result.data.meta[5][0][6]`](#persistence-type-eventtoolresultdatameta506)
-- `string`
-- `boolean`
-- `null`
-- `number`
-
-
-
-### `event:tool/result.data.meta[5]`
-
-SHA-256: `72ec79127a9c0d0241b1106a74cc2b24c81ce467170f1c3c93f7b71a9496d227`
-
-[`event:tool/result.data.meta`](#persistence-type-eventtoolresultdatameta) 的数组。
-
-
-
-### `event:tool/result.data.meta[5][0][6]`
-
-SHA-256: `529e0ccd0e34079ab4ff21ed87f810cee0388246263bf22e8aba5986b56fae05`
-
-来源:[`packages/util/values/src/index.ts:4`](../packages/util/values/src/index.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| [`string`] | 索引签名 | [`event:tool/result.data.meta`](#persistence-type-eventtoolresultdatameta) |
-
-
-
-### `event:turn/end`
-
-SHA-256: `0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:turn/end.data`](#persistence-type-eventturnenddata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"turn/end"` |
-
-
-
-### `event:turn/end.data`
-
-SHA-256: `e481c46af3813e0010558e93f578b2986acd658404cec2d1679e3ac2a6c48654`
-
-来源:[`packages/core/session/src/types.ts:292`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `reason` | 必需 | [`packages/core/session/src/types.ts#TurnEndReason`](#persistence-type-packagescoresessionsrctypeststurnendreason) |
-| `turn` | 必需 | `number` |
-
-
-
-### `event:turn/end.data.reason[0]`
-
-SHA-256: `b6ef9c6210be8350cd465f485cf520031fffa6bf3809c61a1e713e834c5982d0`
-
-来源:[`packages/core/session/src/types.ts:201`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `kind` | 必需 | `"completed"` |
-
-
-
-### `event:turn/end.data.reason[1]`
-
-SHA-256: `0a30c3be336cdd4f8f34e66543a3d46d611c43986edd9b3ce6cbb9b721d3b5d3`
-
-来源:[`packages/core/session/src/types.ts:203`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `kind` | 必需 | `"aborted"` |
-| `reason` | 必需 | [`packages/core/session/src/types.ts#TurnEndCancelCause`](#persistence-type-packagescoresessionsrctypeststurnendcancelcause) |
-
-
-
-### `event:turn/end.data.reason[1].reason[1]`
-
-SHA-256: `6c03546143cdf6ae88f1745ac98c5139efa1588d1415249bbc5f3104d32ab800`
-
-来源:[`packages/core/session/src/types.ts:190`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `kind` | 必需 | `"parent"` |
-
-
-
-### `event:turn/end.data.reason[1].reason[2]`
-
-SHA-256: `6c5a37d42ebdb12db4410699259335f1e149e3a0260425684c00b153afc8990d`
-
-来源:[`packages/core/session/src/types.ts:191`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `kind` | 必需 | `"hook"` |
-| `reason` | 必需 | `string` |
-
-
-
-### `event:turn/end.data.reason[1].reason[3]`
-
-SHA-256: `4bb451330ff699f36b45539ceb0eb2606ead72084e2c5bb637c36cc80e2252db`
-
-来源:[`packages/core/session/src/types.ts:192`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `kind` | 必需 | `"disposed"` |
-
-
-
-### `event:turn/end.data.reason[1].reason[4]`
-
-SHA-256: `eaa71be0fbf0f702df8ea6c11d0aa2f9782263d45a10d0fb14eda662f4bfe04c`
-
-来源:[`packages/core/session/src/types.ts:195`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `kind` | 必需 | `"legacy"` |
-
-
-
-### `event:turn/end.data.reason[2]`
-
-SHA-256: `023a355b2be0d688fb6e4df8388dadb942761d46cfe96d0f499aae9631a159d4`
-
-来源:[`packages/core/session/src/types.ts:205`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `kind` | 必需 | `"blocked"` |
-
-
-
-### `event:turn/end.data.reason[3]`
-
-SHA-256: `79650cfa10aa3c52440328d85e8a25f0ffadc8d7efd784e3c0819d8bb74a1985`
-
-来源:[`packages/core/session/src/types.ts:211`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `error` | 必需 | [`packages/llm/llm/src/types.ts#LlmFailure`](#persistence-type-packagesllmllmsrctypestsllmfailure) |
-| `kind` | 必需 | `"error"` |
-
-
-
-### `event:turn/end.data.reason[5]`
-
-SHA-256: `56b7c047694875a843ba020dfea3c8380d54ae4ff88ab349e72004dc21e07c23`
-
-来源:[`packages/core/session/src/types.ts:220`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `kind` | 必需 | `"interrupted"` |
-
-
-
-### `event:turn/end.data.reason[6]`
-
-SHA-256: `ec8b5ff7c77ca6893ac7ba5a0c5b2aefeb52f12c64450b7359660c2a7e8a53d7`
-
-来源:[`packages/core/session/src/types.ts:227`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `kind` | 必需 | `"forked"` |
-
-
-
-### `event:turn/start`
-
-SHA-256: `aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:turn/start.data`](#persistence-type-eventturnstartdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"turn/start"` |
-
-
-
-### `event:turn/start.data`
-
-SHA-256: `f90eb4ab2d3897bc20c521a038e3119d581f791ec974b1a0004f63a8ab9e232d`
-
-来源:[`packages/core/session/src/types.ts:283`](../packages/core/session/src/types.ts) · [`packages/deliverables/workspace-changes/src/types.ts:106`](../packages/deliverables/workspace-changes/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `turn` | 必需 | `number` |
-
-
-
-### `event:user/message`
-
-SHA-256: `314765bdff29c7862fb6ce820f1773563ba3094a680d163ea21180a2591b8578`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/llm/llm/src/message.ts#UserMessage`](#persistence-type-packagesllmllmsrcmessagetsusermessage) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `sourceEventSeqs` | 可选 | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `surfaceOp` | 必需 | [`packages/core/session/src/types.ts#SurfaceOp`](#persistence-type-packagescoresessionsrctypestssurfaceop) |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"user/message"` |
-
-
-
-### `event:web/deepseek-search-llm-request`
-
-SHA-256: `cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`packages/web/web-search-deepseek/src/provider.ts#DeepSeekSearchLlmRequest`](#persistence-type-packageswebweb-search-deepseeksrcprovidertsdeepseeksearchllmrequest) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"web/deepseek-search-llm-request"` |
-
-
-
-### `event:web/deepseek-search-llm-request.data.body`
-
-SHA-256: `930a6567a10bb62ddd157bd8abdf4b182810c8c3b49d91309b3b009a5fed9731`
-
-来源:[`packages/web/web-search-deepseek/src/provider.ts:61`](../packages/web/web-search-deepseek/src/provider.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `max_tokens` | 必需 | `number` |
-| `messages` | 必需 | [`event:web/deepseek-search-llm-request.data.body.messages`](#persistence-type-eventwebdeepseek-search-llm-requestdatabodymessages) |
-| `model` | 必需 | `string` |
-| `tools` | 必需 | [`event:web/deepseek-search-llm-request.data.body.tools`](#persistence-type-eventwebdeepseek-search-llm-requestdatabodytools) |
-
-
-
-### `event:web/deepseek-search-llm-request.data.body.messages`
-
-SHA-256: `b993441f8ce7d27b80e619e113e232ae8e62d3d5a8340f6bfe12d8c4c018e62f`
-
-| 位置 | 存在性 | 类型 |
-|---|---|---|
-| 0 | 必需 | [`event:web/deepseek-search-llm-request.data.body.messages[0]`](#persistence-type-eventwebdeepseek-search-llm-requestdatabodymessages0) |
-
-
-
-### `event:web/deepseek-search-llm-request.data.body.messages[0]`
-
-SHA-256: `9a2a9029f8d7ede05336980d8342737557f487b913bfd28853d0ab5214600ab5`
-
-来源:[`packages/web/web-search-deepseek/src/provider.ts:64`](../packages/web/web-search-deepseek/src/provider.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `content` | 必需 | [`event:web/deepseek-search-llm-request.data.body.messages[0].content`](#persistence-type-eventwebdeepseek-search-llm-requestdatabodymessages0content) |
-| `role` | 必需 | `"user"` |
-
-
-
-### `event:web/deepseek-search-llm-request.data.body.messages[0].content`
-
-SHA-256: `8f6d609794bf5afc01d7ccf3e03811d32f4b8047f58a2c9a98db0154c2ad7cb9`
-
-| 位置 | 存在性 | 类型 |
-|---|---|---|
-| 0 | 必需 | [`event:web/deepseek-search-llm-request.data.body.messages[0].content[0]`](#persistence-type-eventwebdeepseek-search-llm-requestdatabodymessages0content0) |
-
-
-
-### `event:web/deepseek-search-llm-request.data.body.messages[0].content[0]`
-
-SHA-256: `4e887768586528565381dadbddee6cef555874148089f4579e0b4b1ad096fc9c`
-
-来源:[`packages/llm/llm/src/types.ts:61`](../packages/llm/llm/src/types.ts) · [`packages/web/web-search-deepseek/src/provider.ts:66`](../packages/web/web-search-deepseek/src/provider.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `text` | 必需 | `string` |
-| `type` | 必需 | `"text"` |
-
-
-
-### `event:web/deepseek-search-llm-request.data.body.tools`
-
-SHA-256: `4aed17ec726b5397c29f6cb4bcd7905dc1a12bb6140f1657f073cd24380f2af8`
-
-| 位置 | 存在性 | 类型 |
-|---|---|---|
-| 0 | 必需 | [`event:web/deepseek-search-llm-request.data.body.tools[0]`](#persistence-type-eventwebdeepseek-search-llm-requestdatabodytools0) |
-
-
-
-### `event:web/deepseek-search-llm-request.data.body.tools[0]`
-
-SHA-256: `2d11ca7b0d4493e244b74eba093227866b33249841e59a1e9bf56afed38604c3`
-
-来源:[`packages/web/web-search-deepseek/src/provider.ts:71`](../packages/web/web-search-deepseek/src/provider.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `max_uses` | 必需 | `number` |
-| `name` | 必需 | `"web_search"` |
-| `type` | 必需 | `"web_search_20250305"` |
-
-
-
-### `event:workspace/changes`
-
-SHA-256: `e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `data` | 必需 | [`event:turn/start.data`](#persistence-type-eventturnstartdata) |
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `"workspace/changes"` |
-
-
+
### `"every"`
@@ -4079,7 +1666,7 @@ SHA-256: `e42b0f40b5d0b628c6e1c44a8fb9eda0780037a81959e1b93d2dfb47b46b0e87`
`"every"`
-
+
### `"failed"`
@@ -4087,7 +1674,7 @@ SHA-256: `b57a2889408de36e4516807194c73bdecd51a92f633ccd05db81bf049200f420`
`"failed"`
-
+
### `"fallback"`
@@ -4095,15 +1682,7 @@ SHA-256: `d6e654b88b584fcdf290a56802b1730bc7b9847ae86baa4265ab7769eb48990c`
`"fallback"`
-
-
-### `false`
-
-SHA-256: `0c4205180f75b9ee1e0d878bd9a9851628b5dc18448486389d9c5fdc3f1ccda3`
-
-`false`
-
-
+
### `"feedback/message-delete"`
@@ -4111,7 +1690,7 @@ SHA-256: `44818000e56acb97afdb5045ce235eb55e3fb1ccabc9fc7d0750bb38f36a7f8e`
`"feedback/message-delete"`
-
+
### `"feedback/message-put"`
@@ -4119,7 +1698,7 @@ SHA-256: `6cda0d6d3b4336d83998fe580628426df81c2afbab5d768b8813b56d569120e8`
`"feedback/message-put"`
-
+
### `"feedback/record"`
@@ -4127,7 +1706,7 @@ SHA-256: `c99e20441bf15341e9db54385e558e5c03d21dff2eb1ac08ccbf47c2d8747954`
`"feedback/record"`
-
+
### `"file"`
@@ -4135,7 +1714,7 @@ SHA-256: `277b61f9c6f8170425fa6ffe06cfa14376757a896a4749cb82a687d7364c4fc9`
`"file"`
-
+
### `"finish"`
@@ -4143,7 +1722,7 @@ SHA-256: `bd499eac047efe091a4df7382eadd06d25cf0cb31fee3981e8b24d85762841cd`
`"finish"`
-
+
### `"fork"`
@@ -4151,7 +1730,7 @@ SHA-256: `2da725e554cd89301d829ed9dc45a572c3cd1b93b5e91d0d71f007976d8a0863`
`"fork"`
-
+
### `"forked"`
@@ -4159,7 +1738,7 @@ SHA-256: `b2245a906e13aa94f2d3cc6cf7b04cfa0267f7b7f4d468de1b00b1a314e54626`
`"forked"`
-
+
### `"fresh"`
@@ -4167,7 +1746,7 @@ SHA-256: `dd2780e7e07684332f7a9ab047237798d260e7eaffb1321cb38eca695d184c3d`
`"fresh"`
-
+
### `"goal"`
@@ -4175,7 +1754,7 @@ SHA-256: `b815d7b91cdd9fc6ccc7dcba05cfc5ce1d55fab5fc0c0801803cd3630cedb602`
`"goal"`
-
+
### `"goal/change"`
@@ -4183,7 +1762,7 @@ SHA-256: `237c004c73b6b288246816e0d7fde16e09c63a47aa3b1227383d7afe58666163`
`"goal/change"`
-
+
### `"hook"`
@@ -4191,7 +1770,7 @@ SHA-256: `dbdafceb9a900183cccc80596498d386f3bf7bddead2b8cfde68453aa4739edc`
`"hook"`
-
+
### `"hook/invoked"`
@@ -4199,7 +1778,7 @@ SHA-256: `b9305f0ea75ccd6a6061c27fde19f2ab85534f9f3c1a717b573b077ebae0f611`
`"hook/invoked"`
-
+
### `"hook/result"`
@@ -4207,7 +1786,7 @@ SHA-256: `a3a259a1aa5401af786ce08c4a8419681d3000d73467991b5fc563389bc4ebd2`
`"hook/result"`
-
+
### `"image"`
@@ -4215,7 +1794,7 @@ SHA-256: `fb8b6a2e53cb9cf44c551176de0fb77d1ddc60037b99a891ff8a860b6d5c29a0`
`"image"`
-
+
### `"image/gif"`
@@ -4223,7 +1802,7 @@ SHA-256: `de30b1fa12c75f81df6aa4096e1595296d2d04e2be14a7c29849cf8028b79048`
`"image/gif"`
-
+
### `"image/jpeg"`
@@ -4231,7 +1810,7 @@ SHA-256: `3f74ba74acd10644c1ed6947a411d8088bd2cfac74f61bb8540f96d68e31f004`
`"image/jpeg"`
-
+
### `"image/offload"`
@@ -4239,7 +1818,7 @@ SHA-256: `9acbe713f3f641921dd3333b240aa72e176d795327c24e8d9db9b68b16771b49`
`"image/offload"`
-
+
### `"image/png"`
@@ -4247,7 +1826,7 @@ SHA-256: `58f94390b982f8a5ac1f4f235ba612557f4a1dc4a995d8b1cec63ce7639decb0`
`"image/png"`
-
+
### `"image/webp"`
@@ -4255,7 +1834,11 @@ SHA-256: `ebb768d85ec87fb68e42fc14fd7d8535b5ac11791b14d04c6770180f0a719bf8`
`"image/webp"`
-
+
+
+
+
+
### `"in-history"`
@@ -4265,7 +1848,7 @@ SHA-256: `f311671e07bc7fa645a0b6597de9966b97147956565296ba76a36543801b66c5`
`"in-history"`
-
+
### `"in_progress"`
@@ -4273,7 +1856,7 @@ SHA-256: `94c56aeb1564ad735eb773d88636b40761d063efa1610f1308004d32923f5378`
`"in_progress"`
-
+
### `"initial"`
@@ -4281,7 +1864,7 @@ SHA-256: `e7ce49f12953583fad217bf80fb9f1463acff2c3e9471a823782661675fb124c`
`"initial"`
-
+
### `"instruction-following"`
@@ -4289,7 +1872,7 @@ SHA-256: `e4cac694f8b6e1d52e48c699464f1c4c26111ef87e558f7931040d00fdc8d486`
`"instruction-following"`
-
+
### `"instructions"`
@@ -4297,7 +1880,7 @@ SHA-256: `fee1caf8ab6a65c1bc981f5a1730164490f22a2a89ffa3d0b76f1f432c44c8b5`
`"instructions"`
-
+
### `"interrupted"`
@@ -4305,7 +1888,7 @@ SHA-256: `69d238a6e9b08d67f601b1825962963d8d3523cb69ebf6208c697dc5d058c199`
`"interrupted"`
-
+
### `"legacy"`
@@ -4313,7 +1896,7 @@ SHA-256: `ad3b56aa2fc1ad4250e7399295d34a8eae592e1907e85852e2291b2e498a30bc`
`"legacy"`
-
+
### `"llm/retry"`
@@ -4321,7 +1904,7 @@ SHA-256: `611cae9a3539733aa0c42f66035a7d90f19dcbbdfb5d9e3b628b13705253942d`
`"llm/retry"`
-
+
### `"llm/retry-started"`
@@ -4329,7 +1912,7 @@ SHA-256: `4ae007ed190a72c92138b22d059b83208079c7551ca13fb59ae8cf5e23693964`
`"llm/retry-started"`
-
+
### `"max-tokens"`
@@ -4337,7 +1920,7 @@ SHA-256: `68141cbe3994a5ffcd064c07c75996538437fd9dbf77ce8a2927e89ec577fabe`
`"max-tokens"`
-
+
### `"model"`
@@ -4345,7 +1928,7 @@ SHA-256: `2765e9119edf5816ac1ab4c95c5ee32c90403f3742962eff11544f7752d59d2e`
`"model"`
-
+
### `"model/selection"`
@@ -4353,7 +1936,7 @@ SHA-256: `1d5f04a03ea75fc8eeece544129eba0f49f0c82046e9c404461920390135c7b2`
`"model/selection"`
-
+
### `"negative"`
@@ -4361,7 +1944,7 @@ SHA-256: `b1f62380f6746fedd629e71065e3583cef83334875b499ac9665c2eb87acfbf5`
`"negative"`
-
+
### `"never"`
@@ -4369,7 +1952,7 @@ SHA-256: `1571525adc95a24e5d25b5a6440df401cd7cdd881b745178e85f5a333435cd1b`
`"never"`
-
+
### `"next-step"`
@@ -4377,7 +1960,7 @@ SHA-256: `3e2ece4967cfebe95f450a93f45523dff99d6749f6269f2f60f84dfecfcf3693`
`"next-step"`
-
+
### `"next-turn"`
@@ -4385,7 +1968,7 @@ SHA-256: `62ecb62dc0fe1b5e70217f8a80c39256a40ee3a1917be14e5ca899d20c35f7fd`
`"next-turn"`
-
+
### `"normal"`
@@ -4393,7 +1976,7 @@ SHA-256: `3bc287e765d58dc3a22672a0495a6cfd561220dd38fbaecef80aa95b96caed79`
`"normal"`
-
+
### `"notice"`
@@ -4401,25 +1984,7 @@ SHA-256: `e8de0f457fed5b9ff94dc4950b59ef75fd8ba8af665cc7899485924a62653367`
`"notice"`
-
-
-### `null`
-
-SHA-256: `938f7c7357bc403ea3b281a9dd016939df7a0880fc8db12612585be574d0d615`
-
-`null`
-
-
-
-### `number`
-
-SHA-256: `0657d3ca5ac4e7bf79b00bcf860b1c7159d01a9da137497221ec2f1776e365f7`
-
-来源:[`packages/core/session/src/types.ts:31`](../packages/core/session/src/types.ts)
-
-`number`
-
-
+
### `"one-shot"`
@@ -4427,7 +1992,7 @@ SHA-256: `d28765f87d6b6ab408e0b2f3e7e297791b004b806d8e302c49903ebae815feb2`
`"one-shot"`
-
+
### `"other"`
@@ -4435,83 +2000,753 @@ SHA-256: `9d80129e13edfb6feb03ed327e6085c6ef60b97ad074244b2f5fd4667424a6a4`
`"other"`
-
+
-### `packages/api/session-controller/src/types.ts#ModelSelection`
+### `"parent"`
-SHA-256: `f09e5e7acf5ff5ccd193ff2eeec015fa2ff7c29d98bc465f8c3302058d47e29b`
+SHA-256: `e6411b09c1d982f789bf741ca74e2bea69df56029847f86a6148e722039ee732`
-来源:[`packages/api/session-controller/src/types.ts:86`](../packages/api/session-controller/src/types.ts)
+`"parent"`
+
+
+
+### `"pause"`
+
+SHA-256: `1d8798b1a5e8c545ee4dcd2b4e75c0b4c9ffd985e4744c6d1a1aab992f859721`
+
+`"pause"`
+
+
+
+### `"paused"`
+
+SHA-256: `c43b119ce579b3e9983a0d3adc4ba402ebb9ba773d89738a2dab01ecf5813943`
+
+`"paused"`
+
+
+
+### `"pending"`
+
+SHA-256: `234142ee4f996f38cc9fa3b8b3e3de29b03c9aefe5ebf6c224eddd564505aa85`
+
+`"pending"`
+
+
+
+### `"permission/preset"`
+
+SHA-256: `ae63d9d1080ed8945031594d93f8d96651d7101b848719cc3e1475875cd3d649`
+
+`"permission/preset"`
+
+
+
+### `"plan/mode"`
+
+SHA-256: `f634871d1e18b1eb199497ac8ab72d3964f48d03fbf611dc7521a1970cf429d9`
+
+`"plan/mode"`
+
+
+
+### `"plugin"`
+
+SHA-256: `e654d28d1e6c471147310d2fba396d00969cfe6ed9022626d3f2c2312e0b1cbb`
+
+`"plugin"`
+
+
+
+### `"positive"`
+
+SHA-256: `df5d9709b7db2a72510dc52052a23f0c38f39730af1504bab8bccabc14fae528`
+
+`"positive"`
+
+
+
+### `"product-interaction"`
+
+SHA-256: `0341d4c3dfcd53253cdc1e789d9130d3cd848b6f8b0706bf92f313a68b39ff23`
+
+`"product-interaction"`
+
+
+
+### `"provider"`
+
+SHA-256: `e31572180d6b28b73f073ad30ae19d5d82982d3daf984723984e23da1e7c459a`
+
+`"provider"`
+
+
+
+### `"provisioning"`
+
+SHA-256: `871bfd6f7bb91061246768d3377f3fd58d6b8ea7c31f44c714ae7ab215650d62`
+
+`"provisioning"`
+
+
+
+### `"read-only"`
+
+SHA-256: `12a0cfa619ac4a5fc6c3e8e359c8dae15769edc61497a575935c78d5842f8e42`
+
+`"read-only"`
+
+
+
+### `"reasoning"`
+
+SHA-256: `3c2535ca0a2062f172f15344f8040755002b5ac506cf94fc4ebaa822b15feb8c`
+
+`"reasoning"`
+
+
+
+### `"reasoning-chunks"`
+
+SHA-256: `688e853dc149f0d30b31765c12ec7e3be74169bdf1a4c6463a10b945d50cc1b8`
+
+`"reasoning-chunks"`
+
+
+
+### `"reasoning-delta"`
+
+SHA-256: `6f091fe32ab24407236090ca9d710bbaf59bb57466e9f3b8f1f6e4862bc863c6`
+
+`"reasoning-delta"`
+
+
+
+### `"recall"`
+
+SHA-256: `383cf73ae4748e5beb281ae74857ba1ffb92ae01075b9fbf51af78b666007a8f`
+
+`"recall"`
+
+
+
+### `"rejected"`
+
+SHA-256: `fab35c4520883c0d69e42d079c9f543fc5ac7a2d15b537b5572fcd99059c7018`
+
+`"rejected"`
+
+
+
+### `"relay"`
+
+SHA-256: `16d0507cb94b4cfc84a87446b1ba7652d6ec1d65ee1684789e747e30d542800e`
+
+`"relay"`
+
+
+
+### `"remove"`
+
+SHA-256: `7382c4fc95fe8c5db65ca4d9da572b115d0dbb818b7f32c22ab040318ffbb4bc`
+
+`"remove"`
+
+
+
+### `"replace"`
+
+SHA-256: `f6cb462f808309e315fea634f1ed86268b8346bbcee6774d9097ca6eed7ac1f8`
+
+`"replace"`
+
+
+
+### `"request/context"`
+
+SHA-256: `70b082fe78991edf13cf66e1b4d06cd2dcff9cacfd76f8cfb996bfb61939e7b2`
+
+`"request/context"`
+
+
+
+### `"request/header"`
+
+SHA-256: `3e0eff5946255ff05d88a10839c60305135801f97794ea48d409f8503303317e`
+
+`"request/header"`
+
+
+
+### `"resource-cost"`
+
+SHA-256: `5bd310104cfe448e530beb11422d2f791e2e32e8e95fdc528a15f9ca693dae75`
+
+`"resource-cost"`
+
+
+
+### `"resume"`
+
+SHA-256: `34d1ab5c5df378186d6054b1a1beea9a41e41965d6f336f0bc0025c441a82e66`
+
+`"resume"`
+
+
+
+### `"sandbox/mode"`
+
+SHA-256: `ca085dba2c877feceebf3c62f9d39c6c2a4d2314d97b94b3927a780fe8fe2bb2`
+
+`"sandbox/mode"`
+
+
+
+### `"schedule/change"`
+
+SHA-256: `0e7b2a97f54f1afdb8cdfad1635abe9145327db539bfb69b4045c19d8c17755d`
+
+`"schedule/change"`
+
+
+
+### `"security-privacy-permission"`
+
+SHA-256: `07eccc9ea2f9b5439d76cc77d5e062936677d43f07a23da749819b0a22ee36b7`
+
+`"security-privacy-permission"`
+
+
+
+### `"series"`
+
+SHA-256: `4f507598cf476214aa7646ce7841a7064a9dcb05d0a1eaaefaf79c2b738f160f`
+
+`"series"`
+
+
+
+### `"service-stability"`
+
+SHA-256: `7180844e1066230c5e891f1b9ccd942423b0fe48aac6ded7eef2a285b288a732`
+
+`"service-stability"`
+
+
+
+### `"session"`
+
+SHA-256: `e41bdebe246abe17154de7e7a1d81035437eee8d20e7f1edff0d91e2598ad828`
+
+`"session"`
+
+
+
+### `"session-log-deepseek/delivery-accepted"`
+
+SHA-256: `47e5d84f1a93450a78c7f3954b43990d0f629af7c034a56313e5deb63e772c1b`
+
+`"session-log-deepseek/delivery-accepted"`
+
+
+
+### `"session-reference"`
+
+SHA-256: `7f13860ee89a2d35ce09f958e85a04566cd59cb1de1d73a9619a9b631961dc71`
+
+`"session-reference"`
+
+
+
+### `"session/end-seed"`
+
+SHA-256: `1c2686c0682e7bc51d61117b2652bd4a80707e331aa276d6ef915ae32534a330`
+
+`"session/end-seed"`
+
+
+
+### `"session/title"`
+
+SHA-256: `7a651f3b672c52fb615f22c0ce9cb3cc5b22aad92e6bbeefb0808fd7b9233a50`
+
+`"session/title"`
+
+
+
+### `"session/title-llm-request"`
+
+SHA-256: `587bb11da730e06aa52b62c087d217d6f8f22459b25f31cb9e1e1baf17944e5e`
+
+`"session/title-llm-request"`
+
+
+
+### `"set"`
+
+SHA-256: `b765ee31033cea463863faf3fc6a0a1b85c47c6a2f13fe1ce833abe56105114b`
+
+`"set"`
+
+
+
+### `"skill-catalog"`
+
+SHA-256: `6ebcc2dbec9f2dabca9f668ae6d39e877899b180740570f453409db339221df3`
+
+`"skill-catalog"`
+
+
+
+### `"skill-invocation"`
+
+SHA-256: `1922cd79a70806c17758185a6ef0458bc1fb3900363906733421c16414da2509`
+
+`"skill-invocation"`
+
+
+
+### `"snapshot"`
+
+SHA-256: `6f9e00383836275e46c0a9915767f9bb561be5fc30aae490174908a93e99a912`
+
+`"snapshot"`
+
+
+
+### `"step/end"`
+
+SHA-256: `c219efbdfd53b836786202ab4532913d555798f0a8615a4e9629736e3799fb70`
+
+`"step/end"`
+
+
+
+### `"step/start"`
+
+SHA-256: `2c64d4bc7264fd3f8bed47e96ab8a593bce05a1e4e1c436dcd244a3b7e0c2a9d`
+
+`"step/start"`
+
+
+
+### `"stop"`
+
+SHA-256: `57f3f606ff8b6c84d9c443faace9d1dd10cca0354f37a4f515ef075f7c351b90`
+
+`"stop"`
+
+
+
+### `"subagent"`
+
+SHA-256: `aacda84a69739238aa782eea902d3073017d9d74b9808de2bf5a83c9738cbdc6`
+
+`"subagent"`
+
+
+
+### `"subagent-settled"`
+
+SHA-256: `bf16d2e98a7f13894ded2cffe5ce857bf473954a0e3c0ed9bc7739e2e1c7b78a`
+
+`"subagent-settled"`
+
+
+
+### `"subagent/catalog"`
+
+SHA-256: `44c8c77aa9aa100b0d74d2deee85474b29faa6eee0ac0f662f7abe9931ddd7f2`
+
+`"subagent/catalog"`
+
+
+
+### `"subagent/descriptor"`
+
+SHA-256: `5ebce1317eacd2c148456627a09668e927ee15c204f0643f5ea76b46b54a2647`
+
+`"subagent/descriptor"`
+
+
+
+### `"subagent/model-selection-policy"`
+
+SHA-256: `0a8a062bc9c3c0d97fd97742262f2ea53dd32297f834e81114870d38ac3dc6da`
+
+`"subagent/model-selection-policy"`
+
+
+
+### `"success"`
+
+SHA-256: `511801b0a6470d98566e8385d3dffddb2b67f79fcf73ed6056f46c3cc0a245a7`
+
+`"success"`
+
+
+
+### `"system"`
+
+SHA-256: `8af841fc9b265ade3441caf9fe40dd24db24226befba48150e6d0eeccc1389c3`
+
+`"system"`
+
+
+
+### `"system/message"`
+
+SHA-256: `1c5a58f4599bd4a9711712551ffe2442a5e5fcd0758bafe630cc4ead850bdaa7`
+
+`"system/message"`
+
+
+
+### `"task-result"`
+
+SHA-256: `f05fb85e715af4ab4de0b6ba111166dd0435bd8bb74a0fa0f32b9d174113fc7c`
+
+`"task-result"`
+
+
+
+### `"team-message"`
+
+SHA-256: `2e4debca12f2c449f96dc6574f3fbf2fb346193443114a241d01a236362ec48c`
+
+`"team-message"`
+
+
+
+### `"team/member"`
+
+SHA-256: `18fcdd273a2f2f9d813a3be5e71df5903a963a5c88e46b90b14de6e2db890da0`
+
+`"team/member"`
+
+
+
+### `"team/message/delivered"`
+
+SHA-256: `a8a2b9011fc067862df7ce40748868467e5778283d7ac193c13f77684a914c57`
+
+`"team/message/delivered"`
+
+
+
+### `"team/message/queued"`
+
+SHA-256: `4e011753f8263f436efaabfbb3b4db53a98fc55342c5ded2daf7208b217be159`
+
+`"team/message/queued"`
+
+
+
+### `"team/task"`
+
+SHA-256: `b57ae1b37e52bee0a21cbdace168dc6a15582bcda8c306dad962c5dcc8a8e28b`
+
+`"team/task"`
+
+
+
+### `"text"`
+
+SHA-256: `4e44c9118152f6829634bfd508e47669ab0497caffa380c94b4be91f9390d35d`
+
+`"text"`
+
+
+
+### `"text-chunks"`
+
+SHA-256: `f9cfc89e8fe085b4fcc9cd32b74b6f103608c54d7d8cd97b47c01de34f252ba3`
+
+`"text-chunks"`
+
+
+
+### `"text-delta"`
+
+SHA-256: `5abab3a27fd2736660ecddd94b28d6bbf114986dd894880153bd1be3ccacb563`
+
+`"text-delta"`
+
+
+
+### `"todo/write"`
+
+SHA-256: `af0750d32d97d47b12b7361a587db41894b17e04c9a805fe212f0114aa2248c7`
+
+`"todo/write"`
+
+
+
+### `"tool"`
+
+SHA-256: `a13d8f379222ece8a02a86efe4c8334af4f108ecb3034b38c0a42bb3046e6847`
+
+`"tool"`
+
+
+
+### `"tool-call"`
+
+SHA-256: `1f0133217eeeffd8d387baf1ec8ed9856e719bcd999dc08e48624cba96d75fd7`
+
+`"tool-call"`
+
+
+
+### `"tool-call-chunks"`
+
+SHA-256: `616f93a5047de668e1c30d57b1786abd76beeb4123599637ec1dc5290320ede5`
+
+`"tool-call-chunks"`
+
+
+
+### `"tool-call-delta"`
+
+SHA-256: `9b4fd974c124c83743efe030ba4e1250e087505f3f74588716a521fb8d453267`
+
+`"tool-call-delta"`
+
+
+
+### `"tool-calls"`
+
+SHA-256: `6c1cccb433ddc153facb380c7dda956237ba5c31f8a532a69142dc277890cc9b`
+
+`"tool-calls"`
+
+
+
+### `"tool-result"`
+
+SHA-256: `e5244812c495a80c2e78ba2c2690dca5f6b58ea8d3fe5531ff94a6f9ac5e5d66`
+
+`"tool-result"`
+
+
+
+### `"tool-workflow/agent-end"`
+
+SHA-256: `5d17f27a1ef9f7026c0232714adf7573961536d75f3303ca97973975f5af170e`
+
+`"tool-workflow/agent-end"`
+
+
+
+### `"tool-workflow/agent-start"`
+
+SHA-256: `ad92f473a03ae72599ff26c86e897c25e16269519ad2a87340f0bea946517af8`
+
+`"tool-workflow/agent-start"`
+
+
+
+### `"tool-workflow/run-end"`
+
+SHA-256: `fe792a6cd430494503837e21e79f91677704ccdd9e870c679aabd7d43ed47ddd`
+
+`"tool-workflow/run-end"`
+
+
+
+### `"tool-workflow/run-start"`
+
+SHA-256: `cdca80b8dad24d4e7b1d5a288a8475ba8d8d46be385bd2da85f122ee836f1670`
+
+`"tool-workflow/run-start"`
+
+
+
+### `"tool/call"`
+
+SHA-256: `c589e938cc0e4989df8b82abef6339de621f0dc4fe62c230d145b94996af7f92`
+
+`"tool/call"`
+
+
+
+### `"tool/ptc-dispatch"`
+
+SHA-256: `fb5e0517050d2c6d40e5b8145db1f7c5ca7044d5d50fada6ff80e0b22c6ca973`
+
+`"tool/ptc-dispatch"`
+
+
+
+### `"tool/ptc-dispatch-start"`
+
+SHA-256: `2aed07493b1c65b6d00de5586da1e743cf501684b9ad43a1765fb4007d4ea456`
+
+`"tool/ptc-dispatch-start"`
+
+
+
+### `"tool/result"`
+
+SHA-256: `570e85022434613394418ad33e77e9f1f7a05699b33d0b62eae0677a638c3833`
+
+`"tool/result"`
+
+
+
+### `"turn/end"`
+
+SHA-256: `4312134fc6f9cad507c31390bd3d147535492dd77621ec517c5e85f853d53a03`
+
+`"turn/end"`
+
+
+
+### `"turn/start"`
+
+SHA-256: `0af3ecfb8c60d416fc40a7cc4fb2c4851a8e46608b2b38ab9e510670c971aa1f`
+
+`"turn/start"`
+
+
+
+### `"unavailable"`
+
+SHA-256: `2c4c21f19f426a58f2dac914e34313aa43f8408972de857a486d1f086d5adb6c`
+
+`"unavailable"`
+
+
+
+### `"usage"`
+
+SHA-256: `0bdaf9cb63594be4ef034b68901fffe792fe09d6d5f6bac42d7f56f6e7834fb9`
+
+`"usage"`
+
+
+
+### `"user"`
+
+SHA-256: `68f44f59e91c41395076cb77265981a601680ec8a381bbbeb6ab754ffdc94573`
+
+`"user"`
+
+
+
+### `"user/message"`
+
+SHA-256: `de25352d2dc4196309bd84b5bac6319f6d5c898ea0e82bb5ae66c5738d0d426f`
+
+`"user/message"`
+
+
+
+### `"web/deepseek-search-llm-request"`
+
+SHA-256: `6f611bed14b2106542480c4a230b4a83baf76dc0d8ac0cd13319a7cb8dae7675`
+
+`"web/deepseek-search-llm-request"`
+
+
+
+### `"web_search"`
+
+SHA-256: `935c8d486292b13c87b57ca280eb8c58b5b2f5239be86fcd4334c33fdeb87682`
+
+`"web_search"`
+
+
+
+### `"web_search_20250305"`
+
+SHA-256: `0116b1f89c05221d56b0ba35c83d302bf4857bc7277d247e9bbaf74b27d2c66e`
+
+`"web_search_20250305"`
+
+
+
+### `"webhook"`
+
+SHA-256: `db6c5246911d47a7969f6b4cb47c7d0dbbde75c402710b22ace3672fa97bebe0`
+
+`"webhook"`
+
+
+
+### `"workspace-write"`
+
+SHA-256: `a3edd1efd1fef21b72c55e213c8a8b24196b091abde2b89db52be0b2aaae3cfa`
+
+`"workspace-write"`
+
+
+
+### `"workspace/changes"`
+
+SHA-256: `8e8155594e07812356b67d732196dda894b0f9c91a5969d51612cf490b0a016d`
+
+`"workspace/changes"`
+
+
+
+### `0`
+
+SHA-256: `93d38436347f67c9022aacbc4472e283d722bcab8eb73fc376aaf7b6a6b9fb35`
+
+`0`
+
+
+
+### `1`
+
+SHA-256: `f88f1b7b6bb733f685f5fb6a8744a5db9199fa53c90463ea1a33bad51153671d`
+
+`1`
+
+
+
+### `2`
+
+SHA-256: `a0f906856fc06f1c6f2083eb970e5a657a82b1a84c06c095445e5d6d161cda80`
+
+`2`
+
+
+
+### `4`
+
+SHA-256: `af6e173f7be819bcd0a5c8d77918649c10ce761d8a184ff472f2e01ce64eb2e0`
+
+`4`
+
+
+
+
+
+
+
+### `AfterScheduleRecord`
+
+SHA-256: `27e337d3d6b402b221e50c247a3f518a70d0c474cc60beee15fac3e9c5cbfcbe`
+
+来源:[`packages/schedule/schedule/src/types.ts:13`](../packages/schedule/schedule/src/types.ts)
| 属性 | 存在性 | 类型 |
|---|---|---|
-| `model` | 必需 | `string` |
-| `provider` | 必需 | `string` |
-| `reasoningEffort` | 可选 | `string` |
+| `afterSeconds` | 必需 | `number` |
+| `id` | 必需 | `string` |
+| `kind` | 必需 | `"after"` |
+| `prompt` | 必需 | `string` |
+| `scheduledAt` | 必需 | `string` |
-
+
-### `packages/attachment/attachment/src/types.ts#FileAttachmentRef`
-
-SHA-256: `f19bee84bf3d20904553cdcd57465232bc1c2a194f54c4d195292ba0487223a6`
-
-来源:[`packages/attachment/attachment/src/types.ts:39`](../packages/attachment/attachment/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `attachmentId` | 必需 | `string` |
-| `bytes` | 必需 | `number` |
-| `name` | 必需 | `string` |
-
-
-
-### `packages/attachment/attachment/src/types.ts#ImageAttachmentRef`
-
-SHA-256: `b0b0eb1b16490f6bee135b2377e8f8c39227974c799ad7d49ff418af23ecbc35`
-
-来源:[`packages/attachment/attachment/src/types.ts:11`](../packages/attachment/attachment/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `attachmentId` | 必需 | `string` |
-| `bytes` | 必需 | `number` |
-| `height` | 必需 | `number` |
-| `mediaType` | 必需 | [`packages/attachment/attachment/src/types.ts#ImageMediaType`](#persistence-type-packagesattachmentattachmentsrctypestsimagemediatype) |
-| `name` | 可选 | `string` |
-| `originalDimensions` | 可选 | [`event:agent/inbox/spliced.data.inserted[0].content[0][2].attachment.originalDimensions`](#persistence-type-eventagentinboxspliceddatainserted0content02attachmentoriginaldimensions) |
-| `width` | 必需 | `number` |
-
-
-
-### `packages/attachment/attachment/src/types.ts#ImageMediaType`
-
-SHA-256: `2f1e6a7ebace43d727ae138ddcd352eb3813960009e5805b8c5ac84300c97716`
-
-来源:[`packages/attachment/attachment/src/types.ts:8`](../packages/attachment/attachment/src/types.ts)
-
-以下类型之一:
-
-- `"image/gif"`
-- `"image/jpeg"`
-- `"image/png"`
-- `"image/webp"`
-
-
-
-### `packages/compaction/compaction-image-offload/src/projection.ts#ImageOffloadTarget`
-
-SHA-256: `1cde1bedde79c5e8a56aee9c05c8e0a579cf5bc611deb85b93fa331a16ca978f`
-
-来源:[`packages/compaction/compaction-image-offload/src/projection.ts:9`](../packages/compaction/compaction-image-offload/src/projection.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `imageIndexes` | 必需 | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `seq` | 必需 | `number` |
+
-### `packages/context/agent-instructions/src/render.ts#AgentInstructionChange`
+### `AgentInstructionChange`
SHA-256: `83da72c6857601c75da11212ef847f57d457b9c99f0a82246dcdff3e26700239`
@@ -4519,14 +2754,26 @@ SHA-256: `83da72c6857601c75da11212ef847f57d457b9c99f0a82246dcdff3e26700239`
| 属性 | 存在性 | 类型 |
|---|---|---|
-| `action` | 必需 | [`event:agent/inbox/spliced.data.inserted[0].source[16].changes[0].action`](#persistence-type-eventagentinboxspliceddatainserted0source16changes0action) |
+| `action` | 必需 | [`union (3 variants)`](#persistence-type-sha256-904bf499d98be4a3a5f836fcac533b6c4899569b018071e6604e1d32657d00fd) |
| `digest` | 可选 | `string` |
| `path` | 必需 | `string` |
| `scope` | 必需 | `string` |
+
+
+### `AgentInstructionChange[]`
+
+SHA-256: `2ab12a0e345658f9342816d773fe610f049982bcad82631f43b9205abe43e5ee`
+
+[`AgentInstructionChange`](#persistence-type-sha256-83da72c6857601c75da11212ef847f57d457b9c99f0a82246dcdff3e26700239) 的数组。
+
+
+
+
+
-### `packages/context/agent-instructions/src/state.ts#AgentInstructionSource`
+### `AgentInstructionSource`
SHA-256: `6f22a9d02b9a1f1157f3b0e7bdccd7e7b12b085c4efdb709dfc74a465cd4e590`
@@ -4536,527 +2783,35 @@ SHA-256: `6f22a9d02b9a1f1157f3b0e7bdccd7e7b12b085c4efdb709dfc74a465cd4e590`
|---|---|---|
| `baseline` | 可选 | `true` |
| `baselineIdentity` | 可选 | `string` |
-| `changes` | 必需 | [`event:agent/inbox/spliced.data.inserted[0].source[16].changes`](#persistence-type-eventagentinboxspliceddatainserted0source16changes) |
+| `changes` | 必需 | [`AgentInstructionChange[]`](#persistence-type-sha256-2ab12a0e345658f9342816d773fe610f049982bcad82631f43b9205abe43e5ee) |
| `form` | 必需 | `"instructions"` |
| `kind` | 必需 | `"agent-instructions"` |
-
+
-### `packages/context/session-reference/src/types.ts#SessionReferenceSource`
+
-SHA-256: `f56c5b59ca0161310c338d31dd16cf14287ccd602ff4181058df178c1c286d7f`
+
-来源:[`packages/context/session-reference/src/types.ts:13`](../packages/context/session-reference/src/types.ts)
+### `AgentMessageSource`
+
+SHA-256: `4a9bef9f27a942520cc2279ca7dd3082556e4bff543f66b5c0333e1bbed1cd86`
+
+来源:[`packages/subagent/subagent/src/continuation-messages.ts:15`](../packages/subagent/subagent/src/continuation-messages.ts)
| 属性 | 存在性 | 类型 |
|---|---|---|
-| `form` | 必需 | `"recall"` |
-| `kind` | 必需 | `"session-reference"` |
-| `references` | 必需 | [`event:agent/inbox/spliced.data.inserted[0].source[15].references`](#persistence-type-eventagentinboxspliceddatainserted0source15references) |
-| `version` | 必需 | `1` |
+| `form` | 必需 | `"relay"` |
+| `kind` | 必需 | `"agent-message"` |
+| `senderSessionId` | 必需 | `string` |
-
+
-### `packages/core/agent/src/types.ts#InboxTarget`
-
-SHA-256: `96f4a9c81fc0f940ef71528a8cc66731ae4cf1f40d79680c5fe3c39f96d7723c`
-
-来源:[`packages/core/agent/src/types.ts:30`](../packages/core/agent/src/types.ts)
-
-以下类型之一:
-
-- `"next-step"`
-- `"next-turn"`
-
-
-
-### `packages/core/session/src/types.ts#EpochHeader`
-
-SHA-256: `c55a891c7aac496de6ee64c91c1fb65728c977314013033e42c863428aada854`
-
-来源:[`packages/core/session/src/types.ts:239`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `adapterDefaults` | 可选 | [`packages/llm/llm/src/call-config.ts#LlmCallConfigAdapterDefaults`](#persistence-type-packagesllmllmsrccall-configtsllmcallconfigadapterdefaults) |
-| `config` | 必需 | [`packages/llm/llm/src/call-config.ts#LlmCallConfig`](#persistence-type-packagesllmllmsrccall-configtsllmcallconfig) |
-| `tools` | 可选 | [`event:request/header.data.header.tools`](#persistence-type-eventrequestheaderdataheadertools) |
-
-
-
-### `packages/core/session/src/types.ts#RequestContext`
-
-SHA-256: `b158f3ff6923714807c0d73882f0b05dc87f8fa85c9e90814852d48bbc866081`
-
-来源:[`packages/core/session/src/types.ts:249`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `contextWindow` | 可选 | `number` |
-| `model` | 必需 | `string` |
-| `provider` | 必需 | `string` |
-| `systemPromptUpdate` | 可选 | `"in-history"` |
-
-
-
-### `packages/core/session/src/types.ts#RequestHeaderReason`
-
-SHA-256: `530da6c0267813bb4511af72883cc518834e624e3b3220a7062955fd57a788a6`
-
-来源:[`packages/core/session/src/types.ts:268`](../packages/core/session/src/types.ts)
-
-以下类型之一:
-
-- `"change"`
-- `"initial"`
-- `"resume"`
-- `"series"`
-
-
-
-### `packages/core/session/src/types.ts#SessionHeader`
-
-SHA-256: `1a3440e3577382704d42a6263aa463504eb74c566734a55e9503a63efcd02445`
-
-来源:[`packages/core/session/src/types.ts:93`](../packages/core/session/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `agentPreset` | 可选 | `string` |
-| `createdAt` | 必需 | `number` |
-| `cwd` | 可选 | `string` |
-| `delegationDepth` | 可选 | `number` |
-| `id` | 必需 | `string` |
-| `isSeeded` | 必需 | `boolean` |
-| `origin` | 可选 | `"subagent"` |
-| `parentSession` | 可选 | `string` |
-| `version` | 必需 | `4` |
-
-
-
-### `packages/core/session/src/types.ts#SurfaceOp`
-
-SHA-256: `335e242de1fcc17b6ca920fc420d71bec2d76e53e37955c00948b65ab77f05c5`
-
-来源:[`packages/core/session/src/types.ts:448`](../packages/core/session/src/types.ts)
-
-以下类型之一:
-
-- `"append"`
-- [`SessionEventEnvelope[6].surfaceOp[1]`](#persistence-type-sessioneventenvelope6surfaceop1)
-
-
-
-### `packages/core/session/src/types.ts#TurnEndCancelCause`
-
-SHA-256: `1f8c126cfab3df812cd115cfc23e3256f0fa2383400f4ce91ecad313577e59b0`
-
-来源:[`packages/core/session/src/types.ts:195`](../packages/core/session/src/types.ts)
-
-以下类型之一:
-
-- [`event:turn/end.data.reason[1].reason[2]`](#persistence-type-eventturnenddatareason1reason2)
-- [`event:turn/end.data.reason[1].reason[3]`](#persistence-type-eventturnenddatareason1reason3)
-- [`event:turn/end.data.reason[1].reason[4]`](#persistence-type-eventturnenddatareason1reason4)
-- [`event:turn/end.data.reason[1].reason[1]`](#persistence-type-eventturnenddatareason1reason1)
-- [`event:agent/inbox/spliced.data.inserted[0].source[0]`](#persistence-type-eventagentinboxspliceddatainserted0source0)
-
-
-
-### `packages/core/session/src/types.ts#TurnEndReason`
-
-SHA-256: `f1687f982fa3d41ef29e159feed154ecd13af4dd209acaee16038f223f2e9402`
-
-来源:[`packages/core/session/src/types.ts:231`](../packages/core/session/src/types.ts)
-
-以下类型之一:
-
-- [`event:turn/end.data.reason[0]`](#persistence-type-eventturnenddatareason0)
-- [`event:turn/end.data.reason[6]`](#persistence-type-eventturnenddatareason6)
-- [`event:turn/end.data.reason[5]`](#persistence-type-eventturnenddatareason5)
-- [`event:assistant/attempt.data.stream[0][3].chunk[6].reason[2]`](#persistence-type-eventassistantattemptdatastream03chunk6reason2)
-- [`event:turn/end.data.reason[3]`](#persistence-type-eventturnenddatareason3)
-- [`event:turn/end.data.reason[1]`](#persistence-type-eventturnenddatareason1)
-- [`event:turn/end.data.reason[2]`](#persistence-type-eventturnenddatareason2)
-
-
-
-### `packages/core/tools/src/index.ts#ToolRestriction`
-
-SHA-256: `3cfc3a56502da1f8c6153c2c56657bab4b749056968634dd0991d325ec1c919f`
-
-来源:[`packages/core/tools/src/index.ts:682`](../packages/core/tools/src/index.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `allow` | 可选 | [`event:assistant/attempt.data.stream[0][0].texts`](#persistence-type-eventassistantattemptdatastream00texts) |
-| `deny` | 可选 | [`event:assistant/attempt.data.stream[0][0].texts`](#persistence-type-eventassistantattemptdatastream00texts) |
-
-
-
-### `packages/core/tools/src/types.ts#PtcDispatchEventData`
-
-SHA-256: `8d2e5a3c4230e6ea6c0b5151f02241d0db02cd2551f2df1b6b9700cddcc0dca3`
-
-来源:[`packages/core/tools/src/types.ts:20`](../packages/core/tools/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `arguments` | 必需 | `unknown`(不透明) |
-| `content` | 必需 | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `error` | 可选 | [`event:tool/ptc-dispatch.data.error`](#persistence-type-eventtoolptc-dispatchdataerror) |
-| `isError` | 必需 | `boolean` |
-| `name` | 必需 | `string` |
-| `parentCallId` | 必需 | `string` |
-| `rootCallId` | 必需 | `string` |
-| `subCallId` | 必需 | `string` |
-
-
-
-### `packages/core/tools/src/types.ts#PtcDispatchStartEventData`
-
-SHA-256: `2fe5026daf14bd4ff2b7bfb7cf9791c302d9cbba06802178b6dfec00b892698f`
-
-来源:[`packages/core/tools/src/types.ts:11`](../packages/core/tools/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `arguments` | 必需 | `unknown`(不透明) |
-| `name` | 必需 | `string` |
-| `parentCallId` | 必需 | `string` |
-| `rootCallId` | 必需 | `string` |
-| `subCallId` | 必需 | `string` |
-
-
-
-### `packages/deliverables/tool-present/src/types.ts#PresentedFile`
-
-SHA-256: `b8fc636a2121df9d8423c242e03c9d23b7ab7c6fdce00e45746932c60b730f97`
-
-来源:[`packages/deliverables/tool-present/src/types.ts:5`](../packages/deliverables/tool-present/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `description` | 可选 | `string` |
-| `path` | 必需 | `string` |
-
-
-
-### `packages/experimental/agent-team/src/types.ts#TeamMemberPhase`
-
-SHA-256: `dfce5db4aa42b7ebe0bb79eca92553587287e18c06b9eba85cbfb9d332e26acd`
-
-来源:[`packages/experimental/agent-team/src/types.ts:44`](../packages/experimental/agent-team/src/types.ts)
-
-以下类型之一:
-
-- `"active"`
-- `"failed"`
-- `"provisioning"`
-
-
-
-### `packages/experimental/agent-team/src/types.ts#TeamMemberSnapshot`
-
-SHA-256: `6598cd6da253948d6b207c6374a45335804c79b576866d6215649c2d1bc85e25`
-
-来源:[`packages/experimental/agent-team/src/types.ts:47`](../packages/experimental/agent-team/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `context` | 必需 | [`event:team/member.data.member.context`](#persistence-type-eventteammemberdatamembercontext) |
-| `description` | 必需 | `string` |
-| `error` | 可选 | `string` |
-| `id` | 必需 | `string` |
-| `name` | 必需 | `string` |
-| `phase` | 必需 | [`packages/experimental/agent-team/src/types.ts#TeamMemberPhase`](#persistence-type-packagesexperimentalagent-teamsrctypeststeammemberphase) |
-| `provider` | 必需 | `string` |
-
-
-
-### `packages/experimental/agent-team/src/types.ts#TeamMessageSnapshot`
-
-SHA-256: `5b694f394d5e11609887a3ccfa82844935d49806c37e336b30be2186d649ab94`
-
-来源:[`packages/experimental/agent-team/src/types.ts:106`](../packages/experimental/agent-team/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `content` | 必需 | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `id` | 必需 | `string` |
-| `senderId` | 必需 | `string` |
-| `senderName` | 必需 | `string` |
-| `targetId` | 必需 | `string` |
-
-
-
-### `packages/experimental/agent-team/src/types.ts#TeamMessageSource`
-
-SHA-256: `2152caf1a71e588e4df2358a806dea24936c1c47131134f01a12939d12cdc0c0`
-
-来源:[`packages/experimental/agent-team/src/types.ts:115`](../packages/experimental/agent-team/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `kind` | 必需 | `"team-message"` |
-| `messageId` | 必需 | `string` |
-| `senderId` | 必需 | `string` |
-| `senderName` | 必需 | `string` |
-| `teamId` | 必需 | `string` |
-
-
-
-### `packages/experimental/agent-team/src/types.ts#TeamTaskSnapshot`
-
-SHA-256: `51edec100659da3a9bd9c3f6ba1180f5e64ec9a1585e5057080df45c180bd357`
-
-来源:[`packages/experimental/agent-team/src/types.ts:74`](../packages/experimental/agent-team/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `blockedBy` | 必需 | [`event:assistant/attempt.data.stream[0][0].texts`](#persistence-type-eventassistantattemptdatastream00texts) |
-| `description` | 必需 | `string` |
-| `id` | 必需 | `string` |
-| `ownerId` | 可选 | `string` |
-| `revision` | 必需 | `number` |
-| `status` | 必需 | [`packages/experimental/agent-team/src/types.ts#TeamTaskStatus`](#persistence-type-packagesexperimentalagent-teamsrctypeststeamtaskstatus) |
-| `subject` | 必需 | `string` |
-| `writeScopes` | 必需 | [`event:assistant/attempt.data.stream[0][0].texts`](#persistence-type-eventassistantattemptdatastream00texts) |
-
-
-
-### `packages/experimental/agent-team/src/types.ts#TeamTaskStatus`
-
-SHA-256: `b2d2a01e51341a3bfec809198952c8c830a7899f4cb6ecd3c1dc0b5d9a2af943`
-
-来源:[`packages/experimental/agent-team/src/types.ts:71`](../packages/experimental/agent-team/src/types.ts)
-
-以下类型之一:
-
-- `"completed"`
-- `"deleted"`
-- `"in_progress"`
-- `"pending"`
-
-
-
-### `packages/feedback/command-feedback/src/types.ts#FeedbackRecord`
-
-SHA-256: `7d54a5a5e629e2e7783bfac72683bcc5e969e9f43426b9289826aaf294ff6344`
-
-来源:[`packages/feedback/command-feedback/src/types.ts:27`](../packages/feedback/command-feedback/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `category` | 可选 | [`event:feedback/message-put.data.item.category`](#persistence-type-eventfeedbackmessage-putdataitemcategory) |
-| `text` | 可选 | `string` |
-
-
-
-### `packages/feedback/message-feedback/src/types.ts#MessageFeedbackDelete`
-
-SHA-256: `7c6129b6961cf4b2a030f36c78d2b0a5be38617651a9b81322e054ee512bee06`
-
-来源:[`packages/feedback/message-feedback/src/types.ts:46`](../packages/feedback/message-feedback/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `messageId` | 必需 | `string` |
-| `sessionId` | 必需 | `string` |
-
-
-
-### `packages/feedback/message-feedback/src/types.ts#MessageFeedbackItem`
-
-SHA-256: `3d7d07060a7be77984feb651ea2bf1925d3e0477911d9d3ed86330d1e8ca6182`
-
-来源:[`packages/feedback/message-feedback/src/types.ts:20`](../packages/feedback/message-feedback/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `category` | 可选 | [`event:feedback/message-put.data.item.category`](#persistence-type-eventfeedbackmessage-putdataitemcategory) |
-| `createdAt` | 必需 | `number` |
-| `messageId` | 必需 | `string` |
-| `note` | 可选 | `string` |
-| `rating` | 必需 | [`packages/feedback/message-feedback/src/types.ts#MessageFeedbackRating`](#persistence-type-packagesfeedbackmessage-feedbacksrctypestsmessagefeedbackrating) |
-| `updatedAt` | 必需 | `number` |
-| `version` | 必需 | `string` |
-
-
-
-### `packages/feedback/message-feedback/src/types.ts#MessageFeedbackPut`
-
-SHA-256: `aa7bc2817014ca6c45719b1c193c5c131be718a0921f34345098ff250f444626`
-
-来源:[`packages/feedback/message-feedback/src/types.ts:38`](../packages/feedback/message-feedback/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `item` | 必需 | [`packages/feedback/message-feedback/src/types.ts#MessageFeedbackItem`](#persistence-type-packagesfeedbackmessage-feedbacksrctypestsmessagefeedbackitem) |
-| `sessionId` | 必需 | `string` |
-
-
-
-### `packages/feedback/message-feedback/src/types.ts#MessageFeedbackRating`
-
-SHA-256: `390eed1028aba02774f14408647acec10ec5516e97d4f15ecde2b9989d5a69f2`
-
-来源:[`packages/feedback/message-feedback/src/types.ts:17`](../packages/feedback/message-feedback/src/types.ts)
-
-以下类型之一:
-
-- `"negative"`
-- `"positive"`
-
-
-
-### `packages/goal/goal/src/domain.ts#GoalChangeMeta`
-
-SHA-256: `7d226b9fd95b4ba213d4237c22e930a91c3c769c95ca7f92977b9d625ba13438`
-
-来源:[`packages/goal/goal/src/domain.ts:44`](../packages/goal/goal/src/domain.ts)
-
-以下类型之一:
-
-- [`packages/goal/goal/src/domain.ts#GoalClearChangeMeta`](#persistence-type-packagesgoalgoalsrcdomaintsgoalclearchangemeta)
-- [`packages/goal/goal/src/domain.ts#GoalSnapshotChangeMeta`](#persistence-type-packagesgoalgoalsrcdomaintsgoalsnapshotchangemeta)
-
-
-
-### `packages/goal/goal/src/domain.ts#GoalClearChangeMeta`
-
-SHA-256: `cffcdc19881ab61ec0a9ce18743996f7ac44ac8889f34dfac36ae745574aa22f`
-
-来源:[`packages/goal/goal/src/domain.ts:35`](../packages/goal/goal/src/domain.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `cleared` | 必需 | [`packages/goal/goal/src/types.ts#GoalRef`](#persistence-type-packagesgoalgoalsrctypestsgoalref) |
-| `clearedAt` | 必需 | `number` |
-| `kind` | 必需 | `"goal/change"` |
-| `operation` | 必需 | `"clear"` |
-| `version` | 必需 | `1` |
-
-
-
-### `packages/goal/goal/src/domain.ts#GoalMessageSource`
-
-SHA-256: `7f959241c24128b4983b559984811861dc59774b85905c8fa57c6cb0148a3dbc`
-
-来源:[`packages/goal/goal/src/domain.ts:47`](../packages/goal/goal/src/domain.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `goalId` | 必需 | `string` |
-| `kind` | 必需 | `"goal"` |
-| `revision` | 必需 | `number` |
-| `round` | 必需 | `number` |
-
-
-
-### `packages/goal/goal/src/domain.ts#GoalSnapshotChangeMeta`
-
-SHA-256: `1df34a6c086866ffdc2dd9e8e5c581c3751a010cdf6b8538a7327f7a3237f0b4`
-
-来源:[`packages/goal/goal/src/domain.ts:24`](../packages/goal/goal/src/domain.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `createdAt` | 必需 | `number` |
-| `goal` | 必需 | [`packages/goal/goal/src/types.ts#GoalSnapshot`](#persistence-type-packagesgoalgoalsrctypestsgoalsnapshot) |
-| `kind` | 必需 | `"goal/change"` |
-| `operation` | 必需 | [`event:goal/change.data[0].operation`](#persistence-type-eventgoalchangedata0operation) |
-| `roundsStarted` | 必需 | `number` |
-| `updatedAt` | 必需 | `number` |
-| `version` | 必需 | `1` |
-
-
-
-### `packages/goal/goal/src/types.ts#GoalBlockReason`
-
-SHA-256: `84ac8c1a66ffc697262e181f42e851259eae14038c113ca329fb4700ccdb1f7c`
-
-来源:[`packages/goal/goal/src/types.ts:52`](../packages/goal/goal/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `code` | 必需 | `string` |
-| `message` | 必需 | `string` |
-
-
-
-### `packages/goal/goal/src/types.ts#GoalPhase`
-
-SHA-256: `b8327af7ee5767952d1300cb4f03b7fc04197ae5ba275e13981c689ff7506172`
-
-来源:[`packages/goal/goal/src/types.ts:45`](../packages/goal/goal/src/types.ts)
-
-以下类型之一:
-
-- `"active"`
-- `"blocked"`
-- `"complete"`
-- `"paused"`
-
-
-
-### `packages/goal/goal/src/types.ts#GoalRef`
-
-SHA-256: `0b6d718c693fdf7f06dcccb0bcbbabe78cc63514eafc62d6b2a3899735279d6f`
-
-来源:[`packages/goal/goal/src/types.ts:20`](../packages/goal/goal/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `id` | 必需 | `string` |
-| `revision` | 必需 | `number` |
-
-
-
-### `packages/goal/goal/src/types.ts#GoalSnapshot`
-
-SHA-256: `6bbe793f6a93dc8d50a4d4d3fbb6f8ed15650bcb7e151d28669628f7b7c3fc25`
-
-来源:[`packages/goal/goal/src/types.ts:60`](../packages/goal/goal/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `blockedReason` | 可选 | [`packages/goal/goal/src/types.ts#GoalBlockReason`](#persistence-type-packagesgoalgoalsrctypestsgoalblockreason) |
-| `id` | 必需 | `string` |
-| `maxGoalRounds` | 必需 | `number` |
-| `objective` | 必需 | `string` |
-| `phase` | 必需 | [`packages/goal/goal/src/types.ts#GoalPhase`](#persistence-type-packagesgoalgoalsrctypestsgoalphase) |
-| `revision` | 必需 | `number` |
-
-
-
-### `packages/hooks/hook-protocol/src/types.ts#HookDialect`
-
-SHA-256: `a6b41f5bede8094d7bf635be5d69b1bd7a25e006ca9cf9415bceb9322f1a7feb`
-
-来源:[`packages/hooks/hook-protocol/src/types.ts:48`](../packages/hooks/hook-protocol/src/types.ts)
-
-以下类型之一:
-
-- `"claude-code"`
-- `"codex"`
-
-
-
-### `packages/interaction/user-approval/src/index.ts#ApprovalPolicy`
-
-SHA-256: `05d2ae1e0c7f8770f83f9a09047afb39a335d8ac986df3193659aa1e581472cf`
-
-来源:[`packages/interaction/user-approval/src/index.ts:60`](../packages/interaction/user-approval/src/index.ts)
-
-以下类型之一:
-
-- `"ask"`
-- `"never"`
+
-### `packages/interaction/user-approval/src/types.ts#ApprovalOutcome`
+### `ApprovalOutcome`
SHA-256: `930c1cd289def119d443e19dd90008916bf035f0a4d23e07241e7f050f2b89b7`
@@ -5069,82 +2824,30 @@ SHA-256: `930c1cd289def119d443e19dd90008916bf035f0a4d23e07241e7f050f2b89b7`
- `"rejected"`
- `"unavailable"`
-
+
-### `packages/llm/llm-retry/src/types.ts#LlmRetryEventData`
+
-SHA-256: `c170da8ab7c37635b10867b2571811d9e317ac3ec394e8ff8efe53f902fc41c1`
+
-来源:[`packages/llm/llm-retry/src/types.ts:16`](../packages/llm/llm-retry/src/types.ts)
+### `ApprovalPolicy`
+
+SHA-256: `05d2ae1e0c7f8770f83f9a09047afb39a335d8ac986df3193659aa1e581472cf`
+
+来源:[`packages/interaction/user-approval/src/index.ts:60`](../packages/interaction/user-approval/src/index.ts)
以下类型之一:
-- [`event:llm/retry.data[0]`](#persistence-type-eventllmretrydata0)
-- [`event:llm/retry.data[1]`](#persistence-type-eventllmretrydata1)
+- `"ask"`
+- `"never"`
-
+
-### `packages/llm/llm-retry/src/types.ts#LlmRetryStartedEventData`
-
-SHA-256: `6f72ece8f317cd080c4f20a93f1bf709965f5b81ac4669528f5a023191cfcf20`
-
-来源:[`packages/llm/llm-retry/src/types.ts:43`](../packages/llm/llm-retry/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `retry` | 必需 | `number` |
-| `retryId` | 必需 | `string` |
-| `step` | 必需 | `number` |
-| `turn` | 必需 | `number` |
-
-
-
-### `packages/llm/llm/src/assistant-stream.ts#AssistantStreamRecord`
-
-SHA-256: `86cf1e44038cb8b11659863dd0efafe682e41b9c782265c1d50e0a687debfc60`
-
-来源:[`packages/llm/llm/src/assistant-stream.ts:20`](../packages/llm/llm/src/assistant-stream.ts)
-
-以下类型之一:
-
-- [`event:assistant/attempt.data.stream[0][2]`](#persistence-type-eventassistantattemptdatastream02)
-- [`event:assistant/attempt.data.stream[0][3]`](#persistence-type-eventassistantattemptdatastream03)
-- [`event:assistant/attempt.data.stream[0][1]`](#persistence-type-eventassistantattemptdatastream01)
-- [`event:assistant/attempt.data.stream[0][0]`](#persistence-type-eventassistantattemptdatastream00)
-
-
-
-### `packages/llm/llm/src/call-config.ts#LlmCallConfig`
-
-SHA-256: `67d5f73ceae82f5265258142ad6cf172de2c1fef93ba551b7f0454e0a93bffe0`
-
-来源:[`packages/llm/llm/src/call-config.ts:23`](../packages/llm/llm/src/call-config.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `maxTokens` | 可选 | `number` |
-| `model` | 必需 | `string` |
-| `provider` | 必需 | `string` |
-| `reasoningEffort` | 可选 | `string` |
-| `stop` | 可选 | [`event:assistant/attempt.data.stream[0][0].texts`](#persistence-type-eventassistantattemptdatastream00texts) |
-| `temperature` | 可选 | `number` |
-
-
-
-### `packages/llm/llm/src/call-config.ts#LlmCallConfigAdapterDefaults`
-
-SHA-256: `326a9bfda27dda5882fb3cbe6e715df41dae2298fdae3d66437457268a665693`
-
-来源:[`packages/llm/llm/src/call-config.ts:36`](../packages/llm/llm/src/call-config.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `maxTokens` | 可选 | `true` |
-| `reasoningEffort` | 可选 | `true` |
+
-### `packages/llm/llm/src/message.ts#AssistantMessage`
+### `AssistantMessage`
SHA-256: `e50b0a3ed8e6c80b672e4f855c91984f03b5c3fdd5d475bf171171f391a86c83`
@@ -5152,146 +2855,80 @@ SHA-256: `e50b0a3ed8e6c80b672e4f855c91984f03b5c3fdd5d475bf171171f391a86c83`
| 属性 | 存在性 | 类型 |
|---|---|---|
-| `content` | 必需 | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
+| `content` | 必需 | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
| `id` | 必需 | `string` |
| `role` | 必需 | `"assistant"` |
-| `source` | 必需 | [`packages/llm/llm/src/message.ts#ModelMessageSource`](#persistence-type-packagesllmllmsrcmessagetsmodelmessagesource) |
+| `source` | 必需 | [`ModelMessageSource`](#persistence-type-sha256-719c51f67074f97034a6c94297fe1f4b5d3c8d392c57586dab732aa5398c7a91) |
-
+
-### `packages/llm/llm/src/message.ts#ContextSnapshotSection`
+
-SHA-256: `86e1e384495ee09ac2d60c9db3610f1f1fddac2d248f6f1d6000e78054680219`
+
-来源:[`packages/llm/llm/src/message.ts:65`](../packages/llm/llm/src/message.ts)
+### `AssistantStreamRecord`
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `name` | 必需 | `string` |
-| `text` | 必需 | `string` |
+SHA-256: `86cf1e44038cb8b11659863dd0efafe682e41b9c782265c1d50e0a687debfc60`
-
-
-### `packages/llm/llm/src/message.ts#Message`
-
-SHA-256: `23c7cce57d20589897f4e2bd5898affc6fc611b87cd0cc8b95be1cfdd8b3a7eb`
-
-来源:[`packages/llm/llm/src/message.ts:131`](../packages/llm/llm/src/message.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `content` | 必需 | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `id` | 必需 | `string` |
-| `role` | 必需 | [`event:session/title-llm-request.data.messages[0].role`](#persistence-type-eventsessiontitle-llm-requestdatamessages0role) |
-| `source` | 必需 | [`packages/llm/llm/src/message.ts#MessageSource`](#persistence-type-packagesllmllmsrcmessagetsmessagesource) |
-
-
-
-### `packages/llm/llm/src/message.ts#MessageSource`
-
-SHA-256: `4c965666d5b42116945bc356087cd5e1fd549e6dece560785ed60511059a8283`
-
-来源:[`packages/llm/llm/src/message.ts:128`](../packages/llm/llm/src/message.ts)
+来源:[`packages/llm/llm/src/assistant-stream.ts:20`](../packages/llm/llm/src/assistant-stream.ts)
以下类型之一:
-- [`packages/context/agent-instructions/src/state.ts#AgentInstructionSource`](#persistence-type-packagescontextagent-instructionssrcstatetsagentinstructionsource)
-- [`packages/llm/llm/src/message.ts#ToolMessageSource`](#persistence-type-packagesllmllmsrcmessagetstoolmessagesource)
-- [`event:agent/inbox/spliced.data.inserted[0].source[11]`](#persistence-type-eventagentinboxspliceddatainserted0source11)
-- [`event:agent/inbox/spliced.data.inserted[0].source[19]`](#persistence-type-eventagentinboxspliceddatainserted0source19)
-- [`packages/skill/tool-skill/src/index.ts#SkillCatalogSource`](#persistence-type-packagesskilltool-skillsrcindextsskillcatalogsource)
-- [`packages/skill/skill/src/index.ts#SkillInvocationSource`](#persistence-type-packagesskillskillsrcindextsskillinvocationsource)
-- [`event:agent/inbox/spliced.data.inserted[0].source[4]`](#persistence-type-eventagentinboxspliceddatainserted0source4)
-- [`event:agent/inbox/spliced.data.inserted[0].source[5]`](#persistence-type-eventagentinboxspliceddatainserted0source5)
-- [`event:agent/inbox/spliced.data.inserted[0].source[6]`](#persistence-type-eventagentinboxspliceddatainserted0source6)
-- [`event:agent/inbox/spliced.data.inserted[0].source[3]`](#persistence-type-eventagentinboxspliceddatainserted0source3)
-- [`event:agent/inbox/spliced.data.inserted[0].source[2]`](#persistence-type-eventagentinboxspliceddatainserted0source2)
-- [`event:agent/inbox/spliced.data.inserted[0].source[7]`](#persistence-type-eventagentinboxspliceddatainserted0source7)
-- [`packages/context/session-reference/src/types.ts#SessionReferenceSource`](#persistence-type-packagescontextsession-referencesrctypestssessionreferencesource)
-- [`packages/subagent/subagent/src/continuation-messages.ts#SubagentSettledMessageSource`](#persistence-type-packagessubagentsubagentsrccontinuation-messagestssubagentsettledmessagesource)
-- [`packages/subagent/subagent/src/continuation-messages.ts#AgentMessageSource`](#persistence-type-packagessubagentsubagentsrccontinuation-messagestsagentmessagesource)
-- [`packages/goal/goal/src/domain.ts#GoalMessageSource`](#persistence-type-packagesgoalgoalsrcdomaintsgoalmessagesource)
-- [`packages/experimental/agent-team/src/types.ts#TeamMessageSource`](#persistence-type-packagesexperimentalagent-teamsrctypeststeammessagesource)
-- [`packages/llm/llm/src/message.ts#ModelMessageSource`](#persistence-type-packagesllmllmsrcmessagetsmodelmessagesource)
-- [`event:agent/inbox/spliced.data.inserted[0].source[1]`](#persistence-type-eventagentinboxspliceddatainserted0source1)
-- [`event:agent/inbox/spliced.data.inserted[0].source[0]`](#persistence-type-eventagentinboxspliceddatainserted0source0)
+- [`{ type: "tool-call-chunks" }`](#persistence-type-sha256-3860b4757d512a2869be833acb0faf834335b1b056bf3f83df5474dce95f8fa6)
+- [`{ type: "chunk" }`](#persistence-type-sha256-c93b6f51b399607349b4bcc66b58e848a44250ffc1e2537207bd092dfff94192)
+- [`{ type: "reasoning-chunks" }`](#persistence-type-sha256-71bb3254ec8f1e491ce63b762a7b5f18709de23aa4e8abcc8b886f4b6ce051dd)
+- [`{ type: "text-chunks" }`](#persistence-type-sha256-e72269f931559e901e5e8fe1cfcbd0669fb795f43cc038ff39fba62f60403c33)
-
+
-### `packages/llm/llm/src/message.ts#ModelMessageSource`
+### `AssistantStreamRecord[]`
-SHA-256: `719c51f67074f97034a6c94297fe1f4b5d3c8d392c57586dab732aa5398c7a91`
+SHA-256: `26f3bb7529cfce1e3a0f1ededa365d8b426758ca0feeb0beabeee805f8bb8346`
-来源:[`packages/llm/llm/src/message.ts:24`](../packages/llm/llm/src/message.ts)
+[`AssistantStreamRecord`](#persistence-type-sha256-86cf1e44038cb8b11659863dd0efafe682e41b9c782265c1d50e0a687debfc60) 的数组。
+
+
+
+
+
+
+
+### `AtScheduleRecord`
+
+SHA-256: `658d895d187b26d83f3b53109a3bf77bbfba9f6f9a6d4bc4ee4315b4eb36239e`
+
+来源:[`packages/schedule/schedule/src/types.ts:27`](../packages/schedule/schedule/src/types.ts)
| 属性 | 存在性 | 类型 |
|---|---|---|
-| `kind` | 必需 | `"model"` |
-| `model` | 必需 | `string` |
-| `provider` | 必需 | `string` |
-| `replayState` | 可选 | `unknown`(不透明) |
-
-
-
-### `packages/llm/llm/src/message.ts#SystemMessage`
-
-SHA-256: `302b01ddddcbb3b16cfa3fba2a5d99f5082a55fbd9dc5c83a179a228b8a6a0ca`
-
-来源:[`packages/llm/llm/src/message.ts:158`](../packages/llm/llm/src/message.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `content` | 必需 | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
| `id` | 必需 | `string` |
-| `role` | 必需 | `"system"` |
-| `source` | 必需 | [`event:system/message.data.message.source`](#persistence-type-eventsystemmessagedatamessagesource) |
+| `kind` | 必需 | `"at"` |
+| `prompt` | 必需 | `string` |
+| `scheduledAt` | 必需 | `string` |
-
+
-### `packages/llm/llm/src/message.ts#ToolMessageSource`
+
-SHA-256: `d9c462b9f62fdd3efc76a44b9524dc8781f6b91cd9c7e584b17d971defafebab`
+
-来源:[`packages/llm/llm/src/message.ts:29`](../packages/llm/llm/src/message.ts)
+### `CommandSource`
+
+SHA-256: `ada310bf0bdb8fed51f3b56ea63f6ea6b18bbd587f04fccb63a14ab0b2a24e05`
+
+来源:[`packages/core/session/src/types.ts:189`](../packages/core/session/src/types.ts) · [`packages/interaction/commands/src/types.ts:75`](../packages/interaction/commands/src/types.ts) · [`packages/interaction/commands/src/types.ts:79`](../packages/interaction/commands/src/types.ts) · [`packages/llm/llm/src/message.ts:103`](../packages/llm/llm/src/message.ts) · [`packages/session/session-title/src/types.ts:35`](../packages/session/session-title/src/types.ts)
| 属性 | 存在性 | 类型 |
|---|---|---|
-| `callId` | 必需 | `string` |
-| `kind` | 必需 | `"tool"` |
+| `kind` | 必需 | `"user"` |
-
+
-### `packages/llm/llm/src/message.ts#ToolResultMessage`
-
-SHA-256: `1b573e2d5c094fa87e2a8bf409ddd4ac5ba92a123085e168de44b9ccdbd5244c`
-
-来源:[`packages/llm/llm/src/message.ts:164`](../packages/llm/llm/src/message.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `content` | 必需 | [`event:tool/result.data.message.content`](#persistence-type-eventtoolresultdatamessagecontent) |
-| `id` | 必需 | `string` |
-| `role` | 必需 | `"user"` |
-| `source` | 必需 | [`packages/llm/llm/src/message.ts#ToolMessageSource`](#persistence-type-packagesllmllmsrcmessagetstoolmessagesource) |
-
-
-
-### `packages/llm/llm/src/message.ts#UserMessage`
-
-SHA-256: `4de5e7644130ed715ef6b5a4d86a87b30dca4096d1a6683c66acf6f7809379c7`
-
-来源:[`packages/llm/llm/src/message.ts:143`](../packages/llm/llm/src/message.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `content` | 必需 | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `id` | 必需 | `string` |
-| `role` | 必需 | `"user"` |
-| `source` | 必需 | [`packages/llm/llm/src/message.ts#MessageSource`](#persistence-type-packagesllmllmsrcmessagetsmessagesource) |
+
-### `packages/llm/llm/src/types.ts#ContentBlock`
+### `ContentBlock`
SHA-256: `c7b24be059d34d08929593049a1a81eaa3855166aacfe9d7603c0bc8bb728d56`
@@ -5299,16 +2936,20 @@ SHA-256: `c7b24be059d34d08929593049a1a81eaa3855166aacfe9d7603c0bc8bb728d56`
以下类型之一:
-- [`packages/llm/llm/src/types.ts#ReasoningBlock`](#persistence-type-packagesllmllmsrctypestsreasoningblock)
-- [`event:web/deepseek-search-llm-request.data.body.messages[0].content[0]`](#persistence-type-eventwebdeepseek-search-llm-requestdatabodymessages0content0)
-- [`packages/llm/llm/src/types.ts#ToolCallBlock`](#persistence-type-packagesllmllmsrctypeststoolcallblock)
-- [`packages/llm/llm/src/types.ts#ImageBlock`](#persistence-type-packagesllmllmsrctypestsimageblock)
-- [`packages/llm/llm/src/types.ts#FileBlock`](#persistence-type-packagesllmllmsrctypestsfileblock)
-- [`packages/llm/llm/src/types.ts#ToolResultBlock`](#persistence-type-packagesllmllmsrctypeststoolresultblock)
+- [`ReasoningBlock`](#persistence-type-sha256-814d9434e1ddf9078612b3b34322f26e9363b469213335007f7e9ba7fee9464e)
+- [`TextBlock`](#persistence-type-sha256-4e887768586528565381dadbddee6cef555874148089f4579e0b4b1ad096fc9c)
+- [`ToolCallBlock`](#persistence-type-sha256-c1f0f17b6493b85db6453bb30e01b208d703731b25bc1e68e5d4fc72eea9cdea)
+- [`ImageBlock`](#persistence-type-sha256-12d5808fac1996b9b3c2afa806e03022252ba2d7b88f835862ae1896591f60c7)
+- [`FileBlock`](#persistence-type-sha256-f2da0f27c1e6add59982c37b15e4a4912c5b33466859cce3b13d503600e24aef)
+- [`ToolResultBlock`](#persistence-type-sha256-d61574d68558c5a184429e70b04da393dd5460bf5cc3ddef814546e659bd5127)
+
+
+
+
-### `packages/llm/llm/src/types.ts#ContentBlockType`
+### `ContentBlockType`
SHA-256: `757013fff5879d73d5753d8d1120faab56110e88ac3932485ab7e034d9e9ce61`
@@ -5323,219 +2964,106 @@ SHA-256: `757013fff5879d73d5753d8d1120faab56110e88ac3932485ab7e034d9e9ce61`
- `"tool-call"`
- `"tool-result"`
-
+
-### `packages/llm/llm/src/types.ts#FileBlock`
+### `ContentBlock[]`
-SHA-256: `f2da0f27c1e6add59982c37b15e4a4912c5b33466859cce3b13d503600e24aef`
+SHA-256: `bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75`
-来源:[`packages/llm/llm/src/types.ts:97`](../packages/llm/llm/src/types.ts)
+[`ContentBlock`](#persistence-type-sha256-c7b24be059d34d08929593049a1a81eaa3855166aacfe9d7603c0bc8bb728d56) 的数组。
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `attachment` | 必需 | [`packages/attachment/attachment/src/types.ts#FileAttachmentRef`](#persistence-type-packagesattachmentattachmentsrctypestsfileattachmentref) |
-| `type` | 必需 | `"file"` |
+
-
+
-### `packages/llm/llm/src/types.ts#FinishReason`
+
-SHA-256: `5808e36c95355f0e745201b5db1b6bcec4ebf5adb75d3e82d7d59cc89635ab80`
+### `ContextSnapshotSection`
-来源:[`packages/llm/llm/src/types.ts:152`](../packages/llm/llm/src/types.ts)
+SHA-256: `86e1e384495ee09ac2d60c9db3610f1f1fddac2d248f6f1d6000e78054680219`
-以下类型之一:
-
-- [`event:assistant/attempt.data.stream[0][3].chunk[6].reason[3]`](#persistence-type-eventassistantattemptdatastream03chunk6reason3)
-- [`event:assistant/attempt.data.stream[0][3].chunk[6].reason[4]`](#persistence-type-eventassistantattemptdatastream03chunk6reason4)
-- [`event:assistant/attempt.data.stream[0][3].chunk[6].reason[0]`](#persistence-type-eventassistantattemptdatastream03chunk6reason0)
-- [`event:assistant/attempt.data.stream[0][3].chunk[6].reason[1]`](#persistence-type-eventassistantattemptdatastream03chunk6reason1)
-- [`event:assistant/attempt.data.stream[0][3].chunk[6].reason[2]`](#persistence-type-eventassistantattemptdatastream03chunk6reason2)
-
-
-
-### `packages/llm/llm/src/types.ts#ImageBlock`
-
-SHA-256: `12d5808fac1996b9b3c2afa806e03022252ba2d7b88f835862ae1896591f60c7`
-
-来源:[`packages/llm/llm/src/types.ts:78`](../packages/llm/llm/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `attachment` | 必需 | [`packages/attachment/attachment/src/types.ts#ImageAttachmentRef`](#persistence-type-packagesattachmentattachmentsrctypestsimageattachmentref) |
-| `offloaded` | 可选 | `true` |
-| `type` | 必需 | `"image"` |
-
-
-
-### `packages/llm/llm/src/types.ts#LlmFailure`
-
-SHA-256: `5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca`
-
-来源:[`packages/llm/llm/src/types.ts:40`](../packages/llm/llm/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `code` | 必需 | `string` |
-| `message` | 必需 | `string` |
-| `offloadImages` | 可选 | `number` |
-| `providerRetryAfterMs` | 可选 | `number` |
-| `requestId` | 可选 | `string` |
-| `status` | 可选 | `number` |
-
-
-
-### `packages/llm/llm/src/types.ts#ReasoningBlock`
-
-SHA-256: `814d9434e1ddf9078612b3b34322f26e9363b469213335007f7e9ba7fee9464e`
-
-来源:[`packages/llm/llm/src/types.ts:67`](../packages/llm/llm/src/types.ts)
+来源:[`packages/llm/llm/src/message.ts:65`](../packages/llm/llm/src/message.ts)
| 属性 | 存在性 | 类型 |
|---|---|---|
+| `name` | 必需 | `string` |
| `text` | 必需 | `string` |
-| `type` | 必需 | `"reasoning"` |
-
+
-### `packages/llm/llm/src/types.ts#ReplayEnvelope`
+### `ContextSnapshotSection[]`
-SHA-256: `0acd94fe8794574c9ae72c7855ee16d29c546096d4af760d16d1225385764555`
+SHA-256: `c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262`
-来源:[`packages/llm/llm/src/types.ts:404`](../packages/llm/llm/src/types.ts)
+[`ContextSnapshotSection`](#persistence-type-sha256-86e1e384495ee09ac2d60c9db3610f1f1fddac2d248f6f1d6000e78054680219) 的数组。
+
+
+
+
+
+
+
+### `ContinuableSubagentDescriptorData`
+
+SHA-256: `6487b10ba7542f3c447b1e41a1c6a590b7bfafe0b9b66b49f34028da85bb970f`
+
+来源:[`packages/subagent/subagent/src/descriptor.ts:72`](../packages/subagent/subagent/src/descriptor.ts)
| 属性 | 存在性 | 类型 |
|---|---|---|
-| `blocks` | 可选 | [`event:assistant/attempt.data.stream[0][3].chunk[6].replayState.blocks`](#persistence-type-eventassistantattemptdatastream03chunk6replaystateblocks) |
-| `response` | 必需 | `unknown`(不透明) |
+| `agentModel` | 可选 | `string` |
+| `agentProvider` | 可选 | `string` |
+| `agentReasoningEffort` | 可选 | `string` |
+| `label` | 必需 | `string` |
+| `mode` | 必需 | `"continuable"` |
+| `persona` | 可选 | `string` |
+| `provider` | 必需 | `string` |
+| `toolFilter` | 可选 | [`ToolRestriction`](#persistence-type-sha256-3cfc3a56502da1f8c6153c2c56657bab4b749056968634dd0991d325ec1c919f) |
+| `version` | 必需 | `number` |
-
+
-### `packages/llm/llm/src/types.ts#StreamChunk`
+
-SHA-256: `071d92b9dac661fcc826c678cf64d188f26fb93aab79c627b11a03acdd34dfca`
+
-来源:[`packages/llm/llm/src/types.ts:426`](../packages/llm/llm/src/types.ts)
+### `DeepSeekSearchLlmRequest`
-以下类型之一:
+SHA-256: `2517ba143a271508d3ca35126d5aca8f7f1facf5aaddce4adf011832042fa2b9`
-- [`event:assistant/attempt.data.stream[0][3].chunk[3]`](#persistence-type-eventassistantattemptdatastream03chunk3)
-- [`event:assistant/attempt.data.stream[0][3].chunk[4]`](#persistence-type-eventassistantattemptdatastream03chunk4)
-- [`event:assistant/attempt.data.stream[0][3].chunk[0]`](#persistence-type-eventassistantattemptdatastream03chunk0)
-- [`event:assistant/attempt.data.stream[0][3].chunk[2]`](#persistence-type-eventassistantattemptdatastream03chunk2)
-- [`event:assistant/attempt.data.stream[0][3].chunk[1]`](#persistence-type-eventassistantattemptdatastream03chunk1)
-- [`event:assistant/attempt.data.stream[0][3].chunk[6]`](#persistence-type-eventassistantattemptdatastream03chunk6)
-- [`event:assistant/attempt.data.stream[0][3].chunk[5]`](#persistence-type-eventassistantattemptdatastream03chunk5)
-
-
-
-### `packages/llm/llm/src/types.ts#TokenUsage`
-
-SHA-256: `fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394`
-
-来源:[`packages/llm/llm/src/types.ts:162`](../packages/llm/llm/src/types.ts)
+来源:[`packages/web/web-search-deepseek/src/provider.ts:55`](../packages/web/web-search-deepseek/src/provider.ts)
| 属性 | 存在性 | 类型 |
|---|---|---|
-| `cacheReadTokens` | 可选 | `number` |
-| `cacheWriteTokens` | 可选 | `number` |
-| `inputTokens` | 必需 | `number` |
-| `outputTokens` | 必需 | `number` |
-| `reasoningTokens` | 可选 | `number` |
-| `totalTokens` | 可选 | `number` |
+| `apiVersion` | 必需 | `string` |
+| `body` | 必需 | [`{ max_tokens, messages, model, tools }`](#persistence-type-sha256-930a6567a10bb62ddd157bd8abdf4b182810c8c3b49d91309b3b009a5fed9731) |
+| `endpoint` | 必需 | `string` |
-
+
-### `packages/llm/llm/src/types.ts#ToolCallBlock`
+
-SHA-256: `c1f0f17b6493b85db6453bb30e01b208d703731b25bc1e68e5d4fc72eea9cdea`
+
-来源:[`packages/llm/llm/src/types.ts:104`](../packages/llm/llm/src/types.ts)
+### `EpochHeader`
+
+SHA-256: `c55a891c7aac496de6ee64c91c1fb65728c977314013033e42c863428aada854`
+
+来源:[`packages/core/session/src/types.ts:239`](../packages/core/session/src/types.ts)
| 属性 | 存在性 | 类型 |
|---|---|---|
-| `arguments` | 必需 | `string` |
-| `id` | 必需 | `string` |
-| `name` | 必需 | `string` |
-| `type` | 必需 | `"tool-call"` |
+| `adapterDefaults` | 可选 | [`LlmCallConfigAdapterDefaults`](#persistence-type-sha256-326a9bfda27dda5882fb3cbe6e715df41dae2298fdae3d66437457268a665693) |
+| `config` | 必需 | [`LlmCallConfig`](#persistence-type-sha256-67d5f73ceae82f5265258142ad6cf172de2c1fef93ba551b7f0454e0a93bffe0) |
+| `tools` | 可选 | [`ToolSchema[]`](#persistence-type-sha256-6d63f25a28b70801937a46b1058be5f52d4efbaf3516141470463ae469b59c23) |
-
+
-### `packages/llm/llm/src/types.ts#ToolResultBlock`
-
-SHA-256: `d61574d68558c5a184429e70b04da393dd5460bf5cc3ddef814546e659bd5127`
-
-来源:[`packages/llm/llm/src/types.ts:114`](../packages/llm/llm/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `content` | 必需 | [`event:agent/inbox/spliced.data.inserted[0].content`](#persistence-type-eventagentinboxspliceddatainserted0content) |
-| `isError` | 可选 | `boolean` |
-| `toolCallId` | 必需 | `string` |
-| `type` | 必需 | `"tool-result"` |
-
-
-
-### `packages/llm/llm/src/types.ts#ToolSchema`
-
-SHA-256: `7f5f2a8618c2ece530a18b1358b890fb57fb8c35705e47b66bff2296f8c6e889`
-
-来源:[`packages/llm/llm/src/types.ts:447`](../packages/llm/llm/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `description` | 必需 | `string` |
-| `name` | 必需 | `string` |
-| `parameters` | 必需 | [`event:request/header.data.header.tools[0].parameters`](#persistence-type-eventrequestheaderdataheadertools0parameters) |
-
-
-
-### `packages/sandbox/sandbox/src/index.ts#SandboxMode`
-
-SHA-256: `fab2bb09bc5e3b9db0685e8f5500b029af1a2b33e70bc703c1d5d0f596fbc1fd`
-
-来源:[`packages/sandbox/sandbox/src/index.ts:29`](../packages/sandbox/sandbox/src/index.ts)
-
-以下类型之一:
-
-- `"danger-full-access"`
-- `"read-only"`
-- `"workspace-write"`
-
-
-
-### `packages/schedule/schedule/src/types.ts#AfterScheduleRecord`
-
-SHA-256: `27e337d3d6b402b221e50c247a3f518a70d0c474cc60beee15fac3e9c5cbfcbe`
-
-来源:[`packages/schedule/schedule/src/types.ts:13`](../packages/schedule/schedule/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `afterSeconds` | 必需 | `number` |
-| `id` | 必需 | `string` |
-| `kind` | 必需 | `"after"` |
-| `prompt` | 必需 | `string` |
-| `scheduledAt` | 必需 | `string` |
-
-
-
-### `packages/schedule/schedule/src/types.ts#AtScheduleRecord`
-
-SHA-256: `658d895d187b26d83f3b53109a3bf77bbfba9f6f9a6d4bc4ee4315b4eb36239e`
-
-来源:[`packages/schedule/schedule/src/types.ts:27`](../packages/schedule/schedule/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `id` | 必需 | `string` |
-| `kind` | 必需 | `"at"` |
-| `prompt` | 必需 | `string` |
-| `scheduledAt` | 必需 | `string` |
+
-### `packages/schedule/schedule/src/types.ts#EveryScheduleDispatchChange`
+### `EveryScheduleDispatchChange`
SHA-256: `e6063d0451dc02026fd9b54ad3f77c7b1b6392ad3e872a7737ac84e13ca72344`
@@ -5548,9 +3076,13 @@ SHA-256: `e6063d0451dc02026fd9b54ad3f77c7b1b6392ad3e872a7737ac84e13ca72344`
| `operation` | 必需 | `"dispatch"` |
| `version` | 必需 | `1` |
+
+
+
+
-### `packages/schedule/schedule/src/types.ts#EveryScheduleRecord`
+### `EveryScheduleRecord`
SHA-256: `66ece68282d8c06330fb83329a24ae54c386d5ccfab296bbf18369da8beb7d14`
@@ -5564,80 +3096,239 @@ SHA-256: `66ece68282d8c06330fb83329a24ae54c386d5ccfab296bbf18369da8beb7d14`
| `prompt` | 必需 | `string` |
| `scheduledAt` | 必需 | `string` |
-
+
-### `packages/schedule/schedule/src/types.ts#OneShotScheduleDispatchChange`
+
-SHA-256: `8e8e91646a5cae3fc78f7532a0013ff2088ae47077642c2edd507a508209b8af`
+
-来源:[`packages/schedule/schedule/src/types.ts:86`](../packages/schedule/schedule/src/types.ts)
+### `FeedbackRecord`
+
+SHA-256: `7d54a5a5e629e2e7783bfac72683bcc5e969e9f43426b9289826aaf294ff6344`
+
+来源:[`packages/feedback/command-feedback/src/types.ts:27`](../packages/feedback/command-feedback/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `category` | 可选 | [`union (7 variants)`](#persistence-type-sha256-3305a4bb6b6c29b482ba91d59c60b47e8f98282d3dacc8c29e4a4c2712209bdd) |
+| `text` | 可选 | `string` |
+
+
+
+
+
+
+
+### `FileAttachmentRef`
+
+SHA-256: `f19bee84bf3d20904553cdcd57465232bc1c2a194f54c4d195292ba0487223a6`
+
+来源:[`packages/attachment/attachment/src/types.ts:39`](../packages/attachment/attachment/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `attachmentId` | 必需 | `string` |
+| `bytes` | 必需 | `number` |
+| `name` | 必需 | `string` |
+
+
+
+
+
+
+
+### `FileBlock`
+
+SHA-256: `f2da0f27c1e6add59982c37b15e4a4912c5b33466859cce3b13d503600e24aef`
+
+来源:[`packages/llm/llm/src/types.ts:97`](../packages/llm/llm/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `attachment` | 必需 | [`FileAttachmentRef`](#persistence-type-sha256-f19bee84bf3d20904553cdcd57465232bc1c2a194f54c4d195292ba0487223a6) |
+| `type` | 必需 | `"file"` |
+
+
+
+
+
+
+
+### `FinishReason`
+
+SHA-256: `5808e36c95355f0e745201b5db1b6bcec4ebf5adb75d3e82d7d59cc89635ab80`
+
+来源:[`packages/llm/llm/src/types.ts:152`](../packages/llm/llm/src/types.ts)
+
+| kind | form 属性 | 其他必需字段 | 完整定义 |
+|---|---|---|---|
+| `aborted` | 未声明 | `failure`: [`LlmFailure`](#persistence-type-sha256-5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca) | [`{ failure, kind: "aborted" }`](#persistence-type-sha256-8e31bb958e9b015e6f8407eaade32217068159e816f3cc99c3ad76eb889732e0) |
+| `error` | 未声明 | `failure`: [`LlmFailure`](#persistence-type-sha256-5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca) | [`{ failure, kind: "error" }`](#persistence-type-sha256-693f4952fb5565da96c06bace8924b098ac2fbc915fde0ff8019701183abc057) |
+| `max-tokens` | 未声明 | 无 | [`{ kind: "max-tokens" }`](#persistence-type-sha256-ab7ec5f9eb2c6dfacca5da4c37cf7ba85d04172053ee6b1ebf1709ffcd99c1a7) |
+| `stop` | 未声明 | 无 | [`{ kind: "stop" }`](#persistence-type-sha256-1d76406cbb2ddadb0dbbb51e9d8bc6cf678fed455cf8eb512f36f7c86d37a62f) |
+| `tool-calls` | 未声明 | 无 | [`{ kind: "tool-calls" }`](#persistence-type-sha256-287211846beea1eccb5f9acee00d20388a38fcb2e95858fa2332d6f58529379a) |
+
+
+
+
+
+
+
+### `GoalBlockReason`
+
+SHA-256: `84ac8c1a66ffc697262e181f42e851259eae14038c113ca329fb4700ccdb1f7c`
+
+来源:[`packages/goal/goal/src/types.ts:52`](../packages/goal/goal/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `code` | 必需 | `string` |
+| `message` | 必需 | `string` |
+
+
+
+
+
+
+
+### `GoalChangeMeta`
+
+SHA-256: `7d226b9fd95b4ba213d4237c22e930a91c3c769c95ca7f92977b9d625ba13438`
+
+来源:[`packages/goal/goal/src/domain.ts:44`](../packages/goal/goal/src/domain.ts)
+
+| kind | form 属性 | 其他必需字段 | 完整定义 |
+|---|---|---|---|
+| `goal/change` | 未声明 | `createdAt`: `number`; `goal`: [`GoalSnapshot`](#persistence-type-sha256-6bbe793f6a93dc8d50a4d4d3fbb6f8ed15650bcb7e151d28669628f7b7c3fc25); `operation`: [`union (6 variants)`](#persistence-type-sha256-62e6a429ff3f390a46ac39fb468692032f42936ca0db19b53454184189401379); `roundsStarted`: `number`; `updatedAt`: `number`; `version`: `1` | [`GoalSnapshotChangeMeta`](#persistence-type-sha256-1df34a6c086866ffdc2dd9e8e5c581c3751a010cdf6b8538a7327f7a3237f0b4) |
+| `goal/change` | 未声明 | `cleared`: [`GoalRef`](#persistence-type-sha256-0b6d718c693fdf7f06dcccb0bcbbabe78cc63514eafc62d6b2a3899735279d6f); `clearedAt`: `number`; `operation`: `"clear"`; `version`: `1` | [`GoalClearChangeMeta`](#persistence-type-sha256-cffcdc19881ab61ec0a9ce18743996f7ac44ac8889f34dfac36ae745574aa22f) |
+
+
+
+
+
+
+
+### `GoalClearChangeMeta`
+
+SHA-256: `cffcdc19881ab61ec0a9ce18743996f7ac44ac8889f34dfac36ae745574aa22f`
+
+来源:[`packages/goal/goal/src/domain.ts:35`](../packages/goal/goal/src/domain.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `cleared` | 必需 | [`GoalRef`](#persistence-type-sha256-0b6d718c693fdf7f06dcccb0bcbbabe78cc63514eafc62d6b2a3899735279d6f) |
+| `clearedAt` | 必需 | `number` |
+| `kind` | 必需 | `"goal/change"` |
+| `operation` | 必需 | `"clear"` |
+| `version` | 必需 | `1` |
+
+
+
+
+
+
+
+### `GoalMessageSource`
+
+SHA-256: `7f959241c24128b4983b559984811861dc59774b85905c8fa57c6cb0148a3dbc`
+
+来源:[`packages/goal/goal/src/domain.ts:47`](../packages/goal/goal/src/domain.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `goalId` | 必需 | `string` |
+| `kind` | 必需 | `"goal"` |
+| `revision` | 必需 | `number` |
+| `round` | 必需 | `number` |
+
+
+
+
+
+
+
+### `GoalPhase`
+
+SHA-256: `b8327af7ee5767952d1300cb4f03b7fc04197ae5ba275e13981c689ff7506172`
+
+来源:[`packages/goal/goal/src/types.ts:45`](../packages/goal/goal/src/types.ts)
+
+以下类型之一:
+
+- `"active"`
+- `"blocked"`
+- `"complete"`
+- `"paused"`
+
+
+
+
+
+
+
+### `GoalRef`
+
+SHA-256: `0b6d718c693fdf7f06dcccb0bcbbabe78cc63514eafc62d6b2a3899735279d6f`
+
+来源:[`packages/goal/goal/src/types.ts:20`](../packages/goal/goal/src/types.ts)
| 属性 | 存在性 | 类型 |
|---|---|---|
| `id` | 必需 | `string` |
-| `operation` | 必需 | `"dispatch"` |
-| `version` | 必需 | `1` |
+| `revision` | 必需 | `number` |
-
+
-### `packages/schedule/schedule/src/types.ts#ScheduleChange`
+
-SHA-256: `e1d0e52dcd1855ffb803efc18f8f7b776c48d1c25757e8a75c0281fa298c02e1`
+
-来源:[`packages/schedule/schedule/src/types.ts:105`](../packages/schedule/schedule/src/types.ts)
+### `GoalSnapshot`
-以下类型之一:
+SHA-256: `6bbe793f6a93dc8d50a4d4d3fbb6f8ed15650bcb7e151d28669628f7b7c3fc25`
-- [`packages/schedule/schedule/src/types.ts#EveryScheduleDispatchChange`](#persistence-type-packagesscheduleschedulesrctypestseveryscheduledispatchchange)
-- [`packages/schedule/schedule/src/types.ts#ScheduleDeleteChange`](#persistence-type-packagesscheduleschedulesrctypestsscheduledeletechange)
-- [`packages/schedule/schedule/src/types.ts#OneShotScheduleDispatchChange`](#persistence-type-packagesscheduleschedulesrctypestsoneshotscheduledispatchchange)
-- [`packages/schedule/schedule/src/types.ts#ScheduleCreateChange`](#persistence-type-packagesscheduleschedulesrctypestsschedulecreatechange)
-
-
-
-### `packages/schedule/schedule/src/types.ts#ScheduleCreateChange`
-
-SHA-256: `ca6425edd20afe34d0cedc6ad1abad1ad7b32e2fbc4c1d24db53939e80bf887f`
-
-来源:[`packages/schedule/schedule/src/types.ts:72`](../packages/schedule/schedule/src/types.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `operation` | 必需 | `"create"` |
-| `schedule` | 必需 | [`packages/schedule/schedule/src/types.ts#ScheduleRecord`](#persistence-type-packagesscheduleschedulesrctypestsschedulerecord) |
-| `version` | 必需 | `1` |
-
-
-
-### `packages/schedule/schedule/src/types.ts#ScheduleDeleteChange`
-
-SHA-256: `18dc21f12bbac8ade8377e6fbb54179e20c3d955d73fba3244c57fb6bf001df0`
-
-来源:[`packages/schedule/schedule/src/types.ts:79`](../packages/schedule/schedule/src/types.ts)
+来源:[`packages/goal/goal/src/types.ts:60`](../packages/goal/goal/src/types.ts)
| 属性 | 存在性 | 类型 |
|---|---|---|
+| `blockedReason` | 可选 | [`GoalBlockReason`](#persistence-type-sha256-84ac8c1a66ffc697262e181f42e851259eae14038c113ca329fb4700ccdb1f7c) |
| `id` | 必需 | `string` |
-| `operation` | 必需 | `"delete"` |
+| `maxGoalRounds` | 必需 | `number` |
+| `objective` | 必需 | `string` |
+| `phase` | 必需 | [`GoalPhase`](#persistence-type-sha256-b8327af7ee5767952d1300cb4f03b7fc04197ae5ba275e13981c689ff7506172) |
+| `revision` | 必需 | `number` |
+
+
+
+
+
+
+
+### `GoalSnapshotChangeMeta`
+
+SHA-256: `1df34a6c086866ffdc2dd9e8e5c581c3751a010cdf6b8538a7327f7a3237f0b4`
+
+来源:[`packages/goal/goal/src/domain.ts:24`](../packages/goal/goal/src/domain.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `createdAt` | 必需 | `number` |
+| `goal` | 必需 | [`GoalSnapshot`](#persistence-type-sha256-6bbe793f6a93dc8d50a4d4d3fbb6f8ed15650bcb7e151d28669628f7b7c3fc25) |
+| `kind` | 必需 | `"goal/change"` |
+| `operation` | 必需 | [`union (6 variants)`](#persistence-type-sha256-62e6a429ff3f390a46ac39fb468692032f42936ca0db19b53454184189401379) |
+| `roundsStarted` | 必需 | `number` |
+| `updatedAt` | 必需 | `number` |
| `version` | 必需 | `1` |
-
+
-### `packages/schedule/schedule/src/types.ts#ScheduleRecord`
+
-SHA-256: `d8f868c6b3e7189de6c1ffe2ea04794ea2aa31315b6347d12536e46020afac87`
-
-来源:[`packages/schedule/schedule/src/types.ts:69`](../packages/schedule/schedule/src/types.ts)
-
-以下类型之一:
-
-- [`packages/schedule/schedule/src/types.ts#AfterScheduleRecord`](#persistence-type-packagesscheduleschedulesrctypestsafterschedulerecord)
-- [`packages/schedule/schedule/src/types.ts#EveryScheduleRecord`](#persistence-type-packagesscheduleschedulesrctypestseveryschedulerecord)
-- [`packages/schedule/schedule/src/types.ts#AtScheduleRecord`](#persistence-type-packagesscheduleschedulesrctypestsatschedulerecord)
+
-### `packages/session/session-persistence-jsonl/src/format.ts#HeaderLine`
+### `HeaderLine`
SHA-256: `18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f`
@@ -5656,158 +3347,445 @@ SHA-256: `18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f`
| `type` | 必需 | `"session"` |
| `version` | 必需 | `number` |
-
+
-### `packages/session/session-title-llm/src/index.ts#SessionTitleLlmRequestEventData`
+
-SHA-256: `9fe0e77a7816b7fdb4b953ec0e2f0cd7bbd22c5de5c3567e612d1b20eb0992e6`
+
-来源:[`packages/session/session-title-llm/src/index.ts:27`](../packages/session/session-title-llm/src/index.ts)
+### `HookDialect`
+
+SHA-256: `a6b41f5bede8094d7bf635be5d69b1bd7a25e006ca9cf9415bceb9322f1a7feb`
+
+来源:[`packages/hooks/hook-protocol/src/types.ts:48`](../packages/hooks/hook-protocol/src/types.ts)
+
+以下类型之一:
+
+- `"claude-code"`
+- `"codex"`
+
+
+
+
+
+
+
+### `ImageAttachmentRef`
+
+SHA-256: `b0b0eb1b16490f6bee135b2377e8f8c39227974c799ad7d49ff418af23ecbc35`
+
+来源:[`packages/attachment/attachment/src/types.ts:11`](../packages/attachment/attachment/src/types.ts)
| 属性 | 存在性 | 类型 |
|---|---|---|
-| `maxTokens` | 必需 | `number` |
-| `messageSeqs` | 必需 | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `messages` | 必需 | [`event:session/title-llm-request.data.messages`](#persistence-type-eventsessiontitle-llm-requestdatamessages) |
-| `route` | 必需 | [`packages/session/session-title/src/types.ts#SessionTitleModelIdentity`](#persistence-type-packagessessionsession-titlesrctypestssessiontitlemodelidentity) |
-| `system` | 必需 | `string` |
-| `titleProvider` | 必需 | `string` |
+| `attachmentId` | 必需 | `string` |
+| `bytes` | 必需 | `number` |
+| `height` | 必需 | `number` |
+| `mediaType` | 必需 | [`ImageMediaType`](#persistence-type-sha256-2f1e6a7ebace43d727ae138ddcd352eb3813960009e5805b8c5ac84300c97716) |
+| `name` | 可选 | `string` |
+| `originalDimensions` | 可选 | [`{ height, width }`](#persistence-type-sha256-0f46153645c297846a3fad3911636659ca4717a5e7d71c9f50bffacd312115ef) |
+| `width` | 必需 | `number` |
-
+
-### `packages/session/session-title/src/types.ts#SessionTitleEventData`
+
-SHA-256: `b56f6a885da3dc394c69a3e3cc5c0cfc4da15601b63fda4989eee8f40efc5be4`
+
-来源:[`packages/session/session-title/src/types.ts:41`](../packages/session/session-title/src/types.ts)
+### `ImageBlock`
+
+SHA-256: `12d5808fac1996b9b3c2afa806e03022252ba2d7b88f835862ae1896591f60c7`
+
+来源:[`packages/llm/llm/src/types.ts:78`](../packages/llm/llm/src/types.ts)
| 属性 | 存在性 | 类型 |
|---|---|---|
-| `messageSeqs` | 必需 | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `source` | 必需 | [`packages/session/session-title/src/types.ts#SessionTitleSource`](#persistence-type-packagessessionsession-titlesrctypestssessiontitlesource) |
-| `title` | 必需 | `string` |
+| `attachment` | 必需 | [`ImageAttachmentRef`](#persistence-type-sha256-b0b0eb1b16490f6bee135b2377e8f8c39227974c799ad7d49ff418af23ecbc35) |
+| `offloaded` | 可选 | `true` |
+| `type` | 必需 | `"image"` |
-
+
-### `packages/session/session-title/src/types.ts#SessionTitleModelIdentity`
+
-SHA-256: `07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235`
+
-来源:[`packages/session/session-title/src/types.ts:20`](../packages/session/session-title/src/types.ts) · [`packages/subagent/tool-subagent/src/model-selection.ts:9`](../packages/subagent/tool-subagent/src/model-selection.ts)
+### `ImageMediaType`
+
+SHA-256: `2f1e6a7ebace43d727ae138ddcd352eb3813960009e5805b8c5ac84300c97716`
+
+来源:[`packages/attachment/attachment/src/types.ts:8`](../packages/attachment/attachment/src/types.ts)
+
+以下类型之一:
+
+- `"image/gif"`
+- `"image/jpeg"`
+- `"image/png"`
+- `"image/webp"`
+
+
+
+
+
+
+
+### `ImageOffloadTarget`
+
+SHA-256: `1cde1bedde79c5e8a56aee9c05c8e0a579cf5bc611deb85b93fa331a16ca978f`
+
+来源:[`packages/compaction/compaction-image-offload/src/projection.ts:9`](../packages/compaction/compaction-image-offload/src/projection.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `imageIndexes` | 必需 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `seq` | 必需 | `number` |
+
+
+
+### `ImageOffloadTarget[]`
+
+SHA-256: `9e2c06d8653585b33d72d5c1a80da79c8a24a88c284409bca15cc0f0ead5ebfb`
+
+[`ImageOffloadTarget`](#persistence-type-sha256-1cde1bedde79c5e8a56aee9c05c8e0a579cf5bc611deb85b93fa331a16ca978f) 的数组。
+
+
+
+
+
+
+
+### `InboxTarget`
+
+SHA-256: `96f4a9c81fc0f940ef71528a8cc66731ae4cf1f40d79680c5fe3c39f96d7723c`
+
+来源:[`packages/core/agent/src/types.ts:30`](../packages/core/agent/src/types.ts)
+
+以下类型之一:
+
+- `"next-step"`
+- `"next-turn"`
+
+
+
+
+
+
+
+### `JsonValue`
+
+SHA-256: `c592ce75aab73fcab19c1d7845684c72cf402b78d2e1f2833a58ecf9f3598ed6`
+
+来源:[`packages/util/values/src/index.ts:4`](../packages/util/values/src/index.ts)
+
+以下类型之一:
+
+- [`JsonValue[]`](#persistence-type-sha256-72ec79127a9c0d0241b1106a74cc2b24c81ce467170f1c3c93f7b71a9496d227)
+- [`{}`](#persistence-type-sha256-529e0ccd0e34079ab4ff21ed87f810cee0388246263bf22e8aba5986b56fae05)
+- `string`
+- `boolean`
+- `null`
+- `number`
+
+
+
+### `JsonValue[]`
+
+SHA-256: `72ec79127a9c0d0241b1106a74cc2b24c81ce467170f1c3c93f7b71a9496d227`
+
+[`JsonValue`](#persistence-type-sha256-c592ce75aab73fcab19c1d7845684c72cf402b78d2e1f2833a58ecf9f3598ed6) 的数组。
+
+
+
+
+
+
+
+### `LlmCallConfig`
+
+SHA-256: `67d5f73ceae82f5265258142ad6cf172de2c1fef93ba551b7f0454e0a93bffe0`
+
+来源:[`packages/llm/llm/src/call-config.ts:23`](../packages/llm/llm/src/call-config.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `maxTokens` | 可选 | `number` |
+| `model` | 必需 | `string` |
+| `provider` | 必需 | `string` |
+| `reasoningEffort` | 可选 | `string` |
+| `stop` | 可选 | [`string[]`](#persistence-type-sha256-93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2) |
+| `temperature` | 可选 | `number` |
+
+
+
+
+
+
+
+### `LlmCallConfigAdapterDefaults`
+
+SHA-256: `326a9bfda27dda5882fb3cbe6e715df41dae2298fdae3d66437457268a665693`
+
+来源:[`packages/llm/llm/src/call-config.ts:36`](../packages/llm/llm/src/call-config.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `maxTokens` | 可选 | `true` |
+| `reasoningEffort` | 可选 | `true` |
+
+
+
+
+
+
+
+### `LlmFailure`
+
+SHA-256: `5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca`
+
+来源:[`packages/llm/llm/src/types.ts:40`](../packages/llm/llm/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `code` | 必需 | `string` |
+| `message` | 必需 | `string` |
+| `offloadImages` | 可选 | `number` |
+| `providerRetryAfterMs` | 可选 | `number` |
+| `requestId` | 可选 | `string` |
+| `status` | 可选 | `number` |
+
+
+
+
+
+
+
+### `LlmRetryEventData`
+
+SHA-256: `c170da8ab7c37635b10867b2571811d9e317ac3ec394e8ff8efe53f902fc41c1`
+
+来源:[`packages/llm/llm-retry/src/types.ts:16`](../packages/llm/llm-retry/src/types.ts)
+
+以下类型之一:
+
+- [`{ delayMs, failure, maxRetries, mode, … }`](#persistence-type-sha256-cdee10e87dbed8440d8b6935888624884878efc7af95402e94171b29f173dced)
+- [`{ delayMs, failure, mode, policyKey, … }`](#persistence-type-sha256-374fdd68aee5ff844e378c0cbdd961d247a0f22e4ade0bb03d800cd2a46a2b8b)
+
+
+
+
+
+
+
+### `LlmRetryStartedEventData`
+
+SHA-256: `6f72ece8f317cd080c4f20a93f1bf709965f5b81ac4669528f5a023191cfcf20`
+
+来源:[`packages/llm/llm-retry/src/types.ts:43`](../packages/llm/llm-retry/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `retry` | 必需 | `number` |
+| `retryId` | 必需 | `string` |
+| `step` | 必需 | `number` |
+| `turn` | 必需 | `number` |
+
+
+
+
+
+
+
+### `Message`
+
+SHA-256: `23c7cce57d20589897f4e2bd5898affc6fc611b87cd0cc8b95be1cfdd8b3a7eb`
+
+来源:[`packages/llm/llm/src/message.ts:131`](../packages/llm/llm/src/message.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `content` | 必需 | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `id` | 必需 | `string` |
+| `role` | 必需 | [`union (3 variants)`](#persistence-type-sha256-acd36e1717d2b4ef9e98a8e6fac17ca1203f3f448e5bca51677f129a8f4999e2) |
+| `source` | 必需 | [`MessageSource`](#persistence-type-sha256-4c965666d5b42116945bc356087cd5e1fd549e6dece560785ed60511059a8283) |
+
+
+
+
+
+
+
+### `MessageFeedbackDelete`
+
+SHA-256: `7c6129b6961cf4b2a030f36c78d2b0a5be38617651a9b81322e054ee512bee06`
+
+来源:[`packages/feedback/message-feedback/src/types.ts:46`](../packages/feedback/message-feedback/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `messageId` | 必需 | `string` |
+| `sessionId` | 必需 | `string` |
+
+
+
+
+
+
+
+### `MessageFeedbackItem`
+
+SHA-256: `3d7d07060a7be77984feb651ea2bf1925d3e0477911d9d3ed86330d1e8ca6182`
+
+来源:[`packages/feedback/message-feedback/src/types.ts:20`](../packages/feedback/message-feedback/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `category` | 可选 | [`union (7 variants)`](#persistence-type-sha256-3305a4bb6b6c29b482ba91d59c60b47e8f98282d3dacc8c29e4a4c2712209bdd) |
+| `createdAt` | 必需 | `number` |
+| `messageId` | 必需 | `string` |
+| `note` | 可选 | `string` |
+| `rating` | 必需 | [`MessageFeedbackRating`](#persistence-type-sha256-390eed1028aba02774f14408647acec10ec5516e97d4f15ecde2b9989d5a69f2) |
+| `updatedAt` | 必需 | `number` |
+| `version` | 必需 | `string` |
+
+
+
+
+
+
+
+### `MessageFeedbackPut`
+
+SHA-256: `aa7bc2817014ca6c45719b1c193c5c131be718a0921f34345098ff250f444626`
+
+来源:[`packages/feedback/message-feedback/src/types.ts:38`](../packages/feedback/message-feedback/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `item` | 必需 | [`MessageFeedbackItem`](#persistence-type-sha256-3d7d07060a7be77984feb651ea2bf1925d3e0477911d9d3ed86330d1e8ca6182) |
+| `sessionId` | 必需 | `string` |
+
+
+
+
+
+
+
+### `MessageFeedbackRating`
+
+SHA-256: `390eed1028aba02774f14408647acec10ec5516e97d4f15ecde2b9989d5a69f2`
+
+来源:[`packages/feedback/message-feedback/src/types.ts:17`](../packages/feedback/message-feedback/src/types.ts)
+
+以下类型之一:
+
+- `"negative"`
+- `"positive"`
+
+
+
+
+
+
+
+### `MessageSource`
+
+SHA-256: `4c965666d5b42116945bc356087cd5e1fd549e6dece560785ed60511059a8283`
+
+来源:[`packages/llm/llm/src/message.ts:128`](../packages/llm/llm/src/message.ts)
+
+| kind | form 属性 | 其他必需字段 | 完整定义 |
+|---|---|---|---|
+| `agent-instructions` | `"instructions"` | `changes`: [`AgentInstructionChange[]`](#persistence-type-sha256-2ab12a0e345658f9342816d773fe610f049982bcad82631f43b9205abe43e5ee) | [`AgentInstructionSource`](#persistence-type-sha256-6f22a9d02b9a1f1157f3b0e7bdccd7e7b12b085c4efdb709dfc74a465cd4e590) |
+| `agent-message` | `"relay"` | `senderSessionId`: `string` | [`AgentMessageSource`](#persistence-type-sha256-4a9bef9f27a942520cc2279ca7dd3082556e4bff543f66b5c0333e1bbed1cd86) |
+| `goal` | 未声明 | `goalId`: `string`; `revision`: `number`; `round`: `number` | [`GoalMessageSource`](#persistence-type-sha256-7f959241c24128b4983b559984811861dc59774b85905c8fa57c6cb0148a3dbc) |
+| `model` | 未声明 | `model`: `string`; `provider`: `string` | [`ModelMessageSource`](#persistence-type-sha256-719c51f67074f97034a6c94297fe1f4b5d3c8d392c57586dab732aa5398c7a91) |
+| `plugin` | `"catalog"` | `plugin`: `string` | [`{ kind: "plugin", form: "catalog" }`](#persistence-type-sha256-2f90a7b3646fea3e677bd7b4000aa96f3b8964f107b614e204e11ad4051c24fc) |
+| `plugin` | `"instructions"` | `plugin`: `string` | [`{ kind: "plugin", form: "instructions" }`](#persistence-type-sha256-dda6e111a8ccfc12f6e742e977a1a4e3549e8c03732a5ff6c8d7c3d4bcb7a412) |
+| `plugin` | `"notice"` | `plugin`: `string`; `summary`: `string` | [`{ kind: "plugin", form: "notice" }`](#persistence-type-sha256-b4d298d90c798fa4d1f5b030ce3ce8031c4c41beafdb05323bec8b2a06903b43) |
+| `plugin` | `"recall"` | `plugin`: `string` | [`{ kind: "plugin", form: "recall" }`](#persistence-type-sha256-85e1bd563d6c80c1f377f99f91103fec4e315148a7330f3b3dae7c2d04e33b01) |
+| `plugin` | `"relay"` | `plugin`: `string` | [`{ kind: "plugin", form: "relay" }`](#persistence-type-sha256-2ce7ef3b3daebf95815c7ae454a751d3e67ca7a22e2e0734fe2942df393bb66c) |
+| `plugin` | `"snapshot"` | `plugin`: `string`; `sections`: [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) | [`{ kind: "plugin", form: "snapshot" }`](#persistence-type-sha256-e8d26e6993445743e6c4342c31b284c7d8f5574369abdd6021183af1a6b3538f) |
+| `plugin` | 未声明 | `plugin`: `string` | [`{ kind: "plugin" }`](#persistence-type-sha256-0ddab4577db37a3e0d9e3a91761735c8ef6f5629d526ab8ecaeeea19c097c8f8) |
+| `session-reference` | `"recall"` | `references`: [`{ capturedFormatVersion?, capturedThroughSeq, compacted, inputIndex, … }[]`](#persistence-type-sha256-df843efd87c78cf8de98f8e0d0216956cd568d0d0e56a22c853663e274aa1a18); `version`: `1` | [`SessionReferenceSource`](#persistence-type-sha256-f56c5b59ca0161310c338d31dd16cf14287ccd602ff4181058df178c1c286d7f) |
+| `skill-catalog` | `"catalog"` | `entries`: [`{ description, name }[]`](#persistence-type-sha256-aba175fb20ffc71112c55efe70458ff5d7dbfb83501892b4ba8d077f0ea5d7ba) | [`SkillCatalogSource`](#persistence-type-sha256-fc2ae6962f9f8801c2b1e414668e1e17cbb7544c4f39381198977a38bd10c093) |
+| `skill-invocation` | `"instructions"` | `name`: `string` | [`SkillInvocationSource`](#persistence-type-sha256-672c4aa2a9b736e3d6e5da6346d2e2ed5e3573f2d0baafa18e7407c9f3fee3db) |
+| `subagent-settled` | `"notice"` | `senderSessionId`: `string`; `summary`: `string` | [`SubagentSettledMessageSource`](#persistence-type-sha256-4e97c3d85c0fc817ee58873c38c25a2474abaaa0af4839311b50b68db3b8cf1a) |
+| `team-message` | 未声明 | `messageId`: `string`; `senderId`: `string`; `senderName`: `string`; `teamId`: `string` | [`TeamMessageSource`](#persistence-type-sha256-2152caf1a71e588e4df2358a806dea24936c1c47131134f01a12939d12cdc0c0) |
+| `tool` | 未声明 | `callId`: `string` | [`ToolMessageSource`](#persistence-type-sha256-d9c462b9f62fdd3efc76a44b9524dc8781f6b91cd9c7e584b17d971defafebab) |
+| `user` | 未声明 | `rpcId`: `string` | [`{ kind: "user" }`](#persistence-type-sha256-6a4f72e2e179e17b922f2a9392c0e1c8f8c707f32494372454850a3eb184a6e7) |
+| `user` | 未声明 | 无 | [`CommandSource`](#persistence-type-sha256-ada310bf0bdb8fed51f3b56ea63f6ea6b18bbd587f04fccb63a14ab0b2a24e05) |
+| `webhook` | `"notice"` | `deliveryId`: `string`; `provider`: `string`; `ruleId`: `string`; `source`: `string`; `summary`: `string` | [`{ kind: "webhook", form: "notice" }`](#persistence-type-sha256-9edc162949abf93bd5ff049191b345454ba104f583937ce5580fb50f067d2b94) |
+
+
+
+### `Message[]`
+
+SHA-256: `478738df7e7d2b103b09fb937817a9302c81076809f2b341169e00a9419c5665`
+
+[`Message`](#persistence-type-sha256-23c7cce57d20589897f4e2bd5898affc6fc611b87cd0cc8b95be1cfdd8b3a7eb) 的数组。
+
+
+
+
+
+
+
+### `ModelMessageSource`
+
+SHA-256: `719c51f67074f97034a6c94297fe1f4b5d3c8d392c57586dab732aa5398c7a91`
+
+来源:[`packages/llm/llm/src/message.ts:24`](../packages/llm/llm/src/message.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `kind` | 必需 | `"model"` |
+| `model` | 必需 | `string` |
+| `provider` | 必需 | `string` |
+| `replayState` | 可选 | `unknown`(不透明) |
+
+
+
+
+
+
+
+### `ModelSelection`
+
+SHA-256: `f09e5e7acf5ff5ccd193ff2eeec015fa2ff7c29d98bc465f8c3302058d47e29b`
+
+来源:[`packages/api/session-controller/src/types.ts:86`](../packages/api/session-controller/src/types.ts)
| 属性 | 存在性 | 类型 |
|---|---|---|
| `model` | 必需 | `string` |
| `provider` | 必需 | `string` |
+| `reasoningEffort` | 可选 | `string` |
-
+
-### `packages/session/session-title/src/types.ts#SessionTitleSource`
+
-SHA-256: `30d5a537b296685770b1241c4b4bbde19d5a31ff81aa23df73fab5e90b8fc65f`
+
-来源:[`packages/session/session-title/src/types.ts:28`](../packages/session/session-title/src/types.ts)
+### `OneShotScheduleDispatchChange`
-以下类型之一:
+SHA-256: `8e8e91646a5cae3fc78f7532a0013ff2088ae47077642c2edd507a508209b8af`
-- [`event:session/title.data.source[1]`](#persistence-type-eventsessiontitledatasource1)
-- [`event:session/title.data.source[0]`](#persistence-type-eventsessiontitledatasource0)
-- [`event:agent/inbox/spliced.data.inserted[0].source[0]`](#persistence-type-eventagentinboxspliceddatainserted0source0)
-
-
-
-### `packages/skill/skill/src/index.ts#SkillInvocationSource`
-
-SHA-256: `672c4aa2a9b736e3d6e5da6346d2e2ed5e3573f2d0baafa18e7407c9f3fee3db`
-
-来源:[`packages/skill/skill/src/index.ts:146`](../packages/skill/skill/src/index.ts)
+来源:[`packages/schedule/schedule/src/types.ts:86`](../packages/schedule/schedule/src/types.ts)
| 属性 | 存在性 | 类型 |
|---|---|---|
-| `form` | 必需 | `"instructions"` |
-| `kind` | 必需 | `"skill-invocation"` |
-| `name` | 必需 | `string` |
+| `id` | 必需 | `string` |
+| `operation` | 必需 | `"dispatch"` |
+| `version` | 必需 | `1` |
-
+
-### `packages/skill/tool-skill/src/index.ts#SkillCatalogSource`
-
-SHA-256: `fc2ae6962f9f8801c2b1e414668e1e17cbb7544c4f39381198977a38bd10c093`
-
-来源:[`packages/skill/tool-skill/src/index.ts:34`](../packages/skill/tool-skill/src/index.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `entries` | 必需 | [`event:agent/inbox/spliced.data.inserted[0].source[17].entries`](#persistence-type-eventagentinboxspliceddatainserted0source17entries) |
-| `form` | 必需 | `"catalog"` |
-| `kind` | 必需 | `"skill-catalog"` |
-| `update` | 可选 | `true` |
-
-
-
-### `packages/subagent/subagent/src/catalog.ts#SubagentCatalogEvent`
-
-SHA-256: `3ac1196f59d5e9e0e9345122c8c403b102478b526404a2e591a38f613483321e`
-
-来源:[`packages/subagent/subagent/src/catalog.ts:24`](../packages/subagent/subagent/src/catalog.ts)
-
-以下类型之一:
-
-- [`event:subagent/catalog.data[1]`](#persistence-type-eventsubagentcatalogdata1)
-- [`event:subagent/catalog.data[0]`](#persistence-type-eventsubagentcatalogdata0)
-
-
-
-### `packages/subagent/subagent/src/continuation-messages.ts#AgentMessageSource`
-
-SHA-256: `4a9bef9f27a942520cc2279ca7dd3082556e4bff543f66b5c0333e1bbed1cd86`
-
-来源:[`packages/subagent/subagent/src/continuation-messages.ts:15`](../packages/subagent/subagent/src/continuation-messages.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `form` | 必需 | `"relay"` |
-| `kind` | 必需 | `"agent-message"` |
-| `senderSessionId` | 必需 | `string` |
-
-
-
-### `packages/subagent/subagent/src/continuation-messages.ts#SubagentSettledMessageSource`
-
-SHA-256: `4e97c3d85c0fc817ee58873c38c25a2474abaaa0af4839311b50b68db3b8cf1a`
-
-来源:[`packages/subagent/subagent/src/continuation-messages.ts:30`](../packages/subagent/subagent/src/continuation-messages.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `form` | 必需 | `"notice"` |
-| `kind` | 必需 | `"subagent-settled"` |
-| `senderSessionId` | 必需 | `string` |
-| `summary` | 必需 | `string` |
-
-
-
-### `packages/subagent/subagent/src/descriptor.ts#ContinuableSubagentDescriptorData`
-
-SHA-256: `6487b10ba7542f3c447b1e41a1c6a590b7bfafe0b9b66b49f34028da85bb970f`
-
-来源:[`packages/subagent/subagent/src/descriptor.ts:72`](../packages/subagent/subagent/src/descriptor.ts)
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `agentModel` | 可选 | `string` |
-| `agentProvider` | 可选 | `string` |
-| `agentReasoningEffort` | 可选 | `string` |
-| `label` | 必需 | `string` |
-| `mode` | 必需 | `"continuable"` |
-| `persona` | 可选 | `string` |
-| `provider` | 必需 | `string` |
-| `toolFilter` | 可选 | [`packages/core/tools/src/index.ts#ToolRestriction`](#persistence-type-packagescoretoolssrcindextstoolrestriction) |
-| `version` | 必需 | `number` |
+
-### `packages/subagent/subagent/src/descriptor.ts#OneShotSubagentDescriptorData`
+### `OneShotSubagentDescriptorData`
SHA-256: `5f758f3de5f00c18968a7c6d347083aac5c9ae13f6a79c78f6611b23c4973564`
@@ -5820,9 +3798,466 @@ SHA-256: `5f758f3de5f00c18968a7c6d347083aac5c9ae13f6a79c78f6611b23c4973564`
| `provider` | 必需 | `string` |
| `version` | 必需 | `number` |
+
+
+
+
+
+
+### `OptionalSessionSeq`
+
+SHA-256: `3bd652ebfa8726b3ce3937a4f1bd2759e02f86b3a08a20f9e41a8513656fbc5f`
+
+来源:[`packages/core/session/src/types.ts:64`](../packages/core/session/src/types.ts)
+
+以下类型之一:
+
+- `null`
+- `number`
+
+
+
+
+
+
+
+### `PresentedFile`
+
+SHA-256: `b8fc636a2121df9d8423c242e03c9d23b7ab7c6fdce00e45746932c60b730f97`
+
+来源:[`packages/deliverables/tool-present/src/types.ts:5`](../packages/deliverables/tool-present/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `description` | 可选 | `string` |
+| `path` | 必需 | `string` |
+
+
+
+### `PresentedFile[]`
+
+SHA-256: `1d9cb3caa96100b18b1911fa3ff8c751ef6992971a03c5f4d9aefc1a0004a345`
+
+[`PresentedFile`](#persistence-type-sha256-b8fc636a2121df9d8423c242e03c9d23b7ab7c6fdce00e45746932c60b730f97) 的数组。
+
+
+
+
+
+
+
+### `PtcDispatchEventData`
+
+SHA-256: `8d2e5a3c4230e6ea6c0b5151f02241d0db02cd2551f2df1b6b9700cddcc0dca3`
+
+来源:[`packages/core/tools/src/types.ts:20`](../packages/core/tools/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `arguments` | 必需 | `unknown`(不透明) |
+| `content` | 必需 | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `error` | 可选 | [`{ code, name, reason? }`](#persistence-type-sha256-a81059ca06999da1e712414520c2c65e491d052fcf9640fae20aa38f0a5dc735) |
+| `isError` | 必需 | `boolean` |
+| `name` | 必需 | `string` |
+| `parentCallId` | 必需 | `string` |
+| `rootCallId` | 必需 | `string` |
+| `subCallId` | 必需 | `string` |
+
+
+
+
+
+
+
+### `PtcDispatchStartEventData`
+
+SHA-256: `2fe5026daf14bd4ff2b7bfb7cf9791c302d9cbba06802178b6dfec00b892698f`
+
+来源:[`packages/core/tools/src/types.ts:11`](../packages/core/tools/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `arguments` | 必需 | `unknown`(不透明) |
+| `name` | 必需 | `string` |
+| `parentCallId` | 必需 | `string` |
+| `rootCallId` | 必需 | `string` |
+| `subCallId` | 必需 | `string` |
+
+
+
+
+
+
+
+### `ReasoningBlock`
+
+SHA-256: `814d9434e1ddf9078612b3b34322f26e9363b469213335007f7e9ba7fee9464e`
+
+来源:[`packages/llm/llm/src/types.ts:67`](../packages/llm/llm/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `text` | 必需 | `string` |
+| `type` | 必需 | `"reasoning"` |
+
+
+
+
+
+
+
+### `ReplayEnvelope`
+
+SHA-256: `0acd94fe8794574c9ae72c7855ee16d29c546096d4af760d16d1225385764555`
+
+来源:[`packages/llm/llm/src/types.ts:404`](../packages/llm/llm/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `blocks` | 可选 | [`unknown[]`](#persistence-type-sha256-b1664fa89f8eab49a14e7e3168d8bc4da4aa9fd76332f6c4a053d839e5276ae7) |
+| `response` | 必需 | `unknown`(不透明) |
+
+
+
+
+
+
+
+### `RequestContext`
+
+SHA-256: `b158f3ff6923714807c0d73882f0b05dc87f8fa85c9e90814852d48bbc866081`
+
+来源:[`packages/core/session/src/types.ts:249`](../packages/core/session/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `contextWindow` | 可选 | `number` |
+| `model` | 必需 | `string` |
+| `provider` | 必需 | `string` |
+| `systemPromptUpdate` | 可选 | `"in-history"` |
+
+
+
+
+
+
+
+### `RequestHeaderReason`
+
+SHA-256: `530da6c0267813bb4511af72883cc518834e624e3b3220a7062955fd57a788a6`
+
+来源:[`packages/core/session/src/types.ts:268`](../packages/core/session/src/types.ts)
+
+以下类型之一:
+
+- `"change"`
+- `"initial"`
+- `"resume"`
+- `"series"`
+
+
+
+
+
+
+
+### `SandboxMode`
+
+SHA-256: `fab2bb09bc5e3b9db0685e8f5500b029af1a2b33e70bc703c1d5d0f596fbc1fd`
+
+来源:[`packages/sandbox/sandbox/src/index.ts:29`](../packages/sandbox/sandbox/src/index.ts)
+
+以下类型之一:
+
+- `"danger-full-access"`
+- `"read-only"`
+- `"workspace-write"`
+
+
+
+
+
+
+
+### `ScheduleChange`
+
+SHA-256: `e1d0e52dcd1855ffb803efc18f8f7b776c48d1c25757e8a75c0281fa298c02e1`
+
+来源:[`packages/schedule/schedule/src/types.ts:105`](../packages/schedule/schedule/src/types.ts)
+
+以下类型之一:
+
+- [`EveryScheduleDispatchChange`](#persistence-type-sha256-e6063d0451dc02026fd9b54ad3f77c7b1b6392ad3e872a7737ac84e13ca72344)
+- [`ScheduleDeleteChange`](#persistence-type-sha256-18dc21f12bbac8ade8377e6fbb54179e20c3d955d73fba3244c57fb6bf001df0)
+- [`OneShotScheduleDispatchChange`](#persistence-type-sha256-8e8e91646a5cae3fc78f7532a0013ff2088ae47077642c2edd507a508209b8af)
+- [`ScheduleCreateChange`](#persistence-type-sha256-ca6425edd20afe34d0cedc6ad1abad1ad7b32e2fbc4c1d24db53939e80bf887f)
+
+
+
+
+
+
+
+### `ScheduleCreateChange`
+
+SHA-256: `ca6425edd20afe34d0cedc6ad1abad1ad7b32e2fbc4c1d24db53939e80bf887f`
+
+来源:[`packages/schedule/schedule/src/types.ts:72`](../packages/schedule/schedule/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `operation` | 必需 | `"create"` |
+| `schedule` | 必需 | [`ScheduleRecord`](#persistence-type-sha256-d8f868c6b3e7189de6c1ffe2ea04794ea2aa31315b6347d12536e46020afac87) |
+| `version` | 必需 | `1` |
+
+
+
+
+
+
+
+### `ScheduleDeleteChange`
+
+SHA-256: `18dc21f12bbac8ade8377e6fbb54179e20c3d955d73fba3244c57fb6bf001df0`
+
+来源:[`packages/schedule/schedule/src/types.ts:79`](../packages/schedule/schedule/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `id` | 必需 | `string` |
+| `operation` | 必需 | `"delete"` |
+| `version` | 必需 | `1` |
+
+
+
+
+
+
+
+### `ScheduleRecord`
+
+SHA-256: `d8f868c6b3e7189de6c1ffe2ea04794ea2aa31315b6347d12536e46020afac87`
+
+来源:[`packages/schedule/schedule/src/types.ts:69`](../packages/schedule/schedule/src/types.ts)
+
+| kind | form 属性 | 其他必需字段 | 完整定义 |
+|---|---|---|---|
+| `after` | 未声明 | `afterSeconds`: `number`; `id`: `string`; `prompt`: `string`; `scheduledAt`: `string` | [`AfterScheduleRecord`](#persistence-type-sha256-27e337d3d6b402b221e50c247a3f518a70d0c474cc60beee15fac3e9c5cbfcbe) |
+| `at` | 未声明 | `id`: `string`; `prompt`: `string`; `scheduledAt`: `string` | [`AtScheduleRecord`](#persistence-type-sha256-658d895d187b26d83f3b53109a3bf77bbfba9f6f9a6d4bc4ee4315b4eb36239e) |
+| `every` | 未声明 | `everySeconds`: `number`; `id`: `string`; `prompt`: `string`; `scheduledAt`: `string` | [`EveryScheduleRecord`](#persistence-type-sha256-66ece68282d8c06330fb83329a24ae54c386d5ccfab296bbf18369da8beb7d14) |
+
+
+
+
+
+
+
+### `SessionHeader`
+
+SHA-256: `1a3440e3577382704d42a6263aa463504eb74c566734a55e9503a63efcd02445`
+
+来源:[`packages/core/session/src/types.ts:93`](../packages/core/session/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `agentPreset` | 可选 | `string` |
+| `createdAt` | 必需 | `number` |
+| `cwd` | 可选 | `string` |
+| `delegationDepth` | 可选 | `number` |
+| `id` | 必需 | `string` |
+| `isSeeded` | 必需 | `boolean` |
+| `origin` | 可选 | `"subagent"` |
+| `parentSession` | 可选 | `string` |
+| `version` | 必需 | `4` |
+
+
+
+
+
+
+
+### `SessionReferenceSource`
+
+SHA-256: `f56c5b59ca0161310c338d31dd16cf14287ccd602ff4181058df178c1c286d7f`
+
+来源:[`packages/context/session-reference/src/types.ts:13`](../packages/context/session-reference/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `form` | 必需 | `"recall"` |
+| `kind` | 必需 | `"session-reference"` |
+| `references` | 必需 | [`{ capturedFormatVersion?, capturedThroughSeq, compacted, inputIndex, … }[]`](#persistence-type-sha256-df843efd87c78cf8de98f8e0d0216956cd568d0d0e56a22c853663e274aa1a18) |
+| `version` | 必需 | `1` |
+
+
+
+
+
+
+
+### `SessionTitleEventData`
+
+SHA-256: `b56f6a885da3dc394c69a3e3cc5c0cfc4da15601b63fda4989eee8f40efc5be4`
+
+来源:[`packages/session/session-title/src/types.ts:41`](../packages/session/session-title/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `messageSeqs` | 必需 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `source` | 必需 | [`SessionTitleSource`](#persistence-type-sha256-30d5a537b296685770b1241c4b4bbde19d5a31ff81aa23df73fab5e90b8fc65f) |
+| `title` | 必需 | `string` |
+
+
+
+
+
+
+
+### `SessionTitleLlmRequestEventData`
+
+SHA-256: `9fe0e77a7816b7fdb4b953ec0e2f0cd7bbd22c5de5c3567e612d1b20eb0992e6`
+
+来源:[`packages/session/session-title-llm/src/index.ts:27`](../packages/session/session-title-llm/src/index.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `maxTokens` | 必需 | `number` |
+| `messageSeqs` | 必需 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `messages` | 必需 | [`Message[]`](#persistence-type-sha256-478738df7e7d2b103b09fb937817a9302c81076809f2b341169e00a9419c5665) |
+| `route` | 必需 | [`SessionTitleModelIdentity`](#persistence-type-sha256-07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235) |
+| `system` | 必需 | `string` |
+| `titleProvider` | 必需 | `string` |
+
+
+
+
+
+
+
+
+
+
+
+### `SessionTitleModelIdentity`
+
+SHA-256: `07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235`
+
+来源:[`packages/session/session-title/src/types.ts:20`](../packages/session/session-title/src/types.ts) · [`packages/subagent/tool-subagent/src/model-selection.ts:9`](../packages/subagent/tool-subagent/src/model-selection.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `model` | 必需 | `string` |
+| `provider` | 必需 | `string` |
+
+
+
+### `SessionTitleModelIdentity[]`
+
+SHA-256: `ba77b58995e36f14bb13886b0493d0a1a63d5db10b1a6cd9f6ac65a72cf832ec`
+
+[`SessionTitleModelIdentity`](#persistence-type-sha256-07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235) 的数组。
+
+
+
+
+
+
+
+### `SessionTitleSource`
+
+SHA-256: `30d5a537b296685770b1241c4b4bbde19d5a31ff81aa23df73fab5e90b8fc65f`
+
+来源:[`packages/session/session-title/src/types.ts:28`](../packages/session/session-title/src/types.ts)
+
+| kind | form 属性 | 其他必需字段 | 完整定义 |
+|---|---|---|---|
+| `fallback` | 未声明 | 无 | [`{ kind: "fallback" }`](#persistence-type-sha256-1b5649238876e28811e80f10ec67a00c197ad3babd4ecc61a22b09064b88c597) |
+| `provider` | 未声明 | `provider`: `string` | [`{ kind: "provider" }`](#persistence-type-sha256-b81e9de81a481b24e1e1f9adf038bfc59e57b4f35ce62f8f1e45284186f4f812) |
+| `user` | 未声明 | 无 | [`CommandSource`](#persistence-type-sha256-ada310bf0bdb8fed51f3b56ea63f6ea6b18bbd587f04fccb63a14ab0b2a24e05) |
+
+
+
+
+
+
+
+### `SkillCatalogSource`
+
+SHA-256: `fc2ae6962f9f8801c2b1e414668e1e17cbb7544c4f39381198977a38bd10c093`
+
+来源:[`packages/skill/tool-skill/src/index.ts:34`](../packages/skill/tool-skill/src/index.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `entries` | 必需 | [`{ description, name }[]`](#persistence-type-sha256-aba175fb20ffc71112c55efe70458ff5d7dbfb83501892b4ba8d077f0ea5d7ba) |
+| `form` | 必需 | `"catalog"` |
+| `kind` | 必需 | `"skill-catalog"` |
+| `update` | 可选 | `true` |
+
+
+
+
+
+
+
+### `SkillInvocationSource`
+
+SHA-256: `672c4aa2a9b736e3d6e5da6346d2e2ed5e3573f2d0baafa18e7407c9f3fee3db`
+
+来源:[`packages/skill/skill/src/index.ts:146`](../packages/skill/skill/src/index.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `form` | 必需 | `"instructions"` |
+| `kind` | 必需 | `"skill-invocation"` |
+| `name` | 必需 | `string` |
+
+
+
+
+
+
+
+### `StreamChunk`
+
+SHA-256: `071d92b9dac661fcc826c678cf64d188f26fb93aab79c627b11a03acdd34dfca`
+
+来源:[`packages/llm/llm/src/types.ts:426`](../packages/llm/llm/src/types.ts)
+
+以下类型之一:
+
+- [`{ type: "tool-call-delta" }`](#persistence-type-sha256-88a610b831be6d92612a464be5c7d0b88ec24d97bd299837bf74bf7672183c9a)
+- [`{ type: "block-end" }`](#persistence-type-sha256-90c811b8c2668898515e69a24e82caffeb08517f9c7aa193867ff0380f3b535d)
+- [`{ type: "block-start" }`](#persistence-type-sha256-647cb2e3aeb58e27d1d4d60011f208bb66dce257e8654193c533b47c4c22c253)
+- [`{ type: "reasoning-delta" }`](#persistence-type-sha256-2abb711460e6238d851c30f3e4bdd87a2aa1887ee70575b3d3b7b25610673095)
+- [`{ type: "text-delta" }`](#persistence-type-sha256-95080295115fbd83544520ba247b68a03790131f6a2eac323d388758cb542f65)
+- [`{ type: "finish" }`](#persistence-type-sha256-a2b49331716ba0a7078b026d145306a70eae64b7313c3e6204bd931e75ec3bb1)
+- [`{ type: "usage" }`](#persistence-type-sha256-f1a96afe7503ac1817de769cd0ba13d9b80111c7034c50106b3344ecc14cc515)
+
+
+
+
+
+
+
+### `SubagentCatalogEvent`
+
+SHA-256: `3ac1196f59d5e9e0e9345122c8c403b102478b526404a2e591a38f613483321e`
+
+来源:[`packages/subagent/subagent/src/catalog.ts:24`](../packages/subagent/subagent/src/catalog.ts)
+
+以下类型之一:
+
+- [`{ childCreatedAt, childId, label, mode, … }`](#persistence-type-sha256-0e10d7c096b47e61defe372a5fc8bd37d835199410eac44367f95c45082498bd)
+- [`{ childCreatedAt, childId, label?, mode, … }`](#persistence-type-sha256-5d542ac7bdf13310c46e1a884dec9fb18ad8c6e153cff207e639cd7bf9d7e694)
+
+
+
-### `packages/subagent/subagent/src/descriptor.ts#SubagentDescriptorData`
+
+
+### `SubagentDescriptorData`
SHA-256: `86d1d0e9cfebb240421187e3dc37fb71cc38a1501885cf32f8f9adef7b0a2bde`
@@ -5830,12 +4265,210 @@ SHA-256: `86d1d0e9cfebb240421187e3dc37fb71cc38a1501885cf32f8f9adef7b0a2bde`
以下类型之一:
-- [`packages/subagent/subagent/src/descriptor.ts#ContinuableSubagentDescriptorData`](#persistence-type-packagessubagentsubagentsrcdescriptortscontinuablesubagentdescriptordata)
-- [`packages/subagent/subagent/src/descriptor.ts#OneShotSubagentDescriptorData`](#persistence-type-packagessubagentsubagentsrcdescriptortsoneshotsubagentdescriptordata)
+- [`ContinuableSubagentDescriptorData`](#persistence-type-sha256-6487b10ba7542f3c447b1e41a1c6a590b7bfafe0b9b66b49f34028da85bb970f)
+- [`OneShotSubagentDescriptorData`](#persistence-type-sha256-5f758f3de5f00c18968a7c6d347083aac5c9ae13f6a79c78f6611b23c4973564)
+
+
+
+
+
+
+
+### `SubagentSettledMessageSource`
+
+SHA-256: `4e97c3d85c0fc817ee58873c38c25a2474abaaa0af4839311b50b68db3b8cf1a`
+
+来源:[`packages/subagent/subagent/src/continuation-messages.ts:30`](../packages/subagent/subagent/src/continuation-messages.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `form` | 必需 | `"notice"` |
+| `kind` | 必需 | `"subagent-settled"` |
+| `senderSessionId` | 必需 | `string` |
+| `summary` | 必需 | `string` |
+
+
+
+
+
+
+
+### `SurfaceOp`
+
+SHA-256: `335e242de1fcc17b6ca920fc420d71bec2d76e53e37955c00948b65ab77f05c5`
+
+来源:[`packages/core/session/src/types.ts:448`](../packages/core/session/src/types.ts)
+
+以下类型之一:
+
+- `"append"`
+- [`{ endSeq, op, startSeq }`](#persistence-type-sha256-bcf0caf62d964b2fcf5404bd5c909cfa9a21c3f3c96e6b7e36d9e33565223825)
+
+
+
+
+
+
+
+### `SystemMessage`
+
+SHA-256: `302b01ddddcbb3b16cfa3fba2a5d99f5082a55fbd9dc5c83a179a228b8a6a0ca`
+
+来源:[`packages/llm/llm/src/message.ts:158`](../packages/llm/llm/src/message.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `content` | 必需 | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `id` | 必需 | `string` |
+| `role` | 必需 | `"system"` |
+| `source` | 必需 | [`union (7 variants)`](#persistence-type-sha256-23cf7e0cf3fec1283b60fa15713506169bc9c079a08e124d1cb9733baca80b40) |
+
+
+
+
+
+
+
+### `TeamMemberPhase`
+
+SHA-256: `dfce5db4aa42b7ebe0bb79eca92553587287e18c06b9eba85cbfb9d332e26acd`
+
+来源:[`packages/experimental/agent-team/src/types.ts:44`](../packages/experimental/agent-team/src/types.ts)
+
+以下类型之一:
+
+- `"active"`
+- `"failed"`
+- `"provisioning"`
+
+
+
+
+
+
+
+### `TeamMemberSnapshot`
+
+SHA-256: `6598cd6da253948d6b207c6374a45335804c79b576866d6215649c2d1bc85e25`
+
+来源:[`packages/experimental/agent-team/src/types.ts:47`](../packages/experimental/agent-team/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `context` | 必需 | [`union (2 variants)`](#persistence-type-sha256-50cf02d875f8a1f1411f4a6fbcffab9120ccef5f74a47331fbf29480e5f68f48) |
+| `description` | 必需 | `string` |
+| `error` | 可选 | `string` |
+| `id` | 必需 | `string` |
+| `name` | 必需 | `string` |
+| `phase` | 必需 | [`TeamMemberPhase`](#persistence-type-sha256-dfce5db4aa42b7ebe0bb79eca92553587287e18c06b9eba85cbfb9d332e26acd) |
+| `provider` | 必需 | `string` |
+
+
+
+
+
+
+
+### `TeamMessageSnapshot`
+
+SHA-256: `5b694f394d5e11609887a3ccfa82844935d49806c37e336b30be2186d649ab94`
+
+来源:[`packages/experimental/agent-team/src/types.ts:106`](../packages/experimental/agent-team/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `content` | 必需 | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `id` | 必需 | `string` |
+| `senderId` | 必需 | `string` |
+| `senderName` | 必需 | `string` |
+| `targetId` | 必需 | `string` |
+
+
+
+
+
+
+
+### `TeamMessageSource`
+
+SHA-256: `2152caf1a71e588e4df2358a806dea24936c1c47131134f01a12939d12cdc0c0`
+
+来源:[`packages/experimental/agent-team/src/types.ts:115`](../packages/experimental/agent-team/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `kind` | 必需 | `"team-message"` |
+| `messageId` | 必需 | `string` |
+| `senderId` | 必需 | `string` |
+| `senderName` | 必需 | `string` |
+| `teamId` | 必需 | `string` |
+
+
+
+
+
+
+
+### `TeamTaskSnapshot`
+
+SHA-256: `51edec100659da3a9bd9c3f6ba1180f5e64ec9a1585e5057080df45c180bd357`
+
+来源:[`packages/experimental/agent-team/src/types.ts:74`](../packages/experimental/agent-team/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `blockedBy` | 必需 | [`string[]`](#persistence-type-sha256-93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2) |
+| `description` | 必需 | `string` |
+| `id` | 必需 | `string` |
+| `ownerId` | 可选 | `string` |
+| `revision` | 必需 | `number` |
+| `status` | 必需 | [`TeamTaskStatus`](#persistence-type-sha256-b2d2a01e51341a3bfec809198952c8c830a7899f4cb6ecd3c1dc0b5d9a2af943) |
+| `subject` | 必需 | `string` |
+| `writeScopes` | 必需 | [`string[]`](#persistence-type-sha256-93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2) |
+
+
+
+
+
+
+
+### `TeamTaskStatus`
+
+SHA-256: `b2d2a01e51341a3bfec809198952c8c830a7899f4cb6ecd3c1dc0b5d9a2af943`
+
+来源:[`packages/experimental/agent-team/src/types.ts:71`](../packages/experimental/agent-team/src/types.ts)
+
+以下类型之一:
+
+- `"completed"`
+- `"deleted"`
+- `"in_progress"`
+- `"pending"`
+
+
+
+
+
+
+
+### `TextBlock`
+
+SHA-256: `4e887768586528565381dadbddee6cef555874148089f4579e0b4b1ad096fc9c`
+
+来源:[`packages/llm/llm/src/types.ts:61`](../packages/llm/llm/src/types.ts) · [`packages/web/web-search-deepseek/src/provider.ts:66`](../packages/web/web-search-deepseek/src/provider.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `text` | 必需 | `string` |
+| `type` | 必需 | `"text"` |
+
+
-### `packages/todo/tool-todo/src/types.ts#TodoItem`
+
+
+### `TodoItem`
SHA-256: `a99f76fd149051c363f960bfeeb5b9509587ecaf7591a42797e4bfe810d8987a`
@@ -5844,25 +4477,161 @@ SHA-256: `a99f76fd149051c363f960bfeeb5b9509587ecaf7591a42797e4bfe810d8987a`
| 属性 | 存在性 | 类型 |
|---|---|---|
| `content` | 必需 | `string` |
-| `status` | 必需 | [`event:todo/write.data.todos[0].status`](#persistence-type-eventtodowritedatatodos0status) |
+| `status` | 必需 | [`union (3 variants)`](#persistence-type-sha256-fd0d91a1f9dd2efb8959bdf5e07f8f0a98b1cdfa38ce8d4732ebde0b44c3abd4) |
-
+
-### `packages/web/web-search-deepseek/src/provider.ts#DeepSeekSearchLlmRequest`
+### `TodoItem[]`
-SHA-256: `2517ba143a271508d3ca35126d5aca8f7f1facf5aaddce4adf011832042fa2b9`
+SHA-256: `4b7ddaf3710b88ff9b8df66304f5f97bf03688fd19730eedc2e9535203c820ea`
-来源:[`packages/web/web-search-deepseek/src/provider.ts:55`](../packages/web/web-search-deepseek/src/provider.ts)
+[`TodoItem`](#persistence-type-sha256-a99f76fd149051c363f960bfeeb5b9509587ecaf7591a42797e4bfe810d8987a) 的数组。
+
+
+
+
+
+
+
+### `TokenUsage`
+
+SHA-256: `fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394`
+
+来源:[`packages/llm/llm/src/types.ts:162`](../packages/llm/llm/src/types.ts)
| 属性 | 存在性 | 类型 |
|---|---|---|
-| `apiVersion` | 必需 | `string` |
-| `body` | 必需 | [`event:web/deepseek-search-llm-request.data.body`](#persistence-type-eventwebdeepseek-search-llm-requestdatabody) |
-| `endpoint` | 必需 | `string` |
+| `cacheReadTokens` | 可选 | `number` |
+| `cacheWriteTokens` | 可选 | `number` |
+| `inputTokens` | 必需 | `number` |
+| `outputTokens` | 必需 | `number` |
+| `reasoningTokens` | 可选 | `number` |
+| `totalTokens` | 可选 | `number` |
+
+
+
+
+
+
+
+### `ToolCallBlock`
+
+SHA-256: `c1f0f17b6493b85db6453bb30e01b208d703731b25bc1e68e5d4fc72eea9cdea`
+
+来源:[`packages/llm/llm/src/types.ts:104`](../packages/llm/llm/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `arguments` | 必需 | `string` |
+| `id` | 必需 | `string` |
+| `name` | 必需 | `string` |
+| `type` | 必需 | `"tool-call"` |
+
+
+
+
+
+
+
+### `ToolMessageSource`
+
+SHA-256: `d9c462b9f62fdd3efc76a44b9524dc8781f6b91cd9c7e584b17d971defafebab`
+
+来源:[`packages/llm/llm/src/message.ts:29`](../packages/llm/llm/src/message.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `callId` | 必需 | `string` |
+| `kind` | 必需 | `"tool"` |
+
+
+
+
+
+
+
+### `ToolRestriction`
+
+SHA-256: `3cfc3a56502da1f8c6153c2c56657bab4b749056968634dd0991d325ec1c919f`
+
+来源:[`packages/core/tools/src/index.ts:682`](../packages/core/tools/src/index.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `allow` | 可选 | [`string[]`](#persistence-type-sha256-93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2) |
+| `deny` | 可选 | [`string[]`](#persistence-type-sha256-93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2) |
+
+
+
+
+
+
+
+### `ToolResultBlock`
+
+SHA-256: `d61574d68558c5a184429e70b04da393dd5460bf5cc3ddef814546e659bd5127`
+
+来源:[`packages/llm/llm/src/types.ts:114`](../packages/llm/llm/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `content` | 必需 | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `isError` | 可选 | `boolean` |
+| `toolCallId` | 必需 | `string` |
+| `type` | 必需 | `"tool-result"` |
+
+
+
+
+
+
+
+### `ToolResultMessage`
+
+SHA-256: `1b573e2d5c094fa87e2a8bf409ddd4ac5ba92a123085e168de44b9ccdbd5244c`
+
+来源:[`packages/llm/llm/src/message.ts:164`](../packages/llm/llm/src/message.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `content` | 必需 | [`tuple (1 positions)`](#persistence-type-sha256-8d6a011f3ef7096a4a922ef420458419ff6b20e1eaeece5d331db7585d2f08d6) |
+| `id` | 必需 | `string` |
+| `role` | 必需 | `"user"` |
+| `source` | 必需 | [`ToolMessageSource`](#persistence-type-sha256-d9c462b9f62fdd3efc76a44b9524dc8781f6b91cd9c7e584b17d971defafebab) |
+
+
+
+
+
+
+
+### `ToolSchema`
+
+SHA-256: `7f5f2a8618c2ece530a18b1358b890fb57fb8c35705e47b66bff2296f8c6e889`
+
+来源:[`packages/llm/llm/src/types.ts:447`](../packages/llm/llm/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `description` | 必需 | `string` |
+| `name` | 必需 | `string` |
+| `parameters` | 必需 | [`{}`](#persistence-type-sha256-0aa62ab51b36c0e64b134bd03ba8725d758744180a1a447da49beaad194f219f) |
+
+
+
+### `ToolSchema[]`
+
+SHA-256: `6d63f25a28b70801937a46b1058be5f52d4efbaf3516141470463ae469b59c23`
+
+[`ToolSchema`](#persistence-type-sha256-7f5f2a8618c2ece530a18b1358b890fb57fb8c35705e47b66bff2296f8c6e889) 的数组。
+
+
-### `packages/workflow/tool-workflow/src/types.ts#ToolWorkflowAgentEndData`
+
+
+### `ToolWorkflowAgentEndData`
SHA-256: `c0ea97bc89dfc46fa94eab956f5c3ee6af2f964aa7db6327cb18b451f207bef7`
@@ -5870,13 +4639,17 @@ SHA-256: `c0ea97bc89dfc46fa94eab956f5c3ee6af2f964aa7db6327cb18b451f207bef7`
| 属性 | 存在性 | 类型 |
|---|---|---|
-| `outcome` | 必需 | [`packages/workflow/workflow/src/types.ts#WorkflowAgentOutcome`](#persistence-type-packagesworkflowworkflowsrctypestsworkflowagentoutcome) |
+| `outcome` | 必需 | [`WorkflowAgentOutcome`](#persistence-type-sha256-c2deb7c9183735d4e0fffddf5c623f4e34daa1c8e96b111982e957dfcbbcf896) |
| `runId` | 必需 | `string` |
| `seq` | 必需 | `number` |
+
+
-### `packages/workflow/tool-workflow/src/types.ts#ToolWorkflowAgentStartData`
+
+
+### `ToolWorkflowAgentStartData`
SHA-256: `9a410ddf56792b2b7cd4a224a2e54dc4dee30a8e8e6b1c2b9a1d19992b217adc`
@@ -5890,9 +4663,13 @@ SHA-256: `9a410ddf56792b2b7cd4a224a2e54dc4dee30a8e8e6b1c2b9a1d19992b217adc`
| `runId` | 必需 | `string` |
| `seq` | 必需 | `number` |
+
+
-### `packages/workflow/tool-workflow/src/types.ts#ToolWorkflowRunEndData`
+
+
+### `ToolWorkflowRunEndData`
SHA-256: `7f9365bae9fcb73e1e34061a1acfe0422c1a5fd351848cace9bebbe806f28462`
@@ -5901,11 +4678,15 @@ SHA-256: `7f9365bae9fcb73e1e34061a1acfe0422c1a5fd351848cace9bebbe806f28462`
| 属性 | 存在性 | 类型 |
|---|---|---|
| `runId` | 必需 | `string` |
-| `stopReason` | 必需 | [`packages/workflow/workflow/src/types.ts#WorkflowStopReason`](#persistence-type-packagesworkflowworkflowsrctypestsworkflowstopreason) |
+| `stopReason` | 必需 | [`WorkflowStopReason`](#persistence-type-sha256-8465ece5e9d9007c038b357015d849c15262cb0bc25abc59e47692d87ee01a15) |
+
+
-### `packages/workflow/tool-workflow/src/types.ts#ToolWorkflowRunStartData`
+
+
+### `ToolWorkflowRunStartData`
SHA-256: `a6da9ad5d42ae83a6833a8288b076688e8e0801633ea36cbdd8a30a6d9f3160c`
@@ -5916,9 +4697,82 @@ SHA-256: `a6da9ad5d42ae83a6833a8288b076688e8e0801633ea36cbdd8a30a6d9f3160c`
| `name` | 必需 | `string` |
| `runId` | 必需 | `string` |
+
+
+
+
+
+
+### `TurnEndCancelCause`
+
+SHA-256: `1f8c126cfab3df812cd115cfc23e3256f0fa2383400f4ce91ecad313577e59b0`
+
+来源:[`packages/core/session/src/types.ts:195`](../packages/core/session/src/types.ts)
+
+| kind | form 属性 | 其他必需字段 | 完整定义 |
+|---|---|---|---|
+| `disposed` | 未声明 | 无 | [`{ kind: "disposed" }`](#persistence-type-sha256-4bb451330ff699f36b45539ceb0eb2606ead72084e2c5bb637c36cc80e2252db) |
+| `hook` | 未声明 | `reason`: `string` | [`{ kind: "hook" }`](#persistence-type-sha256-6c5a37d42ebdb12db4410699259335f1e149e3a0260425684c00b153afc8990d) |
+| `legacy` | 未声明 | 无 | [`{ kind: "legacy" }`](#persistence-type-sha256-eaa71be0fbf0f702df8ea6c11d0aa2f9782263d45a10d0fb14eda662f4bfe04c) |
+| `parent` | 未声明 | 无 | [`{ kind: "parent" }`](#persistence-type-sha256-6c03546143cdf6ae88f1745ac98c5139efa1588d1415249bbc5f3104d32ab800) |
+| `user` | 未声明 | 无 | [`CommandSource`](#persistence-type-sha256-ada310bf0bdb8fed51f3b56ea63f6ea6b18bbd587f04fccb63a14ab0b2a24e05) |
+
+
+
+
+
+
+
+### `TurnEndReason`
+
+SHA-256: `f1687f982fa3d41ef29e159feed154ecd13af4dd209acaee16038f223f2e9402`
+
+来源:[`packages/core/session/src/types.ts:231`](../packages/core/session/src/types.ts)
+
+| kind | form 属性 | 其他必需字段 | 完整定义 |
+|---|---|---|---|
+| `aborted` | 未声明 | `reason`: [`TurnEndCancelCause`](#persistence-type-sha256-1f8c126cfab3df812cd115cfc23e3256f0fa2383400f4ce91ecad313577e59b0) | [`{ kind: "aborted", reason }`](#persistence-type-sha256-0a30c3be336cdd4f8f34e66543a3d46d611c43986edd9b3ce6cbb9b721d3b5d3) |
+| `blocked` | 未声明 | 无 | [`{ kind: "blocked" }`](#persistence-type-sha256-023a355b2be0d688fb6e4df8388dadb942761d46cfe96d0f499aae9631a159d4) |
+| `completed` | 未声明 | 无 | [`{ kind: "completed" }`](#persistence-type-sha256-b6ef9c6210be8350cd465f485cf520031fffa6bf3809c61a1e713e834c5982d0) |
+| `error` | 未声明 | `error`: [`LlmFailure`](#persistence-type-sha256-5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca) | [`{ error, kind: "error" }`](#persistence-type-sha256-79650cfa10aa3c52440328d85e8a25f0ffadc8d7efd784e3c0819d8bb74a1985) |
+| `forked` | 未声明 | 无 | [`{ kind: "forked" }`](#persistence-type-sha256-ec8b5ff7c77ca6893ac7ba5a0c5b2aefeb52f12c64450b7359660c2a7e8a53d7) |
+| `interrupted` | 未声明 | 无 | [`{ kind: "interrupted" }`](#persistence-type-sha256-56b7c047694875a843ba020dfea3c8380d54ae4ff88ab349e72004dc21e07c23) |
+| `max-tokens` | 未声明 | 无 | [`{ kind: "max-tokens" }`](#persistence-type-sha256-ab7ec5f9eb2c6dfacca5da4c37cf7ba85d04172053ee6b1ebf1709ffcd99c1a7) |
+
+
+
+
+
+
+
+### `UserMessage`
+
+SHA-256: `4de5e7644130ed715ef6b5a4d86a87b30dca4096d1a6683c66acf6f7809379c7`
+
+来源:[`packages/llm/llm/src/message.ts:143`](../packages/llm/llm/src/message.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `content` | 必需 | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `id` | 必需 | `string` |
+| `role` | 必需 | `"user"` |
+| `source` | 必需 | [`MessageSource`](#persistence-type-sha256-4c965666d5b42116945bc356087cd5e1fd549e6dece560785ed60511059a8283) |
+
+
+
+### `UserMessage[]`
+
+SHA-256: `300341f890f7b9506a1749fff4fa5239d16ea1c63ff6b15851acb03c20f3b48d`
+
+[`UserMessage`](#persistence-type-sha256-4de5e7644130ed715ef6b5a4d86a87b30dca4096d1a6683c66acf6f7809379c7) 的数组。
+
+
+
-### `packages/workflow/workflow/src/types.ts#WorkflowAgentOutcome`
+
+
+### `WorkflowAgentOutcome`
SHA-256: `c2deb7c9183735d4e0fffddf5c623f4e34daa1c8e96b111982e957dfcbbcf896`
@@ -5930,9 +4784,13 @@ SHA-256: `c2deb7c9183735d4e0fffddf5c623f4e34daa1c8e96b111982e957dfcbbcf896`
- `"completed"`
- `"failed"`
+
+
-### `packages/workflow/workflow/src/types.ts#WorkflowStopReason`
+
+
+### `WorkflowStopReason`
SHA-256: `8465ece5e9d9007c038b357015d849c15262cb0bc25abc59e47692d87ee01a15`
@@ -5944,335 +4802,719 @@ SHA-256: `8465ece5e9d9007c038b357015d849c15262cb0bc25abc59e47692d87ee01a15`
- `"completed"`
- `"error"`
-
+
-### `"parent"`
+### `boolean`
-SHA-256: `e6411b09c1d982f789bf741ca74e2bea69df56029847f86a6148e722039ee732`
+SHA-256: `aa93010d0e521ad7c42273f58d5c9b8bf1dfc94edf1b805a3971b364a35c1877`
-`"parent"`
+`boolean`
-
+
-### `"pause"`
+### `false`
-SHA-256: `1d8798b1a5e8c545ee4dcd2b4e75c0b4c9ffd985e4744c6d1a1aab992f859721`
+SHA-256: `0c4205180f75b9ee1e0d878bd9a9851628b5dc18448486389d9c5fdc3f1ccda3`
-`"pause"`
+`false`
-
+
-### `"paused"`
+### `null`
-SHA-256: `c43b119ce579b3e9983a0d3adc4ba402ebb9ba773d89738a2dab01ecf5813943`
+SHA-256: `938f7c7357bc403ea3b281a9dd016939df7a0880fc8db12612585be574d0d615`
-`"paused"`
+`null`
-
+
-### `"pending"`
+
-SHA-256: `234142ee4f996f38cc9fa3b8b3e3de29b03c9aefe5ebf6c224eddd564505aa85`
+
-`"pending"`
+### `number`
-
+SHA-256: `0657d3ca5ac4e7bf79b00bcf860b1c7159d01a9da137497221ec2f1776e365f7`
-### `"permission/preset"`
+来源:[`packages/core/session/src/types.ts:31`](../packages/core/session/src/types.ts)
-SHA-256: `ae63d9d1080ed8945031594d93f8d96651d7101b848719cc3e1475875cd3d649`
+`number`
-`"permission/preset"`
+
-
-
-### `"plan/mode"`
-
-SHA-256: `f634871d1e18b1eb199497ac8ab72d3964f48d03fbf611dc7521a1970cf429d9`
-
-`"plan/mode"`
-
-
-
-### `"plugin"`
-
-SHA-256: `e654d28d1e6c471147310d2fba396d00969cfe6ed9022626d3f2c2312e0b1cbb`
-
-`"plugin"`
-
-
-
-### `"positive"`
-
-SHA-256: `df5d9709b7db2a72510dc52052a23f0c38f39730af1504bab8bccabc14fae528`
-
-`"positive"`
-
-
-
-### `"product-interaction"`
-
-SHA-256: `0341d4c3dfcd53253cdc1e789d9130d3cd848b6f8b0706bf92f313a68b39ff23`
-
-`"product-interaction"`
-
-
-
-### `"provider"`
-
-SHA-256: `e31572180d6b28b73f073ad30ae19d5d82982d3daf984723984e23da1e7c459a`
-
-`"provider"`
-
-
-
-### `"provisioning"`
-
-SHA-256: `871bfd6f7bb91061246768d3377f3fd58d6b8ea7c31f44c714ae7ab215650d62`
-
-`"provisioning"`
-
-
-
-### `"read-only"`
-
-SHA-256: `12a0cfa619ac4a5fc6c3e8e359c8dae15769edc61497a575935c78d5842f8e42`
-
-`"read-only"`
-
-
-
-### `"reasoning"`
-
-SHA-256: `3c2535ca0a2062f172f15344f8040755002b5ac506cf94fc4ebaa822b15feb8c`
-
-`"reasoning"`
-
-
-
-### `"reasoning-chunks"`
-
-SHA-256: `688e853dc149f0d30b31765c12ec7e3be74169bdf1a4c6463a10b945d50cc1b8`
-
-`"reasoning-chunks"`
-
-
-
-### `"reasoning-delta"`
-
-SHA-256: `6f091fe32ab24407236090ca9d710bbaf59bb57466e9f3b8f1f6e4862bc863c6`
-
-`"reasoning-delta"`
-
-
-
-### `"recall"`
-
-SHA-256: `383cf73ae4748e5beb281ae74857ba1ffb92ae01075b9fbf51af78b666007a8f`
-
-`"recall"`
-
-
-
-### `"rejected"`
-
-SHA-256: `fab35c4520883c0d69e42d079c9f543fc5ac7a2d15b537b5572fcd99059c7018`
-
-`"rejected"`
-
-
-
-### `"relay"`
-
-SHA-256: `16d0507cb94b4cfc84a87446b1ba7652d6ec1d65ee1684789e747e30d542800e`
-
-`"relay"`
-
-
-
-### `"remove"`
-
-SHA-256: `7382c4fc95fe8c5db65ca4d9da572b115d0dbb818b7f32c22ab040318ffbb4bc`
-
-`"remove"`
-
-
-
-### `"replace"`
-
-SHA-256: `f6cb462f808309e315fea634f1ed86268b8346bbcee6774d9097ca6eed7ac1f8`
-
-`"replace"`
-
-
-
-### `"request/context"`
-
-SHA-256: `70b082fe78991edf13cf66e1b4d06cd2dcff9cacfd76f8cfb996bfb61939e7b2`
-
-`"request/context"`
-
-
-
-### `"request/header"`
-
-SHA-256: `3e0eff5946255ff05d88a10839c60305135801f97794ea48d409f8503303317e`
-
-`"request/header"`
-
-
-
-### `"resource-cost"`
-
-SHA-256: `5bd310104cfe448e530beb11422d2f791e2e32e8e95fdc528a15f9ca693dae75`
-
-`"resource-cost"`
-
-
-
-### `"resume"`
-
-SHA-256: `34d1ab5c5df378186d6054b1a1beea9a41e41965d6f336f0bc0025c441a82e66`
-
-`"resume"`
-
-
-
-### `"sandbox/mode"`
-
-SHA-256: `ca085dba2c877feceebf3c62f9d39c6c2a4d2314d97b94b3927a780fe8fe2bb2`
-
-`"sandbox/mode"`
-
-
-
-### `"schedule/change"`
-
-SHA-256: `0e7b2a97f54f1afdb8cdfad1635abe9145327db539bfb69b4045c19d8c17755d`
-
-`"schedule/change"`
-
-
-
-### `"security-privacy-permission"`
-
-SHA-256: `07eccc9ea2f9b5439d76cc77d5e062936677d43f07a23da749819b0a22ee36b7`
-
-`"security-privacy-permission"`
-
-
-
-### `"series"`
-
-SHA-256: `4f507598cf476214aa7646ce7841a7064a9dcb05d0a1eaaefaf79c2b738f160f`
-
-`"series"`
-
-
-
-### `"service-stability"`
-
-SHA-256: `7180844e1066230c5e891f1b9ccd942423b0fe48aac6ded7eef2a285b288a732`
-
-`"service-stability"`
-
-
-
-### `"session"`
-
-SHA-256: `e41bdebe246abe17154de7e7a1d81035437eee8d20e7f1edff0d91e2598ad828`
-
-`"session"`
-
-
-
-### `"session-log-deepseek/delivery-accepted"`
-
-SHA-256: `47e5d84f1a93450a78c7f3954b43990d0f629af7c034a56313e5deb63e772c1b`
-
-`"session-log-deepseek/delivery-accepted"`
-
-
-
-### `"session-reference"`
-
-SHA-256: `7f13860ee89a2d35ce09f958e85a04566cd59cb1de1d73a9619a9b631961dc71`
-
-`"session-reference"`
-
-
-
-### `"session/end-seed"`
-
-SHA-256: `1c2686c0682e7bc51d61117b2652bd4a80707e331aa276d6ef915ae32534a330`
-
-`"session/end-seed"`
-
-
-
-### `SessionEventEnvelope`
-
-SHA-256: `5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc`
-
-以下类型之一:
-
-- [`SessionEventEnvelope[39]`](#persistence-type-sessioneventenvelope39)
-- [`SessionEventEnvelope[6]`](#persistence-type-sessioneventenvelope6)
-- [`SessionEventEnvelope[0]`](#persistence-type-sessioneventenvelope0)
-
-
-
-### `SessionEventEnvelope[0]`
-
-SHA-256: `e3e77b26f0148755a505f5b8ea843a3be117827d4703bb5754d9dc8ddbef521f`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `string` |
-
-
-
-### `SessionEventEnvelope[39]`
-
-SHA-256: `998f22585a5d73ec005365e203f07fc3b3a029e82323fdda3fd7f13b0a9639d0`
-
-| 属性 | 存在性 | 类型 |
-|---|---|---|
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `sourceEventSeqs` | 可选 | [`SessionEventEnvelope[39].sourceEventSeqs`](#persistence-type-sessioneventenvelope39sourceeventseqs) |
-| `surfaceOp` | 必需 | [`packages/core/session/src/types.ts#SurfaceOp`](#persistence-type-packagescoresessionsrctypestssurfaceop) |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `string` |
-
-
-
-### `SessionEventEnvelope[39].sourceEventSeqs`
+### `number[]`
SHA-256: `5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78`
`number` 的数组。
-
+
-### `SessionEventEnvelope[6]`
+
-SHA-256: `7af85bf70d4eafce63e739adae38ea85501e68df3a0e22f97f3a0be90fd9e4cb`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+### `string`
+
+SHA-256: `4cd48f3e5108bd6ebedf7301c3638839b8b2b9db8dbd493974177fbdeb91a01b`
+
+来源:[`packages/api/session-controller/src/types.ts:380`](../packages/api/session-controller/src/types.ts) · [`packages/attachment/attachment/src/brand.ts:6`](../packages/attachment/attachment/src/brand.ts) · [`packages/compaction/compaction/src/brand.ts:4`](../packages/compaction/compaction/src/brand.ts) · [`packages/core/session/src/types.ts:19`](../packages/core/session/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:20`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:32`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:8`](../packages/experimental/agent-team/src/types.ts) · [`packages/feedback/message-feedback/src/types.ts:14`](../packages/feedback/message-feedback/src/types.ts) · [`packages/goal/goal/src/types.ts:17`](../packages/goal/goal/src/types.ts) · [`packages/interaction/commands/src/brand.ts:31`](../packages/interaction/commands/src/brand.ts) · [`packages/interaction/user-approval/src/types.ts:17`](../packages/interaction/user-approval/src/types.ts) · [`packages/llm/llm-retry/src/brand.ts:4`](../packages/llm/llm-retry/src/brand.ts) · [`packages/llm/llm/src/brand.ts:16`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:31`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:43`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:67`](../packages/llm/llm/src/brand.ts) · [`packages/schedule/schedule/src/types.ts:10`](../packages/schedule/schedule/src/types.ts) · [`packages/session/session-title/src/index.ts:42`](../packages/session/session-title/src/index.ts) · [`packages/session/session-title/src/types.ts:17`](../packages/session/session-title/src/types.ts) · [`packages/webhook/webhook/src/brand.ts:12`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:6`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:9`](../packages/webhook/webhook/src/brand.ts) · [`packages/workflow/workflow/src/types.ts:13`](../packages/workflow/workflow/src/types.ts)
+
+`string`
+
+
+
+### `string[]`
+
+SHA-256: `93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2`
+
+`string` 的数组。
+
+
+
+### `true`
+
+SHA-256: `dacf3d5f3e4ff619c1320e64a48dec5e7ecd7870bece65fbd449a0e63adfa521`
+
+`true`
+
+
+
+### `tuple (1 positions)`
+
+SHA-256: `4aed17ec726b5397c29f6cb4bcd7905dc1a12bb6140f1657f073cd24380f2af8`
+
+| 位置 | 存在性 | 类型 |
+|---|---|---|
+| 0 | 必需 | [`{ type: "web_search_20250305" }`](#persistence-type-sha256-2d11ca7b0d4493e244b74eba093227866b33249841e59a1e9bf56afed38604c3) |
+
+
+
+### `tuple (1 positions)`
+
+SHA-256: `8d6a011f3ef7096a4a922ef420458419ff6b20e1eaeece5d331db7585d2f08d6`
+
+| 位置 | 存在性 | 类型 |
+|---|---|---|
+| 0 | 必需 | [`ToolResultBlock`](#persistence-type-sha256-d61574d68558c5a184429e70b04da393dd5460bf5cc3ddef814546e659bd5127) |
+
+
+
+### `tuple (1 positions)`
+
+SHA-256: `8f6d609794bf5afc01d7ccf3e03811d32f4b8047f58a2c9a98db0154c2ad7cb9`
+
+| 位置 | 存在性 | 类型 |
+|---|---|---|
+| 0 | 必需 | [`TextBlock`](#persistence-type-sha256-4e887768586528565381dadbddee6cef555874148089f4579e0b4b1ad096fc9c) |
+
+
+
+### `tuple (1 positions)`
+
+SHA-256: `b993441f8ce7d27b80e619e113e232ae8e62d3d5a8340f6bfe12d8c4c018e62f`
+
+| 位置 | 存在性 | 类型 |
+|---|---|---|
+| 0 | 必需 | [`{ role: "user" }`](#persistence-type-sha256-9a2a9029f8d7ede05336980d8342737557f487b913bfd28853d0ab5214600ab5) |
+
+
+
+### `union (2 variants)`
+
+SHA-256: `1ab2ef1296f157ba96998f179bb5daa9d21a82480da2901127aeab2730797c92`
+
+以下类型之一:
+
+- `"error"`
+- `"success"`
+
+
+
+### `union (2 variants)`
+
+SHA-256: `50cf02d875f8a1f1411f4a6fbcffab9120ccef5f74a47331fbf29480e5f68f48`
+
+以下类型之一:
+
+- `"fork"`
+- `"fresh"`
+
+
+
+### `union (2 variants)`
+
+SHA-256: `feb329074f0206ecc06d8a1aa0a0b3e2f47fd27524ba020fbc849ba63e938896`
+
+以下类型之一:
+
+- [`{ compactionId, llmStreamCall, maxTokens?, model, … }`](#persistence-type-sha256-9ff2ad8dddb836f75e8f6197fff2371323dfc396c3c6fb667e6e0b42fda79a5c)
+- [`{ compactionId, maxTokens?, model, provider, … }`](#persistence-type-sha256-3aa261c8516b5c955ed12080e6257a56cbe513f6c9f0ac9274c12e96c196ebca)
+
+
+
+
+
+### `union (3 variants)`
+
+SHA-256: `5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc`
+
+以下类型之一:
+
+- [`{ ignorable?, seq, sourceEventSeqs?, surfaceOp, … }`](#persistence-type-sha256-998f22585a5d73ec005365e203f07fc3b3a029e82323fdda3fd7f13b0a9639d0)
+- [`{ ignorable?, seq, surfaceOp, time, … }`](#persistence-type-sha256-7af85bf70d4eafce63e739adae38ea85501e68df3a0e22f97f3a0be90fd9e4cb)
+- [`{ ignorable?, seq, time, type }`](#persistence-type-sha256-e3e77b26f0148755a505f5b8ea843a3be117827d4703bb5754d9dc8ddbef521f)
+
+
+
+### `union (3 variants)`
+
+SHA-256: `904bf499d98be4a3a5f836fcac533b6c4899569b018071e6604e1d32657d00fd`
+
+以下类型之一:
+
+- `"remove"`
+- `"replace"`
+- `"set"`
+
+
+
+### `union (3 variants)`
+
+SHA-256: `acd36e1717d2b4ef9e98a8e6fac17ca1203f3f448e5bca51677f129a8f4999e2`
+
+以下类型之一:
+
+- `"assistant"`
+- `"system"`
+- `"user"`
+
+
+
+### `union (3 variants)`
+
+SHA-256: `fd0d91a1f9dd2efb8959bdf5e07f8f0a98b1cdfa38ce8d4732ebde0b44c3abd4`
+
+以下类型之一:
+
+- `"completed"`
+- `"in_progress"`
+- `"pending"`
+
+
+
+### `union (6 variants)`
+
+SHA-256: `62e6a429ff3f390a46ac39fb468692032f42936ca0db19b53454184189401379`
+
+以下类型之一:
+
+- `"block"`
+- `"complete"`
+- `"create"`
+- `"edit"`
+- `"pause"`
+- `"resume"`
+
+
+
+### `union (7 variants)`
+
+SHA-256: `23cf7e0cf3fec1283b60fa15713506169bc9c079a08e124d1cb9733baca80b40`
+
+| kind | form 属性 | 其他必需字段 | 完整定义 |
+|---|---|---|---|
+| `plugin` | `"catalog"` | `plugin`: `string` | [`{ kind: "plugin", form: "catalog" }`](#persistence-type-sha256-2f90a7b3646fea3e677bd7b4000aa96f3b8964f107b614e204e11ad4051c24fc) |
+| `plugin` | `"instructions"` | `plugin`: `string` | [`{ kind: "plugin", form: "instructions" }`](#persistence-type-sha256-dda6e111a8ccfc12f6e742e977a1a4e3549e8c03732a5ff6c8d7c3d4bcb7a412) |
+| `plugin` | `"notice"` | `plugin`: `string`; `summary`: `string` | [`{ kind: "plugin", form: "notice" }`](#persistence-type-sha256-b4d298d90c798fa4d1f5b030ce3ce8031c4c41beafdb05323bec8b2a06903b43) |
+| `plugin` | `"recall"` | `plugin`: `string` | [`{ kind: "plugin", form: "recall" }`](#persistence-type-sha256-85e1bd563d6c80c1f377f99f91103fec4e315148a7330f3b3dae7c2d04e33b01) |
+| `plugin` | `"relay"` | `plugin`: `string` | [`{ kind: "plugin", form: "relay" }`](#persistence-type-sha256-2ce7ef3b3daebf95815c7ae454a751d3e67ca7a22e2e0734fe2942df393bb66c) |
+| `plugin` | `"snapshot"` | `plugin`: `string`; `sections`: [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) | [`{ kind: "plugin", form: "snapshot" }`](#persistence-type-sha256-e8d26e6993445743e6c4342c31b284c7d8f5574369abdd6021183af1a6b3538f) |
+| `plugin` | 未声明 | `plugin`: `string` | [`{ kind: "plugin" }`](#persistence-type-sha256-0ddab4577db37a3e0d9e3a91761735c8ef6f5629d526ab8ecaeeea19c097c8f8) |
+
+
+
+### `union (7 variants)`
+
+SHA-256: `3305a4bb6b6c29b482ba91d59c60b47e8f98282d3dacc8c29e4a4c2712209bdd`
+
+以下类型之一:
+
+- `"instruction-following"`
+- `"other"`
+- `"product-interaction"`
+- `"resource-cost"`
+- `"security-privacy-permission"`
+- `"service-stability"`
+- `"task-result"`
+
+
+
+### `unknown`
+
+SHA-256: `bbc5696e3f13c758237b316e3cf08cda0b9fd51ffe672539883457769faa185d`
+
+`unknown`:此声明未暴露存储值的内部字段。
+
+
+
+### `unknown[]`
+
+SHA-256: `b1664fa89f8eab49a14e7e3168d8bc4da4aa9fd76332f6c4a053d839e5276ae7`
+
+`unknown`(不透明) 的数组。
+
+
+
+### `{ active }`
+
+SHA-256: `20a57544bbf204dacd1ae6beb2ab29444365c3c869f2afdf489dcdcbc3d9c8c5`
+
+来源:[`packages/plan/plan-mode/src/index.ts:47`](../packages/plan/plan-mode/src/index.ts)
| 属性 | 存在性 | 类型 |
|---|---|---|
-| `ignorable` | 可选 | `true` |
-| `seq` | 必需 | `number` |
-| `surfaceOp` | 必需 | [`packages/core/session/src/types.ts#SurfaceOp`](#persistence-type-packagescoresessionsrctypestssurfaceop) |
-| `time` | 必需 | `number` |
-| `type` | 必需 | `string` |
+| `active` | 必需 | `boolean` |
-
+
-### `SessionEventEnvelope[6].surfaceOp[1]`
+### `{ agentPreset }`
+
+SHA-256: `6e52dd55a1d48954ed5464ec46fe34d9eb65f709baabc9561e7a279910b0c406`
+
+来源:[`packages/preset/agent-presets/src/session.ts:28`](../packages/preset/agent-presets/src/session.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `agentPreset` | 必需 | `string` |
+
+
+
+### `{ allowedModels }`
+
+SHA-256: `0d47a8f3d847243c4488e755ad4cab7a04ac5d4621b9c81865524cf3f4d8536f`
+
+来源:[`packages/subagent/tool-subagent/src/model-selection-state.ts:17`](../packages/subagent/tool-subagent/src/model-selection-state.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `allowedModels` | 必需 | [`SessionTitleModelIdentity[]`](#persistence-type-sha256-ba77b58995e36f14bb13886b0493d0a1a63d5db10b1a6cd9f6ac65a72cf832ec) |
+
+
+
+### `{ args?, commandId, name, source }`
+
+SHA-256: `a853902cfab417b8f08aa51ad6855fea46f34ed4588a74e47403035111d0fb86`
+
+来源:[`packages/interaction/commands/src/types.ts:105`](../packages/interaction/commands/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `args` | 可选 | `string` |
+| `commandId` | 必需 | `string` |
+| `name` | 必需 | `string` |
+| `source` | 必需 | [`CommandSource`](#persistence-type-sha256-ada310bf0bdb8fed51f3b56ea63f6ea6b18bbd587f04fccb63a14ab0b2a24e05) |
+
+
+
+### `{ arguments, callId, name, step, … }`
+
+SHA-256: `e4c18e294232c3ba6c9f1999f168263cc55956147cfe4121720899be8e52edd1`
+
+来源:[`packages/core/session/src/types.ts:348`](../packages/core/session/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `arguments` | 必需 | `string` |
+| `callId` | 必需 | `string` |
+| `name` | 必需 | `string` |
+| `step` | 必需 | `number` |
+| `turn` | 必需 | `number` |
+
+
+
+### `{ callId, files, turn }`
+
+SHA-256: `1528539c63db8b23506f0209a99ce77d8ad138adfbfcee3d4769b7382d93756c`
+
+来源:[`packages/deliverables/tool-present/src/types.ts:15`](../packages/deliverables/tool-present/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `callId` | 必需 | `string` |
+| `files` | 必需 | [`PresentedFile[]`](#persistence-type-sha256-1d9cb3caa96100b18b1911fa3ff8c751ef6992971a03c5f4d9aefc1a0004a345) |
+| `turn` | 必需 | `number` |
+
+
+
+### `{ callId?, id, reason?, toolName }`
+
+SHA-256: `45f2a07ea94573123b6ae14db787a40062dec3834f36d8be92c523d40ba28448`
+
+来源:[`packages/interaction/user-approval/src/types.ts:44`](../packages/interaction/user-approval/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `callId` | 可选 | `string` |
+| `id` | 必需 | `string` |
+| `reason` | 可选 | `string` |
+| `toolName` | 必需 | `string` |
+
+
+
+### `{ capturedFormatVersion?, capturedThroughSeq, compacted, inputIndex, … }`
+
+SHA-256: `4f91f187baeabef5c7950c4780d31bbe39f3345dff591a6cf26ac7e135ac1cf4`
+
+来源:[`packages/context/session-reference/src/types.ts:18`](../packages/context/session-reference/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `capturedFormatVersion` | 可选 | `number` |
+| `capturedThroughSeq` | 必需 | [`OptionalSessionSeq`](#persistence-type-sha256-3bd652ebfa8726b3ce3937a4f1bd2759e02f86b3a08a20f9e41a8513656fbc5f) |
+| `compacted` | 必需 | `boolean` |
+| `inputIndex` | 必需 | `number` |
+| `label` | 必需 | `string` |
+| `omittedBytes` | 必需 | `number` |
+| `omittedMessages` | 必需 | `number` |
+| `originalMessages` | 必需 | `number` |
+| `retainedMessages` | 必需 | `number` |
+| `sessionId` | 必需 | `string` |
+| `truncated` | 必需 | `boolean` |
+
+
+
+### `{ capturedFormatVersion?, capturedThroughSeq, compacted, inputIndex, … }[]`
+
+SHA-256: `df843efd87c78cf8de98f8e0d0216956cd568d0d0e56a22c853663e274aa1a18`
+
+[`{ capturedFormatVersion?, capturedThroughSeq, compacted, inputIndex, … }`](#persistence-type-sha256-4f91f187baeabef5c7950c4780d31bbe39f3345dff591a6cf26ac7e135ac1cf4) 的数组。
+
+
+
+### `{ childCreatedAt, childId, label, mode, … }`
+
+SHA-256: `0e10d7c096b47e61defe372a5fc8bd37d835199410eac44367f95c45082498bd`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `childCreatedAt` | 必需 | `number` |
+| `childId` | 必需 | `string` |
+| `label` | 必需 | `string` |
+| `mode` | 必需 | `"continuable"` |
+| `version` | 必需 | `0` |
+
+
+
+### `{ childCreatedAt, childId, label?, mode, … }`
+
+SHA-256: `5d542ac7bdf13310c46e1a884dec9fb18ad8c6e153cff207e639cd7bf9d7e694`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `childCreatedAt` | 必需 | `number` |
+| `childId` | 必需 | `string` |
+| `label` | 可选 | `string` |
+| `mode` | 必需 | `"one-shot"` |
+| `version` | 必需 | `0` |
+
+
+
+### `{ code, name, reason? }`
+
+SHA-256: `a81059ca06999da1e712414520c2c65e491d052fcf9640fae20aa38f0a5dc735`
+
+来源:[`packages/core/session/src/types.ts:370`](../packages/core/session/src/types.ts) · [`packages/core/tools/src/types.ts:24`](../packages/core/tools/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `code` | 必需 | `string` |
+| `name` | 必需 | `string` |
+| `reason` | 可选 | `string` |
+
+
+
+### `{ commandId, kind, sourceEventSeq?, text? }`
+
+SHA-256: `5b6fb1f226ff56402db08a6aae82af76100b14056271875f69ec526a1ae05d51`
+
+来源:[`packages/interaction/commands/src/types.ts:112`](../packages/interaction/commands/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `commandId` | 必需 | `string` |
+| `kind` | 必需 | [`union (2 variants)`](#persistence-type-sha256-1ab2ef1296f157ba96998f179bb5daa9d21a82480da2901127aeab2730797c92) |
+| `sourceEventSeq` | 可选 | `number` |
+| `text` | 可选 | `string` |
+
+
+
+### `{ compactionId, error?, sourceCommandId?, turn }`
+
+SHA-256: `ca59530d1a4f3e191b4032bc4a20eded0d827db8b5a7efb27b3af9e9b456c6f2`
+
+来源:[`packages/compaction/compaction/src/types.ts:72`](../packages/compaction/compaction/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `compactionId` | 必需 | `string` |
+| `error` | 可选 | `string` |
+| `sourceCommandId` | 可选 | `string` |
+| `turn` | 必需 | [`OptionalSessionSeq`](#persistence-type-sha256-3bd652ebfa8726b3ce3937a4f1bd2759e02f86b3a08a20f9e41a8513656fbc5f) |
+
+
+
+### `{ compactionId, llmStreamCall, maxTokens?, model, … }`
+
+SHA-256: `9ff2ad8dddb836f75e8f6197fff2371323dfc396c3c6fb667e6e0b42fda79a5c`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `compactionId` | 必需 | `string` |
+| `llmStreamCall` | 必需 | `true` |
+| `maxTokens` | 可选 | `number` |
+| `model` | 必需 | `string` |
+| `provider` | 必需 | `string` |
+| `rawOutput` | 必需 | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `shadowedRange` | 必需 | [`{ end, start }`](#persistence-type-sha256-9e41386b3a0c9572b0d63078492ebb3997da7d3a830d44e0259418bd02f4bcb2) |
+| `shadowedSeqs` | 必需 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `shadowedTokenCount` | 必需 | `number` |
+| `sourceCommandId` | 可选 | `string` |
+| `summary` | 必需 | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `usage` | 可选 | [`TokenUsage`](#persistence-type-sha256-fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394) |
+
+
+
+### `{ compactionId, maxTokens?, model, provider, … }`
+
+SHA-256: `3aa261c8516b5c955ed12080e6257a56cbe513f6c9f0ac9274c12e96c196ebca`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `compactionId` | 必需 | `string` |
+| `maxTokens` | 可选 | `number` |
+| `model` | 必需 | `string` |
+| `provider` | 必需 | `string` |
+| `rawOutput` | 可选 | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `shadowedRange` | 必需 | [`{ end, start }`](#persistence-type-sha256-9e41386b3a0c9572b0d63078492ebb3997da7d3a830d44e0259418bd02f4bcb2) |
+| `shadowedSeqs` | 必需 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `shadowedTokenCount` | 必需 | `number` |
+| `sourceCommandId` | 可选 | `string` |
+| `summary` | 必需 | [`ContentBlock[]`](#persistence-type-sha256-bb72d86bc9ef0b3908bfa57ef98ccccae24d67d945c9f6869ca3cb8577889e75) |
+| `usage` | 可选 | [`TokenUsage`](#persistence-type-sha256-fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394) |
+
+
+
+### `{ compactionId, sourceCommandId?, turn }`
+
+SHA-256: `3e4e7683b0192c9f0e6a75c59076108f017892cdb302a98032c2632fd79c356f`
+
+来源:[`packages/compaction/compaction/src/types.ts:24`](../packages/compaction/compaction/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `compactionId` | 必需 | `string` |
+| `sourceCommandId` | 可选 | `string` |
+| `turn` | 必需 | [`OptionalSessionSeq`](#persistence-type-sha256-3bd652ebfa8726b3ce3937a4f1bd2759e02f86b3a08a20f9e41a8513656fbc5f) |
+
+
+
+### `{ decision, durationMs, exitCode?, handlerId, … }`
+
+SHA-256: `8ad45ad053b4d89f8865c17cc9ff3b8748e86045f3f0fb816269a34af2619141`
+
+来源:[`packages/hooks/hook-protocol/src/types.ts:31`](../packages/hooks/hook-protocol/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `decision` | 必需 | `string` |
+| `durationMs` | 必需 | `number` |
+| `exitCode` | 可选 | `number` |
+| `handlerId` | 必需 | `string` |
+| `point` | 必需 | `string` |
+| `stderrSummary` | 可选 | `string` |
+| `turn` | 必需 | `number` |
+
+
+
+### `{ delayMs, failure, maxRetries, mode, … }`
+
+SHA-256: `cdee10e87dbed8440d8b6935888624884878efc7af95402e94171b29f173dced`
+
+来源:[`packages/llm/llm-retry/src/types.ts:17`](../packages/llm/llm-retry/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `delayMs` | 必需 | `number` |
+| `failure` | 必需 | [`LlmFailure`](#persistence-type-sha256-5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca) |
+| `maxRetries` | 必需 | `number` |
+| `mode` | 必需 | `"normal"` |
+| `policyKey` | 必需 | `string` |
+| `provider` | 必需 | `string` |
+| `retry` | 必需 | `number` |
+| `retryId` | 必需 | `string` |
+| `step` | 必需 | `number` |
+| `turn` | 必需 | `number` |
+
+
+
+### `{ delayMs, failure, mode, policyKey, … }`
+
+SHA-256: `374fdd68aee5ff844e378c0cbdd961d247a0f22e4ade0bb03d800cd2a46a2b8b`
+
+来源:[`packages/llm/llm-retry/src/types.ts:30`](../packages/llm/llm-retry/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `delayMs` | 必需 | `number` |
+| `failure` | 必需 | [`LlmFailure`](#persistence-type-sha256-5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca) |
+| `mode` | 必需 | `"always"` |
+| `policyKey` | 必需 | `string` |
+| `provider` | 必需 | `string` |
+| `retry` | 必需 | `number` |
+| `retryId` | 必需 | `string` |
+| `step` | 必需 | `number` |
+| `turn` | 必需 | `number` |
+
+
+
+### `{ description, name }`
+
+SHA-256: `83079c8a3f733ac3fa603eefa0fbb4737ca4d8b69e7e2e7298b60f9ac4098693`
+
+来源:[`packages/skill/tool-skill/src/index.ts:40`](../packages/skill/tool-skill/src/index.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `description` | 必需 | `string` |
+| `name` | 必需 | `string` |
+
+
+
+### `{ description, name }[]`
+
+SHA-256: `aba175fb20ffc71112c55efe70458ff5d7dbfb83501892b4ba8d077f0ea5d7ba`
+
+[`{ description, name }`](#persistence-type-sha256-83079c8a3f733ac3fa603eefa0fbb4737ca4d8b69e7e2e7298b60f9ac4098693) 的数组。
+
+
+
+### `{ dialect, handlerId, matcher?, point, … }`
+
+SHA-256: `119abe2b9c0b2f46ecb31d82b9acba4d4b30e049f655e2475e8b4ae12d5a9e25`
+
+来源:[`packages/hooks/hook-protocol/src/types.ts:19`](../packages/hooks/hook-protocol/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `dialect` | 必需 | [`HookDialect`](#persistence-type-sha256-a6b41f5bede8094d7bf635be5d69b1bd7a25e006ca9cf9415bceb9322f1a7feb) |
+| `handlerId` | 必需 | `string` |
+| `matcher` | 可选 | `string` |
+| `point` | 必需 | `string` |
+| `turn` | 必需 | `number` |
+
+
+
+### `{ end, start }`
+
+SHA-256: `9e41386b3a0c9572b0d63078492ebb3997da7d3a830d44e0259418bd02f4bcb2`
+
+来源:[`packages/compaction/compaction/src/types.ts:38`](../packages/compaction/compaction/src/types.ts) · [`packages/compaction/compaction/src/types.ts:84`](../packages/compaction/compaction/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `end` | 必需 | `number` |
+| `start` | 必需 | `number` |
+
+
+
+### `{ endSeq, op, startSeq }`
SHA-256: `bcf0caf62d964b2fcf5404bd5c909cfa9a21c3f3c96e6b7e36d9e33565223825`
@@ -6284,452 +5526,1848 @@ SHA-256: `bcf0caf62d964b2fcf5404bd5c909cfa9a21c3f3c96e6b7e36d9e33565223825`
| `op` | 必需 | `"replace"` |
| `startSeq` | 必需 | `number` |
-
+
-### `"session/title"`
+### `{ error, kind: "error" }`
-SHA-256: `7a651f3b672c52fb615f22c0ce9cb3cc5b22aad92e6bbeefb0808fd7b9233a50`
+SHA-256: `79650cfa10aa3c52440328d85e8a25f0ffadc8d7efd784e3c0819d8bb74a1985`
-`"session/title"`
+来源:[`packages/core/session/src/types.ts:211`](../packages/core/session/src/types.ts)
-
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `error` | 必需 | [`LlmFailure`](#persistence-type-sha256-5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca) |
+| `kind` | 必需 | `"error"` |
-### `"session/title-llm-request"`
+
-SHA-256: `587bb11da730e06aa52b62c087d217d6f8f22459b25f31cb9e1e1baf17944e5e`
+### `{ error?, message, meta?, step, … }`
-`"session/title-llm-request"`
+SHA-256: `356aad27134a0e31af67c994ff8b9e4b91acfb6c4917b3bc1f7a62bbf82794d5`
-
+来源:[`packages/core/session/src/types.ts:362`](../packages/core/session/src/types.ts)
-### `"set"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `error` | 可选 | [`{ code, name, reason? }`](#persistence-type-sha256-a81059ca06999da1e712414520c2c65e491d052fcf9640fae20aa38f0a5dc735) |
+| `message` | 必需 | [`ToolResultMessage`](#persistence-type-sha256-1b573e2d5c094fa87e2a8bf409ddd4ac5ba92a123085e168de44b9ccdbd5244c) |
+| `meta` | 可选 | [`JsonValue`](#persistence-type-sha256-c592ce75aab73fcab19c1d7845684c72cf402b78d2e1f2833a58ecf9f3598ed6) |
+| `step` | 必需 | `number` |
+| `turn` | 必需 | `number` |
-SHA-256: `b765ee31033cea463863faf3fc6a0a1b85c47c6a2f13fe1ce833abe56105114b`
+
-`"set"`
+### `{ failure, kind: "aborted" }`
-
+SHA-256: `8e31bb958e9b015e6f8407eaade32217068159e816f3cc99c3ad76eb889732e0`
-### `"skill-catalog"`
+来源:[`packages/llm/llm/src/types.ts:147`](../packages/llm/llm/src/types.ts)
-SHA-256: `6ebcc2dbec9f2dabca9f668ae6d39e877899b180740570f453409db339221df3`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `failure` | 必需 | [`LlmFailure`](#persistence-type-sha256-5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca) |
+| `kind` | 必需 | `"aborted"` |
-`"skill-catalog"`
+
-
+### `{ failure, kind: "error" }`
-### `"skill-invocation"`
+SHA-256: `693f4952fb5565da96c06bace8924b098ac2fbc915fde0ff8019701183abc057`
-SHA-256: `1922cd79a70806c17758185a6ef0458bc1fb3900363906733421c16414da2509`
+来源:[`packages/llm/llm/src/types.ts:148`](../packages/llm/llm/src/types.ts)
-`"skill-invocation"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `failure` | 必需 | [`LlmFailure`](#persistence-type-sha256-5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca) |
+| `kind` | 必需 | `"error"` |
-
+
-### `"snapshot"`
+### `{ header, reason, startsSeries? }`
-SHA-256: `6f9e00383836275e46c0a9915767f9bb561be5fc30aae490174908a93e99a912`
+SHA-256: `2f0aefb72ab453c4bf21a6687f436775d359dc6f8f10410fd4c0615b20bd9d76`
-`"snapshot"`
+来源:[`packages/core/session/src/types.ts:377`](../packages/core/session/src/types.ts)
-
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `header` | 必需 | [`EpochHeader`](#persistence-type-sha256-c55a891c7aac496de6ee64c91c1fb65728c977314013033e42c863428aada854) |
+| `reason` | 必需 | [`RequestHeaderReason`](#persistence-type-sha256-530da6c0267813bb4511af72883cc518834e624e3b3220a7062955fd57a788a6) |
+| `startsSeries` | 可选 | `true` |
-### `"step/end"`
+
-SHA-256: `c219efbdfd53b836786202ab4532913d555798f0a8615a4e9629736e3799fb70`
+### `{ height, width }`
-`"step/end"`
+SHA-256: `0f46153645c297846a3fad3911636659ca4717a5e7d71c9f50bffacd312115ef`
-
+来源:[`packages/attachment/attachment/src/types.ts:28`](../packages/attachment/attachment/src/types.ts)
-### `"step/start"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `height` | 必需 | `number` |
+| `width` | 必需 | `number` |
-SHA-256: `2c64d4bc7264fd3f8bed47e96ab8a593bce05a1e4e1c436dcd244a3b7e0c2a9d`
+
-`"step/start"`
+### `{ id, outcome }`
-
+SHA-256: `93cbbc5a7fd0b1aa1ff1b9a6bb5ec52b073f48e5a5200365c45c0cd54059e1b9`
-### `"stop"`
+来源:[`packages/interaction/user-approval/src/types.ts:55`](../packages/interaction/user-approval/src/types.ts)
-SHA-256: `57f3f606ff8b6c84d9c443faace9d1dd10cca0354f37a4f515ef075f7c351b90`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `id` | 必需 | `string` |
+| `outcome` | 必需 | [`ApprovalOutcome`](#persistence-type-sha256-930c1cd289def119d443e19dd90008916bf035f0a4d23e07241e7f050f2b89b7) |
-`"stop"`
+
-
+### `{ ignorable?, seq, sourceEventSeqs?, surfaceOp, … }`
-### `string`
+SHA-256: `998f22585a5d73ec005365e203f07fc3b3a029e82323fdda3fd7f13b0a9639d0`
-SHA-256: `4cd48f3e5108bd6ebedf7301c3638839b8b2b9db8dbd493974177fbdeb91a01b`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `sourceEventSeqs` | 可选 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `surfaceOp` | 必需 | [`SurfaceOp`](#persistence-type-sha256-335e242de1fcc17b6ca920fc420d71bec2d76e53e37955c00948b65ab77f05c5) |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `string` |
-来源:[`packages/api/session-controller/src/types.ts:380`](../packages/api/session-controller/src/types.ts) · [`packages/attachment/attachment/src/brand.ts:6`](../packages/attachment/attachment/src/brand.ts) · [`packages/compaction/compaction/src/brand.ts:4`](../packages/compaction/compaction/src/brand.ts) · [`packages/core/session/src/types.ts:19`](../packages/core/session/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:20`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:32`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:8`](../packages/experimental/agent-team/src/types.ts) · [`packages/feedback/message-feedback/src/types.ts:14`](../packages/feedback/message-feedback/src/types.ts) · [`packages/goal/goal/src/types.ts:17`](../packages/goal/goal/src/types.ts) · [`packages/interaction/commands/src/brand.ts:31`](../packages/interaction/commands/src/brand.ts) · [`packages/interaction/user-approval/src/types.ts:17`](../packages/interaction/user-approval/src/types.ts) · [`packages/llm/llm-retry/src/brand.ts:4`](../packages/llm/llm-retry/src/brand.ts) · [`packages/llm/llm/src/brand.ts:16`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:31`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:43`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:67`](../packages/llm/llm/src/brand.ts) · [`packages/schedule/schedule/src/types.ts:10`](../packages/schedule/schedule/src/types.ts) · [`packages/session/session-title/src/index.ts:42`](../packages/session/session-title/src/index.ts) · [`packages/session/session-title/src/types.ts:17`](../packages/session/session-title/src/types.ts) · [`packages/webhook/webhook/src/brand.ts:12`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:6`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:9`](../packages/webhook/webhook/src/brand.ts) · [`packages/workflow/workflow/src/types.ts:13`](../packages/workflow/workflow/src/types.ts)
+
-`string`
+### `{ ignorable?, seq, surfaceOp, time, … }`
-
+SHA-256: `7af85bf70d4eafce63e739adae38ea85501e68df3a0e22f97f3a0be90fd9e4cb`
-### `"subagent"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `surfaceOp` | 必需 | [`SurfaceOp`](#persistence-type-sha256-335e242de1fcc17b6ca920fc420d71bec2d76e53e37955c00948b65ab77f05c5) |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `string` |
-SHA-256: `aacda84a69739238aa782eea902d3073017d9d74b9808de2bf5a83c9738cbdc6`
+
-`"subagent"`
+### `{ ignorable?, seq, time, type }`
-
+SHA-256: `e3e77b26f0148755a505f5b8ea843a3be117827d4703bb5754d9dc8ddbef521f`
-### `"subagent-settled"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `string` |
-SHA-256: `bf16d2e98a7f13894ded2cffe5ce857bf473954a0e3c0ed9bc7739e2e1c7b78a`
+
-`"subagent-settled"`
+### `{ inherited? }`
-
+SHA-256: `17d1afb770d9941936130996da00dc86782cfef731d8d6526162c301256a4ac3`
-### `"subagent/catalog"`
+来源:[`packages/core/session/src/types.ts:414`](../packages/core/session/src/types.ts)
-SHA-256: `44c8c77aa9aa100b0d74d2deee85474b29faa6eee0ac0f662f7abe9931ddd7f2`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `inherited` | 可选 | `true` |
-`"subagent/catalog"`
+
-
+### `{ inserted, outcome?, removedCount?, start, … }`
-### `"subagent/descriptor"`
+SHA-256: `a6a195c1b4a906d953d24ab5864c9f1881d545460e080a51144adfc9cb058cfe`
-SHA-256: `5ebce1317eacd2c148456627a09668e927ee15c204f0643f5ea76b46b54a2647`
+来源:[`packages/core/agent/src/types.ts:87`](../packages/core/agent/src/types.ts)
-`"subagent/descriptor"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `inserted` | 必需 | [`UserMessage[]`](#persistence-type-sha256-300341f890f7b9506a1749fff4fa5239d16ea1c63ff6b15851acb03c20f3b48d) |
+| `outcome` | 可选 | `"canceled"` |
+| `removedCount` | 可选 | `number` |
+| `start` | 必需 | `number` |
+| `target` | 必需 | [`InboxTarget`](#persistence-type-sha256-96f4a9c81fc0f940ef71528a8cc66731ae4cf1f40d79680c5fe3c39f96d7723c) |
-
+
-### `"subagent/model-selection-policy"`
+### `{ interrupted?, message, step, stream, … }`
-SHA-256: `0a8a062bc9c3c0d97fd97742262f2ea53dd32297f834e81114870d38ac3dc6da`
+SHA-256: `77b8491f946edfc8cc77ebae3ba49183759da31ba2dfa83d4c9e9e618c4b91d2`
-`"subagent/model-selection-policy"`
+来源:[`packages/core/session/src/types.ts:328`](../packages/core/session/src/types.ts)
-
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `interrupted` | 可选 | `true` |
+| `message` | 必需 | [`AssistantMessage`](#persistence-type-sha256-e50b0a3ed8e6c80b672e4f855c91984f03b5c3fdd5d475bf171171f391a86c83) |
+| `step` | 必需 | `number` |
+| `stream` | 必需 | [`AssistantStreamRecord[]`](#persistence-type-sha256-26f3bb7529cfce1e3a0f1ededa365d8b426758ca0feeb0beabeee805f8bb8346) |
+| `turn` | 必需 | `number` |
+| `usage` | 可选 | [`TokenUsage`](#persistence-type-sha256-fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394) |
-### `"success"`
+
-SHA-256: `511801b0a6470d98566e8385d3dffddb2b67f79fcf73ed6056f46c3cc0a245a7`
+### `{ kind: "aborted", reason }`
-`"success"`
+SHA-256: `0a30c3be336cdd4f8f34e66543a3d46d611c43986edd9b3ce6cbb9b721d3b5d3`
-
+来源:[`packages/core/session/src/types.ts:203`](../packages/core/session/src/types.ts)
-### `"system"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `kind` | 必需 | `"aborted"` |
+| `reason` | 必需 | [`TurnEndCancelCause`](#persistence-type-sha256-1f8c126cfab3df812cd115cfc23e3256f0fa2383400f4ce91ecad313577e59b0) |
-SHA-256: `8af841fc9b265ade3441caf9fe40dd24db24226befba48150e6d0eeccc1389c3`
+
-`"system"`
+### `{ kind: "blocked" }`
-
+SHA-256: `023a355b2be0d688fb6e4df8388dadb942761d46cfe96d0f499aae9631a159d4`
-### `"system/message"`
+来源:[`packages/core/session/src/types.ts:205`](../packages/core/session/src/types.ts)
-SHA-256: `1c5a58f4599bd4a9711712551ffe2442a5e5fcd0758bafe630cc4ead850bdaa7`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `kind` | 必需 | `"blocked"` |
-`"system/message"`
+
-
+### `{ kind: "completed" }`
-### `"task-result"`
+SHA-256: `b6ef9c6210be8350cd465f485cf520031fffa6bf3809c61a1e713e834c5982d0`
-SHA-256: `f05fb85e715af4ab4de0b6ba111166dd0435bd8bb74a0fa0f32b9d174113fc7c`
+来源:[`packages/core/session/src/types.ts:201`](../packages/core/session/src/types.ts)
-`"task-result"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `kind` | 必需 | `"completed"` |
-
+
-### `"team-message"`
+### `{ kind: "disposed" }`
-SHA-256: `2e4debca12f2c449f96dc6574f3fbf2fb346193443114a241d01a236362ec48c`
+SHA-256: `4bb451330ff699f36b45539ceb0eb2606ead72084e2c5bb637c36cc80e2252db`
-`"team-message"`
+来源:[`packages/core/session/src/types.ts:192`](../packages/core/session/src/types.ts)
-
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `kind` | 必需 | `"disposed"` |
-### `"team/member"`
+
-SHA-256: `18fcdd273a2f2f9d813a3be5e71df5903a963a5c88e46b90b14de6e2db890da0`
+### `{ kind: "fallback" }`
-`"team/member"`
+SHA-256: `1b5649238876e28811e80f10ec67a00c197ad3babd4ecc61a22b09064b88c597`
-
+来源:[`packages/session/session-title/src/types.ts:29`](../packages/session/session-title/src/types.ts)
-### `"team/message/delivered"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `kind` | 必需 | `"fallback"` |
-SHA-256: `a8a2b9011fc067862df7ce40748868467e5778283d7ac193c13f77684a914c57`
+
-`"team/message/delivered"`
+### `{ kind: "forked" }`
-
+SHA-256: `ec8b5ff7c77ca6893ac7ba5a0c5b2aefeb52f12c64450b7359660c2a7e8a53d7`
-### `"team/message/queued"`
+来源:[`packages/core/session/src/types.ts:227`](../packages/core/session/src/types.ts)
-SHA-256: `4e011753f8263f436efaabfbb3b4db53a98fc55342c5ded2daf7208b217be159`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `kind` | 必需 | `"forked"` |
-`"team/message/queued"`
+
-
+### `{ kind: "hook" }`
-### `"team/task"`
+SHA-256: `6c5a37d42ebdb12db4410699259335f1e149e3a0260425684c00b153afc8990d`
-SHA-256: `b57ae1b37e52bee0a21cbdace168dc6a15582bcda8c306dad962c5dcc8a8e28b`
+来源:[`packages/core/session/src/types.ts:191`](../packages/core/session/src/types.ts)
-`"team/task"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `kind` | 必需 | `"hook"` |
+| `reason` | 必需 | `string` |
-
+
-### `"text"`
+### `{ kind: "interrupted" }`
-SHA-256: `4e44c9118152f6829634bfd508e47669ab0497caffa380c94b4be91f9390d35d`
+SHA-256: `56b7c047694875a843ba020dfea3c8380d54ae4ff88ab349e72004dc21e07c23`
-`"text"`
+来源:[`packages/core/session/src/types.ts:220`](../packages/core/session/src/types.ts)
-
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `kind` | 必需 | `"interrupted"` |
-### `"text-chunks"`
+
-SHA-256: `f9cfc89e8fe085b4fcc9cd32b74b6f103608c54d7d8cd97b47c01de34f252ba3`
+### `{ kind: "legacy" }`
-`"text-chunks"`
+SHA-256: `eaa71be0fbf0f702df8ea6c11d0aa2f9782263d45a10d0fb14eda662f4bfe04c`
-
+来源:[`packages/core/session/src/types.ts:195`](../packages/core/session/src/types.ts)
-### `"text-delta"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `kind` | 必需 | `"legacy"` |
-SHA-256: `5abab3a27fd2736660ecddd94b28d6bbf114986dd894880153bd1be3ccacb563`
+
-`"text-delta"`
+### `{ kind: "max-tokens" }`
-
+SHA-256: `ab7ec5f9eb2c6dfacca5da4c37cf7ba85d04172053ee6b1ebf1709ffcd99c1a7`
-### `"todo/write"`
+来源:[`packages/core/session/src/types.ts:213`](../packages/core/session/src/types.ts) · [`packages/llm/llm/src/types.ts:146`](../packages/llm/llm/src/types.ts)
-SHA-256: `af0750d32d97d47b12b7361a587db41894b17e04c9a805fe212f0114aa2248c7`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `kind` | 必需 | `"max-tokens"` |
-`"todo/write"`
+
-
+### `{ kind: "parent" }`
-### `"tool"`
+SHA-256: `6c03546143cdf6ae88f1745ac98c5139efa1588d1415249bbc5f3104d32ab800`
-SHA-256: `a13d8f379222ece8a02a86efe4c8334af4f108ecb3034b38c0a42bb3046e6847`
+来源:[`packages/core/session/src/types.ts:190`](../packages/core/session/src/types.ts)
-`"tool"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `kind` | 必需 | `"parent"` |
-
+
-### `"tool-call"`
+### `{ kind: "plugin" }`
-SHA-256: `1f0133217eeeffd8d387baf1ec8ed9856e719bcd999dc08e48624cba96d75fd7`
+SHA-256: `0ddab4577db37a3e0d9e3a91761735c8ef6f5629d526ab8ecaeeea19c097c8f8`
-`"tool-call"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `kind` | 必需 | `"plugin"` |
+| `plugin` | 必需 | `string` |
-
+
-### `"tool-call-chunks"`
+### `{ kind: "plugin", form: "catalog" }`
-SHA-256: `616f93a5047de668e1c30d57b1786abd76beeb4123599637ec1dc5290320ede5`
+SHA-256: `2f90a7b3646fea3e677bd7b4000aa96f3b8964f107b614e204e11ad4051c24fc`
-`"tool-call-chunks"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `form` | 必需 | `"catalog"` |
+| `kind` | 必需 | `"plugin"` |
+| `plugin` | 必需 | `string` |
-
+
-### `"tool-call-delta"`
+### `{ kind: "plugin", form: "instructions" }`
-SHA-256: `9b4fd974c124c83743efe030ba4e1250e087505f3f74588716a521fb8d453267`
+SHA-256: `dda6e111a8ccfc12f6e742e977a1a4e3549e8c03732a5ff6c8d7c3d4bcb7a412`
-`"tool-call-delta"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `form` | 必需 | `"instructions"` |
+| `kind` | 必需 | `"plugin"` |
+| `plugin` | 必需 | `string` |
-
+
-### `"tool-calls"`
+### `{ kind: "plugin", form: "notice" }`
-SHA-256: `6c1cccb433ddc153facb380c7dda956237ba5c31f8a532a69142dc277890cc9b`
+SHA-256: `b4d298d90c798fa4d1f5b030ce3ce8031c4c41beafdb05323bec8b2a06903b43`
-`"tool-calls"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `form` | 必需 | `"notice"` |
+| `kind` | 必需 | `"plugin"` |
+| `plugin` | 必需 | `string` |
+| `summary` | 必需 | `string` |
-
+
-### `"tool-result"`
+### `{ kind: "plugin", form: "recall" }`
-SHA-256: `e5244812c495a80c2e78ba2c2690dca5f6b58ea8d3fe5531ff94a6f9ac5e5d66`
+SHA-256: `85e1bd563d6c80c1f377f99f91103fec4e315148a7330f3b3dae7c2d04e33b01`
-`"tool-result"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `form` | 必需 | `"recall"` |
+| `kind` | 必需 | `"plugin"` |
+| `plugin` | 必需 | `string` |
-
+
-### `"tool-workflow/agent-end"`
+### `{ kind: "plugin", form: "relay" }`
-SHA-256: `5d17f27a1ef9f7026c0232714adf7573961536d75f3303ca97973975f5af170e`
+SHA-256: `2ce7ef3b3daebf95815c7ae454a751d3e67ca7a22e2e0734fe2942df393bb66c`
-`"tool-workflow/agent-end"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `form` | 必需 | `"relay"` |
+| `kind` | 必需 | `"plugin"` |
+| `plugin` | 必需 | `string` |
-
+
-### `"tool-workflow/agent-start"`
+### `{ kind: "plugin", form: "snapshot" }`
-SHA-256: `ad92f473a03ae72599ff26c86e897c25e16269519ad2a87340f0bea946517af8`
+SHA-256: `e8d26e6993445743e6c4342c31b284c7d8f5574369abdd6021183af1a6b3538f`
-`"tool-workflow/agent-start"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `form` | 必需 | `"snapshot"` |
+| `kind` | 必需 | `"plugin"` |
+| `plugin` | 必需 | `string` |
+| `sections` | 必需 | [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) |
-
+
-### `"tool-workflow/run-end"`
+### `{ kind: "provider" }`
-SHA-256: `fe792a6cd430494503837e21e79f91677704ccdd9e870c679aabd7d43ed47ddd`
+SHA-256: `b81e9de81a481b24e1e1f9adf038bfc59e57b4f35ce62f8f1e45284186f4f812`
-`"tool-workflow/run-end"`
+来源:[`packages/session/session-title/src/types.ts:30`](../packages/session/session-title/src/types.ts)
-
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `kind` | 必需 | `"provider"` |
+| `model` | 可选 | [`SessionTitleModelIdentity`](#persistence-type-sha256-07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235) |
+| `provider` | 必需 | `string` |
-### `"tool-workflow/run-start"`
+
-SHA-256: `cdca80b8dad24d4e7b1d5a288a8475ba8d8d46be385bd2da85f122ee836f1670`
+### `{ kind: "stop" }`
-`"tool-workflow/run-start"`
+SHA-256: `1d76406cbb2ddadb0dbbb51e9d8bc6cf678fed455cf8eb512f36f7c86d37a62f`
-
+来源:[`packages/llm/llm/src/types.ts:144`](../packages/llm/llm/src/types.ts)
-### `"tool/call"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `kind` | 必需 | `"stop"` |
-SHA-256: `c589e938cc0e4989df8b82abef6339de621f0dc4fe62c230d145b94996af7f92`
+
-`"tool/call"`
+### `{ kind: "tool-calls" }`
-
+SHA-256: `287211846beea1eccb5f9acee00d20388a38fcb2e95858fa2332d6f58529379a`
-### `"tool/ptc-dispatch"`
+来源:[`packages/llm/llm/src/types.ts:145`](../packages/llm/llm/src/types.ts)
-SHA-256: `fb5e0517050d2c6d40e5b8145db1f7c5ca7044d5d50fada6ff80e0b22c6ca973`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `kind` | 必需 | `"tool-calls"` |
-`"tool/ptc-dispatch"`
+
-
+### `{ kind: "user" }`
-### `"tool/ptc-dispatch-start"`
+SHA-256: `6a4f72e2e179e17b922f2a9392c0e1c8f8c707f32494372454850a3eb184a6e7`
-SHA-256: `2aed07493b1c65b6d00de5586da1e743cf501684b9ad43a1765fb4007d4ea456`
+来源:[`packages/api/session-controller/src/types.ts:385`](../packages/api/session-controller/src/types.ts)
-`"tool/ptc-dispatch-start"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `clientTimeZone` | 可选 | `string` |
+| `kind` | 必需 | `"user"` |
+| `rpcId` | 必需 | `string` |
-
+
-### `"tool/result"`
+### `{ kind: "webhook", form: "notice" }`
-SHA-256: `570e85022434613394418ad33e77e9f1f7a05699b33d0b62eae0677a638c3833`
+SHA-256: `9edc162949abf93bd5ff049191b345454ba104f583937ce5580fb50f067d2b94`
-`"tool/result"`
+来源:[`packages/webhook/webhook/src/types.ts:74`](../packages/webhook/webhook/src/types.ts)
-
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `deliveryId` | 必需 | `string` |
+| `form` | 必需 | `"notice"` |
+| `kind` | 必需 | `"webhook"` |
+| `provider` | 必需 | `string` |
+| `ruleId` | 必需 | `string` |
+| `source` | 必需 | `string` |
+| `summary` | 必需 | `string` |
-### `true`
+
-SHA-256: `dacf3d5f3e4ff619c1320e64a48dec5e7ecd7870bece65fbd449a0e63adfa521`
+### `{ max_tokens, messages, model, tools }`
-`true`
+SHA-256: `930a6567a10bb62ddd157bd8abdf4b182810c8c3b49d91309b3b009a5fed9731`
-
+来源:[`packages/web/web-search-deepseek/src/provider.ts:61`](../packages/web/web-search-deepseek/src/provider.ts)
-### `"turn/end"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `max_tokens` | 必需 | `number` |
+| `messages` | 必需 | [`tuple (1 positions)`](#persistence-type-sha256-b993441f8ce7d27b80e619e113e232ae8e62d3d5a8340f6bfe12d8c4c018e62f) |
+| `model` | 必需 | `string` |
+| `tools` | 必需 | [`tuple (1 positions)`](#persistence-type-sha256-4aed17ec726b5397c29f6cb4bcd7905dc1a12bb6140f1657f073cd24380f2af8) |
-SHA-256: `4312134fc6f9cad507c31390bd3d147535492dd77621ec517c5e85f853d53a03`
+
-`"turn/end"`
+### `{ member, teamId, version }`
-
+SHA-256: `b1ebd5cda47d90d980bb05bffc3f970c51537b9aff15b3bc3d639811727741b1`
-### `"turn/start"`
+来源:[`packages/experimental/agent-team/src/types.ts:221`](../packages/experimental/agent-team/src/types.ts)
-SHA-256: `0af3ecfb8c60d416fc40a7cc4fb2c4851a8e46608b2b38ab9e510670c971aa1f`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `member` | 必需 | [`TeamMemberSnapshot`](#persistence-type-sha256-6598cd6da253948d6b207c6374a45335804c79b576866d6215649c2d1bc85e25) |
+| `teamId` | 必需 | `string` |
+| `version` | 必需 | `2` |
-`"turn/start"`
+
-
+### `{ message, step, turn }`
-### `"unavailable"`
+SHA-256: `2074f40221b76c75fd314246db558965dc3477dfb440bcc952b1eedc9778e366`
-SHA-256: `2c4c21f19f426a58f2dac914e34313aa43f8408972de857a486d1f086d5adb6c`
+来源:[`packages/core/session/src/types.ts:317`](../packages/core/session/src/types.ts)
-`"unavailable"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `message` | 必需 | [`SystemMessage`](#persistence-type-sha256-302b01ddddcbb3b16cfa3fba2a5d99f5082a55fbd9dc5c83a179a228b8a6a0ca) |
+| `step` | 必需 | `number` |
+| `turn` | 必需 | `number` |
-
+
-### `unknown`
+### `{ message, teamId, version }`
-SHA-256: `bbc5696e3f13c758237b316e3cf08cda0b9fd51ffe672539883457769faa185d`
+SHA-256: `0c3f4d2248d9bc9700e2d7253fa71aa9935f5c39af6f11de5727f08cccaf8383`
-`unknown`:此声明未暴露存储值的内部字段。
+来源:[`packages/experimental/agent-team/src/types.ts:225`](../packages/experimental/agent-team/src/types.ts)
-
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `message` | 必需 | [`TeamMessageSnapshot`](#persistence-type-sha256-5b694f394d5e11609887a3ccfa82844935d49806c37e336b30be2186d649ab94) |
+| `teamId` | 必需 | `string` |
+| `version` | 必需 | `2` |
-### `"usage"`
+
-SHA-256: `0bdaf9cb63594be4ef034b68901fffe792fe09d6d5f6bac42d7f56f6e7834fb9`
+### `{ messageId, targetId, teamId, version }`
-`"usage"`
+SHA-256: `0bcfaf5566d271028429ac7b562cb59053c9d78b8ae14708c35fac835108d1b1`
-
+来源:[`packages/experimental/agent-team/src/types.ts:227`](../packages/experimental/agent-team/src/types.ts)
-### `"user"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `messageId` | 必需 | `string` |
+| `targetId` | 必需 | `string` |
+| `teamId` | 必需 | `string` |
+| `version` | 必需 | `2` |
-SHA-256: `68f44f59e91c41395076cb77265981a601680ec8a381bbbeb6ab754ffdc94573`
+
-`"user"`
+### `{ mode, source? }`
-
+SHA-256: `9890113e97dd3541787bfe6704f2b223d3a890b5325ca0acae2b0398909b413e`
-### `"user/message"`
+来源:[`packages/sandbox/sandbox-policy/src/session-mode.ts:33`](../packages/sandbox/sandbox-policy/src/session-mode.ts)
-SHA-256: `de25352d2dc4196309bd84b5bac6319f6d5c898ea0e82bb5ae66c5738d0d426f`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `mode` | 必需 | [`SandboxMode`](#persistence-type-sha256-fab2bb09bc5e3b9db0685e8f5500b029af1a2b33e70bc703c1d5d0f596fbc1fd) |
+| `source` | 可选 | `"delegation"` |
-`"user/message"`
+
-
+### `{ policy, source? }`
-### `"web_search"`
+SHA-256: `11f70b595aa76897fc4e25a352bfa718c659f44b799e5aa14e84e5a38fe72912`
-SHA-256: `935c8d486292b13c87b57ca280eb8c58b5b2f5239be86fcd4334c33fdeb87682`
+来源:[`packages/interaction/user-approval/src/index.ts:33`](../packages/interaction/user-approval/src/index.ts)
-`"web_search"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `policy` | 必需 | [`ApprovalPolicy`](#persistence-type-sha256-05d2ae1e0c7f8770f83f9a09047afb39a335d8ac986df3193659aa1e581472cf) |
+| `source` | 可选 | `"delegation"` |
-
+
-### `"web_search_20250305"`
+### `{ preset }`
-SHA-256: `0116b1f89c05221d56b0ba35c83d302bf4857bc7277d247e9bbaf74b27d2c66e`
+SHA-256: `8a9c990773f798eac10ca8878e6bcc531ee080bc589cac956730e462cc6a09ad`
-`"web_search_20250305"`
+来源:[`packages/interaction/permission-presets/src/index.ts:57`](../packages/interaction/permission-presets/src/index.ts)
-
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `preset` | 必需 | `string` |
-### `"web/deepseek-search-llm-request"`
+
-SHA-256: `6f611bed14b2106542480c4a230b4a83baf76dc0d8ac0cd13319a7cb8dae7675`
+### `{ reason, turn }`
-`"web/deepseek-search-llm-request"`
+SHA-256: `e481c46af3813e0010558e93f578b2986acd658404cec2d1679e3ac2a6c48654`
-
+来源:[`packages/core/session/src/types.ts:292`](../packages/core/session/src/types.ts)
-### `"webhook"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `reason` | 必需 | [`TurnEndReason`](#persistence-type-sha256-f1687f982fa3d41ef29e159feed154ecd13af4dd209acaee16038f223f2e9402) |
+| `turn` | 必需 | `number` |
-SHA-256: `db6c5246911d47a7969f6b4cb47c7d0dbbde75c402710b22ace3672fa97bebe0`
+
-`"webhook"`
+### `{ role: "user" }`
-
+SHA-256: `9a2a9029f8d7ede05336980d8342737557f487b913bfd28853d0ab5214600ab5`
-### `"workspace-write"`
+来源:[`packages/web/web-search-deepseek/src/provider.ts:64`](../packages/web/web-search-deepseek/src/provider.ts)
-SHA-256: `a3edd1efd1fef21b72c55e213c8a8b24196b091abde2b89db52be0b2aaae3cfa`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `content` | 必需 | [`tuple (1 positions)`](#persistence-type-sha256-8f6d609794bf5afc01d7ccf3e03811d32f4b8047f58a2c9a98db0154c2ad7cb9) |
+| `role` | 必需 | `"user"` |
-`"workspace-write"`
+
-
+### `{ sessionFormatVersion?, sessionId, throughSeq }`
-### `"workspace/changes"`
+SHA-256: `8bb8c3751a6ce64b61aba1ec7ae798c00a5803c4d868a0430873216c6569ed52`
-SHA-256: `8e8155594e07812356b67d732196dda894b0f9c91a5969d51612cf490b0a016d`
+来源:[`packages/session/session-log-deepseek/src/types.ts:81`](../packages/session/session-log-deepseek/src/types.ts)
-`"workspace/changes"`
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `sessionFormatVersion` | 可选 | `number` |
+| `sessionId` | 必需 | `string` |
+| `throughSeq` | 必需 | `number` |
+
+
+
+### `{ shadowedRange, shadowedSeqs, shadowedTokenCount }`
+
+SHA-256: `5dd766ccd1702a1142ad8b4bd44f2242f8e8a6752669ad3de0a5d224329b1438`
+
+来源:[`packages/compaction/compaction/src/types.ts:82`](../packages/compaction/compaction/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `shadowedRange` | 必需 | [`{ end, start }`](#persistence-type-sha256-9e41386b3a0c9572b0d63078492ebb3997da7d3a830d44e0259418bd02f4bcb2) |
+| `shadowedSeqs` | 必需 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `shadowedTokenCount` | 必需 | `number` |
+
+
+
+### `{ step, stream, turn }`
+
+SHA-256: `0c6412d3ba5e41adfaa6929c7d4093f2d52d8598c03f35844fc0d55e3070a3b1`
+
+来源:[`packages/core/session/src/types.ts:342`](../packages/core/session/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `step` | 必需 | `number` |
+| `stream` | 必需 | [`AssistantStreamRecord[]`](#persistence-type-sha256-26f3bb7529cfce1e3a0f1ededa365d8b426758ca0feeb0beabeee805f8bb8346) |
+| `turn` | 必需 | `number` |
+
+
+
+### `{ step, turn }`
+
+SHA-256: `ef11a3b7fa2033ae4279545ff8a8a2ee4e301b9b73e5b91654c48e6d08283545`
+
+来源:[`packages/core/session/src/types.ts:294`](../packages/core/session/src/types.ts) · [`packages/core/session/src/types.ts:296`](../packages/core/session/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `step` | 必需 | `number` |
+| `turn` | 必需 | `number` |
+
+
+
+### `{ targets }`
+
+SHA-256: `477614bca595a9e7adb5a1870be446b9a8684f3ba8950259d6289f2d3b74f028`
+
+来源:[`packages/compaction/compaction-image-offload/src/projection.ts:25`](../packages/compaction/compaction-image-offload/src/projection.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `targets` | 必需 | [`ImageOffloadTarget[]`](#persistence-type-sha256-9e2c06d8653585b33d72d5c1a80da79c8a24a88c284409bca15cc0f0ead5ebfb) |
+
+
+
+### `{ task, teamId, version }`
+
+SHA-256: `a40d12070f6f4a124f32fb3cc86e7857554702e32f0eda3080a25c4b9ac9b18c`
+
+来源:[`packages/experimental/agent-team/src/types.ts:223`](../packages/experimental/agent-team/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `task` | 必需 | [`TeamTaskSnapshot`](#persistence-type-sha256-51edec100659da3a9bd9c3f6ba1180f5e64ec9a1585e5057080df45c180bd357) |
+| `teamId` | 必需 | `string` |
+| `version` | 必需 | `2` |
+
+
+
+### `{ todos }`
+
+SHA-256: `79ddc907312f97cf9553d4841e8b3fc937097bd8d97900a790efad3c05255e99`
+
+来源:[`packages/todo/tool-todo/src/types.ts:31`](../packages/todo/tool-todo/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `todos` | 必需 | [`TodoItem[]`](#persistence-type-sha256-4b7ddaf3710b88ff9b8df66304f5f97bf03688fd19730eedc2e9535203c820ea) |
+
+
+
+### `{ turn }`
+
+SHA-256: `f90eb4ab2d3897bc20c521a038e3119d581f791ec974b1a0004f63a8ab9e232d`
+
+来源:[`packages/core/session/src/types.ts:283`](../packages/core/session/src/types.ts) · [`packages/deliverables/workspace-changes/src/types.ts:106`](../packages/deliverables/workspace-changes/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `turn` | 必需 | `number` |
+
+
+
+
+
+### `{ type: "agent-preset/selected" }`
+
+SHA-256: `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ agentPreset }`](#persistence-type-sha256-6e52dd55a1d48954ed5464ec46fe34d9eb65f709baabc9561e7a279910b0c406) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"agent-preset/selected"` |
+
+
+
+
+
+### `{ type: "agent/inbox/spliced" }`
+
+SHA-256: `646c2f1d243d3a78c5bc9305786fb340f5209c48a97e65f2a186cc5195491f3f`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ inserted, outcome?, removedCount?, start, … }`](#persistence-type-sha256-a6a195c1b4a906d953d24ab5864c9f1881d545460e080a51144adfc9cb058cfe) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"agent/inbox/spliced"` |
+
+
+
+
+
+### `{ type: "approval/asked" }`
+
+SHA-256: `3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ callId?, id, reason?, toolName }`](#persistence-type-sha256-45f2a07ea94573123b6ae14db787a40062dec3834f36d8be92c523d40ba28448) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"approval/asked"` |
+
+
+
+
+
+### `{ type: "approval/decided" }`
+
+SHA-256: `bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ id, outcome }`](#persistence-type-sha256-93cbbc5a7fd0b1aa1ff1b9a6bb5ec52b073f48e5a5200365c45c0cd54059e1b9) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"approval/decided"` |
+
+
+
+
+
+### `{ type: "approval/policy" }`
+
+SHA-256: `26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ policy, source? }`](#persistence-type-sha256-11f70b595aa76897fc4e25a352bfa718c659f44b799e5aa14e84e5a38fe72912) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"approval/policy"` |
+
+
+
+
+
+### `{ type: "assistant/attempt" }`
+
+SHA-256: `c80c89da83c46db7a454f034c10f969e03cfb574859c7316e5bff683f5a14b0e`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ step, stream, turn }`](#persistence-type-sha256-0c6412d3ba5e41adfaa6929c7d4093f2d52d8598c03f35844fc0d55e3070a3b1) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"assistant/attempt"` |
+
+
+
+
+
+### `{ type: "assistant/message" }`
+
+SHA-256: `1169b301aaabcd992657b93ec93750c43175dda81ada5cac086f14f2eaaeed6d`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ interrupted?, message, step, stream, … }`](#persistence-type-sha256-77b8491f946edfc8cc77ebae3ba49183759da31ba2dfa83d4c9e9e618c4b91d2) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `surfaceOp` | 必需 | [`SurfaceOp`](#persistence-type-sha256-335e242de1fcc17b6ca920fc420d71bec2d76e53e37955c00948b65ab77f05c5) |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"assistant/message"` |
+
+
+
+### `{ type: "block-end" }`
+
+SHA-256: `90c811b8c2668898515e69a24e82caffeb08517f9c7aa193867ff0380f3b535d`
+
+来源:[`packages/llm/llm/src/types.ts:431`](../packages/llm/llm/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `block` | 必需 | [`ContentBlock`](#persistence-type-sha256-c7b24be059d34d08929593049a1a81eaa3855166aacfe9d7603c0bc8bb728d56) |
+| `index` | 必需 | `number` |
+| `type` | 必需 | `"block-end"` |
+
+
+
+### `{ type: "block-start" }`
+
+SHA-256: `647cb2e3aeb58e27d1d4d60011f208bb66dce257e8654193c533b47c4c22c253`
+
+来源:[`packages/llm/llm/src/types.ts:427`](../packages/llm/llm/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `blockType` | 必需 | [`ContentBlockType`](#persistence-type-sha256-757013fff5879d73d5753d8d1120faab56110e88ac3932485ab7e034d9e9ce61) |
+| `index` | 必需 | `number` |
+| `type` | 必需 | `"block-start"` |
+
+
+
+### `{ type: "chunk" }`
+
+SHA-256: `c93b6f51b399607349b4bcc66b58e848a44250ffc1e2537207bd092dfff94192`
+
+来源:[`packages/llm/llm/src/assistant-stream.ts:44`](../packages/llm/llm/src/assistant-stream.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `chunk` | 必需 | [`StreamChunk`](#persistence-type-sha256-071d92b9dac661fcc826c678cf64d188f26fb93aab79c627b11a03acdd34dfca) |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"chunk"` |
+
+
+
+
+
+### `{ type: "command/done" }`
+
+SHA-256: `15196447222782e773eb943c92b18316ce96b9af0f0cfddb6e57ba8274ecc5ff`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ commandId, kind, sourceEventSeq?, text? }`](#persistence-type-sha256-5b6fb1f226ff56402db08a6aae82af76100b14056271875f69ec526a1ae05d51) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"command/done"` |
+
+
+
+
+
+### `{ type: "command/run" }`
+
+SHA-256: `37184378c6439257d105c4e2022d80fc9c3a3f7c7f6ac661b00bc9f18d871006`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ args?, commandId, name, source }`](#persistence-type-sha256-a853902cfab417b8f08aa51ad6855fea46f34ed4588a74e47403035111d0fb86) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"command/run"` |
+
+
+
+
+
+### `{ type: "compaction/end" }`
+
+SHA-256: `b0127044ab31a702bddfd785d345f5abd7a70876746e895ce443afa3e60ddf2d`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ compactionId, error?, sourceCommandId?, turn }`](#persistence-type-sha256-ca59530d1a4f3e191b4032bc4a20eded0d827db8b5a7efb27b3af9e9b456c6f2) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"compaction/end"` |
+
+
+
+
+
+### `{ type: "compaction/prune" }`
+
+SHA-256: `7f7fd5a6b0064f597534b29ff62ef26e786dffccf5e14f654a7d4fcea2c35f04`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ shadowedRange, shadowedSeqs, shadowedTokenCount }`](#persistence-type-sha256-5dd766ccd1702a1142ad8b4bd44f2242f8e8a6752669ad3de0a5d224329b1438) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"compaction/prune"` |
+
+
+
+
+
+### `{ type: "compaction/start" }`
+
+SHA-256: `db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ compactionId, sourceCommandId?, turn }`](#persistence-type-sha256-3e4e7683b0192c9f0e6a75c59076108f017892cdb302a98032c2632fd79c356f) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"compaction/start"` |
+
+
+
+
+
+### `{ type: "compaction/summary" }`
+
+SHA-256: `f6f3f30109e9008fccf7da2a3268a63da8646b59dd7cf7b75bcd9cf08ac08a59`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`union (2 variants)`](#persistence-type-sha256-feb329074f0206ecc06d8a1aa0a0b3e2f47fd27524ba020fbc849ba63e938896) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"compaction/summary"` |
+
+
+
+
+
+### `{ type: "deliverables/presented" }`
+
+SHA-256: `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ callId, files, turn }`](#persistence-type-sha256-1528539c63db8b23506f0209a99ce77d8ad138adfbfcee3d4769b7382d93756c) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"deliverables/presented"` |
+
+
+
+
+
+### `{ type: "feedback/message-delete" }`
+
+SHA-256: `3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`MessageFeedbackDelete`](#persistence-type-sha256-7c6129b6961cf4b2a030f36c78d2b0a5be38617651a9b81322e054ee512bee06) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"feedback/message-delete"` |
+
+
+
+
+
+### `{ type: "feedback/message-put" }`
+
+SHA-256: `b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`MessageFeedbackPut`](#persistence-type-sha256-aa7bc2817014ca6c45719b1c193c5c131be718a0921f34345098ff250f444626) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"feedback/message-put"` |
+
+
+
+
+
+### `{ type: "feedback/record" }`
+
+SHA-256: `b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`FeedbackRecord`](#persistence-type-sha256-7d54a5a5e629e2e7783bfac72683bcc5e969e9f43426b9289826aaf294ff6344) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"feedback/record"` |
+
+
+
+### `{ type: "finish" }`
+
+SHA-256: `a2b49331716ba0a7078b026d145306a70eae64b7313c3e6204bd931e75ec3bb1`
+
+来源:[`packages/llm/llm/src/types.ts:433`](../packages/llm/llm/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `reason` | 必需 | [`FinishReason`](#persistence-type-sha256-5808e36c95355f0e745201b5db1b6bcec4ebf5adb75d3e82d7d59cc89635ab80) |
+| `replayState` | 可选 | [`ReplayEnvelope`](#persistence-type-sha256-0acd94fe8794574c9ae72c7855ee16d29c546096d4af760d16d1225385764555) |
+| `type` | 必需 | `"finish"` |
+
+
+
+
+
+### `{ type: "goal/change" }`
+
+SHA-256: `763c8a20af487263a0080548274f7437ef4a86e0ba8769127d1ced10a72c664d`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`GoalChangeMeta`](#persistence-type-sha256-7d226b9fd95b4ba213d4237c22e930a91c3c769c95ca7f92977b9d625ba13438) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"goal/change"` |
+
+
+
+
+
+### `{ type: "hook/invoked" }`
+
+SHA-256: `8a6e1ec9e8db346b0e02f027db73c07a94f067a26d40c1aef1abd09c47ce7ba0`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ dialect, handlerId, matcher?, point, … }`](#persistence-type-sha256-119abe2b9c0b2f46ecb31d82b9acba4d4b30e049f655e2475e8b4ae12d5a9e25) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"hook/invoked"` |
+
+
+
+
+
+### `{ type: "hook/result" }`
+
+SHA-256: `e75916628f3f10c2d50658bd143052a46285fbf1a9a700ba54947614603d26b4`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ decision, durationMs, exitCode?, handlerId, … }`](#persistence-type-sha256-8ad45ad053b4d89f8865c17cc9ff3b8748e86045f3f0fb816269a34af2619141) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"hook/result"` |
+
+
+
+
+
+### `{ type: "image/offload" }`
+
+SHA-256: `b222069eea2d768065161c1147b1f2c78c1b54328c84b3586ae5c8f91b8ed35e`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ targets }`](#persistence-type-sha256-477614bca595a9e7adb5a1870be446b9a8684f3ba8950259d6289f2d3b74f028) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"image/offload"` |
+
+
+
+
+
+### `{ type: "llm/retry" }`
+
+SHA-256: `525254db03b1d1e6b74cf55aced52817568331ac1f96c0818728910b6692e336`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`LlmRetryEventData`](#persistence-type-sha256-c170da8ab7c37635b10867b2571811d9e317ac3ec394e8ff8efe53f902fc41c1) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"llm/retry"` |
+
+
+
+
+
+### `{ type: "llm/retry-started" }`
+
+SHA-256: `48e5c9861f16ac07e78cb7b5ae9dabdf7bb85c58baed5a51b4ad275050ea58e3`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`LlmRetryStartedEventData`](#persistence-type-sha256-6f72ece8f317cd080c4f20a93f1bf709965f5b81ac4669528f5a023191cfcf20) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"llm/retry-started"` |
+
+
+
+
+
+### `{ type: "model/selection" }`
+
+SHA-256: `35203ba7ad5ef6f97d556b85df20ae98f04f09c65748cecdf8eefdb8b6405ffc`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`ModelSelection`](#persistence-type-sha256-f09e5e7acf5ff5ccd193ff2eeec015fa2ff7c29d98bc465f8c3302058d47e29b) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"model/selection"` |
+
+
+
+
+
+### `{ type: "permission/preset" }`
+
+SHA-256: `5c45bf4c544a7211dcd8ba6ba7e5f1bc39b49e7a9df9d5cbdc8e87c22771b37b`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ preset }`](#persistence-type-sha256-8a9c990773f798eac10ca8878e6bcc531ee080bc589cac956730e462cc6a09ad) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"permission/preset"` |
+
+
+
+
+
+### `{ type: "plan/mode" }`
+
+SHA-256: `a7cf43ce7c2a4c038feed1885cd7a00d5c6ee2d90a7e0d56b46f78a3e1ca327f`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ active }`](#persistence-type-sha256-20a57544bbf204dacd1ae6beb2ab29444365c3c869f2afdf489dcdcbc3d9c8c5) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"plan/mode"` |
+
+
+
+### `{ type: "reasoning-chunks" }`
+
+SHA-256: `71bb3254ec8f1e491ce63b762a7b5f18709de23aa4e8abcc8b886f4b6ce051dd`
+
+来源:[`packages/llm/llm/src/assistant-stream.ts:28`](../packages/llm/llm/src/assistant-stream.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `dt` | 必需 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `index` | 必需 | `number` |
+| `texts` | 必需 | [`string[]`](#persistence-type-sha256-93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2) |
+| `time0` | 必需 | `number` |
+| `type` | 必需 | `"reasoning-chunks"` |
+
+
+
+### `{ type: "reasoning-delta" }`
+
+SHA-256: `2abb711460e6238d851c30f3e4bdd87a2aa1887ee70575b3d3b7b25610673095`
+
+来源:[`packages/llm/llm/src/types.ts:429`](../packages/llm/llm/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `index` | 必需 | `number` |
+| `text` | 必需 | `string` |
+| `type` | 必需 | `"reasoning-delta"` |
+
+
+
+
+
+### `{ type: "request/context" }`
+
+SHA-256: `37cbc9cf06d494cfe5c67f078af1605eacb8e4c2c853e9e26455b73de0ee7ccf`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`RequestContext`](#persistence-type-sha256-b158f3ff6923714807c0d73882f0b05dc87f8fa85c9e90814852d48bbc866081) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"request/context"` |
+
+
+
+
+
+### `{ type: "request/header" }`
+
+SHA-256: `8ea13bcd983eab596dbfd41c5c2b62a0b318b71cd2a987a6fd752c6ced7e4489`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ header, reason, startsSeries? }`](#persistence-type-sha256-2f0aefb72ab453c4bf21a6687f436775d359dc6f8f10410fd4c0615b20bd9d76) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"request/header"` |
+
+
+
+
+
+### `{ type: "sandbox/mode" }`
+
+SHA-256: `516da4cdd6d2f1e5ce488e648578ca51f40e458f707b803e5b24de870e799415`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ mode, source? }`](#persistence-type-sha256-9890113e97dd3541787bfe6704f2b223d3a890b5325ca0acae2b0398909b413e) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"sandbox/mode"` |
+
+
+
+
+
+### `{ type: "schedule/change" }`
+
+SHA-256: `2a7f86849ae54b3398ee49661a757c4fcb59a6192b7036ee2ff514617e13fb42`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`ScheduleChange`](#persistence-type-sha256-e1d0e52dcd1855ffb803efc18f8f7b776c48d1c25757e8a75c0281fa298c02e1) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"schedule/change"` |
+
+
+
+
+
+### `{ type: "session-log-deepseek/delivery-accepted" }`
+
+SHA-256: `d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ sessionFormatVersion?, sessionId, throughSeq }`](#persistence-type-sha256-8bb8c3751a6ce64b61aba1ec7ae798c00a5803c4d868a0430873216c6569ed52) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"session-log-deepseek/delivery-accepted"` |
+
+
+
+
+
+### `{ type: "session/end-seed" }`
+
+SHA-256: `5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ inherited? }`](#persistence-type-sha256-17d1afb770d9941936130996da00dc86782cfef731d8d6526162c301256a4ac3) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"session/end-seed"` |
+
+
+
+
+
+### `{ type: "session/title" }`
+
+SHA-256: `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`SessionTitleEventData`](#persistence-type-sha256-b56f6a885da3dc394c69a3e3cc5c0cfc4da15601b63fda4989eee8f40efc5be4) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"session/title"` |
+
+
+
+
+
+### `{ type: "session/title-llm-request" }`
+
+SHA-256: `e0b5bf44c27bbfc6ab144239e3e4169c4d21146645e0e3121bbb359c3bc8591d`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`SessionTitleLlmRequestEventData`](#persistence-type-sha256-9fe0e77a7816b7fdb4b953ec0e2f0cd7bbd22c5de5c3567e612d1b20eb0992e6) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"session/title-llm-request"` |
+
+
+
+
+
+### `{ type: "step/end" }`
+
+SHA-256: `e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ step, turn }`](#persistence-type-sha256-ef11a3b7fa2033ae4279545ff8a8a2ee4e301b9b73e5b91654c48e6d08283545) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"step/end"` |
+
+
+
+
+
+### `{ type: "step/start" }`
+
+SHA-256: `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ step, turn }`](#persistence-type-sha256-ef11a3b7fa2033ae4279545ff8a8a2ee4e301b9b73e5b91654c48e6d08283545) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"step/start"` |
+
+
+
+
+
+### `{ type: "subagent/catalog" }`
+
+SHA-256: `ae1f7110feeec697b8cab42b68f7709aa7b3279764099dfb53c25890d2e5c871`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`SubagentCatalogEvent`](#persistence-type-sha256-3ac1196f59d5e9e0e9345122c8c403b102478b526404a2e591a38f613483321e) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"subagent/catalog"` |
+
+
+
+
+
+### `{ type: "subagent/descriptor" }`
+
+SHA-256: `b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`SubagentDescriptorData`](#persistence-type-sha256-86d1d0e9cfebb240421187e3dc37fb71cc38a1501885cf32f8f9adef7b0a2bde) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"subagent/descriptor"` |
+
+
+
+
+
+### `{ type: "subagent/model-selection-policy" }`
+
+SHA-256: `a6567ccb2e530606b775371eb4fa31468d72084339968e8b0440a516a23b39dc`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ allowedModels }`](#persistence-type-sha256-0d47a8f3d847243c4488e755ad4cab7a04ac5d4621b9c81865524cf3f4d8536f) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"subagent/model-selection-policy"` |
+
+
+
+
+
+### `{ type: "system/message" }`
+
+SHA-256: `69becfb6b2d3fd5da91518089454cae8ef33f1835637ec44dde35dd077fd4bae`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ message, step, turn }`](#persistence-type-sha256-2074f40221b76c75fd314246db558965dc3477dfb440bcc952b1eedc9778e366) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `sourceEventSeqs` | 可选 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `surfaceOp` | 必需 | [`SurfaceOp`](#persistence-type-sha256-335e242de1fcc17b6ca920fc420d71bec2d76e53e37955c00948b65ab77f05c5) |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"system/message"` |
+
+
+
+
+
+### `{ type: "team/member" }`
+
+SHA-256: `4fb59762612c3e3ac3a3bd4f84c9c148d3c3893bd422ba2b201cc039fabd49bc`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ member, teamId, version }`](#persistence-type-sha256-b1ebd5cda47d90d980bb05bffc3f970c51537b9aff15b3bc3d639811727741b1) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"team/member"` |
+
+
+
+
+
+### `{ type: "team/message/delivered" }`
+
+SHA-256: `48f9c19417a1abbedfa59f4667bba36b93ac2db407adf5e84cb3ba0de30942cb`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ messageId, targetId, teamId, version }`](#persistence-type-sha256-0bcfaf5566d271028429ac7b562cb59053c9d78b8ae14708c35fac835108d1b1) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"team/message/delivered"` |
+
+
+
+
+
+### `{ type: "team/message/queued" }`
+
+SHA-256: `443371ec07a03a82a0e93d93abca3e70b03bca55ba5b01d507030fcb66e8fbb4`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ message, teamId, version }`](#persistence-type-sha256-0c3f4d2248d9bc9700e2d7253fa71aa9935f5c39af6f11de5727f08cccaf8383) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"team/message/queued"` |
+
+
+
+
+
+### `{ type: "team/task" }`
+
+SHA-256: `d595ec73b32b016a6055333c67a5d646032b22e672da1d4a09c5b1ae398a093a`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ task, teamId, version }`](#persistence-type-sha256-a40d12070f6f4a124f32fb3cc86e7857554702e32f0eda3080a25c4b9ac9b18c) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"team/task"` |
+
+
+
+### `{ type: "text-chunks" }`
+
+SHA-256: `e72269f931559e901e5e8fe1cfcbd0669fb795f43cc038ff39fba62f60403c33`
+
+来源:[`packages/llm/llm/src/assistant-stream.ts:21`](../packages/llm/llm/src/assistant-stream.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `dt` | 必需 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `index` | 必需 | `number` |
+| `texts` | 必需 | [`string[]`](#persistence-type-sha256-93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2) |
+| `time0` | 必需 | `number` |
+| `type` | 必需 | `"text-chunks"` |
+
+
+
+### `{ type: "text-delta" }`
+
+SHA-256: `95080295115fbd83544520ba247b68a03790131f6a2eac323d388758cb542f65`
+
+来源:[`packages/llm/llm/src/types.ts:428`](../packages/llm/llm/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `index` | 必需 | `number` |
+| `text` | 必需 | `string` |
+| `type` | 必需 | `"text-delta"` |
+
+
+
+
+
+### `{ type: "todo/write" }`
+
+SHA-256: `b978cff734e62143eb56c9125423ec275405eda969802d42aaf73ecb987d3b26`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ todos }`](#persistence-type-sha256-79ddc907312f97cf9553d4841e8b3fc937097bd8d97900a790efad3c05255e99) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"todo/write"` |
+
+
+
+### `{ type: "tool-call-chunks" }`
+
+SHA-256: `3860b4757d512a2869be833acb0faf834335b1b056bf3f83df5474dce95f8fa6`
+
+来源:[`packages/llm/llm/src/assistant-stream.ts:35`](../packages/llm/llm/src/assistant-stream.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `args` | 必需 | [`string[]`](#persistence-type-sha256-93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2) |
+| `dt` | 必需 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `id` | 必需 | `string` |
+| `index` | 必需 | `number` |
+| `name` | 可选 | `string` |
+| `time0` | 必需 | `number` |
+| `type` | 必需 | `"tool-call-chunks"` |
+
+
+
+### `{ type: "tool-call-delta" }`
+
+SHA-256: `88a610b831be6d92612a464be5c7d0b88ec24d97bd299837bf74bf7672183c9a`
+
+来源:[`packages/llm/llm/src/types.ts:430`](../packages/llm/llm/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `argumentsDelta` | 必需 | `string` |
+| `id` | 必需 | `string` |
+| `index` | 必需 | `number` |
+| `name` | 可选 | `string` |
+| `type` | 必需 | `"tool-call-delta"` |
+
+
+
+
+
+### `{ type: "tool-workflow/agent-end" }`
+
+SHA-256: `babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`ToolWorkflowAgentEndData`](#persistence-type-sha256-c0ea97bc89dfc46fa94eab956f5c3ee6af2f964aa7db6327cb18b451f207bef7) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"tool-workflow/agent-end"` |
+
+
+
+
+
+### `{ type: "tool-workflow/agent-start" }`
+
+SHA-256: `5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`ToolWorkflowAgentStartData`](#persistence-type-sha256-9a410ddf56792b2b7cd4a224a2e54dc4dee30a8e8e6b1c2b9a1d19992b217adc) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"tool-workflow/agent-start"` |
+
+
+
+
+
+### `{ type: "tool-workflow/run-end" }`
+
+SHA-256: `42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`ToolWorkflowRunEndData`](#persistence-type-sha256-7f9365bae9fcb73e1e34061a1acfe0422c1a5fd351848cace9bebbe806f28462) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"tool-workflow/run-end"` |
+
+
+
+
+
+### `{ type: "tool-workflow/run-start" }`
+
+SHA-256: `c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`ToolWorkflowRunStartData`](#persistence-type-sha256-a6da9ad5d42ae83a6833a8288b076688e8e0801633ea36cbdd8a30a6d9f3160c) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"tool-workflow/run-start"` |
+
+
+
+
+
+### `{ type: "tool/call" }`
+
+SHA-256: `3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ arguments, callId, name, step, … }`](#persistence-type-sha256-e4c18e294232c3ba6c9f1999f168263cc55956147cfe4121720899be8e52edd1) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"tool/call"` |
+
+
+
+
+
+### `{ type: "tool/ptc-dispatch" }`
+
+SHA-256: `b33142af8176323ffbb20762541be81c1d51b60a60887803836e0b146e5bef0c`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`PtcDispatchEventData`](#persistence-type-sha256-8d2e5a3c4230e6ea6c0b5151f02241d0db02cd2551f2df1b6b9700cddcc0dca3) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"tool/ptc-dispatch"` |
+
+
+
+
+
+### `{ type: "tool/ptc-dispatch-start" }`
+
+SHA-256: `ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`PtcDispatchStartEventData`](#persistence-type-sha256-2fe5026daf14bd4ff2b7bfb7cf9791c302d9cbba06802178b6dfec00b892698f) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"tool/ptc-dispatch-start"` |
+
+
+
+
+
+### `{ type: "tool/result" }`
+
+SHA-256: `29af48b840d0cd9e48b6f50bf3b354f8f6340607c5b99220a48e74f60beac9e2`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ error?, message, meta?, step, … }`](#persistence-type-sha256-356aad27134a0e31af67c994ff8b9e4b91acfb6c4917b3bc1f7a62bbf82794d5) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `sourceEventSeqs` | 可选 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `surfaceOp` | 必需 | [`SurfaceOp`](#persistence-type-sha256-335e242de1fcc17b6ca920fc420d71bec2d76e53e37955c00948b65ab77f05c5) |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"tool/result"` |
+
+
+
+
+
+### `{ type: "turn/end" }`
+
+SHA-256: `0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ reason, turn }`](#persistence-type-sha256-e481c46af3813e0010558e93f578b2986acd658404cec2d1679e3ac2a6c48654) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"turn/end"` |
+
+
+
+
+
+### `{ type: "turn/start" }`
+
+SHA-256: `aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ turn }`](#persistence-type-sha256-f90eb4ab2d3897bc20c521a038e3119d581f791ec974b1a0004f63a8ab9e232d) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"turn/start"` |
+
+
+
+### `{ type: "usage" }`
+
+SHA-256: `f1a96afe7503ac1817de769cd0ba13d9b80111c7034c50106b3344ecc14cc515`
+
+来源:[`packages/llm/llm/src/types.ts:432`](../packages/llm/llm/src/types.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `type` | 必需 | `"usage"` |
+| `usage` | 必需 | [`TokenUsage`](#persistence-type-sha256-fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394) |
+
+
+
+
+
+### `{ type: "user/message" }`
+
+SHA-256: `314765bdff29c7862fb6ce820f1773563ba3094a680d163ea21180a2591b8578`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`UserMessage`](#persistence-type-sha256-4de5e7644130ed715ef6b5a4d86a87b30dca4096d1a6683c66acf6f7809379c7) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `sourceEventSeqs` | 可选 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
+| `surfaceOp` | 必需 | [`SurfaceOp`](#persistence-type-sha256-335e242de1fcc17b6ca920fc420d71bec2d76e53e37955c00948b65ab77f05c5) |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"user/message"` |
+
+
+
+
+
+### `{ type: "web/deepseek-search-llm-request" }`
+
+SHA-256: `cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`DeepSeekSearchLlmRequest`](#persistence-type-sha256-2517ba143a271508d3ca35126d5aca8f7f1facf5aaddce4adf011832042fa2b9) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"web/deepseek-search-llm-request"` |
+
+
+
+### `{ type: "web_search_20250305" }`
+
+SHA-256: `2d11ca7b0d4493e244b74eba093227866b33249841e59a1e9bf56afed38604c3`
+
+来源:[`packages/web/web-search-deepseek/src/provider.ts:71`](../packages/web/web-search-deepseek/src/provider.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `max_uses` | 必需 | `number` |
+| `name` | 必需 | `"web_search"` |
+| `type` | 必需 | `"web_search_20250305"` |
+
+
+
+
+
+### `{ type: "workspace/changes" }`
+
+SHA-256: `e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| `data` | 必需 | [`{ turn }`](#persistence-type-sha256-f90eb4ab2d3897bc20c521a038e3119d581f791ec974b1a0004f63a8ab9e232d) |
+| `ignorable` | 可选 | `true` |
+| `seq` | 必需 | `number` |
+| `time` | 必需 | `number` |
+| `type` | 必需 | `"workspace/changes"` |
+
+
+
+### `{}`
+
+SHA-256: `0aa62ab51b36c0e64b134bd03ba8725d758744180a1a447da49beaad194f219f`
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| [`string`] | 索引签名 | `unknown`(不透明) |
+
+
+
+### `{}`
+
+SHA-256: `529e0ccd0e34079ab4ff21ed87f810cee0388246263bf22e8aba5986b56fae05`
+
+来源:[`packages/util/values/src/index.ts:4`](../packages/util/values/src/index.ts)
+
+| 属性 | 存在性 | 类型 |
+|---|---|---|
+| [`string`] | 索引签名 | [`JsonValue`](#persistence-type-sha256-c592ce75aab73fcab19c1d7845684c72cf402b78d2e1f2833a58ecf9f3598ed6) |
diff --git a/docs/persistence-changes/README.i18n.yaml b/docs/persistence-changes/README.i18n.yaml
index 27f2099f31..49fba696f5 100644
--- a/docs/persistence-changes/README.i18n.yaml
+++ b/docs/persistence-changes/README.i18n.yaml
@@ -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/persistence-changes/README.md
-README.md: 7eb46efe69e139c294ad76e1b584e2d7384151b5
-README.zh.md: d91cfff9e5010bfff92b905ce0f075e7e419eb52
+README.md: b4d8fdf4cc264e2d9f63188e461ecaa5599547dc
+README.zh.md: 0ab14a9ccb315f57359eaf897d8366d39c96e458
diff --git a/docs/persistence-changes/README.md b/docs/persistence-changes/README.md
index 7eb46efe69..b4d8fdf4cc 100644
--- a/docs/persistence-changes/README.md
+++ b/docs/persistence-changes/README.md
@@ -49,9 +49,12 @@ Every detected structural change requires an acknowledgement. Record creation an
| Add an optional event-body property, including its complete subtree | `same-version` |
| Make a required event-body property optional | `same-version` |
| Add an ordinary event type | `same-version` |
+| Add an explicitly qualified attribution kind to a user/developer source slot whose before and after schemas carry the same supported policy | `same-version` |
| Make an optional property required, add a required property, change an existing type, or remove/rename a property or event | `version-bump` |
| Change the Session header or event envelope | `version-bump` |
+The extractor accepts an explicit `@persistenceSource` binding for a core-owned source property on a literal user or developer role; it does not infer a binding from an unannotated type. A producer qualifies its `MessageSourceMap` entry with `@persistenceAttribution`. Qualification promises that an unknown kind and its JSON metadata survive reading without the producer, and that the kind imposes no validation, replay, or authority requirement. A producer may inspect its own kind to resume duplicate suppression; other readers must preserve and derive the recorded messages without that projection. The recorded schema retains the binding, policy version, literal `kind` discriminator, preservation promise, and qualified kind set. Inventory format 2 stores those promises; extraction without a bound policy retains format 1. Session format versions are independent. Both compared snapshots must carry compatible policy state. Existing kind groups still receive ordinary structural comparison; removals, unmarked additions, policy changes, and unrelated breaking changes remain strict. Multiple context-form alternatives with the same wire kind form one group.
+
A same-version explanation states why old records can omit the addition and why older readers can ignore it without changing replay. For required-to-optional changes, it explains how readers handle an absent value. The checker validates the type classification; reviewers assess the explanation. A version-bump record includes the increasing header version in the same transition and follows the [Session-format procedure](../cookbook/adding-a-session-format-version.md).
@@ -61,7 +64,7 @@ One baseline records the complete initial inventory. Later records use their pre
Accepted records describe historical transitions; preserve their machine declarations and schema snapshots when adding a successor. An unaccepted terminal record can be refreshed explicitly; the command rejects baselines and records with dependants. The tree cannot establish review acceptance. Verification proves consistency within the tree, not that history was never rewritten. No Git ref, remote service, or released checkout supplies the baseline.
-Digests describe declared persistence types, not runtime validation or behavior. Comments, source locations, alias names, and harmless declaration reordering do not affect them. Object fields, union alternatives, intersection operands, and index signatures can be reordered when their resolved types stay the same; tuple positions and numeric enum values remain significant. Catalog text and source locations may still change, so regenerate stale artifacts without adding an acknowledgement for an unchanged digest. Opaque types such as `unknown` expose no hidden structure to compare. Behavior-only changes and structures hidden inside opaque values are outside this mechanism's scope. The [decision](../../.agents/notes/implemented/process/2026-09-11-persistence-type-history.md) records these trade-offs.
+Digests describe declared persistence types, not runtime validation or behavior. Ordinary comments, source locations, alias names, and harmless declaration reordering do not affect them. Compatibility annotations are recorded policy data and do affect digests. Unannotated version-1 snapshots retain their original normalization, fingerprints, and strict classification; policy-bearing graphs use a separate fingerprint domain. Object fields, union alternatives, intersection operands, and index signatures can be reordered when their resolved types stay the same; tuple positions and numeric enum values remain significant. Catalog text and source locations may still change, so regenerate stale artifacts without adding an acknowledgement for an unchanged digest. Opaque types such as `unknown` expose no hidden structure to compare. Behavior-only changes and structures hidden inside opaque values are outside this mechanism's scope. The [decision](../../.agents/notes/implemented/process/2026-09-11-persistence-type-history.md) records these trade-offs.
## Dev Note
diff --git a/docs/persistence-changes/README.zh.md b/docs/persistence-changes/README.zh.md
index d91cfff9e5..0ab14a9ccb 100644
--- a/docs/persistence-changes/README.zh.md
+++ b/docs/persistence-changes/README.zh.md
@@ -49,9 +49,12 @@ description: "审阅和维护已记录的会话持久化类型变更、对应 sc
| 添加可选事件体属性,包括其完整子树 | `same-version` |
| 将必选事件体属性改为可选 | `same-version` |
| 添加普通事件类型 | `same-version` |
+| 在前后 schema 均带有相同受支持策略的 user/developer 消息源字段中,添加显式声明为归属信息的 kind | `same-version` |
| 将可选属性改为必选、添加必选属性、更改已有类型,或删除/重命名属性或事件 | `version-bump` |
| 更改会话头或事件封装 | `version-bump` |
+提取器接受核心拥有的 source 属性上针对 user 或 developer 字面量角色的显式 `@persistenceSource` 绑定,不会从未标记类型中推断绑定。生产者用 `@persistenceAttribution` 标记其 `MessageSourceMap` 成员。该标记承诺:读取器无需生产者即可保留未知 kind 及其 JSON 元数据,且该 kind 不引入校验、回放或权限要求。生产者可以检查自身 kind 来恢复去重状态;其他读取器必须无需该投影也能保留并派生已记录的消息。记录的 schema 保存绑定、策略版本、字面量 `kind` 判别字段、保留承诺及符合条件的 kind 集合。Inventory format 2 保存这些承诺;没有绑定策略的提取仍使用 format 1。Session 格式版本独立于此。比较双方的快照必须带有兼容的策略状态。已有 kind 分组仍进行常规结构比较;删除、未标记的添加、策略更改及无关破坏性变更继续采用严格规则。同一 wire kind 的多个上下文形式分支归为一组。
+
同版本说明须解释旧记录为何可以缺少新增内容,以及旧读取器为何可以忽略它而不改变回放。对于必选改可选的变更,说明须解释读取器如何处理缺失值。检查器验证类型分类;审阅者判断说明是否成立。升版本记录在同一转换中包含递增的头部版本,并遵循[会话格式流程](../cookbook/adding-a-session-format-version.zh.md)。
@@ -61,7 +64,7 @@ description: "审阅和维护已记录的会话持久化类型变更、对应 sc
已接受记录描述历史转换;添加后继时须保留其机器声明和 schema 快照。尚未接受的末端记录可以显式刷新;命令拒绝基线及被依赖的记录。目录本身无法证明审阅接受状态。验证证明目录内的一致性,不证明历史从未被改写。基线不依赖 Git 引用、远端服务或已发布版本的检出目录。
-摘要描述声明的持久化类型,不描述运行时验证或行为。注释、源码位置、别名名称和无语义变化的声明重排不影响摘要。对象字段、联合类型分支、交叉类型操作数和索引签名可以在解析类型不变时重排;元组位置和数字枚举值仍然影响摘要。目录文本和源码位置仍可能变化,因此应重新生成陈旧产物,无需为未变的摘要添加确认记录。`unknown` 等不透明类型不提供可比较的内部结构。纯行为变更以及不透明值中隐藏的结构不在本机制范围内。[决策记录](../../.agents/notes/implemented/process/2026-09-11-persistence-type-history.zh.md)说明这些取舍。
+摘要描述声明的持久化类型,不描述运行时验证或行为。普通注释、源码位置、别名名称和无语义变化的声明重排不影响摘要。兼容性标记是记录的策略数据,会影响摘要。不带标记的版本 1 快照保留原有规范化、指纹和严格分类;包含策略的图使用独立的指纹域。对象字段、联合类型分支、交叉类型操作数和索引签名可以在解析类型不变时重排;元组位置和数字枚举值仍然影响摘要。目录文本和源码位置仍可能变化,因此应重新生成陈旧产物,无需为未变的摘要添加确认记录。`unknown` 等不透明类型不提供可比较的内部结构。纯行为变更以及不透明值中隐藏的结构不在本机制范围内。[决策记录](../../.agents/notes/implemented/process/2026-09-11-persistence-type-history.zh.md)说明这些取舍。
## 开发备注
diff --git a/docs/persistence-schema.json b/docs/persistence-schema.json
index a93732a6c4..dd34ff78c7 100644
--- a/docs/persistence-schema.json
+++ b/docs/persistence-schema.json
@@ -13863,9 +13863,7 @@
}
]
},
- "names": [
- "event:turn/end.data.reason[2]"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:205"
]
@@ -14789,9 +14787,7 @@
}
]
},
- "names": [
- "event:turn/end.data.reason[1]"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:203"
]
@@ -14835,9 +14831,7 @@
}
]
},
- "names": [
- "event:request/header.data.header.tools[0].parameters"
- ],
+ "names": [],
"sources": []
},
{
@@ -14971,9 +14965,7 @@
}
]
},
- "names": [
- "event:team/message/delivered.data"
- ],
+ "names": [],
"sources": [
"packages/experimental/agent-team/src/types.ts:227"
]
@@ -15334,9 +15326,7 @@
}
]
},
- "names": [
- "event:team/message/queued.data"
- ],
+ "names": [],
"sources": [
"packages/experimental/agent-team/src/types.ts:225"
]
@@ -16217,9 +16207,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:342"
]
@@ -16266,9 +16254,7 @@
}
]
},
- "names": [
- "event:subagent/model-selection-policy.data"
- ],
+ "names": [],
"sources": [
"packages/subagent/tool-subagent/src/model-selection-state.ts:17"
]
@@ -16304,10 +16290,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].source[1]",
- "event:system/message.data.message.source[0]"
- ],
+ "names": [],
"sources": []
},
{
@@ -16364,9 +16347,7 @@
}
]
},
- "names": [
- "event:subagent/catalog.data[1]"
- ],
+ "names": [],
"sources": []
},
{
@@ -16410,9 +16391,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].content[0][2].attachment.originalDimensions"
- ],
+ "names": [],
"sources": [
"packages/attachment/attachment/src/types.ts:28"
]
@@ -16740,9 +16719,7 @@
}
]
},
- "names": [
- "event:turn/end"
- ],
+ "names": [],
"sources": []
},
{
@@ -17772,9 +17749,7 @@
}
]
},
- "names": [
- "event:assistant/message"
- ],
+ "names": [],
"sources": []
},
{
@@ -17838,9 +17813,7 @@
}
]
},
- "names": [
- "event:hook/invoked.data"
- ],
+ "names": [],
"sources": [
"packages/hooks/hook-protocol/src/types.ts:19"
]
@@ -17887,9 +17860,7 @@
}
]
},
- "names": [
- "event:approval/policy.data"
- ],
+ "names": [],
"sources": [
"packages/interaction/user-approval/src/index.ts:33"
]
@@ -18136,9 +18107,7 @@
}
]
},
- "names": [
- "event:deliverables/presented"
- ],
+ "names": [],
"sources": []
},
{
@@ -18264,9 +18233,7 @@
}
]
},
- "names": [
- "event:command/done"
- ],
+ "names": [],
"sources": []
},
{
@@ -18325,9 +18292,7 @@
}
]
},
- "names": [
- "event:deliverables/presented.data"
- ],
+ "names": [],
"sources": [
"packages/deliverables/tool-present/src/types.ts:15"
]
@@ -18410,9 +18375,7 @@
}
]
},
- "names": [
- "event:session/end-seed.data"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:414"
]
@@ -18731,9 +18694,7 @@
}
]
},
- "names": [
- "event:command/done.data.kind"
- ],
+ "names": [],
"sources": []
},
{
@@ -18758,9 +18719,7 @@
}
]
},
- "names": [
- "event:session/title.data.source[0]"
- ],
+ "names": [],
"sources": [
"packages/session/session-title/src/types.ts:29"
]
@@ -19276,9 +19235,7 @@
}
]
},
- "names": [
- "event:session/title"
- ],
+ "names": [],
"sources": []
},
{
@@ -19383,9 +19340,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][3].chunk[6].reason[3]"
- ],
+ "names": [],
"sources": [
"packages/llm/llm/src/types.ts:144"
]
@@ -19435,9 +19390,7 @@
}
]
},
- "names": [
- "event:deliverables/presented.data.files"
- ],
+ "names": [],
"sources": []
},
{
@@ -20332,9 +20285,7 @@
}
]
},
- "names": [
- "event:system/message.data"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:317"
]
@@ -20361,9 +20312,7 @@
}
]
},
- "names": [
- "event:plan/mode.data"
- ],
+ "names": [],
"sources": [
"packages/plan/plan-mode/src/index.ts:47"
]
@@ -21771,9 +21720,7 @@
}
]
},
- "names": [
- "event:system/message.data.message.source"
- ],
+ "names": [],
"sources": []
},
{
@@ -22043,9 +21990,7 @@
}
]
},
- "names": [
- "event:approval/policy"
- ],
+ "names": [],
"sources": []
},
{
@@ -22903,10 +22848,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream",
- "event:assistant/message.data.stream"
- ],
+ "names": [],
"sources": []
},
{
@@ -23016,9 +22958,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][3].chunk[6].reason[4]"
- ],
+ "names": [],
"sources": [
"packages/llm/llm/src/types.ts:145"
]
@@ -23535,9 +23475,7 @@
}
]
},
- "names": [
- "event:tool/result"
- ],
+ "names": [],
"sources": []
},
{
@@ -23816,9 +23754,7 @@
}
]
},
- "names": [
- "event:schedule/change"
- ],
+ "names": [],
"sources": []
},
{
@@ -23882,9 +23818,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].source[16].changes"
- ],
+ "names": [],
"sources": []
},
{
@@ -23927,9 +23861,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][3].chunk[2]"
- ],
+ "names": [],
"sources": [
"packages/llm/llm/src/types.ts:429"
]
@@ -24016,10 +23948,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].source[6]",
- "event:system/message.data.message.source[5]"
- ],
+ "names": [],
"sources": []
},
{
@@ -24062,9 +23991,7 @@
}
]
},
- "names": [
- "event:web/deepseek-search-llm-request.data.body.tools[0]"
- ],
+ "names": [],
"sources": [
"packages/web/web-search-deepseek/src/provider.ts:71"
]
@@ -24278,9 +24205,7 @@
}
]
},
- "names": [
- "event:request/header.data"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:377"
]
@@ -24364,10 +24289,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].source[3]",
- "event:system/message.data.message.source[2]"
- ],
+ "names": [],
"sources": []
},
{
@@ -25489,9 +25411,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted"
- ],
+ "names": [],
"sources": []
},
{
@@ -27269,9 +27189,7 @@
}
]
},
- "names": [
- "event:user/message"
- ],
+ "names": [],
"sources": []
},
{
@@ -27355,10 +27273,7 @@
}
]
},
- "names": [
- "event:feedback/message-put.data.item.category",
- "event:feedback/record.data.category"
- ],
+ "names": [],
"sources": []
},
{
@@ -27504,9 +27419,7 @@
}
]
},
- "names": [
- "event:model/selection"
- ],
+ "names": [],
"sources": []
},
{
@@ -27936,9 +27849,7 @@
}
]
},
- "names": [
- "event:tool/result.data"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:362"
]
@@ -28052,9 +27963,7 @@
}
]
},
- "names": [
- "event:command/run"
- ],
+ "names": [],
"sources": []
},
{
@@ -28163,9 +28072,7 @@
}
]
},
- "names": [
- "event:llm/retry.data[1]"
- ],
+ "names": [],
"sources": [
"packages/llm/llm-retry/src/types.ts:30"
]
@@ -28268,9 +28175,7 @@
}
]
},
- "names": [
- "event:request/context"
- ],
+ "names": [],
"sources": []
},
{
@@ -28355,9 +28260,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][2]"
- ],
+ "names": [],
"sources": [
"packages/llm/llm/src/assistant-stream.ts:35"
]
@@ -28794,9 +28697,7 @@
}
]
},
- "names": [
- "event:compaction/summary.data[1]"
- ],
+ "names": [],
"sources": []
},
{
@@ -28987,9 +28888,7 @@
}
]
},
- "names": [
- "event:tool/call"
- ],
+ "names": [],
"sources": []
},
{
@@ -29029,8 +28928,6 @@
]
},
"names": [
- "event:compaction/end.data.turn",
- "event:compaction/start.data.turn",
"packages/core/session/src/types.ts#OptionalSessionSeq"
],
"sources": [
@@ -29117,9 +29014,7 @@
}
]
},
- "names": [
- "event:approval/asked"
- ],
+ "names": [],
"sources": []
},
{
@@ -29367,9 +29262,7 @@
}
]
},
- "names": [
- "event:compaction/start.data"
- ],
+ "names": [],
"sources": [
"packages/compaction/compaction/src/types.ts:24"
]
@@ -29444,9 +29337,7 @@
}
]
},
- "names": [
- "event:feedback/message-delete"
- ],
+ "names": [],
"sources": []
},
{
@@ -29553,9 +29444,7 @@
}
]
},
- "names": [
- "event:tool-workflow/run-end"
- ],
+ "names": [],
"sources": []
},
{
@@ -29949,9 +29838,7 @@
}
]
},
- "names": [
- "event:team/message/queued"
- ],
+ "names": [],
"sources": []
},
{
@@ -30048,9 +29935,7 @@
}
]
},
- "names": [
- "event:step/start"
- ],
+ "names": [],
"sources": []
},
{
@@ -30090,9 +29975,7 @@
}
]
},
- "names": [
- "event:approval/asked.data"
- ],
+ "names": [],
"sources": [
"packages/interaction/user-approval/src/types.ts:44"
]
@@ -30143,9 +30026,7 @@
}
]
},
- "names": [
- "event:image/offload.data"
- ],
+ "names": [],
"sources": [
"packages/compaction/compaction-image-offload/src/projection.ts:25"
]
@@ -31232,9 +31113,7 @@
}
]
},
- "names": [
- "event:session/title-llm-request.data.messages"
- ],
+ "names": [],
"sources": []
},
{
@@ -31331,9 +31210,7 @@
}
]
},
- "names": [
- "event:llm/retry-started"
- ],
+ "names": [],
"sources": []
},
{
@@ -31420,9 +31297,7 @@
}
]
},
- "names": [
- "event:team/message/delivered"
- ],
+ "names": [],
"sources": []
},
{
@@ -31536,9 +31411,7 @@
}
]
},
- "names": [
- "event:web/deepseek-search-llm-request.data.body.tools"
- ],
+ "names": [],
"sources": []
},
{
@@ -31592,9 +31465,7 @@
}
]
},
- "names": [
- "event:todo/write.data.todos"
- ],
+ "names": [],
"sources": []
},
{
@@ -31619,9 +31490,7 @@
}
]
},
- "names": [
- "event:turn/end.data.reason[1].reason[3]"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:192"
]
@@ -33597,7 +33466,6 @@
]
},
"names": [
- "event:web/deepseek-search-llm-request.data.body.messages[0].content[0]",
"packages/llm/llm/src/types.ts#TextBlock"
],
"sources": [
@@ -33762,9 +33630,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].source[15].references[0]"
- ],
+ "names": [],
"sources": [
"packages/context/session-reference/src/types.ts:18"
]
@@ -33924,9 +33790,7 @@
}
]
},
- "names": [
- "event:team/member"
- ],
+ "names": [],
"sources": []
},
{
@@ -33951,9 +33815,7 @@
}
]
},
- "names": [
- "event:team/member.data.member.context"
- ],
+ "names": [],
"sources": []
},
{
@@ -34060,9 +33922,7 @@
}
]
},
- "names": [
- "event:sandbox/mode"
- ],
+ "names": [],
"sources": []
},
{
@@ -34374,9 +34234,7 @@
}
]
},
- "names": [
- "event:llm/retry"
- ],
+ "names": [],
"sources": []
},
{
@@ -34427,10 +34285,7 @@
}
]
},
- "names": [
- "event:tool/result.data.meta[5][0][6]",
- "event:tool/result.data.meta[6]"
- ],
+ "names": [],
"sources": [
"packages/util/values/src/index.ts:4"
]
@@ -34510,9 +34365,7 @@
}
]
},
- "names": [
- "event:turn/end.data.reason[5]"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:220"
]
@@ -34691,9 +34544,7 @@
}
]
},
- "names": [
- "SessionEventEnvelope"
- ],
+ "names": [],
"sources": []
},
{
@@ -35299,9 +35150,7 @@
}
]
},
- "names": [
- "event:command/done.data"
- ],
+ "names": [],
"sources": [
"packages/interaction/commands/src/types.ts:112"
]
@@ -35385,9 +35234,7 @@
}
]
},
- "names": [
- "event:permission/preset"
- ],
+ "names": [],
"sources": []
},
{
@@ -35405,23 +35252,7 @@
}
]
},
- "names": [
- "SessionEventEnvelope[39].sourceEventSeqs",
- "SessionEventEnvelope[52].sourceEventSeqs",
- "SessionEventEnvelope[55].sourceEventSeqs",
- "event:assistant/attempt.data.stream[0][0].dt",
- "event:assistant/attempt.data.stream[0][1].dt",
- "event:assistant/attempt.data.stream[0][2].dt",
- "event:compaction/prune.data.shadowedSeqs",
- "event:compaction/summary.data[0].shadowedSeqs",
- "event:compaction/summary.data[1].shadowedSeqs",
- "event:image/offload.data.targets[0].imageIndexes",
- "event:session/title-llm-request.data.messageSeqs",
- "event:session/title.data.messageSeqs",
- "event:system/message.sourceEventSeqs",
- "event:tool/result.sourceEventSeqs",
- "event:user/message.sourceEventSeqs"
- ],
+ "names": [],
"sources": []
},
{
@@ -35492,9 +35323,7 @@
}
]
},
- "names": [
- "event:subagent/catalog.data[0]"
- ],
+ "names": [],
"sources": []
},
{
@@ -35549,9 +35378,7 @@
}
]
},
- "names": [
- "event:compaction/prune.data"
- ],
+ "names": [],
"sources": [
"packages/compaction/compaction/src/types.ts:82"
]
@@ -35617,9 +35444,7 @@
}
]
},
- "names": [
- "event:session/end-seed"
- ],
+ "names": [],
"sources": []
},
{
@@ -35779,9 +35604,7 @@
}
]
},
- "names": [
- "event:tool-workflow/agent-start"
- ],
+ "names": [],
"sources": []
},
{
@@ -35906,9 +35729,7 @@
}
]
},
- "names": [
- "event:goal/change.data[0].operation"
- ],
+ "names": [],
"sources": []
},
{
@@ -37076,9 +36897,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced"
- ],
+ "names": [],
"sources": []
},
{
@@ -37152,9 +36971,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][3].chunk[0]"
- ],
+ "names": [],
"sources": [
"packages/llm/llm/src/types.ts:427"
]
@@ -37677,9 +37494,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][3].chunk[6].reason[1]"
- ],
+ "names": [],
"sources": [
"packages/llm/llm/src/types.ts:148"
]
@@ -38318,9 +38133,7 @@
}
]
},
- "names": [
- "event:system/message"
- ],
+ "names": [],
"sources": []
},
{
@@ -38373,9 +38186,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].source[11]"
- ],
+ "names": [],
"sources": [
"packages/api/session-controller/src/types.ts:385"
]
@@ -38515,9 +38326,7 @@
}
]
},
- "names": [
- "event:turn/end.data.reason[1].reason[1]"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:190"
]
@@ -38567,9 +38376,7 @@
}
]
},
- "names": [
- "event:turn/end.data.reason[1].reason[2]"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:191"
]
@@ -38638,9 +38445,7 @@
}
]
},
- "names": [
- "event:request/header.data.header.tools"
- ],
+ "names": [],
"sources": []
},
{
@@ -38665,9 +38470,7 @@
}
]
},
- "names": [
- "event:agent-preset/selected.data"
- ],
+ "names": [],
"sources": [
"packages/preset/agent-presets/src/session.ts:28"
]
@@ -39025,9 +38828,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][1]"
- ],
+ "names": [],
"sources": [
"packages/llm/llm/src/assistant-stream.ts:28"
]
@@ -39080,10 +38881,7 @@
}
]
},
- "names": [
- "event:tool/result.data.meta[5]",
- "event:tool/result.data.meta[5][0][5]"
- ],
+ "names": [],
"sources": []
},
{
@@ -39428,9 +39226,7 @@
}
]
},
- "names": [
- "event:goal/change"
- ],
+ "names": [],
"sources": []
},
{
@@ -40384,9 +40180,7 @@
}
]
},
- "names": [
- "event:assistant/message.data"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:328"
]
@@ -40462,9 +40256,7 @@
}
]
},
- "names": [
- "event:turn/end.data.reason[3]"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:211"
]
@@ -40531,9 +40323,7 @@
}
]
},
- "names": [
- "event:todo/write.data"
- ],
+ "names": [],
"sources": [
"packages/todo/tool-todo/src/types.ts:31"
]
@@ -40638,9 +40428,7 @@
}
]
},
- "names": [
- "SessionEventEnvelope[6]"
- ],
+ "names": [],
"sources": []
},
{
@@ -41146,9 +40934,7 @@
}
]
},
- "names": [
- "event:compaction/prune"
- ],
+ "names": [],
"sources": []
},
{
@@ -41364,9 +41150,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].source[17].entries[0]"
- ],
+ "names": [],
"sources": [
"packages/skill/tool-skill/src/index.ts:40"
]
@@ -41543,10 +41327,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].source[7]",
- "event:system/message.data.message.source[6]"
- ],
+ "names": [],
"sources": []
},
{
@@ -42625,9 +42406,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][3].chunk[3]"
- ],
+ "names": [],
"sources": [
"packages/llm/llm/src/types.ts:430"
]
@@ -42732,9 +42511,7 @@
}
]
},
- "names": [
- "event:hook/invoked"
- ],
+ "names": [],
"sources": []
},
{
@@ -42759,9 +42536,7 @@
}
]
},
- "names": [
- "event:permission/preset.data"
- ],
+ "names": [],
"sources": [
"packages/interaction/permission-presets/src/index.ts:57"
]
@@ -42822,9 +42597,7 @@
}
]
},
- "names": [
- "event:hook/result.data"
- ],
+ "names": [],
"sources": [
"packages/hooks/hook-protocol/src/types.ts:31"
]
@@ -42879,9 +42652,7 @@
}
]
},
- "names": [
- "event:session-log-deepseek/delivery-accepted.data"
- ],
+ "names": [],
"sources": [
"packages/session/session-log-deepseek/src/types.ts:81"
]
@@ -43560,9 +43331,7 @@
}
]
},
- "names": [
- "event:tool/result.data.message.content"
- ],
+ "names": [],
"sources": []
},
{
@@ -43636,9 +43405,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][3].chunk[6].reason[0]"
- ],
+ "names": [],
"sources": [
"packages/llm/llm/src/types.ts:147"
]
@@ -43920,9 +43687,7 @@
}
]
},
- "names": [
- "event:request/header"
- ],
+ "names": [],
"sources": []
},
{
@@ -43966,9 +43731,7 @@
}
]
},
- "names": [
- "event:web/deepseek-search-llm-request.data.body.messages[0].content"
- ],
+ "names": [],
"sources": []
},
{
@@ -43998,9 +43761,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].source[16].changes[0].action"
- ],
+ "names": [],
"sources": []
},
{
@@ -44314,9 +44075,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][3].chunk[4]"
- ],
+ "names": [],
"sources": [
"packages/llm/llm/src/types.ts:431"
]
@@ -44461,9 +44220,7 @@
}
]
},
- "names": [
- "event:web/deepseek-search-llm-request.data.body"
- ],
+ "names": [],
"sources": [
"packages/web/web-search-deepseek/src/provider.ts:61"
]
@@ -44550,16 +44307,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][0].texts",
- "event:assistant/attempt.data.stream[0][1].texts",
- "event:assistant/attempt.data.stream[0][2].args",
- "event:request/header.data.header.config.stop",
- "event:subagent/descriptor.data[1].toolFilter.allow",
- "event:subagent/descriptor.data[1].toolFilter.deny",
- "event:team/task.data.task.blockedBy",
- "event:team/task.data.task.writeScopes"
- ],
+ "names": [],
"sources": []
},
{
@@ -44614,9 +44362,7 @@
}
]
},
- "names": [
- "event:approval/decided.data"
- ],
+ "names": [],
"sources": [
"packages/interaction/user-approval/src/types.ts:55"
]
@@ -44689,9 +44435,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][3].chunk[1]"
- ],
+ "names": [],
"sources": [
"packages/llm/llm/src/types.ts:428"
]
@@ -44786,9 +44530,7 @@
}
]
},
- "names": [
- "event:sandbox/mode.data"
- ],
+ "names": [],
"sources": [
"packages/sandbox/sandbox-policy/src/session-mode.ts:33"
]
@@ -44888,11 +44630,7 @@
}
]
},
- "names": [
- "SessionEventEnvelope[39]",
- "SessionEventEnvelope[52]",
- "SessionEventEnvelope[55]"
- ],
+ "names": [],
"sources": []
},
{
@@ -44956,9 +44694,7 @@
}
]
},
- "names": [
- "event:web/deepseek-search-llm-request.data.body.messages[0]"
- ],
+ "names": [],
"sources": [
"packages/web/web-search-deepseek/src/provider.ts:64"
]
@@ -45107,9 +44843,7 @@
}
]
},
- "names": [
- "event:image/offload.data.targets"
- ],
+ "names": [],
"sources": []
},
{
@@ -45139,11 +44873,7 @@
}
]
},
- "names": [
- "event:compaction/prune.data.shadowedRange",
- "event:compaction/summary.data[0].shadowedRange",
- "event:compaction/summary.data[1].shadowedRange"
- ],
+ "names": [],
"sources": [
"packages/compaction/compaction/src/types.ts:38",
"packages/compaction/compaction/src/types.ts:84"
@@ -45209,9 +44939,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].source[19]"
- ],
+ "names": [],
"sources": [
"packages/webhook/webhook/src/types.ts:74"
]
@@ -46769,9 +46497,7 @@
}
]
},
- "names": [
- "event:compaction/summary.data[0]"
- ],
+ "names": [],
"sources": []
},
{
@@ -46853,9 +46579,7 @@
}
]
},
- "names": [
- "event:agent-preset/selected"
- ],
+ "names": [],
"sources": []
},
{
@@ -47067,9 +46791,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][3].chunk[6]"
- ],
+ "names": [],
"sources": [
"packages/llm/llm/src/types.ts:433"
]
@@ -47231,9 +46953,7 @@
}
]
},
- "names": [
- "event:team/task.data"
- ],
+ "names": [],
"sources": [
"packages/experimental/agent-team/src/types.ts:223"
]
@@ -47323,9 +47043,7 @@
}
]
},
- "names": [
- "event:subagent/model-selection-policy"
- ],
+ "names": [],
"sources": []
},
{
@@ -48444,9 +48162,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data"
- ],
+ "names": [],
"sources": [
"packages/core/agent/src/types.ts:87"
]
@@ -48579,9 +48295,7 @@
}
]
},
- "names": [
- "event:plan/mode"
- ],
+ "names": [],
"sources": []
},
{
@@ -48616,10 +48330,7 @@
}
]
},
- "names": [
- "event:tool/ptc-dispatch.data.error",
- "event:tool/result.data.error"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:370",
"packages/core/tools/src/types.ts:24"
@@ -48677,9 +48388,7 @@
}
]
},
- "names": [
- "event:command/run.data"
- ],
+ "names": [],
"sources": [
"packages/interaction/commands/src/types.ts:105"
]
@@ -48813,9 +48522,7 @@
}
]
},
- "names": [
- "event:turn/start"
- ],
+ "names": [],
"sources": []
},
{
@@ -49002,10 +48709,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][3].chunk[6].reason[2]",
- "event:turn/end.data.reason[4]"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:213",
"packages/llm/llm/src/types.ts:146"
@@ -49042,9 +48746,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].source[17].entries"
- ],
+ "names": [],
"sources": []
},
{
@@ -49074,9 +48776,7 @@
}
]
},
- "names": [
- "event:session/title-llm-request.data.messages[0].role"
- ],
+ "names": [],
"sources": []
},
{
@@ -49144,9 +48844,6 @@
]
},
"names": [
- "event:agent/inbox/spliced.data.inserted[0].source[0]",
- "event:session/title.data.source[2]",
- "event:turn/end.data.reason[1].reason[0]",
"packages/interaction/commands/src/types.ts#CommandSource"
],
"sources": [
@@ -49292,9 +48989,7 @@
}
]
},
- "names": [
- "event:subagent/catalog"
- ],
+ "names": [],
"sources": []
},
{
@@ -49458,9 +49153,7 @@
}
]
},
- "names": [
- "event:compaction/end"
- ],
+ "names": [],
"sources": []
},
{
@@ -49634,9 +49327,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][3].chunk[6].replayState.blocks"
- ],
+ "names": [],
"sources": []
},
{
@@ -49751,9 +49442,7 @@
}
]
},
- "names": [
- "event:team/member.data"
- ],
+ "names": [],
"sources": [
"packages/experimental/agent-team/src/types.ts:221"
]
@@ -49857,9 +49546,7 @@
}
]
},
- "names": [
- "event:image/offload"
- ],
+ "names": [],
"sources": []
},
{
@@ -50307,9 +49994,7 @@
}
]
},
- "names": [
- "event:tool/ptc-dispatch"
- ],
+ "names": [],
"sources": []
},
{
@@ -50371,10 +50056,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].source[5]",
- "event:system/message.data.message.source[4]"
- ],
+ "names": [],
"sources": []
},
{
@@ -50543,9 +50225,7 @@
}
]
},
- "names": [
- "event:feedback/message-put"
- ],
+ "names": [],
"sources": []
},
{
@@ -50658,9 +50338,7 @@
}
]
},
- "names": [
- "event:feedback/record"
- ],
+ "names": [],
"sources": []
},
{
@@ -50839,9 +50517,7 @@
}
]
},
- "names": [
- "event:turn/end.data.reason[0]"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:201"
]
@@ -51026,9 +50702,7 @@
}
]
},
- "names": [
- "event:subagent/descriptor"
- ],
+ "names": [],
"sources": []
},
{
@@ -51097,9 +50771,7 @@
}
]
},
- "names": [
- "event:session/title.data.source[1]"
- ],
+ "names": [],
"sources": [
"packages/session/session-title/src/types.ts:30"
]
@@ -51296,9 +50968,7 @@
}
]
},
- "names": [
- "event:todo/write"
- ],
+ "names": [],
"sources": []
},
{
@@ -51372,9 +51042,7 @@
}
]
},
- "names": [
- "event:web/deepseek-search-llm-request.data.body.messages"
- ],
+ "names": [],
"sources": []
},
{
@@ -51408,9 +51076,7 @@
}
]
},
- "names": [
- "event:subagent/model-selection-policy.data.allowedModels"
- ],
+ "names": [],
"sources": []
},
{
@@ -51508,9 +51174,7 @@
}
]
},
- "names": [
- "event:tool-workflow/agent-end"
- ],
+ "names": [],
"sources": []
},
{
@@ -51608,9 +51272,7 @@
}
]
},
- "names": [
- "event:approval/decided"
- ],
+ "names": [],
"sources": []
},
{
@@ -51899,19 +51561,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].content",
- "event:agent/inbox/spliced.data.inserted[0].content[0][5].content",
- "event:assistant/message.data.message.content",
- "event:compaction/summary.data[0].rawOutput",
- "event:compaction/summary.data[0].summary",
- "event:compaction/summary.data[1].rawOutput",
- "event:compaction/summary.data[1].summary",
- "event:session/title-llm-request.data.messages[0].content",
- "event:system/message.data.message.content",
- "event:team/message/queued.data.message.content",
- "event:tool/ptc-dispatch.data.content"
- ],
+ "names": [],
"sources": []
},
{
@@ -51925,14 +51575,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].source[8].replayState",
- "event:assistant/attempt.data.stream[0][3].chunk[6].replayState.blocks[0]",
- "event:assistant/attempt.data.stream[0][3].chunk[6].replayState.response",
- "event:request/header.data.header.tools[0].parameters.[value]",
- "event:tool/ptc-dispatch-start.data.arguments",
- "event:tool/ptc-dispatch.data.arguments"
- ],
+ "names": [],
"sources": []
},
{
@@ -51971,9 +51614,7 @@
}
]
},
- "names": [
- "SessionEventEnvelope[6].surfaceOp[1]"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:450"
]
@@ -52367,9 +52008,7 @@
}
]
},
- "names": [
- "event:tool-workflow/run-start"
- ],
+ "names": [],
"sources": []
},
{
@@ -52639,7 +52278,6 @@
]
},
"names": [
- "event:tool/result.data.meta",
"packages/util/values/src/index.ts#JsonValue"
],
"sources": [
@@ -52677,9 +52315,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].source[4].sections"
- ],
+ "names": [],
"sources": []
},
{
@@ -53872,9 +53508,7 @@
}
]
},
- "names": [
- "event:assistant/attempt"
- ],
+ "names": [],
"sources": []
},
{
@@ -54596,9 +54230,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][3]"
- ],
+ "names": [],
"sources": [
"packages/llm/llm/src/assistant-stream.ts:44"
]
@@ -54683,9 +54315,7 @@
}
]
},
- "names": [
- "event:compaction/end.data"
- ],
+ "names": [],
"sources": [
"packages/compaction/compaction/src/types.ts:72"
]
@@ -55002,9 +54632,7 @@
}
]
},
- "names": [
- "event:llm/retry.data[0]"
- ],
+ "names": [],
"sources": [
"packages/llm/llm-retry/src/types.ts:17"
]
@@ -55209,9 +54837,7 @@
}
]
},
- "names": [
- "event:web/deepseek-search-llm-request"
- ],
+ "names": [],
"sources": []
},
{
@@ -55491,9 +55117,7 @@
}
]
},
- "names": [
- "event:team/task"
- ],
+ "names": [],
"sources": []
},
{
@@ -55864,9 +55488,7 @@
}
]
},
- "names": [
- "event:session-log-deepseek/delivery-accepted"
- ],
+ "names": [],
"sources": []
},
{
@@ -56179,9 +55801,7 @@
}
]
},
- "names": [
- "event:compaction/start"
- ],
+ "names": [],
"sources": []
},
{
@@ -56252,10 +55872,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].source[2]",
- "event:system/message.data.message.source[1]"
- ],
+ "names": [],
"sources": []
},
{
@@ -56395,9 +56012,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].source[15].references"
- ],
+ "names": [],
"sources": []
},
{
@@ -56500,9 +56115,7 @@
}
]
},
- "names": [
- "event:step/end"
- ],
+ "names": [],
"sources": []
},
{
@@ -57678,9 +57291,7 @@
}
]
},
- "names": [
- "event:session/title-llm-request"
- ],
+ "names": [],
"sources": []
},
{
@@ -58002,9 +57613,7 @@
}
]
},
- "names": [
- "event:workspace/changes"
- ],
+ "names": [],
"sources": []
},
{
@@ -58066,62 +57675,7 @@
}
]
},
- "names": [
- "SessionEventEnvelope[0]",
- "SessionEventEnvelope[10]",
- "SessionEventEnvelope[11]",
- "SessionEventEnvelope[12]",
- "SessionEventEnvelope[13]",
- "SessionEventEnvelope[14]",
- "SessionEventEnvelope[15]",
- "SessionEventEnvelope[16]",
- "SessionEventEnvelope[17]",
- "SessionEventEnvelope[18]",
- "SessionEventEnvelope[19]",
- "SessionEventEnvelope[1]",
- "SessionEventEnvelope[20]",
- "SessionEventEnvelope[21]",
- "SessionEventEnvelope[22]",
- "SessionEventEnvelope[23]",
- "SessionEventEnvelope[24]",
- "SessionEventEnvelope[25]",
- "SessionEventEnvelope[26]",
- "SessionEventEnvelope[27]",
- "SessionEventEnvelope[28]",
- "SessionEventEnvelope[29]",
- "SessionEventEnvelope[2]",
- "SessionEventEnvelope[30]",
- "SessionEventEnvelope[31]",
- "SessionEventEnvelope[32]",
- "SessionEventEnvelope[33]",
- "SessionEventEnvelope[34]",
- "SessionEventEnvelope[35]",
- "SessionEventEnvelope[36]",
- "SessionEventEnvelope[37]",
- "SessionEventEnvelope[38]",
- "SessionEventEnvelope[3]",
- "SessionEventEnvelope[40]",
- "SessionEventEnvelope[41]",
- "SessionEventEnvelope[42]",
- "SessionEventEnvelope[43]",
- "SessionEventEnvelope[44]",
- "SessionEventEnvelope[45]",
- "SessionEventEnvelope[46]",
- "SessionEventEnvelope[47]",
- "SessionEventEnvelope[48]",
- "SessionEventEnvelope[49]",
- "SessionEventEnvelope[4]",
- "SessionEventEnvelope[50]",
- "SessionEventEnvelope[51]",
- "SessionEventEnvelope[53]",
- "SessionEventEnvelope[54]",
- "SessionEventEnvelope[56]",
- "SessionEventEnvelope[57]",
- "SessionEventEnvelope[5]",
- "SessionEventEnvelope[7]",
- "SessionEventEnvelope[8]",
- "SessionEventEnvelope[9]"
- ],
+ "names": [],
"sources": []
},
{
@@ -58450,9 +58004,7 @@
}
]
},
- "names": [
- "event:turn/end.data"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:292"
]
@@ -58503,9 +58055,7 @@
}
]
},
- "names": [
- "event:tool/call.data"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:348"
]
@@ -59047,9 +58597,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][0]"
- ],
+ "names": [],
"sources": [
"packages/llm/llm/src/assistant-stream.ts:21"
]
@@ -59149,9 +58697,7 @@
}
]
},
- "names": [
- "event:hook/result"
- ],
+ "names": [],
"sources": []
},
{
@@ -59261,10 +58807,7 @@
}
]
},
- "names": [
- "event:agent/inbox/spliced.data.inserted[0].source[4]",
- "event:system/message.data.message.source[3]"
- ],
+ "names": [],
"sources": []
},
{
@@ -59317,9 +58860,7 @@
}
]
},
- "names": [
- "event:turn/end.data.reason[1].reason[4]"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:195"
]
@@ -59427,9 +58968,7 @@
}
]
},
- "names": [
- "event:tool/ptc-dispatch-start"
- ],
+ "names": [],
"sources": []
},
{
@@ -59454,9 +58993,7 @@
}
]
},
- "names": [
- "event:turn/end.data.reason[6]"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:227"
]
@@ -59502,10 +59039,7 @@
}
]
},
- "names": [
- "event:step/end.data",
- "event:step/start.data"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:294",
"packages/core/session/src/types.ts:296"
@@ -59977,9 +59511,7 @@
}
]
},
- "names": [
- "event:assistant/attempt.data.stream[0][3].chunk[5]"
- ],
+ "names": [],
"sources": [
"packages/llm/llm/src/types.ts:432"
]
@@ -60744,9 +60276,7 @@
}
]
},
- "names": [
- "event:compaction/summary"
- ],
+ "names": [],
"sources": []
},
{
@@ -60799,10 +60329,7 @@
}
]
},
- "names": [
- "event:turn/start.data",
- "event:workspace/changes.data"
- ],
+ "names": [],
"sources": [
"packages/core/session/src/types.ts:283",
"packages/deliverables/workspace-changes/src/types.ts:106"
@@ -61015,9 +60542,7 @@
}
]
},
- "names": [
- "event:todo/write.data.todos[0].status"
- ],
+ "names": [],
"sources": []
},
{
@@ -61510,9 +61035,7 @@
}
]
},
- "names": [
- "event:compaction/summary.data"
- ],
+ "names": [],
"sources": []
},
{
diff --git a/package.json b/package.json
index ee34bc050a..f108195187 100644
--- a/package.json
+++ b/package.json
@@ -165,6 +165,7 @@
"gen-persistence-catalog": "tsx scripts/gen-persistence-catalog.ts",
"verify-persistence-catalog": "tsx scripts/gen-persistence-catalog.ts --check",
"persistence-changes": "tsx scripts/persistence-changes.ts",
+ "persistence-review": "tsx scripts/persistence-review.ts",
"verify-persistence-changes": "tsx scripts/persistence-changes.ts --check",
"verify-persistence-releases": "tsx scripts/persistence-releases.ts",
"verify-persistence-formats": "tsx scripts/persistence-formats.ts",
diff --git a/scripts/gen-persistence-catalog.ts b/scripts/gen-persistence-catalog.ts
index adf891d895..d7a18e8e3d 100644
--- a/scripts/gen-persistence-catalog.ts
+++ b/scripts/gen-persistence-catalog.ts
@@ -102,7 +102,7 @@ export function render(
'',
text.envelopeIntro,
'',
- ...(schema ? [renderPersistenceSchemaIndex(schema, locale)] : []),
+ ...(schema ? [renderPersistenceSchemaIndex(schema, locale, undefined, 2, 'current')] : []),
`## ${text.envelope}`,
'',
'```' + FENCE,
@@ -121,7 +121,7 @@ export function render(
lines.push(...renderEvent(e, locale))
}
}
- if (schema) lines.push(renderPersistenceSchemaDefinitions(schema, locale))
+ if (schema) lines.push(renderPersistenceSchemaDefinitions(schema, locale, undefined, 2, 'current'))
return lines.join('\n')
}
diff --git a/scripts/persistence-catalog-text.ts b/scripts/persistence-catalog-text.ts
index a49a129ea7..3b2ee2dd84 100644
--- a/scripts/persistence-catalog-text.ts
+++ b/scripts/persistence-catalog-text.ts
@@ -19,6 +19,9 @@ const english = {
optional: 'optional', required: 'required', rest: 'rest', index: 'index signature',
emptyObject: 'Object with no declared properties.', arrayPrefix: 'Array of ', arraySuffix: '.',
oneOf: 'One of:', opaque: ' (opaque)', opaqueExplanation: ": the declaration does not expose the stored value's internal fields.",
+ sourceCompatibility: 'Source compatibility: ', attributionAdditions: 'Attribution-only additions: ',
+ sourceColumns: '| kind | Form property | Other required fields | Full definition |',
+ notDeclared: 'not declared', none: 'none',
}
const chinese: Record = {
@@ -37,6 +40,9 @@ const chinese: Record = {
optional: '可选', required: '必需', rest: '剩余项', index: '索引签名',
emptyObject: '无已声明属性的对象。', arrayPrefix: '', arraySuffix: ' 的数组。',
oneOf: '以下类型之一:', opaque: '(不透明)', opaqueExplanation: ':此声明未暴露存储值的内部字段。',
+ sourceCompatibility: '消息源兼容策略:', attributionAdditions: '仅表示归属的新增 kind:',
+ sourceColumns: '| kind | form 属性 | 其他必需字段 | 完整定义 |',
+ notDeclared: '未声明', none: '无',
}
/** Complete translated prose; adding an English key requires its Chinese counterpart. */
diff --git a/scripts/persistence-changes.spec.ts b/scripts/persistence-changes.spec.ts
index 38fba92e0f..8d5a6af4fd 100644
--- a/scripts/persistence-changes.spec.ts
+++ b/scripts/persistence-changes.spec.ts
@@ -6,7 +6,7 @@ import { tmpdir } from 'node:os'
import { join, resolve } from 'node:path'
import { afterEach, describe, expect, it } from 'vitest'
import { canonicalizeSchema, schemaDigest } from './persistence-schema-model.ts'
-import type { PersistenceRoot, PersistenceSchemaInventory, SchemaNode, SchemaProperty } from './persistence-schema-model.ts'
+import type { PersistenceRoot, PersistenceSchemaInventory, SchemaNode, SchemaProperty, SourceCompatibility } from './persistence-schema-model.ts'
import { extractPersistenceSchema } from './persistence-schema.ts'
import { persistenceCatalogArtifacts } from './gen-persistence-catalog.ts'
import {
@@ -371,7 +371,7 @@ describe('persistence history verification', () => {
const tampered = structuredClone(schema)
Object.assign(tampered.roots[0]!, { digest: '0'.repeat(64) })
expect(() => parsePersistenceSnapshot(tampered)).toThrow('digest mismatch')
- expect(() => parsePersistenceSnapshot({ ...schema, formatVersion: 2 })).toThrow('normalization version')
+ expect(() => parsePersistenceSnapshot({ ...schema, formatVersion: 3 })).toThrow('normalization version')
const next = entry(NEXT_ID, onlyEvent(inventory({ value: 'string', 'label?': 'string' })), BASE_ID)
expect(() => validatePersistenceHistory([entry(BASE_ID, schema, null, true), { ...next, snapshot: inventory() }])).toThrow('snapshot roots')
})
@@ -609,3 +609,144 @@ describe('persistence changes current-tree commands', () => {
})
})
})
+
+interface SourceAlternative {
+ readonly kind: string
+ readonly value?: 'string' | 'number'
+ readonly extra?: 'required' | 'optional'
+}
+
+function attributedRoot(
+ alternatives: readonly SourceAlternative[],
+ options: { policy?: SourceCompatibility | null; role?: 'user' | 'developer'; extra?: boolean } = {},
+): PersistenceRoot {
+ const role = options.role ?? 'user'
+ const policy: SourceCompatibility | undefined = options.policy === null ? undefined : options.policy ?? {
+ version: 1, policy: 'session-source-attribution', binding: `session.${role}-message.source`,
+ discriminator: 'kind', unknownKinds: 'preserve', attributionKinds: [],
+ }
+ const nodes: SchemaNode[] = [
+ { kind: 'object', indices: [], properties: [{ name: 'type', type: 2, optional: false }, { name: 'data', type: 1, optional: false }] },
+ { kind: 'object', indices: [], properties: [
+ { name: 'role', type: 4, optional: false }, { name: 'source', type: 3, optional: false, ...(policy === undefined ? {} : { compatibility: policy }) },
+ ...(options.extra ? [{ name: 'unrelated', type: 5, optional: false }] : []),
+ ] },
+ { kind: 'literal', value: 'example/source' },
+ { kind: 'primitive', type: 'never' },
+ { kind: 'literal', value: role },
+ { kind: 'primitive', type: 'string' },
+ { kind: 'primitive', type: 'number' },
+ ]
+ const types = alternatives.map((alternative) => {
+ const index = nodes.length
+ nodes.push({ kind: 'object', indices: [], properties: [
+ { name: 'kind', type: index + 1, optional: false },
+ ...(alternative.value === undefined ? [] : [{ name: 'value', type: alternative.value === 'string' ? 5 : 6, optional: false }]),
+ ...(alternative.extra === undefined ? [] : [{ name: 'extra', type: 5, optional: alternative.extra === 'optional' }]),
+ ] }, { kind: 'literal', value: alternative.kind })
+ return index
+ })
+ nodes[3] = { kind: 'union', types }
+ const schema = canonicalizeSchema(nodes, 0)
+ return { key: 'event:example/source', kind: 'event', event: 'example/source', surface: false, schema, digest: schemaDigest(schema) }
+}
+
+function attributionPolicy(kinds: readonly string[], role: 'user' | 'developer' = 'user'): SourceCompatibility {
+ return { version: 1, policy: 'session-source-attribution', binding: `session.${role}-message.source`,
+ discriminator: 'kind', unknownKinds: 'preserve', attributionKinds: kinds }
+}
+
+const EXISTING_SOURCE: SourceAlternative = { kind: 'semantic', value: 'string' }
+const NEW_SOURCE: SourceAlternative = { kind: 'new-attribution', value: 'number' }
+
+describe('recorded source compatibility policy', () => {
+ it.each(['user', 'developer'] as const)('accepts a qualified new %s source and records its changed digest', (role) => {
+ const before = attributedRoot([EXISTING_SOURCE], { role })
+ const after = attributedRoot([EXISTING_SOURCE, NEW_SOURCE], { role, policy: attributionPolicy([NEW_SOURCE.kind], role) })
+ expect(after.digest).not.toBe(before.digest)
+ expect(classifyPersistenceChange(before, after)).toEqual([expect.objectContaining({ kind: 'attribution-kind-added', requiresVersionBump: false })])
+ const snapshot: PersistenceSchemaInventory = { formatVersion: 2, roots: [after], types: [] }
+ expect(parsePersistenceSnapshot(JSON.parse(JSON.stringify(snapshot)))).toEqual(snapshot)
+ })
+
+ it('allows ordinary optional fields in an existing group alongside a qualified addition', () => {
+ const before = attributedRoot([EXISTING_SOURCE])
+ const after = attributedRoot([{ ...EXISTING_SOURCE, extra: 'optional' }, NEW_SOURCE], { policy: attributionPolicy([NEW_SOURCE.kind]) })
+ const changes = classifyPersistenceChange(before, after)
+ expect(changes.map(change => change.kind).sort()).toEqual(['attribution-kind-added', 'optional-property-added'])
+ expect(changes.every(change => !change.requiresVersionBump)).toBe(true)
+ })
+
+ it.each([
+ ['unmarked addition', [EXISTING_SOURCE, NEW_SOURCE], { policy: attributionPolicy([]) }],
+ ['required existing field', [{ ...EXISTING_SOURCE, extra: 'required' }, NEW_SOURCE], { policy: attributionPolicy([NEW_SOURCE.kind]) }],
+ ['changed existing field', [{ ...EXISTING_SOURCE, value: 'number' }, NEW_SOURCE], { policy: attributionPolicy([NEW_SOURCE.kind]) }],
+ ['removed existing kind', [NEW_SOURCE], { policy: attributionPolicy([NEW_SOURCE.kind]) }],
+ ['renamed existing kind', [{ ...EXISTING_SOURCE, kind: 'renamed' }, NEW_SOURCE], { policy: attributionPolicy([NEW_SOURCE.kind]) }],
+ ['unrelated required payload', [EXISTING_SOURCE, NEW_SOURCE], { policy: attributionPolicy([NEW_SOURCE.kind]), extra: true }],
+ ['removed promise', [EXISTING_SOURCE, NEW_SOURCE], { policy: null }],
+ ] as const)('keeps %s breaking despite qualified additions', (_name, sources, options) => {
+ const changes = classifyPersistenceChange(attributedRoot([EXISTING_SOURCE]), attributedRoot(sources, options))
+ expect(changes.some(change => change.requiresVersionBump)).toBe(true)
+ })
+
+ it('keeps variants within an existing wire-kind group strict', () => {
+ const before = attributedRoot([EXISTING_SOURCE])
+ const after = attributedRoot([EXISTING_SOURCE, { ...EXISTING_SOURCE, value: 'number' }, NEW_SOURCE], { policy: attributionPolicy([NEW_SOURCE.kind]) })
+ expect(classifyPersistenceChange(before, after)).toEqual(expect.arrayContaining([
+ expect.objectContaining({ kind: 'union-variants-changed', requiresVersionBump: true }),
+ expect.objectContaining({ kind: 'attribution-kind-added', requiresVersionBump: false }),
+ ]))
+ })
+
+ it('treats qualification changes for an existing kind as policy changes', () => {
+ const before = attributedRoot([EXISTING_SOURCE])
+ const after = attributedRoot([EXISTING_SOURCE], { policy: attributionPolicy([EXISTING_SOURCE.kind]) })
+ expect(classifyPersistenceChange(before, after)).toEqual([expect.objectContaining({ kind: 'source-policy-changed', requiresVersionBump: true })])
+ })
+
+ it('keeps legacy source transitions strict and never infers promises from the successor', () => {
+ const before = attributedRoot([EXISTING_SOURCE], { policy: null })
+ const after = attributedRoot([EXISTING_SOURCE, NEW_SOURCE], { policy: attributionPolicy([NEW_SOURCE.kind]) })
+ expect(classifyPersistenceChange(before, after).some(change => change.requiresVersionBump)).toBe(true)
+ const legacyAfter = attributedRoot([EXISTING_SOURCE, NEW_SOURCE], { policy: null })
+ const snapshots = [before, legacyAfter].map(root => ({ formatVersion: 1 as const, roots: [root], types: [] }))
+ expect(() => validatePersistenceHistory([
+ entry(BASE_ID, snapshots[0]!, null, true), entry(NEXT_ID, snapshots[1]!, BASE_ID),
+ ])).toThrow('requires a format version bump')
+ })
+
+ it('validates policy-bearing history without source names or type records', () => {
+ const before: PersistenceSchemaInventory = { formatVersion: 2, types: [],
+ roots: [...inventory().roots.filter(root => root.kind !== 'event'), attributedRoot([EXISTING_SOURCE])],
+ }
+ const after: PersistenceSchemaInventory = { formatVersion: 2, types: [],
+ roots: [attributedRoot([EXISTING_SOURCE, NEW_SOURCE], { policy: attributionPolicy([NEW_SOURCE.kind]) })],
+ }
+ expect(validatePersistenceHistory([entry(BASE_ID, before, null, true), entry(NEXT_ID, after, BASE_ID)]).tips.get('event:example/source')?.root).toEqual(after.roots[0])
+ })
+
+ it.each(['auto-review', 'compact-basic', 'code-mode'])('rejects saved qualification of historical kind %s', (kind) => {
+ const root = attributedRoot([EXISTING_SOURCE, { kind }], { policy: attributionPolicy([kind]) })
+ const snapshot: PersistenceSchemaInventory = { formatVersion: 2, roots: [root], types: [] }
+ expect(() => parsePersistenceSnapshot(snapshot)).toThrow('invalid source compatibility')
+ })
+
+ it('rejects old-format policy fields, policy tampering, unsupported promises and invalid bindings', () => {
+ const root = attributedRoot([EXISTING_SOURCE])
+ const snapshot: PersistenceSchemaInventory = { formatVersion: 2, roots: [root], types: [] }
+ expect(() => parsePersistenceSnapshot({ ...snapshot, formatVersion: 1 })).toThrow('unknown field compatibility')
+ for (const patch of [{ version: 2 }, { policy: 'arbitrary' }, { discriminator: 'type' }, { unknownKinds: 'discard' }]) {
+ const tampered = JSON.parse(JSON.stringify(snapshot)) as PersistenceSchemaInventory
+ const property = tampered.roots[0]!.schema.nodes.flatMap(node => node.kind === 'object' ? node.properties : []).find(property => property.compatibility !== undefined)!
+ Object.assign(property.compatibility!, patch)
+ expect(() => parsePersistenceSnapshot(tampered)).toThrow('unsupported source compatibility')
+ }
+ const wrongRole = attributedRoot([EXISTING_SOURCE], { policy: attributionPolicy([], 'developer') })
+ expect(() => parsePersistenceSnapshot({ ...snapshot, roots: [wrongRole] })).toThrow('invalid source compatibility')
+ const changedQualification = attributedRoot([EXISTING_SOURCE], { policy: attributionPolicy([EXISTING_SOURCE.kind]) })
+ expect(() => parsePersistenceSnapshot({ ...snapshot, roots: [{ ...changedQualification, digest: root.digest }] })).toThrow('digest mismatch')
+ const unknownKind = attributedRoot([EXISTING_SOURCE], { policy: attributionPolicy(['absent']) })
+ expect(() => parsePersistenceSnapshot({ ...snapshot, roots: [unknownKind] })).toThrow('invalid source compatibility')
+ })
+})
diff --git a/scripts/persistence-changes.ts b/scripts/persistence-changes.ts
index 1889e2cecf..d246a45d30 100644
--- a/scripts/persistence-changes.ts
+++ b/scripts/persistence-changes.ts
@@ -5,6 +5,7 @@ import { basename, join, resolve } from 'node:path'
import { parseArgs } from 'node:util'
import { JSON_SCHEMA, load } from 'js-yaml'
import { canonicalizeSchema, schemaDigest } from './persistence-schema-model.ts'
+import { matchingSourceCompatibility, sourceKindGroups, validSourceCompatibility } from './persistence-source-policy.ts'
import type { CanonicalSchema, PersistenceRoot, PersistenceSchemaInventory, SchemaNode, SchemaTupleElement } from './persistence-schema-model.ts'
import { extractPersistenceSchema } from './persistence-schema.ts'
import { persistenceCatalogArtifacts } from './gen-persistence-catalog.ts'
@@ -65,6 +66,8 @@ const CHANGE_DESCRIPTIONS = {
'tuple-length-changed': 'tuple length changed',
'tuple-element-cardinality-changed': 'tuple element cardinality changed',
'union-variants-changed': 'union variants changed',
+ 'source-policy-changed': 'source compatibility policy changed',
+ 'attribution-kind-added': 'attribution-only source kind added',
} as const
/** Stable structural classification independent of diagnostic prose. */
@@ -169,7 +172,7 @@ function reference(value: unknown, count: number, label: string): number {
return value as number
}
-function parseSchema(value: unknown, label: string): CanonicalSchema {
+function parseSchema(value: unknown, label: string, formatVersion: 1 | 2): CanonicalSchema {
const input = record(value, label)
keys(input, ['root', 'nodes'], label)
if (input.root !== 0) throw new Error(`${label}.root must be zero`)
@@ -211,7 +214,17 @@ function parseSchema(value: unknown, label: string): CanonicalSchema {
const names = new Set()
for (const rawProperty of array(node.properties, label)) {
const property = record(rawProperty, label)
- keys(property, ['name', 'type', 'optional'], label)
+ keys(property, ['name', 'type', 'optional'], label, formatVersion === 2 ? ['compatibility'] : [])
+ if (property.compatibility !== undefined) {
+ const policy = record(property.compatibility, `${label} source compatibility`)
+ keys(policy, ['version', 'policy', 'binding', 'discriminator', 'unknownKinds', 'attributionKinds'], label)
+ if (policy.version !== 1 || policy.policy !== 'session-source-attribution'
+ || !['session.user-message.source', 'session.developer-message.source'].includes(String(policy.binding))
+ || policy.discriminator !== 'kind' || policy.unknownKinds !== 'preserve') {
+ throw new Error(`${label}: unsupported source compatibility policy`)
+ }
+ for (const kind of array(policy.attributionKinds, label)) textValue(kind, label)
+ }
if (typeof property.name !== 'string') throw new Error(`${label}: property name must be a string`)
const name = property.name
if (names.has(name)) throw new Error(`${label}: duplicate property ${name}`)
@@ -237,6 +250,14 @@ function parseSchema(value: unknown, label: string): CanonicalSchema {
}
}
const schema = input as unknown as CanonicalSchema
+ for (const node of schema.nodes) {
+ if (node.kind !== 'object') continue
+ for (const property of node.properties) {
+ if (property.compatibility !== undefined && !validSourceCompatibility(schema.nodes, node, property)) {
+ throw new Error(`${label}: invalid source compatibility binding or attribution kinds`)
+ }
+ }
+ }
const canonical = canonicalizeSchema(schema.nodes, schema.root)
if (JSON.stringify(canonical) !== JSON.stringify(schema)) throw new Error(`${label}: schema is not canonical`)
return schema
@@ -261,7 +282,7 @@ export function parseHistoricalPersistenceSnapshot(value: unknown): PersistenceS
function parseSnapshot(value: unknown, historical: boolean): PersistenceSchemaInventory {
const input = record(value, 'schema inventory')
keys(input, ['formatVersion', 'roots', 'types'], 'schema inventory')
- if (input.formatVersion !== 1) throw new Error('unsupported persistence schema normalization version')
+ if (input.formatVersion !== 1 && input.formatVersion !== 2) throw new Error('unsupported persistence schema normalization version')
const names = new Set()
for (const rawRoot of array(input.roots, 'schema roots')) {
const root = record(rawRoot, 'schema root')
@@ -275,14 +296,14 @@ function parseSnapshot(value: unknown, historical: boolean): PersistenceSchemaIn
} else if ((root.kind !== 'header' || !['SessionHeader', 'JsonlHeaderLine'].includes(key))
&& (root.kind !== 'envelope' || key !== 'SessionEventEnvelope')) throw new Error(`invalid schema root ${key}`)
if (root.kind !== 'event' && (root.event !== undefined || root.surface !== undefined)) throw new Error(`${key}: non-event metadata`)
- const schema = parseSchema(root.schema, key)
+ const schema = parseSchema(root.schema, key, input.formatVersion)
if (root.kind === 'event') validateEventMetadata(schema, String(root.event), root.surface === true, historical)
if (digest(root.digest, `${key} digest`) !== schemaDigest(schema)) throw new Error(`${key}: schema digest mismatch`)
}
for (const rawType of array(input.types, 'schema types')) {
const type = record(rawType, 'schema type')
keys(type, ['digest', 'schema', 'names', 'sources'], 'schema type')
- const schema = parseSchema(type.schema, 'shared schema')
+ const schema = parseSchema(type.schema, 'shared schema', input.formatVersion)
if (digest(type.digest, 'shared digest') !== schemaDigest(schema)) throw new Error('shared schema digest mismatch')
for (const name of array(type.names, 'type names')) textValue(name, 'type name')
for (const source of array(type.sources, 'type sources')) {
@@ -339,7 +360,7 @@ function matchUnionVariants(candidates: readonly (readonly number[])[]): number[
return matches
}
-/** Classify structural differences; only optional payload properties and ordinary event additions are additive.
+/** Classify structural differences using the reader promises saved with each schema.
* @param before - predecessor root, or absence for an addition.
* @param after - successor root, or absence for deletion.
* @returns concrete changes and their format-bump requirement.
@@ -392,7 +413,30 @@ export function classifyPersistenceChange(before: PersistenceRoot | null, after:
const child = `${path}.${name}`
if (next === undefined) { add(child, 'property-removed'); continue }
if (property.optional !== next.optional) add(child, next.optional ? 'property-made-optional' : 'property-made-required', scope !== 'body' || !next.optional)
- descend(property.type, next.type, child, scope === 'body' || scope === 'event' && name === 'data' ? 'body' : 'strict')
+ const childScope = scope === 'body' || scope === 'event' && name === 'data' ? 'body' : 'strict'
+ if (property.compatibility !== undefined || next.compatibility !== undefined) {
+ const oldGroups = sourceKindGroups(oldRoot.schema.nodes, property.type)
+ const newGroups = sourceKindGroups(newRoot.schema.nodes, next.type)
+ if (childScope === 'body' && property.compatibility !== undefined && next.compatibility !== undefined
+ && oldGroups !== undefined && newGroups !== undefined
+ && validSourceCompatibility(oldRoot.schema.nodes, oldNode, property)
+ && validSourceCompatibility(newRoot.schema.nodes, newNode, next)
+ && matchingSourceCompatibility(property.compatibility, next.compatibility, oldGroups.keys())) {
+ for (const [kind, oldTypes] of oldGroups) {
+ const newTypes = newGroups.get(kind)
+ if (newTypes === undefined) add(`${child}[kind=${JSON.stringify(kind)}]`, 'union-variants-changed')
+ else differences.push(...compareAlternatives(oldTypes, newTypes, `${child}[kind=${JSON.stringify(kind)}]`, childScope, active))
+ }
+ for (const kind of newGroups.keys()) {
+ if (!oldGroups.has(kind)) add(`${child}[kind=${JSON.stringify(kind)}]`,
+ next.compatibility.attributionKinds.includes(kind) ? 'attribution-kind-added' : 'union-variants-changed',
+ !next.compatibility.attributionKinds.includes(kind))
+ }
+ continue
+ }
+ if (JSON.stringify(property.compatibility) !== JSON.stringify(next.compatibility)) add(child, 'source-policy-changed')
+ }
+ descend(property.type, next.type, child, childScope)
}
for (const [name, property] of newProps) {
if (!oldProps.has(name)) add(`${path}.${name}`, property.optional ? 'optional-property-added' : 'required-property-added', scope !== 'body' || !property.optional)
@@ -419,20 +463,25 @@ export function classifyPersistenceChange(before: PersistenceRoot | null, after:
return differences
}
if (oldNode.kind === 'union' && newNode.kind === 'union') {
- if (oldNode.types.length !== newNode.types.length) return [describe(path, 'union-variants-changed')]
- const candidates = oldNode.types.map(oldType => newNode.types.map(newType => compare(oldType, newType, path, scope, active)))
- const matching = matchUnionVariants(candidates.map(row => row.flatMap((candidate, index) =>
- candidate.every(change => !change.requiresVersionBump) ? [index] : [])))
- if (matching !== undefined) return matching.flatMap((next, previous) => candidates[previous]?.[next] ?? [])
- const oldTypes = new Map(oldNode.types.map(index => [fingerprint(oldRoot.schema, index, 0), index]))
- const newTypes = new Map(newNode.types.map(index => [fingerprint(newRoot.schema, index, 1), index]))
- const removed = [...oldTypes].filter(([hash]) => !newTypes.has(hash)).map(([, index]) => index)
- const added = [...newTypes].filter(([hash]) => !oldTypes.has(hash)).map(([, index]) => index)
- if (removed.length === 1 && added.length === 1) return compare(removed[0] as number, added[0] as number, path, scope, active)
- return [describe(path, 'union-variants-changed')]
+ return compareAlternatives(oldNode.types, newNode.types, path, scope, active)
}
return [describe(path, 'type-changed')]
}
+ function compareAlternatives(
+ oldTypes: readonly number[], newTypes: readonly number[], path: string, scope: Scope, active: ReadonlySet,
+ ): PersistenceTypeChange[] {
+ if (oldTypes.length !== newTypes.length) return [describe(path, 'union-variants-changed')]
+ const candidates = oldTypes.map(oldType => newTypes.map(newType => compare(oldType, newType, path, scope, active)))
+ const matching = matchUnionVariants(candidates.map(row => row.flatMap((candidate, index) =>
+ candidate.every(change => !change.requiresVersionBump) ? [index] : [])))
+ if (matching !== undefined) return matching.flatMap((next, previous) => candidates[previous]?.[next] ?? [])
+ const oldByHash = new Map(oldTypes.map(index => [fingerprint(oldRoot.schema, index, 0), index]))
+ const newByHash = new Map(newTypes.map(index => [fingerprint(newRoot.schema, index, 1), index]))
+ const removed = [...oldByHash].filter(([hash]) => !newByHash.has(hash)).map(([, index]) => index)
+ const added = [...newByHash].filter(([hash]) => !oldByHash.has(hash)).map(([, index]) => index)
+ if (removed.length === 1 && added.length === 1) return compare(removed[0] as number, added[0] as number, path, scope, active)
+ return [describe(path, 'union-variants-changed')]
+ }
changes.push(...compare(0, 0, key, before.kind === 'event' ? 'event' : 'strict', new Set()))
if (changes.length === 0) changes.push(describe(key, 'type-changed'))
return [...new Map(changes.map(change => [JSON.stringify([change.path, change.kind, change.requiresVersionBump]), change])).values()]
@@ -743,7 +792,7 @@ function executeCommand(
root: key, previous: history?.tips.get(key)?.id ?? null,
after: roots.find(root => root.key === key)?.digest ?? null, decision,
})) }
- const snapshot: PersistenceSchemaInventory = { formatVersion: 1, roots, types: [] }
+ const snapshot: PersistenceSchemaInventory = { formatVersion: current.formatVersion, roots, types: [] }
validatePersistenceHistory([...prior, { record: change, snapshot }])
const document = (chinese: boolean): string => {
const supplied = chinese ? prose?.zh : prose?.en
diff --git a/scripts/persistence-releases.spec.ts b/scripts/persistence-releases.spec.ts
index 79ad27920f..23fd96d80a 100644
--- a/scripts/persistence-releases.spec.ts
+++ b/scripts/persistence-releases.spec.ts
@@ -367,7 +367,7 @@ describe('release facts', () => {
const data = fixture()
const snapshotPath = join(data.directory, TAGS[2] + '.schema.json')
const snapshot = readFileSync(snapshotPath, 'utf8')
- writeFileSync(snapshotPath, snapshot.replace('"formatVersion":1', '"formatVersion":2'))
+ writeFileSync(snapshotPath, snapshot.replace('"formatVersion":1', '"formatVersion":3'))
const corrupt = directoryBytes(data.directory)
expect(() => runPersistenceReleases(['--write'], data.root)).toThrow('normalization version')
expect(directoryBytes(data.directory)).toEqual(corrupt)
diff --git a/scripts/persistence-review.spec.ts b/scripts/persistence-review.spec.ts
new file mode 100644
index 0000000000..90e99d2cf3
--- /dev/null
+++ b/scripts/persistence-review.spec.ts
@@ -0,0 +1,135 @@
+/** Semantic review regressions independent of traversal ordinals and display names. */
+
+import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'
+import { tmpdir } from 'node:os'
+import { join } from 'node:path'
+import { describe, expect, it } from 'vitest'
+import { classifyPersistenceChange } from './persistence-changes.ts'
+import { canonicalizeSchema, schemaDigest, type PersistenceSchemaInventory, type SchemaNode, type SchemaProperty } from './persistence-schema-model.ts'
+import { renderPersistenceReview, reviewPersistenceSchemas, runPersistenceReview } from './persistence-review.ts'
+
+function fixture(options: {
+ extraKind?: boolean
+ changed?: boolean
+ ambiguous?: boolean
+ reorder?: boolean
+ tuple?: boolean
+ recursive?: boolean
+} = {}): PersistenceSchemaInventory {
+ const nodes: SchemaNode[] = []
+ const add = (node: SchemaNode): number => nodes.push(node) - 1
+ const literal = (value: string): number => add({ kind: 'literal', value })
+ const text = add({ kind: 'primitive', type: 'string' })
+ const number = add({ kind: 'primitive', type: 'number' })
+ const object = (properties: SchemaProperty[]): number => add({ kind: 'object', properties, indices: [] })
+ const property = (name: string, type: number, optional = false): SchemaProperty => ({ name, type, optional })
+ const snapshot = object([property('kind', literal('hooks-codex')), property('form', literal('snapshot')), property('sections', add({ kind: 'array', element: text }))])
+ const notice = object([property('kind', literal('hooks-codex')), property('form', literal('notice')), property('summary', text)])
+ const changing = object([property('kind', literal('changing')), property('value', options.changed ? number : text)])
+ const variants = [snapshot, notice, changing]
+ if (options.ambiguous) variants.push(object([property('kind', literal('changing')), property('extra', text)]))
+ if (options.extraKind) variants.unshift(object([property('kind', literal('tool-registry'))]))
+ if (options.reorder) variants.reverse()
+ const source = add({ kind: 'union', types: variants })
+ const payloadProperties = [property('source', source)]
+ if (options.tuple) payloadProperties.push(property('tuple', add({ kind: 'tuple', elements: (options.changed ? [number, text] : [text, number]).map(type => ({ type, optional: false, rest: false })) })))
+ if (options.recursive) payloadProperties.push(property('next', nodes.length, true))
+ const payload = object(payloadProperties)
+ const roots = ['agent/inbox/spliced', 'user/message'].map((event) => {
+ const data = event === 'agent/inbox/spliced' ? object([property('inserted', add({ kind: 'array', element: payload }))]) : payload
+ const index = object([property('type', literal(event)), property('data', data)])
+ const schema = canonicalizeSchema(nodes, index)
+ return { key: `event:${event}`, event, kind: 'event' as const, surface: false, digest: schemaDigest(schema), schema }
+ })
+ const types = [...new Map(nodes.map((_, index) => {
+ const schema = canonicalizeSchema(nodes, index)
+ const digest = schemaDigest(schema)
+ const ordinal = index === snapshot ? options.extraKind ? 107 : 106 : index === notice ? options.extraKind ? 108 : 107 : undefined
+ return [digest, { digest, schema, names: ordinal === undefined ? [] : [`event:agent/inbox/spliced.data.inserted[0].source[${String(ordinal)}]`], sources: [] }]
+ })).values()]
+ return { formatVersion: 1, roots, types }
+}
+
+describe('persistence review', () => {
+ it('reports a new kind once across containing roots and never renames unchanged ordinal 107 alternatives', () => {
+ const before = fixture()
+ const after = fixture({ extraKind: true })
+ const saved = JSON.stringify([before, after])
+ const old107 = before.types.find(type => type.names.some(name => name.endsWith('[107]')))
+ const new107 = after.types.find(type => type.names.some(name => name.endsWith('[107]')))
+ expect(old107?.digest).not.toBe(new107?.digest)
+ expect(after.types.find(type => type.digest === old107?.digest)?.names[0]).toMatch(/\[108\]$/u)
+ const report = reviewPersistenceSchemas(before, after)
+ expect(report.evidence).toHaveLength(1)
+ expect(report.evidence[0]).toMatchObject({ kind: 'kind-added', before: null, locations: [
+ { root: 'event:agent/inbox/spliced', path: 'event:agent/inbox/spliced.data.inserted[].source[kind="tool-registry"]' },
+ { root: 'event:user/message', path: 'event:user/message.data.source[kind="tool-registry"]' },
+ ] })
+ const markdown = renderPersistenceReview(report)
+ expect(markdown).not.toContain('hooks-codex')
+ expect(markdown).not.toMatch(/source\[\d+\]/u)
+ for (const root of report.roots) expect(root.changes).toEqual(classifyPersistenceChange(
+ before.roots.find(item => item.key === root.root)!, after.roots.find(item => item.key === root.root)!,
+ ))
+ expect(JSON.stringify([before, after])).toBe(saved)
+ expect(reviewPersistenceSchemas(before, {
+ ...fixture({ extraKind: true, reorder: true }), roots: [...after.roots].reverse(), types: [...after.types].reverse(),
+ })).toEqual(report)
+ })
+
+ it('shows existing kind changes alongside additions without weakening their compatibility result', () => {
+ const report = reviewPersistenceSchemas(fixture(), fixture({ extraKind: true, changed: true }))
+ expect(report.evidence.map(item => item.kind).sort()).toEqual(['kind-added', 'type-changed'])
+ expect(report.evidence.find(item => item.kind === 'type-changed')?.locations[0]?.path).toBe('event:agent/inbox/spliced.data.inserted[].source[kind="changing"].value')
+ expect(report.roots.every(root => root.changes.some(change => change.requiresVersionBump))).toBe(true)
+ })
+
+ it('keeps ambiguous kind matches as additions and removals even when another arm is unchanged', () => {
+ const report = reviewPersistenceSchemas(fixture({ ambiguous: true }), fixture({ ambiguous: true, changed: true }))
+ expect(report.evidence.map(item => item.kind).sort()).toEqual(['variant-added', 'variant-removed'])
+ expect(report.evidence.every(item => item.locations.every(location => !location.path.endsWith('.value')))).toBe(true)
+ })
+
+ it('retains numeric tuple positions and stops recursion without losing sibling evidence', () => {
+ const report = reviewPersistenceSchemas(
+ fixture({ tuple: true, recursive: true }), fixture({ changed: true, tuple: true, recursive: true }),
+ )
+ const paths = report.evidence.flatMap(item => item.locations.map(location => location.path))
+ expect(paths).toContain('event:user/message.data.tuple[0]')
+ expect(paths).toContain('event:user/message.data.tuple[1]')
+ expect(paths.every(path => path.length < 200)).toBe(true)
+ })
+
+ it('separates new roots from structural definitions and preserves classifier diagnostics', () => {
+ const before = fixture()
+ const after = { ...before, roots: before.roots.slice(1) }
+ const report = reviewPersistenceSchemas(before, after)
+ expect(report.roots).toHaveLength(1)
+ expect(report.roots[0]?.changes).toEqual(classifyPersistenceChange(before.roots[0]!, null))
+ expect(report.evidence).toEqual([])
+ expect(renderPersistenceReview(report)).toContain('Root removed: `event:agent/inbox/spliced`')
+ })
+
+ it('reads explicit files without writes and rejects invalid inventories and arguments', () => {
+ const directory = mkdtempSync(join(tmpdir(), 'persistence-review-'))
+ try {
+ const before = join(directory, 'before.json')
+ const after = join(directory, 'after.json')
+ const oldText = JSON.stringify(fixture())
+ const newText = JSON.stringify(fixture({ extraKind: true }))
+ writeFileSync(before, oldText)
+ writeFileSync(after, newText)
+ const args = ['--before', before, '--after', after]
+ expect(JSON.parse(runPersistenceReview([...args, '--json']))).toEqual(reviewPersistenceSchemas(fixture(), fixture({ extraKind: true })))
+ expect(runPersistenceReview(args)).toContain('# Persistence schema review')
+ expect(readFileSync(before, 'utf8')).toBe(oldText)
+ expect(readFileSync(after, 'utf8')).toBe(newText)
+ expect(() => runPersistenceReview(['--before', before])).toThrow(/--after/u)
+ expect(() => runPersistenceReview([...args, '--write'])).toThrow()
+ writeFileSync(after, '{"formatVersion":99}')
+ expect(() => runPersistenceReview(args)).toThrow()
+ } finally {
+ rmSync(directory, { recursive: true, force: true })
+ }
+ })
+})
diff --git a/scripts/persistence-review.ts b/scripts/persistence-review.ts
new file mode 100644
index 0000000000..bd469f7d30
--- /dev/null
+++ b/scripts/persistence-review.ts
@@ -0,0 +1,230 @@
+/** Read-only structural explanations alongside the authoritative persistence classification. */
+
+import { readFileSync } from 'node:fs'
+import { resolve } from 'node:path'
+import { parseArgs } from 'node:util'
+import { classifyPersistenceChange, parsePersistenceSnapshot, type PersistenceTypeChange } from './persistence-changes.ts'
+import { canonicalizeSchema, schemaDigest, type CanonicalSchema, type PersistenceSchemaInventory, type SchemaNode } from './persistence-schema-model.ts'
+import { sourceKindGroups } from './persistence-source-policy.ts'
+
+/** One structural observation, shared across its containing roots. */
+export interface PersistenceReviewEvidence {
+ readonly kind: string
+ readonly field?: string
+ readonly before: string | null
+ readonly after: string | null
+ readonly locations: readonly { readonly root: string; readonly path: string }[]
+}
+
+/** Human explanations cannot override the unchanged classifier results carried per root. */
+export interface PersistenceReview {
+ readonly schemaVersion: 1
+ readonly roots: readonly {
+ readonly root: string
+ readonly before: string | null
+ readonly after: string | null
+ readonly changes: readonly PersistenceTypeChange[]
+ }[]
+ readonly evidence: readonly PersistenceReviewEvidence[]
+ readonly unchangedTypes: number
+}
+
+function compareText(left: string, right: string): number {
+ return left < right ? -1 : left > right ? 1 : 0
+}
+
+function selector(schema: CanonicalSchema, index: number): string | undefined {
+ const node = schema.nodes[index]
+ if (node?.kind !== 'object') return undefined
+ const parts = ['kind', 'type', 'role', 'form'].flatMap((name) => {
+ const property = node.properties.find(property => property.name === name && !property.optional)
+ const value = property === undefined ? undefined : schema.nodes[property.type]
+ return value?.kind === 'literal' && typeof value.value === 'string' ? [`[${name}=${JSON.stringify(value.value)}]`] : []
+ })
+ return parts.length === 0 ? undefined : parts.join('')
+}
+
+function propertyPath(path: string, name: string): string {
+ return /^[A-Za-z_$][\w$]*$/u.test(name) ? `${path}.${name}` : `${path}[${JSON.stringify(name)}]`
+}
+
+/**
+ * Compare explicit inventories without editing records or changing compatibility decisions.
+ * @param before - parsed inventory from the chosen base.
+ * @param after - parsed inventory from the chosen head.
+ * @returns deduplicated structural evidence and exact classifier output for every changed root.
+ */
+export function reviewPersistenceSchemas(before: PersistenceSchemaInventory, after: PersistenceSchemaInventory): PersistenceReview {
+ const oldRoots = new Map(before.roots.map(root => [root.key, root]))
+ const newRoots = new Map(after.roots.map(root => [root.key, root]))
+ const evidence = new Map & { locations: Map }>()
+ const roots = [...new Set([...oldRoots.keys(), ...newRoots.keys()])].sort().flatMap((root) => {
+ const oldRoot = oldRoots.get(root) ?? null
+ const newRoot = newRoots.get(root) ?? null
+ const changes = classifyPersistenceChange(oldRoot, newRoot)
+ if (changes.length === 0) return []
+ if (oldRoot !== null && newRoot !== null) explain(oldRoot.schema, newRoot.schema, root)
+ return [{ root, before: oldRoot?.digest ?? null, after: newRoot?.digest ?? null, changes }]
+ })
+
+ function explain(oldSchema: CanonicalSchema, newSchema: CanonicalSchema, root: string): void {
+ const oldHashes = new Map()
+ const newHashes = new Map()
+ const digest = (side: 'before' | 'after', index: number): string => {
+ const cache = side === 'before' ? oldHashes : newHashes
+ let hash = cache.get(index)
+ if (hash === undefined) {
+ hash = schemaDigest(canonicalizeSchema((side === 'before' ? oldSchema : newSchema).nodes, index))
+ cache.set(index, hash)
+ }
+ return hash
+ }
+ const emit = (kind: string, left: number | null, right: number | null, path: string, field?: string): void => {
+ const change = { kind, ...(field === undefined ? {} : { field }), before: left === null ? null : digest('before', left), after: right === null ? null : digest('after', right) }
+ const key = JSON.stringify(change)
+ const item = evidence.get(key) ?? { ...change, locations: new Map() }
+ item.locations.set(JSON.stringify([root, path]), { root, path })
+ evidence.set(key, item)
+ }
+ const walk = (left: number, right: number, path: string, ancestors: ReadonlySet): void => {
+ if (digest('before', left) === digest('after', right)) return
+ const pair = `${left}:${right}`
+ if (ancestors.has(pair)) return
+ const active = new Set(ancestors).add(pair)
+ const oldNode = oldSchema.nodes[left] as SchemaNode
+ const newNode = newSchema.nodes[right] as SchemaNode
+ if (oldNode.kind === 'object' && newNode.kind === 'object') {
+ const oldProperties = new Map(oldNode.properties.map(property => [property.name, property]))
+ const newProperties = new Map(newNode.properties.map(property => [property.name, property]))
+ for (const name of [...new Set([...oldProperties.keys(), ...newProperties.keys()])].sort()) {
+ const previous = oldProperties.get(name)
+ const next = newProperties.get(name)
+ const child = propertyPath(path, name)
+ if (previous === undefined || next === undefined) {
+ emit(previous === undefined ? 'property-added' : 'property-removed', left, right, child, name)
+ continue
+ }
+ if (previous.optional !== next.optional) emit(next.optional ? 'property-made-optional' : 'property-made-required', left, right, child, name)
+ if (JSON.stringify(previous.compatibility) !== JSON.stringify(next.compatibility)) emit('source-policy-changed', left, right, child, name)
+ walk(previous.type, next.type, child, active)
+ }
+ const oldIndices = new Map(oldNode.indices.map(index => [digest('before', index.key), index]))
+ const newIndices = new Map(newNode.indices.map(index => [digest('after', index.key), index]))
+ if (oldIndices.size !== newIndices.size || [...oldIndices.keys()].some(key => !newIndices.has(key))) emit('index-signature-changed', left, right, path)
+ for (const [key, index] of oldIndices) {
+ const next = newIndices.get(key)
+ if (next !== undefined) walk(index.value, next.value, `${path}[*]`, active)
+ }
+ } else if (oldNode.kind === 'array' && newNode.kind === 'array') {
+ walk(oldNode.element, newNode.element, `${path}[]`, active)
+ } else if (oldNode.kind === 'tuple' && newNode.kind === 'tuple') {
+ if (oldNode.elements.length !== newNode.elements.length) emit('tuple-length-changed', left, right, path)
+ for (const [position, previous] of oldNode.elements.entries()) {
+ const next = newNode.elements[position]
+ if (next === undefined) continue
+ const child = `${path}[${String(position)}]`
+ if (previous.optional !== next.optional || previous.rest !== next.rest) emit('tuple-element-cardinality-changed', left, right, child)
+ walk(previous.type, next.type, child, active)
+ }
+ } else if (oldNode.kind === 'union' && newNode.kind === 'union') {
+ const oldByHash = new Map(oldNode.types.map(index => [digest('before', index), index]))
+ const newByHash = new Map(newNode.types.map(index => [digest('after', index), index]))
+ const removed = [...oldByHash].filter(([hash]) => !newByHash.has(hash)).map(([, index]) => index)
+ const added = [...newByHash].filter(([hash]) => !oldByHash.has(hash)).map(([, index]) => index)
+ // Uniqueness includes unchanged arms: a shared discriminator cannot identify a changed sibling.
+ const unique = (schema: CanonicalSchema, indices: readonly number[]): Map => {
+ const candidates = new Map()
+ for (const index of indices) {
+ const key = selector(schema, index)
+ if (key !== undefined) candidates.set(key, [...candidates.get(key) ?? [], index])
+ }
+ return new Map([...candidates].flatMap(([key, values]) => values.length === 1 ? [[key, values[0] as number]] : []))
+ }
+ const oldSelectors = unique(oldSchema, oldNode.types)
+ const newSelectors = unique(newSchema, newNode.types)
+ const matchedOld = new Set()
+ const matchedNew = new Set()
+ for (const [key, previous] of oldSelectors) {
+ const next = newSelectors.get(key)
+ if (next === undefined || !removed.includes(previous) || !added.includes(next)) continue
+ walk(previous, next, path + key, active)
+ matchedOld.add(previous)
+ matchedNew.add(next)
+ }
+ const oldKinds = sourceKindGroups(oldSchema.nodes, left)
+ const newKinds = sourceKindGroups(newSchema.nodes, right)
+ for (const [side, indices, matched, schema] of [
+ ['before', removed, matchedOld, oldSchema], ['after', added, matchedNew, newSchema],
+ ] as const) {
+ for (const index of indices) {
+ if (matched.has(index)) continue
+ const ownKinds = side === 'before' ? oldKinds : newKinds
+ const otherKinds = side === 'before' ? newKinds : oldKinds
+ const kind = [...ownKinds ?? []].find(([, members]) => members.includes(index))?.[0]
+ const wholeKind = kind !== undefined && otherKinds !== undefined && !otherKinds.has(kind)
+ const suffix = selector(schema, index) ?? ''
+ emit(`${wholeKind ? 'kind' : 'variant'}-${side === 'before' ? 'removed' : 'added'}`,
+ side === 'before' ? index : null, side === 'after' ? index : null, path + suffix)
+ }
+ }
+ } else emit('type-changed', left, right, path)
+ }
+ walk(0, 0, root, new Set())
+ }
+
+ const oldTypes = new Set(before.types.map(type => type.digest))
+ return { schemaVersion: 1, roots, unchangedTypes: after.types.filter(type => oldTypes.has(type.digest)).length,
+ evidence: [...evidence].sort(([a], [b]) => compareText(a, b)).map(([, item]) => ({ ...item,
+ locations: [...item.locations.values()].sort((a, b) => compareText(a.root, b.root) || compareText(a.path, b.path)),
+ })) }
+}
+
+function code(value: string): string {
+ return '`' + value.replaceAll('`', '\\`').replaceAll('|', '\\|') + '`'
+}
+
+/**
+ * Render concise evidence separately from every authoritative root diagnostic.
+ * @param report - result of the explicit inventory comparison.
+ * @returns Markdown with full fingerprints in expandable evidence.
+ */
+export function renderPersistenceReview(report: PersistenceReview): string {
+ const lines = ['# Persistence schema review', '', `${String(report.roots.length)} changed roots; ${String(report.unchangedTypes)} unchanged type fingerprints.`, '',
+ '## Structural evidence', '', 'Display paths use literal discriminators. Ambiguous alternatives remain separate additions and removals; this explanation does not decide compatibility.', '']
+ for (const root of report.roots) {
+ if (root.before === null || root.after === null) lines.push(`- Root ${root.before === null ? 'added' : 'removed'}: ${code(root.root)}.`)
+ }
+ for (const item of report.evidence) {
+ lines.push('', `${item.kind}${item.field === undefined ? '' : `: ${item.field.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>')}`}
`, '',
+ `Before: ${item.before === null ? 'absent' : code(item.before)}; after: ${item.after === null ? 'absent' : code(item.after)}.`, '',
+ ...item.locations.map(location => `- ${code(location.path)}`), '', ' ')
+ }
+ lines.push('', '## Authoritative compatibility results', '')
+ for (const root of report.roots) {
+ lines.push(`### ${code(root.root)}`, '', `Decision: **${root.changes.some(change => change.requiresVersionBump) ? 'version-bump' : 'same-version'}**.`, '',
+ ...root.changes.map(change => `- ${code(change.path)}: ${change.description} (${code(change.kind)}; requiresVersionBump: ${String(change.requiresVersionBump)}).`), '')
+ }
+ return lines.join('\n').trimEnd() + '\n'
+}
+
+/**
+ * Read two explicit inventory files and return Markdown or JSON without mutating either.
+ * @param args - --before and --after paths, and optional --json.
+ * @returns structural evidence and exact compatibility results.
+ */
+export function runPersistenceReview(args: readonly string[]): string {
+ const { values } = parseArgs({ args: [...args], options: { before: { type: 'string' }, after: { type: 'string' }, json: { type: 'boolean' } }, strict: true, allowPositionals: false })
+ if (values.before === undefined || values.after === undefined) throw new Error('persistence review: --before and --after inventory paths are required')
+ const read = (path: string): PersistenceSchemaInventory => parsePersistenceSnapshot(JSON.parse(readFileSync(path, 'utf8')))
+ const report = reviewPersistenceSchemas(read(values.before), read(values.after))
+ return values.json ? JSON.stringify(report, null, 2) + '\n' : renderPersistenceReview(report)
+}
+
+if (process.argv[1] !== undefined && resolve(process.argv[1]) === import.meta.filename) {
+ try {
+ process.stdout.write(runPersistenceReview(process.argv.slice(2)))
+ } catch (error: unknown) {
+ console.error(error instanceof Error ? error.message : String(error))
+ process.exitCode = 1
+ }
+}
diff --git a/scripts/persistence-schema-model.spec.ts b/scripts/persistence-schema-model.spec.ts
index 2750650543..fb452b5bfa 100644
--- a/scripts/persistence-schema-model.spec.ts
+++ b/scripts/persistence-schema-model.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest'
-import { canonicalizeSchema, isArbitraryJsonSchema, schemaDigest, type SchemaNode } from './persistence-schema-model.ts'
+import { canonicalizeSchema, isArbitraryJsonSchema, schemaDigest, type SchemaNode, type SourceCompatibility } from './persistence-schema-model.ts'
const string: SchemaNode = { kind: 'primitive', type: 'string' }
const number: SchemaNode = { kind: 'primitive', type: 'number' }
@@ -87,3 +87,23 @@ describe('canonical persisted type graphs', () => {
expect(() => canonicalizeSchema([{ kind: 'union', types: [0] }], 0)).toThrow('union cycle')
})
})
+
+
+describe('policy-aware graph normalization', () => {
+ it('normalizes recorded policy fields and kind order without changing unrelated graph digests', () => {
+ const policy: SourceCompatibility = { version: 1, policy: 'session-source-attribution', binding: 'session.user-message.source',
+ discriminator: 'kind', unknownKinds: 'preserve', attributionKinds: ['b', 'a'] }
+ const object = (compatibility: SourceCompatibility): SchemaNode => ({ kind: 'object', indices: [], properties: [
+ { name: 'source', type: 1, optional: false, compatibility },
+ ] })
+ const reordered = { attributionKinds: ['a', 'b', 'a'], unknownKinds: policy.unknownKinds, discriminator: policy.discriminator,
+ binding: policy.binding, policy: policy.policy, version: policy.version }
+ const left = canonicalizeSchema([object(policy), string], 0)
+ const right = canonicalizeSchema([object(reordered), string], 0)
+ expect(left).toEqual(right)
+ expect(schemaDigest(left)).toBe(schemaDigest(right))
+ const unannotated = canonicalizeSchema([{ kind: 'object', indices: [], properties: [{ name: 'source', type: 1, optional: false }] }, string], 0)
+ expect(schemaDigest(left)).not.toBe(schemaDigest(unannotated))
+ expect(schemaDigest(canonicalizeSchema(left.nodes, 1))).toBe(schemaDigest(canonicalizeSchema([string], 0)))
+ })
+})
diff --git a/scripts/persistence-schema-model.ts b/scripts/persistence-schema-model.ts
index f12213b9f1..a37573cc2d 100644
--- a/scripts/persistence-schema-model.ts
+++ b/scripts/persistence-schema-model.ts
@@ -5,11 +5,22 @@
import { createHash } from 'node:crypto'
+/** Recorded reader promise for explicitly attributed source additions. */
+export interface SourceCompatibility {
+ readonly version: 1
+ readonly policy: 'session-source-attribution'
+ readonly binding: 'session.user-message.source' | 'session.developer-message.source'
+ readonly discriminator: 'kind'
+ readonly unknownKinds: 'preserve'
+ readonly attributionKinds: readonly string[]
+}
+
/** One JSON property, with absence represented independently of its value type. */
export interface SchemaProperty {
readonly name: string
readonly type: number
readonly optional: boolean
+ readonly compatibility?: SourceCompatibility
}
/** One positional tuple element. */
@@ -55,7 +66,7 @@ export interface PersistenceType {
/** Complete current-source persistence inventory; version pins normalization too. */
export interface PersistenceSchemaInventory {
- readonly formatVersion: 1
+ readonly formatVersion: 1 | 2
readonly roots: readonly PersistenceRoot[]
readonly types: readonly PersistenceType[]
}
@@ -85,7 +96,13 @@ function mapNode(node: SchemaNode, ref: (id: number) => number): SchemaNode {
case 'object': return {
kind: 'object',
properties: [...node.properties].sort((left, right) => compare(left.name, right.name))
- .map(property => ({ name: property.name, type: ref(property.type), optional: property.optional })),
+ .map(property => ({ name: property.name, type: ref(property.type), optional: property.optional,
+ ...(property.compatibility === undefined ? {} : { compatibility: {
+ version: property.compatibility.version, policy: property.compatibility.policy, binding: property.compatibility.binding,
+ discriminator: property.compatibility.discriminator, unknownKinds: property.compatibility.unknownKinds,
+ attributionKinds: [...new Set(property.compatibility.attributionKinds)].sort(compare),
+ } }),
+ })),
indices: node.indices.map(index => ({ key: ref(index.key), value: ref(index.value) }))
.sort((left, right) => left.key - right.key || left.value - right.value),
}
@@ -215,7 +232,17 @@ function normalizeUnions(input: readonly SchemaNode[]): SchemaNode[] {
* @returns lowercase hexadecimal digest.
*/
export function schemaDigest(schema: CanonicalSchema): string {
- return createHash('sha256').update('dsh-persistence-schema-v1\n').update(JSON.stringify(schema)).digest('hex')
+ const version = schemaHasCompatibility(schema) ? 2 : 1
+ return createHash('sha256').update(`dsh-persistence-schema-v${String(version)}\n`).update(JSON.stringify(schema)).digest('hex')
+}
+
+/**
+ * Identify graphs that require the policy-aware fingerprint domain.
+ * @param schema - resolved persisted type.
+ * @returns whether any reachable property records compatibility metadata.
+ */
+export function schemaHasCompatibility(schema: CanonicalSchema): boolean {
+ return schema.nodes.some(node => node.kind === 'object' && node.properties.some(property => property.compatibility !== undefined))
}
/**
diff --git a/scripts/persistence-schema.spec.ts b/scripts/persistence-schema.spec.ts
index 1ebdced397..f6517faa3e 100644
--- a/scripts/persistence-schema.spec.ts
+++ b/scripts/persistence-schema.spec.ts
@@ -4,6 +4,7 @@ import { dirname, join, resolve } from 'node:path'
import { afterEach, describe, expect, it } from 'vitest'
import { collectLogEvents } from './gen-persistence-catalog.ts'
import { extractPersistenceSchema } from './persistence-schema.ts'
+import { classifyPersistenceChange, parsePersistenceSnapshot } from './persistence-changes.ts'
import { canonicalizeSchema, isArbitraryJsonSchema, schemaDigest, type PersistenceSchemaInventory } from './persistence-schema-model.ts'
const roots: string[] = []
@@ -55,6 +56,16 @@ function event(inventory: PersistenceSchemaInventory, name = 'test/record'): str
}
describe('persistent source type extraction', () => {
+ it('keeps authored names and anonymous declaration locations without synthesized traversal names', () => {
+ const root = fixture('interface Section { text: string }\nexport interface Payload { inserted: { source: { kind: "hooks-codex"; sections: Section[] } }[] }')
+ const inventory = extractPersistenceSchema(root)
+ expect(inventory.types.flatMap(type => type.names).every(name => name.includes('#'))).toBe(true)
+ expect(inventory.types.some(type => type.names.includes('packages/domain/payload/src/types.ts#Section'))).toBe(true)
+ expect(inventory.types.some(type => type.names.length === 0 && type.sources.includes('packages/domain/payload/src/types.ts:2'))).toBe(true)
+ expect(inventory.types.some(type => type.schema.nodes[0]?.kind === 'array' && type.names.length === 0)).toBe(true)
+ expect(parsePersistenceSnapshot(inventory)).toEqual(inventory)
+ })
+
it('ignores alias names, files, documentation, readonly, brands and property order', () => {
const left = fixture('declare const brand: unique symbol; type Id = string & {readonly [brand]: "Id"}; export interface Payload { readonly id: Id; value?: number }')
const right = fixture('type Renamed = string; /** Different documentation. */ export type Payload = {value?: number; id: Renamed}')
@@ -322,3 +333,165 @@ interface SessionEventMap {
}
})
})
+
+function sourceFixture(producers: string, role: 'user' | 'developer' = 'user'): string {
+ const root = fixture(`export type Payload = import('../../../llm/llm/src/message.js').${role === 'user' ? 'UserMessage' : 'DeveloperMessage'}`)
+ put(root, 'packages/llm/llm/src/message.ts', `
+export interface MessageSourceMap {
+ semantic: {kind: 'semantic'; value: string}
+ ${producers}
+}
+export type MessageSource = MessageSourceMap[keyof MessageSourceMap]
+export interface MessageBase {
+ /** @persistenceSource user developer */
+ source: MessageSource
+}
+export interface UserMessage extends MessageBase {
+ role: 'user'
+}
+export interface DeveloperMessage extends MessageBase {
+ role: 'developer'
+}
+`)
+ return root
+}
+
+const ATTRIBUTION = '/** @persistenceAttribution */'
+
+describe('source compatibility authoring', () => {
+ it.each(['user', 'developer'] as const)('records the %s binding and qualifies complete wire-kind groups', (role) => {
+ const before = extractPersistenceSchema(sourceFixture('', role))
+ const after = extractPersistenceSchema(sourceFixture(`${ATTRIBUTION} unrelatedMapKey: {kind: 'attribution'} & ({form?: never} | {form: 'notice'; summary: string})`, role))
+ expect(after.formatVersion).toBe(2)
+ const root = after.roots.find(root => root.kind === 'event')!
+ const property = root.schema.nodes.flatMap(node => node.kind === 'object' ? node.properties : []).find(property => property.compatibility !== undefined)!
+ expect(property.compatibility).toEqual({ version: 1, policy: 'session-source-attribution', binding: `session.${role}-message.source`,
+ discriminator: 'kind', unknownKinds: 'preserve', attributionKinds: ['attribution'] })
+ expect(classifyPersistenceChange(before.roots.find(root => root.kind === 'event')!, root))
+ .toEqual([expect.objectContaining({ kind: 'attribution-kind-added', requiresVersionBump: false })])
+ expect(parsePersistenceSnapshot({ ...after, types: [] })).toEqual({ ...after, types: [] })
+ })
+
+ it('binds inherited source declarations only on explicitly eligible required roles', () => {
+ const root = sourceFixture("system: {kind: 'system-prompt'}; model: {kind: 'model'}; tool: {kind: 'tool'}")
+ const core = 'packages/llm/llm/src/message.ts'
+ put(root, core, readFileSync(join(root, core), 'utf8') + `
+export interface SystemMessage extends MessageBase {role: 'system'; source: MessageSourceMap['system']}
+export interface AssistantMessage extends MessageBase {role: 'assistant'; source: MessageSourceMap['model']}
+export interface ToolMessage extends MessageBase {role: 'tool'; source: MessageSourceMap['tool']}
+export interface UnlistedRole extends MessageBase {role: 'other'}
+export interface OptionalRole extends MessageBase {role?: 'user'}
+export interface BroadRole extends MessageBase {role: 'user' | 'developer'}
+export interface OverriddenUser extends MessageBase {role: 'user'; source: MessageSource}
+`)
+ put(root, 'packages/domain/payload/src/types.ts', `
+import type * as M from '../../../llm/llm/src/message.js'
+export interface Payload {
+ user: M.UserMessage
+ developer: M.DeveloperMessage
+ system: M.SystemMessage
+ assistant: M.AssistantMessage
+ tool: M.ToolMessage
+ bare: M.MessageBase
+ unlisted: M.UnlistedRole
+ optional: M.OptionalRole
+ broad: M.BroadRole
+ override: M.OverriddenUser
+ unrelated: {role: 'user'; source: M.MessageSource}
+}
+`)
+ const schema = extractPersistenceSchema(root).roots.find(root => root.kind === 'event')!.schema
+ const payload = schema.nodes.find(node => node.kind === 'object' && node.properties.some(property => property.name === 'unrelated'))!
+ if (payload.kind !== 'object') throw new Error('missing payload fixture')
+ const bindings = Object.fromEntries(payload.properties.map((property) => {
+ const message = schema.nodes[property.type]
+ if (message?.kind !== 'object') throw new Error('missing message fixture')
+ return [property.name, message.properties.find(property => property.name === 'source')?.compatibility?.binding]
+ }))
+ expect(bindings).toEqual({
+ user: 'session.user-message.source', developer: 'session.developer-message.source',
+ system: undefined, assistant: undefined, tool: undefined, bare: undefined, unlisted: undefined,
+ optional: undefined, broad: undefined, override: undefined, unrelated: undefined,
+ })
+ })
+
+ it('keeps roles outside the annotation list strict', () => {
+ const root = sourceFixture('', 'developer')
+ const core = 'packages/llm/llm/src/message.ts'
+ put(root, core, readFileSync(join(root, core), 'utf8').replace('@persistenceSource user developer', '@persistenceSource user'))
+ const schema = extractPersistenceSchema(root)
+ expect(schema.formatVersion).toBe(1)
+ expect(schema.roots.flatMap(root => root.schema.nodes).flatMap(node => node.kind === 'object' ? node.properties : [])
+ .every(property => property.compatibility === undefined)).toBe(true)
+ })
+
+ it.each(['', 'user user', 'assistant', 'user developer tool'])('rejects invalid eligible role list %s', (roles) => {
+ const root = sourceFixture('')
+ const core = 'packages/llm/llm/src/message.ts'
+ put(root, core, readFileSync(join(root, core), 'utf8').replace('@persistenceSource user developer', `@persistenceSource ${roles}`))
+ expect(() => extractPersistenceSchema(root)).toThrow('invalid @persistenceSource binding')
+ })
+
+ it('keeps qualification independent of map-key spelling, source order and union-arm order', () => {
+ const left = sourceFixture(`${ATTRIBUTION} left: {kind: 'attribution'} & ({form?: never} | {form: 'notice'; summary: string})`)
+ const right = sourceFixture(`${ATTRIBUTION} right: ({summary: string; form: 'notice'} | {form?: never}) & {kind: 'attribution'}`)
+ expect(extractPersistenceSchema(left).roots).toEqual(extractPersistenceSchema(right).roots)
+ })
+
+ it('finds producer-owned qualifications in independently compiled module augmentations', () => {
+ const root = sourceFixture('')
+ const before = extractPersistenceSchema(root)
+ put(root, 'packages/llm/llm/src/producer.ts', `import './message.js'
+declare module './message.js' {
+ interface MessageSourceMap {
+ ${ATTRIBUTION}
+ catalogKey: {kind: 'external-producer'}
+ }
+}`)
+ const after = extractPersistenceSchema(root)
+ expect(classifyPersistenceChange(before.roots.find(root => root.kind === 'event')!, after.roots.find(root => root.kind === 'event')!))
+ .toEqual([expect.objectContaining({ kind: 'attribution-kind-added', requiresVersionBump: false })])
+ })
+
+ it('does not qualify unmarked additions or structurally equal unbound fields', () => {
+ const before = sourceFixture('')
+ const after = sourceFixture("unmarked: {kind: 'new'}")
+ expect(classifyPersistenceChange(extractPersistenceSchema(before).roots.find(root => root.kind === 'event')!,
+ extractPersistenceSchema(after).roots.find(root => root.kind === 'event')!).some(change => change.requiresVersionBump)).toBe(true)
+ const left = fixture("export interface Payload { source: {kind: 'old'} }")
+ const right = fixture("export interface Payload { source: {kind: 'old'} | {kind: 'new'} }")
+ expect(classifyPersistenceChange(extractPersistenceSchema(left).roots.find(root => root.kind === 'event')!,
+ extractPersistenceSchema(right).roots.find(root => root.kind === 'event')!).some(change => change.requiresVersionBump)).toBe(true)
+ })
+
+ it.each([
+ [`${ATTRIBUTION} broad: {kind: string}`, 'one literal wire kind'],
+ [`${ATTRIBUTION} optional: {kind?: 'new'}`, 'one literal wire kind'],
+ [`${ATTRIBUTION} ambiguous: {kind: 'a'} | {kind: 'b'}`, 'one literal wire kind'],
+ [`${ATTRIBUTION} duplicate: {kind: 'semantic'}`, 'conflicting attribution'],
+ [`${ATTRIBUTION} first: {kind: 'same'};\n${ATTRIBUTION} second: {kind: 'same'; value: number}`, 'conflicting attribution'],
+ ['broadUnmarked: {kind: string}', 'invalid source compatibility'],
+ ...['model', 'tool', 'system-prompt', 'compact-checkpoint', 'dsh-session-title-llm', 'tool-registry', 'runtime-context', 'plugin']
+ .map(kind => [`${ATTRIBUTION} forbidden: {kind: '${kind}'}`, 'invalid source compatibility']),
+ ["/** @persistenceAttribution yes */ invalid: {kind: 'new'}", 'invalid @persistenceAttribution'],
+ ['/** @persistenceAttribution\n * @persistenceAttribution */ duplicateTag: {kind: \'new\'}', 'invalid @persistenceAttribution'],
+ ])('rejects invalid producer declaration %s', (producer, error) => {
+ expect(() => extractPersistenceSchema(sourceFixture(producer))).toThrow(error)
+ })
+
+ it.each(['auto-review', 'compact-basic', 'code-mode'])('rejects reintroduced historical kind %s as new attribution', (kind) => {
+ for (const role of ['user', 'developer'] as const) {
+ const root = sourceFixture(`${ATTRIBUTION} reintroduced: {kind: '${kind}'}`, role)
+ expect(() => extractPersistenceSchema(root)).toThrow('invalid source compatibility')
+ }
+ })
+
+ it('rejects attribution and binding annotations outside their declared owners', () => {
+ const misplaced = sourceFixture('')
+ put(misplaced, 'packages/domain/payload/src/types.ts', `${ATTRIBUTION} export interface Payload {kind: 'new'}`)
+ expect(() => extractPersistenceSchema(misplaced)).toThrow('must annotate a MessageSourceMap producer property')
+ const source = sourceFixture('')
+ put(source, 'packages/domain/payload/src/types.ts', "export interface Payload {role: 'user';\n/** @persistenceSource user */\nsource: {kind: 'new'}}")
+ expect(() => extractPersistenceSchema(source)).toThrow('invalid @persistenceSource binding')
+ })
+})
diff --git a/scripts/persistence-schema.ts b/scripts/persistence-schema.ts
index 2120b0874c..7293196d7e 100644
--- a/scripts/persistence-schema.ts
+++ b/scripts/persistence-schema.ts
@@ -4,15 +4,19 @@ import { readFileSync } from 'node:fs'
import { dirname, extname, relative, resolve, sep } from 'node:path'
import ts from 'typescript'
import { collectLogEvents } from './persistence-catalog-source.ts'
+import { sourceCompatibilityAnnotations } from './persistence-source-annotations.ts'
+import { validSourceCompatibility } from './persistence-source-policy.ts'
import {
canonicalizeSchema,
schemaChildren,
schemaDigest,
+ schemaHasCompatibility,
type PersistenceRoot,
type PersistenceSchemaInventory,
type PersistenceType,
type SchemaNode,
type SchemaProperty,
+ type SourceCompatibility,
} from './persistence-schema-model.ts'
interface DeclarationMetadata {
@@ -207,6 +211,7 @@ class SchemaExtractor {
private readonly declarationMetadata = new Map()
private readonly checker: ts.TypeChecker
+ private readonly sourcePolicies: ReadonlyMap
constructor(
private readonly root: string,
@@ -214,6 +219,7 @@ class SchemaExtractor {
private readonly declarationSources: ReadonlyMap,
) {
this.checker = program.getTypeChecker()
+ this.sourcePolicies = sourceCompatibilityAnnotations(root, program)
}
convert(type: ts.Type, site: ts.Node): number {
@@ -294,7 +300,11 @@ class SchemaExtractor {
if (optional && (propertyType.isUnion() ? propertyType.types : [propertyType])
.every(member => (member.flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Never)) !== 0)) continue
const child = this.valueType(propertyType, declaration, optional)
- properties.push({ name: property.getName(), type: child, optional })
+ const policies = this.propertyPolicies(type, property, declaration)
+ if (policies.length > 1) this.fail(type, declaration, 'ambiguous source compatibility binding')
+ properties.push({ name: property.getName(), type: child, optional,
+ ...(policies[0] === undefined ? {} : { compatibility: policies[0] }),
+ })
}
const indices = this.checker.getIndexInfosOfType(type).map(info => ({
key: this.convert(info.keyType, site),
@@ -304,6 +314,19 @@ class SchemaExtractor {
return { kind: 'object', properties, indices }
}
+ private propertyPolicies(type: ts.Type, property: ts.Symbol, site: ts.Node): readonly SourceCompatibility[] {
+ const declared = (property.declarations ?? []).flatMap(declaration => this.sourcePolicies.get(declaration) ?? [])
+ if (declared.length === 0) return []
+ const roleProperty = this.checker.getPropertyOfType(type, 'role')
+ if (roleProperty === undefined || (roleProperty.flags & ts.SymbolFlags.Optional) !== 0) return []
+ const role = this.checker.getTypeOfSymbolAtLocation(roleProperty, site)
+ if (!(role.flags & ts.TypeFlags.StringLiteral)) return []
+ const binding = (role as ts.StringLiteralType).value === 'user' ? 'session.user-message.source'
+ : (role as ts.StringLiteralType).value === 'developer' ? 'session.developer-message.source'
+ : undefined
+ return declared.filter(policy => policy.binding === binding)
+ }
+
private rejectClass(type: ts.Type, site: ts.Node): void {
const symbol = type.getSymbol()
if (symbol?.declarations?.some(declaration => ts.isClassDeclaration(declaration) || ts.isClassExpression(declaration))) {
@@ -354,6 +377,14 @@ class SchemaExtractor {
}
inventory(inputs: readonly RootInput[]): PersistenceSchemaInventory {
+ for (const node of this.nodes) {
+ if (node.kind !== 'object') continue
+ for (const property of node.properties) {
+ if (property.compatibility !== undefined && !validSourceCompatibility(this.nodes, node, property)) {
+ throw new PersistenceSchemaError('persistence schema: invalid source compatibility binding or attribution kinds')
+ }
+ }
+ }
const roots = inputs.map((input) => {
const schema = canonicalizeSchema(this.nodes, input.node)
return {
@@ -366,22 +397,13 @@ class SchemaExtractor {
}
})
const found = new Set()
- const paths = new Map>()
- const visit = (id: number, path: string): void => {
- const names = paths.get(id) ?? new Set()
- names.add(path)
- paths.set(id, names)
+ const visit = (id: number): void => {
if (found.has(id)) return
found.add(id)
const node = this.nodes[id] as SchemaNode
- if (node.kind === 'object') {
- for (const property of node.properties) visit(property.type, `${path}.${property.name}`)
- for (const index of node.indices) { visit(index.key, `${path}.[key]`); visit(index.value, `${path}.[value]`) }
- } else {
- for (const [index, child] of schemaChildren(node).entries()) visit(child, `${path}[${String(index)}]`)
- }
+ for (const child of schemaChildren(node)) visit(child)
}
- for (const input of inputs) visit(input.node, input.key)
+ for (const input of inputs) visit(input.node)
const types = new Map; sources: Set }>()
for (const id of found) {
const schema = canonicalizeSchema(this.nodes, id)
@@ -390,14 +412,10 @@ class SchemaExtractor {
const declarationMetadata = this.declarationMetadata.get(id)
for (const name of declarationMetadata?.names ?? []) item.names.add(name)
for (const source of declarationMetadata?.sources ?? []) item.sources.add(source)
- const kind = schema.nodes[0]?.kind
- if (kind !== 'primitive' && kind !== 'literal' && (declarationMetadata === undefined || declarationMetadata.names.size === 0)) {
- for (const path of paths.get(id) ?? []) item.names.add(path)
- }
types.set(digest, item)
}
return {
- formatVersion: 1,
+ formatVersion: roots.some(root => schemaHasCompatibility(root.schema)) ? 2 : 1,
roots,
types: [...types].sort(([left], [right]) => compare(left, right)).map(([digest, item]) => ({
digest,
diff --git a/scripts/persistence-source-annotations.ts b/scripts/persistence-source-annotations.ts
new file mode 100644
index 0000000000..2f22e1d4ef
--- /dev/null
+++ b/scripts/persistence-source-annotations.ts
@@ -0,0 +1,81 @@
+/** Resolve producer opt-ins and core-owned source bindings before schema extraction. */
+
+import { relative, resolve, sep } from 'node:path'
+import ts from 'typescript'
+import type { SourceCompatibility } from './persistence-schema-model.ts'
+
+const CORE_SOURCE = 'packages/llm/llm/src/message.ts'
+
+/**
+ * Resolve explicit authoring annotations without using type names in recorded history.
+ * @param root - repository root.
+ * @param program - the complete source-only persistence compiler program.
+ * @returns policies keyed by the original source property declaration.
+ */
+export function sourceCompatibilityAnnotations(
+ root: string, program: ts.Program,
+): ReadonlyMap {
+ const checker = program.getTypeChecker()
+ const bindings = new Map()
+ const qualifications = new Set()
+ const core = program.getSourceFile(resolve(root, CORE_SOURCE))
+ for (const file of program.getSourceFiles()) {
+ const path = relative(root, file.fileName).split(sep).join('/')
+ if (!path.startsWith('packages/') || path.includes('/node_modules/')) continue
+ const visit = (node: ts.Node): void => {
+ for (const tag of ts.getJSDocTags(node)) {
+ if (tag.tagName.text === 'persistenceSource') {
+ const roles = typeof tag.comment === 'string' ? tag.comment.trim().split(/\s+/u) : []
+ if (!ts.isPropertySignature(node) || file !== core || node.name.getText() !== 'source'
+ || !ts.isInterfaceDeclaration(node.parent) || node.parent.name.text !== 'MessageBase'
+ || roles.length === 0 || roles.some(role => role !== 'user' && role !== 'developer')
+ || new Set(roles).size !== roles.length || bindings.has(node)) {
+ throw new Error(`persistence schema: invalid @persistenceSource binding in ${path}`)
+ }
+ bindings.set(node, roles as ('user' | 'developer')[])
+ }
+ if (tag.tagName.text === 'persistenceAttribution') {
+ if (tag.comment !== undefined || qualifications.has(node)) throw new Error(`persistence schema: invalid @persistenceAttribution in ${path}`)
+ qualifications.add(node)
+ }
+ }
+ ts.forEachChild(node, visit)
+ }
+ visit(file)
+ }
+ const sourceMap = core?.statements.find((node): node is ts.InterfaceDeclaration => ts.isInterfaceDeclaration(node) && node.name.text === 'MessageSourceMap')
+ const byKind = new Map()
+ if (sourceMap !== undefined) {
+ for (const property of checker.getPropertiesOfType(checker.getTypeAtLocation(sourceMap))) {
+ const declarations = property.declarations ?? []
+ const marked = declarations.filter(declaration => qualifications.has(declaration))
+ for (const declaration of marked) qualifications.delete(declaration)
+ if (marked.length !== 0 && marked.length !== declarations.length) throw new Error(`persistence schema: conflicting attribution for ${property.name}`)
+ const site = property.valueDeclaration ?? declarations[0] ?? sourceMap
+ const type = checker.getTypeOfSymbolAtLocation(property, site)
+ const kinds = new Set()
+ for (const alternative of type.isUnion() ? type.types : [type]) {
+ const discriminator = alternative.getProperty('kind')
+ const kind = discriminator === undefined ? undefined : checker.getTypeOfSymbolAtLocation(discriminator, site)
+ if (discriminator === undefined || (discriminator.flags & ts.SymbolFlags.Optional) !== 0 || kind === undefined
+ || !(kind.flags & ts.TypeFlags.StringLiteral) || (kind as ts.StringLiteralType).value.length === 0) {
+ if (marked.length > 0) throw new Error(`persistence schema: attribution ${property.name} requires one literal wire kind`)
+ continue
+ }
+ kinds.add((kind as ts.StringLiteralType).value)
+ }
+ if (marked.length > 0 && kinds.size !== 1) throw new Error(`persistence schema: attribution ${property.name} requires one literal wire kind`)
+ for (const kind of kinds) {
+ const qualified = marked.length > 0
+ if (byKind.has(kind) && (byKind.get(kind) === true || qualified)) throw new Error(`persistence schema: conflicting attribution for wire kind ${kind}`)
+ byKind.set(kind, qualified)
+ }
+ }
+ }
+ if (qualifications.size > 0) throw new Error('persistence schema: @persistenceAttribution must annotate a MessageSourceMap producer property')
+ const attributionKinds = [...byKind].filter(([, qualified]) => qualified).map(([kind]) => kind).sort()
+ return new Map([...bindings].map(([declaration, roles]) => [declaration, roles.map(role => ({
+ version: 1, policy: 'session-source-attribution', binding: role === 'user' ? 'session.user-message.source' : 'session.developer-message.source',
+ discriminator: 'kind', unknownKinds: 'preserve', attributionKinds,
+ }))]))
+}
diff --git a/scripts/persistence-source-policy.ts b/scripts/persistence-source-policy.ts
new file mode 100644
index 0000000000..6af2f32011
--- /dev/null
+++ b/scripts/persistence-source-policy.ts
@@ -0,0 +1,69 @@
+/** Literal source groups and the supported reader promise saved in schema history. */
+
+import type { SchemaNode, SchemaProperty, SourceCompatibility } from './persistence-schema-model.ts'
+
+// Reserve role and shared-consumer identities, frozen rename targets, and request-only producer identities against reuse.
+// Existing kinds outside this set also reject retroactive qualification during comparison.
+const RESERVED_SOURCE_KINDS = new Set([
+ 'user', 'model', 'tool', 'system-prompt', 'compact-checkpoint', 'dsh-session-title-llm', 'tool-registry', 'runtime-context', 'plugin',
+ 'auto-review', 'compact-basic', 'code-mode',
+])
+
+/**
+ * Group source alternatives by their required literal wire discriminator.
+ * @param nodes - self-contained type graph.
+ * @param index - source property value.
+ * @returns kind groups, or undefined when any alternative is not a closed source record.
+ */
+export function sourceKindGroups(nodes: readonly SchemaNode[], index: number): Map | undefined {
+ const source = nodes[index]
+ const alternatives = source?.kind === 'union' ? source.types : [index]
+ const groups = new Map()
+ for (const alternative of alternatives) {
+ const node = nodes[alternative]
+ if (node?.kind !== 'object') return undefined
+ const property = node.properties.find(property => property.name === 'kind')
+ const kind = property === undefined ? undefined : nodes[property.type]
+ if (property?.optional !== false || kind?.kind !== 'literal' || typeof kind.value !== 'string' || kind.value.length === 0) return undefined
+ const group = groups.get(kind.value) ?? []
+ group.push(alternative)
+ groups.set(kind.value, group)
+ }
+ return groups
+}
+
+/**
+ * Validate the supported policy and its containing message/source declaration.
+ * @param nodes - self-contained graph.
+ * @param owner - object carrying the explicitly bound source property.
+ * @param property - bound source property.
+ * @returns whether the metadata authorizes source-group comparison.
+ */
+export function validSourceCompatibility(
+ nodes: readonly SchemaNode[], owner: SchemaNode, property: SchemaProperty,
+): boolean {
+ const policy = property.compatibility
+ if (policy === undefined || property.name !== 'source' || property.optional || owner.kind !== 'object') return false
+ const roleProperty = owner.properties.find(property => property.name === 'role')
+ const role = roleProperty === undefined ? undefined : nodes[roleProperty.type]
+ if (roleProperty?.optional !== false || role?.kind !== 'literal'
+ || !(role.value === 'user' && policy.binding === 'session.user-message.source'
+ || role.value === 'developer' && policy.binding === 'session.developer-message.source')) return false
+ const groups = sourceKindGroups(nodes, property.type)
+ return groups !== undefined && policy.attributionKinds.every(kind => groups.has(kind) && !RESERVED_SOURCE_KINDS.has(kind))
+}
+
+/**
+ * Check that both recorded promises agree and no existing kind changes qualification.
+ * Both inputs are validated v1 policies with fixed policy, discriminator, and preservation fields.
+ * @param before - predecessor promise.
+ * @param after - successor promise.
+ * @param existingKinds - predecessor wire kinds, including semantic groups.
+ * @returns whether the additive rule applies to this transition.
+ */
+export function matchingSourceCompatibility(
+ before: SourceCompatibility, after: SourceCompatibility, existingKinds: Iterable,
+): boolean {
+ return before.binding === after.binding
+ && [...existingKinds].every(kind => before.attributionKinds.includes(kind) === after.attributionKinds.includes(kind))
+}
diff --git a/scripts/render-persistence-schema.spec.ts b/scripts/render-persistence-schema.spec.ts
index 7b1577e6a7..129219532b 100644
--- a/scripts/render-persistence-schema.spec.ts
+++ b/scripts/render-persistence-schema.spec.ts
@@ -1,8 +1,35 @@
/** Linked catalog regressions for transitive changes and shared definitions. */
import { describe, expect, it } from 'vitest'
-import { canonicalizeSchema, schemaDigest, type PersistenceSchemaInventory, type PersistenceType, type SchemaNode } from './persistence-schema-model.ts'
+import { canonicalizeSchema, schemaDigest, type PersistenceRoot, type PersistenceSchemaInventory, type PersistenceType, type SchemaNode } from './persistence-schema-model.ts'
import { renderPersistenceSchemaDefinitions, renderPersistenceSchemaIndex } from './render-persistence-schema.ts'
+import { render } from './gen-persistence-catalog.ts'
+import { classifyPersistenceChange } from './persistence-changes.ts'
+
+function eventRoot(
+ event: string,
+ nodes: readonly SchemaNode[],
+ types: Map,
+ metadata: (index: number) => Pick,
+): PersistenceRoot {
+ nodes.forEach((_, index) => {
+ const schema = canonicalizeSchema(nodes, index)
+ const digest = schemaDigest(schema)
+ if (!types.has(digest)) types.set(digest, { digest, schema, ...metadata(index) })
+ })
+ const schema = canonicalizeSchema(nodes, 0)
+ return { key: `event:${event}`, kind: 'event', event, surface: false, digest: schemaDigest(schema), schema }
+}
+
+function recursiveFixture(sources: readonly string[] = []): PersistenceSchemaInventory {
+ const schema = canonicalizeSchema([{ kind: 'object', properties: [{ name: 'next', type: 0, optional: true }], indices: [] }], 0)
+ const digest = schemaDigest(schema)
+ return {
+ formatVersion: 1,
+ roots: [{ key: 'SessionHeader', kind: 'header', digest, schema }],
+ types: [{ digest, schema, names: ['Recursive'], sources }],
+ }
+}
function fixture(optional = true): PersistenceSchemaInventory {
const types = new Map()
@@ -14,13 +41,9 @@ function fixture(optional = true): PersistenceSchemaInventory {
{ kind: 'object', properties: [{ name: 'reason', type: 4, optional }], indices: [] },
{ kind: 'primitive', type: 'string' },
]
- nodes.forEach((_, index) => {
- const schema = canonicalizeSchema(nodes, index)
- const digest = schemaDigest(schema)
- if (!types.has(digest)) types.set(digest, { digest, schema, names: index === 3 ? ['ErrorInfo'] : [], sources: index === 3 ? ['packages/core/example/src/types.ts:8'] : [] })
- })
- const schema = canonicalizeSchema(nodes, 0)
- return { key: `event:${event}`, kind: 'event' as const, event, surface: false, digest: schemaDigest(schema), schema }
+ return eventRoot(event, nodes, types, index => ({
+ names: index === 3 ? ['ErrorInfo'] : [], sources: index === 3 ? ['packages/core/example/src/types.ts:8'] : [],
+ }))
})
return { formatVersion: 1, roots, types: [...types.values()] }
}
@@ -71,13 +94,7 @@ describe('persistence schema catalog', () => {
})
it('renders a recursive definition through a finite self-reference', () => {
- const schema = canonicalizeSchema([{ kind: 'object', properties: [{ name: 'next', type: 0, optional: true }], indices: [] }], 0)
- const digest = schemaDigest(schema)
- const inventory: PersistenceSchemaInventory = {
- formatVersion: 1,
- roots: [{ key: 'SessionHeader', kind: 'header', digest, schema }],
- types: [{ digest, schema, names: ['Recursive'], sources: [] }],
- }
+ const inventory = recursiveFixture()
expect(renderPersistenceSchemaDefinitions(inventory)).toContain('| `next` | optional | [`Recursive`](#persistence-type-recursive) |')
})
@@ -94,3 +111,239 @@ describe('persistence schema catalog', () => {
expect(rendered).not.toContain('### `SessionHeader.agentPreset`')
})
})
+
+function producerFixture(kinds: readonly string[], events: readonly string[]): PersistenceSchemaInventory {
+ const types = new Map()
+ const roots = events.map((event) => {
+ const nodes: SchemaNode[] = [
+ { kind: 'object', properties: [{ name: 'type', type: 1, optional: false }, { name: 'data', type: 2, optional: false }], indices: [] },
+ { kind: 'literal', value: event },
+ { kind: 'object', properties: [{ name: 'source', type: 3, optional: false }], indices: [] },
+ { kind: 'union', types: kinds.map((_, index) => 4 + index * 2) },
+ ...kinds.flatMap((kind, index): SchemaNode[] => [
+ { kind: 'object', properties: [{ name: 'kind', type: 5 + index * 2, optional: false }], indices: [] },
+ { kind: 'literal', value: kind },
+ ]),
+ ]
+ return eventRoot(event, nodes, types, index => ({
+ names: index >= 4 && index % 2 === 0 ? [`event:${event}.data.source[${String((index - 4) / 2)}]`] : [], sources: [],
+ }))
+ })
+ return { formatVersion: 1, roots, types: [...types.values()] }
+}
+
+function currentDefinitions(inventory: PersistenceSchemaInventory): string {
+ return renderPersistenceSchemaDefinitions(inventory, 'en', undefined, 2, 'current')
+}
+
+function assertLinkedOnce(markdown: string): void {
+ const anchors = [...markdown.matchAll(/<\/a>/gu)].map(match => match[1])
+ expect(new Set(anchors).size).toBe(anchors.length)
+ for (const match of markdown.matchAll(/\]\(#(persistence-type-[^)]+)\)/gu)) {
+ expect(anchors, `missing target ${match[1]}`).toContain(match[1])
+ }
+}
+
+describe('current persistence schema anchors', () => {
+ it('names shared arrays by their declared elements independent of the first reaching root', () => {
+ const nodes: SchemaNode[] = [
+ { kind: 'array', element: 1 },
+ { kind: 'object', properties: [{ name: 'text', type: 2, optional: false }], indices: [] },
+ { kind: 'primitive', type: 'string' },
+ ]
+ const types = new Map()
+ const root = eventRoot('second/event', nodes, types, index => ({ names: index === 1 ? ['ContextSnapshotSection'] : [], sources: [] }))
+ const inventory: PersistenceSchemaInventory = { formatVersion: 1, roots: [root], types: [...types.values()] }
+ const rendered = currentDefinitions(inventory)
+ expect(rendered).toContain('### `ContextSnapshotSection[]`')
+ const withEarlierRoot = { ...inventory, roots: [{ ...root, key: 'event:first/event' }, root] }
+ expect(currentDefinitions(withEarlierRoot)).toContain('### `ContextSnapshotSection[]`')
+ expect(rendered).not.toContain('### `event:second/event`')
+ assertLinkedOnce(currentDefinitions(withEarlierRoot))
+ })
+
+ it('shows every kind/form arm, including absent, optional, broad and colliding forms', () => {
+ const nodes: SchemaNode[] = [
+ { kind: 'union', types: [1, 2, 3, 4, 5] },
+ { kind: 'object', properties: [{ name: 'kind', type: 6, optional: false }], indices: [] },
+ { kind: 'object', properties: [{ name: 'kind', type: 6, optional: false }, { name: 'form', type: 7, optional: false }, { name: 'summary', type: 8, optional: false }], indices: [] },
+ { kind: 'object', properties: [{ name: 'kind', type: 6, optional: false }, { name: 'form', type: 7, optional: false }, { name: 'other', type: 8, optional: false }], indices: [] },
+ { kind: 'object', properties: [{ name: 'kind', type: 6, optional: false }, { name: 'form', type: 8, optional: true }], indices: [] },
+ { kind: 'object', properties: [{ name: 'kind', type: 6, optional: false }, { name: 'form', type: 9, optional: false }], indices: [{ key: 8, value: 8 }] },
+ { kind: 'literal', value: 'hook|"quoted' },
+ { kind: 'literal', value: 'notice' },
+ { kind: 'primitive', type: 'string' },
+ { kind: 'union', types: [7, 10] },
+ { kind: 'literal', value: 'snapshot' },
+ ]
+ const types = new Map()
+ const root = eventRoot('source/event', nodes, types, () => ({ names: [], sources: [] }))
+ const inventory: PersistenceSchemaInventory = { formatVersion: 1, roots: [root], types: [...types.values()] }
+ const rendered = currentDefinitions(inventory)
+ expect(rendered).toContain('| `hook\\|"quoted` | not declared | none |')
+ expect(rendered).toContain('| `hook\\|"quoted` | `string` (optional) | none |')
+ expect(rendered.match(/\| `hook\\\|"quoted` \|/gu)).toHaveLength(5)
+ expect(rendered).toContain('index signature')
+ expect(rendered).toContain('other }`')
+ expect(rendered).toContain('summary }`')
+ assertLinkedOnce(rendered)
+ const reordered = { ...inventory, types: [...inventory.types].reverse() }
+ expect(currentDefinitions(reordered)).toBe(rendered)
+ })
+
+ it('falls back to complete unions for optional or broad kind discriminators', () => {
+ for (const optional of [true, false]) {
+ const nodes: SchemaNode[] = [
+ { kind: 'union', types: [1, 2] },
+ { kind: 'object', properties: [{ name: 'kind', type: optional ? 3 : 4, optional }], indices: [] },
+ { kind: 'object', properties: [{ name: 'kind', type: 3, optional: false }], indices: [] },
+ { kind: 'literal', value: 'example' },
+ { kind: 'primitive', type: 'string' },
+ ]
+ const types = new Map()
+ const root = eventRoot('broad/event', nodes, types, () => ({ names: [], sources: [] }))
+ const rendered = currentDefinitions({ formatVersion: 1, roots: [root], types: [...types.values()] })
+ expect(rendered).toContain('One of:')
+ expect(rendered).not.toContain('| kind | Form property |')
+ assertLinkedOnce(rendered)
+ }
+ })
+
+ it('bounds labels for anonymous recursive arrays', () => {
+ const schema = canonicalizeSchema([{ kind: 'array', element: 0 }], 0)
+ const digest = schemaDigest(schema)
+ const rendered = currentDefinitions({ formatVersion: 1, roots: [], types: [{ schema, digest, names: [], sources: [] }] })
+ expect(rendered).toContain('### `array[]`')
+ assertLinkedOnce(rendered)
+ expect(rendered.length).toBeLessThan(1000)
+ })
+
+ it('labels empty objects without padding while preserving structural links and historical labels', () => {
+ const nodes: SchemaNode[] = [
+ { kind: 'object', properties: [{ name: 'type', type: 1, optional: false }, { name: 'data', type: 2, optional: false }], indices: [] },
+ { kind: 'literal', value: 'empty/event' },
+ { kind: 'array', element: 3 },
+ { kind: 'object', properties: [], indices: [] },
+ ]
+ const types = new Map()
+ const root = eventRoot('empty/event', nodes, types, () => ({ names: [], sources: [] }))
+ const inventory: PersistenceSchemaInventory = { formatVersion: 1, roots: [root], types: [...types.values()] }
+ const saved = JSON.stringify(inventory)
+ const emptyDigest = schemaDigest(canonicalizeSchema(nodes, 3))
+ const current = currentDefinitions(inventory)
+ expect(current).toContain('### `{}`')
+ expect(current).not.toContain('{ }')
+ expect(current).toContain('[`{}`](#persistence-type-sha256-' + emptyDigest + ')')
+ assertLinkedOnce(current)
+ const historical = renderPersistenceSchemaDefinitions(inventory)
+ expect(historical).toContain('### `event:empty/event.data.item`')
+ expect(historical).toContain('Array of [`event:empty/event.data.item`](#persistence-type-eventemptyeventdataitem).')
+ expect(JSON.stringify(inventory)).toBe(saved)
+ expect(schemaDigest(root.schema)).toBe(root.digest)
+ })
+
+ it('keeps anonymous producer references when siblings and the first owning root change', () => {
+ const before = producerFixture(['alpha', 'beta'], ['second/event'])
+ const after = producerFixture(['new', 'beta', 'alpha'], ['first/event', 'second/event'])
+ const alphaSchema = canonicalizeSchema([
+ { kind: 'object', properties: [{ name: 'kind', type: 1, optional: false }], indices: [] },
+ { kind: 'literal', value: 'alpha' },
+ ], 0)
+ const alphaDigest = schemaDigest(alphaSchema)
+ const link = '[`{ kind: "alpha" }`](#persistence-type-sha256-' + alphaDigest + ')'
+ expect(currentDefinitions(before)).toContain(link)
+ expect(currentDefinitions(after)).toContain(link)
+ expect(currentDefinitions(after)).not.toContain('.source[')
+ assertLinkedOnce(currentDefinitions(after))
+ const reordered = { ...after, roots: [...after.roots].reverse(), types: [...after.types].reverse() }
+ expect(currentDefinitions(reordered)).toBe(currentDefinitions(after))
+ })
+
+ it('retains logical root and named aliases while structural links track changed content', () => {
+ const before = fixture()
+ const after = fixture(false)
+ const old = currentDefinitions(before)
+ const updated = currentDefinitions(after)
+ for (const definitions of [old, updated]) {
+ expect(definitions).toContain('')
+ expect(definitions).toContain('')
+ }
+ expect(old).not.toBe(updated)
+ const document = render([], [], after)
+ expect(document).toContain('](#persistence-type-sha256-' + after.roots[0]!.digest + ')')
+ assertLinkedOnce(document)
+ })
+
+ it('omits ambiguous aliases and keeps colliding labels linked to distinct definitions', () => {
+ const complete = fixture()
+ const first = complete.types[0] as PersistenceType
+ const second = complete.types[1] as PersistenceType
+ const inventory = { ...complete, types: complete.types.map(type => type === first
+ ? { ...type, names: ['A.B', 'sha256-' + second.digest] }
+ : type === second ? { ...type, names: ['AB'] } : type) }
+ const definitions = currentDefinitions(inventory)
+ expect(definitions).not.toContain('')
+ expect(definitions).toContain('')
+ expect(definitions).toContain('')
+ assertLinkedOnce(definitions)
+ })
+
+ it('renders recursion once and leaves inventories, digests and classifications unchanged', () => {
+ const inventory = recursiveFixture()
+ const { schema, digest } = inventory.roots[0]!
+ const saved = JSON.stringify(inventory)
+ const before = fixture()
+ const after = fixture(false)
+ const classification = classifyPersistenceChange(before.roots[0]!, after.roots[0]!)
+ const rendered = currentDefinitions(inventory)
+ expect(rendered.match(/### `Recursive`/gu)).toHaveLength(1)
+ expect(rendered).toContain('[`Recursive`](#persistence-type-sha256-' + digest + ')')
+ assertLinkedOnce(rendered)
+ currentDefinitions(after)
+ expect(JSON.stringify(inventory)).toBe(saved)
+ expect(schemaDigest(schema)).toBe(digest)
+ expect(classifyPersistenceChange(before.roots[0]!, after.roots[0]!)).toEqual(classification)
+ })
+
+ it('shows recorded source policies only in the current catalog and preserves their fields', () => {
+ const schema = canonicalizeSchema([
+ { kind: 'object', properties: [{ name: 'source', type: 1, optional: false, compatibility: {
+ version: 1, policy: 'session-source-attribution', binding: 'session.user-message.source',
+ discriminator: 'kind', unknownKinds: 'preserve', attributionKinds: ['build-context'],
+ } }], indices: [] },
+ { kind: 'object', properties: [{ name: 'kind', type: 2, optional: false }], indices: [] },
+ { kind: 'literal', value: 'build-context' },
+ ], 0)
+ const types = schema.nodes.map((_, index) => {
+ const nested = canonicalizeSchema(schema.nodes, index)
+ return { digest: schemaDigest(nested), schema: nested, names: [], sources: [] }
+ })
+ const inventory: PersistenceSchemaInventory = { formatVersion: 2, roots: [], types }
+ const saved = JSON.stringify(inventory)
+ expect(currentDefinitions(inventory)).toContain('Source compatibility: `source` — `session-source-attribution` v1; `session.user-message.source`; `kind`; `preserve`.')
+ expect(currentDefinitions(inventory)).toContain('Attribution-only additions: `build-context`.')
+ expect(renderPersistenceSchemaDefinitions(inventory, 'zh', undefined, 2, 'current')).toContain('仅表示归属的新增 kind:`build-context`.')
+ expect(renderPersistenceSchemaDefinitions(inventory)).not.toContain('Source compatibility:')
+ expect(JSON.stringify(inventory)).toBe(saved)
+ })
+
+ it('keeps the captured historical Markdown byte-for-byte in both historical call forms', () => {
+ const inventory = recursiveFixture(['packages/core/example/src/types.ts'])
+ const expected = [
+ '### Persistence type fingerprints', '', 'Frozen reference.', '',
+ '| Root | Kind | SHA-256 | Resolved type |', '|---|---|---|---|',
+ '| `SessionHeader` | header | `c900da63847d1d27572277817e727f3a471d08f0abaf0b61b4984c32ffc6a332` | [`Recursive`](#persistence-type-recursive) |', '',
+ '### Resolved persistence types', '',
+ 'Each definition appears once. References preserve sharing and recursion; the digest beside a definition includes its complete reachable structure. Source names and locations identify its declarations but are excluded from its digest.', '',
+ '', '', '#### `Recursive`', '',
+ 'SHA-256: `c900da63847d1d27572277817e727f3a471d08f0abaf0b61b4984c32ffc6a332`', '',
+ 'Sources: `packages/core/example/src/types.ts`', '',
+ '| Property | Presence | Type |', '|---|---|---|',
+ '| `next` | optional | [`Recursive`](#persistence-type-recursive) |', '',
+ ].join('\n')
+ const index = renderPersistenceSchemaIndex(inventory, 'en', ['Frozen reference.'], 3)
+ expect(index + '\n' + renderPersistenceSchemaDefinitions(inventory, 'en', () => undefined, 3)).toBe(expected)
+ expect(renderPersistenceSchemaIndex(inventory, 'en', ['Frozen reference.'], 3, 'historical') + '\n'
+ + renderPersistenceSchemaDefinitions(inventory, 'en', () => undefined, 3, 'historical')).toBe(expected)
+ })
+})
diff --git a/scripts/render-persistence-schema.ts b/scripts/render-persistence-schema.ts
index 19747f73a2..571ad7162d 100644
--- a/scripts/render-persistence-schema.ts
+++ b/scripts/render-persistence-schema.ts
@@ -2,6 +2,7 @@
import { githubSlug } from './verify-md-links.ts'
import { persistenceCatalogText, type PersistenceCatalogLocale } from './persistence-catalog-text.ts'
+import { sourceKindGroups } from './persistence-source-policy.ts'
import {
canonicalizeSchema,
schemaChildren,
@@ -16,8 +17,12 @@ interface TypeDisplay {
readonly type: PersistenceType
readonly label: string
readonly anchor: string
+ readonly aliases: readonly string[]
}
+/** Current catalogs use structural links; historical references retain their original labels and anchors. */
+export type PersistenceSchemaRendering = 'current' | 'historical'
+
function code(text: string): string {
return '`' + text.replaceAll('`', '\\`').replaceAll('|', '\\|') + '`'
}
@@ -45,7 +50,7 @@ function childPath(node: SchemaNode, position: number): string {
}
}
-function displays(inventory: PersistenceSchemaInventory): Map {
+function historicalDisplays(inventory: PersistenceSchemaInventory): Map {
const paths = new Map()
for (const root of inventory.roots) {
const seen = new Set()
@@ -78,10 +83,87 @@ function displays(inventory: PersistenceSchemaInventory): Map {
+ const property = node.properties.find(candidate => candidate.name === name && !candidate.optional)
+ const value = property === undefined ? undefined : nodeAt(schema, property.type)
+ return value?.kind === 'literal' ? [`${name}: ${JSON.stringify(value.value)}`] : []
+ })
+ const fields = tags.length > 0 && !includeFields ? tags : node.properties.map((property) => {
+ const tag = tags.find(tag => tag.startsWith(property.name + ':'))
+ return tag ?? `${property.name}${property.optional ? '?' : ''}`
+ })
+ if (fields.length === 0) return '{}'
+ return `{ ${fields.slice(0, 4).join(', ')}${fields.length > 4 ? ', …' : ''} }`
+ }
+ case 'array': return 'array'
+ case 'tuple': return `tuple (${String(node.elements.length)} positions)`
+ case 'union': return `union (${String(node.types.length)} variants)`
+ default: return assertNever(node)
+ }
+}
+
+function currentDisplays(inventory: PersistenceSchemaInventory): Map {
+ const roots = new Map()
+ for (const root of inventory.roots) roots.set(root.digest, [...roots.get(root.digest) ?? [], root.key])
+ const aliases = new Map>()
+ const namesByDigest = new Map(inventory.types.map((type) => {
+ const names = type.names.filter(name => !inventory.roots.some(root => name.startsWith(root.key + '.') || name.startsWith(root.key + '[')))
+ const logicalNames = [...new Set([...names, ...roots.get(type.digest) ?? []])].sort()
+ for (const name of logicalNames) {
+ for (const value of new Set([name, name.slice(name.lastIndexOf('#') + 1)])) {
+ const alias = `persistence-type-${githubSlug(value)}`
+ const owners = aliases.get(alias) ?? new Set()
+ owners.add(type.digest)
+ aliases.set(alias, owners)
+ }
+ }
+ return [type.digest, names.filter(name => !roots.get(type.digest)?.includes(name)).sort()]
+ }))
+ const types = new Map(inventory.types.map(type => [type.digest, type]))
+ const labelFor = (schema: CanonicalSchema, seen: ReadonlySet, includeFields = false): string => {
+ const digest = schemaDigest(schema)
+ const node = nodeAt(schema, 0)
+ if (node.kind === 'primitive' || node.kind === 'literal' || node.kind === 'opaque') return structuralLabel(schema)
+ const named = namesByDigest.get(digest)?.find(name => aliases.get(`persistence-type-${githubSlug(name.slice(name.lastIndexOf('#') + 1))}`)?.size === 1)
+ if (named !== undefined) return named.slice(named.lastIndexOf('#') + 1)
+ if (seen.has(digest) || seen.size >= 4) return structuralLabel(schema, includeFields)
+ if (node.kind === 'array') {
+ const element = canonicalizeSchema(schema.nodes, node.element)
+ const label = labelFor(types.get(schemaDigest(element))?.schema ?? element, new Set(seen).add(digest), includeFields)
+ return `${label}[]`
+ }
+ return structuralLabel(schema, includeFields)
+ }
+ const labels = inventory.types.map(type => ({ type, label: labelFor(type.schema, new Set()), anchor: `persistence-type-sha256-${type.digest}` }))
+ const counts = new Map()
+ for (const entry of labels) counts.set(entry.label, (counts.get(entry.label) ?? 0) + 1)
+ for (const entry of labels) {
+ if ((counts.get(entry.label) ?? 0) > 1) entry.label = labelFor(entry.type.schema, new Set(), true)
+ }
+ const structuralAnchors = new Set(labels.map(entry => entry.anchor))
+ return new Map(labels.map(entry => [entry.type.digest, {
+ ...entry,
+ // A logical name shared by different structures has no unambiguous target.
+ aliases: [...aliases].filter(([alias, owners]) => owners.size === 1 && owners.has(entry.type.digest) && !structuralAnchors.has(alias))
+ .map(([alias]) => alias).sort(),
+ }]))
+}
+
+function displays(inventory: PersistenceSchemaInventory, rendering: PersistenceSchemaRendering): Map {
+ return rendering === 'current' ? currentDisplays(inventory) : historicalDisplays(inventory)
+}
+
function reference(digest: string, entries: ReadonlyMap): string {
const entry = entries.get(digest)
if (!entry) throw new Error(`persistence catalog: reachable type ${digest} is absent from the inventory`)
@@ -107,11 +189,12 @@ function definition(
locale: PersistenceCatalogLocale,
sourceLink: (source: string) => string | undefined,
headingLevel: number,
+ rendering: PersistenceSchemaRendering,
): string[] {
const text = persistenceCatalogText[locale]
const schema = entry.type.schema
const node = nodeAt(schema, 0)
- const lines = [``, '', `${'#'.repeat(headingLevel)} ${code(entry.label)}`, '', `SHA-256: ${code(entry.type.digest)}`, '']
+ const lines = [...[entry.anchor, ...entry.aliases].flatMap(anchor => [``, '']), `${'#'.repeat(headingLevel)} ${code(entry.label)}`, '', `SHA-256: ${code(entry.type.digest)}`, '']
if (entry.type.sources.length > 0) {
lines.push(`${text.sources}${entry.type.sources.map((source) => {
const href = sourceLink(sourcePath(source))
@@ -129,6 +212,14 @@ function definition(
}
for (const index of node.indices) lines.push(`| [${expression(index.key)}] | ${text.index} | ${expression(index.value)} |`)
lines.push('')
+ if (rendering === 'current') {
+ for (const property of node.properties) {
+ const policy = property.compatibility
+ if (policy === undefined) continue
+ lines.push(`${text.sourceCompatibility}${code(property.name)} — ${code(policy.policy)} v${String(policy.version)}; ${code(policy.binding)}; ${code(policy.discriminator)}; ${code(policy.unknownKinds)}.`, '',
+ `${text.attributionAdditions}${policy.attributionKinds.map(code).join(', ') || code('[]')}.`, '')
+ }
+ }
}
break
case 'array': lines.push(`${text.arrayPrefix}${expression(node.element)}${text.arraySuffix}`, ''); break
@@ -140,9 +231,28 @@ function definition(
})
lines.push('')
break
- case 'union':
- lines.push(text.oneOf, '', ...node.types.map(index => `- ${expression(index)}`), '')
+ case 'union': {
+ const groups = rendering === 'current' ? sourceKindGroups(schema.nodes, 0) : undefined
+ if (groups !== undefined) {
+ lines.push(text.sourceColumns, '|---|---|---|---|')
+ for (const [kind, alternatives] of [...groups].sort(([a], [b]) => a.localeCompare(b))) {
+ const rows = alternatives.map((index) => {
+ const variant = nodeAt(schema, index)
+ if (variant.kind !== 'object') throw new Error('persistence catalog: source group must contain objects')
+ const form = variant.properties.find(property => property.name === 'form')
+ const formLabel = form === undefined ? text.notDeclared
+ : `${expression(form.type)}${form.optional ? ` (${text.optional})` : ''}`
+ const fields = variant.properties.filter(property => property.name !== 'kind' && property.name !== 'form' && !property.optional)
+ .map(property => `${code(property.name)}: ${expression(property.type)}`)
+ if (variant.indices.length > 0) fields.push(text.index)
+ return { index, formLabel, fields, digest: schemaDigest(canonicalizeSchema(schema.nodes, index)) }
+ }).sort((a, b) => a.formLabel.localeCompare(b.formLabel) || a.digest.localeCompare(b.digest))
+ for (const row of rows) lines.push(`| ${code(kind)} | ${row.formLabel} | ${row.fields.join('; ') || text.none} | ${expression(row.index)} |`)
+ }
+ lines.push('')
+ } else lines.push(text.oneOf, '', ...node.types.map(index => `- ${expression(index)}`), '')
break
+ }
case 'primitive': lines.push(code(node.type), ''); break
case 'literal': lines.push(code(JSON.stringify(node.value)), ''); break
case 'opaque': lines.push(`${code(node.reason)}${text.opaqueExplanation}`, ''); break
@@ -157,6 +267,7 @@ function definition(
* @param locale - generated document language.
* @param introduction - paragraphs before the root table; defaults to current-source links.
* @param headingLevel - section depth within the containing reference.
+ * @param rendering - explicit current mode selects structural links; omission preserves historical output.
* @returns Markdown index including the history and contributor workflow links.
*/
export function renderPersistenceSchemaIndex(
@@ -164,8 +275,9 @@ export function renderPersistenceSchemaIndex(
locale: PersistenceCatalogLocale = 'en',
introduction: readonly string[] = [persistenceCatalogText[locale].fingerprintsIntro, persistenceCatalogText[locale].historyIntro],
headingLevel: 2 | 3 = 2,
+ rendering: PersistenceSchemaRendering = 'historical',
): string {
- const entries = displays(inventory)
+ const entries = displays(inventory, rendering)
const text = persistenceCatalogText[locale]
return [
`${'#'.repeat(headingLevel)} ${text.fingerprints}`, '', ...introduction.flatMap(paragraph => [paragraph, '']),
@@ -180,20 +292,25 @@ export function renderPersistenceSchemaIndex(
* @param locale - generated document language.
* @param sourceLink - source path to URL; undefined keeps historical locations as text.
* @param headingLevel - section depth; individual definitions use the next heading level.
- * @returns Markdown definitions whose anchors use names or owning paths instead of hashes.
+ * @param rendering - explicit current mode selects structural links and unambiguous logical aliases.
+ * @returns linked Markdown definitions; historical mode preserves the original named and owning-path anchors.
*/
export function renderPersistenceSchemaDefinitions(
inventory: PersistenceSchemaInventory,
locale: PersistenceCatalogLocale = 'en',
sourceLink: (source: string) => string | undefined = source => `../${source}`,
headingLevel: 2 | 3 = 2,
+ rendering: PersistenceSchemaRendering = 'historical',
): string {
- const entries = displays(inventory)
+ const entries = displays(inventory, rendering)
const text = persistenceCatalogText[locale]
- const sorted = [...entries.values()].sort((left, right) => left.anchor < right.anchor ? -1 : left.anchor > right.anchor ? 1 : 0)
+ const sorted = [...entries.values()].sort((left, right) => {
+ if (rendering === 'current' && left.label !== right.label) return left.label < right.label ? -1 : 1
+ return left.anchor < right.anchor ? -1 : left.anchor > right.anchor ? 1 : 0
+ })
return [
`${'#'.repeat(headingLevel)} ${text.definitions}`, '', text.definitionsIntro, '',
- ...sorted.flatMap(entry => definition(entry, entries, locale, sourceLink, headingLevel + 1)),
+ ...sorted.flatMap(entry => definition(entry, entries, locale, sourceLink, headingLevel + 1, rendering)),
].join('\n')
}