乐于分享
好东西不私藏

源码拆解Pi-Agent:58.4k stars的极简编程智能体的记忆管理策略

源码拆解Pi-Agent:58.4k stars的极简编程智能体的记忆管理策略

源码级拆解存储结构、压缩机制与树分支逻辑

什么是 Pi?

如果你关注 Coding Agent,可能听说过 Pi Coding Agent——GitHub 上一个极简的终端原生 AI 编码工具,目前 58.4k stars,MIT 协议开源。

产品定位Pi Coding Agent终端原生 AI 编码助手作者: Mario Zechner核心特点:- 极简内核 + 富扩展生态- 只给模型 4 个工具- 不内置 MCP/子代理/权限弹窗- 4 种运行模式 (CLI/Print/RPC/SDK)GitHub: earendil-works/piStars: 58.4k | Commits: 4,377版本: v0.78.0 | 语言: TypeScript设计哲学"刻意不做"不做 MCP 集成不做子代理不做权限弹窗不做计划模式不做跨会话记忆不做 RAG 检索本质:"让 Agent 适应你的工作流,而不是让你适应 Agent"一切高级功能通过扩展实现技术架构四层架构:pi-coding-agent (应用层)Agent Runtime + Terminal UIpi-ai 统一 LLM API扩展生态 (Extension/Skills)默认 4 个工具:read / write / edit / bash编译: tsgo (Go 实现 TS)构建: Bun | 测试: Vitest

图 1 | Pi Coding Agent 产品概览

简单说,Pi 是什么?

Pi 是一个开源的 AI 编码 Agent 工具,它的核心能力:你用自然语言告诉它想做什么,它调用 LLM 读写文件、执行命令,帮你完成编码任务。

但和我们熟悉的 Cursor、Windsurf 等产品不同,Pi 刻意走了一条"极简内核"路线。它不内置任何高级功能——没有 MCP 集成、没有子代理、没有权限弹窗、没有计划模式。这些功能全部通过扩展生态让用户自行组装。

Pi 的核心设计哲学——"刻意不做"

Pi 的作者 Mario Zechner 在博客中花了大量篇幅解释为什么不做这些功能。每一个"不做"背后都有一个清晰的论证:不是"做不到",而是"做了会让产品更差"。比如不做计划模式,是因为模型在执行中需要根据反馈动态调整,静态计划反而成为约束。

本质上,Pi 是一个"AI 编码 Agent 的 Linux"——极简内核,一切靠包管理和扩展生态。它的核心竞争力不在功能丰富度,而在架构的克制和扩展机制的表达力。

本文焦点

为什么要研究它的记忆管理?

Agent 产品设计中,记忆管理是最容易被忽视、但又最影响体验的关键环节。它决定了:当对话越来越长时,Agent 会不会"忘了"你之前的指令?当你回退到某个中间节点重新开始时,之前的信息怎么处理?上下文窗口快满时,系统怎么做取舍?

本文深入 Pi 的源码(v0.78.0),系统拆解它的记忆管理策略——包括记忆如何存储、上下文如何构建、压缩如何触发、树分支如何运作,并提炼出设计思考。

本文范围:聚焦 Pi 的记忆层(存储、压缩、分支),不涉及规划层、执行层、扩展体系等其他部分。

文章目录

  1. 一、记忆架构总览
     — 一个文件,两种用途
  2. 二、记忆如何存储
     — JSONL 格式、11 种条目、消息粒度
  3. 三、上下文如何构建
     — 从叶子到根的遍历算法
  4. 四、两种摘要机制
     — CompactionEntry 与 BranchSummaryEntry 对比,触发条件、摘要生成、增量更新
  5. 五、树分支机制详解
     — leaf 指针、BranchSummary、孤儿节点
  6. 六、设计思考与同类对比
     — Pi vs Claude Code 记忆策略对比

一、记忆架构总览:一个文件,两种用途

Pi 的记忆系统用一个 JSONL 文件承载所有信息,但这个文件被两种不同的方式使用:

Pi 记忆架构:存储层 vs 上下文层存储层 — JSONL 文件(永久不删)对话内容条目:message (user / assistant / toolResult / bash)custom_message (扩展注入,LLM 可见)元数据条目:compaction (压缩摘要 + firstKeptEntryId)branch_summary (放弃分支的摘要)leaf / model_change / label / custom只追加,不修改,不删除上下文层 — 动态构建(发给 LLM)直接使用:原始 message → 原封不动发给 LLM转换为合成消息:compaction → compactionSummarybranch_summary → branchSummary跳过:leaf / model_change / custom → 不参与每次交互从叶子到根动态生成构建

