跳转至

独立源码与图示初审

发布者说明:下文保留初审结论;仅将本机路径链接转换为固定 GitHub 源码或课程网址。初审失败不代表修正后的最终状态,参见单独复验报告。

Pi:PASS。DSH:FAIL。 判定范围仅为本次检查的源码命题、设计解释和正文图示语义。

已读取两套课程的 index、Pi 01–20、DSH 01–26,以及 examples 的关键业务路径;核对正文全部 68 张 Mermaid 图:Pi 22 张、DSH 46 张。发现 DSH 2 处必须修正的语义错误、1 处非阻断的时序表达歧义。Pi 未发现本范围内的阻断问题。

这是本次单独的独立审查,不代表其他独立审查已经完成。当前工具没有提供可核验的模型身份信息,因此不能额外认证本报告由 Astra 执行。

审查基线与方法

项目 实际核对的版本
Pi 核心 pi-1.0.1,a7229ddc21810d6245105978033b7df645ecc2f7
Pi main 增量 83692682f095528f8b71652ddacff7075e36e893
DSH 核心 upstream,da00f7f5358f2949383b35c14f548bc20187d80c
DSH 实验/release rc.2,639ed015397290b3745d163aafe02ffee4aa3f84
DSH master 增量 5badb15009ae1756c3afe0ae0cef1faafc290ccc,单独核对 alpha 发布渠道变化

没有打开 research、appendix 中的作者 PASS 或其他审查报告,没有以其结论佐证。本次只读源码和正文,以调用者、实现、消费者共同核对命题。

另完成静态交叉检查:415 处固定核心 SHA 源码链接的文件及起始行均存在;Pi 32 项、DSH 192 项源码阅读表行数一致;DSH 114 项范围计数和 357 项 manifest 表与固定工作树一致。这些检查不等于运行证明。

发现的问题

D1 · 中等/阻断本次 PASS:preset 图把注册时挂载画成会话选择时挂载。

  • 位置:04-boot-and-presets.md:123,第二张图,重点为第 125–127 行。
  • 图示顺序为:会话选择 preset → 查 revision → prepareProfileEntries / mount → audit → 绑定 Agent。这会让读者理解为会话创建触发一次新的 preset 子树挂载,与共享常驻 revision 的设计不同。
  • 固定源码:注册与 activate在定义注册时立即调用 activate(),其中 mountPreset() 创建 generation。会话 mount只执行 retain()、bind() 和引用释放。选择时可以重新审计现有树,但不会重新创建该树。
  • 最小修法:将图拆成两个阶段:
    “定义注册/更新 → activate → mount → audit → 保存 revision”;
    “会话选择 → retain 现有 revision/检查可用性 → bindScopeParent”。
    保留多 Agent 共享和引用计数回收说明。邻近正文已有正确解释,主要需修图。

D2 · 中等/阻断本次 PASS:限时提问图错误合并了无 provider 的失败路径。

  • 位置:17-human-and-automation.md:69,第二张图:Asking --> Failed: 无 provider / 非法问题 / 取消。
  • 同一图也包含 timed wait,但在有效的限时请求中,无 provider 不会立即走这个失败终态。
  • 固定源码:askTimed在第 254–256 行捕获 NO_PROVIDER 后等待前台窗口结束;第 261 行将 ASK_TIMED_OUT 转为 { pending: true, callId }。工具调用方明确区分限时和无限等待路径。
  • 最小修法:为无 provider 加条件:普通/无限等待的 ask → Failed(NO_PROVIDER);限时 askTimed → 继续等待 → 超时后 Continued。非法问题、取消仍走失败。第 60 行补充“底层 ask 抛出,timed 包装会捕获并等待”。

