跳至内容

15 分钟动手任务单:从首页到第一次产出

这是一张“照着点就行”的任务单。你只需要会打开链接、读中文和写几句话,不需要下载源码、不需要 API key、不需要安装 pnpm,也不需要先会 TypeScript。

本页目标从首页走到第一条记录按顺序点击,不在 2,973 个索引条目里迷路。
预计时间约 15 分钟前 5 分钟认识概念,后 10 分钟追一个固定版本文件。
前置条件只需要网页不需要下载、API key、pnpm 或 TypeScript。
完成标志写出已证明 / 未证明下一位读者能从你的链接回到同一个源码版本。

先看这张任务卡

项目这一轮的答案
预计时间先用约 5 分钟认识 DSH,再用约 10 分钟追一个固定版本文件并留下记录;读不懂时停下来查词,不需要硬撑到读完所有专题
前置条件只需 GitHub 网页或 Pages;不需要终端、API key、pnpm 或 TypeScript 基础
你会产出一条带固定版本源码链接的学习记录,包含“已证明”和“还没有证明”
这一步不证明什么真实 DSH Profile 已启动、模型表现、第三方插件安全、跨版本兼容或操作系统权限隔离
完成条件你不需要读完全部教材
01找到一个固定版本源文件
02写清它的用途和直接协作者
03写出已经证明与仍未证明

先分清 5 分钟和 15 分钟

前 5 分钟只做两件事:读从零开始读 DSH的六个词,并打开仓库地图看目录分工。做到这里,你已经知道 DSH 在解决什么问题,可以先停下来。

完整的 15 分钟产出再多做三件事:选择一条路线、打开一个固定版本源文件、写下用途、设计原因、源码证据和未验证范围。这样“认识 DSH”和“完成一次源码阅读记录”不会被混成一个模糊的时间承诺。

做完以后你会得到什么

你会完成一份最小学习记录:知道 DSH 的一个概念、找到一个固定版本源文件、说清它解决什么问题,并写下当前还没有被运行验证的地方。

这份记录比“我看过很多页面”更有用,因为它留下了一个可以继续追踪的源码入口。

第一步:只打开学习首页

打开 DSH 源码学习首页,点击“第一次来,按这里走”,再打开从这里开始。第一次不要点 Code,不要创建 Codespace,也不要从逐文件索引第一页开始顺序阅读。

如果你已经在 GitHub 仓库页面,点击 README 最上方的开始学习入口也可以;它和 Pages 的学习入口指向同一条路线。

第二步:只读两篇基础课

先读从零开始读 DSH,只记住“插件、服务、事件、Profile、Bundle、Turn”六个词;再读仓库地图,只回答“功能包放在哪里、启动从哪里开始、测试线索在哪里”三个问题。

读不懂时不要跳到索引。回到这两篇文章,把问题改写成“它接收什么、产出什么、由谁使用”,再继续往下读。

第三步:只选一条路线

你现在最关心什么接下来点击这一轮要回答的问题
我担心工具名称太多、上下文太长工具预算与插件责任决策卡工具可见性与非侵入扩展工具可见集合观测与性能实验已注册、agent 可解析、模型实际呈现和执行允许为什么不是一回事?
我想写一个普通插件工具预算与插件责任决策卡社区生态与扩展边界如何写一个合规插件怎样使用公开 API,并让注册、资源和卸载有主人?
我想先实际改一个最小示例(需要终端)最小插件示例与学习检查怎样运行单元测试和 lint,同时不把它误写成真实 DSH 验证?
我想知道测试、lint 和 Agent 审阅分别管什么学习仓库的质量检查与审阅怎样让确定性检查阻止回归,同时不把模型意见或 Actions 绿色误写成完整运行证明?
我想不改源码做 Hook工具预算与插件责任决策卡社区生态与扩展边界官方 Hook Bridge 与兼容层这是普通插件、Hook bridge,还是运行时补丁?
我只想查一个具体文件逐文件索引导航这个文件做什么、为什么独立、谁使用它、下一跳是什么?
我想知道以后还可以研究什么后续研究路线哪些工作现在能做,哪些工作必须有宿主、模型或维护权限?

不要同时打开所有路线。先选一行,读到能回答最后一列就停下来。

第四步:找到一个固定版本文件

逐文件索引导航中选一个功能组,例如 packages/core;打开其中一张文件卡片,再点击卡片里的固定源码链接。

文件卡片是定位工具,不是逐行人工翻译,也不是运行时证明。你要把卡片的解释和固定提交源码对照一次,看看“用途”和“直接协作者”是否符合源码事实。

第五步:复制这张学习记录

