dsh-plugin-guide 0.3.9 → 0.3.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/{README.es.md → README-es.md} +15 -5
  2. package/{README.hi.md → README-hi.md} +15 -5
  3. package/{README.pt.md → README-pt.md} +15 -5
  4. package/{README.zh.md → README-zh.md} +15 -5
  5. package/README.md +14 -5
  6. package/SKILL.md +1 -1
  7. package/dist/dsh-plugin-dev.js +4 -4
  8. package/guide/links.md +2 -1
  9. package/guide/unfixed-issues.md +111 -0
  10. package/package.json +7 -7
  11. package/references/harness-repo.md +2 -2
  12. package/references/official-docs/README.i18n.yaml +1 -1
  13. package/references/official-docs/README.md +1 -1
  14. package/references/official-docs/SNAPSHOT.md +1 -1
  15. package/references/official-docs/docs/architecture.zh.md +2 -2
  16. package/references/official-docs/docs/cookbook/adding-a-settings-card.zh.md +1 -1
  17. package/references/official-docs/docs/cookbook/adding-a-tool.zh.md +2 -2
  18. package/references/official-docs/docs/cookbook/adding-an-llm-adapter.zh.md +1 -1
  19. package/references/official-docs/docs/cookbook/extension-cookbook.zh.md +2 -2
  20. package/references/official-docs/docs/deepseek-llm-api-wire-extensions.zh.md +4 -4
  21. package/references/official-docs/docs/development.zh.md +3 -3
  22. package/references/official-docs/docs/i18n/README.i18n.yaml +1 -1
  23. package/references/official-docs/docs/i18n/README.md +1 -1
  24. package/references/official-docs/docs/i18n/style-samples.md +1 -1
  25. package/references/official-docs/docs/i18n/translation-prompt.md +4 -4
  26. package/references/official-docs/docs/i18n/translation-rules.zh.md +2 -2
  27. package/references/official-docs/docs/postmortem/README.i18n.yaml +1 -1
  28. package/references/official-docs/docs/postmortem/README.md +1 -1
  29. package/references/official-docs/docs/postmortem/README.zh.md +1 -1
  30. package/references/official-docs/docs/subsystems/README.i18n.yaml +1 -1
  31. package/references/official-docs/docs/subsystems/README.md +1 -1
  32. package/references/official-docs/docs/subsystems/agent-team.zh.md +1 -1
  33. package/references/official-docs/docs/subsystems/client-modules.zh.md +2 -2
  34. package/references/official-docs/docs/subsystems/commands.zh.md +1 -1
  35. package/references/official-docs/docs/subsystems/compaction.zh.md +2 -2
  36. package/references/official-docs/docs/subsystems/conversation.zh.md +1 -1
  37. package/references/official-docs/docs/subsystems/core.zh.md +3 -3
  38. package/references/official-docs/docs/subsystems/extensions.zh.md +1 -1
  39. package/references/official-docs/docs/subsystems/filesystem.zh.md +1 -1
  40. package/references/official-docs/docs/subsystems/goal.zh.md +1 -1
  41. package/references/official-docs/docs/subsystems/invariants.zh.md +2 -2
  42. package/references/official-docs/docs/subsystems/jobs.zh.md +1 -1
  43. package/references/official-docs/docs/subsystems/llm-streaming.zh.md +2 -2
  44. package/references/official-docs/docs/subsystems/permission-presets.zh.md +1 -1
  45. package/references/official-docs/docs/subsystems/plan.zh.md +2 -2
  46. package/references/official-docs/docs/subsystems/sandbox.zh.md +2 -2
  47. package/references/official-docs/docs/subsystems/schedule.zh.md +2 -2
  48. package/references/official-docs/docs/subsystems/scope.zh.md +1 -1
  49. package/references/official-docs/docs/subsystems/session-projection.zh.md +1 -1
  50. package/references/official-docs/docs/subsystems/session-telemetry.zh.md +2 -2
  51. package/references/official-docs/docs/subsystems/session.zh.md +1 -1
  52. package/references/official-docs/docs/subsystems/shell.zh.md +1 -1
  53. package/references/official-docs/docs/subsystems/slots.zh.md +1 -1
  54. package/references/official-docs/docs/subsystems/storage.zh.md +2 -2
  55. package/references/official-docs/docs/subsystems/subprocess.zh.md +1 -1
  56. package/references/official-docs/docs/subsystems/system-prompt.zh.md +1 -1
  57. package/references/official-docs/docs/subsystems/todo.zh.md +1 -1
  58. package/references/official-docs/docs/subsystems/web-client.zh.md +3 -3
  59. package/references/official-docs/docs/subsystems/web-server.zh.md +1 -1
  60. package/references/official-docs/docs/subsystems/workflow.zh.md +2 -2
  61. package/references/official-docs/docs/testing.zh.md +1 -1
  62. package/references/official-docs/docs/user/develop/basic/index.zh.md +1 -1
  63. package/references/official-docs/docs/user/develop/basic/publish.zh.md +3 -3
  64. package/references/official-docs/docs/user/develop/practice/dynamic-cordis.zh.md +2 -2
  65. package/references/official-docs/docs/user/guide/index.zh.md +2 -2
  66. package/references/official-docs/docs/user/guide/mcp-memory.zh.md +1 -1
  67. package/references/official-docs/docs/user/guide/providers.zh.md +2 -2
  68. package/references/official-docs/docs/user/guide/python-sdk.zh.md +1 -1
  69. package/references/official-docs/docs/web-styling.zh.md +1 -1
  70. package/references/official-docs/packages/README.md +1 -1
  71. package/references/sources.md +2 -2
  72. package/references/website-pages.md +2 -2
  73. package/scripts/check-readme-sync.mjs +4 -4
  74. package/scripts/sync-official-docs.ps1 +4 -4
  75. package/scripts/verify-artifacts.mjs +1 -1
  76. package/scripts/verify-kit.ps1 +2 -2
  77. /package/templates/js/{README.es.md → README-es.md} +0 -0
  78. /package/templates/js/{README.hi.md → README-hi.md} +0 -0
  79. /package/templates/js/{README.pt.md → README-pt.md} +0 -0
  80. /package/templates/js/{README.zh.md → README-zh.md} +0 -0
  81. /package/templates/ts/{README.es.md → README-es.md} +0 -0
  82. /package/templates/ts/{README.hi.md → README-hi.md} +0 -0
  83. /package/templates/ts/{README.pt.md → README-pt.md} +0 -0
  84. /package/templates/ts/{README.zh.md → README-zh.md} +0 -0
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](session-telemetry.md) | 中文
4
4
 
5
- 对外的会话上报拆分为一项[能力 seam](../capability-seams.zh.md):Service Definition 与捕获协调器([dsh-session-telemetry](../../packages/session/session-telemetry),`ctx.sessionTelemetry`)拥有完整的权威事件捕获、`session-telemetry/record` 脱敏 waterfall(瀑布式事件)、handoff 游标与最小后端约定;部署方加载的 Service Provider([dsh-session-telemetry-otel](../../packages/session/session-telemetry-otel))则是原样配置的 OpenTelemetry JS SDK 日志流水线。它是一项可选能力,不属于 agent loop(智能体循环)主干,这里也没有任何内容会进入模型请求。边界公理(harness 的职责止于 `emit()`;批处理、重试、排队与丢失策略都属于上报 SDK)连同被否决的替代方案,均已在[复活 Agent Note](../../.agents/notes/implemented/feature/2026-07-23-session-telemetry-otel-revival.zh.md)中定案;捕获与游标约定见 [Service Definition README](../../packages/session/session-telemetry/README.zh.md)。
5
+ 对外的会话上报拆分为一项[能力 seam](../capability-seams.zh.md):Service Definition 与捕获协调器([dsh-session-telemetry](../../packages/session/session-telemetry),`ctx.sessionTelemetry`)拥有完整的权威事件捕获、`session-telemetry/record` 脱敏 waterfall(瀑布式事件)、handoff 游标与最小后端约定;部署方加载的 Service Provider([dsh-session-telemetry-otel](../../packages/session/session-telemetry-otel))则是原样配置的 OpenTelemetry JS SDK 日志流水线。它是一项可选能力,不属于 agent loop(智能体循环)主干,这里也没有任何内容会进入模型请求。边界公理(harness 的职责止于 `emit()`;批处理、重试、排队与丢失策略都属于上报 SDK)连同被否决的替代方案,均已在[复活 Agent Note](../../.agents/notes/implemented/feature/2026-07-23-session-telemetry-otel-revival.zh.md)中定案;捕获与游标约定见 [Service Definition README](../../packages/session/session-telemetry/README-zh.md)。
6
6
 