D3 · 低/非阻断:Schedule 图没有明确表示 Agent 执行与 receipt 提交可以交错。

  • 位置:17-human-and-automation.md:129,第四张图;执行任务的自调用放在第 134 行、receipt 之后。
  • 固定源码:Schedule runtime先 followup(),再等待 Session flush、提交 task receipt;Agent.followup/send已经唤醒 driver。因此 receipt 不是启动执行的屏障。
  • 图没有明确声明该屏障,正文也正确区分 delivered 与 succeeded,故不据此单独判 FAIL;但当前垂直排列容易产生过强理解。
  • 最小修法:在 followup 后用并行区块表示“Agent 活动”和“flush → receipt”,或增加注释“Agent 已被唤醒,可与持久化及 receipt 提交交错”。

以上是课程表达问题,不是据此认定上游存在安全漏洞。D1、D2 已足以使 DSH 在本轮范围内判为 FAIL。

Pi 逐章与全部图示结果

文件均相对 Pi docs。图号按每个文件内的出现顺序编号,L 为 Mermaid 围栏起始行。PASS 表示核对了图中实体、条件和顺序,并结合正文检查失败、权限与持久化边界。

正文文件 章节结论 Mermaid 结果
index.md PASS:课程层次与固定版本定位一致。 无
01-version-roadmap.md PASS:1.0.1 为当前基线,旧 1.0 属历史。 无
02-design.md PASS:AI、Agent、SDK 与产品层的职责区分成立。 #1 L23 PASS;#2 L48 PASS
03-usage.md PASS:安装、配置和日常用法与固定版本相容;未执行安装。 无
04-models-messages.md PASS:消息转换、transcript 与 provider 适配条件准确,未将转换当作校验。 #1 L80 PASS;#2 L106 PASS
source/05-agent-loop.md PASS:准备请求、工具批次、结束条件和事件屏障符合实现。 #1 L24 PASS;#2 L137 PASS
source/06-session.md PASS:SDK 工厂、AgentSession、公开事件与日志追加边界准确。 #1 L21 PASS;#2 L98 PASS
source/07-context.md PASS:会话树、投影、usage 估算、合法切点及 split-turn 摘要有实现依据。 #1 L28 PASS;#2 L90 PASS;#3 L128 PASS;#4 L156 PASS;#5 L212 PASS
source/08-tools-extensions.md PASS:schema 在 hook 前、可变参数、短路阻断及项目 trust 的解释准确。 #1 L123 PASS;#2 L157 PASS
source/09-mcp-codemode.md PASS:1.0.1 配置合并、重试分类、嵌套工具权限、CodeMode 限制与提交时机准确。 #1 L22 PASS
source/10-interfaces.md PASS:TUI、RPC、session router 和协议边界没有混同。 #1 L21 PASS;#2 L100 PASS
source/11-durable.md PASS:intent/commit、重放、单所有者及 Chord 生命周期说明有依据。 #1 L66 PASS
labs/12-customize.md PASS:扩展及资源组合与示例实现对应。 无
labs/13-core.md PASS:搜索、读取收据、提交引用和预算控制的业务链成立。 无
labs/14-sdk.md PASS:恢复历史不重新授予读取收据;宿主职责与 SDK 能力区分清楚。 #1 L131 PASS
labs/15-production.md PASS:settled 后由宿主验收、在预算内继续的设计成立。 #1 L69 PASS
16-troubleshooting.md PASS:故障定位按层区分,反例与控制流对应。 #1 L7 PASS
17-source-map.md PASS:地图与固定源码匹配,没有把生成清单等同全库审计。 无
18-validation.md PASS:未完成交付项目保持 PENDING;不据此否定源码内容。 无
19-deployment.md PASS:部署说明作为操作方案成立;网站、下载未验收。 无
20-review-and-version-delta.md PASS:独立核对版本增量,未借用正文中的既有审查结论。 无

Pi 图示合计:22/22 PASS。

Pi 关键命题进一步核对如下:

  • 工具参数先做 schema 处理,再进入 beforeToolCall;hook 修改后的参数并没有自动再跑一遍相同校验。并行工具执行与结果提交顺序也分别处理。
  • Core 的异步事件监听屏障与 AgentSession 面向外部的同步通知不是同一种契约,课程没有混为一谈。
  • SDK 重开会话恢复的是历史与投影;示例新建工具实例中的 receipts 仍为空,不能凭历史引用直接提交新任务。
  • MCP 设置型覆盖与完整连接 entry 替换不同;普通瞬态错误、只读重试和 session expired 重连的条件不同。
  • CodeMode 的宿主工具调用仍经过权限路径;输出限制、执行失败与 store 提交边界有源码支撑。

