dsh-plugin-dev-kb 1.0.8 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.en.md +6 -6
  3. package/README.md +6 -6
  4. package/kb/INDEX.md +21 -5
  5. package/kb/README.md +11 -10
  6. package/kb/extra/AGENTS.md +4 -4
  7. package/kb/extra/cookbook/adding-a-remote-api.md +197 -0
  8. package/kb/extra/cookbook/adding-a-remote-api.zh.md +197 -0
  9. package/kb/extra/cookbook/adding-a-vendored-package.md +2 -2
  10. package/kb/extra/cookbook/adding-a-vendored-package.zh.md +2 -2
  11. package/kb/extra/deepseek-llm-api-wire-extensions.md +163 -0
  12. package/kb/extra/deepseek-llm-api-wire-extensions.zh.md +163 -0
  13. package/kb/extra/development.md +8 -14
  14. package/kb/extra/development.zh.md +8 -14
  15. package/kb/extra/event-producer-consumer.md +55 -48
  16. package/kb/extra/event-producer-consumer.zh.md +58 -51
  17. package/kb/extra/glossary.md +1 -1
  18. package/kb/extra/glossary.zh.md +1 -1
  19. package/kb/extra/graph-atlas.md +0 -2
  20. package/kb/extra/graph-atlas.zh.md +0 -2
  21. package/kb/extra/i18n/README.md +4 -4
  22. package/kb/extra/i18n/README.zh.md +4 -4
  23. package/kb/extra/i18n/style-samples.md +2 -2
  24. package/kb/extra/module-graph.md +646 -926
  25. package/kb/extra/module-graph.zh.md +648 -928
  26. package/kb/extra/postmortem/0001-acp-default-export-drops-inject.md +2 -2
  27. package/kb/extra/postmortem/0001-acp-default-export-drops-inject.zh.md +2 -2
  28. package/kb/extra/postmortem/0002-js-expression-disabled-filesystem-tools.md +2 -2
  29. package/kb/extra/postmortem/0002-js-expression-disabled-filesystem-tools.zh.md +2 -2
  30. package/kb/extra/postmortem/0003-web-agent-gui-feedback-loop.md +2 -2
  31. package/kb/extra/postmortem/0003-web-agent-gui-feedback-loop.zh.md +2 -2
  32. package/kb/extra/postmortem/0004-landlock-partial-notice-misclassified-child-failures.md +1 -1
  33. package/kb/extra/postmortem/0004-landlock-partial-notice-misclassified-child-failures.zh.md +1 -1
  34. package/kb/extra/rescope.md +2 -2
  35. package/kb/extra/rescope.zh.md +2 -2
  36. package/kb/extra/subsystems/agent-team.md +28 -4
  37. package/kb/extra/subsystems/agent-team.zh.md +28 -4
  38. package/kb/extra/subsystems/attachment.md +168 -7
  39. package/kb/extra/subsystems/attachment.zh.md +168 -7
  40. package/kb/extra/subsystems/extensions.md +18 -0
  41. package/kb/extra/subsystems/extensions.zh.md +18 -0
  42. package/kb/extra/subsystems/feedback.md +4 -4
  43. package/kb/extra/subsystems/feedback.zh.md +4 -4
  44. package/kb/extra/subsystems/todo.md +32 -0
  45. package/kb/extra/subsystems/todo.zh.md +32 -0
  46. package/kb/extra/subsystems/webhook.md +70 -0
  47. package/kb/extra/subsystems/webhook.zh.md +70 -0
  48. package/kb/extra/testing.md +15 -10
  49. package/kb/extra/testing.zh.md +13 -8
  50. package/kb/extra/web-styling.md +4 -0
  51. package/kb/extra/web-styling.zh.md +4 -0
  52. package/kb/meta/search-index.json +309 -177
  53. package/kb/meta/site-pages.txt +183 -167
  54. package/kb/meta/source.json +5 -5
  55. package/kb/meta/topics.md +14 -6
  56. package/kb/site/develop/basic/publish.md +2 -2
  57. package/kb/site/develop/basic/tool.md +1 -1
  58. package/kb/site/develop/cordis-tutorial/07-into-the-harness.md +5 -4
  59. package/kb/site/develop/framework/events.md +1 -1
  60. package/kb/site/develop/practice/dynamic-cordis.md +17 -0
  61. package/kb/site/develop/practice/llm-adapter.md +4 -3
  62. package/kb/site/en/develop/basic/publish.md +2 -2
  63. package/kb/site/en/develop/basic/tool.md +1 -1
  64. package/kb/site/en/develop/cordis-tutorial/07-into-the-harness.md +5 -4
  65. package/kb/site/en/develop/framework/events.md +1 -1
  66. package/kb/site/en/develop/practice/dynamic-cordis.md +17 -0
  67. package/kb/site/en/develop/practice/llm-adapter.md +4 -3
  68. package/kb/site/en/guide/github-review.md +104 -0
  69. package/kb/site/en/guide/mcp-memory.md +103 -0
  70. package/kb/site/en/guide/network-proxy.md +87 -0
  71. package/kb/site/en/guide/providers.md +70 -17
  72. package/kb/site/en/guide/python-sdk.md +80 -34
  73. package/kb/site/en/guide/schedule.md +23 -0
  74. package/kb/site/en/reference/agent-lifecycle.md +6 -4
  75. package/kb/{extra → site/en/reference}/api-gateway.md +12 -10
  76. package/kb/site/en/reference/capability-seams.md +128 -73
  77. package/kb/site/en/reference/config-catalog.md +481 -360
  78. package/kb/site/en/reference/cookbook/adding-a-package.md +3 -4
  79. package/kb/site/en/reference/cookbook/adding-a-settings-card.md +12 -10
  80. package/kb/site/en/reference/cookbook/adding-a-tool.md +11 -4
  81. package/kb/site/en/reference/cookbook/adding-an-llm-adapter.md +1 -1
  82. package/kb/site/en/reference/cookbook/extension-cookbook.md +20 -17
  83. package/kb/site/en/reference/cordis-api/inherited.md +1 -1
  84. package/kb/site/en/reference/cordis-primer.md +2 -1
  85. package/kb/site/en/reference/index.md +30 -11
  86. package/kb/site/en/reference/persistence-catalog.md +148 -80
  87. package/kb/site/en/reference/subsystems/approval.md +10 -10
  88. package/kb/site/en/reference/subsystems/client-modules.md +58 -16
  89. package/kb/site/en/reference/subsystems/code-runtime.md +10 -6
  90. package/kb/site/en/reference/subsystems/commands.md +25 -16
  91. package/kb/site/en/reference/subsystems/compaction.md +11 -11
  92. package/kb/site/en/reference/{cookbook/adding-a-conversation-node.md → subsystems/conversation.md} +50 -24
  93. package/kb/site/en/reference/subsystems/core.md +156 -17
  94. package/kb/site/en/reference/subsystems/credentials.md +44 -3
  95. package/kb/site/en/reference/subsystems/filesystem.md +12 -2
  96. package/kb/site/en/reference/subsystems/goal.md +1 -1
  97. package/kb/site/en/reference/subsystems/index.md +7 -2
  98. package/kb/site/en/reference/subsystems/jobs.md +1 -1
  99. package/kb/site/en/reference/subsystems/llm-streaming.md +154 -12
  100. package/kb/site/en/reference/subsystems/permission-presets.md +6 -6
  101. package/kb/site/en/reference/subsystems/persistence.md +185 -175
  102. package/kb/site/en/reference/subsystems/plan.md +2 -2
  103. package/kb/site/en/reference/subsystems/sandbox.md +2 -0
  104. package/kb/site/en/reference/subsystems/schedule.md +9 -3
  105. package/kb/site/en/reference/subsystems/session-projection.md +115 -48
  106. package/kb/site/en/reference/subsystems/session-query.md +28 -14
  107. package/kb/site/en/reference/subsystems/session-reference.md +53 -8
  108. package/kb/site/en/reference/subsystems/session-telemetry.md +8 -8
  109. package/kb/site/en/reference/subsystems/session-title.md +6 -6
  110. package/kb/site/en/reference/subsystems/session.md +401 -99
  111. package/kb/site/en/reference/subsystems/settings.md +101 -6
  112. package/kb/site/en/reference/subsystems/skills.md +23 -0
  113. package/kb/site/en/reference/subsystems/slots.md +178 -0
  114. package/kb/site/en/reference/subsystems/spill.md +2 -2
  115. package/kb/site/en/reference/subsystems/storage.md +34 -3
  116. package/kb/site/en/reference/subsystems/subagent.md +122 -109
  117. package/kb/site/en/reference/subsystems/system-prompt.md +17 -4
  118. package/kb/site/en/reference/subsystems/token-meter.md +27 -12
  119. package/kb/site/en/reference/subsystems/tools.md +39 -39
  120. package/kb/site/en/reference/subsystems/typert.md +62 -55
  121. package/kb/site/en/reference/subsystems/user-questions.md +33 -33
  122. package/kb/site/en/reference/subsystems/web-client.md +98 -0
  123. package/kb/site/en/reference/subsystems/web-server.md +11 -5
  124. package/kb/site/en/reference/subsystems/web.md +7 -1
  125. package/kb/site/en/reference/subsystems/workspace.md +102 -9
  126. package/kb/site/en/reference/tool-catalog.md +86 -82
  127. package/kb/site/en/reference/tool-execution-pipeline.md +1 -1
  128. package/kb/site/guide/github-review.md +104 -0
  129. package/kb/site/guide/mcp-memory.md +103 -0
  130. package/kb/site/guide/network-proxy.md +87 -0
  131. package/kb/site/guide/providers.md +70 -17
  132. package/kb/site/guide/python-sdk.md +87 -41
  133. package/kb/site/guide/schedule.md +23 -0
  134. package/kb/site/reference/agent-lifecycle.md +6 -4
  135. package/kb/{extra/api-gateway.zh.md → site/reference/api-gateway.md} +12 -10
  136. package/kb/site/reference/capability-seams.md +128 -73
  137. package/kb/site/reference/config-catalog.md +481 -360
  138. package/kb/site/reference/cookbook/adding-a-package.md +3 -4
  139. package/kb/site/reference/cookbook/adding-a-settings-card.md +12 -10
  140. package/kb/site/reference/cookbook/adding-a-tool.md +11 -4
  141. package/kb/site/reference/cookbook/adding-an-llm-adapter.md +1 -1
  142. package/kb/site/reference/cookbook/extension-cookbook.md +20 -17
  143. package/kb/site/reference/cordis-api/inherited.md +1 -1
  144. package/kb/site/reference/cordis-primer.md +2 -1
  145. package/kb/site/reference/index.md +30 -11
  146. package/kb/site/reference/persistence-catalog.md +148 -80
  147. package/kb/site/reference/subsystems/approval.md +10 -10
  148. package/kb/site/reference/subsystems/client-modules.md +58 -16
  149. package/kb/site/reference/subsystems/code-runtime.md +10 -6
  150. package/kb/site/reference/subsystems/commands.md +25 -16
  151. package/kb/site/reference/subsystems/compaction.md +11 -11
  152. package/kb/site/reference/{cookbook/adding-a-conversation-node.md → subsystems/conversation.md} +50 -24
  153. package/kb/site/reference/subsystems/core.md +156 -17
  154. package/kb/site/reference/subsystems/credentials.md +44 -3
  155. package/kb/site/reference/subsystems/filesystem.md +12 -2
  156. package/kb/site/reference/subsystems/goal.md +1 -1
  157. package/kb/site/reference/subsystems/index.md +7 -2
  158. package/kb/site/reference/subsystems/jobs.md +1 -1
  159. package/kb/site/reference/subsystems/llm-streaming.md +154 -12
  160. package/kb/site/reference/subsystems/permission-presets.md +5 -5
  161. package/kb/site/reference/subsystems/persistence.md +184 -174
  162. package/kb/site/reference/subsystems/plan.md +2 -2
  163. package/kb/site/reference/subsystems/schedule.md +9 -3
  164. package/kb/site/reference/subsystems/session-projection.md +115 -48
  165. package/kb/site/reference/subsystems/session-query.md +28 -14
  166. package/kb/site/reference/subsystems/session-reference.md +53 -8
  167. package/kb/site/reference/subsystems/session-telemetry.md +8 -8
  168. package/kb/site/reference/subsystems/session-title.md +6 -6
  169. package/kb/site/reference/subsystems/session.md +401 -99
  170. package/kb/site/reference/subsystems/settings.md +101 -6
  171. package/kb/site/reference/subsystems/skills.md +23 -0
  172. package/kb/site/reference/subsystems/slots.md +178 -0
  173. package/kb/site/reference/subsystems/spill.md +2 -2
  174. package/kb/site/reference/subsystems/storage.md +34 -3
  175. package/kb/site/reference/subsystems/subagent.md +122 -109
  176. package/kb/site/reference/subsystems/system-prompt.md +17 -4
  177. package/kb/site/reference/subsystems/token-meter.md +27 -12
  178. package/kb/site/reference/subsystems/tools.md +39 -39
  179. package/kb/site/reference/subsystems/typert.md +62 -55
  180. package/kb/site/reference/subsystems/user-questions.md +33 -33
  181. package/kb/site/reference/subsystems/web-client.md +98 -0
  182. package/kb/site/reference/subsystems/web-server.md +11 -5
  183. package/kb/site/reference/subsystems/web.md +7 -1
  184. package/kb/site/reference/subsystems/workspace.md +102 -9
  185. package/kb/site/reference/tool-catalog.md +85 -81
  186. package/kb/site/reference/tool-execution-pipeline.md +1 -1
  187. package/package.json +2 -2
  188. package/skills/dsh-plugin-dev-kb.md +8 -6
@@ -12,7 +12,7 @@ outline: "deep"
12
12
 
13
13
  英文源文件根据源码生成(`scripts/gen-persistence-catalog.ts`),并由 `pnpm run verify-persistence-catalog`(`doc-sync`(文档同步门禁)的一部分)验证新鲜度;本中文文件作为经评审对侧通过双语配对维护。声明块保留源码声明和嵌套属性的 JSDoc,只移除其所在接口/模块带来的缩进,并使用 `ts persistence-catalog` 围栏(doc-typecheck 会跳过这些围栏,因为声明引用了其所属模块中的类型)。payload 中的类型名称会链接到记录该类型的页面。参见 [persistence-log-catalog Agent Note](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/archived/process/2026-07-04-persistence-log-catalog.md)。
14
14
 
15
- 以下信封声明组合了每个事件的 `type`、单调递增的 `seq`、以 epoch 毫秒表示的 `time`、`data`、可选的未知类型跳过标记 `ignorable`,以及条件字段 `surfaceOp`/`sourceEventSeqs`。**surface** 表示 `SurfaceEventType` 成员:它会生成一条 LLM(大语言模型)消息,并声明该事件如何加入 surface 列表。**log-only** 表示其他所有事件:这类记录可持久化、可回放,但不参与派生历史。每个 payload 均可进行 JSON 序列化(在 `Session.append` 处强制执行),整个格式固定为 `SESSION_FORMAT_VERSION = 0`:这是预发布格式,不暗示任何兼容性(参见[版本立场](./subsystems/persistence.md))。范围仅限本仓库中的包;下游插件可以继续合并其他事件类型,而这些类型按设计不属于本目录。
15
+ 以下信封声明组合了每个事件的 `type`、单调递增的 `seq`、以 epoch 毫秒表示的 `time`、`data`、可选的未知类型跳过标记 `ignorable`,以及条件字段 `surfaceOp`/`sourceEventSeqs`。**surface** 表示 `SurfaceEventType` 成员:它会生成一条 LLM(大语言模型)消息,并声明该事件如何加入 surface 列表。**log-only** 表示其他所有事件:这类记录可持久化、可回放,但不参与派生历史。每个 payload 均可进行 JSON 序列化(在 `Session.append` 处强制执行)。当前 writer 会写入 `SESSION_FORMAT_VERSION`;受支持的历史产物通过构建期静态相邻迁移目录进入这套当前词汇(参见[版本生命周期](./subsystems/persistence.md))。范围仅限本仓库中的包;下游插件可以继续合并其他当前版本事件类型,这些类型按设计不属于本目录,并且在后续格式迁移边中需要显式 disposition。
16
16
 
17
17
  ## 事件信封
18
18
 
@@ -23,7 +23,8 @@ export type SessionEventType = keyof SessionEventMap
23
23
  /**
24
24
  * The subset of {@link SessionEventType} values whose events produce LLM
25
25
  * messages and are eligible to appear on the ordered surface. Only these
26
- * event types may carry {@link SurfaceOp} and {@link SessionEvent.sourceEventSeqs}.
26
+ * event types may carry {@link SurfaceOp}; user and tool events may also cite
27
+ * earlier sources through {@link SessionEvent.sourceEventSeqs}.
27
28
  */
28
29
  export type SurfaceEventType =
29
30
  | 'user/message'
@@ -45,7 +46,7 @@ export type SurfaceEventType =
45
46
  */
46
47
  export type SurfaceOp =
47
48
  | 'append'
48
- | { op: 'replace'; start: number; end: number }
49
+ | { op: 'replace'; start: SessionSeq; end: SessionSeq }
49
50
 
50
51
  /**
51
52
  * One immutable entry in the session log.
@@ -56,7 +57,7 @@ export type SurfaceOp =
56
57
  * The {@link sourceEventSeqs} and {@link surfaceOp} fields are conditional:
57
58
  * they only exist on {@link SurfaceEventType} variants (`user/message`,
58
59
  * `assistant/message`, `tool/result`).
59
- * Non-surface events (boundary markers, chunks, usage, errors) never carry
60
+ * Non-surface events (boundary markers, attempts, errors) never carry
60
61
  * surface metadata — the compiler enforces this at `Session.append()`
61
62
  * call sites.
62
63
  */
