乐于分享
好东西不私藏

OpenClaw工具拆解之 sessions_list+sessions_history

OpenClaw工具拆解之 sessions_list+sessions_history

一、sessions_list 工具

1.1 工具概述

功能:列出所有会话(包括子 agent 会话)核心特性

  • • 支持按类型过滤(main/group/cron/hook/node/other)
  • • 支持按活跃度过滤(activeMinutes)
  • • 可包含最后 N 条消息(messageLimit,最大 20)
  • • 会话可见性检查(visibility guard)
  • • 沙盒隔离支持

1.2 Schema 定义

位置:第 109015 行

constSessionsListToolSchema = Type.Object({kindsType.Optional(Type.Array(Type.String())),limitType.Optional(Type.Number({ minimum1 })),activeMinutesType.Optional(Type.Number({ minimum1 })),messageLimitType.Optional(Type.Number({ minimum0 }))});

1.3 完整执行代码

位置:第 109015 行

functioncreateSessionsListTool(opts) {return {label"Sessions",name"sessions_list",description"List sessions with optional filters and last messages.",parametersSessionsListToolSchema,executeasync (_toolCallId, args) => {const params = args;const cfg = opts?.config ?? loadConfig();// 1. 解析沙盒会话工具上下文const { mainKey, alias, requesterInternalKey, restrictToSpawned } = resolveSandboxedSessionToolContext({                cfg,agentSessionKey: opts?.agentSessionKey,sandboxed: opts?.sandboxed            });const effectiveRequesterKey = requesterInternalKey ?? alias;// 2. 解析会话可见性const visibility = resolveEffectiveSessionToolsVisibility({                cfg,sandboxed: opts?.sandboxed === true            });// 3. 解析类型过滤const allowedKindsList = (readStringArrayParam(params, "kinds")?.map((value) =>                value.trim().toLowerCase()            ) ?? []).filter((value) => ["main""group""cron""hook""node""other"            ].includes(value));const allowedKinds = allowedKindsList.length ? newSet(allowedKindsList) : void0;// 4. 解析其他参数const limit = typeof params.limit === "number" && Number.isFinite(params.limit) ? Math.max(1Math.floor(params.limit)) : void0;const activeMinutes = typeof params.activeMinutes === "number" && Number.isFinite(params.activeMinutes) ? Math.max(1Math.floor(params.activeMinutes)) : void0;const messageLimitRaw = typeof params.messageLimit === "number" && Number.isFinite(params.messageLimit) ? Math.max(0Math.floor(params.messageLimit)) : 0;const messageLimit = Math.min(messageLimitRaw, 20);  // 最大 20 条// 5. 调用 Gateway 获取会话列表const gatewayCall = opts?.callGateway ?? callGateway;const list = awaitgatewayCall({method"sessions.list",params: {                    limit,                    activeMinutes,includeGlobal: !restrictToSpawned,includeUnknown: !restrictToSpawned,spawnedBy: restrictToSpawned ? effectiveRequesterKey : void0                }            });const sessions = Array.isArray(list?.sessions) ? list.sessions : [];const storePath = typeof list?.path === "string" ? list.path : void0;// 6. 创建可见性检查器const visibilityGuard = awaitcreateSessionVisibilityGuard({action"list",requesterSessionKey: effectiveRequesterKey,                visibility,a2aPolicycreateAgentToAgentPolicy(cfg)            });const rows = [];const historyTargets = [];// 7. 处理每个会话for (const entry of sessions) {if (!entry || typeof entry !== "object"continue;const key = typeof entry.key === "string" ? entry.key : "";if (!key) continue;// 可见性检查if (!visibilityGuard.check(key).allowedcontinue;if (key === "unknown"continue;if (key === "global" && alias !== "global"continue;// 分类会话类型const kind = classifySessionKind({                    key,gatewayKindtypeof entry.kind === "string" ? entry.kind : void0,                    alias,                    mainKey                });// 类型过滤if (allowedKinds && !allowedKinds.has(kind)) continue;// 解析显示键const displayKey = resolveDisplaySessionKey({                    key,                    alias,                    mainKey                });// 8. 解析渠道和交付上下文const entryChannel = typeof entry.channel === "string" ? entry.channel : void0;const deliveryContext = entry.deliveryContext && typeof entry.deliveryContext === "object" ?                     entry.deliveryContext : void0;const deliveryChannel = typeof deliveryContext?.channel === "string" ?                     deliveryContext.channel : void0;const deliveryTo = typeof deliveryContext?.to === "string" ? deliveryContext.to : void0;const deliveryAccountId = typeof deliveryContext?.accountId === "string" ?                     deliveryContext.accountId : void0;const lastChannel = deliveryChannel ?? (typeof entry.lastChannel === "string" ? entry.lastChannel : void0);const lastAccountId = deliveryAccountId ?? (typeof entry.lastAccountId === "string" ? entry.lastAccountId : void0);const derivedChannel = deriveChannel({                    key,                    kind,channel: entryChannel,                    lastChannel                });// 9. 解析会话元数据const sessionId = typeof entry.sessionId === "string" ? entry.sessionId : void0;const sessionFileRaw = entry.sessionFile;const sessionFile = typeof sessionFileRaw === "string" ? sessionFileRaw : void0;let transcriptPath;if (sessionId) {try {const agentId = resolveAgentIdFromSessionKey(key);const trimmedStorePath = storePath?.trim();let effectiveStorePath;if (trimmedStorePath && trimmedStorePath !== "(multiple)") {if (trimmedStorePath.includes("{agentId}") || trimmedStorePath.startsWith("~")) {                                effectiveStorePath = resolveStorePath(trimmedStorePath, { agentId });                            } elseif (path.isAbsolute(trimmedStorePath)) {                                effectiveStorePath = trimmedStorePath;                            }                        }const filePathOpts = resolveSessionFilePathOptions({                            agentId,storePath: effectiveStorePath                        });                        transcriptPath = resolveSessionFilePath(sessionId, sessionFile ? { sessionFile } : void0, filePathOpts);                    } catch {                        transcriptPath = void0;                    }                }// 10. 构建会话行const row = {key: displayKey,                    kind,channel: derivedChannel,labeltypeof entry.label === "string" ? entry.label : void0,displayNametypeof entry.displayName === "string" ? entry.displayName : void0,deliveryContext: deliveryChannel || deliveryTo || deliveryAccountId ? {channel: deliveryChannel,to: deliveryTo,accountId: deliveryAccountId                    } : void0,updatedAttypeof entry.updatedAt === "number" ? entry.updatedAt : void0,                    sessionId,modeltypeof entry.model === "string" ? entry.model : void0,contextTokenstypeof entry.contextTokens === "number" ? entry.contextTokens : void0,totalTokenstypeof entry.totalTokens === "number" ? entry.totalTokens : void0,estimatedCostUsdtypeof entry.estimatedCostUsd === "number" ? entry.estimatedCostUsd : void0,statustypeof entry.status === "string" ? entry.status : void0,startedAttypeof entry.startedAt === "number" ? entry.startedAt : void0,endedAttypeof entry.endedAt === "number" ? entry.endedAt : void0,runtimeMstypeof entry.runtimeMs === "number" ? entry.runtimeMs : void0,childSessionsArray.isArray(entry.childSessions) ?                         entry.childSessions.filter((value) =>typeof value === "string")                            .map((value) =>resolveDisplaySessionKey({ key: value, alias, mainKey })) : void0,thinkingLeveltypeof entry.thinkingLevel === "string" ? entry.thinkingLevel : void0,verboseLeveltypeof entry.verboseLevel === "string" ? entry.verboseLevel : void0,systemSenttypeof entry.systemSent === "boolean" ? entry.systemSent : void0,abortedLastRuntypeof entry.abortedLastRun === "boolean" ? entry.abortedLastRun : void0,sendPolicytypeof entry.sendPolicy === "string" ? entry.sendPolicy : void0,                    lastChannel,lastTo: deliveryTo ?? (typeof entry.lastTo === "string" ? entry.lastTo : void0),                    lastAccountId,                    transcriptPath                };// 11. 如果需要消息,添加到获取队列if (messageLimit > 0) {const resolvedKey = resolveInternalSessionKey({                        key,                        alias,                        mainKey                    });                    historyTargets.push({ row, resolvedKey });                }                rows.push(row);            }// 12. 并发获取消息(如果需要)if (messageLimit > 0 && historyTargets.length > 0) {const maxConcurrent = Math.min(4, historyTargets.length);let index = 0;constworker = async () => {while (true) {const next = index;                        index += 1;if (next >= historyTargets.lengthreturn;const target = historyTargets[next];const history = awaitgatewayCall({method"chat.history",params: {sessionKey: target.resolvedKey,limit: messageLimit                            }                        });const filtered = stripToolMessages(Array.isArray(history?.messages) ? history.messages : []                        );                        target.row.messages = filtered.length > messageLimit ?                             filtered.slice(-messageLimit) : filtered;                    }                };awaitPromise.all(Array.from({ length: maxConcurrent }, () =>worker()));            }returnjsonResult({count: rows.length,sessions: rows            });        }    };}

1.4 会话类型分类

functionclassifySessionKind(params) {const { key, gatewayKind, alias, mainKey } = params;// 1. Gateway 已分类if (gatewayKind) return gatewayKind;// 2. 根据键分类if (key === "global"return"other";if (key === mainKey) return"main";if (key === alias) return"main";// 3. 根据前缀分类if (key.startsWith("cron:")) return"cron";if (key.startsWith("hook:")) return"hook";if (key.startsWith("node:")) return"node";if (key.startsWith("group:")) return"group";return"other";}

1.5 可见性检查

const visibilityGuard = awaitcreateSessionVisibilityGuard({action"list",requesterSessionKey: effectiveRequesterKey,    visibility,  // session_tools.visibility 配置a2aPolicycreateAgentToAgentPolicy(cfg)  // Agent-to-Agent 策略});// 检查会话是否可见if (!visibilityGuard.check(key).allowedcontinue;

1.6 执行流程图

sessions_list 工具调用    ↓1. 解析沙盒上下文   ├─ mainKey, alias   ├─ requesterInternalKey   └─ restrictToSpawned    ↓2. 解析会话可见性配置    ↓3. 解析类型过滤(kinds)    ↓4. 解析其他参数(limit/activeMinutes/messageLimit)    ↓5. 调用 Gateway 获取会话列表    ↓6. 创建可见性检查器    ↓7. 处理每个会话   ├─ 可见性检查   ├─ 类型分类   ├─ 类型过滤   ├─ 解析渠道信息   └─ 解析元数据    ↓8. 构建会话行对象    ↓9. 如果需要消息,添加到获取队列    ↓10. 并发获取消息(最多 4 个并发)    ↓11. 返回结果

1.7 返回结果格式

{"count":5,"sessions":[{"key":"main","kind":"main","channel":"feishu","label":"Main Session","displayName":"主会话","updatedAt":1711716000000,"sessionId":"abc123","model":"qwen3.5-plus","contextTokens":50000,"totalTokens":100000,"estimatedCostUsd":0.05,"status":"idle","startedAt":1711710000000,"runtimeMs":6000000,"thinkingLevel":"high","messages":[{"role":"user","content":"Hello"},{"role":"assistant","content":"Hi there!"}]}]}

二、sessions_history 工具

2.1 工具概述

功能:获取指定会话的历史消息核心特性

  • • 敏感内容脱敏(redact sensitive text)
  • • 文本截断(最大 4000 字符)
  • • 图片省略(只保留元数据)
  • • 思考过程签名删除
  • • 使用/成本信息删除
  • • 80KB 硬性限制

2.2 Schema 定义

位置:第 108788 行

constSessionsHistoryToolSchema = Type.Object({sessionKeyType.String(),limitType.Optional(Type.Number({ minimum1 })),includeToolsType.Optional(Type.Boolean())});// 硬性限制constSESSIONS_HISTORY_MAX_BYTES = 80 * 1024;  // 80KBconstSESSIONS_HISTORY_TEXT_MAX_CHARS = 4000;   // 4000 字符

2.3 文本截断函数

位置:第 108798 行

functiontruncateHistoryText(text) {// 1. 敏感内容脱敏const sanitized = redactSensitiveText(text);const redacted = sanitized !== text;// 2. 检查是否超过限制if (sanitized.length <= SESSIONS_HISTORY_TEXT_MAX_CHARS) {return {text: sanitized,truncatedfalse,            redacted        };    }// 3. 截断并添加标记return {text`${truncateUtf16Safe(sanitized, SESSIONS_HISTORY_TEXT_MAX_CHARS)}\n…(truncated)…`,truncatedtrue,        redacted    };}

2.4 内容块清理函数

位置:第 108816 行

functionsanitizeHistoryContentBlock(block) {if (!block || typeof block !== "object") {return { block, truncatedfalseredactedfalse };    }const entry = { ...block };let truncated = false;let redacted = false;const type = typeof entry.type === "string" ? entry.type : "";// 1. 文本内容if (typeof entry.text === "string") {const res = truncateHistoryText(entry.text);        entry.text = res.text;        truncated ||= res.truncated;        redacted ||= res.redacted;    }// 2. 思考过程if (type === "thinking") {if (typeof entry.thinking === "string") {const res = truncateHistoryText(entry.thinking);            entry.thinking = res.text;            truncated ||= res.truncated;            redacted ||= res.redacted;        }// 删除思考签名(安全考虑)if ("thinkingSignature"in entry) {delete entry.thinkingSignature;            truncated = true;        }    }// 3. 部分 JSON(工具调用)if (typeof entry.partialJson === "string") {const res = truncateHistoryText(entry.partialJson);        entry.partialJson = res.text;        truncated ||= res.truncated;        redacted ||= res.redacted;    }// 4. 图片(省略数据,只保留元数据)if (type === "image") {const data = typeof entry.data === "string" ? entry.data : void0;const bytes = data ? data.length : void0;if ("data"in entry) {delete entry.data;  // 删除 Base64 数据            truncated = true;        }        entry.omitted = true;  // 标记为已省略if (bytes !== void0) entry.bytes = bytes;  // 保留大小信息    }return { block: entry, truncated, redacted };}

2.5 消息清理函数

位置:第 108879 行

functionsanitizeHistoryMessage(message) {if (!message || typeof message !== "object") {return { message, truncatedfalseredactedfalse };    }const entry = { ...message };let truncated = false;let redacted = false;// 1. 删除敏感元数据if ("details"in entry) {delete entry.details;        truncated = true;    }if ("usage"in entry) {delete entry.usage;  // token 使用量        truncated = true;    }if ("cost"in entry) {delete entry.cost;  // 成本        truncated = true;    }// 2. 处理文本内容if (typeof entry.content === "string") {const res = truncateHistoryText(entry.content);        entry.content = res.text;        truncated ||= res.truncated;        redacted ||= res.redacted;    } elseif (Array.isArray(entry.content)) {const updated = entry.content.map((block) =>sanitizeHistoryContentBlock(block));        entry.content = updated.map((item) => item.block);        truncated ||= updated.some((item) => item.truncated);        redacted ||= updated.some((item) => item.redacted);    }// 3. 处理 text 字段if (typeof entry.text === "string") {const res = truncateHistoryText(entry.text);        entry.text = res.text;        truncated ||= res.truncated;        redacted ||= res.redacted;    }return { message: entry, truncated, redacted };}

2.6 硬性限制函数

位置:第 108921 行

functionenforceSessionsHistoryHardCap(params) {// 1. 检查是否超过限制if (params.bytes <= params.maxBytes) {return {items: params.items,bytes: params.bytes,hardCappedfalse        };    }// 2. 尝试只保留最后一条消息const last = params.items.at(-1);const lastOnly = last ? [last] : [];const lastBytes = jsonUtf8Bytes(lastOnly);if (lastBytes <= params.maxBytes) {return {items: lastOnly,bytes: lastBytes,hardCappedtrue        };    }// 3. 如果最后一条也太大,返回占位符const placeholder = [{role"assistant",content"[sessions_history omitted: message too large]"    }];return {items: placeholder,bytesjsonUtf8Bytes(placeholder),hardCappedtrue    };}

2.7 完整执行代码

位置:第 108941 行

functioncreateSessionsHistoryTool(opts) {return {label"Session History",name"sessions_history",description"Fetch message history for a session.",parametersSessionsHistoryToolSchema,executeasync (_toolCallId, args) => {const params = args;const gatewayCall = opts?.callGateway ?? callGateway;// 1. 解析 sessionKey(必填)const sessionKeyParam = readStringParam$1(params, "sessionKey", { requiredtrue });const cfg = opts?.config ?? loadConfig();// 2. 解析沙盒上下文const { mainKey, alias, effectiveRequesterKey, restrictToSpawned } = resolveSandboxedSessionToolContext({                cfg,agentSessionKey: opts?.agentSessionKey,sandboxed: opts?.sandboxed            });// 3. 解析会话引用const resolvedSession = awaitresolveSessionReference({sessionKey: sessionKeyParam,                alias,                mainKey,requesterInternalKey: effectiveRequesterKey,                restrictToSpawned            });if (!resolvedSession.ok) {returnjsonResult({status: resolvedSession.status,error: resolvedSession.error                });            }// 4. 检查可见性const visibleSession = awaitresolveVisibleSessionReference({                resolvedSession,requesterSessionKey: effectiveRequesterKey,                restrictToSpawned,visibilitySessionKey: sessionKeyParam            });if (!visibleSession.ok) {returnjsonResult({status: visibleSession.status,error: visibleSession.error                });            }const resolvedKey = visibleSession.key;const displayKey = visibleSession.displayKey;// 5. 创建可见性检查器const a2aPolicy = createAgentToAgentPolicy(cfg);const access = (awaitcreateSessionVisibilityGuard({action"history",requesterSessionKey: effectiveRequesterKey,visibilityresolveEffectiveSessionToolsVisibility({                    cfg,sandboxed: opts?.sandboxed === true                }),                a2aPolicy            })).check(resolvedKey);if (!access.allowed) {returnjsonResult({status: access.status,error: access.error                });            }// 6. 解析参数const limit = typeof params.limit === "number" && Number.isFinite(params.limit) ? Math.max(1Math.floor(params.limit)) : void0;const includeTools = Boolean(params.includeTools);// 7. 获取历史消息const result = awaitgatewayCall({method"chat.history",params: {sessionKey: resolvedKey,                    limit                }            });const messages = Array.isArray(result?.messages) ? result.messages : [];// 8. 清理消息const sanitized = messages.map((msg) =>sanitizeHistoryMessage(msg));const cleanedMessages = sanitized.map((item) => item.message);// 9. 应用硬性限制const totalBytes = jsonUtf8Bytes(cleanedMessages);const capped = enforceSessionsHistoryHardCap({items: cleanedMessages,bytes: totalBytes,maxBytesSESSIONS_HISTORY_MAX_BYTES            });returnjsonResult({sessionKey: displayKey,messages: capped.items,hardCapped: capped.hardCapped,totalBytes: capped.bytes            });        }    };}

2.8 执行流程图

sessions_history 工具调用    ↓1. 解析 sessionKey(必填)    ↓2. 解析沙盒上下文    ↓3. 解析会话引用   ├─ 检查会话是否存在   └─ 解析内部键    ↓4. 检查可见性   ├─ 可见性配置   ├─ A2A 策略   └─ 访问检查    ↓5. 解析参数(limit/includeTools)    ↓6. 调用 Gateway 获取历史消息    ↓7. 清理消息   ├─ 删除敏感元数据(usage/cost/details)   ├─ 文本截断(4000 字符)   ├─ 思考签名删除   └─ 图片数据省略    ↓8. 应用硬性限制(80KB)   ├─ 未超限 → 返回全部   ├─ 超限 → 只保留最后一条   └─ 最后一条也超限 → 返回占位符    ↓9. 返回结果

2.9 返回结果格式

正常

{"sessionKey":"main","messages":[{"role":"user","content":"Hello","timestamp":1711716000000},{"role":"assistant","content":"Hi there!","timestamp":1711716001000}],"hardCapped":false,"totalBytes":5000}

被截断

{"sessionKey":"main","messages":[...],"hardCapped":true,"totalBytes":81920}

图片消息

{"role":"user","content":[{"type":"image","omitted":true,"bytes":1048576}],"timestamp":1711716000000}

三、关键机制对比

3.1 过滤能力

特性
sessions_list
sessions_history
类型过滤
kinds 数组
不支持
活跃度过滤
activeMinutes
不支持
数量限制
limit
limit
消息获取
messageLimit(最大 20)
全部消息

3.2 安全限制

限制类型
sessions_list
sessions_history
可见性检查
visibilityGuard
visibilityGuard
沙盒隔离
restrictToSpawned
restrictToSpawned
内容脱敏
不需要
redactSensitiveText
硬性限制
80KB

3.3 并发处理

特性
sessions_list
sessions_history
并发获取
最多 4 个并发
单次获取
并发目标
messageLimit > 0 的会话
不适用

四、使用示例

4.1 sessions_list 工具调用

用户列出最近 10 分钟活跃的主会话

大模型返回

{"tool_call":{"name":"sessions_list","arguments":{"kinds":["main"],"activeMinutes":10,"limit":10}}}

执行结果

{"count":1,"sessions":[{"key":"main","kind":"main","channel":"feishu","updatedAt":1711716000000,"status":"idle"}]}

4.2 sessions_history 工具调用

用户获取主会话的最后 20 条消息

大模型返回

{"tool_call":{"name":"sessions_history","arguments":{"sessionKey":"main","limit":20}}}

执行结果

{"sessionKey":"main","messages":[{"role":"user","content":"Hello"},{"role":"assistant","content":"Hi there!"}],"hardCapped":false,"totalBytes":5000}
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-14 20:38:34 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/524405.html
  2. 运行时间 : 0.125034s [ 吞吐率:8.00req/s ] 内存消耗:5,045.32kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=e8fb95f755c40398badc4fb2a7dc09fc
  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.000698s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000870s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000341s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000272s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000506s ]
  6. SELECT * FROM `set` [ RunTime:0.000197s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000571s ]
  8. SELECT * FROM `article` WHERE `id` = 524405 LIMIT 1 [ RunTime:0.000542s ]
  9. UPDATE `article` SET `lasttime` = 1776170314 WHERE `id` = 524405 [ RunTime:0.008808s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000239s ]
  11. SELECT * FROM `article` WHERE `id` < 524405 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000457s ]
  12. SELECT * FROM `article` WHERE `id` > 524405 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000378s ]
  13. SELECT * FROM `article` WHERE `id` < 524405 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000784s ]
  14. SELECT * FROM `article` WHERE `id` < 524405 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.004935s ]
  15. SELECT * FROM `article` WHERE `id` < 524405 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.009238s ]
0.126770s