跳至内容

源文件索引:packages/interaction

本页由 study-tools/generate-source-index.mjs 根据官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec 生成,共 26 个代码或界面源文件。每个标题对应一个真实路径;用途和拆分原因是面向初学者的结构化解释,自动索引不等于人工精读。

图例

本页所有条目共用以下说明:

  • 自动索引只提供定位线索,复杂行为需要回到源码和测试确认。
  • 条目中的行数、声明、结构线索和静态 import 数字是文件级定位证据,用来约束“为什么这样设计”的解释范围;它们用于定位,不替代人工源码阅读。
  • 源码链接固定到官方提交;如果当前条目与运行版本不同,应先重新生成索引再下结论。

packages/interaction/commands/src/brand.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:品牌类型
  • 这个文件有什么用:它为人机交互、品牌类型定义带语义的品牌类型,使编译器能阻止不同用途的标识符互相替换。
  • 为什么这样设计:在编译期区分语义不同的标识符,能把一类容易被普通字符串掩盖的调用错误提前暴露,而不增加运行时序列化成本。
  • 文件级设计证据:源码顶部注释把它定位为“dsh-commands' owned branded id: command lifecycle pairing across the session log, the wire admission response, and client-side flow pairing. The Branded<B> primitive lives in @deepseek-ai/dsh-brand; this module is a pure type/constructor outlet (no cordis i...”;固定提交中扫描到的声明包括 CommandId;本地静态 import 图显示它直接依赖 1 个源文件,并被 14 个源文件直接引用。
  • 直接协作者:packages/interaction/commands/README.mdpackages/util/brand/src/index.tspackages/client/connection/src/client/fixture.tspackages/client/runtime/src/client/sessions/conversation.tspackages/client/ui-goal/src/client/goal-command-input.ts
  • 对应测试:packages/compaction/compaction-basic/tests/manual-compaction.spec.tspackages/compaction/compaction/tests/invariant.spec.tspackages/host/apiproxy/tests/api-proxy-blank.spec.tspackages/plan/plan-mode/tests/projection.spec.ts
  • 测试关联依据:固定提交源码中的本地静态 import 直接引用;测试用例直接导入了这个源文件。
  • 阅读顺序:先读 packages/interaction/commands/README.md、入口和消费者,再读当前契约,沿着 packages/client/connection/src/client/fixture.tspackages/client/runtime/src/client/sessions/conversation.tspackages/client/ui-goal/src/client/goal-command-input.ts 看它怎样约束运行时,最后对照 packages/compaction/compaction-basic/tests/manual-compaction.spec.tspackages/compaction/compaction/tests/invariant.spec.tspackages/host/apiproxy/tests/api-proxy-blank.spec.ts
  • 代码证据:固定提交归档实际读取结果:约 29 行;扫描到的声明包括 CommandId;源码顶部原注释(英文,仅作回查线索):dsh-commands' owned branded id: command lifecycle pairing across the session log, the wire admission response, and client-side flow pairing. The Branded<B> primitive lives in @deepseek-ai/dsh-brand; this module is a pure type/constructor outlet (no cordis i...。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/commands/src/index.ts

