尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
pi agent源码阅读之agent-session 模块分析
agent-session 模块分析1. 模块定位与文件范围该模块位于packages/coding-agent/src/core,不是单一文件,而是一组协同组件:核心实现E:\Workspace\TypeScript\pi\packages\coding-agent\src\core\agent-session.tsAgentSession主类约 4023 行负责 agent 生命周期、消息处理、扩展、队列、重试、压缩、Bash、工具、模型和上下文管理E:\Workspace\TypeScript\pi\packages\coding-agent\src\core\agent-session-services.ts创建 cwd 绑定的运行时服务负责ModelRuntime、SettingsManager、ResourceLoader的组装E:\Workspace\TypeScript\pi\packages\coding-agent\src\core\agent-session-runtime.ts管理当前AgentSession实例及其替换负责 new/resume/fork/import、生命周期 teardown 和重新绑定E:\Workspace\TypeScript\pi\packages\coding-agent\src\core\sdk.tscreateAgentSession()工厂将模型、认证、资源、工具、低层Agent和SessionManager组装成AgentSessionE:\Workspace\TypeScript\pi\packages\coding-agent\src\core\session-manager.tsJSONL 会话持久化会话树、分支、叶节点、上下文投影、压缩边界和上下文编辑直接依赖的核心实现E:\Workspace\TypeScript\pi\packages\coding-agent\src\core\compaction\compaction.tstoken 估算压缩切点计算压缩准备和总结调用的底层逻辑E:\Workspace\TypeScript\pi\packages\coding-agent\src\core\compaction\index.ts压缩相关 API 汇总E:\Workspace\TypeScript\pi\packages\coding-agent\src\core\messages.tsAgentMessage、自定义消息、Bash 消息、压缩消息的转换E:\Workspace\TypeScript\pi\packages\coding-agent\src\core\extensions\index.ts扩展事件、工具、边界钩子和上下文接口E:\Workspace\TypeScript\pi\packages\coding-agent\src\core\model-runtime.ts模型和认证运行时E:\Workspace\TypeScript\pi\packages\coding-agent\src\core\resource-loader.tsskills、prompt template、system prompt、extensions 等资源加载本次分析未修改任何文件。2. 设计初衷2.1AgentSession的定位AgentSession是所有运行模式共享的会话抽象,文件头部已经明确说明其职责:文件:agent-session.ts行:1-14它被 interactive、print、RPC 等不同模式共用。模式本身只负责输入输出层,AgentSession负责:持有低层Agent将 agent 事件同步到会话持久化对外发布统一的 session 事件管理模型和 thinking level管理 steering/follow-up 消息执行手动和自动压缩执行和记录 Bash管理扩展生命周期支持会话树导航、fork、resume 和 session replacement维护 canonical session projection,确保实际发送给模型的上下文来自会话树,而不是临时内存数组核心设计可以概括为:低层 Agent ├─ 负责模型调用、工具调用、流式循环和队列 └─ 发出 AgentEvent AgentSession ├─ 接收 AgentEvent ├─ 转换并持久化到 SessionManager ├─ 调用 ExtensionRunner ├─ 处理 retry / compaction / boundary └─ 向 UI/RPC 暴露 AgentSessionEvent SessionManager ├─ 维护 append-only JSONL ├─ 维护 session tree ├─ 解析当前 leaf 分支 └─ 生成模型可见 projection2.2 为什么需要独立的AgentSessionRuntimeAgentSession本身代表“一个正在运行的会话”,而AgentSessionRuntime代表“当前会话及其可替换运行环境”。这样可以把以下两种生命周期分开:单个 session 内部:prompttool callretrycompactionqueue当前 session 被替换:/new/resume/fork/import文件:agent-session-runtime.ts行:67-72替换时先让旧 session settle、保存中断状态、触发 shutdown,再销毁旧对象并创建新对象,避免旧扩展上下文、旧事件订阅和旧 UI 引用泄漏。3. 总体对象关系3.1 创建链路入口是:sdk.ts:175createAgentSession()主要流程:createAgentSession() ├─ 解析 cwd / agentDir ├─ 创建 ModelRuntime ├─ 创建 SettingsManager ├─ 创建或复用 SessionManager ├─ 创建并 reload ResourceLoader ├─ 从 SessionManager 恢复已有 context ├─ 恢复或选择 Model ├─ 恢复或计算 ThinkingLevel ├─ 计算初始工具集合 ├─ 创建底层 Agent ├─ 写入初始 model/thinking 元数据 └─ new AgentSession(...)关键代码:sdk.ts:175-190:基础服务创建sdk.ts:193-228:恢复 session context 和 modelsdk.ts:231-256:恢复/选择 thinking levelsdk.ts:258-265:工具 allowlist/denylist 和默认工具sdk.ts:380-415:创建底层Agentsdk.ts:417-428:写入 session 元数据sdk.ts:430-445:创建AgentSession3.2 分层职责ModelRuntime负责:模型注册provider 注册auth 查询provider 刷新流式请求AgentSession不直接猜测 API key 或 endpoint,而是通过:agent-session.ts:455-493_getRequiredRequestAuth()agent-session.ts:495-522_getSummarizationRequestAuth()取得请求模型和认证信息。Agent来自@earendil-works/pi-agent-core,负责:promptcontinueabortagent looptool executionsteering queuefollow-up queueAgentEventAgentSession通过构造函数订阅:agent-session.ts:435-448SessionManager负责:JSONL 文件session headerentry appendsession treeleaf pointercontext projectionExtensionRunner负责:扩展事件分发扩展工具slash commandsession lifecycle hookturn_end/agent_before_settleboundary自定义 compaction自定义 branch summary4. 核心类型和数据结构4.1AgentSessionEvent文件:agent-session.ts:163-205它在低层AgentEvent基础上增加 session 级别事件:Agent 事件透传除agent_end外,基本继承AgentEvent。agent_end被扩展为:{type:"agent_end";messages:AgentMessage[];willRetry:boolean;}这样 UI 可以知道当前 agent 结束是否会自动 retry。Session 专属事件agent_settled所有 agent/extension 后处理完成queue_update当前 steering/follow-up 队列compaction_startcompaction_endentry_appendedsession_info_changedthinking_level_changedauto_retry_startauto_retry_endsummarization retry 事件bash_execution_update这套事件是 UI、RPC 和其他运行模式的主要观察接口。4.2AgentSessionConfig文件:agent-session.ts:220-252主要字段:字段用途agent低层 agentsessionManagersession 持久化和上下文树settingsManager配置与行为开关cwd当前工作目录scopedModelsmodel cycling 范围resourceLoaderprompt/skill/extension/system promptcustomToolsSDK 外部注册的工具modelRuntime模型和认证运行时cacheWarmerprompt cache 预热initialActiveToolNames初始激活工具allowedToolNames工具 allowlistexcludedToolNames工具 denylistbaseToolsOverride自定义基础工具extensionRunnerRef对外暴露当前 ExtensionRunnersessionStartEventsession 启动原因4.3AgentSession的主要状态变量定义位置:agent-session.ts:331-413Agent 生命周期状态_isAgentRunActive是否正在执行 agent run 或后续 continuation_agentRunAbortRequested当前 agent run 是否要求终止_idleWaitPromise_resolveIdleWaitwaitForIdle()使用的等待机制队列状态_steeringMessages运行期间插入、优先影响下一次请求的消息_followUpMessages当前 turn 完成后再处理的消息_pendingNextTurnMessages作为下一次 prompt context 注入的 custom message_pendingCustomMessages运行期间产生、但要等待当前工具结果完成后才能持久化的 custom message压缩状态_compactionAbortController手动压缩_autoCompactionAbortController自动压缩_overflowRecoveryAttempted单次上下文溢出只允许一次 compact-and-retry总结和重试状态_branchSummaryAbortControllertree navigation 的 branch summary_retryAbortControlleragent retry 的 backoff 等待_retryAttempt当前 retry 次数Bash 状态_bashAbortControllers所有正在运行的 Bash_pendingBashMessagesstreaming 期间暂存的 Bash 结果扩展和 boundary 状态_extensionRunner_tur
RELATED