DSH 逐章与全部图示结果

文件均相对 DSH docs。PASS* 表示语义可成立,但有上述 D3 表达建议。

正文文件 章节结论 Mermaid 结果
index.md PASS:整体组成及阅读路线成立。 #1 L21 PASS
01-version-roadmap.md PASS:核心快照、rc.2 实验和发布身份区分清楚。 无
02-design.md PASS:插件组合、服务替换和产品装配的取舍有实现依据。 #1 L36 PASS
03-cordis.md PASS:服务可见性、事件语义、效果清理及重载边界准确。 #1 L15 PASS;#2 L66 PASS;#3 L125 PASS
04-boot-and-presets.md FAIL:第二图挂载时机错误,见 D1;其余启动、配置和 preset 解释通过。 #1 L37 PASS;#2 L116 FAIL D1
05-session.md PASS:事实日志、append 准入、派生消息和 fork 修复边界成立。 #1 L105 PASS
06-projection-and-prompt.md PASS:projection 注册/复用及下一请求快照的解释准确。 #1 L26 PASS;#2 L129 PASS
07-agent-loop.md PASS:收信、accepted step、空输入、取消、工具结果有序追加成立。 #1 L9 PASS;#2 L73 PASS;#3 L119 PASS
08-tools.md PASS:可见性不等于许可;参数、pre、guard、around、body、post 顺序对应实现。 #1 L73 PASS
09-llm-and-context.md PASS:retry 在模型步骤内部;适配、压缩及失败提交边界准确。 #1 L22 PASS;#2 L82 PASS;#3 L128 PASS
10-execution-and-sandbox.md PASS:FS 策略检查、shell 进程隔离和 LSP 启动路径没有混同。 #1 L24 PASS;#2 L55 PASS
11-ptc-and-workflows.md PASS:PTC 进程约束、有序提交及独占屏障成立;VM 未被当作安全边界。 #1 L18 PASS;#2 L89 PASS;#3 L160 PASS
12-mcp-and-bridges.md PASS:工具更新两阶段、冲突失败及 transport/hook 边界准确。 #1 L54 PASS;#2 L103 PASS
13-agents-and-goals.md PASS:Agent、Job、Goal、Schedule 的所有权和持续工作机制有区分。 #1 L5 PASS;#2 L124 PASS
14-sdk.md PASS:SDK 请求生命周期、订阅顺序及 TS/Python 差异对应实现。 #1 L18 PASS;#2 L140 PASS
15-ui-and-api.md PASS:认证、Host/Origin 检查、文件发布和冷历史查询边界准确。 #1 L30 PASS;#2 L64 PASS;#3 L107 PASS;#4 L142 PASS
16-storage-and-migrations.md PASS:buffer、flush、close、lease、迁移发布及索引职责准确。 #1 L25 PASS;#2 L61 PASS;#3 L106 PASS;#4 L135 PASS
17-human-and-automation.md FAIL:限时提问分支错误,见 D2;Schedule 图另有 D3 歧义。审批、计划、Webhook 和身份路径通过。 #1 L32 PASS;#2 L64 FAIL D2;#3 L86 PASS;#4 L119 PASS* D3;#5 L149 PASS;#6 L185 PASS
18-own-plugin.md PASS:笔记服务替换、读取证据和工具消费者对应示例。 #1 L71 PASS
19-own-agent.md PASS:组合、预算、持久化所有权明确,未把 retry 数当步骤预算。 #1 L9 PASS
20-sdk-labs.md PASS:双语言路径、mock 请求和保存后冷读的解释与代码一致。 无
21-compare-pi.md PASS:比较基于不同组合和生命周期边界,没有制造能力等价。 #1 L26 PASS
22-deployment.md PASS:部署说明在静态范围内成立;网站交付留待验收。 无
23-source-map.md PASS:范围、manifest 和阅读表与快照对应,覆盖声明有边界。 无
24-troubleshooting-and-tests.md PASS:故障层次和检查方法与实现对应;未复跑所列测试。 #1 L18 PASS
25-review.md PASS:PENDING 是交付状态;没有作为内容缺陷,也未采用其他审查结论。 无
26-version-delta.md PASS:rc.2、核心基线和 alpha 发布增量分别解释,没有把 alpha 增量归入 rc.2。 无