@@ -64,7 +65,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
64
65
  [K in SessionEventType]: {
65
66
  type: K
66
67
  /** Monotonic sequence number within the session. */
67
- seq: number
68
+ seq: SessionSeq
68
69
  /** Unix epoch milliseconds. */
69
70
  time: number
70
71
  data: SessionEventMap[K]
@@ -81,21 +82,18 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
81
82
  ignorable?: true
82
83
  } & (K extends SurfaceEventType ? {
83
84
  /**
84
- * Seq numbers of earlier events that this event cites as sources
85
- * (e.g. the `assistant/chunk` seqs that built an `assistant/message`,
86
- * or the surface nodes shadowed by a compaction replace node). An
87
- * `assistant/message` may carry a present empty array for a known empty
88
- * provider stream; when the field is absent, the event does not record which
89
- * earlier events produced the message.
85
+ * Seq numbers of earlier events that this event cites as sources, such as
86
+ * the surface nodes shadowed by a compaction replacement. A v2
87
+ * `assistant/message` embeds its provider stream and cannot carry this field.
90
88
  */
91
- sourceEventSeqs?: number[]
89
+ sourceEventSeqs?: SessionSeq[]
92
90
  /** How this event entered the surface; absent for non-surface events. */
93
91
  surfaceOp?: SurfaceOp
94
92
  } : object)
95
93
  }[T]
96
94
  ```
97
95
 
98
- 来源:[`packages/core/session/src/types.ts:340`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts) · [`packages/core/session/src/types.ts:347`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts) · [`packages/core/session/src/types.ts:376`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts) · [`packages/core/session/src/types.ts:408`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
96
+ 来源:[`packages/core/session/src/types.ts:379`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts) · [`packages/core/session/src/types.ts:387`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts) · [`packages/core/session/src/types.ts:416`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts) · [`packages/core/session/src/types.ts:447`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
99
97
 
100
98
  ## 事件
101
99
 
@@ -120,7 +118,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
120
118
  }
121
119
  ```
122
120
 
123
- 来源:[`packages/core/agent/src/types.ts:19`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/types.ts)
121
+ 来源:[`packages/core/agent/src/types.ts:58`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/types.ts)
124
122
 
125
123
  ### `agent-preset/*`
126
124
 
@@ -138,7 +136,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
138
136
  'agent-preset/selected': { agentPreset: string }
139
137
  ```
140
138
 
141
- 来源:[`packages/preset/agent-presets/src/session.ts:26`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/preset/agent-presets/src/session.ts)
139
+ 来源:[`packages/preset/agent-presets/src/session.ts:28`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/preset/agent-presets/src/session.ts)
142
140
 
143
141
  ### `approval/*`
144
142
 
@@ -158,14 +156,14 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
158
156
  'approval/asked': {
159
157
  id: ApprovalRequestId
160
158
  toolName: string
161
- callId?: CallId
159
+ callId?: ToolCallId
162
160
  reason?: string
163
161
  }
164
162
  ```
165
163
 
166
- 类型:[CallId](./subsystems/core.md)
164
+ 类型:[ToolCallId](./subsystems/core.md)
167
165
 
168
- 来源:[`packages/interaction/user-approval/src/index.ts:44`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/user-approval/src/index.ts)
166
+ 来源:[`packages/interaction/user-approval/src/types.ts:44`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/user-approval/src/types.ts)
169
167
 
170
168
  <a id="approvaldecided--log-only"></a>
171
169
 
@@ -183,7 +181,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
183
181
  }
184
182
  ```
185
183
 
186
- 来源:[`packages/interaction/user-approval/src/index.ts:55`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/user-approval/src/index.ts)
184
+ 来源:[`packages/interaction/user-approval/src/types.ts:55`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/user-approval/src/types.ts)
187
185
 
188
186
  <a id="approvalpolicy--log-only"></a>
189
187
 
@@ -194,7 +192,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
194
192
  * The session's approval policy was switched — log-only, durable,
195
193
  * replayable, never in the model transcript (the model learns the policy
196
194
  * from the runtime-context snapshot and live switch notices). The LAST
197
- * such event is the session's override ({@link effectiveApprovalPolicy}).
195
+ * such event is the session's override.
198
196
  * `source: 'delegation'` marks an override seeded into a child; an absent
199
197
  * source is a runtime switch.
200
198
  */
@@ -205,22 +203,24 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
205
203
  }