相关推荐

3天从85%降到20%!这3个降AIGC网站让我AIGC检测全绿

3天从85%降到20%!这3个降AIGC网站让我AIGC检测全绿

还记得上周三凌晨两点,当我第三次收到知网AIGC检测报告时,手心都在冒汗——85%的AI相似度,40%的查重率,这意味着我的毕业论文根本达不到盲审要求。导师直接在我的初稿上批注“学术合规性存疑,建议重写”。距离最终答辩…

📅 2026/10/3 16:47:10
wifiqr 0.3.4 Windows x64 下载:Wi-Fi 二维码生成工具 ZIP

wifiqr 0.3.4 Windows x64 下载:Wi-Fi 二维码生成工具 ZIP

wifiqr 0.3.4 Windows x64 ZIP 下载入口 需要把自己的 Wi-Fi 信息做成二维码,供已获准使用网络的人扫码连接,可以使用 wifiqr。本文对应 0.3.4 的 Windows x64 文件 wifiqr_0.3.4_windows_x86_64.zip,夸克分享列表显示 1.9M。 下载的是命令…

📅 2026/10/3 16:47:10
数值分析——牛顿前插公式和牛顿后插公式

数值分析——牛顿前插公式和牛顿后插公式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章 目录 文章目录 前言 一、核心算法原理 二、 C 完整代码 三、运行结果 总结 前言 基于C编写了一套完整的代码。这套代码不仅实现了牛顿前插公式和牛顿后插公式&#xff…