packages/interaction/commands/src/invariant.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:运行时不变量
  • 这个文件有什么用:它检查人机交互必须始终成立的条件,在错误刚出现时报告,而不是等到更深层才出现难以解释的结果。
  • 为什么这样设计:把不变量集中在一个位置,调用者和测试就能用同一条规则检查状态;错误在边界处报告,比在后续 UI 或网络请求中才暴露更容易修复。
  • 文件级设计证据:源码顶部注释把它定位为“Package-owned invariant companion for @deepseek-ai/dsh-commands: command lifecycle events pair by commandId within one session log. @module @deepseek-ai/dsh-commands/invariant”;固定提交中扫描到的声明包括 nameinjectapply;本地静态 import 图显示它直接依赖 3 个源文件,并被 1 个源文件直接引用。
  • 直接协作者:packages/interaction/commands/README.mdpackages/core/session/src/index.tspackages/runtime-diagnostics/invariants/src/index.tsvendor/cordis/src/index.tspackages/interaction/commands/tests/invariant.spec.ts
  • 对应测试:packages/interaction/commands/tests/invariant.spec.ts
  • 测试关联依据:固定提交源码中的本地静态 import 直接引用;测试用例直接导入了这个源文件。
  • 阅读顺序:先读相关类型和事件,再读当前状态或存储实现,沿着 packages/core/session/src/index.tspackages/runtime-diagnostics/invariants/src/index.tsvendor/cordis/src/index.tspackages/interaction/commands/tests/invariant.spec.ts 理解状态变化,最后对照 packages/interaction/commands/tests/invariant.spec.ts
  • 代码证据:固定提交归档实际读取结果:约 65 行;扫描到的声明包括 nameinjectapply;源码顶部原注释(英文,仅作回查线索):Package-owned invariant companion for @deepseek-ai/dsh-commands: command lifecycle events pair by commandId within one session log. @module @deepseek-ai/dsh-commands/invariant。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/commands/src/types.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:类型契约
  • 这个文件有什么用:它描述人机交互中流转的数据长什么样、哪些字段必填以及各部分怎样关联,让不同模块先共享同一份约定。
  • 为什么这样设计:先把形状和规则集中声明,执行代码只负责使用已经检查过的数据;这样错误更早暴露,读代码时也有一张共同的地图。
  • 文件级设计证据:源码顶部注释把它定位为“Durable command event vocabulary and the registry's Cordis event declaration, shared with type-only consumers. Client-safe: nothing here reaches a Host-only symbol, so a Client compilation face reads the same commands/change signature the Host emits. @modul...”;固定提交中扫描到的声明包括 CommandInputDescriptorCommandResultCommandExecutionCommandDescriptorCommandSourceMap;本地静态 import 图显示它直接依赖 1 个源文件,并被 11 个源文件直接引用。
  • 直接协作者:packages/interaction/commands/README.mdpackages/interaction/commands/src/brand.tsapps/web/tests/goal-command-presentation.e2e.tspackages/api/remotes/src/client/index.tspackages/api/remotes/src/index.ts
  • 对应测试:apps/web/tests/goal-command-presentation.e2e.tspackages/client/runtime/tests/session.client.spec.tspackages/client/ui-commands/tests/service.client.spec.ts
  • 测试关联依据:固定提交源码中的本地静态 import 直接引用;测试用例直接导入了这个源文件。
  • 测试支持:apps/web/tests/scaffold.tsapps/web/tests/support.tspackages/client/runtime/tests/event-script.client.tspackages/client/runtime/tests/fake-api.client.ts
  • 阅读顺序:先读 packages/interaction/commands/README.md、入口和消费者,再读当前契约,沿着 apps/web/tests/goal-command-presentation.e2e.tspackages/api/remotes/src/client/index.tspackages/api/remotes/src/index.ts 看它怎样约束运行时,最后对照 apps/web/tests/goal-command-presentation.e2e.tspackages/client/runtime/tests/session.client.spec.tspackages/client/ui-commands/tests/service.client.spec.ts
  • 代码证据:固定提交归档实际读取结果:约 110 行;扫描到的声明包括 CommandInputDescriptorCommandResultCommandExecutionCommandDescriptorCommandSourceMapCommandSource;源码顶部原注释(英文,仅作回查线索):Durable command event vocabulary and the registry's Cordis event declaration, shared with type-only consumers. Client-safe: nothing here reaches a Host-only symbol, so a Client compilation face reads the same commands/change signature the Host emits. @modul...。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/commands/tests/commands.spec.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:测试用例
  • 这个文件有什么用:它用自动化测试检查人机交互的具体场景,包括“parseCommand()”、“CommandRuntime”、“lists immutable global descriptors with input metadata”、“sorts distinct effective command names”;这些断言把“应该发生什么”变成可以重复运行的证据。
  • 为什么这样设计:把测试主题“parseCommand()”写成独立测试用例,读者可以从输入、触发动作和断言反推实现的不变量;不同回归问题也不会互相遮蔽。
  • 文件级设计证据:固定提交中扫描到的声明包括 commandmountmintAgentScopelifecycleOfstoreOf;本地静态 import 图显示它直接依赖 6 个源文件,并被 0 个源文件直接引用。
  • 直接协作者:packages/interaction/commands/README.mdpackages/attachment/attachment/src/index.tspackages/core/agent/src/index.tspackages/core/scope/src/index.ts
  • 对应测试:本文件本身就是测试用例。
  • 测试关联依据:本文件本身就是测试用例,不把同目录的其他测试冒充成它的“对应测试”。
  • 阅读顺序:先看它直接导入的被测实现 packages/attachment/attachment/src/index.tspackages/core/agent/src/index.tspackages/core/scope/src/index.ts,再读本文件的测试主题、输入和断言;最后对照测试支持和失败输出。
  • 代码证据:固定提交归档实际读取结果:约 627 行;扫描到的声明包括 commandmountmintAgentScopelifecycleOfstoreOfaccepting;扫描到的测试主题包括 “parseCommand()”、“CommandRuntime”、“lists immutable global descriptors with input metadata”、“sorts distinct effective command names”、“uses agent-scoped shadows and removes them with their scope”、“removes a registration when its contributing plugin fiber is disposed”。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/commands/tests/invariant.spec.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:测试用例
  • 这个文件有什么用:它用自动化测试检查人机交互的具体场景,包括“command lifecycle invariants”、“accepts a success outcome linked to an earlier non-command domain event”、“rejects an error settlement carrying a success-only source reference”、“attributes an invalid durable prefix during late companion loading”;这些断言把“应该发生什么”变成可以重复运行的证据。
  • 为什么这样设计:把测试主题“command lifecycle invariants”写成独立测试用例,读者可以从输入、触发动作和断言反推实现的不变量;不同回归问题也不会互相遮蔽。
  • 文件级设计证据:固定提交中扫描到的声明包括 mountappendRun;本地静态 import 图显示它直接依赖 5 个源文件,并被 0 个源文件直接引用。
  • 直接协作者:packages/interaction/commands/README.mdpackages/core/session/src/index.tspackages/interaction/commands/src/index.tspackages/interaction/commands/src/invariant.ts
  • 对应测试:本文件本身就是测试用例。
  • 测试关联依据:本文件本身就是测试用例,不把同目录的其他测试冒充成它的“对应测试”。
  • 阅读顺序:先看它直接导入的被测实现 packages/core/session/src/index.tspackages/interaction/commands/src/index.tspackages/interaction/commands/src/invariant.ts,再读本文件的测试主题、输入和断言;最后对照测试支持和失败输出。
  • 代码证据:固定提交归档实际读取结果:约 89 行;扫描到的声明包括 mountappendRun;扫描到的测试主题包括 “command lifecycle invariants”、“accepts a success outcome linked to an earlier non-command domain event”、“rejects an error settlement carrying a success-only source reference”、“attributes an invalid durable prefix during late companion loading”。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/permission-presets/src/client.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:外部能力适配层
  • 这个文件有什么用:它把外部协议转换成人机交互、浏览器端能理解的内部协议。转换集中在边界,核心逻辑就不必到处处理供应商差异。
  • 为什么这样设计:把“接口是什么”和“这一版怎样实现”分开,替换实现或写测试替身时不必改动使用者。
  • 文件级设计证据:源码顶部注释把它定位为“Client-namespace projection of the permission domain: a pure re-export of the package's types outlet. Client code imports ONLY the client namespace (repo discipline), so ./client projects the same single-source content ./types serves to host consumers — zer...”;本地静态 import 图显示它直接依赖 1 个源文件,并被 3 个源文件直接引用。
  • 直接协作者:packages/interaction/permission-presets/README.mdpackages/interaction/permission-presets/src/types.tspackages/client/ui-conversation/src/client/skeleton/PermissionSelect.tsxpackages/client/ui-permission-presets/src/client/index.tspackages/client/ui-permission-presets/tests/browser-plugin.client.spec.ts
  • 对应测试:packages/client/ui-permission-presets/tests/browser-plugin.client.spec.ts
  • 测试关联依据:固定提交源码中的本地静态 import 直接引用;测试用例直接导入了这个源文件。
  • 阅读顺序:先读 packages/interaction/permission-presets/README.md 和入口,再读当前实现,沿着 packages/interaction/permission-presets/src/types.tspackages/client/ui-conversation/src/client/skeleton/PermissionSelect.tsxpackages/client/ui-permission-presets/src/client/index.tspackages/client/ui-permission-presets/tests/browser-plugin.client.spec.ts 确认输入输出,最后对照 packages/client/ui-permission-presets/tests/browser-plugin.client.spec.ts
  • 代码证据:固定提交归档实际读取结果:约 10 行;源码顶部原注释(英文,仅作回查线索):Client-namespace projection of the permission domain: a pure re-export of the package's types outlet. Client code imports ONLY the client namespace (repo discipline), so ./client projects the same single-source content ./types serves to host consumers — zer...。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/permission-presets/src/index.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:模块入口
  • 这个文件有什么用:它把人机交互相关的公开能力集中导出,并决定调用者可以依赖哪些边界;调用者因此不必记住所有内部文件。
  • 为什么这样设计:入口文件把公开边界固定下来,内部文件可以继续拆分或替换;其他包只依赖入口暴露的 API,依赖方向更稳定。
  • 文件级设计证据:源码顶部注释把它定位为“User-facing permission presets over the independent sandbox-mode and approval-policy knobs. A switch records the selected preset, then writes changed knobs through their canonical setters. Execution, prompt narration, and replay keep reading their knob fold...”;固定提交中扫描到的声明包括 PresetSpecCUSTOM_PRESETPERMISSION_SETTINGS_NAMESPACEeffectivePermissionPresetKnobState;本地静态 import 图显示它直接依赖 11 个源文件,并被 4 个源文件直接引用。
  • 直接协作者:packages/interaction/permission-presets/README.mdpackages/core/session/src/index.tspackages/interaction/commands/src/index.tspackages/interaction/permission-presets/src/types.tsapps/web/tests/shipped-composition.e2e.ts
  • 对应测试:apps/web/tests/shipped-composition.e2e.tspackages/host/apiproxy/tests/api-proxy-blank.spec.tspackages/interaction/permission-presets/tests/permission-presets.spec.tspackages/interaction/permission-presets/tests/projection.spec.ts
  • 测试关联依据:固定提交源码中的本地静态 import 直接引用;测试用例直接导入了这个源文件。
  • 测试支持:apps/web/tests/scaffold.ts
  • 阅读顺序:先读 packages/interaction/permission-presets/README.md、入口和消费者,再读当前契约,沿着 apps/web/tests/shipped-composition.e2e.tspackages/host/apiproxy/tests/api-proxy-blank.spec.tspackages/interaction/permission-presets/tests/permission-presets.spec.ts 看它怎样约束运行时,最后对照 apps/web/tests/shipped-composition.e2e.tspackages/host/apiproxy/tests/api-proxy-blank.spec.tspackages/interaction/permission-presets/tests/permission-presets.spec.ts
  • 代码证据:固定提交归档实际读取结果:约 449 行;扫描到的声明包括 PresetSpecCUSTOM_PRESETPERMISSION_SETTINGS_NAMESPACEeffectivePermissionPresetKnobStateapplyKnobEventPermissionSettingsConfig;源码顶部原注释(英文,仅作回查线索):User-facing permission presets over the independent sandbox-mode and approval-policy knobs. A switch records the selected preset, then writes changed knobs through their canonical setters. Execution, prompt narration, and replay keep reading their knob fold...。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/permission-presets/src/invariant.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:运行时不变量
  • 这个文件有什么用:它检查人机交互必须始终成立的条件,在错误刚出现时报告,而不是等到更深层才出现难以解释的结果。
  • 为什么这样设计:把不变量集中在一个位置,调用者和测试就能用同一条规则检查状态;错误在边界处报告,比在后续 UI 或网络请求中才暴露更容易修复。
  • 文件级设计证据:源码顶部注释把它定位为“Package-owned permission-preset event invariants. @module @deepseek-ai/dsh-permission-presets/invariant”;固定提交中扫描到的声明包括 nameinjectapplyvalidateEvent;本地静态 import 图显示它直接依赖 3 个源文件,并被 1 个源文件直接引用。
  • 直接协作者:packages/interaction/permission-presets/README.mdpackages/core/session/src/index.tspackages/runtime-diagnostics/invariants/src/index.tsvendor/cordis/src/index.tspackages/interaction/permission-presets/tests/invariant.spec.ts
  • 对应测试:packages/interaction/permission-presets/tests/invariant.spec.ts
  • 测试关联依据:固定提交源码中的本地静态 import 直接引用;测试用例直接导入了这个源文件。
  • 阅读顺序:先读相关类型和事件,再读当前状态或存储实现,沿着 packages/core/session/src/index.tspackages/runtime-diagnostics/invariants/src/index.tsvendor/cordis/src/index.tspackages/interaction/permission-presets/tests/invariant.spec.ts 理解状态变化,最后对照 packages/interaction/permission-presets/tests/invariant.spec.ts
  • 代码证据:固定提交归档实际读取结果:约 39 行;扫描到的声明包括 nameinjectapplyvalidateEvent;源码顶部原注释(英文,仅作回查线索):Package-owned permission-preset event invariants. @module @deepseek-ai/dsh-permission-presets/invariant。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/permission-presets/src/types.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:类型契约
  • 这个文件有什么用:它描述人机交互中流转的数据长什么样、哪些字段必填以及各部分怎样关联,让不同模块先共享同一份约定。
  • 为什么这样设计:先把形状和规则集中声明,执行代码只负责使用已经检查过的数据;这样错误更早暴露,读代码时也有一张共同的地图。
  • 文件级设计证据:源码顶部注释把它定位为“Pure types of the permission domain: the ONE home of the permissions projection-key declaration plus its payload types, free of this package's host-side value imports (cordis, schemastery). Two namespace projections serve it — the package root re-export for...”;固定提交中扫描到的声明包括 PresetOptionPermissionSelect;本地静态 import 图显示它直接依赖 0 个源文件,并被 2 个源文件直接引用。
  • 直接协作者:packages/interaction/permission-presets/README.mdpackages/interaction/permission-presets/src/client.tspackages/interaction/permission-presets/src/index.ts
  • 对应测试:间接测试线索(通过本地 import 链,非直接覆盖):apps/web/tests/shipped-composition.e2e.tspackages/client/ui-conversation/tests/input-bar.client.spec.tsxpackages/client/ui-conversation/tests/input-matrix.client.spec.tsxpackages/client/ui-conversation/tests/input-scenarios.client.spec.tsxpackages/client/ui-conversation/tests/skeleton.client.spec.tsxpackages/client/ui-permission-presets/tests/browser-plugin.client.spec.ts
  • 测试关联依据:固定提交源码中的本地静态 import 传递引用;这些测试通过包入口或中间模块到达本文件,不等于本文件被直接覆盖。
  • 阅读顺序:先读 packages/interaction/permission-presets/README.md、入口和消费者,再读当前契约,沿着 packages/interaction/permission-presets/src/client.tspackages/interaction/permission-presets/src/index.ts 看它怎样约束运行时,最后对照 apps/web/tests/shipped-composition.e2e.tspackages/client/ui-conversation/tests/input-bar.client.spec.tsxpackages/client/ui-conversation/tests/input-matrix.client.spec.tsx
  • 代码证据:固定提交归档实际读取结果:约 44 行;扫描到的声明包括 PresetOptionPermissionSelect;源码顶部原注释(英文,仅作回查线索):Pure types of the permission domain: the ONE home of the permissions projection-key declaration plus its payload types, free of this package's host-side value imports (cordis, schemastery). Two namespace projections serve it — the package root re-export for...。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/permission-presets/tests/invariant.spec.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:测试用例
  • 这个文件有什么用:它用自动化测试检查人机交互的具体场景,包括“permission invariants”、“accepts configured preset events and ignores other session data”、“rejects a durable preset that the active table cannot resolve”、“rejects an unknown preset already present on late registration”;这些断言把“应该发生什么”变成可以重复运行的证据。
  • 为什么这样设计:把测试主题“permission invariants”写成独立测试用例,读者可以从输入、触发动作和断言反推实现的不变量;不同回归问题也不会互相遮蔽。
  • 文件级设计证据:固定提交中扫描到的声明包括 PermissionProbesetuppresetEvent;本地静态 import 图显示它直接依赖 4 个源文件,并被 0 个源文件直接引用。
  • 直接协作者:packages/interaction/permission-presets/README.mdpackages/core/session/src/index.tspackages/interaction/permission-presets/src/invariant.tspackages/runtime-diagnostics/invariants/src/index.ts
  • 对应测试:本文件本身就是测试用例。
  • 测试关联依据:本文件本身就是测试用例,不把同目录的其他测试冒充成它的“对应测试”。
  • 阅读顺序:先看它直接导入的被测实现 packages/core/session/src/index.tspackages/interaction/permission-presets/src/invariant.tspackages/runtime-diagnostics/invariants/src/index.ts,再读本文件的测试主题、输入和断言;最后对照测试支持和失败输出。
  • 代码证据:固定提交归档实际读取结果:约 53 行;扫描到的声明包括 PermissionProbesetuppresetEvent;扫描到的测试主题包括 “permission invariants”、“accepts configured preset events and ignores other session data”、“rejects a durable preset that the active table cannot resolve”、“rejects an unknown preset already present on late registration”。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/permission-presets/tests/permission-presets.spec.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:测试用例
  • 这个文件有什么用:它用自动化测试检查人机交互的具体场景,包括“effectivePermissionPreset”、“folds to the last event, or undefined without one”、“PermissionPresetService”、“advertises the preset table in declaration order and resolves bundles”;这些断言把“应该发生什么”变成可以重复运行的证据。
  • 为什么这样设计:把测试主题“effectivePermissionPreset”写成独立测试用例,读者可以从输入、触发动作和断言反推实现的不变量;不同回归问题也不会互相遮蔽。
  • 文件级设计证据:固定提交中扫描到的声明包括 MemorySettingsmountedfreshSessionmountedStore;本地静态 import 图显示它直接依赖 6 个源文件,并被 0 个源文件直接引用。
  • 直接协作者:packages/interaction/permission-presets/README.mdpackages/core/session/src/index.tspackages/interaction/permission-presets/src/index.tspackages/interaction/user-approval/src/index.ts
  • 对应测试:本文件本身就是测试用例。
  • 测试关联依据:本文件本身就是测试用例,不把同目录的其他测试冒充成它的“对应测试”。
  • 阅读顺序:先看它直接导入的被测实现 packages/core/session/src/index.tspackages/interaction/permission-presets/src/index.tspackages/interaction/user-approval/src/index.ts,再读本文件的测试主题、输入和断言;最后对照测试支持和失败输出。
  • 代码证据:固定提交归档实际读取结果:约 301 行;扫描到的声明包括 MemorySettingsmountedfreshSessionmountedStore;扫描到的测试主题包括 “effectivePermissionPreset”、“folds to the last event, or undefined without one”、“PermissionPresetService”、“advertises the preset table in declaration order and resolves bundles”、“current() derives from the effective knobs: composition defaults hit workspace-write, a switch hits its preset”、“a knob state matching no table entry derives custom — a state, not an error”。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/permission-presets/tests/projection.spec.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:测试用例
  • 这个文件有什么用:它用自动化测试检查人机交互、状态投影的具体场景,包括“permissions projection unit”、“serves the pinned new-session default select”、“folds the knob events and notifies the change feed per knob append”、“appends custom as a current-only option when the knobs match no preset”;这些断言把“应该发生什么”变成可以重复运行的证据。
  • 为什么这样设计:把测试主题“permissions projection unit”写成独立测试用例,读者可以从输入、触发动作和断言反推实现的不变量;不同回归问题也不会互相遮蔽。
  • 文件级设计证据:源码顶部注释把它定位为“The permissions projection unit and the /permission command: mounting the permission service beside the projection registry serves the whole select (table options + effective current value, custom appended exactly while derived) folded from the three knob e...”;固定提交中扫描到的声明包括 harnessagentFor;本地静态 import 图显示它直接依赖 8 个源文件,并被 0 个源文件直接引用。
  • 直接协作者:packages/interaction/permission-presets/README.mdpackages/core/agent/src/index.tspackages/core/scope/src/index.tspackages/core/session/src/index.ts
  • 对应测试:本文件本身就是测试用例。
  • 测试关联依据:本文件本身就是测试用例,不把同目录的其他测试冒充成它的“对应测试”。
  • 阅读顺序:先看它直接导入的被测实现 packages/core/agent/src/index.tspackages/core/scope/src/index.tspackages/core/session/src/index.ts,再读本文件的测试主题、输入和断言;最后对照测试支持和失败输出。
  • 代码证据:固定提交归档实际读取结果:约 133 行;扫描到的声明包括 harnessagentFor;扫描到的测试主题包括 “permissions projection unit”、“serves the pinned new-session default select”、“folds the knob events and notifies the change feed per knob append”、“appends custom as a current-only option when the knobs match no preset”、“has no permissions key without the service, and drops it on unload (HMR safety)”、“/permission command”;源码顶部原注释(英文,仅作回查线索):The permissions projection unit and the /permission command: mounting the permission service beside the projection registry serves the whole select (table options + effective current value, custom appended exactly while derived) folded from the three knob e...。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/tool-ask-user/src/index.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:模块入口
  • 这个文件有什么用:它把人机交互、工具相关的公开能力集中导出,并决定调用者可以依赖哪些边界;调用者因此不必记住所有内部文件。
  • 为什么这样设计:入口文件把公开边界固定下来,内部文件可以继续拆分或替换;其他包只依赖入口暴露的 API,依赖方向更稳定。
  • 文件级设计证据:源码顶部注释把它定位为“Model-facing Consumer of the ctx.userQuestions capability seam. The tool pauses until a UI provider returns a human answer, then feeds that answer back into the agent loop as an ordinary tool result. @module @deepseek-ai/dsh-tool-ask-user”;固定提交中扫描到的声明包括 nameinjectapply;本地静态 import 图显示它直接依赖 3 个源文件,并被 2 个源文件直接引用。
  • 直接协作者:packages/interaction/tool-ask-user/README.mdpackages/core/tools/src/index.tspackages/interaction/user-questions/src/index.tsvendor/cordis/src/index.tspackages/interaction/tool-ask-user/tests/tool-ask-user.spec.ts
  • 对应测试:packages/interaction/tool-ask-user/tests/tool-ask-user.spec.ts
  • 测试关联依据:固定提交源码中的本地静态 import 直接引用;测试用例直接导入了这个源文件。
  • 阅读顺序:先读 packages/interaction/tool-ask-user/README.md、入口和消费者,再读当前契约,沿着 packages/interaction/tool-ask-user/tests/tool-ask-user.spec.tsscripts/gen-tool-catalog.ts 看它怎样约束运行时,最后对照 packages/interaction/tool-ask-user/tests/tool-ask-user.spec.ts
  • 代码证据:固定提交归档实际读取结果:约 101 行;扫描到的声明包括 nameinjectapply;源码顶部原注释(英文,仅作回查线索):Model-facing Consumer of the ctx.userQuestions capability seam. The tool pauses until a UI provider returns a human answer, then feeds that answer back into the agent loop as an ordinary tool result. @module @deepseek-ai/dsh-tool-ask-user。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/tool-ask-user/src/invariant.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:运行时不变量
  • 这个文件有什么用:它检查人机交互、工具必须始终成立的条件,在错误刚出现时报告,而不是等到更深层才出现难以解释的结果。
  • 为什么这样设计:把不变量集中在一个位置,调用者和测试就能用同一条规则检查状态;错误在边界处报告,比在后续 UI 或网络请求中才暴露更容易修复。
  • 文件级设计证据:源码顶部注释把它定位为“Package-owned invariant companion for @deepseek-ai/dsh-tool-ask-user. @module @deepseek-ai/dsh-tool-ask-user/invariant”;固定提交中扫描到的声明包括 nameinjectapply;本地静态 import 图显示它直接依赖 2 个源文件,并被 0 个源文件直接引用。
  • 直接协作者:packages/interaction/tool-ask-user/README.mdpackages/runtime-diagnostics/invariants/src/index.tsvendor/cordis/src/index.ts
  • 对应测试:没有确认到直接测试;公共入口可能仍有间接覆盖。
  • 测试关联依据:固定提交中没有找到直接或传递的本地静态 import,也没有找到明显的同包同名测试;公共入口可能仍有间接覆盖。
  • 阅读顺序:先读相关类型和事件,再读当前状态或存储实现,沿着 packages/runtime-diagnostics/invariants/src/index.tsvendor/cordis/src/index.ts 和所在包的入口或服务理解状态变化,最后对照同包中与它同名或覆盖相近场景的测试。
  • 代码证据:固定提交归档实际读取结果:约 30 行;扫描到的声明包括 nameinjectapply;源码顶部原注释(英文,仅作回查线索):Package-owned invariant companion for @deepseek-ai/dsh-tool-ask-user. @module @deepseek-ai/dsh-tool-ask-user/invariant。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/tool-ask-user/tests/tool-ask-user.spec.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:测试用例
  • 这个文件有什么用:它用自动化测试检查人机交互、工具的具体场景,包括“ask_user_question tool”、“registers a model-facing tool schema”、“asks the registered user-questions provider and projects structured answers to text”、“passes recommended option labels through without adding schema fields”;这些断言把“应该发生什么”变成可以重复运行的证据。
  • 为什么这样设计:把测试主题“ask_user_question tool”写成独立测试用例,读者可以从输入、触发动作和断言反推实现的不变量;不同回归问题也不会互相遮蔽。
  • 文件级设计证据:固定提交中扫描到的声明包括 setupstubAgent;本地静态 import 图显示它直接依赖 7 个源文件,并被 0 个源文件直接引用。
  • 直接协作者:packages/interaction/tool-ask-user/README.mdpackages/core/agent/src/index.tspackages/core/system-prompt/src/index.tspackages/core/tools/src/index.ts
  • 对应测试:本文件本身就是测试用例。
  • 测试关联依据:本文件本身就是测试用例,不把同目录的其他测试冒充成它的“对应测试”。
  • 阅读顺序:先看它直接导入的被测实现 packages/core/agent/src/index.tspackages/core/system-prompt/src/index.tspackages/core/tools/src/index.ts,再读本文件的测试主题、输入和断言;最后对照测试支持和失败输出。
  • 代码证据:固定提交归档实际读取结果:约 320 行;扫描到的声明包括 setupstubAgent;扫描到的测试主题包括 “ask_user_question tool”、“registers a model-facing tool schema”、“asks the registered user-questions provider and projects structured answers to text”、“passes recommended option labels through without adding schema fields”、“projects custom answers and multi-select choices”、“passes the tool abort signal to the user-questions request”。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/user-approval/src/index.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:模块入口
  • 这个文件有什么用:它把人机交互相关的公开能力集中导出,并决定调用者可以依赖哪些边界;调用者因此不必记住所有内部文件。
  • 为什么这样设计:入口文件把公开边界固定下来,内部文件可以继续拆分或替换;其他包只依赖入口暴露的 API,依赖方向更稳定。
  • 文件级设计证据:源码顶部注释把它定位为“Service Definition for the approval capability seam, covering requests, cancellation, audit, and per-session policy. Missing answerers fail closed; grants apply only to the requested action. @module @deepseek-ai/dsh-user-approval”;固定提交中扫描到的声明包括 ApprovalPolicyAPPROVAL_POLICIESeffectiveApprovalPolicysetApprovalPolicyApprovalRequest;本地静态 import 图显示它直接依赖 8 个源文件,并被 24 个源文件直接引用。
  • 直接协作者:packages/interaction/user-approval/README.mdpackages/core/agent/src/index.tspackages/core/scope/src/index.tspackages/core/session/src/index.tsapps/web/tests/approval-composer.e2e.ts
  • 对应测试:apps/web/tests/approval-composer.e2e.tsapps/web/tests/shipped-composition.e2e.tspackages/acp/acp/tests/approval.spec.tspackages/core/tools/tests/tools.spec.tspackages/fs/tool-fs/tests/tools.spec.tspackages/host/apiproxy/tests/api-proxy-approval.spec.ts
  • 测试关联依据:固定提交源码中的本地静态 import 直接引用;测试用例直接导入了这个源文件。
  • 测试支持:apps/web/tests/scaffold.tsapps/web/tests/support.tspackages/acp/acp/tests/harness.ts
  • 阅读顺序:先读 packages/interaction/user-approval/README.md、入口和消费者,再读当前契约,沿着 apps/web/tests/approval-composer.e2e.tsapps/web/tests/shipped-composition.e2e.tspackages/acp/acp/src/index.ts 看它怎样约束运行时,最后对照 apps/web/tests/approval-composer.e2e.tsapps/web/tests/shipped-composition.e2e.tspackages/acp/acp/tests/approval.spec.ts
  • 代码证据:固定提交归档实际读取结果:约 347 行;扫描到的声明包括 ApprovalPolicyAPPROVAL_POLICIESeffectiveApprovalPolicysetApprovalPolicyApprovalRequestConfigApprovalServicehasOpenTurn;源码顶部原注释(英文,仅作回查线索):Service Definition for the approval capability seam, covering requests, cancellation, audit, and per-session policy. Missing answerers fail closed; grants apply only to the requested action. @module @deepseek-ai/dsh-user-approval。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/user-approval/src/invariant.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:运行时不变量
  • 这个文件有什么用:它检查人机交互必须始终成立的条件,在错误刚出现时报告,而不是等到更深层才出现难以解释的结果。
  • 为什么这样设计:把不变量集中在一个位置,调用者和测试就能用同一条规则检查状态;错误在边界处报告,比在后续 UI 或网络请求中才暴露更容易修复。
  • 文件级设计证据:源码顶部注释把它定位为“Package-owned approval audit-stream invariants. @module @deepseek-ai/dsh-user-approval/invariant”;固定提交中扫描到的声明包括 nameinjectapplyvalidateApprovalEventapplyApprovalTransition;本地静态 import 图显示它直接依赖 4 个源文件,并被 1 个源文件直接引用。
  • 直接协作者:packages/interaction/user-approval/README.mdpackages/core/session/src/index.tspackages/interaction/user-approval/src/index.tspackages/runtime-diagnostics/invariants/src/index.tspackages/interaction/user-approval/tests/invariant.spec.ts
  • 对应测试:packages/interaction/user-approval/tests/invariant.spec.ts
  • 测试关联依据:固定提交源码中的本地静态 import 直接引用;测试用例直接导入了这个源文件。
  • 阅读顺序:先读相关类型和事件,再读当前状态或存储实现,沿着 packages/core/session/src/index.tspackages/interaction/user-approval/src/index.tspackages/runtime-diagnostics/invariants/src/index.tspackages/interaction/user-approval/tests/invariant.spec.ts 理解状态变化,最后对照 packages/interaction/user-approval/tests/invariant.spec.ts
  • 代码证据:固定提交归档实际读取结果:约 111 行;扫描到的声明包括 nameinjectapplyvalidateApprovalEventapplyApprovalTransition;源码顶部原注释(英文,仅作回查线索):Package-owned approval audit-stream invariants. @module @deepseek-ai/dsh-user-approval/invariant。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/user-approval/src/types.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:类型契约
  • 这个文件有什么用:它描述人机交互中流转的数据长什么样、哪些字段必填以及各部分怎样关联,让不同模块先共享同一份约定。
  • 为什么这样设计:先把形状和规则集中声明,执行代码只负责使用已经检查过的数据;这样错误更早暴露,读代码时也有一张共同的地图。
  • 文件级设计证据:源码顶部注释把它定位为“Wire-safe approval identifiers and outcome vocabulary, free of cordis/service imports so browser type chains (apiproxy api → client) can consume them without loading this package's Context augmentation. @module @deepseek-ai/dsh-user-approval/types”;固定提交中扫描到的声明包括 ApprovalRequestIdApprovalOutcome;本地静态 import 图显示它直接依赖 1 个源文件,并被 4 个源文件直接引用。
  • 直接协作者:packages/interaction/user-approval/README.mdpackages/util/brand/src/index.tspackages/host/apiproxy/src/api/approvals.schema.tspackages/host/apiproxy/src/api/approvals.tspackages/host/apiproxy/src/api/events.ts
  • 对应测试:间接测试线索(通过本地 import 链,非直接覆盖):apps/cli/tests/memory-mcp-configs.spec.tsapps/cli/tests/web-agent-presets.e2e.tsapps/web/tests/agent-preset-selection.e2e.tsapps/web/tests/approval-composer.e2e.tsapps/web/tests/plan-control-row.e2e.tsapps/web/tests/shipped-composition.e2e.ts
  • 测试关联依据:固定提交源码中的本地静态 import 传递引用;这些测试通过包入口或中间模块到达本文件,不等于本文件被直接覆盖。
  • 阅读顺序:先读 packages/interaction/user-approval/README.md、入口和消费者,再读当前契约,沿着 packages/host/apiproxy/src/api/approvals.schema.tspackages/host/apiproxy/src/api/approvals.tspackages/host/apiproxy/src/api/events.ts 看它怎样约束运行时,最后对照 apps/cli/tests/memory-mcp-configs.spec.tsapps/cli/tests/web-agent-presets.e2e.tsapps/web/tests/agent-preset-selection.e2e.ts
  • 代码证据:固定提交归档实际读取结果:约 29 行;扫描到的声明包括 ApprovalRequestIdApprovalOutcome;源码顶部原注释(英文,仅作回查线索):Wire-safe approval identifiers and outcome vocabulary, free of cordis/service imports so browser type chains (apiproxy api → client) can consume them without loading this package's Context augmentation. @module @deepseek-ai/dsh-user-approval/types。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/user-approval/tests/approval.spec.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:测试用例
  • 这个文件有什么用:它用自动化测试检查人机交互的具体场景,包括“ApprovalService.request”、“throws before appending anything when no turn has ever opened (idle ask)”、“throws between turns — a closed turn does not satisfy the enclosure precondition”、“fails closed to unavailable when nobody listens, auditing the asked/decided pair”;这些断言把“应该发生什么”变成可以重复运行的证据。
  • 为什么这样设计:把测试主题“ApprovalService.request”写成独立测试用例,读者可以从输入、触发动作和断言反推实现的不变量;不同回归问题也不会互相遮蔽。
  • 文件级设计证据:固定提交中扫描到的声明包括 fakeAgentmountedrequestOfsessionAgent;本地静态 import 图显示它直接依赖 7 个源文件,并被 0 个源文件直接引用。
  • 直接协作者:packages/interaction/user-approval/README.mdpackages/core/agent/src/index.tspackages/core/scope/src/index.tspackages/core/session/src/index.ts
  • 对应测试:本文件本身就是测试用例。
  • 测试关联依据:本文件本身就是测试用例,不把同目录的其他测试冒充成它的“对应测试”。
  • 阅读顺序:先看它直接导入的被测实现 packages/core/agent/src/index.tspackages/core/scope/src/index.tspackages/core/session/src/index.ts,再读本文件的测试主题、输入和断言;最后对照测试支持和失败输出。
  • 代码证据:固定提交归档实际读取结果:约 514 行;扫描到的声明包括 fakeAgentmountedrequestOfsessionAgent;扫描到的测试主题包括 “ApprovalService.request”、“throws before appending anything when no turn has ever opened (idle ask)”、“throws between turns — a closed turn does not satisfy the enclosure precondition”、“fails closed to unavailable when nobody listens, auditing the asked/decided pair”、“omits absent optional fields from the asked audit event”、“borrows the exact readonly request for scoped dispatch and audit”。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/user-approval/tests/invariant.spec.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:测试用例
  • 这个文件有什么用:它用自动化测试检查人机交互的具体场景,包括“approval invariants”、“accepts paired audit events and closed policy values”、“rebuilds an unmatched question from an existing session”、“adopts a bare session first observed through publication”;这些断言把“应该发生什么”变成可以重复运行的证据。
  • 为什么这样设计:把测试主题“approval invariants”写成独立测试用例,读者可以从输入、触发动作和断言反推实现的不变量;不同回归问题也不会互相遮蔽。
  • 文件级设计证据:固定提交中扫描到的声明包括 setupstartTurn;本地静态 import 图显示它直接依赖 5 个源文件,并被 0 个源文件直接引用。
  • 直接协作者:packages/interaction/user-approval/README.mdpackages/core/session/src/index.tspackages/interaction/user-approval/src/index.tspackages/interaction/user-approval/src/invariant.ts
  • 对应测试:本文件本身就是测试用例。
  • 测试关联依据:本文件本身就是测试用例,不把同目录的其他测试冒充成它的“对应测试”。
  • 阅读顺序:先看它直接导入的被测实现 packages/core/session/src/index.tspackages/interaction/user-approval/src/index.tspackages/interaction/user-approval/src/invariant.ts,再读本文件的测试主题、输入和断言;最后对照测试支持和失败输出。
  • 代码证据:固定提交归档实际读取结果:约 106 行;扫描到的声明包括 setupstartTurn;扫描到的测试主题包括 “approval invariants”、“accepts paired audit events and closed policy values”、“rebuilds an unmatched question from an existing session”、“adopts a bare session first observed through publication”、“rejects audit events outside any open turn”、“rejects an unenclosed audit event when replaying an existing session”。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/user-approval/tsdown.config.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:构建或测试配置
  • 这个文件有什么用:它告诉工具链怎样处理人机交互:从哪里开始、使用哪个环境、解析哪些依赖以及输出什么产物;这些规则集中后,构建和测试才可重复。
  • 为什么这样设计:工具链配置独立于业务实现,构建、测试和发布可以复用同一套入口规则;改配置时也能单独看出运行环境变化。
  • 文件级设计证据:本次固定提交归档没有扫描到顶部注释、顶层声明或专门的结构线索;本地静态 import 图显示它直接依赖 0 个源文件,并被 0 个源文件直接引用。
  • 直接协作者:packages/interaction/user-approval/README.md
  • 对应测试:没有确认到直接测试;公共入口可能仍有间接覆盖。
  • 测试关联依据:固定提交中没有找到直接或传递的本地静态 import,也没有找到明显的同包同名测试;公共入口可能仍有间接覆盖。
  • 阅读顺序:先读 packages/interaction/user-approval/README.md,再读本配置/脚本,沿着所在包的入口或服务确认它如何影响入口和产物,最后对照对应 gate 或快照测试。
  • 代码证据:固定提交归档实际读取结果:约 30 行。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/user-questions/src/index.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:模块入口
  • 这个文件有什么用:它把人机交互相关的公开能力集中导出,并决定调用者可以依赖哪些边界;调用者因此不必记住所有内部文件。
  • 为什么这样设计:入口文件把公开边界固定下来,内部文件可以继续拆分或替换;其他包只依赖入口暴露的 API,依赖方向更稳定。
  • 文件级设计证据:源码顶部注释把它定位为“Service Definition for the user-questions capability seam (ctx.userQuestions): a UI-backed service for pausing an agent tool call until the human answers a question. The model- facing tool lives in @deepseek-ai/dsh-tool-ask-user; UI packages provide the sin...”;固定提交中扫描到的声明包括 AskUserQuestionRequestUserQuestionProviderUserQuestionErrorUserQuestionService;本地静态 import 图显示它直接依赖 4 个源文件,并被 26 个源文件直接引用。
  • 直接协作者:packages/interaction/user-questions/README.mdpackages/core/agent/src/index.tspackages/interaction/user-questions/src/types.tspackages/llm/llm/src/index.tsexamples/acp-agent/tests/fixtures/child-question-tripwire.ts
  • 对应测试:packages/client/ui-user-questions/tests/node-plugin.client.spec.tspackages/host/apiproxy/tests/api-proxy-agent-preset.spec.tspackages/host/apiproxy/tests/api-proxy-approval.spec.tspackages/host/apiproxy/tests/api-proxy-blank.spec.tspackages/host/apiproxy/tests/api-proxy-cold.spec.tspackages/host/apiproxy/tests/api-proxy-config.spec.ts
  • 测试关联依据:固定提交源码中的本地静态 import 直接引用;测试用例直接导入了这个源文件。
  • 阅读顺序:先读 packages/interaction/user-questions/README.md、入口和消费者,再读当前契约,沿着 examples/acp-agent/tests/fixtures/child-question-tripwire.tspackages/client/ui-user-questions/tests/node-plugin.client.spec.tspackages/host/apiproxy/src/api-proxy.ts 看它怎样约束运行时,最后对照 packages/client/ui-user-questions/tests/node-plugin.client.spec.tspackages/host/apiproxy/tests/api-proxy-agent-preset.spec.tspackages/host/apiproxy/tests/api-proxy-approval.spec.ts
  • 代码证据:固定提交归档实际读取结果:约 143 行;扫描到的声明包括 AskUserQuestionRequestUserQuestionProviderUserQuestionErrorUserQuestionService;源码顶部原注释(英文,仅作回查线索):Service Definition for the user-questions capability seam (ctx.userQuestions): a UI-backed service for pausing an agent tool call until the human answers a question. The model- facing tool lives in @deepseek-ai/dsh-tool-ask-user; UI packages provide the sin...。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/user-questions/src/invariant.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:运行时不变量
  • 这个文件有什么用:它检查人机交互必须始终成立的条件,在错误刚出现时报告,而不是等到更深层才出现难以解释的结果。
  • 为什么这样设计:把不变量集中在一个位置,调用者和测试就能用同一条规则检查状态;错误在边界处报告,比在后续 UI 或网络请求中才暴露更容易修复。
  • 文件级设计证据:源码顶部注释把它定位为“Package-owned invariant companion for @deepseek-ai/dsh-user-questions. @module @deepseek-ai/dsh-user-questions/invariant”;固定提交中扫描到的声明包括 nameinjectapply;本地静态 import 图显示它直接依赖 2 个源文件,并被 0 个源文件直接引用。
  • 直接协作者:packages/interaction/user-questions/README.mdpackages/runtime-diagnostics/invariants/src/index.tsvendor/cordis/src/index.ts
  • 对应测试:没有确认到直接测试;公共入口可能仍有间接覆盖。
  • 测试关联依据:固定提交中没有找到直接或传递的本地静态 import,也没有找到明显的同包同名测试;公共入口可能仍有间接覆盖。
  • 阅读顺序:先读相关类型和事件,再读当前状态或存储实现,沿着 packages/runtime-diagnostics/invariants/src/index.tsvendor/cordis/src/index.ts 和所在包的入口或服务理解状态变化,最后对照同包中与它同名或覆盖相近场景的测试。
  • 代码证据:固定提交归档实际读取结果:约 30 行;扫描到的声明包括 nameinjectapply;源码顶部原注释(英文,仅作回查线索):Package-owned invariant companion for @deepseek-ai/dsh-user-questions. @module @deepseek-ai/dsh-user-questions/invariant。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/user-questions/src/types.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:类型契约
  • 这个文件有什么用:它描述人机交互中流转的数据长什么样、哪些字段必填以及各部分怎样关联,让不同模块先共享同一份约定。
  • 为什么这样设计:先把形状和规则集中声明,执行代码只负责使用已经检查过的数据;这样错误更早暴露,读代码时也有一张共同的地图。
  • 文件级设计证据:源码顶部注释把它定位为“Wire-safe question and answer types, free of cordis/service imports so browser type chains (apiproxy api → client) can consume them without loading this package's Context augmentation. @module @deepseek-ai/dsh-user-questions/types”;固定提交中扫描到的声明包括 AskUserQuestionOptionAskUserQuestionIntentAskUserQuestionItemAskUserQuestionAnswerItemAskUserQuestionAnswer;本地静态 import 图显示它直接依赖 0 个源文件,并被 5 个源文件直接引用。
  • 直接协作者:packages/interaction/user-questions/README.mdpackages/host/apiproxy/src/api/events.schema.tspackages/host/apiproxy/src/api/events.tspackages/host/apiproxy/src/api/questions.schema.ts
  • 对应测试:间接测试线索(通过本地 import 链,非直接覆盖):apps/web/tests/plan-control-row.e2e.tspackages/api/gateway/tests/gateway.client.spec.tspackages/client/connection/tests/api-helpers.client.spec.tspackages/client/connection/tests/client-apply.client.spec.tspackages/client/connection/tests/connection.client.spec.tspackages/client/connection/tests/fixture-commands.client.spec.ts
  • 测试关联依据:固定提交源码中的本地静态 import 传递引用;这些测试通过包入口或中间模块到达本文件,不等于本文件被直接覆盖。
  • 阅读顺序:先读 packages/interaction/user-questions/README.md、入口和消费者,再读当前契约,沿着 packages/host/apiproxy/src/api/events.schema.tspackages/host/apiproxy/src/api/events.tspackages/host/apiproxy/src/api/questions.schema.ts 看它怎样约束运行时,最后对照 apps/web/tests/plan-control-row.e2e.tspackages/api/gateway/tests/gateway.client.spec.tspackages/client/connection/tests/api-helpers.client.spec.ts
  • 代码证据:固定提交归档实际读取结果:约 66 行;扫描到的声明包括 AskUserQuestionOptionAskUserQuestionIntentAskUserQuestionItemAskUserQuestionAnswerItemAskUserQuestionAnswer;源码顶部原注释(英文,仅作回查线索):Wire-safe question and answer types, free of cordis/service imports so browser type chains (apiproxy api → client) can consume them without loading this package's Context augmentation. @module @deepseek-ai/dsh-user-questions/types。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec

packages/interaction/user-questions/tests/user-questions.spec.ts

  • 所属层:packages/interaction:可复用的 Harness 功能包
  • 文件角色:测试用例
  • 这个文件有什么用:它用自动化测试检查人机交互的具体场景,包括“UserQuestionService”、“delegates ask requests to the registered provider”、“rejects ask requests when no provider is registered”、“registers providers with HMR-safe disposal”;这些断言把“应该发生什么”变成可以重复运行的证据。
  • 为什么这样设计:把测试主题“UserQuestionService”写成独立测试用例,读者可以从输入、触发动作和断言反推实现的不变量;不同回归问题也不会互相遮蔽。
  • 文件级设计证据:固定提交中扫描到的声明包括 providerstubAgent;本地静态 import 图显示它直接依赖 3 个源文件,并被 0 个源文件直接引用。
  • 直接协作者:packages/interaction/user-questions/README.mdpackages/core/agent/src/index.tspackages/interaction/user-questions/src/index.tsvendor/cordis/src/index.ts
  • 对应测试:本文件本身就是测试用例。
  • 测试关联依据:本文件本身就是测试用例,不把同目录的其他测试冒充成它的“对应测试”。
  • 阅读顺序:先看它直接导入的被测实现 packages/core/agent/src/index.tspackages/interaction/user-questions/src/index.tsvendor/cordis/src/index.ts,再读本文件的测试主题、输入和断言;最后对照测试支持和失败输出。
  • 代码证据:固定提交归档实际读取结果:约 222 行;扫描到的声明包括 providerstubAgent;扫描到的测试主题包括 “UserQuestionService”、“delegates ask requests to the registered provider”、“rejects ask requests when no provider is registered”、“registers providers with HMR-safe disposal”、“rejects duplicate providers instead of replacing the active UI”、“fails before reaching the provider when the signal is already aborted”。
  • 固定版本:源码链接固定到官方提交 aa6c361a972c8369148dea7380bb5c21c24e07ec