webaiapi 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +184 -2
- package/bin/webapi.mjs +45 -0
- package/dist/browser/auth-capture.d.ts +110 -0
- package/dist/browser/auth-capture.d.ts.map +1 -0
- package/dist/browser/auth-capture.js +487 -0
- package/dist/browser/auth-capture.js.map +1 -0
- package/dist/browser/credentials.d.ts +102 -0
- package/dist/browser/credentials.d.ts.map +1 -0
- package/dist/browser/credentials.js +209 -0
- package/dist/browser/credentials.js.map +1 -0
- package/dist/browser/js-eval.d.ts +44 -0
- package/dist/browser/js-eval.d.ts.map +1 -0
- package/dist/browser/js-eval.js +20 -0
- package/dist/browser/js-eval.js.map +1 -0
- package/dist/browser/login-flow.d.ts +171 -0
- package/dist/browser/login-flow.d.ts.map +1 -0
- package/dist/browser/login-flow.js +606 -0
- package/dist/browser/login-flow.js.map +1 -0
- package/dist/browser/manager.d.ts +144 -0
- package/dist/browser/manager.d.ts.map +1 -0
- package/dist/browser/manager.js +586 -0
- package/dist/browser/manager.js.map +1 -0
- package/dist/browser/platforms.d.ts +96 -0
- package/dist/browser/platforms.d.ts.map +1 -0
- package/dist/browser/platforms.js +288 -0
- package/dist/browser/platforms.js.map +1 -0
- package/dist/browser/sse-capture.d.ts +23 -0
- package/dist/browser/sse-capture.d.ts.map +1 -0
- package/dist/browser/sse-capture.js +199 -0
- package/dist/browser/sse-capture.js.map +1 -0
- package/dist/browser/stealth.d.ts +12 -0
- package/dist/browser/stealth.d.ts.map +1 -0
- package/dist/browser/stealth.js +12 -0
- package/dist/browser/stealth.js.map +1 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +441 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +90 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +246 -0
- package/dist/config.js.map +1 -0
- package/dist/controllers/history-db.d.ts +56 -0
- package/dist/controllers/history-db.d.ts.map +1 -0
- package/dist/controllers/history-db.js +260 -0
- package/dist/controllers/history-db.js.map +1 -0
- package/dist/controllers/request-pool.d.ts +78 -0
- package/dist/controllers/request-pool.d.ts.map +1 -0
- package/dist/controllers/request-pool.js +222 -0
- package/dist/controllers/request-pool.js.map +1 -0
- package/dist/controllers/router.d.ts +172 -0
- package/dist/controllers/router.d.ts.map +1 -0
- package/dist/controllers/router.js +569 -0
- package/dist/controllers/router.js.map +1 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/log/api-logger.d.ts +55 -0
- package/dist/log/api-logger.d.ts.map +1 -0
- package/dist/log/api-logger.js +264 -0
- package/dist/log/api-logger.js.map +1 -0
- package/dist/log/debug-logger.d.ts +49 -0
- package/dist/log/debug-logger.d.ts.map +1 -0
- package/dist/log/debug-logger.js +285 -0
- package/dist/log/debug-logger.js.map +1 -0
- package/dist/log/logger.d.ts +16 -0
- package/dist/log/logger.d.ts.map +1 -0
- package/dist/log/logger.js +35 -0
- package/dist/log/logger.js.map +1 -0
- package/dist/postinstall.d.ts +3 -0
- package/dist/postinstall.d.ts.map +1 -0
- package/dist/postinstall.js +90 -0
- package/dist/postinstall.js.map +1 -0
- package/dist/providers/base.d.ts +83 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +51 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/chatglm-dom-extract.d.ts +24 -0
- package/dist/providers/chatglm-dom-extract.d.ts.map +1 -0
- package/dist/providers/chatglm-dom-extract.js +175 -0
- package/dist/providers/chatglm-dom-extract.js.map +1 -0
- package/dist/providers/chatglm-dom.d.ts +110 -0
- package/dist/providers/chatglm-dom.d.ts.map +1 -0
- package/dist/providers/chatglm-dom.js +384 -0
- package/dist/providers/chatglm-dom.js.map +1 -0
- package/dist/providers/chatglm-sse.d.ts +119 -0
- package/dist/providers/chatglm-sse.d.ts.map +1 -0
- package/dist/providers/chatglm-sse.js +241 -0
- package/dist/providers/chatglm-sse.js.map +1 -0
- package/dist/providers/chatglm.d.ts +288 -0
- package/dist/providers/chatglm.d.ts.map +1 -0
- package/dist/providers/chatglm.js +1631 -0
- package/dist/providers/chatglm.js.map +1 -0
- package/dist/routes/chat.d.ts +117 -0
- package/dist/routes/chat.d.ts.map +1 -0
- package/dist/routes/chat.js +1346 -0
- package/dist/routes/chat.js.map +1 -0
- package/dist/routes/compress.d.ts +142 -0
- package/dist/routes/compress.d.ts.map +1 -0
- package/dist/routes/compress.js +551 -0
- package/dist/routes/compress.js.map +1 -0
- package/dist/routes/failover.d.ts +34 -0
- package/dist/routes/failover.d.ts.map +1 -0
- package/dist/routes/failover.js +221 -0
- package/dist/routes/failover.js.map +1 -0
- package/dist/routes/helpers.d.ts +174 -0
- package/dist/routes/helpers.d.ts.map +1 -0
- package/dist/routes/helpers.js +525 -0
- package/dist/routes/helpers.js.map +1 -0
- package/dist/routes/meta.d.ts +31 -0
- package/dist/routes/meta.d.ts.map +1 -0
- package/dist/routes/meta.js +184 -0
- package/dist/routes/meta.js.map +1 -0
- package/dist/routes/sse.d.ts +82 -0
- package/dist/routes/sse.d.ts.map +1 -0
- package/dist/routes/sse.js +77 -0
- package/dist/routes/sse.js.map +1 -0
- package/dist/server/app.d.ts +24 -0
- package/dist/server/app.d.ts.map +1 -0
- package/dist/server/app.js +292 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/middleware/api-key.d.ts +61 -0
- package/dist/server/middleware/api-key.d.ts.map +1 -0
- package/dist/server/middleware/api-key.js +95 -0
- package/dist/server/middleware/api-key.js.map +1 -0
- package/dist/server/middleware/rate-limit.d.ts +67 -0
- package/dist/server/middleware/rate-limit.d.ts.map +1 -0
- package/dist/server/middleware/rate-limit.js +134 -0
- package/dist/server/middleware/rate-limit.js.map +1 -0
- package/dist/server/middleware/timeout.d.ts +34 -0
- package/dist/server/middleware/timeout.d.ts.map +1 -0
- package/dist/server/middleware/timeout.js +64 -0
- package/dist/server/middleware/timeout.js.map +1 -0
- package/dist/server/types.d.ts +20 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +2 -0
- package/dist/server/types.js.map +1 -0
- package/dist/tools/build.d.ts +14 -0
- package/dist/tools/build.d.ts.map +1 -0
- package/dist/tools/build.js +105 -0
- package/dist/tools/build.js.map +1 -0
- package/dist/tools/clean.d.ts +32 -0
- package/dist/tools/clean.d.ts.map +1 -0
- package/dist/tools/clean.js +65 -0
- package/dist/tools/clean.js.map +1 -0
- package/dist/tools/convert.d.ts +50 -0
- package/dist/tools/convert.d.ts.map +1 -0
- package/dist/tools/convert.js +289 -0
- package/dist/tools/convert.js.map +1 -0
- package/dist/tools/names.d.ts +138 -0
- package/dist/tools/names.d.ts.map +1 -0
- package/dist/tools/names.js +578 -0
- package/dist/tools/names.js.map +1 -0
- package/dist/tools/parse.d.ts +31 -0
- package/dist/tools/parse.d.ts.map +1 -0
- package/dist/tools/parse.js +273 -0
- package/dist/tools/parse.js.map +1 -0
- package/dist/tools/placeholder.d.ts +21 -0
- package/dist/tools/placeholder.d.ts.map +1 -0
- package/dist/tools/placeholder.js +135 -0
- package/dist/tools/placeholder.js.map +1 -0
- package/dist/tools/prompts.d.ts +42 -0
- package/dist/tools/prompts.d.ts.map +1 -0
- package/dist/tools/prompts.js +69 -0
- package/dist/tools/prompts.js.map +1 -0
- package/dist/tools/protocol.d.ts +58 -0
- package/dist/tools/protocol.d.ts.map +1 -0
- package/dist/tools/protocol.js +287 -0
- package/dist/tools/protocol.js.map +1 -0
- package/dist/tools/repair.d.ts +83 -0
- package/dist/tools/repair.d.ts.map +1 -0
- package/dist/tools/repair.js +510 -0
- package/dist/tools/repair.js.map +1 -0
- package/dist/tools/workspace.d.ts +40 -0
- package/dist/tools/workspace.d.ts.map +1 -0
- package/dist/tools/workspace.js +224 -0
- package/dist/tools/workspace.js.map +1 -0
- package/dist/types/message.d.ts +87 -0
- package/dist/types/message.d.ts.map +1 -0
- package/dist/types/message.js +85 -0
- package/dist/types/message.js.map +1 -0
- package/dist/types/openai.d.ts +100 -0
- package/dist/types/openai.d.ts.map +1 -0
- package/dist/types/openai.js +66 -0
- package/dist/types/openai.js.map +1 -0
- package/dist/utils/errors.d.ts +82 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +115 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/mutex.d.ts +31 -0
- package/dist/utils/mutex.d.ts.map +1 -0
- package/dist/utils/mutex.js +61 -0
- package/dist/utils/mutex.js.map +1 -0
- package/dist/utils/prompt.d.ts +150 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +514 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/text.d.ts +30 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +70 -0
- package/dist/utils/text.js.map +1 -0
- package/package.json +67 -4
- package/postinstall.mjs +34 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `webaiapi` 库入口。
|
|
3
|
+
*
|
|
4
|
+
* 当前进度见 `docs/migration-status.md`。
|
|
5
|
+
* 已可用的部分:配置层、类型层、工具调用协议层(M1)。
|
|
6
|
+
*/
|
|
7
|
+
export type { Settings, LoadSettingsOptions } from './config.js';
|
|
8
|
+
export { settings, loadSettings, toBool, toInt, parseDotEnv, expandHome, getAvailableModelsList, getApiKeys, getDefaultWorkspacePaths, } from './config.js';
|
|
9
|
+
export type { ChatMessage, ContentPart, MessageContent, MessageDict, MessageRole, ToolCallPayload, ToolDefinition, } from './types/message.js';
|
|
10
|
+
export { ALLOWED_ROLES, getTextContent, messageToDict, toolNameOf, toolParamNames, toolRequiredParams, } from './types/message.js';
|
|
11
|
+
export type { ChatCompletionChoice, ChatCompletionRequest, HealthCheckResponse, ModelInfo, ModelListResponse, Usage, } from './types/openai.js';
|
|
12
|
+
export { buildOpenAiError, chatCompletionRequestSchema, makeModelInfo, messageSchema, nowSeconds, } from './types/openai.js';
|
|
13
|
+
export { logger, resolveLogLevel } from './log/logger.js';
|
|
14
|
+
export { cleanDomHtml, normalizeToolCallTags, stripLeftoverToolTags } from './tools/clean.js';
|
|
15
|
+
export { PLACEHOLDER_PATH_KEYS, PLACEHOLDER_TOOL_NAMES, PLACEHOLDER_VALUES, filterPlaceholderToolCalls, isPlaceholderToolCall, } from './tools/placeholder.js';
|
|
16
|
+
export { DOM_CORRUPTION_INDICATOR, DOM_PREVIEW_KEY_INDICATOR, escapeRegExp, extractComplexFieldFromCorrupted, extractPathFromCorrupted, extractToolCallByRegex, hasSmartQuotes, repairDomCorruptedJson, repairJson, tryParseJson, } from './tools/repair.js';
|
|
17
|
+
export { EMPTY_TOOL_MAPS, FILE_SYSTEM_TOOLS, PLATFORM_BUILTIN_TOOL_NAMES, TOOL_NAME_ALIASES, TRAE_INTERNAL_TOOLS, USER_INTERACTION_TOOLS, createToolMaps, detectToolNames, filterUnknownToolCalls, makeToolCallId, normalizeParamKey, normalizeToolArguments, normalizeToolName, repairToolCallBySignature, resolveToolName, } from './tools/names.js';
|
|
18
|
+
export type { SignatureReroute, ToolMaps } from './tools/names.js';
|
|
19
|
+
export { buildToolCall } from './tools/build.js';
|
|
20
|
+
export { parseToolCallsFromText, rawDecodeJson } from './tools/parse.js';
|
|
21
|
+
export type { ParseResult } from './tools/parse.js';
|
|
22
|
+
export { TOOL_CALL_CLOSE, TOOL_CALL_OPEN, TOOL_DESC_MAX_LEN, buildToolProtocol, formatMessagesAsText, formatToolsAsText, } from './tools/protocol.js';
|
|
23
|
+
export type { FormatToolsOptions, ToolProtocol } from './tools/protocol.js';
|
|
24
|
+
export { FABRICATED_PATH_PREFIXES, PATH_LINE_PATTERN, SELF_PROJECT_DIR, WORKSPACE_PATH_PATTERNS, extractFilePathsFromMessages, extractWorkspacePath, } from './tools/workspace.js';
|
|
25
|
+
export type { ExtractWorkspaceOptions } from './tools/workspace.js';
|
|
26
|
+
export { buildWriteArgs, collectFilePathsInText, convertTextToToolCalls, directConvertToToolCalls, inferFilename, looksLikeFileContent, looksLikeFilepath, } from './tools/convert.js';
|
|
27
|
+
export { RECOVERY_ANSWER_MAX_LEN, buildActionRecoveryPrompt } from './tools/prompts.js';
|
|
28
|
+
export type { BuildActionRecoveryPromptOptions } from './tools/prompts.js';
|
|
29
|
+
export { Mutex } from './utils/mutex.js';
|
|
30
|
+
export { computeIncremental, sanitizeMessage, truncateMessage } from './utils/text.js';
|
|
31
|
+
export { SSE_CAPTURE_JS } from './browser/sse-capture.js';
|
|
32
|
+
export { STEALTH_JS } from './browser/stealth.js';
|
|
33
|
+
export { authBaseDir, authFilePath, cookieFingerprint, decodeJwt, getCookieValue, isAuthAvailable, legacyAuthFilePath, listAccounts, loadAuth, normalizeCookies, } from './browser/credentials.js';
|
|
34
|
+
export type { AccountInfo, AuthRecord, CapturedCookie, PlatformApiPattern } from './browser/credentials.js';
|
|
35
|
+
export { PLATFORMS, PLATFORM_API_PATTERNS, PLATFORM_IDS, PLATFORM_LIST, PLATFORM_LOGIN_URLS, PLATFORM_NAMES, PLATFORMS_WITH_PROVIDER, extractAccountInfoSync, isKnownPlatform, platformDisplayName, } from './browser/platforms.js';
|
|
36
|
+
export type { PlatformSpec } from './browser/platforms.js';
|
|
37
|
+
export { accountCooldownRemaining, accountKey, browserState, clearAccountRole, closeBrowser, disposeAllChannels, disposeSharedBrowser, enterAccount, exitAccount, getAccountRole, getBrowser, getChannelPage, getPage, injectResponseJs, invalidateBrowser, isAccountBusy, isAccountCooling, loadCookies, markAccountCooldown, navigateTo, newWorkPage, peekPage, resetAccountState, setAccountRole, sweepOrphanBrowsers, transferAccountBusy, writeAuthFile, } from './browser/manager.js';
|
|
38
|
+
export type { SharedBrowser } from './browser/manager.js';
|
|
39
|
+
export { BaseProvider } from './providers/base.js';
|
|
40
|
+
export type { ChatRequest, ChatResponse } from './providers/base.js';
|
|
41
|
+
export { extractSseAll, extractSseAnswer, getLastRawSse, isBlankOrForeignUrl, isBrowserConnectionError, iterSseJson, logSseSummary, resetLastRawSse, safeIncremental, setLastRawSse, } from './providers/chatglm-sse.js';
|
|
42
|
+
export type { LastRawSse, SseExtractResult } from './providers/chatglm-sse.js';
|
|
43
|
+
export { ModelRouter, PLATFORM_MODEL_NAMES, PROVIDER_IMPLEMENTED_PLATFORMS, getModelRouter, __setModelRouterForTest, } from './controllers/router.js';
|
|
44
|
+
export type { AccountSummaryItem, MixCandidate } from './controllers/router.js';
|
|
45
|
+
export { HistoryDB, getHistoryDb, defaultHistoryDbPath } from './controllers/history-db.js';
|
|
46
|
+
export type { HistoryMessage, HistoryStats } from './controllers/history-db.js';
|
|
47
|
+
export { IntelligentScheduler, RequestPool, getRequestPool, getScheduler, } from './controllers/request-pool.js';
|
|
48
|
+
export type { PooledRequest, RequestPoolStatus, RequestStatus } from './controllers/request-pool.js';
|
|
49
|
+
export { apiLogPath, formatTimestamp, logAiPlatformRequest, logAiPlatformResponse, logAiPlatformResponseComplete, logApiError, logApiRequest, logApiResponse, logRoundStart, resetApiLog, } from './log/api-logger.js';
|
|
50
|
+
export { debugLogPath, logAiRequest, logAiResponse, logClientRequest, logClientResponse, logError, logToolCallResult, } from './log/debug-logger.js';
|
|
51
|
+
export { BROWSER_PROMPT_MAX_LEN, COMPRESS_MIN_BUDGET, TOOL_ROUND_LIMIT, TOTAL_TIME_BUDGET, buildUsage, detectMismatchedAnswer, estimateTokens, extractUserQuestion, formatHistoryContext, formatRecentProgress, getSessionDelta, isReadOnlyTool, looksUnfinishedAnswer, platformOf, rememberSessionSend, truncatePromptForBrowser, } from './routes/helpers.js';
|
|
52
|
+
export { buildReparseInput, extractPlatformName, streamWithFailover } from './routes/failover.js';
|
|
53
|
+
export { compressTextWithPage, precompressHistory, schedulePrecompress, shrinkPromptViaCompression, splitForCompression, summaryIsAbortable, summaryIsBad, waitForBackgroundTasks, } from './routes/compress.js';
|
|
54
|
+
export { DONE, contentChunk, roleChunk, sseData, toolCallsChunk } from './routes/sse.js';
|
|
55
|
+
export { nonStreamChatCompletion, parseAndRecoverToolCalls, preparePrompt, registerChatRoutes, streamChatCompletion, } from './routes/chat.js';
|
|
56
|
+
export type { PrepareResult, PreparedRequest } from './routes/chat.js';
|
|
57
|
+
export { registerMetaRoutes, runStartupTasks } from './routes/meta.js';
|
|
58
|
+
export { createApp, initApiKeys, startServer } from './server/app.js';
|
|
59
|
+
export { ApiKeyManager, extractApiKey, getApiKeyManager, verifyApiKey } from './server/middleware/api-key.js';
|
|
60
|
+
export { RateLimiter, TokenBucket, clientKeyOf } from './server/middleware/rate-limit.js';
|
|
61
|
+
export { makeTimeoutHook } from './server/middleware/timeout.js';
|
|
62
|
+
export { AuthCapture, capturePlatformAuth, fetchAccountInfo } from './browser/auth-capture.js';
|
|
63
|
+
export { deriveAccountId, detectDuplicate, readExistingAccounts, runLogin, runLogout, slugAccountId, toSlug, } from './browser/login-flow.js';
|
|
64
|
+
export type { DuplicateVerdict, ExistingAccount, IdentityPrint, LoginOptions, LogoutOptions, } from './browser/login-flow.js';
|
|
65
|
+
export { confirmYesNo, displayWidth, firstSelectableIndex, inputText, isInteractive, padDisplay, renderChoiceList, resolveChoiceInput, selectOne, supportsColor, tokenizeKeys, } from './utils/prompt.js';
|
|
66
|
+
export type { Choice, ChoiceResolution, KeyToken } from './utils/prompt.js';
|
|
67
|
+
export { helpText, parseArgs, runCli } from './cli.js';
|
|
68
|
+
export { ChatGLMBrowserProvider } from './providers/chatglm.js';
|
|
69
|
+
export type { ChatGLMProviderOptions } from './providers/chatglm.js';
|
|
70
|
+
export { DETECT_COMPLETION_JS, DETECT_THINKING_JS, HAS_INPUT_BOX_JS, PAGE_SHOWS_BUSY_JS, PROBE_LOGGED_IN_JS, READ_BUSY_NOTICE_JS, RESET_SSE_JS, SSE_GET_JS, } from './providers/chatglm-dom.js';
|
|
71
|
+
export { EXTRACT_RESPONSE_JS, FORCED_EXTRACT_JS } from './providers/chatglm-dom-extract.js';
|
|
72
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `webaiapi` 库入口。
|
|
3
|
+
*
|
|
4
|
+
* 当前进度见 `docs/migration-status.md`。
|
|
5
|
+
* 已可用的部分:配置层、类型层、工具调用协议层(M1)。
|
|
6
|
+
*/
|
|
7
|
+
export { settings, loadSettings, toBool, toInt, parseDotEnv, expandHome, getAvailableModelsList, getApiKeys, getDefaultWorkspacePaths, } from './config.js';
|
|
8
|
+
export { ALLOWED_ROLES, getTextContent, messageToDict, toolNameOf, toolParamNames, toolRequiredParams, } from './types/message.js';
|
|
9
|
+
export { buildOpenAiError, chatCompletionRequestSchema, makeModelInfo, messageSchema, nowSeconds, } from './types/openai.js';
|
|
10
|
+
export { logger, resolveLogLevel } from './log/logger.js';
|
|
11
|
+
/* ---------------- 工具调用协议层 ---------------- */
|
|
12
|
+
export { cleanDomHtml, normalizeToolCallTags, stripLeftoverToolTags } from './tools/clean.js';
|
|
13
|
+
export { PLACEHOLDER_PATH_KEYS, PLACEHOLDER_TOOL_NAMES, PLACEHOLDER_VALUES, filterPlaceholderToolCalls, isPlaceholderToolCall, } from './tools/placeholder.js';
|
|
14
|
+
export { DOM_CORRUPTION_INDICATOR, DOM_PREVIEW_KEY_INDICATOR, escapeRegExp, extractComplexFieldFromCorrupted, extractPathFromCorrupted, extractToolCallByRegex, hasSmartQuotes, repairDomCorruptedJson, repairJson, tryParseJson, } from './tools/repair.js';
|
|
15
|
+
export { EMPTY_TOOL_MAPS, FILE_SYSTEM_TOOLS, PLATFORM_BUILTIN_TOOL_NAMES, TOOL_NAME_ALIASES, TRAE_INTERNAL_TOOLS, USER_INTERACTION_TOOLS, createToolMaps, detectToolNames, filterUnknownToolCalls, makeToolCallId, normalizeParamKey, normalizeToolArguments, normalizeToolName, repairToolCallBySignature, resolveToolName, } from './tools/names.js';
|
|
16
|
+
export { buildToolCall } from './tools/build.js';
|
|
17
|
+
export { parseToolCallsFromText, rawDecodeJson } from './tools/parse.js';
|
|
18
|
+
export { TOOL_CALL_CLOSE, TOOL_CALL_OPEN, TOOL_DESC_MAX_LEN, buildToolProtocol, formatMessagesAsText, formatToolsAsText, } from './tools/protocol.js';
|
|
19
|
+
export { FABRICATED_PATH_PREFIXES, PATH_LINE_PATTERN, SELF_PROJECT_DIR, WORKSPACE_PATH_PATTERNS, extractFilePathsFromMessages, extractWorkspacePath, } from './tools/workspace.js';
|
|
20
|
+
export { buildWriteArgs, collectFilePathsInText, convertTextToToolCalls, directConvertToToolCalls, inferFilename, looksLikeFileContent, looksLikeFilepath, } from './tools/convert.js';
|
|
21
|
+
export { RECOVERY_ANSWER_MAX_LEN, buildActionRecoveryPrompt } from './tools/prompts.js';
|
|
22
|
+
/* ---------------- 浏览器层(M2) ---------------- */
|
|
23
|
+
export { Mutex } from './utils/mutex.js';
|
|
24
|
+
export { computeIncremental, sanitizeMessage, truncateMessage } from './utils/text.js';
|
|
25
|
+
export { SSE_CAPTURE_JS } from './browser/sse-capture.js';
|
|
26
|
+
export { STEALTH_JS } from './browser/stealth.js';
|
|
27
|
+
export { authBaseDir, authFilePath, cookieFingerprint, decodeJwt, getCookieValue, isAuthAvailable, legacyAuthFilePath, listAccounts, loadAuth, normalizeCookies, } from './browser/credentials.js';
|
|
28
|
+
/* 平台注册表(单一真相:加平台只改 `platforms.ts`) */
|
|
29
|
+
export { PLATFORMS, PLATFORM_API_PATTERNS, PLATFORM_IDS, PLATFORM_LIST, PLATFORM_LOGIN_URLS, PLATFORM_NAMES, PLATFORMS_WITH_PROVIDER, extractAccountInfoSync, isKnownPlatform, platformDisplayName, } from './browser/platforms.js';
|
|
30
|
+
export { accountCooldownRemaining, accountKey, browserState, clearAccountRole, closeBrowser, disposeAllChannels, disposeSharedBrowser, enterAccount, exitAccount, getAccountRole, getBrowser, getChannelPage, getPage, injectResponseJs, invalidateBrowser, isAccountBusy, isAccountCooling, loadCookies, markAccountCooldown, navigateTo, newWorkPage, peekPage, resetAccountState, setAccountRole, sweepOrphanBrowsers, transferAccountBusy, writeAuthFile, } from './browser/manager.js';
|
|
31
|
+
/* ---------------- Provider 层(M3) ---------------- */
|
|
32
|
+
export { BaseProvider } from './providers/base.js';
|
|
33
|
+
export { extractSseAll, extractSseAnswer, getLastRawSse, isBlankOrForeignUrl, isBrowserConnectionError, iterSseJson, logSseSummary, resetLastRawSse, safeIncremental, setLastRawSse, } from './providers/chatglm-sse.js';
|
|
34
|
+
/* ---------------- 控制器层(M4) ---------------- */
|
|
35
|
+
export { ModelRouter, PLATFORM_MODEL_NAMES, PROVIDER_IMPLEMENTED_PLATFORMS, getModelRouter, __setModelRouterForTest, } from './controllers/router.js';
|
|
36
|
+
export { HistoryDB, getHistoryDb, defaultHistoryDbPath } from './controllers/history-db.js';
|
|
37
|
+
export { IntelligentScheduler, RequestPool, getRequestPool, getScheduler, } from './controllers/request-pool.js';
|
|
38
|
+
/* ---------------- 日志(M4) ---------------- */
|
|
39
|
+
export { apiLogPath, formatTimestamp, logAiPlatformRequest, logAiPlatformResponse, logAiPlatformResponseComplete, logApiError, logApiRequest, logApiResponse, logRoundStart, resetApiLog, } from './log/api-logger.js';
|
|
40
|
+
export { debugLogPath, logAiRequest, logAiResponse, logClientRequest, logClientResponse, logError, logToolCallResult, } from './log/debug-logger.js';
|
|
41
|
+
/* ---------------- 路由辅助(M4) ---------------- */
|
|
42
|
+
export { BROWSER_PROMPT_MAX_LEN, COMPRESS_MIN_BUDGET, TOOL_ROUND_LIMIT, TOTAL_TIME_BUDGET, buildUsage, detectMismatchedAnswer, estimateTokens, extractUserQuestion, formatHistoryContext, formatRecentProgress, getSessionDelta, isReadOnlyTool, looksUnfinishedAnswer, platformOf, rememberSessionSend, truncatePromptForBrowser, } from './routes/helpers.js';
|
|
43
|
+
export { buildReparseInput, extractPlatformName, streamWithFailover } from './routes/failover.js';
|
|
44
|
+
export { compressTextWithPage, precompressHistory, schedulePrecompress, shrinkPromptViaCompression, splitForCompression, summaryIsAbortable, summaryIsBad, waitForBackgroundTasks, } from './routes/compress.js';
|
|
45
|
+
export { DONE, contentChunk, roleChunk, sseData, toolCallsChunk } from './routes/sse.js';
|
|
46
|
+
export { nonStreamChatCompletion, parseAndRecoverToolCalls, preparePrompt, registerChatRoutes, streamChatCompletion, } from './routes/chat.js';
|
|
47
|
+
export { registerMetaRoutes, runStartupTasks } from './routes/meta.js';
|
|
48
|
+
/* ---------------- 服务与 CLI(M4) ---------------- */
|
|
49
|
+
export { createApp, initApiKeys, startServer } from './server/app.js';
|
|
50
|
+
export { ApiKeyManager, extractApiKey, getApiKeyManager, verifyApiKey } from './server/middleware/api-key.js';
|
|
51
|
+
export { RateLimiter, TokenBucket, clientKeyOf } from './server/middleware/rate-limit.js';
|
|
52
|
+
export { makeTimeoutHook } from './server/middleware/timeout.js';
|
|
53
|
+
export { AuthCapture, capturePlatformAuth, fetchAccountInfo } from './browser/auth-capture.js';
|
|
54
|
+
export { deriveAccountId, detectDuplicate, readExistingAccounts, runLogin, runLogout, slugAccountId, toSlug, } from './browser/login-flow.js';
|
|
55
|
+
/* 交互式提问工具(菜单 / 输入 / 确认) */
|
|
56
|
+
export { confirmYesNo, displayWidth, firstSelectableIndex, inputText, isInteractive, padDisplay, renderChoiceList, resolveChoiceInput, selectOne, supportsColor, tokenizeKeys, } from './utils/prompt.js';
|
|
57
|
+
export { helpText, parseArgs, runCli } from './cli.js';
|
|
58
|
+
export { ChatGLMBrowserProvider } from './providers/chatglm.js';
|
|
59
|
+
export { DETECT_COMPLETION_JS, DETECT_THINKING_JS, HAS_INPUT_BOX_JS, PAGE_SHOWS_BUSY_JS, PROBE_LOGGED_IN_JS, READ_BUSY_NOTICE_JS, RESET_SSE_JS, SSE_GET_JS, } from './providers/chatglm-dom.js';
|
|
60
|
+
export { EXTRACT_RESPONSE_JS, FORCED_EXTRACT_JS } from './providers/chatglm-dom-extract.js';
|
|
61
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/** `logs/api_requests.log` 的绝对路径。 */
|
|
2
|
+
export declare function apiLogPath(): string;
|
|
3
|
+
/** `YYYY-MM-DD HH:mm:ss.SSS`(与 Python `%Y-%m-%d %H:%M:%S.%f` 取前 3 位一致)。 */
|
|
4
|
+
export declare function formatTimestamp(date?: Date): string;
|
|
5
|
+
/**
|
|
6
|
+
* 重置日志(**每次启动调用一次**)。
|
|
7
|
+
*
|
|
8
|
+
* 这是既定行为:`api_requests.log` 每次启动清空,只保留本次运行的记录,
|
|
9
|
+
* 避免排查时被历史轮次干扰。旧文件不备份(用户明确要求)。
|
|
10
|
+
*/
|
|
11
|
+
export declare function resetApiLog(): void;
|
|
12
|
+
/** 记录 API 请求(客户端 → 网关)。消息列表**原样记录**,不做任何加工/截断。 */
|
|
13
|
+
export declare function logApiRequest(params: {
|
|
14
|
+
requestId: string;
|
|
15
|
+
model: string;
|
|
16
|
+
messages: Array<Record<string, unknown>>;
|
|
17
|
+
stream: boolean;
|
|
18
|
+
tools?: Array<Record<string, unknown>> | null;
|
|
19
|
+
workspacePath?: string;
|
|
20
|
+
}): void;
|
|
21
|
+
/** 记录第 N 轮交互开始(用户消息原文)。 */
|
|
22
|
+
export declare function logRoundStart(requestId: string, roundNum: number, userMessage: string): void;
|
|
23
|
+
/** 记录网页 AI 的完整回复(原始文本,逐行原样)。 */
|
|
24
|
+
export declare function logAiPlatformResponseComplete(params: {
|
|
25
|
+
requestId: string;
|
|
26
|
+
platform: string;
|
|
27
|
+
roundNum: number;
|
|
28
|
+
rawText: string;
|
|
29
|
+
}): void;
|
|
30
|
+
/** 记录网关返回给客户端的响应。 */
|
|
31
|
+
export declare function logApiResponse(params: {
|
|
32
|
+
requestId: string;
|
|
33
|
+
model: string;
|
|
34
|
+
content?: string | null;
|
|
35
|
+
toolCalls?: Array<Record<string, unknown>> | null;
|
|
36
|
+
finishReason?: string;
|
|
37
|
+
duration?: number;
|
|
38
|
+
}): void;
|
|
39
|
+
/** 记录发送给平台的内容。 */
|
|
40
|
+
export declare function logAiPlatformRequest(params: {
|
|
41
|
+
requestId: string;
|
|
42
|
+
platform: string;
|
|
43
|
+
messages: Array<Record<string, unknown>>;
|
|
44
|
+
}): void;
|
|
45
|
+
/** 记录平台的回复(原始文本 + 解析出的工具调用)。 */
|
|
46
|
+
export declare function logAiPlatformResponse(params: {
|
|
47
|
+
requestId: string;
|
|
48
|
+
platform: string;
|
|
49
|
+
rawText: string;
|
|
50
|
+
parsedToolCalls?: Array<Record<string, unknown>> | null;
|
|
51
|
+
duration?: number;
|
|
52
|
+
}): void;
|
|
53
|
+
/** 记录错误。 */
|
|
54
|
+
export declare function logApiError(requestId: string, error: string, context?: string): void;
|
|
55
|
+
//# sourceMappingURL=api-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-logger.d.ts","sourceRoot":"","sources":["../../src/log/api-logger.ts"],"names":[],"mappings":"AA0DA,qCAAqC;AACrC,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAQD,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAO/D;AAYD;;;;;GAKG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAOlC;AAqCD,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,IAAI,CAkCP;AAED,2BAA2B;AAC3B,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAQ5F;AAED,gCAAgC;AAChC,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,IAAI,CAWP;AAED,qBAAqB;AACrB,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAmCP;AAED,kBAAkB;AAClB,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1C,GAAG,IAAI,CAmBP;AAED,gCAAgC;AAChC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAyBP;AAED,YAAY;AACZ,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,SAAK,GAAG,IAAI,CAShF"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API 请求/响应日志 —— `legacy-python/src/utils/api_logger.py` 的移植。
|
|
3
|
+
*
|
|
4
|
+
* ⚠️⚠️ **本文件的核心契约:原样记录、不加工、不截断**(用户明确要求)。
|
|
5
|
+
* 这里的每一行格式都被 `grep` 依赖过,改格式前请先读
|
|
6
|
+
* `docs/hard-constraints.md` 的「日志」一节。
|
|
7
|
+
*
|
|
8
|
+
* 输出文件:`<项目根>/logs/api_requests.log`,**每次启动重置**(见 {@link resetApiLog})。
|
|
9
|
+
*
|
|
10
|
+
* 格式:
|
|
11
|
+
* ```
|
|
12
|
+
* [时间戳] ========== 第 N 轮 [request_id] ==========
|
|
13
|
+
* [>>> USER] 第 N 轮收到用户消息:
|
|
14
|
+
* <用户消息原文,逐行缩进 4 空格>
|
|
15
|
+
*
|
|
16
|
+
* [时间戳] ========== 第 N 轮 [request_id] ==========
|
|
17
|
+
* [<<< AI] 第 N 轮网页回复消息:
|
|
18
|
+
* AI 平台: chatglm
|
|
19
|
+
* 原始文本长度: 1234
|
|
20
|
+
* <AI 原始回复,逐行缩进 4 空格>
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* 方向标记:
|
|
24
|
+
* - `>>> USER` 用户发给网关的消息(原始)
|
|
25
|
+
* - `<<< AI` 网页 AI 的回复(原始)
|
|
26
|
+
* - `>>> REQUEST` / `<<< RESPONSE` 客户端请求 / 网关响应
|
|
27
|
+
* - `>>> AI` / `<<< AI` 发给平台 / 平台返回
|
|
28
|
+
* - `!!! ERROR` 错误
|
|
29
|
+
*
|
|
30
|
+
* 与原实现的差异:
|
|
31
|
+
* - `api_logger.py` 里有个 `_truncate_json()` **从未被调用**(死代码),不移植。
|
|
32
|
+
* - 日志目录:Python 写死 `<源码根>/logs`;TS 侧优先用 `settings.logDir`
|
|
33
|
+
* (绝对路径直接用,相对路径按项目根解析),默认值与 Python 一致。
|
|
34
|
+
* - 时间戳格式完全一致:`YYYY-MM-DD HH:mm:ss.SSS`(Python 是 `%f` 取前 3 位)。
|
|
35
|
+
*/
|
|
36
|
+
import { appendFileSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
37
|
+
import { dirname, isAbsolute, join } from 'node:path';
|
|
38
|
+
import { fileURLToPath } from 'node:url';
|
|
39
|
+
import { settings } from '../config.js';
|
|
40
|
+
/** 模块所在目录(`dist/log/` 或 `src/log/`),用于定位项目根。 */
|
|
41
|
+
const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
42
|
+
/** 项目根:`src/log/` 或 `dist/log/` 往上两级。 */
|
|
43
|
+
const PROJECT_ROOT = join(MODULE_DIR, '..', '..');
|
|
44
|
+
/**
|
|
45
|
+
* API 日志目录。
|
|
46
|
+
*
|
|
47
|
+
* 解析顺序:`settings.logDir` 为绝对路径则直接用;否则按项目根解析。
|
|
48
|
+
* 这与 Python 版「写死 `<源码根>/logs`」等价(默认 `logDir = "logs"`)。
|
|
49
|
+
*/
|
|
50
|
+
function logDir() {
|
|
51
|
+
const configured = settings.logDir || 'logs';
|
|
52
|
+
return isAbsolute(configured) ? configured : join(PROJECT_ROOT, configured);
|
|
53
|
+
}
|
|
54
|
+
/** `logs/api_requests.log` 的绝对路径。 */
|
|
55
|
+
export function apiLogPath() {
|
|
56
|
+
return join(logDir(), 'api_requests.log');
|
|
57
|
+
}
|
|
58
|
+
function ensureDir() {
|
|
59
|
+
const dir = logDir();
|
|
60
|
+
mkdirSync(dir, { recursive: true });
|
|
61
|
+
return dir;
|
|
62
|
+
}
|
|
63
|
+
/** `YYYY-MM-DD HH:mm:ss.SSS`(与 Python `%Y-%m-%d %H:%M:%S.%f` 取前 3 位一致)。 */
|
|
64
|
+
export function formatTimestamp(date = new Date()) {
|
|
65
|
+
const p = (n, width = 2) => String(n).padStart(width, '0');
|
|
66
|
+
return (`${date.getFullYear()}-${p(date.getMonth() + 1)}-${p(date.getDate())} ` +
|
|
67
|
+
`${p(date.getHours())}:${p(date.getMinutes())}:${p(date.getSeconds())}.` +
|
|
68
|
+
`${p(date.getMilliseconds(), 3)}`);
|
|
69
|
+
}
|
|
70
|
+
/** 追加写(失败不影响主流程)。 */
|
|
71
|
+
function append(lines) {
|
|
72
|
+
try {
|
|
73
|
+
ensureDir();
|
|
74
|
+
appendFileSync(apiLogPath(), `${lines.join('\n')}\n`, 'utf8');
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// 日志失败绝不能让请求失败
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 重置日志(**每次启动调用一次**)。
|
|
82
|
+
*
|
|
83
|
+
* 这是既定行为:`api_requests.log` 每次启动清空,只保留本次运行的记录,
|
|
84
|
+
* 避免排查时被历史轮次干扰。旧文件不备份(用户明确要求)。
|
|
85
|
+
*/
|
|
86
|
+
export function resetApiLog() {
|
|
87
|
+
try {
|
|
88
|
+
ensureDir();
|
|
89
|
+
writeFileSync(apiLogPath(), '', 'utf8');
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// 忽略
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/** 把多模态 content 取成纯文本(只取 `type=text` 项,与 Python 一致)。 */
|
|
96
|
+
function contentToText(content) {
|
|
97
|
+
if (Array.isArray(content)) {
|
|
98
|
+
const parts = [];
|
|
99
|
+
for (const item of content) {
|
|
100
|
+
if (item && typeof item === 'object') {
|
|
101
|
+
const rec = item;
|
|
102
|
+
if (rec['type'] === 'text')
|
|
103
|
+
parts.push(String(rec['text'] ?? ''));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return parts.join('\n');
|
|
107
|
+
}
|
|
108
|
+
if (content == null)
|
|
109
|
+
return '';
|
|
110
|
+
return String(content);
|
|
111
|
+
}
|
|
112
|
+
/** 逐行缩进(Python 里就是 `f" {_line}"`)。 */
|
|
113
|
+
function indent(text, prefix = ' ') {
|
|
114
|
+
return text.split('\n').map((line) => `${prefix}${line}`);
|
|
115
|
+
}
|
|
116
|
+
/** 取消息的 `tool_calls` 名字列表(容错,结构可能不规范)。 */
|
|
117
|
+
function toolCallNames(toolCalls) {
|
|
118
|
+
if (!Array.isArray(toolCalls))
|
|
119
|
+
return [];
|
|
120
|
+
return toolCalls.map((tc) => {
|
|
121
|
+
const fn = tc?.['function'];
|
|
122
|
+
const name = fn?.['name'];
|
|
123
|
+
return typeof name === 'string' ? name : '?';
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/* ==================================================================== */
|
|
127
|
+
/* 公开接口 */
|
|
128
|
+
/* ==================================================================== */
|
|
129
|
+
/** 记录 API 请求(客户端 → 网关)。消息列表**原样记录**,不做任何加工/截断。 */
|
|
130
|
+
export function logApiRequest(params) {
|
|
131
|
+
const { requestId, model, messages, stream, tools, workspacePath } = params;
|
|
132
|
+
const timestamp = formatTimestamp();
|
|
133
|
+
const lines = [
|
|
134
|
+
`\n[${timestamp}] ========== API 请求 [${requestId}] ==========`,
|
|
135
|
+
'[>>> REQUEST]',
|
|
136
|
+
` 模型: ${model}`,
|
|
137
|
+
` 流式: ${stream}`,
|
|
138
|
+
` 消息数: ${messages.length}`,
|
|
139
|
+
];
|
|
140
|
+
if (tools && tools.length > 0) {
|
|
141
|
+
const names = tools.map((t) => {
|
|
142
|
+
const fn = t['function'];
|
|
143
|
+
return typeof fn?.['name'] === 'string' ? fn['name'] : '?';
|
|
144
|
+
});
|
|
145
|
+
lines.push(` 工具数: ${tools.length} | 工具: ${names.slice(0, 5).join(', ')}`);
|
|
146
|
+
}
|
|
147
|
+
if (workspacePath)
|
|
148
|
+
lines.push(` 工作目录: ${workspacePath}`);
|
|
149
|
+
// 原样记录,不截断
|
|
150
|
+
lines.push('\n [消息列表]:');
|
|
151
|
+
messages.forEach((msg, i) => {
|
|
152
|
+
const role = typeof msg['role'] === 'string' ? msg['role'] : '?';
|
|
153
|
+
const contentStr = contentToText(msg['content']);
|
|
154
|
+
const names = toolCallNames(msg['tool_calls']);
|
|
155
|
+
const tcInfo = names.length > 0 ? ` [工具调用: ${names.join(', ')}]` : '';
|
|
156
|
+
lines.push(` [${i}] ${role}${tcInfo}:`);
|
|
157
|
+
lines.push(...indent(contentStr, ' '));
|
|
158
|
+
});
|
|
159
|
+
append(lines);
|
|
160
|
+
}
|
|
161
|
+
/** 记录第 N 轮交互开始(用户消息原文)。 */
|
|
162
|
+
export function logRoundStart(requestId, roundNum, userMessage) {
|
|
163
|
+
const timestamp = formatTimestamp();
|
|
164
|
+
const lines = [
|
|
165
|
+
`\n[${timestamp}] ========== 第 ${roundNum} 轮 [${requestId}] ==========`,
|
|
166
|
+
`[>>> USER] 第 ${roundNum} 轮收到用户消息:`,
|
|
167
|
+
...indent(String(userMessage)),
|
|
168
|
+
];
|
|
169
|
+
append(lines);
|
|
170
|
+
}
|
|
171
|
+
/** 记录网页 AI 的完整回复(原始文本,逐行原样)。 */
|
|
172
|
+
export function logAiPlatformResponseComplete(params) {
|
|
173
|
+
const { requestId, platform, roundNum, rawText } = params;
|
|
174
|
+
const timestamp = formatTimestamp();
|
|
175
|
+
const lines = [
|
|
176
|
+
`\n[${timestamp}] ========== 第 ${roundNum} 轮 [${requestId}] ==========`,
|
|
177
|
+
`[<<< AI] 第 ${roundNum} 轮网页回复消息:`,
|
|
178
|
+
` AI 平台: ${platform}`,
|
|
179
|
+
` 原始文本长度: ${rawText.length}`,
|
|
180
|
+
...indent(String(rawText)),
|
|
181
|
+
];
|
|
182
|
+
append(lines);
|
|
183
|
+
}
|
|
184
|
+
/** 记录网关返回给客户端的响应。 */
|
|
185
|
+
export function logApiResponse(params) {
|
|
186
|
+
const { requestId, model, content, toolCalls, finishReason = 'stop', duration = 0, } = params;
|
|
187
|
+
const timestamp = formatTimestamp();
|
|
188
|
+
const lines = [
|
|
189
|
+
`\n[${timestamp}] ========== API 响应 [${requestId}] ==========`,
|
|
190
|
+
'[<<< RESPONSE]',
|
|
191
|
+
` 模型: ${model}`,
|
|
192
|
+
` 完成原因: ${finishReason}`,
|
|
193
|
+
` 耗时: ${duration.toFixed(1)}s`,
|
|
194
|
+
];
|
|
195
|
+
if (content) {
|
|
196
|
+
lines.push(`\n [回复内容] (${content.length} 字符):`);
|
|
197
|
+
lines.push(...indent(content));
|
|
198
|
+
}
|
|
199
|
+
if (toolCalls && toolCalls.length > 0) {
|
|
200
|
+
lines.push(`\n [工具调用] (${toolCalls.length} 个):`);
|
|
201
|
+
toolCalls.forEach((tc, i) => {
|
|
202
|
+
const fn = (tc['function'] ?? {});
|
|
203
|
+
const name = typeof fn['name'] === 'string' ? fn['name'] : '?';
|
|
204
|
+
const args = JSON.stringify(fn['arguments'] ?? '{}');
|
|
205
|
+
lines.push(` [${i}] ${name}: ${args}`);
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
append(lines);
|
|
209
|
+
}
|
|
210
|
+
/** 记录发送给平台的内容。 */
|
|
211
|
+
export function logAiPlatformRequest(params) {
|
|
212
|
+
const { requestId, platform, messages } = params;
|
|
213
|
+
const timestamp = formatTimestamp();
|
|
214
|
+
const lines = [
|
|
215
|
+
`\n[${timestamp}] ========== 发送给 AI 平台 [${requestId}] ==========`,
|
|
216
|
+
'[>>> AI]',
|
|
217
|
+
` 平台: ${platform}`,
|
|
218
|
+
` 消息数: ${messages.length}`,
|
|
219
|
+
'\n [消息内容]:',
|
|
220
|
+
];
|
|
221
|
+
messages.forEach((msg, i) => {
|
|
222
|
+
const role = typeof msg['role'] === 'string' ? msg['role'] : '?';
|
|
223
|
+
lines.push(` [${i}] ${role}:`);
|
|
224
|
+
lines.push(...indent(contentToText(msg['content']), ' '));
|
|
225
|
+
});
|
|
226
|
+
append(lines);
|
|
227
|
+
}
|
|
228
|
+
/** 记录平台的回复(原始文本 + 解析出的工具调用)。 */
|
|
229
|
+
export function logAiPlatformResponse(params) {
|
|
230
|
+
const { requestId, platform, rawText, parsedToolCalls, duration = 0 } = params;
|
|
231
|
+
const timestamp = formatTimestamp();
|
|
232
|
+
const lines = [
|
|
233
|
+
`\n[${timestamp}] ========== AI 平台回复 [${requestId}] ==========`,
|
|
234
|
+
'[<<< AI]',
|
|
235
|
+
` 平台: ${platform}`,
|
|
236
|
+
` 耗时: ${duration.toFixed(1)}s`,
|
|
237
|
+
` 原始文本长度: ${rawText.length}`,
|
|
238
|
+
'\n [原始文本]:',
|
|
239
|
+
...indent(rawText),
|
|
240
|
+
];
|
|
241
|
+
if (parsedToolCalls && parsedToolCalls.length > 0) {
|
|
242
|
+
lines.push(`\n [解析工具调用] (${parsedToolCalls.length} 个):`);
|
|
243
|
+
parsedToolCalls.forEach((tc, i) => {
|
|
244
|
+
const fn = (tc['function'] ?? {});
|
|
245
|
+
const name = typeof fn['name'] === 'string' ? fn['name'] : '?';
|
|
246
|
+
const args = JSON.stringify(fn['arguments'] ?? '{}');
|
|
247
|
+
lines.push(` [${i}] ${name}: ${args}`);
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
append(lines);
|
|
251
|
+
}
|
|
252
|
+
/** 记录错误。 */
|
|
253
|
+
export function logApiError(requestId, error, context = '') {
|
|
254
|
+
const timestamp = formatTimestamp();
|
|
255
|
+
const lines = [
|
|
256
|
+
`\n[${timestamp}] ========== API 错误 [${requestId}] ==========`,
|
|
257
|
+
'[!!! ERROR]',
|
|
258
|
+
` 错误: ${error}`,
|
|
259
|
+
];
|
|
260
|
+
if (context)
|
|
261
|
+
lines.push(` 上下文: ${context.slice(0, 500)}`);
|
|
262
|
+
append(lines);
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=api-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-logger.js","sourceRoot":"","sources":["../../src/log/api-logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,gDAAgD;AAChD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE3D,yCAAyC;AACzC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAElD;;;;;GAKG;AACH,SAAS,MAAM;IACb,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC;IAC7C,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AAC9E,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,UAAU;IACxB,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,eAAe,CAAC,IAAI,GAAS,IAAI,IAAI,EAAE;IACrD,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,KAAK,GAAG,CAAC,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC3E,OAAO,CACL,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG;QACvE,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG;QACxE,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,EAAE,CAClC,CAAC;AACJ,CAAC;AAED,qBAAqB;AACrB,SAAS,MAAM,CAAC,KAAe;IAC7B,IAAI,CAAC;QACH,SAAS,EAAE,CAAC;QACZ,cAAc,CAAC,UAAU,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC;QACH,SAAS,EAAE,CAAC;QACZ,aAAa,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,KAAK;IACP,CAAC;AACH,CAAC;AAED,wDAAwD;AACxD,SAAS,aAAa,CAAC,OAAgB;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrC,MAAM,GAAG,GAAG,IAA+B,CAAC;gBAC5C,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,MAAM;oBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC/B,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED,yCAAyC;AACzC,SAAS,MAAM,CAAC,IAAY,EAAE,MAAM,GAAG,MAAM;IAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,0CAA0C;AAC1C,SAAS,aAAa,CAAC,SAAkB;IACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IACzC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QAC1B,MAAM,EAAE,GAAI,EAAqC,EAAE,CAAC,UAAU,CAAC,CAAC;QAChE,MAAM,IAAI,GAAI,EAA0C,EAAE,CAAC,MAAM,CAAC,CAAC;QACnE,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,0EAA0E;AAC1E,uEAAuE;AACvE,0EAA0E;AAE1E,kDAAkD;AAClD,MAAM,UAAU,aAAa,CAAC,MAO7B;IACC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IAC5E,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAG;QACZ,MAAM,SAAS,wBAAwB,SAAS,cAAc;QAC9D,eAAe;QACf,SAAS,KAAK,EAAE;QAChB,SAAS,MAAM,EAAE;QACjB,UAAU,QAAQ,CAAC,MAAM,EAAE;KAC5B,CAAC;IAEF,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5B,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAwC,CAAC;YAChE,OAAO,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,EAAE,CAAC,MAAM,CAAY,CAAC,CAAC,CAAC,GAAG,CAAC;QACzE,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,MAAM,UAAU,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,aAAa;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,aAAa,EAAE,CAAC,CAAC;IAE1D,WAAW;IACX,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,GAAG,CAAC,MAAM,CAAY,CAAC,CAAC,CAAC,GAAG,CAAC;QAC7E,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,CAAC;AAChB,CAAC;AAED,2BAA2B;AAC3B,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,QAAgB,EAAE,WAAmB;IACpF,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG;QACZ,MAAM,SAAS,kBAAkB,QAAQ,OAAO,SAAS,cAAc;QACvE,iBAAiB,QAAQ,WAAW;QACpC,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;KAC/B,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,CAAC;AAChB,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,6BAA6B,CAAC,MAK7C;IACC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAC1D,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG;QACZ,MAAM,SAAS,kBAAkB,QAAQ,OAAO,SAAS,cAAc;QACvE,eAAe,QAAQ,WAAW;QAClC,YAAY,QAAQ,EAAE;QACtB,aAAa,OAAO,CAAC,MAAM,EAAE;QAC7B,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KAC3B,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,CAAC;AAChB,CAAC;AAED,qBAAqB;AACrB,MAAM,UAAU,cAAc,CAAC,MAO9B;IACC,MAAM,EACJ,SAAS,EACT,KAAK,EACL,OAAO,EACP,SAAS,EACT,YAAY,GAAG,MAAM,EACrB,QAAQ,GAAG,CAAC,GACb,GAAG,MAAM,CAAC;IACX,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAG;QACZ,MAAM,SAAS,wBAAwB,SAAS,cAAc;QAC9D,gBAAgB;QAChB,SAAS,KAAK,EAAE;QAChB,WAAW,YAAY,EAAE;QACzB,SAAS,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;KAChC,CAAC;IAEF,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,MAAM,OAAO,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,eAAe,SAAS,CAAC,MAAM,MAAM,CAAC,CAAC;QAClD,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAA4B,CAAC;YAC7D,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,CAAC;AAChB,CAAC;AAED,kBAAkB;AAClB,MAAM,UAAU,oBAAoB,CAAC,MAIpC;IACC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IACjD,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAG;QACZ,MAAM,SAAS,2BAA2B,SAAS,cAAc;QACjE,UAAU;QACV,SAAS,QAAQ,EAAE;QACnB,UAAU,QAAQ,CAAC,MAAM,EAAE;QAC3B,aAAa;KACd,CAAC;IAEF,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,GAAG,CAAC,MAAM,CAAY,CAAC,CAAC,CAAC,GAAG,CAAC;QAC7E,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,CAAC;AAChB,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,qBAAqB,CAAC,MAMrC;IACC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC;IAC/E,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAG;QACZ,MAAM,SAAS,yBAAyB,SAAS,cAAc;QAC/D,UAAU;QACV,SAAS,QAAQ,EAAE;QACnB,SAAS,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QAC/B,aAAa,OAAO,CAAC,MAAM,EAAE;QAC7B,aAAa;QACb,GAAG,MAAM,CAAC,OAAO,CAAC;KACnB,CAAC;IAEF,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,iBAAiB,eAAe,CAAC,MAAM,MAAM,CAAC,CAAC;QAC1D,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YAChC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAA4B,CAAC;YAC7D,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,CAAC;AAChB,CAAC;AAED,YAAY;AACZ,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,KAAa,EAAE,OAAO,GAAG,EAAE;IACxE,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG;QACZ,MAAM,SAAS,wBAAwB,SAAS,cAAc;QAC9D,aAAa;QACb,SAAS,KAAK,EAAE;KACjB,CAAC;IACF,IAAI,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,KAAK,CAAC,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** 重置缓存(测试用;对应 Python 的 `lru_cache` 失效)。 */
|
|
2
|
+
export declare function resetDebugLoggerCache(): void;
|
|
3
|
+
/** `debug_YYYYMMDD.log` 的绝对路径。 */
|
|
4
|
+
export declare function debugLogPath(date?: Date): string;
|
|
5
|
+
/** 记录客户端请求。 */
|
|
6
|
+
export declare function logClientRequest(params: {
|
|
7
|
+
requestId: string;
|
|
8
|
+
model: string;
|
|
9
|
+
messages: Array<Record<string, unknown>>;
|
|
10
|
+
stream?: boolean;
|
|
11
|
+
tools?: Array<Record<string, unknown>> | null;
|
|
12
|
+
extra?: Record<string, unknown>;
|
|
13
|
+
}): void;
|
|
14
|
+
/** 记录返回给客户端的响应。 */
|
|
15
|
+
export declare function logClientResponse(params: {
|
|
16
|
+
requestId: string;
|
|
17
|
+
model: string;
|
|
18
|
+
finishReason: string;
|
|
19
|
+
content?: string;
|
|
20
|
+
toolCalls?: Array<Record<string, unknown>> | null;
|
|
21
|
+
duration?: number;
|
|
22
|
+
}): void;
|
|
23
|
+
/** 记录发送给网页 AI 的内容。 */
|
|
24
|
+
export declare function logAiRequest(params: {
|
|
25
|
+
requestId: string;
|
|
26
|
+
platform: string;
|
|
27
|
+
messages: Array<Record<string, unknown>>;
|
|
28
|
+
workspacePath?: string;
|
|
29
|
+
}): void;
|
|
30
|
+
/** 记录网页 AI 的原始回复。 */
|
|
31
|
+
export declare function logAiResponse(params: {
|
|
32
|
+
requestId: string;
|
|
33
|
+
platform: string;
|
|
34
|
+
rawText: string;
|
|
35
|
+
parsedToolCalls?: Array<Record<string, unknown>> | null;
|
|
36
|
+
parsedText?: string;
|
|
37
|
+
duration?: number;
|
|
38
|
+
}): void;
|
|
39
|
+
/** 记录错误。 */
|
|
40
|
+
export declare function logError(requestId: string, error: string, context?: string): void;
|
|
41
|
+
/** 记录工具调用结果。 */
|
|
42
|
+
export declare function logToolCallResult(params: {
|
|
43
|
+
requestId: string;
|
|
44
|
+
toolName: string;
|
|
45
|
+
toolArgs: Record<string, unknown>;
|
|
46
|
+
result: string;
|
|
47
|
+
duration?: number;
|
|
48
|
+
}): void;
|
|
49
|
+
//# sourceMappingURL=debug-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-logger.d.ts","sourceRoot":"","sources":["../../src/log/debug-logger.ts"],"names":[],"mappings":"AA6BA,4CAA4C;AAC5C,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAsBD,kCAAkC;AAClC,wBAAgB,YAAY,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAI5D;AA4FD,eAAe;AACf,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,GAAG,IAAI,CAqCP;AAED,mBAAmB;AACnB,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAmBP;AAED,sBAAsB;AACtB,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,IAAI,CAyCP;AAED,qBAAqB;AACrB,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAoBP;AAED,YAAY;AACZ,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,SAAK,GAAG,IAAI,CAU7E;AAED,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAWP"}
|