OpenCode 源码
OpenCode 源码解析:Effect 运行时与生命周期
OpenCode 中的 Effect 不是为了把 TypeScript 写成“函数式风格”这么简单。它主要用来统一描述四件事:需要哪些依赖、可能怎样失败、怎样并发、结束时怎样清理。 例如可以把“按 ID 查会话”理解为:
6 篇文章,按发布时间排列。
OpenCode 中的 Effect 不是为了把 TypeScript 写成“函数式风格”这么简单。它主要用来统一描述四件事:需要哪些依赖、可能怎样失败、怎样并发、结束时怎样清理。 例如可以把“按 ID 查会话”理解为:
Session V2 最值得关注的变化,不是类型名后多了一个 V2,而是它重新定义了会话执行的可靠性边界:用户输入先成为持久事实,随后才唤醒执行;模型与工具产生事件,Projector 再把事件变成可查询的消息状态。 经典 loop 可
模型不能直接读文件、执行命令或访问 MCP Server。它只能产生结构化的工具调用意图;OpenCode 负责决定工具是否可见、参数是否合法、操作是否允许,以及结果怎样进入下一轮模型上下文。 经典工具规范位于 packages/ope
理解 Agent“记忆”的第一步,是把三个东西分开:数据库中的完整记录、OpenCode 内部的消息结构、某一次请求真正发给模型的上下文。它们有关联,但绝不是同一个对象。 但编程 Agent 的中间过程还包括:
这篇只追踪 packages/opencode 中的经典执行栈。目标是回答一个具体问题:用户输入“读取 README 并总结”后,系统怎样从一条消息走到工具调用,再走到最终回答? 真正的源码比这段伪代码多出的部分,几乎都在处理可靠性:权
这组笔记以一次 Agent 请求为主线,解释 OpenCode 怎样接收输入、调用模型、执行工具、保存过程,并把实时状态返回客户端。目标不是逐文件翻译源码,而是建立一套能够继续验证和更新的心智模型。 这两条线不能揉成一张伪造的调用图。笔