📅 2026/10/3 16:47:10
MORE NEWS

更多资讯

📰

Operit 局域网 External HTTP Chat API 实战指南:从鉴权到同步/SSE/异步回调三种调用模式

AI Agent人工智能大模型AI 应用工具调用本地部署MCP ClientsAgent 记忆 【免费下载链接】Operit The most powerful AI agent and AI chat software on Android/Operit是一款Android上能力最为强大、发展最久的AI Agent 项目地址: https://gitcode.com/gh_mirrors/o…

📰

本地补丁彻底解除 Wand 免费时长限制,全程不碰服务器

本地补丁彻底解除 Wand 免费时长限制,全程不碰服务器 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 每天用到第二小时,弹窗…

📰

在 Java 中本地运行 LLM:Jlama 与 LangChain4j 集成实战指南

示例工程 【免费下载链接】langchain4j-examples 项目地址: https://gitcode.com/GitHub_Trending/la/langchain4j-examples 点击查看 免费下载 导读 Jlama 是一个基于纯 Java 实现的现代 LLM 推理库,它利用 Java 20 的 Panama Vector API 实现快速推理…

📰

Godot 窗口管理与 DisplayServer 完整实战指南:window_management 演示项目深度解析

示例工程 【免费下载链接】godot-demo-projects Demonstration and Template Projects 项目地址: https://gitcode.com/GitHub_Trending/go/godot-demo-projects 点击查看 免费下载 本文基于 godot-demo-projects 仓库中的 window_management 演示项目,…

📰

Kinsta 远程办公档案全解析:remoteintech.company 中 fully-remote 公司条目的数据模型与工程实践

数据集 【免费下载链接】remote-jobs Source for remoteintech.company — a community-maintained directory of remote-friendly tech companies 项目地址: https://gitcode.com/GitHub_Trending/re/remote-jobs 点击查看 免费下载 Kinsta 是 remoteintech.compa…

📰

Notepad-- 新手指南:乱码、批量替换、版本对比一次搞定

Notepad-- 新手指南:乱码、批量替换、版本对比一次搞定 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- 核心…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