206
204
  ```
207
205
 
208
- 来源:[`packages/interaction/user-approval/src/index.ts:67`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/user-approval/src/index.ts)
206
+ 来源:[`packages/interaction/user-approval/src/index.ts:32`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/user-approval/src/index.ts)
209
207
 
210
208
  ### `assistant/*`
211
209
 
212
- <a id="assistantchunk--log-only"></a>
210
+ <a id="assistantattempt--log-only"></a>
213
211
 
214
- #### `assistant/chunk` — log-only
212
+ #### `assistant/attempt` — log-only
215
213
 
216
214
  ```ts persistence-catalog
217
- /** Raw stream chunk — token-level replay fidelity. */
218
- 'assistant/chunk': { turn: number; step: number; chunk: StreamChunk }
215
+ /**
216
+ * One model attempt that committed no surface message. The embedded stream
217
+ * preserves a failed, retried, cancelled, or stream-error attempt that
218
+ * reached settlement without fabricating model-visible history.
219
+ */
220
+ 'assistant/attempt': { turn: number; step: number; stream: AssistantStreamRecord[] }
219
221
  ```
220
222
 
221
- 类型:[StreamChunk](./subsystems/llm-streaming.md)
222
-
223
- 来源:[`packages/core/session/src/types.ts:266`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
223
+ 来源:[`packages/core/session/src/types.ts:313`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
224
224
 
225
225
  <a id="assistantmessage--surface"></a>
226
226
 
@@ -237,12 +237,20 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
237
237
  * marker distinguishes that prefix without re-deriving interruption from turn
238
238
  * boundaries. An aborted turn with no such event streamed no visible content.
239
239
  */
240
- 'assistant/message': { turn: number; step: number; message: AssistantMessage; usage?: TokenUsage; interrupted?: true }
240
+ 'assistant/message': {
241
+ turn: number
242
+ step: number
243
+ message: AssistantMessage
244
+ /** Exact timed model stream, compacted without joining delta boundaries. */
245
+ stream: AssistantStreamRecord[]
246
+ usage?: TokenUsage
247
+ interrupted?: true
248
+ }
241
249
  ```
242
250
 
243
251
  类型:[TokenUsage](./subsystems/llm-streaming.md)
244
252
 
245
- 来源:[`packages/core/session/src/types.ts:277`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
253
+ 来源:[`packages/core/session/src/types.ts:299`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
246
254
 
247
255
  ### `command/*`
248
256
 
@@ -261,11 +269,11 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
261
269
  commandId: CommandId
262
270
  kind: 'success' | 'error'
263
271
  text?: string
264
- sourceEventSeq?: number
272
+ sourceEventSeq?: import('@deepseek-ai/dsh-session/types').SessionSeq
265
273
  }
266
274
  ```
267
275
 
268
- 来源:[`packages/interaction/commands/src/types.ts:103`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/commands/src/types.ts)
276
+ 来源:[`packages/interaction/commands/src/types.ts:110`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/commands/src/types.ts)
269
277
 
270
278
  <a id="commandrun--log-only"></a>
271
279
 
@@ -285,7 +293,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
285
293
  'command/run': { commandId: CommandId; name: string; args?: string; source: CommandSource }
286
294
  ```
287
295
 
288
- 来源:[`packages/interaction/commands/src/types.ts:96`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/commands/src/types.ts)
296
+ 来源:[`packages/interaction/commands/src/types.ts:103`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/commands/src/types.ts)
289
297
 
290
298
  ### `compaction/*`
291
299
 
@@ -301,7 +309,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
301
309
  'compaction/end': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; error?: string }
302
310
  ```
303
311
 
304
- 来源:[`packages/compaction/compaction/src/types.ts:71`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/compaction/compaction/src/types.ts)
312
+ 来源:[`packages/compaction/compaction/src/types.ts:72`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/compaction/compaction/src/types.ts)
305
313
 
306
314
  <a id="compactionprune--log-only"></a>
307
315
 
@@ -319,15 +327,15 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
319
327
  */
320
328
  'compaction/prune': {
321
329
  /** The replaced range's first and last surface-node seqs (a surface-position span, like {@link CompactionResult.shadowedRange}). */
322
- shadowedRange: { start: number; end: number }
330
+ shadowedRange: { start: SessionSeq; end: SessionSeq }
323
331
  /** The seqs of all shadowed surface nodes, in surface order. */
324
- shadowedSeqs: number[]
332
+ shadowedSeqs: SessionSeq[]
325
333
  /** Heuristic price of the shadowed content under the token-meter's fixed estimator. */
326
334
  shadowedTokenCount: number
327
335
  }
328
336
  ```
329
337
 
330
- 来源:[`packages/compaction/compaction/src/types.ts:81`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/compaction/compaction/src/types.ts)
338
+ 来源:[`packages/compaction/compaction/src/types.ts:82`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/compaction/compaction/src/types.ts)
331
339
 
332
340
  <a id="compactionstart--log-only"></a>
333
341
 
@@ -342,7 +350,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
342
350
  'compaction/start': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null }
