乐于分享
好东西不私藏

OpenSquilla 源码解析 ①:核心 Agent 循环与 Turn Runner

OpenSquilla 源码解析 ①:核心 Agent 循环与 Turn Runner

核心 Agent 循环与 Turn Runner

源码规模:engine/agent.py 单文件 304KB,engine/runtime.py 单文件 301KB。
但核心循环不到 500 行。这就是微内核的力量。


一、源码概览:文件地图

在开始读源码之前,先看清整体布局。OpenSquilla 的核心代码在 src/opensquilla/ 下:

src/opensquilla/
├── engine/               ← 本期主角
│   ├── agent.py          ← 核心 Agent 循环 (304KB)
│   ├── runtime.py        ← TurnRunner 编排器 (301KB)
│   ├── pipeline.py       ← TurnContext 管道上下文
│   ├── turn_runner/       ← 九阶段分解
│   │   ├── harness.py    ← 阶段适配器 (43KB)
│   │   ├── prompt_assembler_stage.py
│   │   ├── stream_consumer_stage.py
│   │   └── ...
│   ├── steps/            ← 每个 turn 的执行步骤
│   │   ├── squilla_router.py    ← SquillaRouter (53KB)
│   │   ├── skills_filter.py     ← Skill 过滤 (14KB)
│   │   ├── meta_resolution.py   ← Meta Skill 解析 (58KB)
│   │   └── coding_mode.py       ← 编码模式 (17KB)
│   └── routing/          ← 路由决策引擎
├── squilla_router/       ← 本地 ONNX 推理器
├── memory/               ← 记忆系统
├── skills/               ← Skill 加载和管理
├── provider/             ← 30+ LLM 供应商统一接口
├── channels/             ← 飞书/微信/Telegram/Discord...
├── sandbox/              ← 分层沙箱
└── tools/                ← 工具系统

二、第一层:Agent 状态机

OpenSquilla 的 Agent 不是一个简单的 while True 循环,而是一个显式状态机

打开 engine/agent.py,文件开头明确定义了状态:

class AgentState(StrEnum):
    """Agent 的每一个可能状态"""

    IDLE = "idle"                    # 等待输入
    BOOTSTRAPPING = "bootstrapping"  # 正在加载上下文
    PREPARING = "preparing"          # 准备 turn(路由、Skill、Prompt 组装)
    STREAMING = "streaming"          # 正在从 LLM 接收响应
    TOOL_EXECUTING = "tool_executing"  # 正在执行工具
    COMPACTING = "compacting"        # 正在压缩上下文
    FINALIZING = "finalizing"       # 收尾(保存记忆、更新统计)
    DONE = "done"                   # 完成
    ERROR = "error"                 # 出错

状态流转:

IDLE → BOOTSTRAPPING → PREPARING → STREAMING 
                                         ↓
                                   有工具调用?
                                   ↙        ↘
                                 YES         NO
                                  ↓           ↓
                          TOOL_EXECUTING   FINALIZING → DONE
                                  ↓
                          回到 PREPARING
                                  ↑
                    需要压缩?→ COMPACTING

为什么用显式状态机?

相比简单的 while True,状态机的优势:

简单循环显式状态机
所有逻辑混在一起每个状态职责清晰
错误处理散落各处状态间转换可审计
难以测试中间状态每个状态独立测试
中途状态不透明UI 可展示"正在压缩上下文..."

三、第二层:Agent 核心循环

Agent 的核心循环在 agent.py 中,每个 turn 的核心逻辑:

# 简化后的核心循环
class
 Agent:
    async
 def run_turn(self, input: str) -> AsyncIterator[AgentEvent]:
        """执行一个完整的 turn"""

        
        # 1. 身份注入

        yield
 self._inject_identity(input)
        
        # 2. 模型路由

        routing_decision = await self._route_model(input)
        yield
 routing_decision
        
        # 3. Skill 加载

        skills = await self._load_skills(input, routing_decision)
        
        # 4. Prompt 组装

        messages = await self._assemble_prompt(input, skills)
        
        # 5. LLM 调用 + 工具执行(核心循环)

        while
 True:
            response = await self._call_llm(messages)
            
            if
 response.is_text_only:
                # 模型直接回答,没有工具调用

                yield
 response
                break

            
            if
 response.has_tool_calls:
                # 执行工具

                tool_results = await self._execute_tools(response.tool_calls)
                messages.extend(tool_results)
                continue
  # 回到第 5 步
        
        # 6. 记忆更新

        await
 self._update_memory()
        
        # 7. 成本记录

        yield
 self._rollup_cost()

四、第三层:TurnRunner 九阶段流水线

真正的工程实现远比上面复杂。OpenSquilla 将每个 turn 分解为九个独立阶段,每个阶段由专门的 stage 类处理。

