docs(i18n): include complete proofreading corpus

This commit is contained in:
xjt
2026-08-12 12:30:19 +08:00
parent 7b450d121e
commit 4806d94715
884 changed files with 2546 additions and 2547 deletions

View File

@@ -3,4 +3,4 @@
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/rejected/simplification/2026-06-20-fold-session-persistence-interface.md
2026-06-20-fold-session-persistence-interface.md: 3079e9495cdbf4dd698fccc65d3c2fdada29cfc1
2026-06-20-fold-session-persistence-interface.zh.md: e028089399e15d5d125d28788586fa1ef58980e7
2026-06-20-fold-session-persistence-interface.zh.md: c7e787d66bbb6f73589fe64ffc2c86aeaae8b354

View File

@@ -26,6 +26,6 @@ Status: rejected — 独立的持久化 Service Definition 包是持久化能力
## 放弃了什么
`dsh-session` 变得更重:它同时拥有内存日志和持久化 Service Definition。这就是代价。如果第三方持久化后端已经形成公开生态独立的 Service Definition 包会是更清晰的 SDK 边界;但在预发布阶段尚无外部 Consumer 时,这个额外的包更像是过早引入的抽象。
`dsh-session` 变得更重:它同时拥有内存日志和持久化 Service Definition。这就是代价。如果第三方持久化后端已经形成公开生态独立的 Service Definition 包会是更清晰的 SDK 边界;但在预发布阶段尚无外部消费方时,这个额外的包更像是过早引入的抽象。
<!-- agent-note-format: alternatives-not-recorded (pre-format Agent Note) -->

View File

@@ -3,4 +3,4 @@
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/rejected/simplification/2026-07-12-collapse-workflow-to-foreground-core.md
2026-07-12-collapse-workflow-to-foreground-core.md: 506a71593f6d81a23b2e3e1dc0b5a0e620f30ac3
2026-07-12-collapse-workflow-to-foreground-core.zh.md: 0b4c73e5df973215b10166f3dc2bbd525cc8231b
2026-07-12-collapse-workflow-to-foreground-core.zh.md: 4d15df5513e9a1bdb7105fac83b67d94a60d708f

View File

@@ -1,6 +1,6 @@
# Agent Note: 将工作流收缩至已使用的前台核心
Status: rejected — 工作流进度是有意设计的观测接口;应通过消费方使其发挥作用,而非删除它。
Status: rejected — 工作流进度是有意设计的观测接口;应通过消费方使其发挥作用,而非删除它。
[English](2026-07-12-collapse-workflow-to-foreground-core.md) | 中文
@@ -14,17 +14,17 @@ Status: rejected — 工作流进度是有意设计的观测接口面;应通
取消机制也为一个同步启动提供了两条公开通道。`WorkflowStartRequest.signal` 被传递给 worker host而唯一的生产调用方另外将同一个 signal 桥接到 `WorkflowRun.cancel()`。因为 `start()` 在控制权让出之前就返回了 run不存在需要请求时取消的就绪窗口重复的 signal 增加了 host 的 listener/disarm 状态却没有封堵任何竞态。
`WorkflowError.fatal` 是同一种推测性分支的微缩版:所有生产环境的构造都是 fatal `fatal: false` 仅存在于测试中,组合子已经通过 `instanceof` 区分工作流失败。
`WorkflowError.fatal` 是同一种推测性分支的微缩版:生产代码中的构造全都采用 fatal 模式`fatal: false` 仅存在于测试中,组合子已经通过 `instanceof` 区分工作流失败。
## 提案
保留已使用的核心:`agent(prompt, { schema, model })``parallel``pipeline``args`、并发/agent 上限、取消、有界 dispose资源释放、结构化结果、worker 隔离与前台工具收集。移除所有 `workflow/*` 事件及其仅供事件使用的 info/outcome 类型;移除 `phase()``log()`、agent 的 `label`/`phase`、phase 声明、`whenToUse` 及其 worker 消息/host 观测者;将工作流元数据收缩为工具实际使用的 name移除仅供事件使用的 run id/meta 快照与合成的 agent-end 账本。将 `WorkflowRun` 收缩为 `result``cancel()``dispose()`;工具渲染请求方持有的 name。移除 `WorkflowStartRequest.signal` 及 worker host 的 input-signal listener/disarm 状态,保留调用方从其 abort signal 到 `run.cancel()` 的桥接。将 `WorkflowError` 变为单一的 fatal 错误类,不再有布尔模式或 `isFatalWorkflowError()` 辅助函数。
保留已使用的核心:`agent(prompt, { schema, model })``parallel``pipeline``args`、并发/agent 上限、取消、有界 dispose资源释放、结构化结果、worker 隔离与前台工具收集。移除所有 `workflow/*` 事件及其仅供事件使用的 info/outcome 类型;移除 `phase()``log()`、agent 的 `label`/`phase`、phase 声明、`whenToUse` 及其 worker 消息/host 观测者;将工作流元数据收缩为工具实际使用的 name移除仅供事件使用的 run id/meta 快照与合成的 agent-end 账本。将 `WorkflowRun` 收缩为 `result``cancel()``dispose()`;工具渲染请求中已有的 name。移除 `WorkflowStartRequest.signal` 及 worker host 的 input-signal listener/disarm 状态,保留调用方从其 abort signal 到 `run.cancel()` 的桥接。将 `WorkflowError` 变为单一的 fatal 错误类,不再有布尔模式或 `isFatalWorkflowError()` 辅助函数。
修订已实施的动态工作流 Agent Note并更新 seam/工具/worker README、工具 schema、生成的 catalog 与包依赖图、worker type-equiv 记录、单元测试以及工作流快照/header fixture测试前置数据。如果进度 UI 工作被立项,应从一份命名了父 agent/会话/工具调用的关联约定出发,而非原样复活这套协议。
## 曾考虑的替代方案
**为未来 UI 保留预建的观测词汇。** 当前形态类似 Claude Code 的动态工作流元数据host 有意地将每个转发的 agent start 与 worker 的 end 或一个合成的终止 end 配对。移除它意味着放弃形态兼容性,使进度 UI 成为一项全新的设计任务;但现有载荷仍缺少可路由的归属信息,因此仅靠平衡的生命周期也无法在不重新设计的情况下让已命名的 ACP 消费方可行。
**为未来 UI 保留预建的观测词汇。** 当前形态类似 Claude Code 的动态工作流元数据host 有意地将每个转发的 agent start 与 worker 的 end 或一个合成的终止 end 配对。移除它意味着放弃形态兼容性,使进度 UI 成为一项全新的设计任务;但现有载荷仍缺少可路由的归属信息,因此仅靠成对完整的生命周期也无法在不重新设计的情况下让已命名的 ACP 消费方可行。
## 验收标准

View File

@@ -3,4 +3,4 @@
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/rejected/simplification/2026-07-12-prune-unused-skill-registry-api.md
2026-07-12-prune-unused-skill-registry-api.md: ce4160445cf36c0ee26ae575b5dcf7be6e931c01
2026-07-12-prune-unused-skill-registry-api.zh.md: ca21915b338beb59950d7ad89f0fd89d773a02ed
2026-07-12-prune-unused-skill-registry-api.zh.md: 2366dc826e962c1f9f1ab058003a909f1ae4a1d0

View File

