@lmcc-dev/mult-fetch-mcp-server 1.2.1 → 1.3.1

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.
Files changed (81) hide show
  1. package/README.md +80 -29
  2. package/README.zh.md +80 -29
  3. package/dist/i18n-test-report.json +2 -2
  4. package/dist/i18n-unused-keys-report.json +4 -4
  5. package/dist/src/client.js +522 -131
  6. package/dist/src/index.js +0 -0
  7. package/dist/src/lib/fetch.js +8 -0
  8. package/dist/src/lib/fetchers/browser/BrowserFetcher.js +139 -199
  9. package/dist/src/lib/fetchers/common/BaseFetcher.js +203 -0
  10. package/dist/src/lib/fetchers/common/types.js +4 -0
  11. package/dist/src/lib/fetchers/common/utils.js +1 -1
  12. package/dist/src/lib/fetchers/index.js +11 -0
  13. package/dist/src/lib/fetchers/node/NodeFetcher.js +91 -66
  14. package/dist/src/lib/i18n/keys/browser.js +40 -2
  15. package/dist/src/lib/i18n/keys/chunkManager.js +43 -0
  16. package/dist/src/lib/i18n/keys/client.js +53 -1
  17. package/dist/src/lib/i18n/keys/contentSize.js +20 -0
  18. package/dist/src/lib/i18n/keys/fetcher.js +88 -79
  19. package/dist/src/lib/i18n/keys/index.js +4 -0
  20. package/dist/src/lib/i18n/keys/node.js +7 -1
  21. package/dist/src/lib/i18n/keys/processor.js +30 -0
  22. package/dist/src/lib/i18n/keys/tools.js +5 -1
  23. package/dist/src/lib/i18n/keys/url.js +45 -0
  24. package/dist/src/lib/i18n/keys.js +25 -0
  25. package/dist/src/lib/i18n/locales/en/browser.js +52 -14
  26. package/dist/src/lib/i18n/locales/en/chunkManager.js +41 -0
  27. package/dist/src/lib/i18n/locales/en/client.js +62 -9
  28. package/dist/src/lib/i18n/locales/en/contentSize.js +17 -0
  29. package/dist/src/lib/i18n/locales/en/fetcher.js +50 -30
  30. package/dist/src/lib/i18n/locales/en/index.js +9 -1
  31. package/dist/src/lib/i18n/locales/en/node.js +26 -20
  32. package/dist/src/lib/i18n/locales/en/processor.js +28 -0
  33. package/dist/src/lib/i18n/locales/en/tools.js +5 -1
  34. package/dist/src/lib/i18n/locales/en/url.js +40 -0
  35. package/dist/src/lib/i18n/locales/en.js +51 -0
  36. package/dist/src/lib/i18n/locales/zh/browser.js +85 -47
  37. package/dist/src/lib/i18n/locales/zh/chunkManager.js +41 -0
  38. package/dist/src/lib/i18n/locales/zh/client.js +53 -1
  39. package/dist/src/lib/i18n/locales/zh/contentSize.js +17 -0
  40. package/dist/src/lib/i18n/locales/zh/fetcher.js +67 -47
  41. package/dist/src/lib/i18n/locales/zh/index.js +9 -1
  42. package/dist/src/lib/i18n/locales/zh/node.js +50 -44
  43. package/dist/src/lib/i18n/locales/zh/processor.js +28 -0
  44. package/dist/src/lib/i18n/locales/zh/tools.js +5 -1
  45. package/dist/src/lib/i18n/locales/zh/url.js +40 -0
  46. package/dist/src/lib/i18n/locales/zh.js +51 -0
  47. package/dist/src/lib/logger.js +11 -2
  48. package/dist/src/lib/server/fetcher.js +15 -5
  49. package/dist/src/lib/server/tools.js +202 -52
  50. package/dist/src/lib/types.js +5 -0
  51. package/dist/src/lib/utils/ChunkManager.js +177 -0
  52. package/dist/src/lib/utils/ContentProcessor.js +134 -0
  53. package/dist/src/lib/utils/ContentSizeManager.js +123 -0
  54. package/dist/src/lib/utils/TemplateUtils.js +71 -0
  55. package/dist/src/lib/utils/errors.js +2 -8
  56. package/dist/src/mcp-server.js +0 -0
  57. package/dist/src/test-i18n.js +0 -0
  58. package/dist/tests/BrowserFetcher.test.js +0 -0
  59. package/dist/tests/NodeFetcher.test.js +0 -0
  60. package/dist/tests/client.test.js +0 -0
  61. package/dist/tests/fetch.test.js +0 -0
  62. package/dist/tests/fetchers/plain-text.test.js +146 -0
  63. package/dist/tests/i18n-missing-keys.js +0 -0
  64. package/dist/tests/i18n-remove-unused-keys.js +0 -0
  65. package/dist/tests/i18n-unused-keys.js +0 -0
  66. package/dist/tests/i18n.test.js +0 -0
  67. package/dist/tests/logger.test.js +0 -0
  68. package/dist/tests/mcp-server.test.js +0 -0
  69. package/dist/tests/server/fetcher.test.js +69 -15
  70. package/dist/tests/server/tools.test.js +165 -16
  71. package/dist/tests/setup.js +0 -0
  72. package/dist/tests/test-direct-client.js +113 -5
  73. package/dist/tests/test-i18n.js +0 -0
  74. package/dist/tests/test-mcp-methods.js +67 -1
  75. package/dist/tests/test-mcp.js +83 -3
  76. package/dist/tests/test-mini4k.js +90 -3
  77. package/dist/tests/types.test.js +0 -0
  78. package/dist/tests/utils/ChunkManager.test.js +163 -0
  79. package/dist/tests/utils/ContentSizeManager.test.js +170 -0
  80. package/dist/vitest.config.js +0 -0
  81. package/package.json +28 -23
@@ -4,38 +4,56 @@
4
4
  * Description: This code was collaboratively developed by Martin and AI Assistant.
5
5
  */
6
6
  import { FETCHER_KEYS } from '../../keys/fetcher.js';
7
- // 获取器相关消息 (Fetcher related messages)
7
+ /**
8
+ * 获取器相关的英文文本 (English texts related to fetcher)
9
+ */
8
10
  export default {
9
- [FETCHER_KEYS.addingDelay]: "Adding random delay",
10
- [FETCHER_KEYS.delayCompleted]: "Delay completed after {{delay}}ms",
11
+ // 内容大小相关 (Content size related)
12
+ [FETCHER_KEYS.contentLength]: "Content length: {{length}} bytes",
13
+ [FETCHER_KEYS.contentTooLarge]: "Content too large: {{size}} bytes, limit: {{limit}} bytes",
14
+ [FETCHER_KEYS.contentTruncated]: "Content truncated from {{originalSize}} to {{truncatedSize}} bytes",
15
+ // 分块处理相关 (Chunk processing related)
16
+ [FETCHER_KEYS.chunkRetrievalFailed]: "Failed to retrieve chunk: {{error}}",
17
+ [FETCHER_KEYS.gettingChunkBySize]: "Getting content chunk by size, start: {{start}}, end: {{end}}",
18
+ [FETCHER_KEYS.chunkNotFound]: "Chunk not found: {{chunkId}}",
19
+ // 获取类型相关 (Fetch type related)
20
+ [FETCHER_KEYS.fetchingPlainText]: "Fetching plain text content",
21
+ // 延迟相关 (Delay related)
22
+ [FETCHER_KEYS.addingDelay]: "Adding delay: {{delay}}ms",
23
+ [FETCHER_KEYS.delayCompleted]: "Delay completed",
24
+ // 代理相关 (Proxy related)
11
25
  [FETCHER_KEYS.usingProxy]: "Using proxy: {{proxy}}",
12
26
  [FETCHER_KEYS.usingSpecifiedProxy]: "Using specified proxy: {{proxy}}",
13
27
  [FETCHER_KEYS.attemptingToUseSystemProxy]: "Attempting to use system proxy",
14
- [FETCHER_KEYS.notUsingProxy]: "Not using any proxy",
28
+ [FETCHER_KEYS.notUsingProxy]: "Not using proxy",
15
29
  [FETCHER_KEYS.finalProxyUsed]: "Final proxy used: {{proxy}}",
16
- [FETCHER_KEYS.noProxy]: "No proxy will be used",
17
- [FETCHER_KEYS.foundNoProxy]: "Found no proxy: {{noProxy}}",
18
- [FETCHER_KEYS.systemProxyDisabled]: "System proxy disabled",
19
- [FETCHER_KEYS.fetchingUrl]: "Fetching URL: {{url}} (Redirect: {{redirect}})",
20
- [FETCHER_KEYS.usingUserAgent]: "Using User-Agent: {{userAgent}}",
30
+ [FETCHER_KEYS.noProxy]: "No proxy",
31
+ [FETCHER_KEYS.foundNoProxy]: "Found NO_PROXY setting: {{noProxy}}",
21
32
  [FETCHER_KEYS.usingHttpsProxy]: "Using HTTPS proxy",
22
33
  [FETCHER_KEYS.usingHttpProxy]: "Using HTTP proxy",
34
+ [FETCHER_KEYS.systemProxyDisabled]: "System proxy disabled",
35
+ // 请求相关 (Request related)
36
+ [FETCHER_KEYS.fetchingUrl]: "Fetching URL: {{url}}",
37
+ [FETCHER_KEYS.usingUserAgent]: "Using User-Agent: {{userAgent}}",
23
38
  [FETCHER_KEYS.requestOptions]: "Request options: {{options}}",
24
- [FETCHER_KEYS.startingFetch]: "Starting fetch",
25
- [FETCHER_KEYS.fetchCompleted]: "Fetch completed in {{duration}}ms",
26
- [FETCHER_KEYS.responseStatus]: "Response status: {{status}} {{statusText}}",
27
- [FETCHER_KEYS.redirectingTo]: "Redirecting to: {{location}}",
28
- [FETCHER_KEYS.constructedFullRedirectUrl]: "Constructed full redirect URL: {{redirectUrl}}",
39
+ [FETCHER_KEYS.startingFetch]: "Starting fetch: {{url}}",
40
+ [FETCHER_KEYS.fetchCompleted]: "Fetch completed",
41
+ // 响应相关 (Response related)
42
+ [FETCHER_KEYS.responseStatus]: "Response status: {{status}}",
43
+ [FETCHER_KEYS.redirectingTo]: "Redirecting to: {{url}}",
44
+ [FETCHER_KEYS.constructedFullRedirectUrl]: "Constructed full redirect URL: {{url}}",
29
45
  [FETCHER_KEYS.requestSuccess]: "Request successful",
30
- [FETCHER_KEYS.errorResponse]: "Error response: {{status}} {{statusText}}",
31
- [FETCHER_KEYS.errorResponseBody]: "Error response body (first 200 chars): {{body}}",
46
+ // 错误相关 (Error related)
47
+ [FETCHER_KEYS.errorResponse]: "Error response: {{status}}",
48
+ [FETCHER_KEYS.errorResponseBody]: "Error response body: {{body}}",
32
49
  [FETCHER_KEYS.errorReadingBody]: "Error reading response body: {{error}}",
33
50
  [FETCHER_KEYS.fetchError]: "Fetch error: {{error}}",
34
- [FETCHER_KEYS.requestAborted]: "Request aborted after {{duration}}ms",
35
- [FETCHER_KEYS.networkError]: "Network error ({{code}}), might retry with browser mode",
36
- [FETCHER_KEYS.requestTimeout]: "Request timeout after {{duration}}ms",
37
- [FETCHER_KEYS.fetchFailed]: "Failed to fetch: {{error}}",
38
- [FETCHER_KEYS.tooManyRedirects]: "Too many redirects ({{redirects}})",
51
+ [FETCHER_KEYS.requestAborted]: "Request aborted",
52
+ [FETCHER_KEYS.networkError]: "Network error: {{error}}",
53
+ [FETCHER_KEYS.requestTimeout]: "Request timeout: {{timeout}}ms",
54
+ [FETCHER_KEYS.fetchFailed]: "Fetch failed: {{error}}",
55
+ [FETCHER_KEYS.tooManyRedirects]: "Too many redirects",
56
+ // 内容类型相关 (Content type related)
39
57
  [FETCHER_KEYS.startingHtmlFetch]: "Starting HTML fetch",
40
58
  [FETCHER_KEYS.fetchingHtml]: "Fetching HTML",
41
59
  [FETCHER_KEYS.fetchingJson]: "Fetching JSON",
@@ -46,29 +64,31 @@ export default {
46
64
  [FETCHER_KEYS.startingJsonFetch]: "Starting JSON fetch",
47
65
  [FETCHER_KEYS.parsingJson]: "Parsing JSON",
48
66
  [FETCHER_KEYS.jsonParsed]: "JSON parsed successfully",
49
- [FETCHER_KEYS.jsonParseError]: "JSON parse error: {{error}}. Text preview: \"{{textPreview}}\", length: {{textLength}} bytes",
67
+ [FETCHER_KEYS.jsonParseError]: "JSON parse error: {{error}}",
50
68
  [FETCHER_KEYS.startingTxtFetch]: "Starting text fetch",
51
69
  [FETCHER_KEYS.textContentLength]: "Text content length: {{length}} bytes",
52
70
  [FETCHER_KEYS.startingMarkdownFetch]: "Starting Markdown fetch",
53
71
  [FETCHER_KEYS.creatingTurndown]: "Creating Turndown service",
54
- [FETCHER_KEYS.convertingToMarkdown]: "Converting to Markdown",
72
+ [FETCHER_KEYS.convertingToMarkdown]: "Converting HTML to Markdown",
55
73
  [FETCHER_KEYS.markdownContentLength]: "Markdown content length: {{length}} bytes",
74
+ // 系统代理相关 (System proxy related)
56
75
  [FETCHER_KEYS.checkingProxyEnv]: "Checking proxy environment variables",
57
- [FETCHER_KEYS.envVarValue]: "Environment variable {{envVar}} value: {{value}}",
76
+ [FETCHER_KEYS.envVarValue]: "Environment variable {{name}}: {{value}}",
58
77
  [FETCHER_KEYS.foundSystemProxy]: "Found system proxy: {{proxy}}",
59
78
  [FETCHER_KEYS.systemCommandProxySettings]: "System command proxy settings: {{output}}",
60
79
  [FETCHER_KEYS.foundProxyFromCommand]: "Found proxy from command: {{proxy}}",
61
80
  [FETCHER_KEYS.errorGettingProxyFromCommand]: "Error getting proxy from command: {{error}}",
62
- [FETCHER_KEYS.checkingSystemEnvVars]: "Checking system environment variables for proxy settings on platform: {{platform}}",
63
- [FETCHER_KEYS.windowsEnvVars]: "Windows environment variables output: {{output}}",
81
+ [FETCHER_KEYS.checkingSystemEnvVars]: "Checking system environment variables",
82
+ [FETCHER_KEYS.windowsEnvVars]: "Windows environment variables: {{vars}}",
64
83
  [FETCHER_KEYS.foundWindowsEnvProxy]: "Found Windows environment proxy: {{proxy}}",
65
84
  [FETCHER_KEYS.errorGettingWindowsEnvVars]: "Error getting Windows environment variables: {{error}}",
66
- [FETCHER_KEYS.unixEnvVars]: "Unix environment variables output: {{output}}",
85
+ [FETCHER_KEYS.unixEnvVars]: "Unix environment variables: {{vars}}",
67
86
  [FETCHER_KEYS.foundUnixEnvProxy]: "Found Unix environment proxy: {{proxy}}",
68
87
  [FETCHER_KEYS.errorGettingUnixEnvVars]: "Error getting Unix environment variables: {{error}}",
69
88
  [FETCHER_KEYS.errorGettingSystemEnvVars]: "Error getting system environment variables: {{error}}",
70
89
  [FETCHER_KEYS.noSystemProxyFound]: "No system proxy found",
71
- [FETCHER_KEYS.notSet]: "not set",
72
- [FETCHER_KEYS.debug]: "{{message}}",
73
- [FETCHER_KEYS.none]: "none"
90
+ // 通用 (General)
91
+ [FETCHER_KEYS.notSet]: "Not set",
92
+ [FETCHER_KEYS.debug]: "Debug: {{message}}",
93
+ [FETCHER_KEYS.none]: "None"
74
94
  };
@@ -13,6 +13,10 @@ import tools from './tools.js';
13
13
  import errors from './errors.js';
14
14
  import resources from './resources.js';
15
15
  import prompts from './prompts.js';
16
+ import url from './url.js';
17
+ import { contentSizeEn as contentSize } from './contentSize.js';
18
+ import { chunkManagerEn as chunkManager } from './chunkManager.js';
19
+ import { processorEn as processor } from './processor.js';
16
20
  // 英文翻译资源 (English translation resources)
17
21
  export const enTranslation = {
18
22
  server,
@@ -24,5 +28,9 @@ export const enTranslation = {
24
28
  tools,
25
29
  errors,
26
30
  resources,
27
- prompts
31
+ prompts,
32
+ url,
33
+ contentSize,
34
+ chunkManager,
35
+ processor
28
36
  };
@@ -7,30 +7,30 @@ import { NODE_KEYS } from '../../keys/node.js';
7
7
  // Node获取器相关消息 (Node fetcher related messages)
8
8
  export default {
9
9
  // 延迟和代理相关 (Delay and proxy related)
10
- [NODE_KEYS.addingDelay]: 'Adding delay: {{delay}}ms',
11
- [NODE_KEYS.noProxy]: 'No proxy',
12
- [NODE_KEYS.usingProxy]: 'Using proxy: {{proxy}}',
13
- [NODE_KEYS.usingHttpsProxy]: 'Using HTTPS proxy',
14
- [NODE_KEYS.usingHttpProxy]: 'Using HTTP proxy',
10
+ [NODE_KEYS.addingDelay]: "Adding delay: {{delay}}ms",
11
+ [NODE_KEYS.noProxy]: "No proxy",
12
+ [NODE_KEYS.usingProxy]: "Using proxy: {{proxy}}",
13
+ [NODE_KEYS.usingHttpsProxy]: "Using HTTPS proxy",
14
+ [NODE_KEYS.usingHttpProxy]: "Using HTTP proxy",
15
15
  // 系统代理相关 (System proxy related)
16
- [NODE_KEYS.checkingProxyEnv]: 'Checking proxy environment variables',
17
- [NODE_KEYS.envVarValue]: 'Environment variable {{envVar}} = {{value}}',
18
- [NODE_KEYS.foundSystemProxy]: 'Found system proxy: {{proxy}}',
19
- [NODE_KEYS.checkingSystemEnvVars]: 'Checking system environment variables, platform: {{platform}}',
20
- [NODE_KEYS.windowsEnvVars]: 'Windows environment variables: {{output}}',
21
- [NODE_KEYS.foundWindowsEnvProxy]: 'Found Windows environment proxy: {{proxy}}',
22
- [NODE_KEYS.errorGettingWindowsEnvVars]: 'Error getting Windows environment variables: {{error}}',
23
- [NODE_KEYS.unixEnvVars]: 'Unix environment variables: {{output}}',
24
- [NODE_KEYS.foundUnixEnvProxy]: 'Found Unix environment proxy: {{proxy}}',
25
- [NODE_KEYS.errorGettingUnixEnvVars]: 'Error getting Unix environment variables: {{error}}',
26
- [NODE_KEYS.noSystemProxyFound]: 'No system proxy found',
27
- [NODE_KEYS.errorGettingSystemEnvVars]: 'Error getting system environment variables: {{error}}',
28
- [NODE_KEYS.foundNoProxy]: 'Found NO_PROXY setting: {{noProxy}}',
16
+ [NODE_KEYS.checkingProxyEnv]: "Checking proxy environment variables",
17
+ [NODE_KEYS.envVarValue]: "Environment variable {{name}}: {{value}}",
18
+ [NODE_KEYS.foundSystemProxy]: "Found system proxy: {{proxy}}",
19
+ [NODE_KEYS.checkingSystemEnvVars]: "Checking system environment variables",
20
+ [NODE_KEYS.windowsEnvVars]: "Windows environment variables: {{vars}}",
21
+ [NODE_KEYS.foundWindowsEnvProxy]: "Found Windows environment proxy: {{proxy}}",
22
+ [NODE_KEYS.errorGettingWindowsEnvVars]: "Error getting Windows environment variables: {{error}}",
23
+ [NODE_KEYS.unixEnvVars]: "Unix environment variables: {{vars}}",
24
+ [NODE_KEYS.foundUnixEnvProxy]: "Found Unix environment proxy: {{proxy}}",
25
+ [NODE_KEYS.errorGettingUnixEnvVars]: "Error getting Unix environment variables: {{error}}",
26
+ [NODE_KEYS.noSystemProxyFound]: "No system proxy found",
27
+ [NODE_KEYS.errorGettingSystemEnvVars]: "Error getting system environment variables: {{error}}",
28
+ [NODE_KEYS.foundNoProxy]: "Found NO_PROXY: {{noProxy}}",
29
29
  // 请求相关 (Request related)
30
30
  [NODE_KEYS.usingUserAgent]: "Using User-Agent: {{userAgent}}",
31
31
  [NODE_KEYS.requestDetails]: "Request details: method={{method}}, URL={{url}}",
32
32
  [NODE_KEYS.requestOptions]: "Request options: {{options}}",
33
- [NODE_KEYS.startingFetch]: "Starting fetch: {{url}}",
33
+ [NODE_KEYS.startingFetch]: "Starting fetch: {{method}} {{url}}",
34
34
  [NODE_KEYS.fetchingUrl]: "Fetching URL: {{url}}",
35
35
  // 响应相关 (Response related)
36
36
  [NODE_KEYS.responseStatus]: "Response status: {{status}}",
@@ -60,5 +60,11 @@ export default {
60
60
  [NODE_KEYS.startingMarkdownFetch]: 'Starting Markdown fetch',
61
61
  [NODE_KEYS.creatingTurndown]: 'Creating Turndown service',
62
62
  [NODE_KEYS.convertingToMarkdown]: 'Converting HTML to Markdown',
63
- [NODE_KEYS.markdownContentLength]: 'Markdown content length: {{length}} bytes'
63
+ [NODE_KEYS.markdownContentLength]: 'Markdown content length: {{length}} bytes',
64
+ [NODE_KEYS.startingPlainTextFetch]: 'Starting plain text extraction',
65
+ [NODE_KEYS.extractingText]: 'Extracting text from HTML content',
66
+ [NODE_KEYS.textExtracted]: 'Text extracted, length: {{length}} bytes',
67
+ // 内容分段相关 (Content splitting related)
68
+ [NODE_KEYS.contentSplit]: 'Content split into {{chunks}} chunks',
69
+ [NODE_KEYS.gettingChunk]: 'Getting chunk content, ID: {{chunkId}}, index: {{chunkIndex}}'
64
70
  };
@@ -0,0 +1,28 @@
1
+ /*
2
+ * Author: Martin <lmccc.dev@gmail.com>
3
+ * Co-Author: AI Assistant (Claude)
4
+ * Description: This code was collaboratively developed by Martin and AI Assistant.
5
+ */
6
+ import { PROCESSOR_KEYS } from '../../keys/processor.js';
7
+ /**
8
+ * 处理器相关的英文文本 (English texts related to processor)
9
+ */
10
+ export const processorEn = {
11
+ // HTML转Markdown相关 (HTML to Markdown related)
12
+ [PROCESSOR_KEYS.creatingTurndown]: 'Creating Turndown service',
13
+ [PROCESSOR_KEYS.convertingToMarkdown]: 'Converting HTML to Markdown',
14
+ [PROCESSOR_KEYS.markdownContentLength]: 'Markdown content length: {{length}} bytes',
15
+ // HTML转纯文本相关 (HTML to plain text related)
16
+ [PROCESSOR_KEYS.creatingHtmlToText]: 'Creating HTML-to-Text converter',
17
+ [PROCESSOR_KEYS.convertingToText]: 'Converting HTML to plain text',
18
+ [PROCESSOR_KEYS.textContentLength]: 'Plain text content length: {{length}} bytes',
19
+ // JSON处理相关 (JSON processing related)
20
+ [PROCESSOR_KEYS.parsingJson]: 'Parsing JSON content',
21
+ [PROCESSOR_KEYS.jsonParsed]: 'Successfully parsed JSON content',
22
+ [PROCESSOR_KEYS.jsonParseError]: 'Failed to parse JSON: {{error}}. Preview: {{textPreview}}, Length: {{textLength}} bytes',
23
+ // 文本处理相关 (Text processing related)
24
+ [PROCESSOR_KEYS.processingText]: 'Processing text content with length: {{length}} bytes',
25
+ // 内容大小验证相关 (Content size validation related)
26
+ [PROCESSOR_KEYS.contentTooLarge]: 'Content size ({{contentSize}} bytes) exceeds the allowed limit ({{contentSizeLimit}} bytes)',
27
+ [PROCESSOR_KEYS.contentSizeOk]: 'Content size ({{contentSize}} bytes) within allowed limit ({{contentSizeLimit}} bytes)',
28
+ };
@@ -29,5 +29,9 @@ export default {
29
29
  [TOOLS_KEYS.callError]: 'Error calling tool {{name}}: {{error}}',
30
30
  [TOOLS_KEYS.missingUrl]: 'Missing URL parameter',
31
31
  [TOOLS_KEYS.fetchRequest]: 'Fetching {{type}} from URL: {{url}}',
32
- [TOOLS_KEYS.fetchError]: 'Error fetching from URL {{url}}: {{error}}'
32
+ [TOOLS_KEYS.fetchError]: 'Error fetching from URL {{url}}: {{error}}',
33
+ // 参数相关 (Parameters related)
34
+ [TOOLS_KEYS.missingUrlOrChunkId]: 'Missing URL or chunk ID',
35
+ [TOOLS_KEYS.missingStartCursor]: 'Missing start cursor parameter',
36
+ [TOOLS_KEYS.fetchChunkRequest]: 'Fetching chunk: {{chunkId}} from startCursor: {{startCursor}}',
33
37
  };
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Author: Martin <lmccc.dev@gmail.com>
3
+ * Co-Author: AI Assistant (Claude)
4
+ * Description: This code was collaboratively developed by Martin and AI Assistant.
5
+ */
6
+ import { URL_KEYS } from '../../keys/url.js';
7
+ // URL相关消息 (URL related messages)
8
+ export default {
9
+ // 验证相关 (Validation related)
10
+ [URL_KEYS.invalidUrl]: 'Invalid URL: {{url}}',
11
+ [URL_KEYS.missingScheme]: 'Missing URL scheme',
12
+ [URL_KEYS.invalidScheme]: 'Invalid URL scheme: {{scheme}}',
13
+ [URL_KEYS.invalidHostname]: 'Invalid hostname: {{hostname}}',
14
+ // 处理相关 (Processing related)
15
+ [URL_KEYS.parsing]: 'Parsing URL: {{url}}',
16
+ [URL_KEYS.constructing]: 'Constructing URL from components',
17
+ [URL_KEYS.normalizing]: 'Normalizing URL: {{url}}',
18
+ [URL_KEYS.resolving]: 'Resolving URL: {{url}} against base: {{base}}',
19
+ // 组件相关 (Component related)
20
+ [URL_KEYS.scheme]: 'Scheme: {{scheme}}',
21
+ [URL_KEYS.username]: 'Username: {{username}}',
22
+ [URL_KEYS.password]: 'Password: {{password}}',
23
+ [URL_KEYS.hostname]: 'Hostname: {{hostname}}',
24
+ [URL_KEYS.port]: 'Port: {{port}}',
25
+ [URL_KEYS.path]: 'Path: {{path}}',
26
+ [URL_KEYS.query]: 'Query: {{query}}',
27
+ [URL_KEYS.fragment]: 'Fragment: {{fragment}}',
28
+ // 相对URL相关 (Relative URL related)
29
+ [URL_KEYS.baseUrl]: 'Base URL: {{url}}',
30
+ [URL_KEYS.relativeUrl]: 'Relative URL: {{url}}',
31
+ [URL_KEYS.absoluteUrl]: 'Absolute URL: {{url}}',
32
+ // 转换相关 (Conversion related)
33
+ [URL_KEYS.toString]: 'Converting URL to string',
34
+ [URL_KEYS.toJSON]: 'Converting URL to JSON',
35
+ // 错误相关 (Error related)
36
+ [URL_KEYS.parseError]: 'Error parsing URL: {{error}}',
37
+ [URL_KEYS.constructError]: 'Error constructing URL: {{error}}',
38
+ [URL_KEYS.normalizeError]: 'Error normalizing URL: {{error}}',
39
+ [URL_KEYS.resolveError]: 'Error resolving URL: {{error}}'
40
+ };
@@ -0,0 +1,51 @@
1
+ /*
2
+ * Author: Martin <lmccc.dev@gmail.com>
3
+ * Co-Author: AI Assistant (Claude)
4
+ * Description: This code was collaboratively developed by Martin and AI Assistant.
5
+ */
6
+ export default {
7
+ // 客户端相关 (Client related)
8
+ 'client.startingServer': 'Starting server...',
9
+ 'client.usingEnvProxy': 'Using environment proxy: {proxy}',
10
+ 'client.usingSystemProxy': 'Using system proxy: {proxy}',
11
+ 'client.noSystemProxy': 'No system proxy found',
12
+ 'client.systemProxyDisabled': 'System proxy detection disabled',
13
+ 'client.proxySet': 'Proxy set: {proxy}',
14
+ 'client.fetchingUrl': 'Fetching URL: {url}',
15
+ 'client.usingBrowserMode': 'Using browser mode',
16
+ 'client.usingStandardMode': 'Using standard mode',
17
+ 'client.switchingToBrowserMode': 'Switching to browser mode',
18
+ 'client.fetchSuccessful': 'Fetch successful',
19
+ 'client.fetchFailed': 'Fetch failed: {error}',
20
+ 'client.fatalError': 'Fatal error: {error}',
21
+ 'client.serverClosed': 'Server closed',
22
+ // 使用信息 (Usage information)
23
+ 'client.usageInfo': 'Usage: {info}',
24
+ 'client.exampleUsage': 'Example: {example}',
25
+ 'client.chunkUsageInfo': 'To fetch a specific chunk, use --chunk-id and --chunk-index parameters',
26
+ 'client.allChunksUsageInfo': 'To fetch all chunks, use --all-chunks parameter',
27
+ 'client.invalidJson': 'Invalid JSON: {error}',
28
+ 'client.usingCommandLineProxy': 'Using command line proxy: {proxy}',
29
+ 'client.invalidProxyFormat': 'Invalid proxy format: {proxy}',
30
+ // 分段内容相关 (Chunked content related)
31
+ 'client.chunkInfoSaved': 'Chunk info saved to {file}, current: {current}, total: {total}',
32
+ 'client.chunkInfoSaveError': 'Error saving chunk info: {error}',
33
+ 'client.chunkInfoLoaded': 'Chunk info loaded from {file}, current: {current}, total: {total}',
34
+ 'client.chunkInfoLoadError': 'Error loading chunk info: {error}',
35
+ 'client.fetchingAllChunks': 'Fetching all chunks, total: {total}',
36
+ 'client.fetchingChunk': 'Fetching chunk {index}/{total}',
37
+ 'client.fetchChunkFailed': 'Failed to fetch chunk {index}: {error}',
38
+ 'client.allChunksFetched': 'All chunks fetched, total: {total}',
39
+ 'client.hasMoreChunks': 'Content is chunked: {current}/{total}',
40
+ 'client.allChunksCommand': 'To fetch all chunks, run: {command}',
41
+ // 参数相关 (Parameters related)
42
+ 'client.sendingParameters': 'Sending parameters to MCP: {params}',
43
+ 'client.limitingChunks': 'Limiting chunks to {limit} (total: {total})',
44
+ 'client.maxChunksUsageInfo': 'Use --max-chunks=N to limit the number of chunks to fetch (default: {default})',
45
+ // 错误相关 (Error related)
46
+ 'errors.forbidden': 'Access forbidden (HTTP 403)',
47
+ 'errors.cloudflareProtection': 'Cloudflare protection detected',
48
+ 'errors.captchaRequired': 'CAPTCHA verification required',
49
+ 'errors.timeout': 'Request timed out after {timeout}',
50
+ 'errors.connectionProblem': 'Connection problem detected'
51
+ };
@@ -6,80 +6,118 @@
6
6
  import { BROWSER_KEYS } from '../../keys/browser.js';
7
7
  export default {
8
8
  // 浏览器生命周期 (Browser lifecycle)
9
- [BROWSER_KEYS.closing]: "关闭浏览器...",
9
+ [BROWSER_KEYS.closing]: "正在关闭浏览器...",
10
10
  [BROWSER_KEYS.closed]: "浏览器已关闭",
11
- [BROWSER_KEYS.starting]: "启动新的浏览器实例",
11
+ [BROWSER_KEYS.starting]: "正在启动新的浏览器实例",
12
12
  [BROWSER_KEYS.startingFailed]: "浏览器启动失败: {{error}}",
13
- [BROWSER_KEYS.alreadyRunning]: "浏览器正在启动,请等待...",
13
+ [BROWSER_KEYS.alreadyRunning]: "浏览器正在启动中,请稍等...",
14
14
  // 页面操作 (Page operations)
15
- [BROWSER_KEYS.creatingPage]: "创建新页面",
16
- [BROWSER_KEYS.navigatingTo]: "导航到 URL: {{url}}",
17
- [BROWSER_KEYS.waitingForSelector]: "等待选择器: {{selector}}",
18
- [BROWSER_KEYS.waitingForTimeout]: "等待超时: {{timeout}}ms",
19
- [BROWSER_KEYS.scrollingToBottom]: "自动滚动页面...",
20
- [BROWSER_KEYS.scrollError]: "滚动时出错: {{error}}",
21
- [BROWSER_KEYS.gettingContent]: "获取页面内容...",
15
+ [BROWSER_KEYS.creatingPage]: "正在创建新页面",
16
+ [BROWSER_KEYS.navigatingTo]: "正在导航到网址: {{url}}",
17
+ [BROWSER_KEYS.waitingForSelector]: "正在等待选择器: {{selector}}",
18
+ [BROWSER_KEYS.waitingForTimeout]: "正在等待超时: {{timeout}}毫秒",
19
+ [BROWSER_KEYS.scrollingToBottom]: "正在自动滚动页面...",
20
+ [BROWSER_KEYS.scrollError]: "滚动过程中出错: {{error}}",
21
+ [BROWSER_KEYS.gettingContent]: "正在获取页面内容...",
22
22
  [BROWSER_KEYS.contentLength]: "内容长度: {{length}} 字节",
23
+ [BROWSER_KEYS.contentTruncated]: "内容已从 {{originalLength}} 截断至 {{truncatedLength}} 字节",
24
+ [BROWSER_KEYS.contentSplit]: "内容已分割成 {{chunks}} 个块",
25
+ [BROWSER_KEYS.startingHtmlFetch]: "开始获取 HTML",
23
26
  // Cookie 相关 (Cookie related)
24
- [BROWSER_KEYS.savingCookies]: "保存域名的 Cookie: {{domain}}",
25
- [BROWSER_KEYS.cookiesSaved]: "Cookie 保存成功",
26
- [BROWSER_KEYS.loadingCookies]: "加载域名的 Cookie: {{domain}}",
27
- [BROWSER_KEYS.cookiesLoaded]: "Cookie 加载成功",
27
+ [BROWSER_KEYS.savingCookies]: "正在保存域名的 Cookie: {{domain}}",
28
+ [BROWSER_KEYS.cookiesSaved]: "Cookie 已保存",
29
+ [BROWSER_KEYS.loadingCookies]: "正在加载域名的 Cookie: {{domain}}",
30
+ [BROWSER_KEYS.cookiesLoaded]: "Cookie 已加载",
28
31
  [BROWSER_KEYS.noCookiesFound]: "未找到域名的 Cookie: {{domain}}",
29
32
  // 错误相关 (Error related)
30
- [BROWSER_KEYS.errorLoadingCookies]: "加载 Cookie 错误: {{error}}",
31
- [BROWSER_KEYS.errorSavingCookies]: "保存 Cookie 错误: {{error}}",
32
- [BROWSER_KEYS.errorNavigating]: "导航到 URL 错误: {{error}}",
33
- [BROWSER_KEYS.errorGettingContent]: "获取内容错误: {{error}}",
34
- [BROWSER_KEYS.errorClosingBrowser]: "关闭浏览器错误: {{error}}",
35
- [BROWSER_KEYS.errorCreatingPage]: "创建页面错误: {{error}}",
36
- [BROWSER_KEYS.closingError]: "浏览器关闭过程中出错: {{error}}",
33
+ [BROWSER_KEYS.errorLoadingCookies]: "加载 Cookie 出错: {{error}}",
34
+ [BROWSER_KEYS.errorSavingCookies]: "保存 Cookie 出错: {{error}}",
35
+ [BROWSER_KEYS.errorNavigating]: "导航至 {{url}} 出错: {{error}}",
36
+ [BROWSER_KEYS.errorGettingContent]: "获取内容出错: {{error}}",
37
+ [BROWSER_KEYS.errorClosingBrowser]: "关闭浏览器出错: {{error}}",
38
+ [BROWSER_KEYS.errorCreatingPage]: "创建页面出错: {{error}}",
39
+ [BROWSER_KEYS.closingError]: "关闭浏览器出错: {{error}}",
37
40
  // 额外的浏览器相关键 (Additional browser related keys)
38
- [BROWSER_KEYS.waiting]: "浏览器正在启动,请等待...",
41
+ [BROWSER_KEYS.waiting]: "等待 {{ms}} 毫秒",
39
42
  [BROWSER_KEYS.startupSuccess]: "浏览器启动成功",
40
- [BROWSER_KEYS.navigating]: "导航到 URL: {{url}}",
41
- [BROWSER_KEYS.scrolling]: "自动滚动页面...",
43
+ [BROWSER_KEYS.navigating]: "正在导航至 {{url}}",
44
+ [BROWSER_KEYS.scrolling]: "正在自动滚动页面...",
42
45
  [BROWSER_KEYS.scrollCompleted]: "自动滚动完成",
43
- [BROWSER_KEYS.contentTruncated]: "内容过大,正在截断...",
44
46
  [BROWSER_KEYS.pageClosed]: "页面已关闭",
45
- [BROWSER_KEYS.fetchError]: "浏览器获取错误: {{error}}",
47
+ [BROWSER_KEYS.fetchError]: "浏览器获取过程中出错: {{error}}",
46
48
  [BROWSER_KEYS.highMemory]: "检测到高内存使用: {{usage}}MB",
47
- [BROWSER_KEYS.closingDueToMemory]: "由于内存使用过高而关闭浏览器",
48
- [BROWSER_KEYS.forcingGC]: "强制垃圾回收",
49
- [BROWSER_KEYS.memoryCheckError]: "检查内存使用错误: {{error}}",
50
- [BROWSER_KEYS.usingCookies]: "使用域名的 Cookie: {{domain}}",
51
- [BROWSER_KEYS.usingProxy]: "使用代理: {{proxy}}",
49
+ [BROWSER_KEYS.closingDueToMemory]: "由于高内存使用正在关闭浏览器",
50
+ [BROWSER_KEYS.forcingGC]: "强制进行垃圾回收",
51
+ [BROWSER_KEYS.memoryCheckError]: "检查内存时出错: {{error}}",
52
+ [BROWSER_KEYS.usingCookies]: "正在使用 {{domain}} 的 Cookie",
53
+ [BROWSER_KEYS.usingProxy]: "正在使用代理: {{proxy}}",
52
54
  // Cloudflare 相关 (Cloudflare related)
53
- [BROWSER_KEYS.checkingCloudflare]: "检查 Cloudflare 保护",
55
+ [BROWSER_KEYS.checkingCloudflare]: "正在检查 Cloudflare 保护",
54
56
  [BROWSER_KEYS.cloudflareDetected]: "检测到 Cloudflare 保护",
55
- [BROWSER_KEYS.simulatingHuman]: "模拟人类交互以绕过 Cloudflare",
56
- [BROWSER_KEYS.simulatingHumanError]: "模拟人类交互错误: {{error}}",
57
- [BROWSER_KEYS.stillOnCloudflare]: "绕过尝试后仍在 Cloudflare 页面",
57
+ [BROWSER_KEYS.simulatingHuman]: "正在模拟人类交互以绕过 Cloudflare",
58
+ [BROWSER_KEYS.simulatingHumanError]: "模拟人类交互时出错: {{error}}",
59
+ [BROWSER_KEYS.stillOnCloudflare]: "尝试绕过后仍在 Cloudflare 页面",
58
60
  [BROWSER_KEYS.bypassFailed]: "Cloudflare 绕过失败",
59
61
  [BROWSER_KEYS.cloudflareError]: "Cloudflare 错误: {{error}}",
60
- [BROWSER_KEYS.continuingWithoutBypass]: "继续而不绕过 Cloudflare",
62
+ [BROWSER_KEYS.continuingWithoutBypass]: "继续访问而不绕过 Cloudflare",
61
63
  [BROWSER_KEYS.unableToBypassCloudflare]: "无法绕过 Cloudflare 保护",
64
+ [BROWSER_KEYS.cloudflareBypass]: "正在尝试绕过 Cloudflare 保护",
65
+ [BROWSER_KEYS.cloudflareBypassSuccess]: "已绕过 Cloudflare 保护",
66
+ [BROWSER_KEYS.cloudflareBypassFailed]: "绕过 Cloudflare 保护失败: {{error}}",
67
+ [BROWSER_KEYS.cloudflareBypassNotNeeded]: "继续访问而不需要绕过 Cloudflare",
62
68
  // 获取和重试相关 (Fetch and retry related)
63
- [BROWSER_KEYS.fetchingWithRetry]: "重试获取: 第 {{attempt}} 次,共 {{maxAttempts}} 次",
69
+ [BROWSER_KEYS.fetchingWithRetry]: "正在重试获取: 第 {{attempt}} 次尝试,共 {{maxAttempts}} 次",
64
70
  [BROWSER_KEYS.memoryUsage]: "当前内存使用: {{usage}}MB",
65
- [BROWSER_KEYS.memoryTooHigh]: "内存使用过高: {{usage}}MB",
71
+ [BROWSER_KEYS.memoryTooHigh]: "内存使用过高: 堆使用 {{heapUsed}}MB,堆总计 {{heapTotal}}MB,RSS {{rss}}MB",
66
72
  [BROWSER_KEYS.contentTooLarge]: "内容过大: {{size}} 字节",
67
73
  [BROWSER_KEYS.failedToParseJSON]: "解析 JSON 失败: {{error}}",
68
- [BROWSER_KEYS.startingBrowserFetchForMarkdown]: "开始浏览器获取 Markdown",
69
- [BROWSER_KEYS.errorInBrowserFetchForMarkdown]: "浏览器获取 Markdown 错误: {{error}}",
74
+ [BROWSER_KEYS.startingBrowserFetchForMarkdown]: "正在启动浏览器获取 Markdown",
75
+ [BROWSER_KEYS.errorInBrowserFetchForMarkdown]: "浏览器获取 Markdown 时出错: {{error}}",
70
76
  [BROWSER_KEYS.fetchRequest]: "获取请求: {{url}}",
71
- [BROWSER_KEYS.usingStoredCookies]: "使用存储的域名 Cookie: {{domain}}",
72
- [BROWSER_KEYS.closingInstance]: "关闭浏览器实例",
73
- [BROWSER_KEYS.fetchErrorWithAttempt]: "获取错误 (第 {{attempt}} 次): {{error}}",
74
- [BROWSER_KEYS.retryingAfterDelay]: "延迟 {{delay}}ms 后重试",
77
+ [BROWSER_KEYS.usingStoredCookies]: "使用存储的 {{domain}} 域名 Cookie",
78
+ [BROWSER_KEYS.closingInstance]: "正在关闭浏览器实例",
79
+ [BROWSER_KEYS.fetchErrorWithAttempt]: "获取错误 (第 {{attempt}} 次尝试): {{error}}",
80
+ [BROWSER_KEYS.retryingAfterDelay]: "在延迟 {{delay}} 毫秒后重试",
75
81
  // 浏览器启动相关 (Browser startup related)
76
82
  [BROWSER_KEYS.browserStartupSuccess]: "浏览器启动成功",
77
83
  [BROWSER_KEYS.browserStartupFailed]: "浏览器启动失败: {{error}}",
78
84
  [BROWSER_KEYS.usingCustomChromePath]: "使用自定义 Chrome 路径: {{path}}",
79
85
  [BROWSER_KEYS.browserDisconnected]: "浏览器已断开连接",
80
- [BROWSER_KEYS.waitingForBrowserStart]: "等待浏览器启动...",
86
+ [BROWSER_KEYS.waitingForBrowserStart]: "等待浏览器启动",
81
87
  [BROWSER_KEYS.reusingExistingBrowser]: "重用现有浏览器实例",
82
- [BROWSER_KEYS.startingBrowser]: "启动浏览器...",
88
+ [BROWSER_KEYS.startingBrowser]: "正在启动浏览器...",
83
89
  [BROWSER_KEYS.browserStarted]: "浏览器已启动",
84
- [BROWSER_KEYS.browserStartError]: "浏览器启动错误: {{error}}"
90
+ [BROWSER_KEYS.browserStartError]: "浏览器启动错误: {{error}}",
91
+ // Fetch 相关 (Fetch related)
92
+ [BROWSER_KEYS.htmlFetchError]: "获取 HTML 时出错: {{error}}",
93
+ [BROWSER_KEYS.jsonFetchError]: "获取 JSON 时出错: {{error}}",
94
+ [BROWSER_KEYS.txtFetchError]: "获取文本时出错: {{error}}",
95
+ [BROWSER_KEYS.markdownFetchError]: "获取 Markdown 时出错: {{error}}",
96
+ [BROWSER_KEYS.creatingTurndown]: "正在创建 Turndown 实例用于 Markdown 转换",
97
+ [BROWSER_KEYS.convertingToMarkdown]: "正在将 HTML 转换为 Markdown",
98
+ [BROWSER_KEYS.markdownContentLength]: "Markdown 内容长度: {{length}} 字节",
99
+ [BROWSER_KEYS.startingJsonFetch]: "开始获取 JSON",
100
+ [BROWSER_KEYS.startingTxtFetch]: "开始获取文本",
101
+ [BROWSER_KEYS.startingMarkdownFetch]: "开始获取 Markdown",
102
+ [BROWSER_KEYS.startingPlainTextFetch]: "开始获取纯文本",
103
+ [BROWSER_KEYS.extractingText]: "正在从 HTML 内容中提取文本",
104
+ [BROWSER_KEYS.textExtracted]: "文本已提取,长度: {{length}} 字节",
105
+ [BROWSER_KEYS.jsonParsed]: "JSON 解析成功",
106
+ [BROWSER_KEYS.jsonParseError]: "解析 JSON 出错: {{error}}",
107
+ // 代理相关 (Proxy related)
108
+ [BROWSER_KEYS.proxyConnected]: "已连接到代理: {{proxy}}",
109
+ [BROWSER_KEYS.proxyError]: "代理错误: {{error}}",
110
+ // 响应相关 (Response related)
111
+ [BROWSER_KEYS.responseStatus]: "响应状态: {{status}}",
112
+ [BROWSER_KEYS.responseError]: "响应错误: {{error}}",
113
+ [BROWSER_KEYS.responseSuccess]: "响应成功",
114
+ [BROWSER_KEYS.responseRedirect]: "响应重定向至: {{url}}",
115
+ [BROWSER_KEYS.responseTimeout]: "响应在 {{timeout}} 毫秒后超时",
116
+ // 错误处理 (Error handling)
117
+ [BROWSER_KEYS.errorResponse]: "来自服务器的错误响应: {{status}}",
118
+ [BROWSER_KEYS.errorResponseBody]: "错误响应体: {{body}}",
119
+ [BROWSER_KEYS.accessDenied]: "访问被拒绝: {{status}} - {{message}}",
120
+ [BROWSER_KEYS.timeoutError]: "请求在 {{timeout}} 毫秒后超时",
121
+ [BROWSER_KEYS.networkError]: "网络错误: {{error}}",
122
+ [BROWSER_KEYS.unknownError]: "未知错误: {{error}}"
85
123
  };
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Author: Martin <lmccc.dev@gmail.com>
3
+ * Co-Author: AI Assistant (Claude)
4
+ * Description: This code was collaboratively developed by Martin and AI Assistant.
5
+ */
6
+ import { CHUNK_MANAGER_KEYS } from '../../keys/chunkManager.js';
7
+ /**
8
+ * 分段管理相关的中文文本 (Chinese texts related to chunk management)
9
+ */
10
+ export const chunkManagerZh = {
11
+ // 分段管理基础操作 (Basic chunk management operations)
12
+ [CHUNK_MANAGER_KEYS.startingManager]: "启动分块管理器",
13
+ [CHUNK_MANAGER_KEYS.creatingChunks]: "正在创建内容分块",
14
+ [CHUNK_MANAGER_KEYS.splittingContent]: "正在将内容分割成块。内容大小:{{contentSize}} 字节",
15
+ [CHUNK_MANAGER_KEYS.creatingChunk]: "正在创建第 {{index}}/{{total}} 个分块",
16
+ [CHUNK_MANAGER_KEYS.chunksCreated]: "已从内容创建 {{count}} 个分块",
17
+ [CHUNK_MANAGER_KEYS.calculatingChunks]: "正在计算所需的分块数量",
18
+ [CHUNK_MANAGER_KEYS.totalChunks]: "总分块数:{{total}},内容大小:{{contentSize}} 字节,分块大小:{{chunkSize}} 字节",
19
+ [CHUNK_MANAGER_KEYS.storedChunks]: "已存储的分块:{{count}} 个",
20
+ [CHUNK_MANAGER_KEYS.cleanedUpExpiredChunks]: "已清理 {{count}} 个过期分块",
21
+ // 分段相关错误 (Chunk related errors)
22
+ [CHUNK_MANAGER_KEYS.invalidChunkId]: "无效的分块ID:{{chunkId}}",
23
+ [CHUNK_MANAGER_KEYS.chunkNotFound]: "找不到分块:{{chunkId}}",
24
+ [CHUNK_MANAGER_KEYS.chunkIdNotFound]: "存储中未找到分块ID:{{chunkId}}",
25
+ [CHUNK_MANAGER_KEYS.invalidByteRange]: "无效的字节范围:起始={{start}},结束={{end}}",
26
+ [CHUNK_MANAGER_KEYS.invalidStartCursor]: "无效的起始游标值:{{cursor}}",
27
+ [CHUNK_MANAGER_KEYS.splitError]: "分割内容时出错:{{error}}",
28
+ [CHUNK_MANAGER_KEYS.sizeInfoNotFound]: "未找到分块的大小信息:{{chunkId}}",
29
+ // 分段内容控制 (Chunk content control)
30
+ [CHUNK_MANAGER_KEYS.gettingChunk]: "正在获取分块:{{chunkId}}",
31
+ [CHUNK_MANAGER_KEYS.chunkRetrieved]: "已检索分块:{{chunkId}},大小:{{size}} 字节",
32
+ [CHUNK_MANAGER_KEYS.retrievedChunkBySize]: "已按大小参数检索分块:起始游标={{startCursor}},大小={{size}}",
33
+ [CHUNK_MANAGER_KEYS.contentExceedsLimit]: "内容超过大小限制:{{contentSize}} 字节(限制:{{limit}} 字节)",
34
+ [CHUNK_MANAGER_KEYS.byteRangeSplit]: "按字节范围分割内容:{{start}}-{{end}},共 {{total}} 字节",
35
+ [CHUNK_MANAGER_KEYS.byteLimitApplied]: "已应用字节限制:{{limit}} 字节",
36
+ // 进度和统计 (Progress and statistics)
37
+ [CHUNK_MANAGER_KEYS.processingChunk]: "正在处理第 {{current}}/{{total}} 个分块",
38
+ [CHUNK_MANAGER_KEYS.chunkStats]: "分块统计 - 总数:{{total}},平均大小:{{avgSize}} 字节,最大大小:{{maxSize}} 字节",
39
+ [CHUNK_MANAGER_KEYS.remainingChunks]: "剩余分块:{{remaining}}/{{total}}",
40
+ [CHUNK_MANAGER_KEYS.chunkProgress]: "分块进度:完成 {{percent}}%({{processed}}/{{total}} 个分块)"
41
+ };