这是 turn_runner/ 目录的九个文件:

阶段 1: agent_bootstrap_stage     — Agent 配置引导
阶段 2: attachment_stage          — 附件处理
阶段 3: compaction_and_history_stage — 上下文压缩 + 历史加载
阶段 4: input_stage               — 输入预处理
阶段 5: prompt_assembler_stage    — Prompt 组装(路由+Skill+记忆)
阶段 6: provider_and_tools_stage  — 供应商解析 + 工具构建
阶段 7: stream_consumer_stage     — LLM 流式消费 + Agent 运行
阶段 8: turn_finalizer_stage      — Turn 收尾(记忆+成本+日志)

4.1 各阶段详解

阶段 1:Agent Bootstrap — 引导阶段

# agent_bootstrap_stage.py 的输出
class
 _MemorySnapshotResult:
    memory_snapshot: str          # 当前记忆快照
    agent_config: AgentConfig     # Agent 配置
    resolved_model: str           # 解析后的模型

class
 _ResolvedBudgets:
    tool_budget: int              # Tool 结果的 token 预算
    context_budget: int           # 上下文 token 预算
    iteration_budget: int         # 迭代次数预算

阶段 2:Attachment Stage — 附件处理

# 处理用户上传的文件/图片/音频
# 将附件转换为 LLM 可理解的 ContentBlock

# 支持拖拽上传、剪贴板粘贴

阶段 3:Compaction & History Stage

# 核心逻辑:
# 1. 检查上下文是否超过阈值

# 2. 如果超过 → 触发压缩

# 3. 加载历史消息

# 4. 应用 CompactionConfig

阶段 5:Prompt Assembler — 最关键的一步

# prompt_assembler_stage.py 的核心
async
 def assemble_prompt(self, context: TurnContext):
    # Step 1: 路由决策

    routing = self.router.decide(context.input)
    
    # Step 2: Skill 过滤

    skills = self.skills_filter.filter(context.input, routing)
    
    # Step 3: 记忆注入

    memory = self.memory.snapshot()
    
    # Step 4: 时间前缀

    time_prefix = f"Current time: {datetime.now()}"
    
    # Step 5: 组装系统提示词

    system_prompt = "\n\n".join([
        self
.identity.prompt,
        time_prefix,
        memory,
        skills.prompt_injection,
    ])
    
    # Step 6: 构建消息列表

    messages = [
        {"role": "system", "content": system_prompt},
        *context.history,
        {"role": "user", "content": context.input},
    ]
    
    return
 messages

阶段 7:Stream Consumer — Agent 运行

这是实际调用 LLM 并处理工具调用的阶段。它调用了 agent.py 中的核心循环。

# stream_consumer_stage.py
class
 AgentRunPort(Protocol):
    async
 def run_agent_turn(
        self, 
        messages: list[Message],
        tools: list[ToolDefinition],
        config: AgentConfig,
    
) -> AsyncIterator[AgentEvent]:
        """运行一个完整的 agent turn,流式产出事件"""

        ...

五、第四层:Pipeline 管道上下文

连接各个阶段的是一套 Pipeline Context 机制:

# pipeline.py
@dataclass

class
 TurnContext:
    """一个 turn 的全量上下文"""

    
    # 输入

    user_input: str
    session_id: str
    attachments: list[Attachment]
    
    # 路由

    routing_decision: RoutingDecision | None = None
    selected_model: str = ""
    tier_config: TierConfig | None = None
    
    # Skill

    active_skills: list[Skill] = field(default_factory=list)
    skill_prompts: str = ""
    
    # 记忆

    memory_snapshot: str = ""
    memory_fingerprint: str = ""
    
    # 成本

    token_usage: TokenUsage = field(default_factory=TokenUsage)
    cost_usd: float = 0.0
    
    # 诊断

    trace_id: str = field(default_factory=lambda: str(uuid.uuid4()))
    turn_call_log: dict = field(default_factory=dict)

设计理念: 每个阶段只读写 TurnContext 中自己负责的字段。阶段之间通过 TurnContext 传递数据,解耦得干干净净。


六、源码中值得注意的设计决策

6.1 没有递归调用

# engine/agent.py 文件头注释
"""Agent core — explicit state machine + tool loop.
Core loop is under 500 lines. No recursive calls.
"""

所有 Agent 行为都是迭代的。工具调用不递归嵌套,而是线性展开。这保证了:

  • • 堆栈不会无限增长
  • • 每步都可审计
  • • 错误状态不会"藏"在递归中

6.2 适配器模式隔离阶段

# turn_runner/harness.py 
# 每个 stage 通过 Protocol 定义接口,不依赖具体实现

# 文件头明确写明:

"""Hosts the small adapter classes that bind TurnRunner 
instance methods to the Protocol-shaped ports the stages consume."""