7
7
  源码:[`packages/session/session-telemetry/src/index.ts`](../../packages/session/session-telemetry/src/index.ts)
8
8
 
@@ -59,7 +59,7 @@ interface SessionTelemetryRecord {
59
59
 
60
60
  ## 共享披露
61
61
 
62
- 该 seam 的确认契约(归属 [Service Definition README 的共享披露段](../../packages/session/session-telemetry/README.zh.md#the-sharing-disclosure)):每个后端都通过 `ctx.sessionTelemetry` 上必需的抽象 `sharing` 成员披露其部署级共享策略,消费方只有在未挂载任何遥测服务时才渲染「未配置」。披露只陈述当前策略,绝不承诺投递或留存——交接是非阻塞入队,批处理、重试与丢失策略仍归上报 SDK。
62
+ 该 seam 的确认契约(归属 [Service Definition README 的共享披露段](../../packages/session/session-telemetry/README-zh.md#the-sharing-disclosure)):每个后端都通过 `ctx.sessionTelemetry` 上必需的抽象 `sharing` 成员披露其部署级共享策略,消费方只有在未挂载任何遥测服务时才渲染「未配置」。披露只陈述当前策略,绝不承诺投递或留存——交接是非阻塞入队,批处理、重试与丢失策略仍归上报 SDK。
63
63
 
64
64
  ```ts type-equiv
65
65
  /**
@@ -325,7 +325,7 @@ type SurfaceIntent<T extends SurfaceEventType = SurfaceEventType> = {
325
325
  })
326
326
  ```
327
327
 
328
- 对 `SurfaceEventType` 事件必填:每个产生消息的事件都必须声明它如何加入 surface(派生模型历史的唯一来源)。面向人类的 transcript(文本记录)是另一个投影,读取的是日志中追加来源的事件,因为 surface 会有意遮蔽替换所概括的范围(见 [dsh-session](../../packages/core/session/README.zh.md) 的 `isAppendSurfaceEvent`)。非 surface 类型在编译期拒绝此参数。
328
+ 对 `SurfaceEventType` 事件必填:每个产生消息的事件都必须声明它如何加入 surface(派生模型历史的唯一来源)。面向人类的 transcript(文本记录)是另一个投影,读取的是日志中追加来源的事件,因为 surface 会有意遮蔽替换所概括的范围(见 [dsh-session](../../packages/core/session/README-zh.md) 的 `isAppendSurfaceEvent`)。非 surface 类型在编译期拒绝此参数。
329
329
 
330
330
  `assistant/message` 不能携带 `sourceEventSeqs`;它的 `stream` 拥有精确 provider 证据。其他 surface event 不引用较早 event 时省略该字段,需要引用时使用完整非空 list。
331
331
 
@@ -140,7 +140,7 @@ interface ShellRunResult {
140
140
 
141
141
  ## 文件沙箱:`ShellSandboxInfo`
142
142
 
143
- 使用沙箱的执行器通过 `ShellExecutor.sandboxMode` 暴露其已配置的模式回退值。工具层请求 [`@deepseek-ai/dsh-sandbox-policy`](../../packages/sandbox/sandbox-policy/README.zh.md),把每个调用会话的持久 `sandbox/mode` 覆盖值与不可变 cwd 解析为 `ShellExecRequest.sandboxPolicy`;经用户批准、严格更宽松的调用只替换模式。模式/root/enforcement 词汇归 [`@deepseek-ai/dsh-sandbox` 沙箱 seam](sandbox.zh.md) 所有;模式仅管辖文件效果。
143
+ 使用沙箱的执行器通过 `ShellExecutor.sandboxMode` 暴露其已配置的模式回退值。工具层请求 [`@deepseek-ai/dsh-sandbox-policy`](../../packages/sandbox/sandbox-policy/README-zh.md),把每个调用会话的持久 `sandbox/mode` 覆盖值与不可变 cwd 解析为 `ShellExecRequest.sandboxPolicy`;经用户批准、严格更宽松的调用只替换模式。模式/root/enforcement 词汇归 [`@deepseek-ai/dsh-sandbox` 沙箱 seam](sandbox.zh.md) 所有;模式仅管辖文件效果。
144
144
 
145
145
  沙箱化运行会报告其模式、保守的拒绝分类与强制执行完整度。`runnerFailed` 标记命令运行前沙箱 runner 已失败;前台执行会抛出 `SANDBOX_UNAVAILABLE`,而已结束的后台进程只能通过其事实通道报告。
146
146
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](slots.md) | 中文
4
4
 
5
- Slots 是 Web Client 的类型化 React 组合系统。[`dsh-client-ui-slots`](../../packages/client/ui-slots/README.zh.md)定义不依赖 React 的注册表与类型代数;[`dsh-client-ui-renderer`](../../packages/client/ui-renderer/README.zh.md)把可观测源绑定成钩子、渲染整棵树,并在内部拥有 React context。功能插件通过 `ctx.slots.register()` 贡献 UI,绝不导入其他功能插件的组件。
5
+ Slots 是 Web Client 的类型化 React 组合系统。[`dsh-client-ui-slots`](../../packages/client/ui-slots/README-zh.md)定义不依赖 React 的注册表与类型代数;[`dsh-client-ui-renderer`](../../packages/client/ui-renderer/README-zh.md)把可观测源绑定成钩子、渲染整棵树,并在内部拥有 React context。功能插件通过 `ctx.slots.register()` 贡献 UI,绝不导入其他功能插件的组件。
6
6
 
7
7
  本文记录 slot 的所有权、组件输入、扩展 API 与当前层级。外围的启动、Remote、Client model 与 Conversation 数据通路见 [Web Client 架构](web-client.zh.md)。
8
8
 
@@ -44,7 +44,7 @@ interface StorageBackend {
44
44
  }
45
45
  ```
46
46
 
47
- 一个后端拥有一个介质(一棵文件树的根目录、一个数据库文件),并提供可选的操作组;`kv` 是唯一已交付的操作组。`KvFacet.open(descriptor)` 打开一个具名 unit——`KvUnitDescriptor` 携带名称、当前格式版本、可选的兼容记录版本、表名清单,以及是否存在全局单例 slot——并返回提供 `loadAll`、`putRecord`、`deleteRecord`、`setGlobal` 和 `close` 的 `KvUnit`。unit 名与表名必须匹配 `UNIT_NAME_RE`(既可安全用作文件名,也可安全用作 SQL 标识符片段);记录键是任意字符串,绝不进入文件路径。unit 不对并发写入做串行化——顺序由调用方负责——但每次单独调用在介质上都是原子的,且 resolve 后即已持久。`single` 介质上记录的版本不同时拒绝 `version-mismatch`;`per-record` 文档的版本在接受集合之外时读作不存在。无法按该 unit 解析的介质拒绝 `malformed-medium`。[`backend.ts`](../../packages/storage/storage/src/backend.ts) 是逐条款的规范性约定,[`tests/contract.ts`](../../packages/storage/storage/tests/contract.ts) 中的共享一致性套件会针对每个后端检查每项条款。[json 后端](../../packages/storage/storage-json/README.zh.md)以原子方式为每个 unit 整文件重新发布一份人类可读文件;[sqlite 后端](../../packages/storage/storage-sqlite/README.zh.md)在单个数据库中每行存储一份文档,用于频繁更新的数据。
47
+ 一个后端拥有一个介质(一棵文件树的根目录、一个数据库文件),并提供可选的操作组;`kv` 是唯一已交付的操作组。`KvFacet.open(descriptor)` 打开一个具名 unit——`KvUnitDescriptor` 携带名称、当前格式版本、可选的兼容记录版本、表名清单,以及是否存在全局单例 slot——并返回提供 `loadAll`、`putRecord`、`deleteRecord`、`setGlobal` 和 `close` 的 `KvUnit`。unit 名与表名必须匹配 `UNIT_NAME_RE`(既可安全用作文件名,也可安全用作 SQL 标识符片段);记录键是任意字符串,绝不进入文件路径。unit 不对并发写入做串行化——顺序由调用方负责——但每次单独调用在介质上都是原子的,且 resolve 后即已持久。`single` 介质上记录的版本不同时拒绝 `version-mismatch`;`per-record` 文档的版本在接受集合之外时读作不存在。无法按该 unit 解析的介质拒绝 `malformed-medium`。[`backend.ts`](../../packages/storage/storage/src/backend.ts) 是逐条款的规范性约定,[`tests/contract.ts`](../../packages/storage/storage/tests/contract.ts) 中的共享一致性套件会针对每个后端检查每项条款。[json 后端](../../packages/storage/storage-json/README-zh.md)以原子方式为每个 unit 整文件重新发布一份人类可读文件;[sqlite 后端](../../packages/storage/storage-sqlite/README-zh.md)在单个数据库中每行存储一份文档,用于频繁更新的数据。
48
48
 
49
49
  ## 声明领域
50
50
 
@@ -150,7 +150,7 @@ interface DomainChangedBase {
150
150
  type DomainChanged = DomainChangedPut | DomainChangedDeleted
151
151
  ```
152
152
 
153
- `put`(插入、覆写和 global 写入)在 `value` 中携带新快照——绝不携带旧值;需要做差异比较的消费方自行保留上一份快照。`deleted` 是不携带值的墓碑。该事件是通知,不是事务参与者:发出时提交点已经过去,因此同步抛出的监听器会被兜住并记录一条警告,而不会让已经持久的写入被拒绝;发出的值等于发出时刻的内存态。该事件仅限进程内;跨进程的变更推送是一项已记录的限制([包 README](../../packages/storage/storage-domain/README.zh.md))。
153
+ `put`(插入、覆写和 global 写入)在 `value` 中携带新快照——绝不携带旧值;需要做差异比较的消费方自行保留上一份快照。`deleted` 是不携带值的墓碑。该事件是通知,不是事务参与者:发出时提交点已经过去,因此同步抛出的监听器会被兜住并记录一条警告,而不会让已经持久的写入被拒绝;发出的值等于发出时刻的内存态。该事件仅限进程内;跨进程的变更推送是一项已记录的限制([包 README](../../packages/storage/storage-domain/README-zh.md))。
154
154
 
155
155
  <!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
156
156
 
@@ -246,7 +246,7 @@ interface SubprocessOutcome {
246
246
 
247
247
  ## 服务行为
248
248
 
249
- 抽象的 [`SubprocessRuntime`](../../packages/subprocess/subprocess/src/index.ts) Service Definition 规定执行世界坐标、可执行文件查找、普通 `spawn` 与 `spawnTerminal`。[`LocalSubprocessRuntime`](../../packages/subprocess/subprocess-local/src/index.ts) 以 detached 进程树、按处置方式接线、凭据清除、`node-pty`、平台进程检查,以及先终止再等待退出的资源释放提供这些能力。Service Definition 约定见 [`dsh-subprocess`](../../packages/subprocess/subprocess/README.zh.md),本地机制见 [`dsh-subprocess-local`](../../packages/subprocess/subprocess-local/README.zh.md)。
249
+ 抽象的 [`SubprocessRuntime`](../../packages/subprocess/subprocess/src/index.ts) Service Definition 规定执行世界坐标、可执行文件查找、普通 `spawn` 与 `spawnTerminal`。[`LocalSubprocessRuntime`](../../packages/subprocess/subprocess-local/src/index.ts) 以 detached 进程树、按处置方式接线、凭据清除、`node-pty`、平台进程检查,以及先终止再等待退出的资源释放提供这些能力。Service Definition 约定见 [`dsh-subprocess`](../../packages/subprocess/subprocess/README-zh.md),本地机制见 [`dsh-subprocess-local`](../../packages/subprocess/subprocess-local/README-zh.md)。
250
250
 
251
251
  <!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
252
252
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](system-prompt.md) | 中文
4
4
 
5
- [system-prompt 包](../../packages/core/system-prompt)负责管理提示词贡献者与一次组装调用之间交换的数据。该包的 [README](../../packages/core/system-prompt/README.zh.md) 记录注册、排序、作用域与渲染行为;本页记录各插件实现或传递的确切跨包类型。
5
+ [system-prompt 包](../../packages/core/system-prompt)负责管理提示词贡献者与一次组装调用之间交换的数据。该包的 [README](../../packages/core/system-prompt/README-zh.md) 记录注册、排序、作用域与渲染行为;本页记录各插件实现或传递的确切跨包类型。
6
6
 
7
7
  源码:[`packages/core/system-prompt/src/index.ts`](../../packages/core/system-prompt/src/index.ts)。
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](todo.md) | 中文
4
4
 
5
- 本页记录 [`@deepseek-ai/dsh-tool-todo`](../../packages/todo/tool-todo/README.zh.md) 拥有的持久 todo 词汇。面向模型的工具会整体替换一个 agent(智能体)会话的列表;该包还拥有事件声明、回放投影和不变量配套插件。工具行为与配置见[包 README](../../packages/todo/tool-todo/README.zh.md)。
5
+ 本页记录 [`@deepseek-ai/dsh-tool-todo`](../../packages/todo/tool-todo/README-zh.md) 拥有的持久 todo 词汇。面向模型的工具会整体替换一个 agent(智能体)会话的列表;该包还拥有事件声明、回放投影和不变量配套插件。工具行为与配置见[包 README](../../packages/todo/tool-todo/README-zh.md)。
6
6
 
7
7
  源码:[`packages/todo/tool-todo/src/types.ts`](../../packages/todo/tool-todo/src/types.ts)
8
8
 
@@ -27,7 +27,7 @@ Web boot kernel 创建模块系统、预取 `immediately` entry、挂载 vendore
27
27
 
28
28
  Host 业务 service 使用 Typert Remote decorator 标记可调用 method。Host generation 产出严格 descriptor、runtime codec、declaration merge 与 source map。Client 侧 `api-remotes` assembly 选择这些生成贡献,并把具体 method 挂到 `ctx.remote.<namespace>` 与 Session scope 的 `agentCtx.remote.<namespace>`。功能包依赖生成的 service face,而不依赖 Gateway 实现或 Host 包的运行时 entry。
29
29
 
30
- Connection 拥有 request correlation、`/api` carrier、trust check、精确 Fetch 路由与 connection generation。API Gateway 拥有 Remote dispatch、取消、logical stream 与选定 Host event 的转发。Controller 操作应进入生成的 Remote method 或显式 Remote stream;功能自有的下载则注册精确 Fetch 路由。[API Gateway 参考](../api-gateway.zh.md)定义 generation 与调用,[Connection README](../../packages/client/connection/README.zh.md)定义物理 carrier 与信任策略。
30
+ Connection 拥有 request correlation、`/api` carrier、trust check、精确 Fetch 路由与 connection generation。API Gateway 拥有 Remote dispatch、取消、logical stream 与选定 Host event 的转发。Controller 操作应进入生成的 Remote method 或显式 Remote stream;功能自有的下载则注册精确 Fetch 路由。[API Gateway 参考](../api-gateway.zh.md)定义 generation 与调用,[Connection README](../../packages/client/connection/README-zh.md)定义物理 carrier 与信任策略。
31
31
 
32
32
  内部 `$events` logical stream 是 Connection generation source。它的 opening `ready` frame 携带用于路径显示的 Host home,并在 Host listener 已挂载、任何 controller 开始 baseline read 之前建立 generation。`ctx.remote.$on()` 把 allowlist 内的普通 event 交付给 root Client Context,并把 scoped waterfall event 交付给已解析的 Session Context;waterfall listener 可以返回结果、调用 `next()` 或拒绝。
33
33
 
@@ -37,7 +37,7 @@ Connection 拥有 request correlation、`/api` carrier、trust check、精确 Fe
37
37
 
38
38
  ### Sessions
39
39
 
40
- [`api/session-controller`](../../packages/api/session-controller/README.zh.md)公开 Session list、search、creation、selection data、prompt、queue、cancellation、pagination 及 follow/control stream 等 Host command。其 Client 侧按 `ClientSessions → SessionManager → Session` 组织:
40
+ [`api/session-controller`](../../packages/api/session-controller/README-zh.md)公开 Session list、search、creation、selection data、prompt、queue、cancellation、pagination 及 follow/control stream 等 Host command。其 Client 侧按 `ClientSessions → SessionManager → Session` 组织:
41
41
 
42
42
  - `ClientSessions` 提供 `ctx.sessions`,拥有 Session scope 与稳定的 `SessionBinding` object,并投影选中的 list state。
43
43
  - `SessionManager` 拥有 list baseline、实时 list/control update、惰性 Session instance、queue、projection store、subagent catalog,以及 pull 与后到 update 之间的冲突顺序。
@@ -47,7 +47,7 @@ Connection 拥有 request correlation、`/api` carrier、trust check、精确 Fe
47
47
 
48
48
  ### Workspaces
49
49
 
50
- [`api/workspace-controller`](../../packages/api/workspace-controller/README.zh.md)把 Workspace mutation policy 与权威 follow feed 留在 Host。`ClientWorkspaceModel` 拥有浏览器侧 row、order、archived Session id、command echo,以及 stream/unary 竞态合并。每代 stream 先给出完整 baseline,再给出 `upsert`、`remove`、`order` 和 `archived` increment;重连时以新 baseline 替换 model。`WorkspaceController` 把该 model 作为 `ctx.workspaces` 公开,而 `ui-workspace` 向 UI 提供 `useWorkspaces` 与 navigation callback。
50
+ [`api/workspace-controller`](../../packages/api/workspace-controller/README-zh.md)把 Workspace mutation policy 与权威 follow feed 留在 Host。`ClientWorkspaceModel` 拥有浏览器侧 row、order、archived Session id、command echo,以及 stream/unary 竞态合并。每代 stream 先给出完整 baseline,再给出 `upsert`、`remove`、`order` 和 `archived` increment;重连时以新 baseline 替换 model。`WorkspaceController` 把该 model 作为 `ctx.workspaces` 公开,而 `ui-workspace` 向 UI 提供 `useWorkspaces` 与 navigation callback。
51
51
 
52
52
  这种配对不会产生第二份业务真相。Host controller 决定持久状态与 mutation outcome;Client model 维护最新可用的本地 projection,在有利于渲染时保持 object identity,并明确 delayed response 与 replacement baseline 的合并规则。
53
53
 
@@ -50,7 +50,7 @@ interface Config {
50
50
 
51
51
  `WebServer`(`ctx.webServer`)在激活时立即监听;监听失败(EADDRINUSE 等)会使初始化被拒绝,启动进程会报告失败的 fiber。`register(route)` 添加一条具名路由并返回其 disposer;重复的 `(kind, path)` 抛出异常,因为路由模式是组合层约定,冲突即配置错误。Gzip 在服务器内部包装符合条件且基于 socket 的响应,因此 route handler 继续直接持有 `ServerResponse`,服务也不新增响应写出 API。已有内容编码、`Cache-Control: no-transform`、范围响应、SSE、ZIP 与打包后的 `.gz` Worker 镜像均保持 identity 响应。`collectIndexInjections()` 经一次 `webserver/index-inject` emit 收集结构化 `IndexInjection` 行,`renderIndex(html)` 把它们渲染进成功的根路径和配置 index 响应,随后再按注册顺序应用原始的 `tapIndex(transform)` 逃生口转换;[dsh-client-modules](../../packages/client/modules) 以启动 manifest(元数据清单)行回应该事件。`port` 读取监听端口,包括 `config.port` 为 0 时操作系统分配的端口。
52
52
 
53
- 处理过程中抛出异常的请求(畸形的 % 转义撞上 `decodeURIComponent`、客户端在请求体中途断开)会记录为警告并应答 400(响应头已发出时则销毁 socket),绝不导致进程退出。dispose(资源释放)把 `close()` 与 `closeAllConnections()` 配对使用,因为处理器可能像 SSE(Server-Sent Events)那样保持响应打开,而这类连接永远不会自行结束;没有强制关闭,拆卸就会挂起。该包从不打印输出:URL 行归 shell 所有。逐包运维细节(含开发模式的 bundle 监视流水线)留在 [README](../../packages/host/webserver/README.zh.md) 中。
53
+ 处理过程中抛出异常的请求(畸形的 % 转义撞上 `decodeURIComponent`、客户端在请求体中途断开)会记录为警告并应答 400(响应头已发出时则销毁 socket),绝不导致进程退出。dispose(资源释放)把 `close()` 与 `closeAllConnections()` 配对使用,因为处理器可能像 SSE(Server-Sent Events)那样保持响应打开,而这类连接永远不会自行结束;没有强制关闭,拆卸就会挂起。该包从不打印输出:URL 行归 shell 所有。逐包运维细节(含开发模式的 bundle 监视流水线)留在 [README](../../packages/host/webserver/README-zh.md) 中。
54
54
 
55
55
  <!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
56
56
 
@@ -113,7 +113,7 @@ interface WorkflowRun {
113
113
 
114
114
  ## 失败纪律:`WorkflowError.fatal`
115
115
 
116
- 脚本内部的钩子误用:错误参数、未知或延迟的 `agent()` 选项、超出[结构化输出子集](../../packages/core/tools/README.zh.md)的 schema、超出上限、seam 启动失败、取消,都会抛出 `fatal: true` 的 `WorkflowError`。`parallel()`/`pipeline()` 组合器对 fatal 错误直接重新抛出,而非将该项映射为 `null`:一个拼写错误的选项必须明确报错并终止脚本,绝不能消融为看似普通子 agent 失败的结果。逐项的 `null` 保留给子运行失败(非 `completed` 的 stop reason)和阶段内的普通脚本错误。
116
+ 脚本内部的钩子误用:错误参数、未知或延迟的 `agent()` 选项、超出[结构化输出子集](../../packages/core/tools/README-zh.md)的 schema、超出上限、seam 启动失败、取消,都会抛出 `fatal: true` 的 `WorkflowError`。`parallel()`/`pipeline()` 组合器对 fatal 错误直接重新抛出,而非将该项映射为 `null`:一个拼写错误的选项必须明确报错并终止脚本,绝不能消融为看似普通子 agent 失败的结果。逐项的 `null` 保留给子运行失败(非 `completed` 的 stop reason)和阶段内的普通脚本错误。
117
117
 
118
118
  ## 事件
119
119
 
@@ -125,7 +125,7 @@ interface WorkflowRun {
125
125
 
126
126
  `dsh-tool-workflow/invariant` 会在实时提交前和 Session 加载时校验同一协议:每个运行只有一个 start,成员序号为正且唯一,成员 end 必须配对,仍有开放成员时不能结束运行,运行结束后不能继续更新。日志尾部缺少成员 end 或 run end 是有效的中断证据,不是损坏。
127
127
 
128
- `dsh-client-ui-workflow-run` 通过 Conversation Node 引擎把四类事件折叠为一个 `workflow-run` Chat 节点,以 run-start 序号锚定在原工作流工具节点之后。阶段组只来自真正开始过的成员,并保留精确字符串,包括字段缺省与 `''` 的区别。Location 关闭时,缺失终点会显示为已中断。[界面包 README](../../packages/client/ui-workflow-run/README.zh.md)负责定义 disclosure、状态与同父本地导航行为。
128
+ `dsh-client-ui-workflow-run` 通过 Conversation Node 引擎把四类事件折叠为一个 `workflow-run` Chat 节点,以 run-start 序号锚定在原工作流工具节点之后。阶段组只来自真正开始过的成员,并保留精确字符串,包括字段缺省与 `''` 的区别。Location 关闭时,缺失终点会显示为已中断。[界面包 README](../../packages/client/ui-workflow-run/README-zh.md)负责定义 disclosure、状态与同父本地导航行为。
129
129
 
130
130
  <!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
131
131
 
@@ -51,4 +51,4 @@ e2e 断言应重新运行命令或从外部重新读取文件;对 agent 自身
51
51
 
52
52
  ## 何时需要快照测试
53
53
 
54
- 每项非平凡的模型可见、协议可见或人类可见变更,都在同一 PR 中添加或更新无密钥录制会话场景;包级、e2e、仅 mock 和 PR 理由证据不能取代组装后的 transcript。Headless、SDK、ACP 和 Web 录制分别位于 `snapshots/session/`、`snapshots/sdk/`、`snapshots/acp/` 和 `snapshots/web/`;Web 渲染可以显式借用另一个场景的规范会话。不由录制会话驱动的预期输出保留在所属应用、包或脚本的 `tests/expected/` 下,并且不使用 `*.snapshot.ts` 后缀。[`dsh-session-snapshot`](../packages/test-support/session-snapshot/README.zh.md) 拥有共享存储规则和 profile 适配器。Agent loop、会话生命周期和 `SessionEventMap` 变更应更新两个 SDK 投影:`snapshots/sdk/` 拥有 TypeScript,必需的 Python 运行时 CI 拥有 `scripts/snapshots/python-sdk-single-exe/`。新增 capability seam、生命周期或 transcript 变体应在计划阶段列出每个必需层级。
54
+ 每项非平凡的模型可见、协议可见或人类可见变更,都在同一 PR 中添加或更新无密钥录制会话场景;包级、e2e、仅 mock 和 PR 理由证据不能取代组装后的 transcript。Headless、SDK、ACP 和 Web 录制分别位于 `snapshots/session/`、`snapshots/sdk/`、`snapshots/acp/` 和 `snapshots/web/`;Web 渲染可以显式借用另一个场景的规范会话。不由录制会话驱动的预期输出保留在所属应用、包或脚本的 `tests/expected/` 下,并且不使用 `*.snapshot.ts` 后缀。[`dsh-session-snapshot`](../packages/test-support/session-snapshot/README-zh.md) 拥有共享存储规则和 profile 适配器。Agent loop、会话生命周期和 `SessionEventMap` 变更应更新两个 SDK 投影:`snapshots/sdk/` 拥有 TypeScript,必需的 Python 运行时 CI 拥有 `scripts/snapshots/python-sdk-single-exe/`。新增 capability seam、生命周期或 transcript 变体应在计划阶段列出每个必需层级。
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](index.md) | 中文
4
4
 
5
- 本教程会创建一个最小的 Harness 插件,并将其加载到 Web UI 中。请从已完成[从源码运行路径](../../../../README.zh.md#run-from-source)的仓库检出开始。
5
+ 本教程会创建一个最小的 Harness 插件,并将其加载到 Web UI 中。请从已完成[从源码运行路径](../../../../README-zh.md#run-from-source)的仓库检出开始。
6
6
 
7
7
  ## 创建本地项目
8
8
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  前几篇教程通过 `--patch` overlay 加载本地插件。本教程把它打包成可安装的**组合包**(bundle),用 `dsh plugin add` 安装进一个 **profile**,并解释决定组合后配置的层顺序。本文假设 `dsh` CLI 已安装。请先完成[插件配置](./config.zh.md)。
6
6
 
7
- 如果改用全新的源码 checkout,请先按照[从源码运行章节](../../../../README.zh.md#run-from-source)完成准备,将本教程的 `hello-plugin` 目录放在仓库根目录,并从该目录把下文的 `dsh ...` 命令改为 `pnpm dsh ...`。构建与启动器行为见[源码执行](../../../../apps/cli/reference/README.zh.md#source-execution)。
7
+ 如果改用全新的源码 checkout,请先按照[从源码运行章节](../../../../README-zh.md#run-from-source)完成准备,将本教程的 `hello-plugin` 目录放在仓库根目录,并从该目录把下文的 `dsh ...` 命令改为 `pnpm dsh ...`。构建与启动器行为见[源码执行](../../../../apps/cli/reference/README-zh.md#source-execution)。
8
8
 
9
9
  ## 两个概念,两种 manifest
10
10
 
@@ -136,7 +136,7 @@ dsh --profile demo
136
136
  name: 'dsh-hello-plugin/startup'
137
137
  ```
138
138
 
139
- 该插件导出 `inject = ['cmdlineArgs']`,使用自己的 commander program 调用 [`@deepseek-ai/dsh-cmdline`](../../../../packages/boot/cmdline/README.zh.md) 中的 `parseCmdline`,再在 program 自己的 action 中把应用自有服务提供出去。启动器把自身 flag 之后的同一份不可变参数交给每个插件,因此添加应用专属 flag 无需修改启动器,多个插件也可以解析该快照。Loader 行不需要启动器标记或特殊类型。
139
+ 该插件导出 `inject = ['cmdlineArgs']`,使用自己的 commander program 调用 [`@deepseek-ai/dsh-cmdline`](../../../../packages/boot/cmdline/README-zh.md) 中的 `parseCmdline`,再在 program 自己的 action 中把应用自有服务提供出去。启动器把自身 flag 之后的同一份不可变参数交给每个插件,因此添加应用专属 flag 无需修改启动器,多个插件也可以解析该快照。Loader 行不需要启动器标记或特殊类型。
140
140
 
141
141
  受这些参数配置的行会注入提供方服务,并在自己的 `!!js` 选项中读取它,同时把部署取值写在旁边作为回退:
142
142
 
@@ -180,4 +180,4 @@ dsh plugin --profile demo add github:you/hello-plugin
180
180
  ## 下一步
181
181
 
182
182
  - [插件与生命周期](../framework/index.zh.md) — 插件的完整生命周期
183
- - [CLI(命令行界面)行为参考](../../../../apps/cli/reference/README.zh.md) — 确切的层优先级、flag 与 profile 机制
183
+ - [CLI(命令行界面)行为参考](../../../../apps/cli/reference/README-zh.md) — 确切的层优先级、flag 与 profile 机制
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](dynamic-cordis.md) | 中文
4
4
 
5
- 本实战指南启用 [`@deepseek-ai/dsh-tool-cordis`](../../../../packages/extensions/tool-cordis/README.zh.md)。智能体可以检查当前 Cordis 进程,并在内存中挂载或卸载模型编写的插件。临时插件会在卸载或进程退出时消失,并可能影响同一进程中的其他会话。
5
+ 本实战指南启用 [`@deepseek-ai/dsh-tool-cordis`](../../../../packages/extensions/tool-cordis/README-zh.md)。智能体可以检查当前 Cordis 进程,并在内存中挂载或卸载模型编写的插件。临时插件会在卸载或进程退出时消失,并可能影响同一进程中的其他会话。
6
6
 
7
7
  ## 运行
8
8
 
@@ -12,4 +12,4 @@
12
12
  pnpm dsh web --patch apps/cli/config/examples/cordis/cordis.yml
13
13
  ```
14
14
 
15
- 该命令需要模型凭据。[Cordis 工具参考](../../../../packages/extensions/tool-cordis/README.zh.md)定义了四类约定:工具参数、存续时间、清理行为和安全性。
15
+ 该命令需要模型凭据。[Cordis 工具参考](../../../../packages/extensions/tool-cordis/README-zh.md)定义了四类约定:工具参数、存续时间、清理行为和安全性。
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](index.md) | 中文
4
4
 
5
- 请先按照[根目录 README](../../../README.zh.md#run) 中的说明启动 Web UI;命令会打印其访问地址。本指南从服务器已经运行的状态开始。`dsh` 进程会把启动时所在的目录作为默认文件系统位置;全新的 Web UI 则不会选中任何工作区,你需要添加一个工作区。
5
+ 请先按照[根目录 README](../../../README-zh.md#run) 中的说明启动 Web UI;命令会打印其访问地址。本指南从服务器已经运行的状态开始。`dsh` 进程会把启动时所在的目录作为默认文件系统位置;全新的 Web UI 则不会选中任何工作区,你需要添加一个工作区。
6
6
 
7
7
  ## 配置模型
8
8
 
@@ -26,5 +26,5 @@ Agent(智能体)可以读取和编辑工作区文件、运行命令、委派
26
26
 
27
27
  - [配置模型](./providers.zh.md)
28
28
  - [使用 Python SDK](./python-sdk.zh.md)
29
- - [使用其他 CLI 模式](../../../apps/cli/README.zh.md)
29
+ - [使用其他 CLI 模式](../../../apps/cli/README-zh.md)
30
30
  - [开发插件](../develop/basic/index.zh.md)
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](mcp-memory.md) | 中文
4
4
 
5
- 这三份**默认关闭的参考配置**通过 [`@deepseek-ai/dsh-mcp-client`](../../../packages/mcp/mcp-client/README.zh.md) 将一个记忆系统连接到 DSH。请选择其中一份,或复制相同的通用 MCP 配置项来连接其他服务器。
5
+ 这三份**默认关闭的参考配置**通过 [`@deepseek-ai/dsh-mcp-client`](../../../packages/mcp/mcp-client/README-zh.md) 将一个记忆系统连接到 DSH。请选择其中一份,或复制相同的通用 MCP 配置项来连接其他服务器。
6
6
 
7
7
  这些第三方配置仅作为互操作参考;收录不代表 DeepSeek 的认可、推荐、合作关系或持续支持承诺。
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](providers.md) | 中文
4
4
 
5
- 本指南假定你已按照[根 README](../../../README.zh.md#run)启动 Web UI。模型变更会在下一次请求时生效,不需要重启服务器。
5
+ 本指南假定你已按照[根 README](../../../README-zh.md#run)启动 Web UI。模型变更会在下一次请求时生效,不需要重启服务器。
6
6
 
7
7
  ## 配置 DeepSeek
8
8
 
@@ -40,7 +40,7 @@ Provider ID 是永久的,因为请求、已保存会话、模型默认值和
40
40
 
41
41
  ## 进阶配置
42
42
 
43
- 自动生成的[插件配置目录](../../config-catalog.zh.md)列出每个插件的所有受支持字段与默认值;[`dsh-llm-pi-ai`](../../config-catalog.zh.md#deepseek-aidsh-llm-pi-ai) 就是本页所配置的那个提供方段落。[`dsh-llm-pi-ai`](../../../packages/llm/llm-pi-ai/README.zh.md) 和 [`dsh-llm-deepseek`](../../../packages/llm/llm-deepseek/README.zh.md) 参考文档负责直接 `settings.yaml` 配置、目录解析、推理控制、凭据与适配器错误。
43
+ 自动生成的[插件配置目录](../../config-catalog.zh.md)列出每个插件的所有受支持字段与默认值;[`dsh-llm-pi-ai`](../../config-catalog.zh.md#deepseek-aidsh-llm-pi-ai) 就是本页所配置的那个提供方段落。[`dsh-llm-pi-ai`](../../../packages/llm/llm-pi-ai/README-zh.md) 和 [`dsh-llm-deepseek`](../../../packages/llm/llm-deepseek/README-zh.md) 参考文档负责直接 `settings.yaml` 配置、目录解析、推理控制、凭据与适配器错误。
44
44
 
45
45
  ::: tip 表单刻意保持精简
46
46
  模型页只开放让一条路由得以存在的字段:API 密钥、显示名称、API 地址、API 协议,以及每个模型的 ID、显示名称、上下文窗口和最大输出 token 数。其余所有字段——推理等级、图片输入、请求兼容性开关、请求头、超时、重试策略——都在 `$DSH_HOME/settings.yaml` 中设置,也就是模型页写入的同一份文档。可以直接编辑它;浏览器与服务器在同一台机器时,也可以点击设置页顶部的**打开配置文件**打开它。适配器会在下一次请求时重新读取,无需重启任何东西。下面各小节介绍多数网关会用到的字段。
@@ -147,4 +147,4 @@ dsh plugin --profile sdk-minimal add file:C:/work/my-plugin-bundle
147
147
 
148
148
  需要隔离 profile、插件、凭据、设置与会话时,应使用新的 home。独立工作应使用新的 session id;只有继续同一段持久对话和会话资源时,才同时复用 harness、home 与 id。
149
149
 
150
- [组合包参考](../../../packages/bundle/sdk-minimal/README.zh.md)定义确切配置树,[示例参考](../../../python/sdk/examples/README.zh.md)定义可运行程序。[Python SDK 参考](../../../python/sdk/README.zh.md)介绍生命周期、结果、通知与底层行为;[dsh CLI 参考](../../../apps/cli/reference/README.zh.md)介绍 profile 分层。
150
+ [组合包参考](../../../packages/bundle/sdk-minimal/README-zh.md)定义确切配置树,[示例参考](../../../python/sdk/examples/README-zh.md)定义可运行程序。[Python SDK 参考](../../../python/sdk/README-zh.md)介绍生命周期、结果、通知与底层行为;[dsh CLI 参考](../../../apps/cli/reference/README-zh.md)介绍 profile 分层。
@@ -6,7 +6,7 @@
6
6
 
7
7
  ## 职责归属
8
8
 
9
- [`ui-theme`](../packages/client/ui-theme/README.zh.md) 负责 `--dsw-*` 静态色阶、语义别名、排版、动效、渐变、阴影、滚动条样式以及明暗主题偏好。[`ui-layout`](../packages/client/ui-layout/README.zh.md) 将解析后的主题快照应用到文档。功能包使用语义别名,不得另行定义全局主题。
9
+ [`ui-theme`](../packages/client/ui-theme/README-zh.md) 负责 `--dsw-*` 静态色阶、语义别名、排版、动效、渐变、阴影、滚动条样式以及明暗主题偏好。[`ui-layout`](../packages/client/ui-layout/README-zh.md) 将解析后的主题快照应用到文档。功能包使用语义别名,不得另行定义全局主题。
10
10
 
11
11
  全局样式表归 `ui-theme/src/styles/` 所有。组件样式以 CSS Modules 形式放在组件旁。当某个值属于该组件的布局或呈现约定时,组件可以定义局部自定义属性;共享颜色、排版、层级和动效属于主题包。
12
12
 
@@ -5,7 +5,7 @@ kind: "package-group"
5
5
 
6
6
  # Packages
7
7
 
8
- English | [中文](README.zh.md)
8
+ English | [中文](README-zh.md)
9
9
 
10
10
  ## Summary
11
11
 
@@ -34,7 +34,7 @@
34
34
  ## C. 本地 checkout 文档副本(references/official-docs/)
35
35
 
36
36
  - `docs/**`(215 个 md,含全部 `.zh.md` 双语对)— 教程/架构/子系统/API/cookbook 全量
37
- - 仓库根文件(**2026-08-14 晚新增**):`AGENTS.md`、`CLAUDE.md`(上游为 symlink→AGENTS.md,副本存其目标文本)、`BENCHMARK.md`、`CONTRIBUTING.md`/`.zh.md`/`.i18n.yaml`、`README.zh.md`/`.i18n.yaml`、`THIRD_PARTY_NOTICES.md`、`LICENSE`
37
+ - 仓库根文件(**2026-08-14 晚新增**):`AGENTS.md`、`CLAUDE.md`(上游为 symlink→AGENTS.md,副本存其目标文本)、`BENCHMARK.md`、`CONTRIBUTING.md`/`.zh.md`/`.i18n.yaml`、`README-zh.md`/`.i18n.yaml`、`THIRD_PARTY_NOTICES.md`、`LICENSE`
38
38
  - `packages/AGENTS.md` · `packages/README.md` · `vendor/README.md`
39
39
  - `website-docs.ts`(站点投影清单)
40
40
  - 上游英文 `README.md` 不进入本目录(与 KB 索引同名),线上快照在 `downloads/github/harness/README.md`
@@ -130,7 +130,7 @@
130
130
 
131
131
  本项目同时改造为可安装的 DSH bundle(`package.json#dsh.bundle` + 根 `cordis.patch.yml` + `index.js` 注册 `dsh-plugin-guide` 技能),并按各收录入口的专属规则投递:
132
132
 
133
- - 榜单 PR:awesome-dsh-plugin [PR #465](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/pull/465)(README.md/README.zh.md Skills 各 +1 行;#461 因 fork 分支被共享 fork 覆盖而自动关闭,已由 #465 取代)、AdamPlatin123/awesome-dsh-plugins [PR #151](https://github.com/AdamPlatin123/awesome-dsh-plugins/pull/151)(PLUGINS.md「🎓 技能」表 +1 行,运行级如实填「待测」)、0xsline/awesome-deepseek-harness [PR #183](https://github.com/0xsline/awesome-deepseek-harness/pull/183)(README.md/README.zh-CN.md Infrastructure & Development 各 +1)、bruc3van/awesome-dsh-plugin [PR #42](https://github.com/bruc3van/awesome-dsh-plugin/pull/42)(作者自荐区中英各 +1 行,`validate-curated.mjs` 本地通过)。
133
+ - 榜单 PR:awesome-dsh-plugin [PR #465](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/pull/465)(README.md/README-zh.md Skills 各 +1 行;#461 因 fork 分支被共享 fork 覆盖而自动关闭,已由 #465 取代)、AdamPlatin123/awesome-dsh-plugins [PR #151](https://github.com/AdamPlatin123/awesome-dsh-plugins/pull/151)(PLUGINS.md「🎓 技能」表 +1 行,运行级如实填「待测」)、0xsline/awesome-deepseek-harness [PR #183](https://github.com/0xsline/awesome-deepseek-harness/pull/183)(README.md/README.zh-CN.md Infrastructure & Development 各 +1)、bruc3van/awesome-dsh-plugin [PR #42](https://github.com/bruc3van/awesome-dsh-plugin/pull/42)(作者自荐区中英各 +1 行,`validate-curated.mjs` 本地通过)。
134
134
  - DSH Hub Workshop(omdsh-dev):`package.json#dshWorkshop`(`omdsh-workshop-package/v1`)已提交(固定 commit `9447366f63a02229031af1e0bed2afedeff44860`);v2 投稿经 `scripts/intake.mjs validate` 通过("submission accepted for pending review");申请 [Issue #20](https://github.com/omdsh-dev/dsh-hub-workshop/issues/20),pending-review 审核 PR 由 hub 自动化生成(异步)。
135
135
  - 官方展示:deepseek-harness Discussions [Show and tell #1824](https://github.com/deepseek-ai/deepseek-harness/discussions/1824)。
136
136
  - 自动聚合(预期延迟,复核命令):Oh-My-DSH `PLUGINS.md`(每 4 小时)、wangshunnn/oh-my-dsh `registry/plugins.json`(根 package.json 已声明 `dsh.bundle.patch`)、YELEBAI/dsh-plugin-marketplace `registry/plugins.json`(每 2 小时扫描 + manifest 验证)、AdamPlatin123 雷达(≤8 小时)、bruc3van 每日快照、dshfind 与 Noob-stupid/yyyyukari(topic 实时聚合,无需动作)。复核:`curl -s https://raw.githubusercontent.com/<repo>/main/<文件> | grep dsh-plugin-guide`(本机直连 raw 失败时经 api.github.com/contents 取)。
@@ -623,7 +623,7 @@
623
623
  ### 5.3 GitHub 仓库文档源文件(web_search 命中,均在 `github.com/deepseek-ai/deepseek-harness`)
624
624
 
625
625
  - `https://github.com/deepseek-ai/deepseek-harness`(主仓库)
626
- - `https://github.com/deepseek-ai/deepseek-harness/blob/master/README.md` / `README.zh.md`
626
+ - `https://github.com/deepseek-ai/deepseek-harness/blob/master/README.md` / `README-zh.md`
627
627
  - `https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/architecture.md` / `.zh.md`
628
628
  - `.../docs/development.md` / `.zh.md`
629
629
  - `.../docs/cordis-primer.md` / `.zh.md`
@@ -634,7 +634,7 @@
634
634
  - `.../docs/user/guide/index.md`
635
635
  - `.../docs/user/develop/basic/index.md`、`config.md`、`publish.md`
636
636
  - `.../packages/mcp/mcp-client/README.md`、`.../packages/llm/llm-deepseek/README.md`、`.../packages/llm/llm-pi-ai/README.md`、`.../packages/bundle/base/README.md`、`.../packages/README.md`、`.../packages/skill/SKILL.md`、`.../packages/hooks/hooks-codex/README.md`
637
- - `.../apps/cli/reference/README.zh.md`
637
+ - `.../apps/cli/reference/README-zh.md`
638
638
 
639
639
  ### 5.4 第三方报道 / 生态(web_search 命中,非官方,内容 [unverified])
640
640
 
@@ -10,10 +10,10 @@ import { fileURLToPath } from 'node:url'
10
10
  const root = path.dirname(path.dirname(fileURLToPath(import.meta.url)))
11
11
  const LANGUAGES = [
12
12
  ['README.md', 'en'],
13
- ['README.zh.md', 'zh'],
14
- ['README.es.md', 'es'],
15
- ['README.pt.md', 'pt'],
16
- ['README.hi.md', 'hi'],
13
+ ['README-zh.md', 'zh'],
14
+ ['README-es.md', 'es'],
15
+ ['README-pt.md', 'pt'],
16
+ ['README-hi.md', 'hi'],
17
17
  ]
18
18
 
19
19
  const headingsOf = (text) => text.split(/\r?\n/u)
@@ -25,10 +25,10 @@ $pruned = 0
25
25
  $mdCount = 0
26
26
  $zhCount = 0
27
27
 
28
- # Sync scope: docs/, root AGENTS.md/BENCHMARK.md/CLAUDE.md/CONTRIBUTING.*/README.zh.md/README.i18n.yaml/THIRD_PARTY_NOTICES.md/LICENSE, packages/AGENTS.md, packages/README.md, vendor/README.md, website/docs.ts
28
+ # Sync scope: docs/, root AGENTS.md/BENCHMARK.md/CLAUDE.md/CONTRIBUTING.*/README-zh.md/README.i18n.yaml/THIRD_PARTY_NOTICES.md/LICENSE, packages/AGENTS.md, packages/README.md, vendor/README.md, website/docs.ts
29
29
  # Upstream root README.md is out of scope: official-docs/README.md is the KB-owned index (the upstream English README snapshot lives in downloads/github/harness/README.md).
30
30
  # Every pathspec uses the :(top) anchor so git's basename-wide matching cannot sweep in same-named symlinks (e.g. the various CLAUDE.md files).
31
- $paths = @(':(top)docs', ':(top)AGENTS.md', ':(top)BENCHMARK.md', ':(top)CONTRIBUTING.md', ':(top)CONTRIBUTING.zh.md', ':(top)CONTRIBUTING.i18n.yaml', ':(top)README.zh.md', ':(top)README.i18n.yaml', ':(top)THIRD_PARTY_NOTICES.md', ':(top)LICENSE', ':(top)packages/AGENTS.md', ':(top)packages/README.md', ':(top)vendor/README.md', ':(top)website/docs.ts')
31
+ $paths = @(':(top)docs', ':(top)AGENTS.md', ':(top)BENCHMARK.md', ':(top)CONTRIBUTING.md', ':(top)CONTRIBUTING.zh.md', ':(top)CONTRIBUTING.i18n.yaml', ':(top)README-zh.md', ':(top)README.i18n.yaml', ':(top)THIRD_PARTY_NOTICES.md', ':(top)LICENSE', ':(top)packages/AGENTS.md', ':(top)packages/README.md', ':(top)vendor/README.md', ':(top)website/docs.ts')
32
32
 
33
33
  if ($gitOk) {
34
34
  # Prefer origin/master, fall back to HEAD - never the working tree (may contain untracked/unpushed content).
@@ -68,7 +68,7 @@ if ($gitOk) {
68
68
 
69
69
  # Keep only in-scope entries at the destination root (drops stale extraction residue and
70
70
  # upstream-deleted root files so the copy stays verbatim).
71
- $rootKeep = @('docs','examples','packages','vendor','AGENTS.md','BENCHMARK.md','CLAUDE.md','CONTRIBUTING.md','CONTRIBUTING.zh.md','CONTRIBUTING.i18n.yaml','LICENSE','README.zh.md','README.i18n.yaml','THIRD_PARTY_NOTICES.md','SNAPSHOT.md','README.md','website-docs.ts')
71
+ $rootKeep = @('docs','examples','packages','vendor','AGENTS.md','BENCHMARK.md','CLAUDE.md','CONTRIBUTING.md','CONTRIBUTING.zh.md','CONTRIBUTING.i18n.yaml','LICENSE','README-zh.md','README.i18n.yaml','THIRD_PARTY_NOTICES.md','SNAPSHOT.md','README.md','website-docs.ts')
72
72
  Get-ChildItem -Force $dest | Where-Object { $rootKeep -notcontains $_.Name } | ForEach-Object {
73
73
  Remove-Item $_.FullName -Recurse -Force; $pruned++
74
74
  }
@@ -127,7 +127,7 @@ $L = @(
127
127
  "| Source ref | ``$ref`` |",
128
128
  "| Source commit | ``$sha`` |",
129
129
  "| Synced at (UTC) | $utc |",
130
- '| Scope | tracked files at the ref: `docs/`, root `AGENTS.md`, `BENCHMARK.md`, `CLAUDE.md` (symlink target text), `CONTRIBUTING.md`/`.zh.md`/`.i18n.yaml`, `README.zh.md`/`.i18n.yaml` (the upstream English `README.md` is not in this dir; its snapshot lives in `downloads/github/harness/README.md`), `THIRD_PARTY_NOTICES.md`, `LICENSE`, `packages/AGENTS.md`, `packages/README.md`, `vendor/README.md`, `website/docs.ts` |',
130
+ '| Scope | tracked files at the ref: `docs/`, root `AGENTS.md`, `BENCHMARK.md`, `CLAUDE.md` (symlink target text), `CONTRIBUTING.md`/`.zh.md`/`.i18n.yaml`, `README-zh.md`/`.i18n.yaml` (the upstream English `README.md` is not in this dir; its snapshot lives in `downloads/github/harness/README.md`), `THIRD_PARTY_NOTICES.md`, `LICENSE`, `packages/AGENTS.md`, `packages/README.md`, `vendor/README.md`, `website/docs.ts` |',
131
131
  "| File counts | docs/: $mdCount md files ($zhCount .zh.md pairs) |",
132
132
  "| Pruned this run | $pruned out-of-scope/upstream-deleted entries |",
133
133
  '',
@@ -55,7 +55,7 @@ try {
55
55
  const result = runNode(['dist/dsh-plugin-dev.js', 'new', 'demo-plugin', '--lang', lang, '--dir', target])
56
56
  const hasEntry = lang === 'ts' ? existsSync(join(target, 'src', 'index.ts')) : existsSync(join(target, 'index.js'))
57
57
  const hasPatch = existsSync(join(target, 'cordis.patch.yml'))
58
- const readmeCount = readdirSync(target).filter((f) => /^README(\.\w{2})?\.md$/.test(f)).length
58
+ const readmeCount = readdirSync(target).filter((f) => /^README(-\w{2})?\.md$/.test(f)).length
59
59
  check(result.status === 0 && hasEntry && hasPatch, `${lang} scaffold produces entry + cordis.patch.yml (exit ${result.status})`)
60
60
  check(readmeCount === 5, `${lang} scaffold produces 5 README languages (${readmeCount})`)
61
61
  }
@@ -10,7 +10,7 @@ $info = New-Object System.Collections.Generic.List[string]
10
10
 
11
11
  # ---- 1) 关键路径 ----
12
12
  $critical = @(
13
- 'SKILL.md','README.md','README.zh.md','README.es.md','README.pt.md','README.hi.md','LICENSE','NOTICE.md','.gitignore',
13
+ 'SKILL.md','README.md','README-zh.md','README-es.md','README-pt.md','README-hi.md','LICENSE','NOTICE.md','.gitignore',
14
14
  'CONTRIBUTING.md','SECURITY.md','.github/ISSUE_TEMPLATE/bug_report.yml','.github/ISSUE_TEMPLATE/feature_request.yml','.github/PULL_REQUEST_TEMPLATE.md',
15
15
  'guide/plugin-dev-guide.md','guide/quick-reference.md','guide/links.md','guide/quick-reference.zh-CN.md','guide/quick-reference.es.md','guide/quick-reference.pt.md','guide/quick-reference.hi.md',
16
16
  'references/sources.md','references/harness-repo.md','references/website-pages.md',
@@ -125,7 +125,7 @@ if ($Checkout -and (Test-Path $Checkout)) {
125
125
  'CONTRIBUTING.md' = 'CONTRIBUTING.md';
126
126
  'CONTRIBUTING.zh.md' = 'CONTRIBUTING.zh.md';
127
127
  'CONTRIBUTING.i18n.yaml' = 'CONTRIBUTING.i18n.yaml';
128
- 'README.zh.md' = 'README.zh.md';
128
+ 'README-zh.md' = 'README-zh.md';
129
129
  'README.i18n.yaml' = 'README.i18n.yaml';
130
130
  'THIRD_PARTY_NOTICES.md' = 'THIRD_PARTY_NOTICES.md';
131
131
  'LICENSE' = 'LICENSE';
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes