跳至内容

高风险索引人工抽查

逐文件索引保证 2,973 个纳入范围的源文件都有入口,但“有入口”不等于“每个文件都已经人工精读”。这篇记录一次针对工具、提示词、启动装配和 Hook 协议的人工抽查,给读者一个复核自动卡片的方法。

抽查范围和证据等级

  • 固定上游提交:aa6c361a972c8369148dea7380bb5c21c24e07ec
  • 抽查对象:packages/core/tools/src/index.tspackages/core/tools/src/schema.tspackages/core/system-prompt/src/index.tsapps/cli/src/profile-boot.tspackages/hooks/hook-protocol/src/codec.ts
  • 读取顺序:先看 study/文件索引/ 中的卡片,再打开固定提交源码,最后看同目录 README 和测试入口。
  • 本篇记录的是静态源码和测试线索。没有把本地文档构建、网页部署或一次成功编译写成 DSH 运行时证明。

本轮的追加检查在学习仓库工作树上进行(工作树包含本地新增代码,不完全等于固定上游提交):包括 packages/core/tools/src/types.tspackages/interaction/user-approval/src/index.ts,并回看了 packages/core/tools/src/index.ts 中的 schemas()resolveExecution()packages/core/system-prompt/src/index.ts 中的 assemble();其中顺带回看的 debugSnapshot() 是本学习仓库在 ToolRuntime 上新增的只读调试接口,不在固定提交 aa6c361a 里——这一证据边界由第 23 课登记,本篇初稿曾把它误写成"在同一固定提交上确认到的事实",已更正。追加检查仍然是静态源码复核,不是启动 Profile、连接 provider 或执行外部工具。

抽查结果

文件源码中确认到的事实索引解释是否需要修正仍然需要什么证据
packages/core/tools/src/index.ts统一暴露工具注册、模型呈现模式、schema 提供和执行流水线;声明了 tools/pre-executetools/executetools/post-executetools/code-dispatch-logtools/resulttools/change 等事件当前“模块入口”判断方向正确,但不能只把它写成普通 barrel;它还承载注册、呈现和完整执行边界真实运行时的注册集合、可见集合和执行事件快照;没有证明所有注册工具都自动进请求
packages/core/tools/src/schema.ts提供统一 JSON 值 schema、编译、类型推断和工具参数校验;defineTool把 schema、执行、输出和可选呈现能力组合起来当前卡片可以作为入口,但读者要补问“参数校验”和“执行权限”是不是同一件事;答案是否定的目标 Profile 中实际加载了哪些工具,以及真实调用时的策略、审批和沙箱结果
packages/core/system-prompt/src/index.ts工具 provider 返回模型可见 schemas 和限制前 knownNamestoolOrder 负责确定顺序;assemble() 按调用上下文组装提示词和工具“提示词组装”判断正确;工具 schema 是组装的一部分,但不应把静态代码写成 provider token 或 KV cache 实测固定模型和 provider 的 input token、缓存 token、首 token 延迟与质量数据
apps/cli/src/profile-boot.ts按 Bundle、Profile patch、home patch、--patch overlay 组合树;存在 agent-presets 时还会条件性注入 shipped preset 的 system overlay,随后追加 telemetry patch;启动后监视用户 patch,并通过 shutdown/dispose 清理当前卡片的 patch/Profile 边界基本正确,但不能把用户可配置层级当成完整的实际 overlay 清单;它是判断“组合层扩展”和“源码 patch”区别的高风险入口在隔离 Profile 中实际启动、修改 patch、重载和退出的日志;不能仅凭函数存在声称 HMR 在每个平台都可用
packages/hooks/hook-protocol/src/codec.tsexit 0 可解析结构化 JSON 或保留普通 stdout;exit 2 表示阻断并取 stderr;其他非零退出是非阻断错误;只有调用者传入 expectedEventName 时,事件名缺失或不匹配才会丢弃事件专属字段当前卡片具体且准确;但协议 codec 只负责解码,哪些字段适用于 Claude 或 Codex 由 bridge 决定;省略 expectedEventName 会关闭这项校验具体 bridge 的命令、超时、权限、安装和卸载证据;codec 通过测试不等于外部 Hook 已安装
packages/core/tools/src/types.ts定义 nativecodeboth 三种呈现方式;事件数据记录 Code Mode 子调用的开始与结束。调试快照类型(保存作用域、名称、隐藏原因、可见 schema 名称和 UTF-8 字节数)是学习仓库工作树的本地新增,不在固定提交内"类型契约"方向正确,但不能把快照字段当成权限清单;字节数也不是 provider 的真实 token 数真实宿主导出的快照、provider 请求字段和执行策略结果;类型定义本身不证明字段已经被生产入口使用
packages/interaction/user-approval/src/index.ts审批服务支持 asknever 两种会话策略;审批提问与决定会写入 Session 日志;没有可用回答者时走 unavailable,而不是默认放行“模块入口”太笼统;它还规定了审批的失败方向和可回放状态,不能写成“有一个权限按钮”具体宿主是否装配回答者、用户界面怎样显示、真实工具调用是否走到审批,以及不同 Profile 的默认策略

本次抽查没有发现必须改写上述自动卡片的源码事实。需要改进的是阅读提醒:index.ts不能只理解成导出文件,system-prompt不能只理解成字符串拼接,profile-boot.ts不能只理解成“读取配置”,Hook codec 也不能替 bridge 背书。

追加抽查还把两个容易被模板掩盖的边界确认清楚了:packages/core/tools/src/types.ts 是"可观察事实的形状",不是授权实现;packages/interaction/user-approval/src/index.ts 是"审批和审计的状态边界",不是任何插件都自动获得的权限。学习仓库本地新增的 debugSnapshot() 只读出名称和序列化大小,packages/core/system-prompt/src/index.tsassemble() 才把可见 schema、作用域、顺序和上下文组合成一次本地输入;两者都不能单独证明模型已经收到请求或任务质量已经改善。

上面的浏览器把抽查结果表变成可点选的:选一个文件,右侧给出三栏原文——源码中确认到的事实、索引解释是否需要修正、仍然需要什么证据;这正是复核一张自动卡片时应当填写的三栏。

六篇入口课文的人工抽查

为了检查“渐进式路线”有没有把概念说过头,再对首页直接引导的六篇课文做了一轮人工复读,并回看它们引用的固定源码或本地实验入口。这里检查的是课文中的高风险结论,不是声称已经逐行审阅 2,973 个索引文件。

课文本轮确认仍然保留的边界
00-开始这里六个基础词和“注册不等于模型可见”的提醒与后续课程接得上这是心智模型,不是每个 Profile 的运行清单
10-社区生态与扩展边界普通插件、Bundle、Hook bridge、patched fork、运行时注入器分层明确;社区项目都以自述或静态观察命名GitHub topic、README 和固定源码都不等于官方背书、安全或兼容性证明
22-工具可见性与非侵入扩展把已注册、agent 可解析、模型呈现和执行允许拆开,并把 restrict() 限定在作用域/API 语义内可见集合变化不自动等于文件、网络、子进程或凭据权限收紧
23-工具可见集合观测与性能实验A/B 固定条件、schema 字节数、本地宿主记录和 provider 性能边界已分开当前实测没有 provider、模型、token、首 token 或任务质量证据
25-从首页到第一次产出的动手任务单网页阅读、固定源码链接和四行学习记录的完成条件清楚;Codespaces 是可选路线完成任务单不等于启动 DSH、安装插件或读完全部源码
27-工具预算与插件责任决策卡“先减 Bundle,再限作用域,再看呈现,最后考虑源码修改”的责任顺序与 22、23、10 互相一致这是一张决策卡,不是官方 Profile 名单或安全策略承诺

本轮没有发现需要改写上述六篇核心结论的事实错误。后续若修改上游固定提交、真实 Profile 或社区项目版本,必须重新做同样的抽查;当前的 44 条设计理由模板复用提示仍然只是人工抽查线索。

逐个文件怎样继续读

1. 工具入口:先看三条不同的线

打开 packages/core/tools/src/index.ts 时,用三种颜色做标记:

  1. 模型线schemas()presentAs()restrict() 以及送往 system prompt 的 provider。
  2. 执行线:注册、查找、参数校验、pre-execute、guard、executepost-execute和结果物化。
  3. 观察线tools/changetools/result 和 code dispatch 日志。

三条线在一个包里,并不意味着“模型看到的工具”与“能被宿主执行的工具”是同一集合。把它们拆开后,前一篇的四个观测时点就能落到源码位置。

2. schema 文件:先问输入,再问权限

packages/core/tools/src/schema.ts值得先看 defineTool 的输入和输出,再看参数如何编译与验证。一个 schema 可以告诉模型应该怎样生成参数,也可以让运行时拒绝不符合形状的参数;它不会单独决定文件、网络、进程或凭据权限。

读到 execute时,继续追 ToolRunContext、取消信号、输出 schema 和 tools/pre-execute。如果只看 schema 就声称“这个工具安全”,证据链是不完整的。

3. system prompt:分清顺序、可见性和缓存推论

packages/core/system-prompt/src/index.ts至少要分三次读:

  • 第一次看 provider 如何贡献 schemasknownNames
  • 第二次看 toolOrder 如何规范工具顺序,以及错误何时暴露。
  • 第三次看 assemble()如何把作用域、sections、tools 和 variables 组合成一次请求的输入。

源码和 README 可以支持“可见 schema 会进入组装”“顺序变化可能改变前缀形状”这类设计解释;它们不能替你得到某个 provider 的实际 tokenizer 结果或缓存命中率。

4. profile boot:把配置组合和源码修改分开

apps/cli/src/profile-boot.ts是理解“我没有 patch 源码,为什么也能加入功能”的关键文件。它把 Bundle 和多层 patch 组合到空 root 上,再交给 Loader 启动;当 agent-presets 已经存在时,启动器还会把随 CLI 分发的 preset 根目录作为 system overlay 加入组合,并在后面追加 telemetry patch。只要你的功能停留在公开 Bundle、Profile、服务和事件边界,身份更接近组合层扩展;如果你改了这个启动器或私有 Loader 状态,就需要按 patched fork 或发行版维护来声明。

启动器还负责监听用户 patch 和处理退出。研究 HMR 时,必须记录“修改了哪个文件、触发了什么重载、旧服务是否 dispose、进程如何退出”,不能只截一张“页面仍然打开”的图。

5. Hook codec:协议成功不等于集成成功

packages/hooks/hook-protocol/src/codec.ts只把子进程退出码、stdout、stderr 和结构化字段解码成中立结果。调用者传入 expectedEventName 时,codec 才会把缺失或不匹配的事件名当作不适用并丢弃事件专属字段;省略该参数则不启用这项事件名校验。它不替 Claude 或 Codex 决定安装位置、匹配哪些事件、是否允许写文件,也不负责为所有 bridge 证明兼容性。

下一跳应该是具体 bridge 的 README、配置、实现和测试。审计社区项目时,必须把“它复用了官方协议类型”和“它真的能被目标宿主加载”写成两条不同证据。

这次抽查证明了什么

本次抽查可以支持四个结论:

  1. 逐文件索引中的“模块入口”“提示词组装”“Profile 启动”“协议 codec”这些角色标签有源码依据。
  2. 工具可见性需要同时阅读 toolssystem-prompt,不能只看某一个注册调用。
  3. Plugin、Bundle、Profile patch、Hook bridge、源码 fork 和注入器必须按修改边界分别命名。
  4. 自动索引适合定位和建立下一跳,人工精读负责发现角色模板不适用、权限边界不清和测试证据不足。

它不能证明:全量源码已经被人逐行读完、所有社区插件都安全、所有 Profile 都能在 Windows 上启动,或“限制工具数量一定提升模型质量”。

以后抽查哪些文件最值得

下一批优先选择会改变“模型看见什么、宿主执行什么、用户如何扩展”的文件:

  • system prompt 的具体 section provider 和动态 context provider;
  • packages/core/tools/tests中覆盖 restrict、呈现、取消和错误的测试;
  • apps/cli的 Profile 解析、Loader 启动和退出路径;
  • hooks bridge 的配置与进程启动器;
  • MCP、shell、filesystem、sandbox 工具的权限与失败路径;
  • 社区项目的安装脚本、manifest、模块替换和卸载流程。

抽查顺序不要按文件大小排序,而要按“一个错误解释会影响多少下游判断”排序。尤其是会影响工具可见集合、权限和扩展边界的入口,应该先于普通 UI 组件。

读者自己的抽查记录模板

text
文件:
固定 commit:aa6c361a972c8369148dea7380bb5c21c24e07ec
索引卡片说了什么:
源码实际确认了什么:
同目录 README 或测试:
这个文件影响模型可见性、执行权限还是装配生命周期:
哪些是源码事实:
哪些是静态设计推论:
哪些仍需运行时验证:
下一跳文件:

如果你不能填出“仍需运行时验证”,通常说明这次阅读把静态代码和运行结果混在一起了;如果你不能填出“下一跳文件”,说明只看到了文件名,还没有形成调用或协作关系。

固定源码入口