这意味着:

  • • 每个 stage 可以独立测试
  • • 替换一个 stage 不影响其他 stage
  • • 可以按需添加新 stage

6.3 延迟导入避免循环依赖

# harness.py 明确指出:
"""Each adapter lazy-imports TurnRunner inside its method 
bodies to avoid the runtime → turn_runner → runtime import cycle."""

这是 runtime.py(301KB)和 agent.py(304KB)没有形成循环依赖的关键。


七、Turn Runner 的完整执行流程

用一张图总结整个 Turn Runner 的协作方式:

┌──────────────────────────────────────────────────────────────┐
│                    TurnRunner (runtime.py)                    │
│                 总编排器,驱动九个阶段                         │
├──────────────────────────────────────────────────────────────┤
│                                                               │
│  Stage 1: Agent Bootstrap                                     │
│  ├─ 加载 AGENTS.md / SOUL.md / IDENTITY.md                   │
│  ├─ 加载记忆快照                                              │
│  └─ 解析 Agent 配置 + 模型选择                                │
│       ↓                                                        │
│  Stage 2: Attachment                                          │
│  ├─ 处理文件上传                                              │
│  └─ 转换为 ContentBlock                                       │
│       ↓                                                        │
│  Stage 3: Compaction & History                                │
│  ├─ 检查上下文 token 数                                       │
│  ├─ 超阈值 → 触发压缩                                        │
│  └─ 加载历史消息                                              │
│       ↓                                                        │
│  Stage 4: Input                                               │
│  ├─ 预处理用户输入                                            │
│  └─ 注入额外上下文                                            │
│       ↓                                                        │
│  Stage 5: Prompt Assembler                                    │
│  ├─ SquillaRouter 路由决策                                    │
│  ├─ Skill 过滤 + 注入                                         │
│  ├─ 记忆注入                                                  │
│  └─ 组装完整 system prompt + messages                         │
│       ↓                                                        │
│  Stage 6: Provider & Tools                                    │
│  ├─ 解析 LLM Provider                                        │
│  └─ 构建 Tool 定义列表                                        │
│       ↓                                                        │
│  Stage 7: Stream Consumer ← 核心循环                          │
│  ├─ Agent 运行(agent.py 核心循环)                           │
│  ├─ 流式消费 LLM 输出                                         │
│  ├─ 工具执行                                                  │
│  └─ 迭代直到 done                                             │
│       ↓                                                        │
│  Stage 8: Turn Finalizer                                      │
│  ├─ 记忆捕获 + 更新                                           │
│  ├─ Token 成本汇总                                            │
│  └─ 日志记录                                                  │
│                                                               │
└──────────────────────────────────────────────────────────────┘

八、总结:为什么这是优秀的 Harness 工程

回顾这期拆解的四个层次:

层次组件行数职责
L1Agent 状态机~300 行定义 Agent 的所有可能状态
L2Agent 核心循环~500 行while True 工具循环
L3TurnRunner 九阶段~3000 行每个 turn 的流水线
L4Pipeline Context~200 行阶段间数据传递

核心洞察:

  1. 1. 微内核 — 核心循环 500 行,其余都是可插拔的扩展
  2. 2. 显式状态 — 不是隐藏的递归,是可观测的状态流转
  3. 3. 阶段解耦 — Protocol + Adapter,替换一个阶段不影响其他
  4. 4. 无循环依赖runtime.pyagent.py 通过延迟导入解耦

下期预告

OpenSquilla 源码解析 ②:SquillaRouter 模型路由引擎

  • • ONNX + LightGBM 本地推理的源码实现
  • • 路由分级策略:Tier 1-5 的决策树
  • • 每次路由决策如何成为训练数据
  • • 与 provider 层的交互机制

科技洞察助手 | 源码深度解析系列

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-11 18:53:41 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/845949.html
  2. 运行时间 : 0.096570s [ 吞吐率:10.36req/s ] 内存消耗:4,798.02kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=037553c10510dbf28f30e45519fb1afc
  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.000626s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000849s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000346s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000333s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000508s ]
  6. SELECT * FROM `set` [ RunTime:0.000215s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000547s ]
  8. SELECT * FROM `article` WHERE `id` = 845949 LIMIT 1 [ RunTime:0.001522s ]
  9. UPDATE `article` SET `lasttime` = 1783767221 WHERE `id` = 845949 [ RunTime:0.009807s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000311s ]
  11. SELECT * FROM `article` WHERE `id` < 845949 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000503s ]
  12. SELECT * FROM `article` WHERE `id` > 845949 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000399s ]
  13. SELECT * FROM `article` WHERE `id` < 845949 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000757s ]
  14. SELECT * FROM `article` WHERE `id` < 845949 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001524s ]
  15. SELECT * FROM `article` WHERE `id` < 845949 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003664s ]
0.098260s