DSH 图示合计:44 张通过,其中 1 张带非阻断建议;2 张失败。

DSH 重点命题进一步核对如下:

  • Cordis 的服务定义、provider、scope 与事件派发具有不同职责;同步 emit、异步聚合和 waterfall 的语义没有混写。
  • Session 是事实来源,模型请求来自 projection/assembly;记录事件不等于立即持久化,也不等于所有观察者都具有执行屏障。
  • 模型步骤预算约束 accepted step;单步内部 retry 可以增加实际请求次数。
  • 工具出现在 catalog 不代表 body 获得许可,执行路径仍经过 gate。
  • 官方 JSONL 的只读 open 是冷读,不创建活动 Agent;恢复运行还涉及 writer、修复、scope 和 Agent 生命周期。
  • LSP 经 subprocess 启动,不因同宿主的 shell 使用 sandbox 就自动继承该隔离。
  • master 的 alpha 增量主要涉及版本、依赖和发布渠道逻辑;本轮未发现其修改课程核心 Agent/tool/Session 算法,实验仍以 rc.2 为准。

实际追踪的主要源码锚点

以下为本次实际检查的关键实现,属于证据入口,不表示这些文件所在仓库已全部逐行安全审计。

项目/命题 主要源码锚点
Pi 消息转换 transcript.ts、Anthropic 适配
Pi schema/hook/工具执行 agent-loop.ts、扩展 runner
Pi 事件屏障与 Session Agent.processEvents、AgentSession
Pi 恢复与压缩 SessionManager、compaction
Pi MCP 1.0.1 配置合并、重试条件、OAuth flow
Pi CodeMode 执行与提交、累计输出限制
Pi Durable/Chord 工具事务、JSONL 提交顺序、facet 激活
Pi examples 收据恢复 sdk-checkpoint.ts、evidence-tools.ts
DSH Session/投影 Session append、派生消息
DSH 步骤与工具提交 Agent turn/step、tool-calls
DSH 工具许可与 schema 执行管道、defineTool
DSH SDK 与冷读 SDK client、SDK server、JSONL open
DSH 持久化屏障 JSONL flush/close、checkpoint policy
DSH 执行隔离 LSP subprocess、shell sandbox、FS 策略检查
DSH workflow 边界 VM runtime、跨 realm 数据处理

examples 还实际追踪了 Pi 的 core/SDK 请求、离线检查点、投影、预算及扩展路径,以及 DSH 的笔记服务、内存/JSON provider、策略、组合、检查点、mock server、保存会话读取和 Python 调用路径。DSH vendored 的五个 Python SDK 文件与 rc.2 源文件逐个字节比对一致。

未测试边界

  • 没有修改文件、启动子 agent、重新安装依赖或运行课程/上游测试。
  • 没有调用真实模型、OAuth、收费服务,也没有做公网、网站、下载包或跨平台验收。
  • Mermaid 结论来自源码与图文本的语义核对,没有运行渲染器或做页面视觉验收。
  • 没有重新查询 npm/PyPI 公网 dist-tag;版本增量结论基于已下载 Git 对象,不能当作当前公网渠道状态证明。
  • Pi 18、DSH 25 的 PENDING 保持为诚实的待验收状态。
  • 本报告不承诺整个上游仓库的全行安全审计。DSH 修正 D1、D2 后仍需复核相关图与邻近正文,当前结论保持 FAIL。