把下面的模板复制到自己的 GitHub gist、个人笔记或仓库分支中,填完它就是你的第一次学习产出。

text
我今天研究的问题:

我选择的源文件:

这个文件解决什么问题:

为什么它独立放在这里:

它的直接协作者或下一跳:

我在固定提交源码中看到的证据:

我现在已经证明了什么:

我还没有证明什么:

下一步要读的源码或测试:

“我还没有证明什么”必须填写。比如,看到 system prompt 里组装了工具 schema,可以支持“工具定义会进入组装路径”的静态结论;不能只凭这个结论写成“某个 provider 的 token、缓存命中率或模型质量已经实测”。

先看一份填好的答案

下面不是唯一正确答案,只是让第一次做任务的人知道“写到什么程度就可以停”。它选择了学习示例里的公开观察事件,没有把静态测试包装成真实 DSH 运行:

text
我今天研究的问题:一个插件能不能只观察工具结果,而不改写工具行为?

我选择的源文件:study-examples/minimal-observer-plugin/src/index.js

这个文件解决什么问题:订阅 tools/result,校验配置,并把文本结果压缩成限长预览。

为什么它独立放在这里:观察逻辑、配置校验和示例测试可以先在不启动 DSH 的情况下单独理解;以后换成真实 Loader 时,失败范围更容易定位。

它的直接协作者或下一跳:tests/plugin.test.js、cordis.patch.yml,以及真实安装时的 Profile/Loader。

我在固定提交源码中看到的证据:入口调用公开的 ctx.on('tools/result', ...),测试断言预览限长且传入结果没有被修改。

我现在已经证明了什么:示例自己的事件登记、配置校验和预览行为通过 Node 单元测试;JavaScript 通过示例 lint。

我还没有证明什么:真实 DSH Profile/Loader 已加载它、Fiber 卸载无残留、模型 token 变少、跨版本兼容或安全性。

下一步要读的源码或测试:study/19-插件测试卸载与版本证据.md,再决定是否补 Loader 组合测试。

如果你还不知道一个文件的“为什么”,先写“我从源码看到的边界”,不要凭感觉补一句漂亮的设计理由。学习记录的价值在于能让下一个人回到同一个固定文件继续核对。

如果你研究“万物皆插件”,照这个顺序问

先读工具预算与插件责任决策卡,再问“插件化解决了什么”:它让能力可以装配、替换、提供和卸载;它不要求每个 agent 每轮把全部工具都交给模型。

再问“工具现在在哪一层”:分别记录已注册集合、当前 agent 可解析集合、presentAs() 与最终组装出的模型呈现,以及这次执行是否被允许。在 DSH 的同一 agent 作用域中,restrict() 会同时影响工具查找和 native schema 组装;被筛掉的工具会像未知工具一样不能由该 agent 分发。不要把“界面没显示”当成“模型没收到”,也不要把“模型看不见”当成“操作系统权限已经收紧”。

最后问“谁应该改什么”:普通插件优先使用公开服务、事件、工具注册和 Bundle;缺少公开扩展点时由宿主维护者提出接口或维护 patched fork;读取私有 registry、模块缓存、进程或注册表的方案必须单独标成运行时补丁或注入器。

什么时候才需要打开 Codespaces

只读文章、固定源码链接和索引:留在 GitHub 网页或 Pages。

想搜索文件、写少量 Markdown 笔记:可以打开 github.dev,但它没有终端,不能证明 DSH 或插件已经运行。

想执行离线索引检查器、构建文档或做隔离实验:先读GitHub 网页、github.dev 与 Codespaces 学习路线,再考虑 Codespaces 的额度、费用和清理。

想跑真实模型 A/B 实验:还需要固定模型、provider、工具集合、上下文、平台和时间,并保存脱敏快照;不能用一次网页阅读替代实验。

完成标准

  • [ ] 我能用自己的话解释插件和服务的区别。
  • [ ] 我能指出一个固定版本源文件,并打开它的源码链接。
  • [ ] 我写清了一个用途、一个设计原因和一个下一跳。
  • [ ] 我把静态源码证据和运行时证据分开。
  • [ ] 我没有因为看到 44 条模板复用统计,就把它写成 DSH 运行时错误。

完成后,回到学习首页选择第二条主链路;如果想把学习推进到可复核实验,打开后续研究路线。如果你已经动手改过示例,再读学习仓库的质量检查与审阅,把“本地通过”和“可以对外声称什么”分开。

固定版本入口

本教材的源码解释固定在 aa6c361a972c8369148dea7380bb5c21c24e07ec。未来上游变化时,先读维护、更新与版本迁移,不要把新旧 commit 的结论混在同一张学习记录里。