Pi SDK 学习笔记(二):事件流与 SSE
上一篇把最小会话跑起来了:ModelRuntime + createAgentSession 在进程内订阅 text_delta、finally 里 dispose()。这一篇把它搬到 HTTP 上——用一个稳定的公开事件协议把内部事件流喂给浏览器,并处理好 SSE 的建流、心跳、断连和错误帧。 这一篇是把「进程内的 AgentSession」变成「跨信任边界的服务」的第一步,核心是事件映射和安全边界。
上一篇把最小会话跑起来了:ModelRuntime + createAgentSession 在进程内订阅 text_delta、finally 里 dispose()。这一篇把它搬到 HTTP 上——用一个稳定的公开事件协议把内部事件流喂给浏览器,并处理好 SSE 的建流、心跳、断连和错误帧。 这一篇是把「进程内的 AgentSession」变成「跨信任边界的服务」的第一步,核心是事件映射和安全边界。
最近在认真看 Pi SDK,想把它真正嵌进自己的程序里。光读官方示例容易囫囵吞枣,所以我从最小的命令行调用开始自己写,打算一步步把它长成支持多会话、SSE、工具策略和持久化的 Web Agent。这篇记第一段做的事:最小会话与模型运行时。 目标看起来很轻——用 OpenAI Chat Completions 兼容服务跑通一个内存会话,订阅文本增量,dispose() 收尾。但真正动手会发现几个容易糊过去的概念得先摆到台面上:ModelRuntime、AgentSession、SessionManager 的边界;「模型已注册」和「模型已有有效认证」是两回事;以及为什么不该直接用无参数的 createAgentSession()。
上一篇装完 Pi CLI 和第一批 Extension,也完成了模型调用。不过那时的 Pi 仍然很接近它所说的 minimal harness:能工作,但 Plan Mode、Goal Mode、Subagent、MCP 和 Workspace History 都要我们自己定制。 这次继续看七个包: pi install npm:pi-slopchop pi install npm:@narumitw/pi-goal pi install npm:@narumitw/pi-plan-mode pi install npm:pi-subagents pi install npm:pi-btw pi install npm:pi-mcp-adapter pi install npm:pi-workspace-history 这里最需要先处理的是 pi-subagents。上一篇已经安装了 @router-for-me/pi-subagents-lite,两边做的都是 Subagent。我想先弄清楚它们会不会冲突,以及功能更完整的那一个到底多了什么。
最近准备认真看一下 Pi Coding Agent。它把自己定义成一个 minimal terminal coding harness:核心只提供一套能工作的终端 Coding Agent,sub-agent、plan mode 等能力没有全部内置,而是留给 Extension、Skill、Prompt Template、Theme 和 Pi Package。
看到 OpenAI 新发的《Custom Code Review rules for Codex》时,我一开始以为它讲的是 GitHub PR 里的 @codex review。实际试着梳理文档后才发现,Codex 里至少有三种容易混在一起的代码审查入口:交互式 /review、非交互式 codex review,以及 GitHub PR 中的云端审查。 它们都叫 Code Review,但运行位置、输入范围和输出去向并不相同。AGENTS.md 又在其中增加了一层:除了告诉 Codex 怎样写代码,现在也可以告诉它审查时要特别留意什么。
两家公司给自己的 AI Agent 分别推出了 Chrome 扩展。表面上都是"让 AI 能操作浏览器",但出发点几乎相反:Claude in Chrome 是把 AI 嵌进浏览器里,Codex Chrome 扩展是把浏览器接进 AI 任务系统里。 产品定位 Claude in Chrome 是 claude.ai 的浏览器扩展,主要形态是侧边栏。浏览时 Claude 在旁边响应,可以读当前页面、执行操作、或者后台跑多步骤工作流。也对接了 Claude Desktop,可以在桌面端控制浏览器。
Codex Security Plugin不是一个独立的安全工具,而是以插件形式嵌入到 Codex 工作流中的漏洞扫描系统。这篇文章整理一下它的工作原理、扫描流程和 CI/CD 集成方案,也对比一下它和传统静态分析工具的思路差异。 背景:为什么是插件而不是独立工具 传统的代码安全扫描(SAST)工具,比如 Semgrep、CodeQL、SonarQube,走的是规则匹配的路子:维护一套漏洞特征规则库,扫描代码时对模式进行匹配,找出潜在问题。这类工具的优点是确定性强、速度快、可以自动化集成。缺点也很明显——规则库覆盖不到的变种绕过不了,误报率偏高,而且几乎没有对业务逻辑的理解能力。
Claude Code 现在支持 Artifacts —— 一句话版:你让 Claude Code 干活时,它可以把过程和结果生成一个可交互的网页,分享给团队看,而且会随着 Claude Code 继续工作自动更新。 Artifact 是什么 以前 Claude Code 的工作成果散在终端输出和对话里。查完 bug、读完代码、推理出根因之后,要把这些东西传递给其他人,只能截图、复制粘贴、或者口头转述。Claude Code 的 Artifacts 把这些工作打包成一个可访问的网页。
Codex 的远程连接不是一个功能,而是两套相互独立的方案,分别服务于 Desktop App 和 CLI,适用场景和限制也完全不同。 两套方案概览 主机端 客户端 传输协议 Remote Connections Codex Desktop App ChatGPT 手机 App 专有协议 Remote TUI Codex CLI(app-server) 另一台机器的 Codex CLI WebSocket 两者之间没有交集:手机 App 只能连 Desktop App,另一台 CLI 只能连 CLI 的 app-server,不能混用。
Claude Code 2.1.51 之后加了一个叫 Remote Control 的功能,允许在 claude.ai/code 或 Claude 手机 App 上远程操控本地正在运行的会话。Mac 上用起来基本开箱即用,但在 Linux 上配置的过程里遇到了一个不太直观的坑,记录下来。 Remote Control 是什么 和 Claude Code on the web(在 Anthropic 云端跑)不同,Remote Control 的会话始终运行在本地机器上,远程界面只是一个窗口。这意味着: