dsh-plugin-dev-kb 1.1.0 → 1.3.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.
- package/CHANGELOG.md +16 -0
- package/README.en.md +14 -8
- package/README.md +14 -8
- package/docs/banner.svg +25 -0
- package/kb/INDEX.md +6 -2
- package/kb/README.md +4 -4
- package/kb/extra/AGENTS.md +2 -2
- package/kb/extra/cookbook/adding-a-session-format-version.md +109 -0
- package/kb/extra/cookbook/adding-a-session-format-version.zh.md +109 -0
- package/kb/extra/cookbook/adding-a-vendored-package.md +1 -1
- package/kb/extra/cookbook/adding-a-vendored-package.zh.md +1 -1
- package/kb/extra/cookbook/responding-to-pr-review-on-a-stack.md +1 -1
- package/kb/extra/cookbook/responding-to-pr-review-on-a-stack.zh.md +1 -1
- package/kb/extra/deepseek-llm-api-wire-extensions.md +2 -2
- package/kb/extra/deepseek-llm-api-wire-extensions.zh.md +2 -2
- package/kb/extra/development.md +13 -3
- package/kb/extra/development.zh.md +13 -3
- package/kb/extra/event-producer-consumer.md +33 -31
- package/kb/extra/event-producer-consumer.zh.md +34 -32
- package/kb/extra/i18n/README.md +2 -1
- package/kb/extra/i18n/README.zh.md +3 -2
- package/kb/extra/i18n/translation-prompt.md +1 -1
- package/kb/extra/module-graph.md +62 -24
- package/kb/extra/module-graph.zh.md +62 -24
- package/kb/extra/rescope.md +1 -1
- package/kb/extra/rescope.zh.md +1 -1
- package/kb/extra/session-format-status.md +47 -0
- package/kb/extra/session-format-status.zh.md +47 -0
- package/kb/extra/subsystems/agent-team.md +1 -1
- package/kb/extra/subsystems/agent-team.zh.md +1 -1
- package/kb/extra/subsystems/feedback.md +164 -30
- package/kb/extra/subsystems/feedback.zh.md +164 -30
- package/kb/extra/testing.md +4 -3
- package/kb/extra/testing.zh.md +4 -3
- package/kb/extra/web-styling.md +1 -0
- package/kb/extra/web-styling.zh.md +1 -0
- package/kb/meta/search-index.json +151 -103
- package/kb/meta/site-pages.txt +188 -184
- package/kb/meta/source.json +5 -5
- package/kb/meta/topics.md +2 -2
- package/kb/site/develop/basic/publish.md +1 -1
- package/kb/site/en/develop/basic/publish.md +1 -1
- package/kb/site/en/guide/providers.md +1 -1
- package/kb/site/en/guide/python-sdk.md +19 -3
- package/kb/site/en/reference/agent-lifecycle.md +12 -5
- package/kb/site/en/reference/capability-seams.md +10 -3
- package/kb/site/en/reference/config-catalog.md +173 -42
- package/kb/site/en/reference/cookbook/adding-a-tool.md +1 -1
- package/kb/site/en/reference/cookbook/extension-cookbook.md +1 -1
- package/kb/site/en/reference/index.md +18 -8
- package/kb/site/en/reference/persistence-catalog.md +121 -48
- package/kb/site/en/reference/subsystems/approval.md +1 -1
- package/kb/site/en/reference/subsystems/client-modules.md +9 -0
- package/kb/site/en/reference/subsystems/client-resources.md +94 -0
- package/kb/site/en/reference/subsystems/compaction.md +1 -1
- package/kb/site/en/reference/subsystems/core.md +79 -16
- package/kb/site/en/reference/subsystems/filesystem.md +15 -0
- package/kb/site/en/reference/subsystems/goal.md +37 -1
- package/kb/site/en/reference/subsystems/index.md +2 -0
- package/kb/site/en/reference/subsystems/invariants.md +1 -1
- package/kb/site/en/reference/subsystems/llm-streaming.md +20 -10
- package/kb/site/en/reference/subsystems/lsp.md +1 -1
- package/kb/site/en/reference/subsystems/persistence.md +36 -15
- package/kb/site/en/reference/subsystems/schedule.md +1 -1
- package/kb/site/en/reference/subsystems/scope.md +1 -1
- package/kb/site/en/reference/subsystems/session-reference.md +4 -0
- package/kb/site/en/reference/subsystems/session-telemetry.md +22 -6
- package/kb/site/en/reference/subsystems/session.md +64 -42
- package/kb/site/en/reference/subsystems/shell.md +9 -6
- package/kb/site/en/reference/subsystems/sidebar-right.md +151 -0
- package/kb/site/en/reference/subsystems/slots.md +41 -33
- package/kb/site/en/reference/subsystems/spill.md +13 -6
- package/kb/site/en/reference/subsystems/subagent.md +20 -13
- package/kb/site/en/reference/subsystems/subprocess.md +25 -26
- package/kb/site/en/reference/subsystems/system-prompt.md +3 -1
- package/kb/site/en/reference/subsystems/token-meter.md +2 -1
- package/kb/site/en/reference/subsystems/tools.md +5 -5
- package/kb/site/en/reference/subsystems/workspace.md +80 -1
- package/kb/site/en/reference/tool-catalog.md +46 -2
- package/kb/site/en/reference/tool-execution-pipeline.md +2 -2
- package/kb/site/guide/providers.md +1 -1
- package/kb/site/guide/python-sdk.md +19 -3
- package/kb/site/reference/agent-lifecycle.md +12 -5
- package/kb/site/reference/capability-seams.md +10 -3
- package/kb/site/reference/config-catalog.md +173 -42
- package/kb/site/reference/cookbook/adding-a-tool.md +1 -1
- package/kb/site/reference/cookbook/extension-cookbook.md +1 -1
- package/kb/site/reference/index.md +18 -8
- package/kb/site/reference/persistence-catalog.md +127 -54
- package/kb/site/reference/subsystems/approval.md +1 -1
- package/kb/site/reference/subsystems/client-modules.md +9 -0
- package/kb/site/reference/subsystems/client-resources.md +94 -0
- package/kb/site/reference/subsystems/compaction.md +1 -1
- package/kb/site/reference/subsystems/core.md +79 -16
- package/kb/site/reference/subsystems/filesystem.md +15 -0
- package/kb/site/reference/subsystems/goal.md +37 -1
- package/kb/site/reference/subsystems/index.md +14 -12
- package/kb/site/reference/subsystems/invariants.md +1 -1
- package/kb/site/reference/subsystems/llm-streaming.md +20 -10
- package/kb/site/reference/subsystems/lsp.md +1 -1
- package/kb/site/reference/subsystems/persistence.md +36 -15
- package/kb/site/reference/subsystems/schedule.md +1 -1
- package/kb/site/reference/subsystems/scope.md +1 -1
- package/kb/site/reference/subsystems/session-reference.md +4 -0
- package/kb/site/reference/subsystems/session-telemetry.md +22 -6
- package/kb/site/reference/subsystems/session.md +64 -42
- package/kb/site/reference/subsystems/shell.md +9 -6
- package/kb/site/reference/subsystems/sidebar-right.md +151 -0
- package/kb/site/reference/subsystems/slots.md +41 -33
- package/kb/site/reference/subsystems/spill.md +13 -6
- package/kb/site/reference/subsystems/subagent.md +20 -13
- package/kb/site/reference/subsystems/subprocess.md +25 -26
- package/kb/site/reference/subsystems/system-prompt.md +3 -1
- package/kb/site/reference/subsystems/token-meter.md +2 -1
- package/kb/site/reference/subsystems/tools.md +5 -5
- package/kb/site/reference/subsystems/workspace.md +80 -1
- package/kb/site/reference/tool-catalog.md +46 -2
- package/kb/site/reference/tool-execution-pipeline.md +2 -2
- package/lib/index.js +25 -44
- package/package.json +3 -2
- package/skills/dsh-plugin-dev-kb.md +3 -3
|
@@ -48,6 +48,12 @@ Vendored CLI、仅用于构建和测试的可执行文件、进程内直接挂
|
|
|
48
48
|
|
|
49
49
|
Python SDK 遵循相同的应用架构。其运行时 wheel 把普通 `dsh` CLI 打包为 `deepseek-harness-sdk-runtime-<platform>-<arch>`,客户端默认以显式 Harness home 启动 `dsh --profile sdk`。极简示例选择随附的 `sdk-minimal` profile。Python 暴露 profile 选择与有序 patch 文件,而不是完整 Cordis 树;持久外部插件通过 `dsh plugin` 安装。已删除的私有直读配置载体没有兼容 bin 或回退 parser。
|
|
50
50
|
|
|
51
|
+
## 桌面应用
|
|
52
|
+
|
|
53
|
+
[Electron 桌面应用](https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/desktop/README.zh.md)持有保留的 `$DSH_HOME/profiles/desktop` npm 项目。每个签名 Electron 发行版绑定一个确切 dsh 版本并携带第一方离线 seed;启动时通过内置 pnpm 把该版本安装进可写 profile,同时保留旧 profile 中桌面插件的确切版本。CLI profile 与 Desktop 共享 `$DSH_HOME` 下受支持的产品数据,但绝不共享可执行包、插件激活、lockfile 或 `node_modules`。
|
|
54
|
+
|
|
55
|
+
Electron 通过内置的上游 Node.js 进程启动私有 Desktop Host 包;该包从保留 profile 加载已安装的 dsh 后端与匹配的客户端图。一元 RPC、Remote stream 与版本匹配的客户端资源经带版本的分帧字节管道传输,Node IPC 只保留生命周期控制,再通过安全的 `dsh-app://` 协议到达渲染进程;因此桌面组合不会开放 Web server 或 loopback 端口。只有壳自有 UI 能通过内置 pnpm 及其私有 `$DSH_HOME/desktop/pnpm/store` 执行插件事务。
|
|
56
|
+
|
|
51
57
|
## 核心包
|
|
52
58
|
|
|
53
59
|
以下是向 Cordis 树贡献内容的部分核心包。
|
|
@@ -84,13 +90,15 @@ Python SDK 遵循相同的应用架构。其运行时 wheel 把普通 `dsh` CLI
|
|
|
84
90
|
```text
|
|
85
91
|
turn/start
|
|
86
92
|
claim next-step input plus one queued message
|
|
87
|
-
assemble prompt sections + tool schemas
|
|
93
|
+
assemble prompt sections + tool schemas; project runtime context
|
|
88
94
|
-> agent/pre-step reject | enter(messages, startsRequestSeries?)
|
|
89
95
|
reject, or a first enter rewritten empty -> close the turn with no step
|
|
90
96
|
step/start
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
97
|
+
agent/request -> prepareCall (cancellation commits neither system nor users)
|
|
98
|
+
reconcile system/message using the prepared call capability
|
|
99
|
+
append entered messages as user/message; log request/header and request/context as needed
|
|
100
|
+
derive and freeze model history from the log
|
|
101
|
+
stream the bound prepared call -> llm/stream -> agent/assistant-stream start
|
|
94
102
|
agent/assistant-stream chunk*
|
|
95
103
|
assistant/message | assistant/attempt -> agent/assistant-stream end
|
|
96
104
|
tool/call* -> tools/pre-execute -> tools/execute -> tools/post-execute -> tool/result*
|
|
@@ -100,11 +108,13 @@ turn/start
|
|
|
100
108
|
turn/end
|
|
101
109
|
```
|
|
102
110
|
|
|
103
|
-
`turn/*`、`step/*`、`user/message`、`assistant/message`、`assistant/attempt` 和 `tool/*` 是持久会话事件;其余是分属三个事件域的实时扩展点。`agent/assistant-stream` 发布进程本地 start、瞬态 chunk 与 end frame。loop 会在 committed end frame 前把完整紧凑 stream 提交为一个 message 或仅日志 attempt;Web Session-follow adapter 是该 live event 唯一的远程消费方。`agent/pre-step`、`agent/request`、`llm/stream` 和三个 `tools/*` 事件是 waterfall(瀑布式事件),其监听器必须调用 `next()` 才能委托下去;`agent/turn-stopping` 是 serial 事件,没有 `next()`。
|
|
111
|
+
`turn/*`、`step/*`、`system/message`、`user/message`、`assistant/message`、`assistant/attempt` 和 `tool/*` 是持久会话事件;其余是分属三个事件域的实时扩展点。`agent/assistant-stream` 发布进程本地 start、瞬态 chunk 与 end frame。loop 会在 committed end frame 前把完整紧凑 stream 提交为一个 message 或仅日志 attempt;Web Session-follow adapter 是该 live event 唯一的远程消费方。`agent/pre-step`、`agent/request`、`llm/stream` 和三个 `tools/*` 事件是 waterfall(瀑布式事件),其监听器必须调用 `next()` 才能委托下去;`agent/turn-stopping` 是 serial 事件,没有 `next()`。
|
|
104
112
|
|
|
105
113
|
输入通过同一个 inbox 到达驱动器。有些消息会立即唤醒它;注入的上下文会留在 inbox 中,直到另一条消息将其唤醒。
|
|
106
114
|
|
|
107
|
-
`agent/pre-step`
|
|
115
|
+
`agent/pre-step` 决定接纳的输入。监听器可以改写或拒绝已领取消息;首次领取被拒绝或为空时,关闭不含步骤的持久轮次。enter 决策可设置 `startsRequestSeries`:循环记录新的 `request/header`(原因为 `series`,或在封装同时变化时为携带 `startsSeries: true` 的 `change`)。包装监听器通过 `{ ...decision, messages }` 保留该声明。组装与 `step/start` 之后,`agent/request` 和 `prepareCall()` 先解析实际路由,再提交系统提示词与已接纳用户消息;在任一异步阶段取消都不会提交这两者。提示词准入依据已准备调用的能力,而非先前的 `request/context`。每次尝试同步协调同一份已渲染组装结果、仅在首次尝试追加用户消息、按需记录 header/context、派生并冻结请求,再通过绑定调用发起流式请求。重试不重复组装或 `agent/pre-step`。附接后的 surface 替换开启新请求序列,包括恢复后的首次 pre-step 中发生的替换;未变化的恢复延续序列。首次接纳的步骤在用户消息之前预留系统头节点,即使提示词为空(不产生协议消息)。提示词仅通过 `system/message` 历史传递:空渲染文本清除所有生效的系统节点,模型不再看到旧提示词;具备能力的路由可在缓存前缀之后追加非空更新;不具备能力的路由与新请求序列将非空提示词文本归并到首个系统节点,并为非空的后续系统节点记录空内容替换([决策](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/implemented/architecture/2026-09-02-system-prompt-as-surface-node.zh.md);[决策规则](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent-loop/README.zh.md#understand-the-implementation))。
|
|
116
|
+
|
|
117
|
+
循环发送不可变请求,同时保留实时取消能力。只有已由该循环完整冻结的消息对象身份才能复用冻结证明;[agent-loop](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent-loop/README.zh.md)拥有请求构造规则。
|
|
108
118
|
|
|
109
119
|
详情见[时序图](./agent-lifecycle.md)、[工具流水线](./tool-execution-pipeline.md)和[取消与错误恢复](./subsystems/core.md#the-agent-handle)。
|
|
110
120
|
|
|
@@ -112,7 +122,7 @@ turn/end
|
|
|
112
122
|
|
|
113
123
|
会话日志是模型所见上下文的来源。`deriveMessages()` 从中投影出模型历史。每个 `assistant/message` 都嵌入产生其组装内容的精确紧凑带时间 stream;`assistant/attempt` 保留已到达 settlement 的失败、重试、取消与 stream error attempt,且不添加模型历史。fork、恢复、transcript(文本记录)、遥测与持久化都从这些持久 settlement 派生,实时 UI 增量则来自 `agent/assistant-stream`;如果进程在 settlement 前硬中断,则不会留下持久 attempt stream(见[决策](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/implemented/architecture/2026-09-01-v2-embedded-assistant-streams.zh.md))。
|
|
114
124
|
|
|
115
|
-
Session 消费方只了解当前逻辑格式。仅 header 的 `stat` 与 `list` 会重新扫描每个 Session 目录,选择数值最高的规范 generation,并在不加载事件或发布后继的情况下转换受支持的历史 header。已存储 Session 的 `open` 选择同一 generation
|
|
125
|
+
Session 消费方只了解当前逻辑格式。仅 header 的 `stat` 与 `list` 会重新扫描每个 Session 目录,选择数值最高的规范 generation,并在不加载事件或发布后继的情况下转换受支持的历史 header。已存储 Session 的 `open` 选择同一 generation,拒绝未来版本,或只 Decode 并组合一次构建时静态确定的相邻迁移链,再返回经过校验的当前逻辑事件。只读 open 直接使用这份内存结果,不发布后继;写 open 则先编码、校验并在未改变源的旁边排他发布最终版本命名的后继。未被后续事件封住的普通中断尾部仍由句柄消费方修复;只有在后续 `turn/start` 已经封住一种有限的已发布 restart 时,migration 才会插入缺失的 interrupted `turn/end`。JSONL v0 使用 `session.jsonl[.zstd]`,v1 及后续版本使用小写 `session.vN.jsonl[.zstd]`;已提交 generation 路径绝不重命名、替换或删除。JSONL provider 负责物理 framing、压缩、generation 选择与排他发布,每个相邻迁移包只负责一个 `vN -> vN+1` 步骤([决策](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/implemented/architecture/2026-08-31-released-session-format-migrations.zh.md))。
|
|
116
126
|
|
|
117
127
|
**模型可见即已记录。** 抵达模型请求的一切都必须能从日志重建,并由一项运行时不变量断言这一点。因此,新增一项模型可见输入就需要新增一个会话事件:扩展 `SessionEventMap` 并从日志渲染。
|
|
118
128
|
|
|
@@ -124,7 +134,7 @@ Session 消费方只了解当前逻辑格式。仅 header 的 `stat` 与 `list`
|
|
|
124
134
|
|
|
125
135
|
seam 正是替换一个提供方就能改变整个产品的原因。文件系统与进程提供方共享同一个执行世界,因此把它们指向远程沙箱,也就把 Bash、PTY 和 LSP 一并搬了过去,无需提供方专用 fork。[subagent 提供方](./subsystems/subagent.md)在同一个接口之后同样千差万别,从新建一个子 agent,到把一个轮次委派给另一个产品。
|
|
126
136
|
|
|
127
|
-
[实验性 Agent Teams](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/subsystems/agent-team.zh.md) 是 `ctx.agentTeams`
|
|
137
|
+
[实验性 Agent Teams](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/subsystems/agent-team.zh.md) 是 `ctx.agentTeams` 上公开发布、显式启用的协作 seam,在可继续 subagent 之上提供持久 roster、任务板和 mailbox。
|
|
128
138
|
|
|
129
139
|
## 新行为的归属位置
|
|
130
140
|
|
|
@@ -10,7 +10,7 @@ outline: "deep"
|
|
|
10
10
|
|
|
11
11
|
会话持久事件日志中可能出现的所有事件类型:完整持久化的 `SessionEvent` 信封,以及可通过合并扩展的 `SessionEventMap` 中的每个成员,包括 `@deepseek-ai/dsh-session` 所属的词汇和本仓库中每个插件对 `@deepseek-ai/dsh-session/types` 的声明合并,并附有源 JSDoc、完整 payload 声明、surface 标记和声明位置。本文档是 [session.md](./subsystems/session.md)(surface 排序与 `deriveMessages()` 投影)、[persistence.md](./subsystems/persistence.md)(如何让日志持久化)和 [session.md](./subsystems/session.md#cordis-surface) 中生成区域(实时总线接线;日志事件**不是** cordis 事件,它通过唯一的 `session/event` emit 到达监听器)的补充。
|
|
12
12
|
|
|
13
|
-
英文源文件根据源码生成(`scripts/gen-persistence-catalog.ts`),并由 `pnpm run verify-persistence-catalog`(`doc-sync`(文档同步门禁)的一部分)验证新鲜度;本中文文件作为经评审对侧通过双语配对维护。声明块保留源码声明和嵌套属性的 JSDoc,只移除其所在接口/模块带来的缩进,并使用 `ts persistence-catalog` 围栏(doc-typecheck 会跳过这些围栏,因为声明引用了其所属模块中的类型)。payload
|
|
13
|
+
英文源文件根据源码生成(`scripts/gen-persistence-catalog.ts`),并由 `pnpm run verify-persistence-catalog`(`doc-sync`(文档同步门禁)的一部分)验证新鲜度;本中文文件作为经评审对侧通过双语配对维护。声明块保留源码声明和嵌套属性的 JSDoc,只移除其所在接口/模块带来的缩进,并使用 `ts persistence-catalog` 围栏(doc-typecheck 会跳过这些围栏,因为声明引用了其所属模块中的类型)。payload 中的类型名称会链接到记录该类型的页面。已归档的 [persistence-log-catalog 记录](https://github.com/deepseek-ai/deepseek-harness/blob/master/.agents/notes/archived/process/2026-07-04-persistence-log-catalog.md)记载了最初的目录决策。
|
|
14
14
|
|
|
15
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
|
|
|
@@ -23,10 +23,11 @@ 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}; user and tool events may also cite
|
|
26
|
+
* event types may carry {@link SurfaceOp}; system, user, and tool events may also cite
|
|
27
27
|
* earlier sources through {@link SessionEvent.sourceEventSeqs}.
|
|
28
28
|
*/
|
|
29
29
|
export type SurfaceEventType =
|
|
30
|
+
| 'system/message'
|
|
30
31
|
| 'user/message'
|
|
31
32
|
| 'assistant/message'
|
|
32
33
|
| 'tool/result'
|
|
@@ -37,16 +38,16 @@ export type SurfaceEventType =
|
|
|
37
38
|
*
|
|
38
39
|
* - `'append'`: added to the tail — normal path for user/assistant/tool
|
|
39
40
|
* messages.
|
|
40
|
-
* - `{ op: 'replace',
|
|
41
|
-
* (inclusive) through `
|
|
42
|
-
* surface nodes in the current surface. `
|
|
41
|
+
* - `{ op: 'replace', startSeq, endSeq }`: replaces surface nodes from `startSeq`
|
|
42
|
+
* (inclusive) through `endSeq` (inclusive) with this node. Both must exist as
|
|
43
|
+
* surface nodes in the current surface. `startSeq === endSeq` replaces a single
|
|
43
44
|
* node. The node's {@link SessionEvent.sourceEventSeqs} must include every
|
|
44
45
|
* shadowed surface node. Used by compaction; any surface-replacing producer
|
|
45
46
|
* may use it.
|
|
46
47
|
*/
|
|
47
48
|
export type SurfaceOp =
|
|
48
49
|
| 'append'
|
|
49
|
-
| { op: 'replace';
|
|
50
|
+
| { op: 'replace'; startSeq: SessionSeq; endSeq: SessionSeq }
|
|
50
51
|
|
|
51
52
|
/**
|
|
52
53
|
* One immutable entry in the session log.
|
|
@@ -55,7 +56,7 @@ export type SurfaceOp =
|
|
|
55
56
|
* unions), so `switch (event.type)` narrows `event.data` without casts.
|
|
56
57
|
*
|
|
57
58
|
* The {@link sourceEventSeqs} and {@link surfaceOp} fields are conditional:
|
|
58
|
-
* they only exist on {@link SurfaceEventType} variants (`user/message`,
|
|
59
|
+
* they only exist on {@link SurfaceEventType} variants (`system/message`, `user/message`,
|
|
59
60
|
* `assistant/message`, `tool/result`).
|
|
60
61
|
* Non-surface events (boundary markers, attempts, errors) never carry
|
|
61
62
|
* surface metadata — the compiler enforces this at `Session.append()`
|
|
@@ -80,20 +81,14 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
80
81
|
* inconvenience) rather than silently resuming a gutted session.
|
|
81
82
|
*/
|
|
82
83
|
ignorable?: true
|
|
83
|
-
} & (K extends SurfaceEventType ? {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
* `assistant/message` embeds its provider stream and cannot carry this field.
|
|
88
|
-
*/
|
|
89
|
-
sourceEventSeqs?: SessionSeq[]
|
|
90
|
-
/** How this event entered the surface; absent for non-surface events. */
|
|
91
|
-
surfaceOp?: SurfaceOp
|
|
92
|
-
} : object)
|
|
84
|
+
} & (K extends SurfaceEventType ? SurfaceIntent<K> : {
|
|
85
|
+
surfaceOp?: never
|
|
86
|
+
sourceEventSeqs?: never
|
|
87
|
+
})
|
|
93
88
|
}[T]
|
|
94
89
|
```
|
|
95
90
|
|
|
96
|
-
来源:[`packages/core/session/src/types.ts:
|
|
91
|
+
来源:[`packages/core/session/src/types.ts:404`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts) · [`packages/core/session/src/types.ts:412`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts) · [`packages/core/session/src/types.ts:434`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts) · [`packages/core/session/src/types.ts:465`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
|
|
97
92
|
|
|
98
93
|
## 事件
|
|
99
94
|
|
|
@@ -106,8 +101,8 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
106
101
|
```ts persistence-catalog
|
|
107
102
|
/**
|
|
108
103
|
* One normalized mutation of an agent's durable pending-message lists.
|
|
109
|
-
*
|
|
110
|
-
*
|
|
104
|
+
* The session-projection registry applies the committed event before
|
|
105
|
+
* `Session.append()` returns; Inbox live notifications follow that commit.
|
|
111
106
|
*/
|
|
112
107
|
'agent/inbox/spliced': {
|
|
113
108
|
target: InboxTarget
|
|
@@ -118,7 +113,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
118
113
|
}
|
|
119
114
|
```
|
|
120
115
|
|
|
121
|
-
来源:[`packages/core/agent/src/types.ts:
|
|
116
|
+
来源:[`packages/core/agent/src/types.ts:87`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/agent/src/types.ts)
|
|
122
117
|
|
|
123
118
|
### `agent-preset/*`
|
|
124
119
|
|
|
@@ -203,7 +198,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
203
198
|
}
|
|
204
199
|
```
|
|
205
200
|
|
|
206
|
-
来源:[`packages/interaction/user-approval/src/index.ts:
|
|
201
|
+
来源:[`packages/interaction/user-approval/src/index.ts:33`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/interaction/user-approval/src/index.ts)
|
|
207
202
|
|
|
208
203
|
### `assistant/*`
|
|
209
204
|
|
|
@@ -220,7 +215,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
220
215
|
'assistant/attempt': { turn: number; step: number; stream: AssistantStreamRecord[] }
|
|
221
216
|
```
|
|
222
217
|
|
|
223
|
-
来源:[`packages/core/session/src/types.ts:
|
|
218
|
+
来源:[`packages/core/session/src/types.ts:335`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
|
|
224
219
|
|
|
225
220
|
<a id="assistantmessage--surface"></a>
|
|
226
221
|
|
|
@@ -250,7 +245,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
250
245
|
|
|
251
246
|
类型:[TokenUsage](./subsystems/llm-streaming.md)
|
|
252
247
|
|
|
253
|
-
来源:[`packages/core/session/src/types.ts:
|
|
248
|
+
来源:[`packages/core/session/src/types.ts:321`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
|
|
254
249
|
|
|
255
250
|
### `command/*`
|
|
256
251
|
|
|
@@ -406,8 +401,45 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
406
401
|
|
|
407
402
|
来源:[`packages/compaction/compaction/src/types.ts:34`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/compaction/compaction/src/types.ts)
|
|
408
403
|
|
|
404
|
+
### `deliverables/*`
|
|
405
|
+
|
|
406
|
+
<a id="deliverablespresented--log-only"></a>
|
|
407
|
+
|
|
408
|
+
#### `deliverables/presented` — 仅日志
|
|
409
|
+
|
|
410
|
+
```ts persistence-catalog
|
|
411
|
+
/** Declared filesystem files from a successful final present result, including nested calls. */
|
|
412
|
+
'deliverables/presented': { turn: number; callId: ToolCallId; files: PresentedFile[] }
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
类型: [ToolCallId](./subsystems/core.md)
|
|
416
|
+
|
|
417
|
+
来源: [`packages/fs/tool-present/src/types.ts:15`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/fs/tool-present/src/types.ts)
|
|
418
|
+
|
|
409
419
|
### `feedback/*`
|
|
410
420
|
|
|
421
|
+
<a id="feedbackmessage-delete--log-only"></a>
|
|
422
|
+
|
|
423
|
+
#### `feedback/message-delete` — log-only
|
|
424
|
+
|
|
425
|
+
```ts persistence-catalog
|
|
426
|
+
/** Log-only deletion; earlier ratings and notes remain in the log. */
|
|
427
|
+
'feedback/message-delete': MessageFeedbackDelete
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
来源:[`packages/feedback/message-feedback/src/types.ts:55`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/feedback/message-feedback/src/types.ts)
|
|
431
|
+
|
|
432
|
+
<a id="feedbackmessage-put--log-only"></a>
|
|
433
|
+
|
|
434
|
+
#### `feedback/message-put` — log-only
|
|
435
|
+
|
|
436
|
+
```ts persistence-catalog
|
|
437
|
+
/** Log-only human feedback; never enters model history. */
|
|
438
|
+
'feedback/message-put': MessageFeedbackPut
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
来源:[`packages/feedback/message-feedback/src/types.ts:53`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/feedback/message-feedback/src/types.ts)
|
|
442
|
+
|
|
411
443
|
<a id="feedbackrecord--log-only"></a>
|
|
412
444
|
|
|
413
445
|
#### `feedback/record` — log-only
|
|
@@ -417,10 +449,10 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
417
449
|
* One recorded human remark about this session. Log-only and independent
|
|
418
450
|
* of its trigger; it never enters model context or derived history.
|
|
419
451
|
*/
|
|
420
|
-
'feedback/record':
|
|
452
|
+
'feedback/record': FeedbackRecord
|
|
421
453
|
```
|
|
422
454
|
|
|
423
|
-
来源:[`packages/feedback/command-feedback/src/
|
|
455
|
+
来源:[`packages/feedback/command-feedback/src/types.ts:40`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/feedback/command-feedback/src/types.ts)
|
|
424
456
|
|
|
425
457
|
### `goal/*`
|
|
426
458
|
|
|
@@ -525,7 +557,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
525
557
|
'model/selection': ModelSelection
|
|
526
558
|
```
|
|
527
559
|
|
|
528
|
-
来源:[`packages/api/session-controller/src/types.ts:
|
|
560
|
+
来源:[`packages/api/session-controller/src/types.ts:40`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/api/session-controller/src/types.ts)
|
|
529
561
|
|
|
530
562
|
### `permission/*`
|
|
531
563
|
|
|
@@ -570,13 +602,15 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
570
602
|
|
|
571
603
|
```ts persistence-catalog
|
|
572
604
|
/**
|
|
573
|
-
* Route metadata for the next request, logged only when the route
|
|
574
|
-
* changes. It does not participate in request
|
|
605
|
+
* Route metadata for the next request, logged only when the route, capacity,
|
|
606
|
+
* or system prompt update mode changes. It does not participate in request
|
|
607
|
+
* reconstruction or header equality. Prompt admission uses the bound prepared
|
|
608
|
+
* call's capability, not this snapshot from an earlier request.
|
|
575
609
|
*/
|
|
576
610
|
'request/context': RequestContext
|
|
577
611
|
```
|
|
578
612
|
|
|
579
|
-
来源:[`packages/core/session/src/types.ts:
|
|
613
|
+
来源:[`packages/core/session/src/types.ts:377`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
|
|
580
614
|
|
|
581
615
|
<a id="requestheader--log-only"></a>
|
|
582
616
|
|
|
@@ -595,7 +629,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
595
629
|
}
|
|
596
630
|
```
|
|
597
631
|
|
|
598
|
-
来源:[`packages/core/session/src/types.ts:
|
|
632
|
+
来源:[`packages/core/session/src/types.ts:365`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
|
|
599
633
|
|
|
600
634
|
### `sandbox/*`
|
|
601
635
|
|
|
@@ -670,7 +704,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
670
704
|
'session/end-seed': { inherited?: true }
|
|
671
705
|
```
|
|
672
706
|
|
|
673
|
-
来源:[`packages/core/session/src/types.ts:
|
|
707
|
+
来源:[`packages/core/session/src/types.ts:400`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
|
|
674
708
|
|
|
675
709
|
<a id="sessiontitle--log-only"></a>
|
|
676
710
|
|
|
@@ -719,7 +753,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
719
753
|
}
|
|
720
754
|
```
|
|
721
755
|
|
|
722
|
-
来源:[`packages/session/session-log-deepseek/src/types.ts:
|
|
756
|
+
来源:[`packages/session/session-log-deepseek/src/types.ts:81`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-log-deepseek/src/types.ts)
|
|
723
757
|
|
|
724
758
|
### `step/*`
|
|
725
759
|
|
|
@@ -732,7 +766,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
732
766
|
'step/end': { turn: number; step: number }
|
|
733
767
|
```
|
|
734
768
|
|
|
735
|
-
来源:[`packages/core/session/src/types.ts:
|
|
769
|
+
来源:[`packages/core/session/src/types.ts:289`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
|
|
736
770
|
|
|
737
771
|
<a id="stepstart--log-only"></a>
|
|
738
772
|
|
|
@@ -743,10 +777,24 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
743
777
|
'step/start': { turn: number; step: number }
|
|
744
778
|
```
|
|
745
779
|
|
|
746
|
-
来源:[`packages/core/session/src/types.ts:
|
|
780
|
+
来源:[`packages/core/session/src/types.ts:287`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
|
|
747
781
|
|
|
748
782
|
### `subagent/*`
|
|
749
783
|
|
|
784
|
+
<a id="subagentcatalog--log-only"></a>
|
|
785
|
+
|
|
786
|
+
#### `subagent/catalog` — log-only
|
|
787
|
+
|
|
788
|
+
```ts persistence-catalog
|
|
789
|
+
/**
|
|
790
|
+
* A direct child's complete discovery fact.
|
|
791
|
+
* @param data - versioned parent-owned catalog entry.
|
|
792
|
+
*/
|
|
793
|
+
'subagent/catalog': SubagentCatalogEvent
|
|
794
|
+
```
|
|
795
|
+
|
|
796
|
+
来源:[`packages/subagent/subagent/src/catalog.ts:40`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/subagent/src/catalog.ts)
|
|
797
|
+
|
|
750
798
|
<a id="subagentdescriptor--log-only"></a>
|
|
751
799
|
|
|
752
800
|
#### `subagent/descriptor` — log-only
|
|
@@ -783,6 +831,30 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
783
831
|
|
|
784
832
|
来源:[`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)
|
|
785
833
|
|
|
834
|
+
### `system/*`
|
|
835
|
+
|
|
836
|
+
<a id="systemmessage--surface"></a>
|
|
837
|
+
|
|
838
|
+
#### `system/message` — surface
|
|
839
|
+
|
|
840
|
+
```ts persistence-catalog
|
|
841
|
+
/**
|
|
842
|
+
* The rendered system prompt on the model-visible surface. The loop appends
|
|
843
|
+
* the first one as surface node 0 before the step's first `user/message`.
|
|
844
|
+
* A prepared in-history route can append nonempty changes in a continuing
|
|
845
|
+
* series. An incapable route or new series normalizes text to the first system
|
|
846
|
+
* node. Normalization empties nonempty later nodes, then rewrites the head if
|
|
847
|
+
* needed, through logged per-node replacements. An empty rendering always
|
|
848
|
+
* clears all active system nodes, leaving no older instructions model-visible.
|
|
849
|
+
* Empty later nodes are dormant and project to no message; an empty head with
|
|
850
|
+
* no active later node records "no system prompt". Restored nonempty text follows
|
|
851
|
+
* the same route and series rule; empty nodes never restore older text.
|
|
852
|
+
*/
|
|
853
|
+
'system/message': { turn: number; step: number; message: SystemMessage }
|
|
854
|
+
```
|
|
855
|
+
|
|
856
|
+
来源:[`packages/core/session/src/types.ts:310`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
|
|
857
|
+
|
|
786
858
|
### `team/*`
|
|
787
859
|
|
|
788
860
|
<a id="teammember--log-only"></a>
|
|
@@ -796,7 +868,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
796
868
|
|
|
797
869
|
类型:[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)
|
|
798
870
|
|
|
799
|
-
来源:[`packages/experimental/agent-team/src/types.ts:
|
|
871
|
+
来源:[`packages/experimental/agent-team/src/types.ts:221`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/agent-team/src/types.ts)
|
|
800
872
|
|
|
801
873
|
<a id="teammessagedelivered--log-only"></a>
|
|
802
874
|
|
|
@@ -814,7 +886,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
814
886
|
|
|
815
887
|
类型:[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)
|
|
816
888
|
|
|
817
|
-
来源:[`packages/experimental/agent-team/src/types.ts:
|
|
889
|
+
来源:[`packages/experimental/agent-team/src/types.ts:227`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/agent-team/src/types.ts)
|
|
818
890
|
|
|
819
891
|
<a id="teammessagequeued--log-only"></a>
|
|
820
892
|
|
|
@@ -827,7 +899,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
827
899
|
|
|
828
900
|
类型:[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)
|
|
829
901
|
|
|
830
|
-
来源:[`packages/experimental/agent-team/src/types.ts:
|
|
902
|
+
来源:[`packages/experimental/agent-team/src/types.ts:225`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/agent-team/src/types.ts)
|
|
831
903
|
|
|
832
904
|
<a id="teamtask--log-only"></a>
|
|
833
905
|
|
|
@@ -840,7 +912,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
840
912
|
|
|
841
913
|
类型:[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)
|
|
842
914
|
|
|
843
|
-
来源:[`packages/experimental/agent-team/src/types.ts:
|
|
915
|
+
来源:[`packages/experimental/agent-team/src/types.ts:223`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/experimental/agent-team/src/types.ts)
|
|
844
916
|
|
|
845
917
|
### `todo/*`
|
|
846
918
|
|
|
@@ -874,16 +946,16 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
874
946
|
|
|
875
947
|
类型:[ToolCallId](./subsystems/core.md)
|
|
876
948
|
|
|
877
|
-
来源:[`packages/core/session/src/types.ts:
|
|
949
|
+
来源:[`packages/core/session/src/types.ts:341`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
|
|
878
950
|
|
|
879
|
-
<a id="
|
|
951
|
+
<a id="toolptc-dispatch--log-only"></a>
|
|
880
952
|
|
|
881
|
-
#### `tool/
|
|
953
|
+
#### `tool/ptc-dispatch` — log-only
|
|
882
954
|
|
|
883
955
|
```ts persistence-catalog
|
|
884
956
|
/**
|
|
885
957
|
* One bridged sub-dispatch SETTLING: the pairing ids (matching the
|
|
886
|
-
* `tool/
|
|
958
|
+
* `tool/ptc-dispatch-start` with the same `subCallId`), the tool `name`
|
|
887
959
|
* with the same JSON-normalized `arguments`, and the sub-call's complete
|
|
888
960
|
* model-facing outcome in `tool/result`'s own vocabulary
|
|
889
961
|
* (`content` + `isError`), so UIs render a sub-call through the exact
|
|
@@ -896,30 +968,30 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
896
968
|
* before returning), so its execution-enclosure relation holds by
|
|
897
969
|
* construction.
|
|
898
970
|
*/
|
|
899
|
-
'tool/
|
|
971
|
+
'tool/ptc-dispatch': PtcDispatchEventData
|
|
900
972
|
```
|
|
901
973
|
|
|
902
974
|
来源:[`packages/core/tools/src/types.ts:56`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/types.ts)
|
|
903
975
|
|
|
904
|
-
<a id="
|
|
976
|
+
<a id="toolptc-dispatch-start--log-only"></a>
|
|
905
977
|
|
|
906
|
-
#### `tool/
|
|
978
|
+
#### `tool/ptc-dispatch-start` — log-only
|
|
907
979
|
|
|
908
980
|
```ts persistence-catalog
|
|
909
981
|
/**
|
|
910
982
|
* One sub-dispatch STARTING inside a `run_code` program: the parent
|
|
911
|
-
* `run_code` call id, the
|
|
912
|
-
* numbered in submission order), and the tool `name` with its
|
|
983
|
+
* `run_code` call id, the opaque sub-call id (new calls use
|
|
984
|
+
* `<parent>:ptc:<n>`, numbered in submission order), and the tool `name` with its
|
|
913
985
|
* JSON-normalized `arguments` — the exact value dispatched, normalized
|
|
914
986
|
* BEFORE dispatch, so this append can never fail on payload shape.
|
|
915
987
|
* Appended when the scheduler actually starts the call (not at
|
|
916
988
|
* submission), so a start means the tool body pipeline was entered; a
|
|
917
989
|
* call abandoned in the queue logs nothing. Log-only: `deriveMessages()`
|
|
918
990
|
* ignores it; UIs use it for live per-sub-call running state and pair it
|
|
919
|
-
* with `tool/
|
|
991
|
+
* with `tool/ptc-dispatch` by `subCallId` (timing = the two events'
|
|
920
992
|
* `time` fields).
|
|
921
993
|
*/
|
|
922
|
-
'tool/
|
|
994
|
+
'tool/ptc-dispatch-start': PtcDispatchStartEventData
|
|
923
995
|
```
|
|
924
996
|
|
|
925
997
|
来源:[`packages/core/tools/src/types.ts:40`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/tools/src/types.ts)
|
|
@@ -944,12 +1016,13 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
944
1016
|
turn: number
|
|
945
1017
|
step: number
|
|
946
1018
|
message: ToolResultMessage
|
|
1019
|
+
/** Optional failure identity; allowed only when the tool-result block has `isError: true`. */
|
|
947
1020
|
error?: { name: string; code: string }
|
|
948
1021
|
meta?: JsonValue
|
|
949
1022
|
}
|
|
950
1023
|
```
|
|
951
1024
|
|
|
952
|
-
来源:[`packages/core/session/src/types.ts:
|
|
1025
|
+
来源:[`packages/core/session/src/types.ts:353`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
|
|
953
1026
|
|
|
954
1027
|
### `tool-workflow/*`
|
|
955
1028
|
|
|
@@ -1029,7 +1102,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
1029
1102
|
|
|
1030
1103
|
类型:[TurnEndReason](./subsystems/session.md)
|
|
1031
1104
|
|
|
1032
|
-
来源:[`packages/core/session/src/types.ts:
|
|
1105
|
+
来源:[`packages/core/session/src/types.ts:285`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
|
|
1033
1106
|
|
|
1034
1107
|
<a id="turnstart--log-only"></a>
|
|
1035
1108
|
|
|
@@ -1045,7 +1118,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
1045
1118
|
'turn/start': { turn: number }
|
|
1046
1119
|
```
|
|
1047
1120
|
|
|
1048
|
-
来源:[`packages/core/session/src/types.ts:
|
|
1121
|
+
来源:[`packages/core/session/src/types.ts:276`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
|
|
1049
1122
|
|
|
1050
1123
|
### `user/*`
|
|
1051
1124
|
|
|
@@ -1064,7 +1137,7 @@ export type SessionEvent<T extends SessionEventType = SessionEventType> = {
|
|
|
1064
1137
|
'user/message': UserMessage
|
|
1065
1138
|
```
|
|
1066
1139
|
|
|
1067
|
-
来源:[`packages/core/session/src/types.ts:
|
|
1140
|
+
来源:[`packages/core/session/src/types.ts:297`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/types.ts)
|
|
1068
1141
|
|
|
1069
1142
|
### `web/*`
|
|
1070
1143
|
|
|
@@ -49,7 +49,7 @@ type ApprovalOutcome = 'allowed-once' | 'rejected' | 'cancelled' | 'unavailable'
|
|
|
49
49
|
type ApprovalPolicy = 'ask' | 'never'
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
两种策略都会将各自完整的当前含义贡献给缓存安全的运行时上下文快照。带来源的 `user/message`
|
|
52
|
+
两种策略都会将各自完整的当前含义贡献给缓存安全的运行时上下文快照。带来源的 `user/message` 是持久化且模型可见的输入;审批状态变化时,会在保留的历史后追加一份新的完整快照,而不触碰承载渲染后系统提示词的 `system/message` 节点。
|
|
53
53
|
|
|
54
54
|
## 审批请求
|
|
55
55
|
|
|
@@ -133,6 +133,15 @@ graph(): WebBootGraph
|
|
|
133
133
|
*/
|
|
134
134
|
clientPath(id: string): string | undefined
|
|
135
135
|
|
|
136
|
+
/**
|
|
137
|
+
* Serve an advertised revisioned bundle or source map without a Web server.
|
|
138
|
+
* Unknown URLs return 404, unsupported methods return 405, and `HEAD`
|
|
139
|
+
* returns the same immutable headers without a body.
|
|
140
|
+
* @param request - shell-carrier request for a `/plugins` resource.
|
|
141
|
+
* @returns the exact response also exposed by the optional Web route.
|
|
142
|
+
*/
|
|
143
|
+
fetchBundle(request: Request): Response
|
|
144
|
+
|
|
136
145
|
/**
|
|
137
146
|
* Filesystem baseline captured before an entry's current bytes were read.
|
|
138
147
|
* HMR compares it with the live files when installing a watch, so a write
|