@@ -6,7 +6,7 @@ Status: rejected — 直接在运行时注册 skill 是为第三方插件保留
## 问题
skill技能服务的嵌入式运行时子系统中`ctx.skills.register()` 没有任何生产调用方。它引入了一个保留的 `runtime` 提供方名称、一套运行时 map/rank/source、重复策略、缓存键中的第二个 revision、规范化逻辑、dispose资源释放函数以及相应测试——而所有已交付的 skill 都使用提供方约定。`SkillSummary.whenToUse` 和 candidate/definition 的 `path` 被解析和复制,但没有任何生产消费方读取它们:模型目录只渲染 name/description资源加载使用 `resourceBase`,提供方自行管理其定位器。有意开放的 `metadata` 扩展点保留不动。
skill技能服务的嵌入式运行时子系统中`ctx.skills.register()` 没有任何生产调用方。它引入了一个保留的 `runtime` 提供方名称、一套运行时 map/rank/source、重复策略、缓存键中的第二个 revision、规范化逻辑、dispose资源释放函数以及相应测试——而所有已交付的 skill 都使用提供方约定。`SkillSummary.whenToUse` 和 candidate/definition 的 `path` 被解析和复制,但没有任何生产消费方读取它们:模型目录只渲染 name/description资源加载使用 `resourceBase`,提供方自行管理其定位器。有意开放的 `metadata` 扩展点保留不动。
## 提案
@@ -21,7 +21,7 @@ skill技能服务的嵌入式运行时子系统中`ctx.skills.register(
## 验收标准
- skill 收集只有一条提供方驱动的路径,已完成缓存仅以 cwd 为键revision epoch 仅用于使进行中的发现操作失效;保留的 skill 字段要么有生产读取方,要么有记录在案的有意扩展约定。
- agent 作用域的提示词段、变量、工具提供方、工具守卫,以及原生模式和 Code Mode 下的 structured-output 提交行为保持不变。
- agent 作用域的系统提示词段、变量、工具提供方、工具守卫,以及原生模式和 Code Mode 下的 structured-output 提交行为保持不变。
- 类型检查、覆盖率、快照、doc-sync文档同步门禁、module-graph 校验、构建与 hygiene 全部通过。
## 风险

View File

@@ -3,4 +3,4 @@
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/rejected/simplification/2026-07-19-fold-compaction-package-split.md
2026-07-19-fold-compaction-package-split.md: 8bd83c389454092171633af806178ef8a9a74c72
2026-07-19-fold-compaction-package-split.zh.md: ada725cbf726695836cc2dfce47fce82bea8d0f0
2026-07-19-fold-compaction-package-split.zh.md: 7f3e1622cc576d0d6c1d7c7cf171e9c7ccbb77f5

View File

@@ -8,13 +8,13 @@ Status: rejected — 计划增加更多压缩后端,因此 Service Definition
压缩compaction目前拆分在两个包中`@deepseek-ai/dsh-compact` 拥有一个含两个方法的抽象服务和共享类型,`@deepseek-ai/dsh-compact-basic` 拥有唯一的完整提供方。交付配置只加载 basic 包,除了该提供方外,没有生产包独立消费 Service Definition 包。
该拆分增加了一份包 manifest元数据清单、README、项目边界、依赖边、抽象转发类、生成目录项和组合接线却没有实际的后端替换用例。[能力 seam 决策](../../implemented/architecture/2026-06-13-capability-seams.md)要求接口、实现和消费方都必须真实存在,而不能预先拆分;[压缩决策](../../implemented/feature/2026-06-18-compaction-capability-seam.md)也记录了独立消费方仍被推迟。
该拆分增加了一份包 manifest元数据清单、README、项目边界、依赖边、抽象转发类、生成目录项和组合接线却没有实际的后端替换用例。[能力 seam 决策](../../implemented/architecture/2026-06-13-capability-seams.md)要求接口、实现和消费方都必须真实存在,而不能预先拆分;[压缩决策](../../implemented/feature/2026-06-18-compaction-capability-seam.md)也记录了独立消费方的实现仍被推迟。
## 提案
把 basic 实现移入 `@deepseek-ai/dsh-compact`,并删除 `@deepseek-ai/dsh-compact-basic``ctx.compact``CompactionResult`、共享 transcript文本记录和工具配对辅助方法、现有配置以及具体压缩算法都由一个包负责。
保留 `summarize()` 作为受保护的自定义钩子。部署专用的摘要器可以通过继承或拦截现有 LLM大语言模型调用完成定制无需第二个能力包。只有在第二个完整后端与独立 Consumer 确实需要替换实现时,才重新引入独立的 Service Definition 包。
保留 `summarize()` 作为受保护的自定义钩子。部署专用的摘要器可以通过继承或拦截现有 LLM大语言模型调用完成定制无需第二个能力包。只有在第二个完整后端与独立消费方确实需要替换实现时,才重新引入独立的 Service Definition 包。
如果本提案获准,应同步修订已实现的压缩决策与[可回忆压缩提案](../../proposed/feature/2026-07-06-recallable-compaction.md),使包所有权只有一处持久说明。

View File

@@ -3,4 +3,4 @@
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/rejected/simplification/2026-07-26-dependency-swaps-rejected-by-nih-audit.md
2026-07-26-dependency-swaps-rejected-by-nih-audit.md: c3422a9c8b4d60b4795aed5108923ac3446b0a46
2026-07-26-dependency-swaps-rejected-by-nih-audit.zh.md: d026c6149409fe010fe75269cc6ed58bbcda4434
2026-07-26-dependency-swaps-rejected-by-nih-audit.zh.md: 95f94f90f1a3d88c265d1f3b79a2dbb330aaa144

View File

@@ -14,7 +14,7 @@ Status: rejected — 下列每一项替换在证据上都未达到净简化门
**协议与解析:**
- **以 `vscode-jsonrpc` 承担 LSP 基础协议的分帧/关联**`lsp-local`):可替换的核心只占 src 约 1,800 行中的约 255 行;该包无法表达配置的 `maxMessageBytes` 入站大小上限(要恢复它就得重建被删掉的分帧代码),反转了取消宽限期的拆除语义(`raceAbort` 立即 reject 再拆除vscode-jsonrpc 让 promise 保持挂起),会在真实服务器输出的 header 前 stdout 横幅上报错,而且在这个 ESM 通行的仓库里它是 CJS。[LSP seam 决策](../../implemented/architecture/2026-07-15-lsp-capability-seam.md)把 JSON-RPC 的所有权划给 `dsh-lsp-local`;本次审计正是对该决策当时缺失的这项依赖权衡的明文记录。
- **以 `vscode-jsonrpc` 承担 LSP 基础协议的分帧/关联**`lsp-local`):可替换的核心只占 src 约 1,800 行中的约 255 行;该包无法表达配置的 `maxMessageBytes` 入站大小上限(要恢复它就得重建被删掉的分帧代码),反转了取消宽限期的拆除语义(`raceAbort` 立即 reject 再拆除vscode-jsonrpc 让 promise 保持挂起),会在真实服务器输出的 header 前 stdout 横幅上报错,而且在这个全面采用 ESM 的仓库里它是 CJS。[LSP seam 决策](../../implemented/architecture/2026-07-15-lsp-capability-seam.md)把 JSON-RPC 的所有权划给 `dsh-lsp-local`;本次审计正是对该决策当时缺失的这项依赖权衡的明文记录。
- **以 `vscode-languageserver-types` 承担 lsp-local 的协议类型子集**:约 80 行类型加约 45 行守卫,但上游守卫在两个方向上都与本仓库不一致(接受本仓库必须拒绝的 `uri: undefined`;强制要求本仓库容忍缺失的 `targetRange`),而且 initialize 结果的形状住在 `vscode-languageserver-protocol` 里,会把 `vscode-jsonrpc` 拖成运行时依赖——为 80 行严格贴合规范的代码付出约 1 MB。
- **以 `json-rpc-2.0` 替换 `dsh-jsonrpc`**:可删除的关联/分发代码确实存在(约 100130 行),但 NDJSON 协议格式wire format必须与手写的 Python SDK 客户端逐位一致,该包只有单一维护者,且 [GUI RPC 决策](../../implemented/architecture/2026-07-19-gui-layering-and-rpc-protocol.md)已把这个包当作冻结的窄接口面对待。`vscode-jsonrpc` 更不合适Content-Length 分帧、该协议并不具备的取消词汇)。
- **以 `jsonrpcclient` 承担 Python SDK 客户端**v4 只做消息的构造/解析——约 20 行——而真正要紧的 500 行子进程生命周期、线程化读取器、id 关联、双向的服务端角色应答)全都保留;该库处于低维护模式。
@@ -33,7 +33,7 @@ Status: rejected — 下列每一项替换在证据上都未达到净简化门
- **以 Ajv 承担 tools 的 JSON Schema 校验器**[schema DSL 决策](../../implemented/architecture/2026-07-20-unified-json-value-schema-dsl.md)已明确否决接纳更大的 schema 语言;这个校验器还会做 Ajv 不做的、针对 realm 内建原型的检查。
- **以 `structuredClone` 替换会话的 `snapshotJsonValue`/`isJsonValue`**:它是校验器加分离器,以「每个 getter 只读一次」和跨 realm 内建对象检查强制执行无损 JSON 边界;`structuredClone` 接受 Map/Date/-0什么都不强制。有意保持零依赖、针对被模型篡改的 realm 做过加固的 `code-runtime-worker` 镜像实现同理。
- **以 `fast-deep-equal` 替换会话接口面的 `isDeepEqualJson`**、**以 `safe-stable-stringify` 承担 repeat-tool-guard 的规范化**:两项替换在机械层面都可行,但每一项都是拿约 1720 行带注释、有测试的代码,去换一个核心包的第一个外部运行时依赖——在这个体量上是净亏损。
- **以 zod/valibot 承担持久事件的严格解码器**goal fold、tool-ralph、session它们是位于持久化边界、键集精确匹配、失败即大声报错、带事件专属报错信息的解码器;在仓库标准 schemastery 之外再放一个 schema 库是政策变更,不是删除。
- **以 zod/valibot 承担持久事件的严格解码器**goal fold、tool-ralph、session它们是位于持久化边界、键集精确匹配、失败即明确报错、带事件专属报错信息的解码器;在仓库标准 schemastery 之外再放一个 schema 库是政策变更,不是删除。
- **以 `gpt-tokenizer`/tiktoken 替换 token-meter**[回放 token 计量决策](../../implemented/architecture/2026-07-15-replay-token-meter-service.md)已明确否决分词器后端GPT 的 BPE 对 DeepSeek 模型来说也是错误的分词器,而且这个包约 350 行是回放折叠簿记,任何分词器都覆盖不了。
- **以 `partial-json` 处理流式工具调用参数**:无可替换——按已记录的约定,参数端到端保持为原始 JSON 字符串;`JSON.parse` 只在完整载荷上运行。
@@ -69,7 +69,7 @@ Status: rejected — 下列每一项替换在证据上都未达到净简化门
- **以 `prebuildify`/`node-gyp-build` 承担 landlock 启动器打包**:不适用——那些工具通过 dlopen 加载 `.node` addon这个启动器交付的是独立 exec 的静态二进制,而按平台划分的 `optionalDependencies` 恰恰*就是*二进制分发的生态惯例。
- **以 `@landstrip/landstrip` 替换 Landlock 启动器本身**:未通过安全不变式检验——启动器是一个约 300 行、可完整评审的 C 文件,其二进制逐字节锁定到原生 CI 构建,且早已从一个 Rust 依赖迁移出来;单一维护者的 LGPL Rust 二进制集合有更大的审计面,其发布更难与已审阅源码对应。(尚未构建的 Windows 层级经单独权衡后同样被[驳回](../feature/2026-07-26-evaluate-landstrip-for-windows-sandbox-rung.md)——landstrip 未经实战检验。)
- **以 `hatch-nodejs-version` 承担 Python 发布版本号**:代码行数大致持平(一个自定义 metadata 钩子换掉那个正则却反转了「dev 哨兵值绝不决定发布版本」这条记录在案的决策,还把一个单一维护者的构建插件放进发布供应链。
- **YAML 归一(`js-yaml``yaml`**:仓库同时携带两个解析器,`!!js` 标签在 js-yaml 上定义了四次vendor 收录的 include、app-boot、apps/cli、`scripts/verify-cordis-config.ts`),在 `yaml` 上定义了两次sdk-telemetry 的 `ScalarTag`、sdk-helper 的保留注释 Document 编辑。方向是被迫的——js-yaml 无法取代 `yaml`sdk-helper 需要 Document API——但迁移 js-yaml 各调用点也退休不了这个库vendor 收录的 include 锁定了它),还会让两个解析器共管一种必须完全一致的方言,违背[个人配置决策](../../implemented/feature/2026-07-20-dsh-cli-personal-config.md)刻意的「仅加载副本」对等性。可删除的:约 2025 行重复标签定义和两条 `@types/js-yaml` 条目。归一的时机是未来某次 include 同步,不是现在。
- **YAML 归一(`js-yaml``yaml`**:仓库同时携带两个解析器,`!!js` 标签在 js-yaml 上定义了四次vendor 收录的 include、app-boot、apps/cli、`scripts/verify-cordis-config.ts`),在 `yaml` 上定义了两次sdk-telemetry 的 `ScalarTag`、sdk-helper 的保留注释 Document 编辑。方向是被迫的——js-yaml 无法取代 `yaml`sdk-helper 需要 Document API——但迁移 js-yaml 各调用点也退休不了这个库vendor 收录的 include 锁定了它),还会让两个解析器共管一种必须完全一致的方言,违背[个人配置决策](../../implemented/feature/2026-07-20-dsh-cli-personal-config.md)刻意的「仅加载副本」对等性。可删除的:约 2025 行重复标签定义和两条 `@types/js-yaml` 条目。归一的时机是未来某次 include 同步,不是现在。
## 曾考虑的替代方案