图 2 | 存储层包含所有信息(完整记录),上下文层是每次动态生成的子集(发给 LLM)

核心原则

存储层(JSONL 文件)只追加不修改不删除——即使压缩了旧消息,原始文本仍然在文件里。

上下文层是每次和 LLM 交互时,从当前叶子节点沿 parentId 链回溯到根,动态构建的消息数组。


二、记忆如何存储

2.1 JSONL 格式:每行一个独立条目

Pi 把会话存储在一个 JSONL 文件中(每行一个 JSON 对象)。每个条目有唯一的 8 位十六进制 ID 和 parentId,形成一棵树:

{ "type": "session", "id": "s1", "version": 3, "cwd": "~/myapp" }{ "type": "message", "id": "a1", "parentId": null, "message": { "role": "user", "content": "帮我改 auth 模块" } }{ "type": "message", "id": "b2", "parentId": "a1", "message": { "role": "assistant", "content": [] } }{ "type": "message", "id": "c3", "parentId": "b2", "message": { "role": "toolResult", "content": "文件内容..." } }{ "type": "message", "id": "d4", "parentId": "c3", "message": { "role": "assistant", "content": [] } }{ "type": "message", "id": "e5", "parentId": "d4", "message": { "role": "user", "content": "不对,应该改另一个文件" } }

2.2 11 种条目类型

条目 type
参与 LLM 上下文
说明
message
(role: user)
用户的文本/图片输入
message
(role: assistant)
含 thinking + text + toolCall 内容块
message
(role: toolResult)
工具执行结果(文本/图片)
message
(role: bashExecution)
bash 命令 + 输出 + 退出码(独立于 toolResult)
custom_message
扩展注入消息,LLM 能看到
compaction
转为合成消息
压缩摘要 + firstKeptEntryId
branch_summary
转为合成消息
放弃分支的摘要
model_change
切换 LLM provider/model
leaf
记录当前叶子位置(控制指针)
label
用户给消息打的标签
custom
扩展私有状态,LLM 看不到

2.3 消息存储粒度:一条消息 = 一个独立 JSONL 行

这是最容易混淆的地方。一个完整的「用户输入 → 模型思考 → 调用工具 → 获取结果」交互,在 JSONL 中是多条独立行

一次完整交互的存储结构行 1message (role: user) — "帮我改 auth 模块"id: a1行 2message (role: assistant)content: [thinking: "需要先看看代码..."] + [toolCall: bash "ls src/"]id: b2行 3message (role: toolResult) — "routes.ts utils.ts auth.ts"id: c3行 4message (role: assistant)content: [text: "看一下 routes.ts"] + [toolCall: read "src/routes.ts"]id: d4...更多 toolResult / assistant / user 消息,每条都是独立的 JSONL 行

图 3 | 消息存储粒度:thinking + text + toolCall 打包在同一条 assistant 消息内,但 toolResult 是独立的一条

关键规则

  • assistant 的 thinking + text + toolCall 全部打包在同一条消息的 content 数组里,共享一个 ID
  • toolResult
     每条独立存储,不与 assistant 打包,有自己独立的 ID,parentId 指向对应的 assistant
  • bashExecution
     独立于 toolResult,有自己的记录
  • 一轮 LLM 输出 = 一条 assistant 消息,不管这一轮里调用了多少个工具
  • 如果 assistant 同时调用多个工具(如同时读 3 个文件),多个 toolCall 在同一条 assistant 消息中,但每个工具的 result 各是一条独立的 toolResult

三、上下文如何构建

每次和 LLM 交互前,Pi 通过 buildSessionContext() 函数从当前叶子节点沿 parentId 链回溯到根,动态构建发给 LLM 的消息数组。

上下文构建算法:从叶子到根遍历JSONL 会话树A-0: userA-1: assistantA-2: toolResultA-3: toolResultcompactionA-4: assistantA-5: userA-6: toolResultA-7: assistantleafLLM 收到的上下文compactionSummary 摘要A-3: toolResult (原文)A-4: assistant (原文)A-5: user (原文)A-6: toolResult (原文)A-7: assistant (原文)A-0~A-2 被摘要替代共 7 条消息 → 发给 LLM构建