343
351
  ```
344
352
 
345
- 来源:[`packages/compaction/compaction/src/types.ts:23`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/compaction/compaction/src/types.ts)
353
+ 来源:[`packages/compaction/compaction/src/types.ts:24`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/compaction/compaction/src/types.ts)
346
354
 
347
355
  <a id="compactionsummary--log-only"></a>
348
356
 
@@ -362,8 +370,8 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
362
370
  compactionId: CompactionId
363
371
  sourceCommandId?: CommandId
364
372
  summary: ContentBlock[]
365
- shadowedRange: { start: number; end: number }
366
- shadowedSeqs: number[]
373
+ shadowedRange: { start: SessionSeq; end: SessionSeq }
374
+ shadowedSeqs: SessionSeq[]
367
375
  shadowedTokenCount: number
368
376
  /** The provider route that wrote the summary. */
369
377
  provider: string
@@ -396,7 +404,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
396
404
 
397
405
  类型:[ContentBlock](./subsystems/core.md) · [TokenUsage](./subsystems/llm-streaming.md)
398
406
 
399
- 来源:[`packages/compaction/compaction/src/types.ts:33`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/compaction/compaction/src/types.ts)
407
+ 来源:[`packages/compaction/compaction/src/types.ts:34`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/compaction/compaction/src/types.ts)
400
408
 
401
409
  ### `feedback/*`
402
410
 
@@ -503,6 +511,22 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
503
511
 
504
512
  来源:[`packages/llm/llm-retry/src/types.ts:11`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-retry/src/types.ts)
505
513
 
514
+ ### `model/*`
515
+
516
+ <a id="modelselection--log-only"></a>
517
+
518
+ #### `model/selection` — log-only
519
+
520
+ ```ts persistence-catalog
521
+ /**
522
+ * Complete validated model selection requested for subsequent prompt
523
+ * assembly. Log-only: it never enters derived model history.
524
+ */
525
+ 'model/selection': ModelSelection
526
+ ```
527
+
528
+ 来源:[`packages/api/session-controller/src/types.ts:41`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/api/session-controller/src/types.ts)
529
+
506
530
  ### `permission/*`
507
531
 
508
532
  <a id="permissionpreset--log-only"></a>
@@ -513,13 +537,13 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
513
537
  /**
514
538
  * Records the selected preset as durable, log-only user intent. The knob
515
539
  * events follow in the same turn and control execution; this event stays
516
- * out of the model transcript and lets {@link effectivePermissionPreset}
540
+ * out of the model transcript and lets the permission projection unit
517
541
  * preserve a selection when bundles match.
518
542
  */
519
543
  'permission/preset': { preset: string }
520
544
  ```
521
545
 
522
- 来源:[`packages/interaction/permission-presets/src/index.ts:50`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/permission-presets/src/index.ts)
546
+ 来源:[`packages/interaction/permission-presets/src/index.ts:53`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/permission-presets/src/index.ts)
523
547
 
524
548
  ### `plan/*`
525
549
 
@@ -531,12 +555,12 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
531
555
  /**
532
556
  * Whether plan mode is in force from this point on: log-only, non-surface,
533
557
  * whole-value replace. The last `plan/mode` wins; a log with none folds to
534
- * inactive through {@link foldPlanMode}.
558
+ * inactive through the projection unit's fold.
535
559
  */
536
560
  'plan/mode': { active: boolean }
537
561
  ```
538
562
 
539
- 来源:[`packages/plan/plan-mode/src/index.ts:53`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/plan/plan-mode/src/index.ts)
563
+ 来源:[`packages/plan/plan-mode/src/index.ts:46`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/plan/plan-mode/src/index.ts)
540
564
 
541
565
  ### `request/*`
542
566
 
@@ -552,7 +576,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
552
576
  'request/context': RequestContext
553
577
  ```
554
578
 
555
- 来源:[`packages/core/session/src/types.ts:313`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
579
+ 来源:[`packages/core/session/src/types.ts:341`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
556
580
 
557
581
  <a id="requestheader--log-only"></a>
558
582
 
@@ -563,10 +587,15 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
563
587
  * Full header for the next request, appended inside its step before dispatch.
564
588
  * It is log-only; the latest snapshot reconstructs the request header.
565
589
  */
566
- 'request/header': { header: EpochHeader; reason: RequestHeaderReason }
590
+ 'request/header': {
591
+ header: EpochHeader
592
+ reason: RequestHeaderReason
593
+ /** A changed header also begins a distinct model-message series. */
594
+ startsSeries?: true
595
+ }
567
596
  ```
568
597
 
569
- 来源:[`packages/core/session/src/types.ts:308`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
598
+ 来源:[`packages/core/session/src/types.ts:331`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
570
599
 
571
600
  ### `sandbox/*`
572
601
 
@@ -579,7 +608,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
579
608
  * The session's sandbox mode was switched — log-only (like `approval/*`;
580
609
  * NOT a surface event, carries no `surfaceOp`): durable and replayable,
581
610
  * never in the model transcript. The LAST such event is the session's
582
- * override ({@link effectiveSandboxMode}). `source: 'delegation'` marks
611
+ * override (folded by the sandboxMode projection unit). `source: 'delegation'` marks
583
612
  * an override seeded into a child; an absent source is a runtime switch.
584
613
  */
