From db5d3fb1f700ae7fa55778cc6fcbc395078a1328 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=B5=B7?= <7836246@qq.com> Date: Fri, 20 Mar 2026 09:26:23 +0800 Subject: [PATCH] feat: show tools mode (disabled/passthrough) in startup and request logs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Startup log: Tools: disabled / passthrough / schema=full - Request log: tools=98(跳过) / tools=98(透传) / tools=98 --- src/index.ts | 18 ++++++++++++------ src/logger.ts | 8 +++++++- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/index.ts b/src/index.ts index 039197c..88e2dba 100644 --- a/src/index.ts +++ b/src/index.ts @@ -159,12 +159,18 @@ app.listen(config.port, () => { const toolsCfg = config.tools; let toolsInfo = 'default (full, desc=full)'; if (toolsCfg) { - const parts: string[] = []; - parts.push(`schema=${toolsCfg.schemaMode}`); - parts.push(toolsCfg.descriptionMaxLength === 0 ? 'desc=full' : `desc≤${toolsCfg.descriptionMaxLength}`); - if (toolsCfg.includeOnly?.length) parts.push(`whitelist=${toolsCfg.includeOnly.length}`); - if (toolsCfg.exclude?.length) parts.push(`blacklist=${toolsCfg.exclude.length}`); - toolsInfo = parts.join(', '); + if (toolsCfg.disabled) { + toolsInfo = '\x1b[33mdisabled\x1b[0m (不注入工具定义,节省上下文)'; + } else if (toolsCfg.passthrough) { + toolsInfo = '\x1b[36mpassthrough\x1b[0m (原始 JSON 嵌入)'; + } else { + const parts: string[] = []; + parts.push(`schema=${toolsCfg.schemaMode}`); + parts.push(toolsCfg.descriptionMaxLength === 0 ? 'desc=full' : `desc≤${toolsCfg.descriptionMaxLength}`); + if (toolsCfg.includeOnly?.length) parts.push(`whitelist=${toolsCfg.includeOnly.length}`); + if (toolsCfg.exclude?.length) parts.push(`blacklist=${toolsCfg.exclude.length}`); + toolsInfo = parts.join(', '); + } } console.log(''); diff --git a/src/logger.ts b/src/logger.ts index 7f1d166..66a46c0 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -316,7 +316,13 @@ export function createRequestLogger(opts: { requestPayloads.delete(oldId); } - const toolInfo = opts.hasTools ? ` tools=${opts.toolCount}` : ''; + const toolMode = (() => { + const cfg = getConfig().tools; + if (cfg?.disabled) return '(跳过)'; + if (cfg?.passthrough) return '(透传)'; + return ''; + })(); + const toolInfo = opts.hasTools ? ` tools=${opts.toolCount}${toolMode}` : ''; const fmtTag = summary.apiFormat === 'openai' ? ' [OAI]' : summary.apiFormat === 'responses' ? ' [RSP]' : ''; console.log(`\x1b[36m⟶\x1b[0m [${requestId}] ${opts.method} ${opts.path}${fmtTag} | model=${opts.model} stream=${opts.stream}${toolInfo} msgs=${opts.messageCount}`);