乐于分享
好东西不私藏

理解openclaw的Pi Monorepo 的packages:agent

理解openclaw的Pi Monorepo 的packages:agent

理解openclaw的Pi Monorepo 的packages:agent

为什么要理解openclaw使用的pi-mono
• 因为 openclaw 是基于 pi-coding-agent SDK 的真实集成案例,而 pi-coding-agent 来自 pi-mono。
• agent.ts:Agent 类,面向使用者的 API 层(管理状态、队列、订阅、abort、prompt/continue)。
• agent-loop.ts:执行层(真正跑循环、调 LLM、执行工具、发事件)

理解 openclaw 用到的 pi-mono,核心价值是:

  1. 1. 快速定位问题
    判断问题在 openclaw 业务层,还是 pi-ai / pi-agent-core / pi-coding-agent 基础层。
  2. 2. 提高二次开发效率
    可以直接复用 pi-mono 已有机制(skills、extensions、modes、storage),避免重复造轮子。
  3. 3. 更好做性能和稳定性治理
    性能瓶颈常在链路中间(流式事件、工具循环、渲染层),理解整条链路才能系统优化。

agent

packages:agent和ai

• 是“分层依赖”关系:packages/agent 构建在 packages/ai 之上。

  • • packages/ai:底层 AI 基础能力
    提供模型/Provider 抽象、streamSimple 流式调用、消息与工具协议、参数校验、token/usage 等。
  • • packages/agent:上层 Agent 编排能力
    基于 ai 的能力实现 Agent loop、工具调用调度(串行/并行)、steering/follow-up 队列、状态管理、事件生命周期。

可理解为:

ai = 引擎与协议层
  agent = 工作流与控制层

在代码里也能看到 agent 直接从 @mariozechner/pi-ai 导入 streamSimple、Model、Message、validateToolArguments 等。

agent

 /media/vdb/code/pi-mono/packages/agent  main ⇣138                                                                                                                                                                                  
❯ ll
Permissions Size User  Date Modified Name
drwxrwxr-x@    - ctyun 16 3月  16:38  src
drwxrwxr-x@    - ctyun 16 3月  16:38  test
.rw-rw-r--@ 7.3k ctyun 16 3月  16:38  CHANGELOG.md
.rw-rw-r--@  986 ctyun 16 3月  16:38  package.json
.rw-rw-r--@  13k ctyun 16 3月  16:38  README.md
.rw-rw-r--@  209 ctyun 16 3月  16:38  tsconfig.build.json
.rw-rw-r--@  184 ctyun 16 3月  16:38  vitest.config.ts

 /media/vdb/code/pi-mono/packages/agent  main ⇣138                                                                                                                                                                                  
 cd src            

 /media/vdb/code/pi-mono/packages/agent/src  main ⇣138                                                                                                                                                                              
 ls
 agent-loop.ts   agent.ts   index.ts   proxy.ts   types.ts

packages/agent/src/index.ts

把 agent 包里几个模块重新导出,方便外部只通过一个入口引入:

  • • ./agent.js:核心 Agent 能力
  • • ./agent-loop.js:循环/调度相关函数
  • • ./proxy.js:代理工具函数
  • • ./types.js:类型定义

实际效果是:调用方可以 import {...} from "agent",不用分别从多个文件路径导入

packages/agent/src/agent.ts

主控制器,实现可直接使用的Agent 运行时封装,把消息状态管理+LLM循环调用+工具执行流程+事件分发

export class Agent {
    private _state: AgentState = {
        systemPrompt: "",
        model: getModel("google", "gemini-2.5-flash-lite-preview-06-17"),
        thinkingLevel: "off",
        tools: [],
        messages: [],
        isStreaming: false,
        streamMessage: null,
        pendingToolCalls: new Set<string>(),
        error: undefined,
    };

实例化 new Agent(opts) 时,主要会做这几件事:

  1. 1. 初始化内部状态
    用默认 AgentState(默认模型、空消息、空工具、isStreaming=false 等),再合并 opts.initialState。
  2. 2. 注入可选策略/能力
    设置 convertToLlm、transformContext、streamFn、getApiKey、onPayload、beforeToolCall、afterToolCall 等钩子或函数。
  3. 3. 设置运行参数
    包括 sessionId、thinkingBudgets、transport、maxRetryDelayMs、toolExecution。
  4. 4. 设置队列模式
    steeringMode 和 followUpMode(默认都是 "one-at-a-time")。
  5. 5. 建立事件与控制容器
    创建监听器集合、steering/followUp 队列、运行中 Promise/AbortController 等内部字段(初始为空或未激活)
  6. 6. 维护 Agent 状态
    在 packages/agent/src/agent.ts:116 里定义 Agent,内部维护 messages、tools、isStreaming、pendingToolCalls、error 等状态。
  7. 7. 提供对外控制接口
    在 packages/agent/src/agent.ts:391 提供 prompt() / continue() 发起与续跑;
    在 packages/agent/src/agent.ts:310 提供 steer() / followUp() 队列化干预消息;
    在 packages/agent/src/agent.ts:373 提供 abort()、reset()。
  8. 8. 驱动底层 loop
    在 packages/agent/src/agent.ts:507 的 _runLoop() 中调用 runAgentLoop / runAgentLoopContinue,并把模型、transport、
    thinking、toolExecution、hook(before/after tool call)等配置传下去。
  9. 9. 处理流式事件并同步状态
    在 packages/agent/src/agent.ts:458 的 processLoopEvent() 中接收 message_start/update/end、tool_execution*、agent_end
    等事件,更新内部状态并 emit 给订阅者。
  10. 10. 错误兜底
    在 packages/agent/src/agent.ts:573 捕获异常,生成一条 assistant 错误消息写入会话,确保上层可见错误而不是静默失败。

packages/agent/src/agent-loop.ts

是 Agent 的执行引擎,负责把“一次对话回合”真正跑起来

  • • agent.ts:Agent 类,面向使用者的 API 层(管理状态、队列、订阅、abort、prompt/continue)。
  • • agent-loop.ts:执行层(真正跑循环、调 LLM、执行工具、发事件)。

调用关系很直接:

  1. 1. 调用 new Agent().prompt(...)(在 agent.ts)
  2. 2. Agent._runLoop() 组装 context + config
  3. 3. Agent._runLoop() 调 runAgentLoop / runAgentLoopContinue(在 agent-loop.ts)
  4. 4. agent-loop.ts 持续 emit AgentEvent
  5. 5. agent.ts 的 _processLoopEvent() 接收事件并更新 Agent.state,再转发给订阅者
  1. 1. 提供两个入口
  • • agentLoop / runAgentLoop:带新 prompt 开始一轮
  • • agentLoopContinue / runAgentLoopContinue:基于已有上下文继续跑(重试/续跑)
  1. 2. 主循环调度
    runLoop() 里反复执行:
  • • 处理 steering/follow-up 队列消息
  • • 调 LLM 流式生成 assistant 消息
  • • 检查是否有 toolCall,有就执行工具
  • • 发出 turn_end,直到没有后续消息后发 agent_end
  1. 3. LLM 边界转换
    streamAssistantResponse() 在调用模型前做:
  • • transformContext(可选)
  • • convertToLlm(AgentMessage[] -> LLM Message[])
    然后消费流式事件并转成统一 AgentEvent(message_start/update/end 等)。
  1. 4. 工具调用编排
    executeToolCalls() 支持 sequential 和 parallel 两种模式,并包含:
  • • 参数校验 validateToolArguments
  • • beforeToolCall / afterToolCall hook
  • • 工具执行中间更新事件
  • • 错误结果包装、跳过结果包装(如有用户插入 steering)
  1. 5. 事件流输出
    通过 emit 和 EventStream 把整个生命周期统一对外广播:
    agent_start -> turn_start -> message/tool events -> turn_end -> agent_end。

如何使用agent?

简单示例:最常见的直接用法是:new Agent(...) 后设置模型/工具,然后 prompt()

  1. 1. prompt() 发起一轮:prompt() 负责“接收用户输入并发起新回合”,不负责具体推理/工具执行细节
  2. 2. subscribe() 接收流式事件
  3. 3. setTools() 挂工具
  4. 4. steer() / followUp() 在运行中追加指令
  5. 5. abort() 取消当前轮
  6. 6. continue() 从当前上下文继续跑

  import
 { Agent } from "@mariozechner/pi-agent";
  import
 { getModel } from "@mariozechner/pi-ai";

  const
 agent = new Agent({
    initialState
: {
      model
: getModel("openai", "gpt-4.1"),
      systemPrompt
: "你是一个简洁的技术助手",
    },
    toolExecution
: "parallel", // 或 "sequential"
  });
  agent.subscribe((e) => {
    if
 (e.type === "message_update") {
      // 实时 token / 文本更新

    }
    if
 (e.type === "agent_end") {
      console
.log("done");
    }
  });

  // 注册工具(可选)

  agent.setTools([
    {
      name
: "echo",
      description
: "回显文本",
      inputSchema
: {
        type
: "object",
        properties
: { text: { type: "string" } },
        required
: ["text"],
      },
      async
 execute(_id, args) {
        return
 {
          content
: [{ type: "text", text: `echo: ${args.text}` }],
          details
: {},
        };
      },
    },
  ]);

  // 发起对话

  await
 agent.prompt("帮我总结今天的待办");

  // 运行中插话(可选)

  agent.steer({
    role
: "user",
    content
: [{ type: "text", text: "先给结论,再给细节" }],
    timestamp
: Date.now(),
  });

  // 续跑(可选)

  await
 agent.continue();

稍微复杂的示例:动态鉴权、上下文裁剪、工具并行执行、前后置 hook、流式事件订阅、steering/follow-up、continue 续跑

 import { Agent, type AgentMessage, type AgentTool } from "@mariozechner/pi-agent";
  import
 { getModel } from "@mariozechner/pi-ai";

  /**
   * 构造一条标准 user 消息,减少重复模板代码。
   */

  function
 makeMessage(text: string): AgentMessage {
    return
 {
      role
: "user",
      content
: [{ type: "text", text }],
      timestamp
: Date.now(),
    };
  }

  /**
   * 示例工具:run_shell
   * - 这里只模拟执行,不直接调用真实 shell
   * - 实际落地时应接入你自己的执行器,并做命令白名单/沙箱限制
   */

  const
 shellTool: AgentTool<{ cmd: string }> = {
    // 工具名:必须和模型返回的 toolCall.name 对齐

    name
: "run_shell",
    // 给模型看的工具描述,影响模型是否选择该工具

    description
: "Run safe read-only shell commands",
    // 工具入参 JSON Schema:用于模型约束和运行前参数校验

    inputSchema
: {
      type
: "object",
      properties
: { cmd: { type: "string" } },
      required
: ["cmd"],
      additionalProperties
: false,
    },

    /**
     * 工具执行函数
     * @param _toolCallId 当前 tool call 的唯一 ID
     * @param args 经过 schema 校验后的参数
     * @param signal 取消信号(abort 时触发)
     * @param onUpdate 用于向外发送中间进度
     */

    async
 execute(_toolCallId, args, signal, onUpdate) {
      // 上报开始状态(会触发 tool_execution_update 事件)

      onUpdate?.({ stage: "start", cmd: args.cmd });

      // 模拟耗时任务

      await
 new Promise((r) => setTimeout(r, 200));

      // 响应取消

      if
 (signal?.aborted) throw new Error("aborted");

      // 上报完成状态

      onUpdate?.({ stage: "done" });

      // 返回工具结果(会被包装成 toolResult 消息)

      return
 {
        content
: [{ type: "text", text: `command output for: ${args.cmd}` }],
        details
: { exitCode: 0 },
      };
    },
  };

  /**
   * Agent 实例:负责管理状态、驱动 loop、执行工具、发事件
   */

  const
 agent = new Agent({
    initialState
: {
      // 模型选择(provider + model id)

      model
: getModel("openai", "gpt-4.1"),
      // 系统提示词:定义角色和输出风格

      systemPrompt
:
        "You are a coding agent. Be precise. Use tools when useful. Return concise technical answers."
,
    },

    // 多工具调用策略:parallel 并行 / sequential 串行

    toolExecution
: "parallel",

    // steer 队列投递策略:每轮只投 1 条

    steeringMode
: "one-at-a-time",
    // follow-up 队列投递策略:一轮可投全部

    followUpMode
: "all",

    // 会话标识:给支持 session cache 的 provider 使用

    sessionId
: "repo:pi-mono#branch:feature/agent-demo",

    // 流传输模式(provider 支持时生效)

    transport
: "sse",

    // 服务端要求重试等待时间上限(毫秒)

    maxRetryDelayMs
: 20_000,

    /**
     * 动态取 API key
     * 适合短期 token(如 OAuth)按调用实时刷新
     */

    getApiKey
: async (provider) => {
      if
 (provider === "openai") return process.env.OPENAI_API_KEY;
      return
 undefined;
    },

    /**
     * LLM 调用前的上下文变换
     * 这里做简单裁剪:仅保留最近 20 条消息
     */

    transformContext
: async (messages) => {
      const
 keep = messages.slice(-20);
      return
 keep;
    },

    /**
     * 转换为 LLM 可接受的消息集合
     * 过滤掉内部控制类消息,仅保留 user/assistant/toolResult
     */

    convertToLlm
: async (messages) => {
      return
 messages.filter(
        (m) =>
 m.role === "user" || m.role === "assistant" || m.role === "toolResult",
      );
    },

    /**
     * 工具执行前钩子
     * 可做参数审计、权限检查、阻断危险调用
     */

    beforeToolCall
: async ({ toolCall, args }) => {
      if
 (toolCall.name !== "run_shell") return;

      const
 cmd = String((args as { cmd: string }).cmd).toLowerCase();
      const
 blocked = ["rm -rf", "shutdown", "reboot"];

      if
 (blocked.some((x) => cmd.includes(x))) {
        return
 { block: true, reason: `blocked command: ${cmd}` };
      }
      return
 { block: false };
    },

    /**
     * 工具执行后钩子
     * 可统一修饰输出、补充元数据、改写错误语义
     */

    afterToolCall
: async ({ result, isError }) => {
      if
 (!isError) return;
      return
 {
        isError
: true,
        details
: { ...result.details, retriable: false, source: "afterToolCall" },
      };
    },

    /**
     * provider payload 观测点
     * 便于调试请求结构和参数
     */

    onPayload
: (payload) => {
      console
.log("[payload]", JSON.stringify(payload).slice(0, 300));
    },
  });

  // 注册工具列表(会替换当前 tools)

  agent.setTools([shellTool]);

  /**
   * 订阅 Agent 事件流:
   * - 消息生命周期
   * - 工具执行生命周期
   * - turn/agent 结束事件
   */

  agent.subscribe((e) => {
    switch
 (e.type) {
      case
 "message_start":
        console
.log("[message_start]", e.message.role);
        break
;
      case
 "message_update":
        // 流式增量阶段(可用于实时 UI 更新)

        break
;
      case
 "tool_execution_start":
        console
.log("[tool_start]", e.toolName, e.args);
        break
;
      case
 "tool_execution_update":
        console
.log("[tool_update]", e.partialResult);
        break
;
      case
 "tool_execution_end":
        console
.log("[tool_end]", e.toolName, "error=", e.isError);
        break
;
      case
 "turn_end":
        console
.log("[turn_end]", e.message.stopReason);
        break
;
      case
 "agent_end":
        console
.log("[agent_end] new messages:", e.messages.length);
        break
;
    }
  });

  /**
   * 主流程:
   * 1) 首次 prompt
   * 2) 插入 steer(中途转向)
   * 3) 插入 follow-up(收尾追加任务)
   * 4) continue 继续执行
   * 5) waitForIdle 等待完全空闲
   */

  async
 function main() {
    await
 agent.prompt([
      makeMessage
("检查仓库里最近的变更点,先给高层总结。"),
      makeMessage
("如果需要可以调用 run_shell 获取辅助信息。"),
    ]);

    // 运行中插入“转向”指令(在下一个安全点生效)

    agent.steer(makeMessage("先输出风险,再输出建议。"));

    // 当前轮结束后追加 follow-up

    agent.followUp(makeMessage("把建议改成可执行 checklist。"));
    await
 agent.continue();

    // 等待 agent 完全空闲,便于退出前收尾

    await
 agent.waitForIdle();

    // 最终错误状态(无错通常为 undefined)

    console
.log("final error:", agent.state.error);
  }

  main
().catch((err) => {
    console
.error(err);
    process.exit(1);
  });


理财咨询的网站地址:http://vi-money.com/lof/overflow-ranking

小说阅读的网站(连载小说和短篇小说):https://024novel.com/

个人博客主页:MakeMoney: https://funkygod.vip/


轻量云主机长期优惠

RackNerd

海外主机显示特惠:只要80元(3TB流量,1vcpu,50GB硬盘)
购买地址:https://my.racknerd.com/aff.php?aff=14942

CloudCone

CloudCone 特惠轻量云主机:购买地址:https://app.cloudcone.com/?ref=12332


📢 腾讯云资源限时福利

有云服务器、CDN、对象存储、网络防护等需求的朋友,欢迎联系下方腾讯云官方销售 (yunhaoxu@tencent.com)👇

  1. 1. ✔️ 内部专属折扣,价格更优
  2. 2. ✔️ 量大可谈,支持定制方案
  3. 3. ✔️ 技术咨询与售后无忧


AI编程套餐

MiniMax:Coding plan

🎁 MiniMax 跨年福利来袭!邀好友享 Coding Plan 双重好礼,助力开发体验!
好友立享 9折 专属优惠 + Builder 权益,你赢返利 + 社区特权!
👉 立即参与:https://platform.minimaxi.com/subscribe/coding-plan?code=5oAzx7O6Sr&source=link

GLM: coding plan

🚀 速来拼好模,智谱 GLM Coding 超值订阅,邀你一起薅羊毛!Claude Code、Cline 等 20+ 大编程工具无缝支持,“码力”全开,越拼越爽!立即开拼,享限时惊喜价!
链接:https://www.bigmodel.cn/glm-coding?ic=RTWWS8HOD6

火山方舟:特惠编程plan

方舟 Coding Plan 支持 Doubao、GLM、DeepSeek、Kimi 等模型,工具不限,现在订阅折上9折,低至8.9元,订阅越多越划算!立即订阅:https://volcengine.com/L/vd1xvW2KKgg/  邀请码:2DSAD6JL

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-03 16:03:20 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/487491.html
  2. 运行时间 : 0.096135s [ 吞吐率:10.40req/s ] 内存消耗:4,867.45kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=467c4396d62670edbf0a7cc1031fd61c
  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.80 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000412s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000555s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000305s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000281s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000548s ]
  6. SELECT * FROM `set` [ RunTime:0.000262s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000600s ]
  8. SELECT * FROM `article` WHERE `id` = 487491 LIMIT 1 [ RunTime:0.000517s ]
  9. UPDATE `article` SET `lasttime` = 1775203400 WHERE `id` = 487491 [ RunTime:0.011980s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000373s ]
  11. SELECT * FROM `article` WHERE `id` < 487491 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001706s ]
  12. SELECT * FROM `article` WHERE `id` > 487491 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000539s ]
  13. SELECT * FROM `article` WHERE `id` < 487491 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001374s ]
  14. SELECT * FROM `article` WHERE `id` < 487491 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001894s ]
  15. SELECT * FROM `article` WHERE `id` < 487491 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001276s ]
0.097811s