585
614
  'sandbox/mode': {
@@ -620,12 +649,12 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
620
649
  * Marks the end of a constructor seed. Events before it have smaller seq
621
650
  * values and came from the seed (resume, fork, or replay); this lifecycle
622
651
  * produced none of them. This log-only event is the durable projection of
623
- * {@link Session.firstLiveSeq}. Its payload is empty — position and `time`
624
- * carry the meaning.
652
+ * {@link Session.firstLiveSeq}.
625
653
  *
626
- * Locate the LAST one in stored history. A seed already ending in one is not
627
- * re-marked, so reopening an untouched session does not grow its log per
628
- * pickup and the event need not be at the current `firstLiveSeq`.
654
+ * A fresh fork child owns one `{ inherited: true }` marker at its exact
655
+ * inherited-prefix cut, even when that prefix ends in an ancestor marker.
656
+ * The last tagged marker is the current Session's cut; untagged markers keep
657
+ * ordinary restore and replay lifecycle boundaries.
629
658
  *
630
659
  * `Session`'s constructor is the only legitimate writer. The invariant
631
660
  * companion deliberately constrains nothing here, so a plugin appending one
@@ -638,10 +667,10 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
638
667
  * writers — a concurrently live session holds its own boundary elsewhere,
639
668
  * so tolerating concurrent writers needs a signal beyond the log.
640
669
  */
641
- 'session/end-seed': Record<string, never>
670
+ 'session/end-seed': { inherited?: true }
642
671
  ```
643
672
 
644
- 来源:[`packages/core/session/src/types.ts:336`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
673
+ 来源:[`packages/core/session/src/types.ts:375`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
645
674
 
646
675
  <a id="sessiontitle--log-only"></a>
647
676
 
@@ -657,7 +686,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
657
686
 
658
687
  类型:[SessionTitleEventData](./subsystems/session-title.md)
659
688
 
660
- 来源:[`packages/session/session-title/src/index.ts:100`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-title/src/index.ts)
689
+ 来源:[`packages/session/session-title/src/index.ts:77`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-title/src/index.ts)
661
690
 
662
691
  <a id="sessiontitle-llm-request--log-only"></a>
663
692
 
@@ -670,7 +699,27 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
670
699
 
671
700
  类型:[SessionTitleLlmRequestEventData](./subsystems/session-title.md)
672
701
 
673
- 来源:[`packages/session/session-title-llm/src/index.ts:43`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-title-llm/src/index.ts)
702
+ 来源:[`packages/session/session-title-llm/src/index.ts:45`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-title-llm/src/index.ts)
703
+
704
+ ### `session-log-deepseek/*`
705
+
706
+ <a id="session-log-deepseekdelivery-accepted--log-only"></a>
707
+
708
+ #### `session-log-deepseek/delivery-accepted` — log-only
709
+
710
+ ```ts persistence-catalog
711
+ /** Records that the configured endpoint accepted one delivery through `throughSeq`. */
712
+ 'session-log-deepseek/delivery-accepted': {
713
+ /** Session identity the accepted delivery carried; inherited fork markers retain the parent's id. */
714
+ sessionId: import('@deepseek-ai/dsh-session/types').SessionId
715
+ /** Accepted Session format generation; absence identifies version 0. */
716
+ sessionFormatVersion?: number
717
+ /** Last canonical event included in the accepted request. */
718
+ throughSeq: import('@deepseek-ai/dsh-session/types').SessionSeq
719
+ }
720
+ ```
721
+
722
+ 来源:[`packages/session/session-log-deepseek/src/types.ts:59`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-log-deepseek/src/types.ts)
674
723
 
675
724
  ### `step/*`
676
725
 
@@ -683,7 +732,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
683
732
  'step/end': { turn: number; step: number }
684
733
  ```
685
734
 
686
- 来源:[`packages/core/session/src/types.ts:256`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
735
+ 来源:[`packages/core/session/src/types.ts:281`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
687
736
 
688
737
  <a id="stepstart--log-only"></a>
689
738
 
@@ -694,7 +743,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
694
743
  'step/start': { turn: number; step: number }
695
744
  ```
696
745
 
697
- 来源:[`packages/core/session/src/types.ts:254`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
746
+ 来源:[`packages/core/session/src/types.ts:279`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
698
747
 
699
748
  ### `subagent/*`
700
749
 
@@ -713,7 +762,26 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
713
762
  'subagent/descriptor': SubagentDescriptorData
714
763
  ```
715
764
 
716
- 来源:[`packages/subagent/subagent/src/descriptor.ts:37`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/subagent/src/descriptor.ts)
765
+ 来源:[`packages/subagent/subagent/src/descriptor.ts:38`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/subagent/src/descriptor.ts)
766
+
767
+ <a id="subagentmodel-selection-policy--log-only"></a>
768
+
769
+ #### `subagent/model-selection-policy` — 仅日志
770
+
771
+ ```ts persistence-catalog
772
+ /**
773
+ * Records that this session's delegation tool exposes child provider,
774
+ * model, and reasoning-effort selection. Appended before the first model
775
+ * request; absence means the fixed-route definition. Log-only: it carries
776
+ * no `surfaceOp` and never enters model history.
777
+ */
778
+ 'subagent/model-selection-policy': {
779
+ /** Exact routes this Session may select explicitly for a child. */
780
+ allowedModels: AllowedModelRoute[]
781
+ }
782
+ ```
783
+
784
+ 来源:[`packages/subagent/tool-subagent/src/model-selection-state.ts:17`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/tool-subagent/src/model-selection-state.ts)
717
785
 
718
786
  ### `team/*`
719
787
 
@@ -723,12 +791,12 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
723
791
 
724
792
  ```ts persistence-catalog
725
793
  /** Whole teammate lifecycle value, stored only in the Team Lead Session. */
726
- 'team/member': { version: 1; teamId: TeamId; member: TeamMemberSnapshot }
794
+ 'team/member': { version: 2; teamId: TeamId; member: TeamMemberSnapshot }
727
795
  ```
728
796
 
729
797
  类型:[TeamId](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/subsystems/agent-team.zh.md) · [TeamMemberSnapshot](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/subsystems/agent-team.zh.md)
730
798
 
731
- 来源:[`packages/experimental/agent-team/src/types.ts:206`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/agent-team/src/types.ts)
799
+ 来源:[`packages/experimental/agent-team/src/types.ts:204`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/agent-team/src/types.ts)
732
800
 
733
801
  <a id="teammessagedelivered--log-only"></a>
734
802
 
@@ -737,7 +805,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
737
805
  ```ts persistence-catalog
738
806
  /** Durable acknowledgement that the target Session recorded the message. */
739
807
  'team/message/delivered': {
740
- version: 1
808
+ version: 2
741
809
  teamId: TeamId
742
810
  messageId: TeamMessageId
743
811
  targetId: SessionId
@@ -746,7 +814,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
746
814
 
747
815
  类型:[TeamId](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/subsystems/agent-team.zh.md) · [TeamMessageId](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/subsystems/agent-team.zh.md)
748
816
 
749
- 来源:[`packages/experimental/agent-team/src/types.ts:212`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/agent-team/src/types.ts)
817
+ 来源:[`packages/experimental/agent-team/src/types.ts:210`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/agent-team/src/types.ts)
750
818
 
751
819
  <a id="teammessagequeued--log-only"></a>
752
820
 
@@ -754,12 +822,12 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
754
822
 
755
823
  ```ts persistence-catalog
756
824
  /** Durable mailbox enqueue, stored before delivery is attempted. */
757
- 'team/message/queued': { version: 1; teamId: TeamId; message: TeamMessageSnapshot }
825
+ 'team/message/queued': { version: 2; teamId: TeamId; message: TeamMessageSnapshot }
758
826
  ```
759
827
 
760
828
  类型:[TeamId](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/subsystems/agent-team.zh.md) · [TeamMessageSnapshot](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/subsystems/agent-team.zh.md)
761
829
 
762
- 来源:[`packages/experimental/agent-team/src/types.ts:210`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/agent-team/src/types.ts)
830
+ 来源:[`packages/experimental/agent-team/src/types.ts:208`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/agent-team/src/types.ts)
763
831
 
764
832
  <a id="teamtask--log-only"></a>
765
833
 
@@ -767,12 +835,12 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
767
835
 
768
836
  ```ts persistence-catalog
769
837
  /** Whole shared-task value, stored only in the Team Lead Session. */
770
- 'team/task': { version: 1; teamId: TeamId; task: TeamTaskSnapshot }
838
+ 'team/task': { version: 2; teamId: TeamId; task: TeamTaskSnapshot }
771
839
  ```
772
840
 
773
841
  类型:[TeamId](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/subsystems/agent-team.zh.md) · [TeamTaskSnapshot](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/subsystems/agent-team.zh.md)
774
842
 
775
- 来源:[`packages/experimental/agent-team/src/types.ts:208`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/agent-team/src/types.ts)
843
+ 来源:[`packages/experimental/agent-team/src/types.ts:206`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/agent-team/src/types.ts)
776
844
 
777
845
  ### `todo/*`
778
846
 
@@ -785,9 +853,9 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
785
853
  'todo/write': { todos: TodoItem[] }
786
854
  ```
787
855
 
788
- 类型:[TodoItem](./subsystems/session.md)
856
+ 类型:[TodoItem](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/subsystems/todo.zh.md)
789
857
 
790
- 来源:[`packages/core/session/src/types.ts:303`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
858
+ 来源:[`packages/todo/tool-todo/src/types.ts:31`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/todo/tool-todo/src/types.ts)
791
859
 
792
860
  ### `tool/*`
793
861
 
@@ -801,12 +869,12 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
801
869
  * JSON string exactly as the model produced it (unparsed). `callId` pairs the
802
870
  * call with its `tool/result`.
803
871
  */
804
- 'tool/call': { turn: number; step: number; callId: CallId; name: string; arguments: string }
872
+ 'tool/call': { turn: number; step: number; callId: ToolCallId; name: string; arguments: string }
805
873
  ```
806
874
 
807
- 类型:[CallId](./subsystems/core.md)
875
+ 类型:[ToolCallId](./subsystems/core.md)
808
876
 
809
- 来源:[`packages/core/session/src/types.ts:283`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
877
+ 来源:[`packages/core/session/src/types.ts:308`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
810
878
 
811
879
  <a id="toolcode-dispatch--log-only"></a>
812
880
 
@@ -828,7 +896,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
828
896
  * before returning), so its execution-enclosure relation holds by
829
897
  * construction.
830
898
  */
831
- 'tool/code-dispatch': CodeDispatchEventData
899
+ 'tool/code-dispatch': PtcDispatchEventData
832
900
  ```
833
901
 
834
902
  来源:[`packages/core/tools/src/types.ts:56`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/types.ts)
@@ -851,7 +919,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
851
919
  * with `tool/code-dispatch` by `subCallId` (timing = the two events'
852
920
  * `time` fields).
853
921
  */
854
- 'tool/code-dispatch-start': CodeDispatchStartEventData
922
+ 'tool/code-dispatch-start': PtcDispatchStartEventData
855
923
  ```
856
924
 
857
925
  来源:[`packages/core/tools/src/types.ts:40`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/types.ts)
@@ -881,7 +949,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
881
949
  }
882
950
  ```
883
951
 
884
- 来源:[`packages/core/session/src/types.ts:295`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
952
+ 来源:[`packages/core/session/src/types.ts:320`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
885
953
 
886
954
  ### `tool-workflow/*`
887
955
 
@@ -961,7 +1029,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
961
1029
 
962
1030
  类型:[TurnEndReason](./subsystems/session.md)
963
1031
 
964
- 来源:[`packages/core/session/src/types.ts:252`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
1032
+ 来源:[`packages/core/session/src/types.ts:277`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
965
1033
 
966
1034
  <a id="turnstart--log-only"></a>
967
1035
 
@@ -977,7 +1045,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
977
1045
  'turn/start': { turn: number }
978
1046
  ```
979
1047
 
980
- 来源:[`packages/core/session/src/types.ts:243`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
1048
+ 来源:[`packages/core/session/src/types.ts:268`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
981
1049
 
982
1050
  ### `user/*`
983
1051
 
@@ -996,7 +1064,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
996
1064
  'user/message': UserMessage
997
1065
  ```
998
1066
 
999
- 来源:[`packages/core/session/src/types.ts:264`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
1067
+ 来源:[`packages/core/session/src/types.ts:289`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
1000
1068
 
1001
1069
  ### `web/*`
1002
1070