diff --git a/.agents/notes/implemented/architecture/2026-08-21-deepseek-llm-api-request-extensions.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-21-deepseek-llm-api-request-extensions.i18n.yaml
index d0494dd7e8..d6de9c84a1 100644
--- a/.agents/notes/implemented/architecture/2026-08-21-deepseek-llm-api-request-extensions.i18n.yaml
+++ b/.agents/notes/implemented/architecture/2026-08-21-deepseek-llm-api-request-extensions.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/architecture/2026-08-21-deepseek-llm-api-request-extensions.md
-2026-08-21-deepseek-llm-api-request-extensions.md: 4ccf913e7944c3905437ceffc60e3b0c19d305ea
-2026-08-21-deepseek-llm-api-request-extensions.zh.md: 062d293ec87a6f0b1ef271f186e017be76d141f5
+2026-08-21-deepseek-llm-api-request-extensions.md: 8e4d1e375ecf4169ac8f7f93a3a341e4d4252191
+2026-08-21-deepseek-llm-api-request-extensions.zh.md: 05d68cdce547ff8bde059fd2d0fe1a1b44af67f0
diff --git a/.agents/notes/implemented/architecture/2026-08-21-deepseek-llm-api-request-extensions.md b/.agents/notes/implemented/architecture/2026-08-21-deepseek-llm-api-request-extensions.md
index 4ccf913e79..8e4d1e375e 100644
--- a/.agents/notes/implemented/architecture/2026-08-21-deepseek-llm-api-request-extensions.md
+++ b/.agents/notes/implemented/architecture/2026-08-21-deepseek-llm-api-request-extensions.md
@@ -20,7 +20,7 @@ The provider-neutral `llm` package and `llm-pi-ai` contain no extension type, se
## Incremental session-log field
-`@deepseek-ai/dsh-session-log-deepseek` owns `dsh_session_log` as an explicit opt-in. When enabled, each request carrying a live Session id sends the contiguous canonical event suffix after the greatest durable `session-log-deepseek/accepted` watermark for that same Session identity. The field includes the immutable Session header and complete event envelopes. A 2xx appends a new watermark for the transmitted `throughSeq`; that event enters the following request's suffix. Forked logs retain parent watermark ids, so a child starts from sequence zero under its own identity. Concurrent acceptances may arrive out of order, and the maximum watermark remains authoritative. A process-local fold scans each Session event once and incrementally consumes later appends; a new Session object or HMR generation rebuilds the fold from durable history.
+`@deepseek-ai/dsh-session-log-deepseek` owns `dsh_session_log` as an explicit opt-in. When enabled, each request carrying a live Session id sends the contiguous canonical event suffix after the greatest durable `session-log-deepseek/delivery-accepted` watermark for that same Session identity. The field includes the immutable Session header and complete event envelopes. A 2xx appends a new watermark for the transmitted `throughSeq`; that event enters the following request's suffix. Forked logs retain parent watermark ids, so a child starts from sequence zero under its own identity. Concurrent acceptances may arrive out of order, and the maximum watermark remains authoritative. A process-local fold scans each Session event once and incrementally consumes later appends; a new Session object or HMR generation rebuilds the fold from durable history.
The failure direction is at least once. A transport or provider rejection records no watermark. A crash after remote acceptance but before the watermark persists causes replay after resume, never a skipped sequence. Existing session checkpoints persist the event; the upload plugin owns no second store.
@@ -72,6 +72,6 @@ Registry tests pin duplicate ownership, effect-scoped disposal, detached field v
Official DeepSeek requests carry active package versions to their resolved `baseURL`, including configured gateways. An explicit Session-log opt-in also carries the complete newly unaccepted Session suffix. The fields are model-hidden and add no prompt tokens or KV-cache changes, but can substantially increase HTTP body size. Request-relative packing synchronously compares suffix and message strings before dispatch, so a large first upload or retry backlog can delay the event loop until candidate indexing is implemented. Encoding, manifest resolution, field collision, acceptance logging, or provider schema rejection fails the model request rather than silently dropping metadata.
-The accepted-watermark event becomes part of the canonical log and is itself delivered on a later request. Crash recovery can duplicate a suffix but does not infer acceptance from assistant output or create a second local cursor store. Direct calls without a live Session omit the session field; host package inventory remains available.
+The `delivery-accepted` event becomes part of the canonical log and is itself delivered on a later request. Crash recovery can duplicate a suffix but does not infer acceptance from assistant output or create a second local cursor store. Direct calls without a live Session omit the session field; host package inventory remains available.
The [DeepSeek request-identity decision](../feature/2026-08-11-deepseek-request-user-id-header.md) continues to own user/session headers, which remain outside the body. The [session-telemetry decision](../feature/2026-07-23-session-telemetry-otel-revival.md) remains current until a separate change removes that seam and backend; this request path does not alter OTel capture or sharing modes.
diff --git a/.agents/notes/implemented/architecture/2026-08-21-deepseek-llm-api-request-extensions.zh.md b/.agents/notes/implemented/architecture/2026-08-21-deepseek-llm-api-request-extensions.zh.md
index 062d293ec8..05d68cdce5 100644
--- a/.agents/notes/implemented/architecture/2026-08-21-deepseek-llm-api-request-extensions.zh.md
+++ b/.agents/notes/implemented/architecture/2026-08-21-deepseek-llm-api-request-extensions.zh.md
@@ -20,7 +20,7 @@ Status: implemented
## 增量会话日志字段
-`@deepseek-ai/dsh-session-log-deepseek` 以显式选择启用的方式拥有 `dsh_session_log`。启用后,每个携带存活会话 id 的请求都会发送该确切会话身份最大持久 `session-log-deepseek/accepted` 水位之后的连续权威事件后缀。该字段包含不可变会话 header 与完整事件信封。2xx 会为已发送的 `throughSeq` 追加新水位;该事件会进入下一次请求的后缀。Fork 日志会保留父级水位 id,因此子会话会在自己的身份下从序列零开始。并发接受可能乱序到达,最大水位仍保持权威。进程内 fold 会让每条会话事件只被扫描一次,并增量消费后续追加;新的会话对象或 HMR generation 会从持久历史重建该 fold。
+`@deepseek-ai/dsh-session-log-deepseek` 以显式选择启用的方式拥有 `dsh_session_log`。启用后,每个携带存活会话 id 的请求都会发送该确切会话身份最大持久 `session-log-deepseek/delivery-accepted` 水位之后的连续权威事件后缀。该字段包含不可变会话 header 与完整事件信封。2xx 会为已发送的 `throughSeq` 追加新水位;该事件会进入下一次请求的后缀。Fork 日志会保留父级水位 id,因此子会话会在自己的身份下从序列零开始。并发接受可能乱序到达,最大水位仍保持权威。进程内 fold 会让每条会话事件只被扫描一次,并增量消费后续追加;新的会话对象或 HMR generation 会从持久历史重建该 fold。
失败方向为至少一次。传输失败或提供方拒绝不会记录水位。远端接受后、水位持久化前发生崩溃,会在恢复后触发重放,绝不会跳过序列。现有会话检查点会持久化该事件;上传插件不拥有第二份存储。
@@ -72,6 +72,6 @@ Status: implemented
DeepSeek 官方请求会把存活包版本发送到解析后的 `baseURL`,包括已配置 gateway。显式选择启用会话日志后,请求还会携带完整的未接受会话新后缀。这些字段对模型不可见,不增加提示词 token,也不改变 KV Cache,但可能显著增大 HTTP 正文。请求相对打包会在派发前同步比较后缀字符串与消息字符串,因此在实现候选索引前,较大的首次上传或重试积压可能延迟事件循环。编码、manifest 解析、字段冲突、接受记录或提供方 schema 拒绝会使模型请求失败,而不会静默丢弃元数据。
-已接受水位事件会成为权威日志的一部分,并在后续请求中自行交付。崩溃恢复可能重复后缀,但不会根据 assistant 输出推断接受,也不会创建第二份本地游标存储。缺少存活会话的直接调用会省略会话字段;宿主包清单仍然可用。
+`delivery-accepted` 事件会成为权威日志的一部分,并在后续请求中自行交付。崩溃恢复可能重复后缀,但不会根据 assistant 输出推断接受,也不会创建第二份本地游标存储。缺少存活会话的直接调用会省略会话字段;宿主包清单仍然可用。
[DeepSeek 请求身份决策](../feature/2026-08-11-deepseek-request-user-id-header.zh.md)继续拥有 user/session header,且这些 header 仍位于正文之外。[会话遥测决策](../feature/2026-07-23-session-telemetry-otel-revival.zh.md)在另一项变更删除该 seam 与后端之前仍保持当前有效;本请求路径不改变 OTel 捕获或共享模式。
diff --git a/docs/deepseek-llm-api-wire-extensions.i18n.yaml b/docs/deepseek-llm-api-wire-extensions.i18n.yaml
index 9ee7ed4d61..b8af9b2f92 100644
--- a/docs/deepseek-llm-api-wire-extensions.i18n.yaml
+++ b/docs/deepseek-llm-api-wire-extensions.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/deepseek-llm-api-wire-extensions.md
-deepseek-llm-api-wire-extensions.md: 39cb6ddd5096c0a94552a6ad08c2cd9cddb6f92e
-deepseek-llm-api-wire-extensions.zh.md: a9cf637bed746f66af6ad1cf6da3915090494c54
+deepseek-llm-api-wire-extensions.md: 8a3f089c77a0879ef4056f3c16583935f2219248
+deepseek-llm-api-wire-extensions.zh.md: 1cf5ea1ce1cd410b23b011480a8c623827753464
diff --git a/docs/deepseek-llm-api-wire-extensions.md b/docs/deepseek-llm-api-wire-extensions.md
index 39cb6ddd50..8a3f089c77 100644
--- a/docs/deepseek-llm-api-wire-extensions.md
+++ b/docs/deepseek-llm-api-wire-extensions.md
@@ -13,7 +13,7 @@ The adapter sends the additions to its resolved `baseURL`, including a configure
| HTTP field names | Lowercase kebab-case; HTTP matching remains case-insensitive | `user-agent`, `x-deepseek-harness-session-id` |
| DeepSeek request-body extension fields | Snake case with the reserved `dsh_` prefix | `dsh_plugin_packages`, `dsh_session_log` |
| DSH-owned nested JSON members | Camel case | `afterSeq`, `messageIndex`, `utf8Start` |
-| Tagged values | Kebab-case strings; durable events use `domain/action` | `message-references`, `session-log-deepseek/accepted` |
+| Tagged values | Kebab-case strings; durable events use `domain/action` | `message-references`, `session-log-deepseek/delivery-accepted` |
Each body extension owns its `version` independently. A version applies only to the object that contains it; no compatibility or ordering relationship exists between versions of different fields. JSON member order is not part of the protocol.
@@ -236,7 +236,7 @@ After the endpoint returns HTTP 2xx, the contribution appends this canonical eve
```json
{
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 8,
"time": 1780000000002,
"data": {
@@ -246,7 +246,7 @@ After the endpoint returns HTTP 2xx, the contribution appends this canonical eve
}
```
-`accepted` means that the configured endpoint returned HTTP 2xx for the containing LLM request. It does not assert SSE completion or remote persistence. The event's `throughSeq` must identify an earlier event, and its `sessionId` identifies the Session whose suffix was sent.
+`delivery-accepted` means that the configured endpoint returned HTTP 2xx for the containing LLM request. It does not assert SSE completion or remote persistence. The event's `throughSeq` must identify an earlier event, and its `sessionId` identifies the Session whose suffix was sent.
The sender folds the greatest matching `throughSeq`, so concurrent accepted requests cannot move the cursor backward. A resumed process rebuilds the cursor from the durable log. A fork ignores inherited watermarks that name its parent, and therefore sends its own complete inherited prefix before advancing under the child id. The watermark event itself belongs to the next unsent suffix.
diff --git a/docs/deepseek-llm-api-wire-extensions.zh.md b/docs/deepseek-llm-api-wire-extensions.zh.md
index a9cf637bed..1cf5ea1ce1 100644
--- a/docs/deepseek-llm-api-wire-extensions.zh.md
+++ b/docs/deepseek-llm-api-wire-extensions.zh.md
@@ -13,7 +13,7 @@
| HTTP 字段名 | 小写 kebab-case;HTTP 匹配仍不区分大小写 | `user-agent`, `x-deepseek-harness-session-id` |
| DeepSeek 请求正文扩展字段 | 使用保留 `dsh_` 前缀的 snake case | `dsh_plugin_packages`, `dsh_session_log` |
| DSH 持有的嵌套 JSON 成员 | Camel case | `afterSeq`, `messageIndex`, `utf8Start` |
-| 带标签的值 | 使用 kebab-case 字符串;持久事件采用 `domain/action` | `message-references`, `session-log-deepseek/accepted` |
+| 带标签的值 | 使用 kebab-case 字符串;持久事件采用 `domain/action` | `message-references`, `session-log-deepseek/delivery-accepted` |
每个正文扩展独立持有自身的 `version`。版本仅适用于包含该字段的对象;不同字段的版本之间不存在兼容或排序关系。JSON 成员顺序不属于协议。
@@ -236,7 +236,7 @@
```json
{
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 8,
"time": 1780000000002,
"data": {
@@ -246,7 +246,7 @@
}
```
-`accepted` 表示已配置端点为包含该字段的 LLM 请求返回 HTTP 2xx。它不表示 SSE 已完整结束,也不表示远端已经持久化。该事件的 `throughSeq` 必须标识一项更早的事件,`sessionId` 则标识已发送后缀所属的会话。
+`delivery-accepted` 表示已配置端点为包含该字段的 LLM 请求返回 HTTP 2xx。它不表示 SSE 已完整结束,也不表示远端已经持久化。该事件的 `throughSeq` 必须标识一项更早的事件,`sessionId` 则标识已发送后缀所属的会话。
发送方会折叠最大的匹配 `throughSeq`,因此并发已接受请求无法使游标倒退。恢复后的进程会从持久日志重建游标。fork 会忽略命名其父会话的继承水位,因此先发送自身完整的继承前缀,再以子会话 id 推进。水位事件自身属于下一段未发送后缀。
diff --git a/docs/persistence-catalog.i18n.yaml b/docs/persistence-catalog.i18n.yaml
index 234cd56f74..b8be9cdbc5 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: 3969ec00068a0b40eb7362a1805313ad35c84e5e
-persistence-catalog.zh.md: f0e58af4181c60e1d675f7f5b394accfee0d7cf0
+persistence-catalog.md: ad65bc6bd3971d204f9bce3c7ee822920ebe6a85
+persistence-catalog.zh.md: 3af5d7c46e7969b29a66b04adddc41d9d108553d
diff --git a/docs/persistence-catalog.md b/docs/persistence-catalog.md
index 3969ec0006..ad65bc6bd3 100644
--- a/docs/persistence-catalog.md
+++ b/docs/persistence-catalog.md
@@ -669,14 +669,14 @@ Source: [`packages/session/session-title-llm/src/index.ts:43`](../packages/sessi
### `session-log-deepseek/*`
-
+
-#### `session-log-deepseek/accepted` — log-only
+#### `session-log-deepseek/delivery-accepted` — log-only
```ts persistence-catalog
-/** Records a confirmed HTTP acceptance watermark for restart-safe suffix selection. */
-'session-log-deepseek/accepted': {
- /** Session identity the accepted request carried; inherited fork markers retain the parent's id. */
+/** Records that the configured endpoint accepted one delivery through `throughSeq`. */
+'session-log-deepseek/delivery-accepted': {
+ /** Session identity the accepted delivery carried; inherited fork markers retain the parent's id. */
sessionId: import('@deepseek-ai/dsh-session/types').SessionId
/** Last canonical event included in the accepted request. */
throughSeq: number
diff --git a/docs/persistence-catalog.zh.md b/docs/persistence-catalog.zh.md
index f0e58af418..3af5d7c46e 100644
--- a/docs/persistence-catalog.zh.md
+++ b/docs/persistence-catalog.zh.md
@@ -671,14 +671,14 @@ export type SessionEvent = {
### `session-log-deepseek/*`
-
+
-#### `session-log-deepseek/accepted` — log-only
+#### `session-log-deepseek/delivery-accepted` — log-only
```ts persistence-catalog
-/** Records a confirmed HTTP acceptance watermark for restart-safe suffix selection. */
-'session-log-deepseek/accepted': {
- /** Session identity the accepted request carried; inherited fork markers retain the parent's id. */
+/** Records that the configured endpoint accepted one delivery through `throughSeq`. */
+'session-log-deepseek/delivery-accepted': {
+ /** Session identity the accepted delivery carried; inherited fork markers retain the parent's id. */
sessionId: import('@deepseek-ai/dsh-session/types').SessionId
/** Last canonical event included in the accepted request. */
throughSeq: number
diff --git a/examples/jsonrpc-agent/tests/snapshots/text-turn/notifications.expected.jsonl b/examples/jsonrpc-agent/tests/snapshots/text-turn/notifications.expected.jsonl
index 8d85d9bf06..9ddc977448 100644
--- a/examples/jsonrpc-agent/tests/snapshots/text-turn/notifications.expected.jsonl
+++ b/examples/jsonrpc-agent/tests/snapshots/text-turn/notifications.expected.jsonl
@@ -7,7 +7,7 @@
{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"session/title","seq":5,"time":0,"data":{"title":"Reply with exactly: SDK snapshot","messageSeqs":[4],"source":{"kind":"fallback"}}}}}
{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"request/header","seq":6,"time":0,"data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"system":"{{system}}","tools":"{{tools}}"},"reason":"initial"}}}}
{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"request/context","seq":7,"time":0,"data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}}}}
-{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"session-log-deepseek/accepted","seq":8,"time":0,"data":{"sessionId":"{{sessionId}}","throughSeq":7}}}}
+{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"session-log-deepseek/delivery-accepted","seq":8,"time":0,"data":{"sessionId":"{{sessionId}}","throughSeq":7}}}}
{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"assistant/chunk","seq":9,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}}}}}
{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"assistant/chunk","seq":10,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"The"}}}}}
{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"assistant/chunk","seq":11,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" user"}}}}}
diff --git a/examples/jsonrpc-agent/tests/snapshots/text-turn/session.jsonl b/examples/jsonrpc-agent/tests/snapshots/text-turn/session.jsonl
index 1ab358ca6a..3438bae4c5 100644
--- a/examples/jsonrpc-agent/tests/snapshots/text-turn/session.jsonl
+++ b/examples/jsonrpc-agent/tests/snapshots/text-turn/session.jsonl
@@ -7,7 +7,7 @@
{"type":"session/title","data":{"title":"Reply with exactly: SDK snapshot","messageSeqs":[4],"source":{"kind":"fallback"}}}
{"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"system":"{{system}}","tools":"{{tools}}"},"reason":"initial"}}
{"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}}
-{"type":"session-log-deepseek/accepted","data":{"sessionId":"sdk-snapshot-text","throughSeq":7}}
+{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"sdk-snapshot-text","throughSeq":7}}
{"type":"assistant/chunk","data":{"turn":1,"step":1,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}}}
{"type":"reasoning-chunks","data":{"turn":1,"step":1,"index":0,"dt":[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],"texts":["The"," user"," wants"," me"," to"," reply"," with"," exactly"," \"","SD","K"," snapshot"," OK","\"."," Let"," me"," do"," that","."]}}
{"type":"assistant/chunk","data":{"turn":1,"step":1,"chunk":{"type":"block-start","index":1,"blockType":"text"}}}
diff --git a/packages/core/session/src/known-event-types.ts b/packages/core/session/src/known-event-types.ts
index 076d9bbb88..b4e7117541 100644
--- a/packages/core/session/src/known-event-types.ts
+++ b/packages/core/session/src/known-event-types.ts
@@ -42,7 +42,7 @@ export const KNOWN_SESSION_EVENT_TYPES: ReadonlySet = new Set([
'request/header',
'sandbox/mode',
'schedule/change',
- 'session-log-deepseek/accepted',
+ 'session-log-deepseek/delivery-accepted',
'session/end-seed',
'session/title',
'session/title-llm-request',
diff --git a/packages/session/session-log-deepseek/README.i18n.yaml b/packages/session/session-log-deepseek/README.i18n.yaml
index 361eaeb20a..362db6ab85 100644
--- a/packages/session/session-log-deepseek/README.i18n.yaml
+++ b/packages/session/session-log-deepseek/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 packages/session/session-log-deepseek/README.md
-README.md: 5b2b9d5eb087efd0fecd4040d9000a08ccc906cc
-README.zh.md: c477bc7762fa6f4660e743bb1c5d0b80cdeb0c98
+README.md: 39ff31b8c33f2f8e0a12cb6ed0814d97f982e3c9
+README.zh.md: 0121644cc0b7ebbe2e6b80ac6c31ae21e088fe95
diff --git a/packages/session/session-log-deepseek/README.md b/packages/session/session-log-deepseek/README.md
index 5b2b9d5eb0..39ff31b8c3 100644
--- a/packages/session/session-log-deepseek/README.md
+++ b/packages/session/session-log-deepseek/README.md
@@ -2,7 +2,7 @@
English | [中文](README.zh.md)
-Incremental canonical session-log upload for official DeepSeek LLM API requests. This function plugin injects `ctx.sessions` and `ctx.deepseekLlmApiExtensions`, then owns the `dsh_session_log` request field and the durable `session-log-deepseek/accepted` watermark event.
+Incremental canonical session-log upload for official DeepSeek LLM API requests. This function plugin injects `ctx.sessions` and `ctx.deepseekLlmApiExtensions`, then owns the `dsh_session_log` request field and the durable `session-log-deepseek/delivery-accepted` event from which it derives the acceptance watermark.
## Configuration
@@ -20,7 +20,7 @@ Each event is sent raw unless request-relative packing reduces its JSON byte siz
## Acceptance and retry
-The DeepSeek adapter calls the prepared contribution's `accept()` after HTTP 2xx, before it consumes the SSE body. Acceptance appends `session-log-deepseek/accepted` with the uploaded `throughSeq`; the next request uploads that watermark as part of its new suffix. Transport and non-2xx failures append no watermark, so later requests resend the uncertain range. Concurrent accepted requests may append watermarks out of order; folding their maximum prevents cursor regression.
+The DeepSeek adapter calls the prepared contribution's `accept()` after HTTP 2xx, before it consumes the SSE body. Acceptance appends `session-log-deepseek/delivery-accepted` with the uploaded `throughSeq`; the next request uploads that event as part of its new suffix. Transport and non-2xx failures append no acceptance record, so later requests resend the uncertain range. Concurrent deliveries may be accepted out of order; folding the maximum matching `throughSeq` prevents cursor regression.
A crash after server acceptance but before the watermark reaches persistence can replay an accepted range after restart. This is the at-least-once failure direction: uncertainty creates duplicates, never a skipped sequence. The ordinary session checkpoint policy persists the watermark at the next semantic checkpoint; this plugin performs no independent I/O.
diff --git a/packages/session/session-log-deepseek/README.zh.md b/packages/session/session-log-deepseek/README.zh.md
index c477bc7762..0121644cc0 100644
--- a/packages/session/session-log-deepseek/README.zh.md
+++ b/packages/session/session-log-deepseek/README.zh.md
@@ -2,7 +2,7 @@
[English](README.md) | 中文
-用于 DeepSeek 官方 LLM API 请求的增量权威会话日志上传。该函数插件注入 `ctx.sessions` 与 `ctx.deepseekLlmApiExtensions`,并拥有 `dsh_session_log` 请求字段和持久的 `session-log-deepseek/accepted` 水位事件。
+用于 DeepSeek 官方 LLM API 请求的增量权威会话日志上传。该函数插件注入 `ctx.sessions` 与 `ctx.deepseekLlmApiExtensions`,并拥有 `dsh_session_log` 请求字段以及用于派生接受水位的持久 `session-log-deepseek/delivery-accepted` 事件。
## 配置
@@ -20,7 +20,7 @@
## 接受与重试
-DeepSeek 适配器会在 HTTP 2xx 后、消费 SSE(Server-Sent Events)正文前调用已准备贡献的 `accept()`。接受操作会追加 `session-log-deepseek/accepted` 及已上传的 `throughSeq`;下一次请求再把该水位作为新后缀的一部分上传。传输失败与非 2xx 失败不会追加水位,因此后续请求会重发不确定范围。并发请求可能乱序追加已接受水位;折叠其中最大值可以防止游标回退。
+DeepSeek 适配器会在 HTTP 2xx 后、消费 SSE(Server-Sent Events)正文前调用已准备贡献的 `accept()`。接受操作会追加 `session-log-deepseek/delivery-accepted` 及已上传的 `throughSeq`;下一次请求再把该事件作为新后缀的一部分上传。传输失败与非 2xx 失败不会追加接受记录,因此后续请求会重发不确定范围。并发交付可能乱序得到接受;折叠匹配记录中最大的 `throughSeq` 可以防止游标回退。
服务端接受后、持久化水位前发生崩溃,可能让恢复后的进程重放已经接受的范围。这是至少一次交付的失败方向:不确定性会制造重复,绝不会跳过序列。普通会话检查点策略会在下一个语义检查点持久化水位;本插件不执行独立 I/O。
diff --git a/packages/session/session-log-deepseek/src/index.ts b/packages/session/session-log-deepseek/src/index.ts
index 99ee268e20..2d957c839d 100644
--- a/packages/session/session-log-deepseek/src/index.ts
+++ b/packages/session/session-log-deepseek/src/index.ts
@@ -50,7 +50,7 @@ export function acceptedThrough(session: Session): number {
const start = previous?.scannedEvents ?? 0
for (let index = start; index < events.length; index++) {
const event = events[index] as SessionEvent
- if (event.type !== 'session-log-deepseek/accepted') continue
+ if (event.type !== 'session-log-deepseek/delivery-accepted') continue
if (typeof event.data.sessionId !== 'string' || event.data.sessionId.length === 0
|| !Number.isSafeInteger(event.data.throughSeq) || event.data.throughSeq < 0
|| event.data.throughSeq >= event.seq) {
@@ -99,7 +99,7 @@ export function apply(ctx: Context, config: Config): void {
return {
value,
accept: () => {
- session.append('session-log-deepseek/accepted', { sessionId: session.id, throughSeq })
+ session.append('session-log-deepseek/delivery-accepted', { sessionId: session.id, throughSeq })
// TODO: Add an immediate lightweight checkpoint if duplicate replay after a 2xx crash window becomes unacceptable.
},
}
diff --git a/packages/session/session-log-deepseek/src/invariant.ts b/packages/session/session-log-deepseek/src/invariant.ts
index 8e0a84db60..e739126ab6 100644
--- a/packages/session/session-log-deepseek/src/invariant.ts
+++ b/packages/session/session-log-deepseek/src/invariant.ts
@@ -13,30 +13,30 @@ export const name = 'session-log-deepseek-invariant'
export const inject = ['invariants']
/** Validate one acceptance watermark against its containing event and session. */
-function validateAccepted(session: Session, event: SessionEvent<'session-log-deepseek/accepted'>, fail: InvariantFailure): void {
+function validateDeliveryAccepted(session: Session, event: SessionEvent<'session-log-deepseek/delivery-accepted'>, fail: InvariantFailure): void {
const { sessionId, throughSeq } = event.data
const inherited = session.header.parentSession !== undefined
&& session.header.seedLength !== undefined
&& event.seq < session.header.seedLength
if (sessionId !== session.id && !inherited) {
- fail('a non-inherited session-log-deepseek/accepted event must name its containing session')
+ fail('a non-inherited session-log-deepseek/delivery-accepted event must name its containing session')
}
if (!Number.isSafeInteger(throughSeq) || throughSeq < 0 || throughSeq >= event.seq) {
- fail(`session-log-deepseek/accepted throughSeq must identify an earlier event, got ${throughSeq} at seq ${event.seq}`)
+ fail(`session-log-deepseek/delivery-accepted throughSeq must identify an earlier event, got ${throughSeq} at seq ${event.seq}`)
}
}
/** Validate acceptance watermarks already present in one Session. */
function validateSession(session: Session, fail: InvariantFailure): void {
for (const event of session.events) {
- if (event.type === 'session-log-deepseek/accepted') validateAccepted(session, event, fail)
+ if (event.type === 'session-log-deepseek/delivery-accepted') validateDeliveryAccepted(session, event, fail)
}
}
/** Validate one live session-event dispatch. */
function validateDispatched(args: unknown[], fail: InvariantFailure): void {
const [session, event] = args as [Session, SessionEvent]
- if (event.type === 'session-log-deepseek/accepted') validateAccepted(session, event, fail)
+ if (event.type === 'session-log-deepseek/delivery-accepted') validateDeliveryAccepted(session, event, fail)
}
/** Install validation for restored, newly created, and newly appended watermarks. */
diff --git a/packages/session/session-log-deepseek/src/types.ts b/packages/session/session-log-deepseek/src/types.ts
index 25d9879f41..2680130c88 100644
--- a/packages/session/session-log-deepseek/src/types.ts
+++ b/packages/session/session-log-deepseek/src/types.ts
@@ -50,9 +50,9 @@ declare module '@deepseek-ai/dsh-deepseek-llm-api-extensions/types' {
declare module '@deepseek-ai/dsh-session/types' {
interface SessionEventMap {
- /** Records a confirmed HTTP acceptance watermark for restart-safe suffix selection. */
- 'session-log-deepseek/accepted': {
- /** Session identity the accepted request carried; inherited fork markers retain the parent's id. */
+ /** Records that the configured endpoint accepted one delivery through `throughSeq`. */
+ 'session-log-deepseek/delivery-accepted': {
+ /** Session identity the accepted delivery carried; inherited fork markers retain the parent's id. */
sessionId: import('@deepseek-ai/dsh-session/types').SessionId
/** Last canonical event included in the accepted request. */
throughSeq: number
diff --git a/packages/session/session-log-deepseek/tests/invariant.spec.ts b/packages/session/session-log-deepseek/tests/invariant.spec.ts
index 4467dede47..f39c4aec45 100644
--- a/packages/session/session-log-deepseek/tests/invariant.spec.ts
+++ b/packages/session/session-log-deepseek/tests/invariant.spec.ts
@@ -25,7 +25,7 @@ describe('DeepSeek session-log acceptance invariant', () => {
const ctx = await setup()
const session = ctx.sessions.create(SessionId('valid'))
session.append('turn/start', { turn: 1 })
- expect(() => session.append('session-log-deepseek/accepted', { sessionId: session.id, throughSeq: 0 }))
+ expect(() => session.append('session-log-deepseek/delivery-accepted', { sessionId: session.id, throughSeq: 0 }))
.not.toThrow()
})
@@ -33,7 +33,7 @@ describe('DeepSeek session-log acceptance invariant', () => {
const ctx = await setup()
const wrongId = ctx.sessions.create(SessionId('wrong-id'))
wrongId.append('turn/start', { turn: 1 })
- expect(() => wrongId.append('session-log-deepseek/accepted', {
+ expect(() => wrongId.append('session-log-deepseek/delivery-accepted', {
sessionId: SessionId('other'),
throughSeq: 0,
})).toThrow(expect.objectContaining>({
@@ -43,7 +43,7 @@ describe('DeepSeek session-log acceptance invariant', () => {
const wrongSeq = ctx.sessions.create(SessionId('wrong-seq'))
wrongSeq.append('turn/start', { turn: 1 })
- expect(() => wrongSeq.append('session-log-deepseek/accepted', {
+ expect(() => wrongSeq.append('session-log-deepseek/delivery-accepted', {
sessionId: wrongSeq.id,
throughSeq: 1,
})).toThrow(expect.objectContaining>({
@@ -60,7 +60,7 @@ describe('DeepSeek session-log acceptance invariant', () => {
const id = SessionId('late-invalid')
ctx.sessions.create(id, { seed: [
{ type: 'turn/start', seq: 0, time: 1, data: { turn: 1 } },
- { type: 'session-log-deepseek/accepted', seq: 1, time: 2, data: { sessionId: id, throughSeq: 1 } },
+ { type: 'session-log-deepseek/delivery-accepted', seq: 1, time: 2, data: { sessionId: id, throughSeq: 1 } },
] })
let failure: unknown
@@ -85,7 +85,7 @@ describe('DeepSeek session-log acceptance invariant', () => {
ctx.sessions.create(childId, {
seed: [
{ type: 'turn/start', seq: 0, time: 1, data: { turn: 1 } },
- { type: 'session-log-deepseek/accepted', seq: 1, time: 2, data: { sessionId: parentId, throughSeq: 0 } },
+ { type: 'session-log-deepseek/delivery-accepted', seq: 1, time: 2, data: { sessionId: parentId, throughSeq: 0 } },
],
meta: { parentSession: parentId, seedLength: 2 },
})
diff --git a/packages/session/session-log-deepseek/tests/upload.spec.ts b/packages/session/session-log-deepseek/tests/upload.spec.ts
index 510c983ce6..611a1a50da 100644
--- a/packages/session/session-log-deepseek/tests/upload.spec.ts
+++ b/packages/session/session-log-deepseek/tests/upload.spec.ts
@@ -67,7 +67,7 @@ describe('incremental DeepSeek session-log upload', () => {
expect(second.fields.dsh_session_log?.events).toHaveLength(2)
expect(second.fields.dsh_session_log?.events[0]).toMatchObject({
encoding: 'raw',
- event: { type: 'session-log-deepseek/accepted', seq: 2 },
+ event: { type: 'session-log-deepseek/delivery-accepted', seq: 2 },
})
})
@@ -107,7 +107,7 @@ describe('incremental DeepSeek session-log upload', () => {
const id = SessionId('incremental-fold')
const events: SessionEvent[] = [
{ type: 'turn/start', seq: 0, time: 1, data: { turn: 1 } },
- { type: 'session-log-deepseek/accepted', seq: 1, time: 2, data: { sessionId: id, throughSeq: 0 } },
+ { type: 'session-log-deepseek/delivery-accepted', seq: 1, time: 2, data: { sessionId: id, throughSeq: 0 } },
]
let reads = 0
const observed = new Proxy(events, {
@@ -126,7 +126,7 @@ describe('incremental DeepSeek session-log upload', () => {
events.push(
{ type: 'step/start', seq: 2, time: 3, data: { turn: 1, step: 1 } },
- { type: 'session-log-deepseek/accepted', seq: 3, time: 4, data: { sessionId: id, throughSeq: 2 } },
+ { type: 'session-log-deepseek/delivery-accepted', seq: 3, time: 4, data: { sessionId: id, throughSeq: 2 } },
)
expect(SessionLogDeepSeek.acceptedThrough(session)).toBe(2)
expect(reads).toBe(2)
@@ -147,7 +147,7 @@ describe('incremental DeepSeek session-log upload', () => {
expect(current.fields.dsh_session_log).toMatchObject({
afterSeq: 0,
throughSeq: 1,
- events: [{ event: { type: 'session-log-deepseek/accepted' } }],
+ events: [{ event: { type: 'session-log-deepseek/delivery-accepted' } }],
})
})
@@ -160,7 +160,7 @@ describe('incremental DeepSeek session-log upload', () => {
it('fails closed on a malformed persisted acceptance watermark', async () => {
const malformed = [{
- type: 'session-log-deepseek/accepted',
+ type: 'session-log-deepseek/delivery-accepted',
seq: 0,
time: 1,
data: { sessionId: 'malformed', throughSeq: 0 },
diff --git a/scripts/snapshots/python-sdk-single-exe/advanced/result.json b/scripts/snapshots/python-sdk-single-exe/advanced/result.json
index ff3e3ba3ae..0889fd6b9f 100644
--- a/scripts/snapshots/python-sdk-single-exe/advanced/result.json
+++ b/scripts/snapshots/python-sdk-single-exe/advanced/result.json
@@ -134,7 +134,7 @@
}
},
{
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 8,
"time": 0,
"data": {
@@ -329,7 +329,7 @@
}
},
{
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 19,
"time": 0,
"data": {
@@ -562,7 +562,7 @@
}
},
{
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 31,
"time": 0,
"data": {
@@ -788,7 +788,7 @@
}
},
{
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 44,
"time": 0,
"data": {
@@ -979,7 +979,7 @@
}
},
{
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 55,
"time": 0,
"data": {
@@ -1210,7 +1210,7 @@
}
},
{
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 70,
"time": 0,
"data": {
@@ -1437,7 +1437,7 @@
}
},
{
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 82,
"time": 0,
"data": {
@@ -1770,7 +1770,7 @@
"payload": {
"sessionId": "{{parent}}",
"event": {
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 8,
"time": 0,
"data": {
@@ -2031,7 +2031,7 @@
"payload": {
"sessionId": "{{parent}}",
"event": {
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 19,
"time": 0,
"data": {
@@ -2336,7 +2336,7 @@
"payload": {
"sessionId": "{{parent}}",
"event": {
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 31,
"time": 0,
"data": {
@@ -2640,7 +2640,7 @@
"payload": {
"sessionId": "{{parent}}",
"event": {
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 44,
"time": 0,
"data": {
@@ -3071,7 +3071,7 @@
"payload": {
"sessionId": "{{child-1}}",
"event": {
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 10,
"time": 0,
"data": {
@@ -3360,7 +3360,7 @@
"payload": {
"sessionId": "{{parent}}",
"event": {
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 55,
"time": 0,
"data": {
@@ -3823,7 +3823,7 @@
"payload": {
"sessionId": "{{child-2}}",
"event": {
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 10,
"time": 0,
"data": {
@@ -4143,7 +4143,7 @@
"payload": {
"sessionId": "{{parent}}",
"event": {
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 70,
"time": 0,
"data": {
@@ -4442,7 +4442,7 @@
"payload": {
"sessionId": "{{parent}}",
"event": {
- "type": "session-log-deepseek/accepted",
+ "type": "session-log-deepseek/delivery-accepted",
"seq": 82,
"time": 0,
"data": {
diff --git a/scripts/snapshots/python-sdk-single-exe/advanced/session.1.jsonl b/scripts/snapshots/python-sdk-single-exe/advanced/session.1.jsonl
index 29496835de..6e2f62bfe1 100644
--- a/scripts/snapshots/python-sdk-single-exe/advanced/session.1.jsonl
+++ b/scripts/snapshots/python-sdk-single-exe/advanced/session.1.jsonl
@@ -9,7 +9,7 @@
{"type":"session/title","data":{"title":"Reply with exactly DIRECT_CHILD_OK and","messageSeqs":[5],"source":{"kind":"fallback"}}}
{"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"smoke-model","maxTokens":256000,"reasoningEffort":"high"},"adapterDefaults":{"reasoningEffort":true,"maxTokens":true},"system":"{{system}}","tools":["cordis_define","cordis_inspect_list","cordis_inspect_query","cordis_inspect_self","cordis_run","cordis_stop","cordis_undefine","job_kill","job_list","job_output","run_code","snapshot_double","subagent","workflow"]},"reason":"initial"}}
{"type":"request/context","data":{"provider":"deepseek-official","model":"smoke-model","contextWindow":1000000}}
-{"type":"session-log-deepseek/accepted","data":{"sessionId":"{{child-1}}","throughSeq":9}}
+{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{child-1}}","throughSeq":9}}
{"type":"assistant/chunk","data":{"turn":1,"step":1,"chunk":{"type":"block-start","index":0,"blockType":"text"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":1,"chunk":{"type":"text-delta","index":0,"text":"DIRECT_CHILD_OK"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":1,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"DIRECT_CHILD_OK"}}}}
diff --git a/scripts/snapshots/python-sdk-single-exe/advanced/session.2.jsonl b/scripts/snapshots/python-sdk-single-exe/advanced/session.2.jsonl
index 149798c850..e11cec5548 100644
--- a/scripts/snapshots/python-sdk-single-exe/advanced/session.2.jsonl
+++ b/scripts/snapshots/python-sdk-single-exe/advanced/session.2.jsonl
@@ -9,7 +9,7 @@
{"type":"session/title","data":{"title":"Reply with exactly WORKFLOW_CHILD_OK and","messageSeqs":[5],"source":{"kind":"fallback"}}}
{"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"smoke-model","maxTokens":256000,"reasoningEffort":"high"},"adapterDefaults":{"reasoningEffort":true,"maxTokens":true},"system":"{{system}}","tools":["cordis_define","cordis_inspect_list","cordis_inspect_query","cordis_inspect_self","cordis_run","cordis_stop","cordis_undefine","job_kill","job_list","job_output","run_code","snapshot_double","subagent","workflow"]},"reason":"initial"}}
{"type":"request/context","data":{"provider":"deepseek-official","model":"smoke-model","contextWindow":1000000}}
-{"type":"session-log-deepseek/accepted","data":{"sessionId":"{{child-2}}","throughSeq":9}}
+{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{child-2}}","throughSeq":9}}
{"type":"assistant/chunk","data":{"turn":1,"step":1,"chunk":{"type":"block-start","index":0,"blockType":"text"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":1,"chunk":{"type":"text-delta","index":0,"text":"WORKFLOW_CHILD_OK"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":1,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"WORKFLOW_CHILD_OK"}}}}
diff --git a/scripts/snapshots/python-sdk-single-exe/advanced/session.jsonl b/scripts/snapshots/python-sdk-single-exe/advanced/session.jsonl
index c8820f9822..2e65037b37 100644
--- a/scripts/snapshots/python-sdk-single-exe/advanced/session.jsonl
+++ b/scripts/snapshots/python-sdk-single-exe/advanced/session.jsonl
@@ -7,7 +7,7 @@
{"type":"session/title","data":{"title":"Run the advanced packaged-runtime snapsh","messageSeqs":[4],"source":{"kind":"fallback"}}}
{"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"smoke-model","maxTokens":256000,"reasoningEffort":"high"},"adapterDefaults":{"reasoningEffort":true,"maxTokens":true},"system":"{{system}}","tools":["cordis_define","cordis_inspect_list","cordis_inspect_query","cordis_inspect_self","cordis_run","cordis_stop","cordis_undefine","job_kill","job_list","job_output","run_code","subagent","workflow"]},"reason":"initial"}}
{"type":"request/context","data":{"provider":"deepseek-official","model":"smoke-model","contextWindow":1000000}}
-{"type":"session-log-deepseek/accepted","data":{"sessionId":"{{parent}}","throughSeq":7}}
+{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","throughSeq":7}}
{"type":"assistant/chunk","data":{"turn":1,"step":1,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":0,"id":"advanced-define","name":"cordis_define","argumentsDelta":"{\"plugin\": {\"kind\": \"new\", \"idPrefix\": \"snap\"}, \"name\": \"Snapshot Double\", \"purpose\": \"Expose a deterministic doubling tool for executable snapshot verification.\", \"code\": {\"host\": \"return (ctx) => {\\n harness.registerTool(ctx, harness.defineTool({\\n name: 'snapshot_double',\\n description: 'Double a number for executable snapshot verification.',\\n parameters: { value: { type: 'number', required: true } },\\n output: {\\n schema: { type: 'number' },\\n render(_args, value) {\\n return [{ type: 'text', text: String(value) }]\\n }\\n },\\n async execute(args) {\\n return args.value * 2\\n }\\n }))\\n}\\n\"}}"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":1,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-define","name":"cordis_define","arguments":"{\"plugin\": {\"kind\": \"new\", \"idPrefix\": \"snap\"}, \"name\": \"Snapshot Double\", \"purpose\": \"Expose a deterministic doubling tool for executable snapshot verification.\", \"code\": {\"host\": \"return (ctx) => {\\n harness.registerTool(ctx, harness.defineTool({\\n name: 'snapshot_double',\\n description: 'Double a number for executable snapshot verification.',\\n parameters: { value: { type: 'number', required: true } },\\n output: {\\n schema: { type: 'number' },\\n render(_args, value) {\\n return [{ type: 'text', text: String(value) }]\\n }\\n },\\n async execute(args) {\\n return args.value * 2\\n }\\n }))\\n}\\n\"}}"}}}}
@@ -18,7 +18,7 @@
{"type":"tool/result","data":{"turn":1,"step":1,"message":{"source":{"kind":"tool","callId":"advanced-define"},"content":[{"type":"tool-result","toolCallId":"advanced-define","content":[{"type":"text","text":"Defined snap-1/pkg-1 (Snapshot Double); it is not running yet. Use cordis_run to activate this Package."}],"isError":false}],"role":"user","id":"{{messageId}}"},"meta":{"pluginId":"snap-1","packageId":"pkg-1"}},"sourceEventSeqs":[15],"surfaceOp":"append"}
{"type":"step/end","data":{"turn":1,"step":1}}
{"type":"step/start","data":{"turn":1,"step":2}}
-{"type":"session-log-deepseek/accepted","data":{"sessionId":"{{parent}}","throughSeq":18}}
+{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","throughSeq":18}}
{"type":"assistant/chunk","data":{"turn":1,"step":2,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":2,"chunk":{"type":"tool-call-delta","index":0,"id":"advanced-run","name":"cordis_run","argumentsDelta":"{\"pluginId\": \"snap-1\", \"packageId\": \"pkg-1\", \"mode\": \"run\"}"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":2,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-run","name":"cordis_run","arguments":"{\"pluginId\": \"snap-1\", \"packageId\": \"pkg-1\", \"mode\": \"run\"}"}}}}
@@ -30,7 +30,7 @@
{"type":"step/end","data":{"turn":1,"step":2}}
{"type":"step/start","data":{"turn":1,"step":3}}
{"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"smoke-model","maxTokens":256000,"reasoningEffort":"high"},"adapterDefaults":{"reasoningEffort":true,"maxTokens":true},"system":"{{system}}","tools":["cordis_define","cordis_inspect_list","cordis_inspect_query","cordis_inspect_self","cordis_run","cordis_stop","cordis_undefine","job_kill","job_list","job_output","run_code","snapshot_double","subagent","workflow"]},"reason":"change"}}
-{"type":"session-log-deepseek/accepted","data":{"sessionId":"{{parent}}","throughSeq":30}}
+{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","throughSeq":30}}
{"type":"assistant/chunk","data":{"turn":1,"step":3,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":3,"chunk":{"type":"tool-call-delta","index":0,"id":"advanced-code","name":"run_code","argumentsDelta":"{\"code\": \"return await tools.snapshot_double({ value: 21 })\", \"description\": \"Run the temporary Plugin tool\"}"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":3,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-code","name":"run_code","arguments":"{\"code\": \"return await tools.snapshot_double({ value: 21 })\", \"description\": \"Run the temporary Plugin tool\"}"}}}}
@@ -43,7 +43,7 @@
{"type":"tool/result","data":{"turn":1,"step":3,"message":{"source":{"kind":"tool","callId":"advanced-code"},"content":[{"type":"tool-result","toolCallId":"advanced-code","content":[{"type":"text","text":"42"}],"isError":false}],"role":"user","id":"{{messageId}}"}},"sourceEventSeqs":[38],"surfaceOp":"append"}
{"type":"step/end","data":{"turn":1,"step":3}}
{"type":"step/start","data":{"turn":1,"step":4}}
-{"type":"session-log-deepseek/accepted","data":{"sessionId":"{{parent}}","throughSeq":43}}
+{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","throughSeq":43}}
{"type":"assistant/chunk","data":{"turn":1,"step":4,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":4,"chunk":{"type":"tool-call-delta","index":0,"id":"advanced-direct-child","name":"subagent","argumentsDelta":"{\"description\": \"Check direct child\", \"prompt\": \"Reply with exactly DIRECT_CHILD_OK and nothing else.\"}"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":4,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-direct-child","name":"subagent","arguments":"{\"description\": \"Check direct child\", \"prompt\": \"Reply with exactly DIRECT_CHILD_OK and nothing else.\"}"}}}}
@@ -54,7 +54,7 @@
{"type":"tool/result","data":{"turn":1,"step":4,"message":{"source":{"kind":"tool","callId":"advanced-direct-child"},"content":[{"type":"tool-result","toolCallId":"advanced-direct-child","content":[{"type":"text","text":"DIRECT_CHILD_OK"}],"isError":false}],"role":"user","id":"{{messageId}}"}},"sourceEventSeqs":[51],"surfaceOp":"append"}
{"type":"step/end","data":{"turn":1,"step":4}}
{"type":"step/start","data":{"turn":1,"step":5}}
-{"type":"session-log-deepseek/accepted","data":{"sessionId":"{{parent}}","throughSeq":54}}
+{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","throughSeq":54}}
{"type":"assistant/chunk","data":{"turn":1,"step":5,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":5,"chunk":{"type":"tool-call-delta","index":0,"id":"advanced-workflow","name":"workflow","argumentsDelta":"{\"script\": \"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\", \"meta\": {\"name\": \"advanced-exe-snapshot\", \"description\": \"exercise one packaged workflow child\"}}"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":5,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-workflow","name":"workflow","arguments":"{\"script\": \"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\", \"meta\": {\"name\": \"advanced-exe-snapshot\", \"description\": \"exercise one packaged workflow child\"}}"}}}}
@@ -69,7 +69,7 @@
{"type":"tool/result","data":{"turn":1,"step":5,"message":{"source":{"kind":"tool","callId":"advanced-workflow"},"content":[{"type":"tool-result","toolCallId":"advanced-workflow","content":[{"type":"text","text":"workflow \"advanced-exe-snapshot\" completed (1 agent).\nReturn value:\n{\n \"reply\": \"WORKFLOW_CHILD_OK\"\n}"}],"isError":false}],"role":"user","id":"{{messageId}}"}},"sourceEventSeqs":[62],"surfaceOp":"append"}
{"type":"step/end","data":{"turn":1,"step":5}}
{"type":"step/start","data":{"turn":1,"step":6}}
-{"type":"session-log-deepseek/accepted","data":{"sessionId":"{{parent}}","throughSeq":69}}
+{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","throughSeq":69}}
{"type":"assistant/chunk","data":{"turn":1,"step":6,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":6,"chunk":{"type":"tool-call-delta","index":0,"id":"advanced-undefine","name":"cordis_undefine","argumentsDelta":"{\"pluginId\": \"snap-1\"}"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":6,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-undefine","name":"cordis_undefine","arguments":"{\"pluginId\": \"snap-1\"}"}}}}
@@ -81,7 +81,7 @@
{"type":"step/end","data":{"turn":1,"step":6}}
{"type":"step/start","data":{"turn":1,"step":7}}
{"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"smoke-model","maxTokens":256000,"reasoningEffort":"high"},"adapterDefaults":{"reasoningEffort":true,"maxTokens":true},"system":"{{system}}","tools":["cordis_define","cordis_inspect_list","cordis_inspect_query","cordis_inspect_self","cordis_run","cordis_stop","cordis_undefine","job_kill","job_list","job_output","run_code","subagent","workflow"]},"reason":"change"}}
-{"type":"session-log-deepseek/accepted","data":{"sessionId":"{{parent}}","throughSeq":81}}
+{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","throughSeq":81}}
{"type":"assistant/chunk","data":{"turn":1,"step":7,"chunk":{"type":"block-start","index":0,"blockType":"text"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":7,"chunk":{"type":"text-delta","index":0,"text":"ADVANCED_EXECUTABLE_OK"}}}
{"type":"assistant/chunk","data":{"turn":1,"step":7,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"ADVANCED_EXECUTABLE_OK"}}}}