图 4 | buildSessionContext() 从叶子(A-7)沿 parentId 回溯,遇到 compaction 跳到 firstKeptEntryId

/** * 从叶子节点 ID 向上回溯构建会话上下文 * @param {string} leafId - 叶子消息 ID * @returns {Array} 按时间正序排列的上下文消息 */function buildSessionContext(leafId) {  let currentId = leafId;  const result = [];  // 向上回溯父节点直到 null  while (currentId !== null) {    const entry = entriesById.get(currentId);    // 未找到条目直接退出    if (!entry) break;    if (entry.type === "message") {      // 普通消息:直接加入      result.push(entry);    } else if (entry.type === "compaction") {      // 压缩消息:转为摘要,并跳转到压缩链首节点      result.push(transformToSummary(entry));      currentId = entry.firstKeptEntryId;      continue;    } else if (entry.type === "branch_summary") {      // 分支摘要:转为分支摘要消息      result.push(transformToBranchSummary(entry));    } else {      // 其他类型(leaf、model_change 等):跳过    }    // 继续向上找父节点    currentId = entry.parentId;  }  // 反转:从最早 → 最新  return result.reverse();}
关键:遇到 compaction 条目时,不是跳过它继续向上回溯,而是直接跳到 firstKeptEntryId。这意味着被压缩的消息(A-0~A-2)虽然仍在 JSONL 文件中,但不会出现在发给 LLM 的上下文里。

四、两种摘要机制

Pi 的记忆系统中存在两种完全不同的摘要,解决两个不同的问题:

图 5 | 两种摘要解决两个不同的问题:CompactionEntry 管"窗口空间",BranchSummaryEntry 管"知识传承"

简单来说:CompactionEntry 是"因为装不下所以要压缩",BranchSummaryEntry 是"因为换路线所以要传承"。前者由上下文窗口驱动,后者由用户分支切换行为驱动。

下面分别拆解两种机制的完整实现。

4.1 CompactionEntry:上下文压缩

触发条件

压缩不是等到 100% 满才触发,而是提前预留缓冲区

4.2 摘要生成:用什么、怎么生成

压缩摘要调用当前配置的同一个 LLM生成(不是单独的小模型),使用专门的提示词。摘要输出长度限制为 reserveTokens 的 80%(约 13k tokens),防止摘要本身膨胀。

首次压缩的提示词要求输出7 个固定板块

## Goal(用户想达成什么)## Constraints & Preferences(约束与偏好,或 "(none)")## Progress### Done(已完成的任务)### In Progress(当前工作)### Blocked(受阻问题,如有)## Key Decisions(关键决策及理由)## Next Steps(有序的下一步列表)## Critical Context(关键数据、示例、引用)## Files(readFiles + modifiedFiles 列表)

注意最后两个板块:Next Steps 和 Files 列表是最关键的字段。它们让压缩后的 Agent 有明确的行动方向和上下文信息,而不是需要重新从头分析。这被称为"行动导向摘要"

4.3 增量更新:后续压缩怎么做

第二次及以后的压缩,不会从头重新摘要所有消息,而是用增量更新模式

图 6 | 首次压缩从头摘要全部消息,后续压缩只读新消息 + 旧摘要做增量融合

4.4 压缩前后 JSONL 的变化

压缩不会修改 JSONL 文件中的任何已有内容,只是在末尾追加一条 compaction 条目:

{ "type": "session", "id": "s1", "version": 3, "cwd": "~/myapp" }{ "type": "message", "id": "a1", "parentId": null, "message": { "role": "user", "content": "帮我改 auth 模块" } }{ "type": "message", "id": "b2", "parentId": "a1", "message": { "role": "assistant", "content": [] } }{ "type": "message", "id": "c3", "parentId": "b2", "message": { "role": "toolResult", "content": "文件内容..." } }{ "type": "message", "id": "d4", "parentId": "c3", "message": { "role": "assistant", "content": [] } }{ "type": "message", "id": "e5", "parentId": "d4", "message": { "role": "user", "content": "不对,应该改另一个文件" } }// ... 中间更多 message 行(id: f6 ~ t19)全部保持不变{ "type": "message", "id": "t19", "parentId": "s18", "message": { "role": "assistant", "content": [] } }
原始消息永远不会被删除或修改。
压缩只是在 JSONL 末尾追加一条记录,告诉系统从哪条消息开始用摘要替代原文发给 LLM。

五、树分支机制详解

Pi 的整个会话是一棵,所有分支地位平等,没有"主/从"之分。leaf 指针指示当前活跃节点,它决定了 buildSessionContext() 的遍历起点。

5.1 /tree 命令:查看和切换分支

用户输入 /tree 后,终端显示会话树视图,每行显示节点类型和内容预览:

节点类型
显示内容
颜色
用户消息
user: 帮我重构这个函数
前缀高亮
助手消息
assistant: 好的,我来帮你...
绿色
工具结果 (read)
[read: ~/src/index.ts:1-100]
灰色
工具结果 (bash)
[bash: npm install lodash...]
灰色
压缩事件
[compaction: 45k tokens]
强调色
分支摘要
[branch summary]: 已完成重构...
警告色

用户选择节点后:

  • 选的是 user / custom_message → 文本填入编辑器,可修改后重新发送(相当于从该节点"重新开始")
  • 选的是 其他类型 → leaf 指针直接跳到该节点,继续对话

5.2 BranchSummary:自动生成的探索经验

当用户切换到另一个分支时,被放弃的旧分支不会丢失——Pi 会自动生成一条 BranchSummary注入新分支的上下文,让 Agent 知道"之前尝试了什么路线、为什么放弃了"。

BranchSummary 注入 LLM 上下文时,会带有一个固定的提示词前缀:"The user explored a different conversation branch before returning here." 这告诉 LLM 当前信息来自一条被放弃的探索路线,而非当前工作路径。

分支切换与 BranchSummary 生成流程A 分支工作发现方向不对找公共祖先生成 BSBranchSummary 注入新分支上下文:"The user explored a different conversation branch before returning here.之前尝试了 OAuth 方案,发现认证流程过于复杂..."结果:Agent 在新分支直接避开 OAuth,不重复犯错

图 7 | BranchSummary 让 Agent 在新分支知道之前尝试了什么,避免重复错误

5.3 复杂场景:压缩后从中间节点切换分支

这是最复杂的边界情况——假设 A 分支已经触发了一次压缩(C1),用户想从被压缩覆盖范围内的某个中间节点切换到新分支 B。

压缩后从中间节点切换分支A 分支(JSONL 中的所有条目)A-0A-1A-2A-3A-4A-5A-6A-7被 C1 压缩摘要覆盖切到这里leafC1: Compaction切换后:从 A-3 切到 B 分支A-0A-1A-2A-3BranchSummaryB-1B-2LLM 看到的: A-0~A-3 原文 + BranchSummary + B-1~B-2 原文C1 的 parentId 指向 A-7,不在新路径上 → 自然成为孤儿节点,永远不会被遍历到C1 → 孤儿节点 (被忽略)

图 8 | C1 CompactionEntry 的 parentId 指向 A-7,切换到 A-3 后回溯路径走不到 C1 → 自然忽略,不需要特殊处理

核心处理逻辑

buildSessionContext() 只沿 parentId 链回溯。切换到 A-3 后,回溯路径是 A-3 → A-2 → A-1 → A-0,C1 的 parentId 指向 A-7,不在新路径上,自然被忽略

5.4 BranchSummary 的特殊性质

BranchSummary 有一个重要特点:它不会被后续压缩覆盖。BranchSummary 永久留在上下文中,每次构建上下文时都会被转换为合成消息发给 LLM。

这意味着如果用户频繁切换分支,会产生多条 BranchSummary 累积占据上下文空间,不可压缩。Pi 对此的策略是信任用户自行控制切换频率。


六、设计思考与行业对比

6.1 三个核心设计洞察

洞察一:树结构的核心价值不是"分支",是"不删除"线性历史msg 1 (原文)msg 2 (原文)msg 3 (已删除,永久丢失)树形历史 (Pi)msg 1 (原文,仍在 JSONL 中)msg 2 (原文,仍在 JSONL 中)msg 3 (不发 LLM,但可回溯找回)压缩 = 不再发给 LLM,不是删除

图 9 | 压缩不可避免会有信息损失,树结构让损失可逆

洞察二:行动导向摘要 vs 总结型摘要总结型摘要"用户要求加登录功能,已完成 auth.ts"Agent 读完后知道做了什么但不知道下一步该做什么需要重新分析才能继续行动导向摘要 (Pi)Goal: 添加登录功能Done: 创建了 auth.tsNext: 修改 routes.ts 适配Files: auth.ts, routes.ts直接继续工作,无需重新分析

图 10 | 压缩摘要不仅记录过去,更要指示未来——Next Steps 是最关键的字段

洞察三:BranchSummary 解决"探索不浪费"问题A 分支: OAuth 方案发现方向不对BranchSummaryB 分支BranchSummary 注入 B 分支上下文:"之前尝试了 OAuth 方案,发现认证流程过于复杂"Agent 在 B 分支直接避开 OAuth,不重复犯错

图 11 | BranchSummary 让探索过的路线虽然放弃,但获得的认知被保留

三个洞察总结

  1. 树结构的核心价值不是"分支",是"不删除"
    ——压缩不可避免会有信息损失,树结构让损失可逆。即使不做分支切换,保留完整历史本身就是巨大的安全网。
  2. 压缩摘要的关键不是"怎么压缩",是"怎么让 Agent 压缩后还能继续工作"
    ——行动导向摘要(Next Steps + Files)比总结型摘要有价值得多。
  3. BranchSummary 解决的不是"记忆"问题,是"探索不浪费"问题
    ——失败的路线不应该被完全丢弃,获得的认知应该传承到新分支。

6.2 同类对比:Pi vs Claude Code

比较有可比性的同类产品是 Claude Code——同为终端编码 Agent场景下长会话的上下文管理问题。但两者走了完全不同的技术路线:

图 12 | 同为终端编码 Agent,Pi 选了"树形 + 单层压缩",Claude Code 选了"线性 + 5 层渐进"

两种路线的取舍

  • Pi 的赌注
    :树结构 + 单层压缩 = 简单可预测。缺点是压缩成本高(每次都调 LLM),优点是实现简单、分支探索零损失
  • Claude Code 的赌注
    :5 层渐进 = 成本最优。缺点是管线复杂、无分支回溯,优点是 80% 的压缩不需要调 LLM
  • 关键差异
    :Claude Code 用 Session Memory 后台异步预提取来"提前准备摘要",压缩时直接替换,零 LLM 成本。Pi 没有这个机制——每次压缩都是实时调用 LLM

写在最后

Agent 的记忆管理不是一个"存储"问题,是一个"注意力分配"问题。Agent 的上下文窗口就是它的"注意力"——每次和 LLM 交互时,你必须决定在有限的注意力空间里放什么信息。

Pi 的答案是:完整的原始记录(永不丢失)+ 动态裁剪(每次只放需要的)+ 行动导向摘要(压缩后仍可工作)+ 树分支(信息损失可逆)。

这个答案不是唯一的。Pi 刻意不做跨会话记忆、不做 RAG、不做渐进式压缩,因为它的场景是单次编码会话,对话通常几百条消息,线性遍历够用。对于跨会话的需求,Pi 依赖 AGENTS.md——一个放在项目根目录的 Markdown 文件,手动记录项目级上下文(技术栈、约定、架构说明等)。每次新建会话时 Pi 自动读取,用"项目级静态配置"替代了"跨会话动态记忆"。

Pi 给我们的最大启发是:好的记忆设计不是选择最复杂的方案,而是在对的场景选择最合适的方案。它的"不删除"原则和"行动导向"摘要格式,是几乎任何 Agent 记忆系统都可以直接迁移的设计模式。

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-06 10:39:09 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/719355.html
  2. 运行时间 : 0.208639s [ 吞吐率:4.79req/s ] 内存消耗:4,613.23kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=bebe67089d9e31865914473d584a6682
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000789s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000656s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000295s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000256s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000489s ]
  6. SELECT * FROM `set` [ RunTime:0.000235s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000705s ]
  8. SELECT * FROM `article` WHERE `id` = 719355 LIMIT 1 [ RunTime:0.000571s ]
  9. UPDATE `article` SET `lasttime` = 1780713549 WHERE `id` = 719355 [ RunTime:0.002808s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000318s ]
  11. SELECT * FROM `article` WHERE `id` < 719355 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000516s ]
  12. SELECT * FROM `article` WHERE `id` > 719355 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000513s ]
  13. SELECT * FROM `article` WHERE `id` < 719355 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001608s ]
  14. SELECT * FROM `article` WHERE `id` < 719355 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.008012s ]
  15. SELECT * FROM `article` WHERE `id` < 719355 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003163s ]
0.212495s