@lmcc-dev/mult-fetch-mcp-server 1.1.0 → 1.2.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 (216) hide show
  1. package/README.md +8 -8
  2. package/README.zh.md +16 -8
  3. package/dist/i18n-test-report.json +8 -0
  4. package/dist/i18n-unused-keys-report.json +8 -0
  5. package/dist/src/client.js +70 -37
  6. package/dist/src/index.js +0 -0
  7. package/dist/src/lib/BrowserFetcher.js +12 -12
  8. package/dist/src/lib/NodeFetcher.js +22 -22
  9. package/dist/src/lib/fetch.js +40 -0
  10. package/dist/src/lib/fetchers/FetcherFactory.js +43 -0
  11. package/dist/src/lib/fetchers/browser/BrowserFetcher.js +381 -0
  12. package/dist/src/lib/fetchers/browser/BrowserInstance.js +180 -0
  13. package/dist/src/lib/fetchers/browser/PageOperations.js +168 -0
  14. package/dist/src/lib/fetchers/common/types.js +41 -0
  15. package/dist/src/lib/fetchers/common/utils.js +141 -0
  16. package/dist/src/lib/fetchers/index.js +62 -0
  17. package/dist/src/lib/fetchers/node/HttpClient.js +239 -0
  18. package/dist/src/lib/fetchers/node/NodeFetcher.js +180 -0
  19. package/dist/src/lib/i18n/index.js +105 -17
  20. package/dist/src/lib/i18n/keys/base.js +41 -0
  21. package/dist/src/lib/i18n/keys/browser.js +91 -0
  22. package/dist/src/lib/i18n/keys/client.js +68 -0
  23. package/dist/src/lib/i18n/keys/errors.js +49 -0
  24. package/dist/src/lib/i18n/keys/factory.js +46 -0
  25. package/dist/src/lib/i18n/keys/fetcher.js +87 -0
  26. package/dist/src/lib/i18n/keys/index.js +16 -0
  27. package/dist/src/lib/i18n/keys/node.js +69 -0
  28. package/dist/src/lib/i18n/keys/prompts.js +79 -0
  29. package/dist/src/lib/i18n/keys/resources.js +53 -0
  30. package/dist/src/lib/i18n/keys/server.js +67 -0
  31. package/dist/src/lib/i18n/keys/tools.js +39 -0
  32. package/dist/src/lib/i18n/keys.js +488 -119
  33. package/dist/src/lib/i18n/locales/en/browser.js +67 -57
  34. package/dist/src/lib/i18n/locales/en/client.js +57 -33
  35. package/dist/src/lib/i18n/locales/en/errors.js +36 -12
  36. package/dist/src/lib/i18n/locales/en/factory.js +38 -0
  37. package/dist/src/lib/i18n/locales/en/fetcher.js +8 -2
  38. package/dist/src/lib/i18n/locales/en/index.js +10 -8
  39. package/dist/src/lib/i18n/locales/en/node.js +57 -35
  40. package/dist/src/lib/i18n/locales/en/prompts.js +42 -65
  41. package/dist/src/lib/i18n/locales/en/resources.js +52 -55
  42. package/dist/src/lib/i18n/locales/en/server.js +49 -24
  43. package/dist/src/lib/i18n/locales/en/tools.js +27 -19
  44. package/dist/src/lib/i18n/locales/zh/browser.js +71 -62
  45. package/dist/src/lib/i18n/locales/zh/client.js +57 -32
  46. package/dist/src/lib/i18n/locales/zh/errors.js +36 -12
  47. package/dist/src/lib/i18n/locales/zh/factory.js +38 -0
  48. package/dist/src/lib/i18n/locales/zh/fetcher.js +36 -30
  49. package/dist/src/lib/i18n/locales/zh/index.js +10 -8
  50. package/dist/src/lib/i18n/locales/zh/node.js +61 -36
  51. package/dist/src/lib/i18n/locales/zh/prompts.js +35 -57
  52. package/dist/src/lib/i18n/locales/zh/resources.js +52 -55
  53. package/dist/src/lib/i18n/locales/zh/server.js +51 -25
  54. package/dist/src/lib/i18n/locales/zh/tools.js +27 -19
  55. package/dist/src/lib/i18n/logger.js +90 -19
  56. package/dist/src/lib/logger.js +135 -14
  57. package/dist/src/lib/server/browser.js +42 -10
  58. package/dist/src/lib/server/fetcher.js +87 -37
  59. package/dist/src/lib/server/index.js +2 -2
  60. package/dist/src/lib/server/prompts.js +1 -1
  61. package/dist/src/lib/server/resources.js +1 -1
  62. package/dist/src/lib/server/tools.js +46 -10
  63. package/dist/src/lib/utils/ErrorHandler.js +125 -0
  64. package/dist/src/mcp-server.js +0 -0
  65. package/dist/src/test-i18n.js +139 -0
  66. package/dist/tests/BrowserFetcher.test.js +0 -0
  67. package/dist/tests/NodeFetcher.test.js +0 -0
  68. package/dist/tests/client.test.js +42 -81
  69. package/dist/tests/fetch.test.js +70 -0
  70. package/dist/tests/fetchers/Fetcher.test.js +108 -0
  71. package/dist/tests/fetchers/browser/BrowserFetcher.test.js +195 -0
  72. package/dist/tests/fetchers/browser/BrowserInstance.test.js +163 -0
  73. package/dist/tests/fetchers/node/NodeFetcher.test.js +211 -0
  74. package/dist/tests/i18n-missing-keys.js +364 -0
  75. package/dist/tests/i18n-remove-unused-keys.js +236 -0
  76. package/dist/tests/i18n-test-report.json +2004 -0
  77. package/dist/tests/i18n-unused-keys.js +425 -0
  78. package/dist/tests/i18n.test.js +6 -7
  79. package/dist/tests/logger.test.js +14 -13
  80. package/dist/tests/mcp-server.test.js +7 -7
  81. package/dist/tests/server/browser.test.js +25 -21
  82. package/dist/tests/server/fetcher.test.js +58 -101
  83. package/dist/tests/server/index.test.js +30 -30
  84. package/dist/tests/server/prompts.test.js +36 -33
  85. package/dist/tests/server/resources.test.js +120 -84
  86. package/dist/tests/server/tools.test.js +7 -6
  87. package/dist/tests/setup.js +36 -0
  88. package/dist/tests/src/lib/i18n/index.js +108 -0
  89. package/dist/tests/src/lib/i18n/keys/base.js +47 -0
  90. package/dist/tests/src/lib/i18n/keys/browser.js +93 -0
  91. package/dist/tests/src/lib/i18n/keys/client.js +70 -0
  92. package/dist/tests/src/lib/i18n/keys/errors.js +34 -0
  93. package/dist/tests/src/lib/i18n/keys/fetcher.js +84 -0
  94. package/dist/tests/src/lib/i18n/keys/index.js +31 -0
  95. package/dist/tests/src/lib/i18n/keys/node.js +56 -0
  96. package/dist/tests/src/lib/i18n/keys/prompts.js +82 -0
  97. package/dist/tests/src/lib/i18n/keys/resources.js +50 -0
  98. package/dist/tests/src/lib/i18n/keys/server.js +64 -0
  99. package/dist/tests/src/lib/i18n/keys/tools.js +34 -0
  100. package/dist/tests/src/lib/i18n/locales/en/browser.js +88 -0
  101. package/dist/tests/src/lib/i18n/locales/en/client.js +66 -0
  102. package/dist/tests/src/lib/i18n/locales/en/errors.js +28 -0
  103. package/dist/tests/src/lib/i18n/locales/en/fetcher.js +71 -0
  104. package/dist/tests/src/lib/i18n/locales/en/index.js +29 -0
  105. package/dist/tests/src/lib/i18n/locales/en/node.js +51 -0
  106. package/dist/tests/src/lib/i18n/locales/en/prompts.js +52 -0
  107. package/dist/tests/src/lib/i18n/locales/en/resources.js +50 -0
  108. package/dist/tests/src/lib/i18n/locales/en/server.js +56 -0
  109. package/dist/tests/src/lib/i18n/locales/en/tools.js +28 -0
  110. package/dist/tests/src/lib/i18n/locales/zh/browser.js +87 -0
  111. package/dist/tests/src/lib/i18n/locales/zh/client.js +66 -0
  112. package/dist/tests/src/lib/i18n/locales/zh/errors.js +28 -0
  113. package/dist/tests/src/lib/i18n/locales/zh/fetcher.js +71 -0
  114. package/dist/tests/src/lib/i18n/locales/zh/index.js +29 -0
  115. package/dist/tests/src/lib/i18n/locales/zh/node.js +51 -0
  116. package/dist/tests/src/lib/i18n/locales/zh/prompts.js +53 -0
  117. package/dist/tests/src/lib/i18n/locales/zh/resources.js +50 -0
  118. package/dist/tests/src/lib/i18n/locales/zh/server.js +57 -0
  119. package/dist/tests/src/lib/i18n/locales/zh/tools.js +28 -0
  120. package/dist/tests/src/lib/i18n/logger.js +114 -0
  121. package/dist/tests/src/lib/logger.js +181 -0
  122. package/dist/tests/test-direct-client.js +0 -0
  123. package/dist/tests/test-i18n.js +530 -0
  124. package/dist/tests/test-mcp-methods.js +1 -1
  125. package/dist/tests/test-mcp.js +0 -0
  126. package/dist/tests/test-mini4k.js +0 -0
  127. package/dist/tests/tests/test-i18n.js +588 -0
  128. package/dist/tests/types.test.js +1 -1
  129. package/dist/tests/utils/ErrorHandler.test.js +144 -0
  130. package/dist/vitest.config.js +29 -0
  131. package/package.json +31 -27
  132. package/dist/src/cli-language.js +0 -78
  133. package/dist/src/client.d.ts +0 -6
  134. package/dist/src/client.js.map +0 -1
  135. package/dist/src/index.d.ts +0 -15
  136. package/dist/src/index.js.map +0 -1
  137. package/dist/src/lib/BrowserFetcher.d.ts +0 -175
  138. package/dist/src/lib/BrowserFetcher.js.map +0 -1
  139. package/dist/src/lib/NodeFetcher.d.ts +0 -92
  140. package/dist/src/lib/NodeFetcher.js.map +0 -1
  141. package/dist/src/lib/example.js +0 -93
  142. package/dist/src/lib/i18n/index.js.map +0 -1
  143. package/dist/src/lib/i18n/locales/en/browser.d.ts +0 -61
  144. package/dist/src/lib/i18n/locales/en/browser.js.map +0 -1
  145. package/dist/src/lib/i18n/locales/en/client.d.ts +0 -39
  146. package/dist/src/lib/i18n/locales/en/client.js.map +0 -1
  147. package/dist/src/lib/i18n/locales/en/errors.d.ts +0 -17
  148. package/dist/src/lib/i18n/locales/en/errors.js.map +0 -1
  149. package/dist/src/lib/i18n/locales/en/fetcher.d.ts +0 -66
  150. package/dist/src/lib/i18n/locales/en/fetcher.js.map +0 -1
  151. package/dist/src/lib/i18n/locales/en/index.d.ts +0 -344
  152. package/dist/src/lib/i18n/locales/en/index.js.map +0 -1
  153. package/dist/src/lib/i18n/locales/en/node.d.ts +0 -41
  154. package/dist/src/lib/i18n/locales/en/node.js.map +0 -1
  155. package/dist/src/lib/i18n/locales/en/prompts.d.ts +0 -65
  156. package/dist/src/lib/i18n/locales/en/prompts.js.map +0 -1
  157. package/dist/src/lib/i18n/locales/en/resources.d.ts +0 -41
  158. package/dist/src/lib/i18n/locales/en/resources.js.map +0 -1
  159. package/dist/src/lib/i18n/locales/en/server.d.ts +0 -30
  160. package/dist/src/lib/i18n/locales/en/server.js.map +0 -1
  161. package/dist/src/lib/i18n/locales/en/tools.d.ts +0 -24
  162. package/dist/src/lib/i18n/locales/en/tools.js.map +0 -1
  163. package/dist/src/lib/i18n/locales/zh/browser.d.ts +0 -61
  164. package/dist/src/lib/i18n/locales/zh/browser.js.map +0 -1
  165. package/dist/src/lib/i18n/locales/zh/client.d.ts +0 -38
  166. package/dist/src/lib/i18n/locales/zh/client.js.map +0 -1
  167. package/dist/src/lib/i18n/locales/zh/errors.d.ts +0 -17
  168. package/dist/src/lib/i18n/locales/zh/errors.js.map +0 -1
  169. package/dist/src/lib/i18n/locales/zh/fetcher.d.ts +0 -66
  170. package/dist/src/lib/i18n/locales/zh/fetcher.js.map +0 -1
  171. package/dist/src/lib/i18n/locales/zh/index.d.ts +0 -343
  172. package/dist/src/lib/i18n/locales/zh/index.js.map +0 -1
  173. package/dist/src/lib/i18n/locales/zh/node.d.ts +0 -41
  174. package/dist/src/lib/i18n/locales/zh/node.js.map +0 -1
  175. package/dist/src/lib/i18n/locales/zh/prompts.d.ts +0 -65
  176. package/dist/src/lib/i18n/locales/zh/prompts.js.map +0 -1
  177. package/dist/src/lib/i18n/locales/zh/resources.d.ts +0 -41
  178. package/dist/src/lib/i18n/locales/zh/resources.js.map +0 -1
  179. package/dist/src/lib/i18n/locales/zh/server.d.ts +0 -30
  180. package/dist/src/lib/i18n/locales/zh/server.js.map +0 -1
  181. package/dist/src/lib/i18n/locales/zh/tools.d.ts +0 -24
  182. package/dist/src/lib/i18n/locales/zh/tools.js.map +0 -1
  183. package/dist/src/lib/i18n/logger.d.ts +0 -38
  184. package/dist/src/lib/i18n/logger.js.map +0 -1
  185. package/dist/src/lib/logger.d.ts +0 -32
  186. package/dist/src/lib/logger.js.map +0 -1
  187. package/dist/src/lib/server/browser.d.ts +0 -34
  188. package/dist/src/lib/server/browser.js.map +0 -1
  189. package/dist/src/lib/server/fetcher.d.ts +0 -20
  190. package/dist/src/lib/server/fetcher.js.map +0 -1
  191. package/dist/src/lib/server/index.d.ts +0 -10
  192. package/dist/src/lib/server/index.js.map +0 -1
  193. package/dist/src/lib/server/logger.js +0 -23
  194. package/dist/src/lib/server/prompts.d.ts +0 -11
  195. package/dist/src/lib/server/prompts.js.map +0 -1
  196. package/dist/src/lib/server/resources.d.ts +0 -11
  197. package/dist/src/lib/server/resources.js.map +0 -1
  198. package/dist/src/lib/server/tools.d.ts +0 -12
  199. package/dist/src/lib/server/tools.js.map +0 -1
  200. package/dist/src/lib/server/types.d.ts +0 -71
  201. package/dist/src/lib/server/types.js.map +0 -1
  202. package/dist/src/lib/types.d.ts +0 -119
  203. package/dist/src/lib/types.js.map +0 -1
  204. package/dist/src/mcp-server.d.ts +0 -6
  205. package/dist/src/mcp-server.js.map +0 -1
  206. package/dist/tests/jest.setup.d.ts +0 -6
  207. package/dist/tests/jest.setup.js +0 -30
  208. package/dist/tests/jest.setup.js.map +0 -1
  209. package/dist/tests/test-direct-client.d.ts +0 -6
  210. package/dist/tests/test-direct-client.js.map +0 -1
  211. package/dist/tests/test-mcp-methods.d.ts +0 -6
  212. package/dist/tests/test-mcp-methods.js.map +0 -1
  213. package/dist/tests/test-mcp.d.ts +0 -6
  214. package/dist/tests/test-mcp.js.map +0 -1
  215. package/dist/tests/test-mini4k.d.ts +0 -6
  216. package/dist/tests/test-mini4k.js.map +0 -1
@@ -3,74 +3,84 @@
3
3
  * Co-Author: AI Assistant (Claude)
4
4
  * Description: This code was collaboratively developed by Martin and AI Assistant.
5
5
  */
6
- import { BROWSER_KEYS } from '../../keys.js';
6
+ import { BROWSER_KEYS } from '../../keys/browser.js';
7
7
  // 浏览器相关消息 (Browser related messages)
8
- export const browser = {
8
+ export default {
9
+ // 浏览器生命周期 (Browser lifecycle)
9
10
  [BROWSER_KEYS.closing]: "Closing browser...",
10
11
  [BROWSER_KEYS.closed]: "Browser closed",
11
12
  [BROWSER_KEYS.starting]: "Starting new browser instance",
12
13
  [BROWSER_KEYS.startingFailed]: "Browser startup failed: {{error}}",
13
14
  [BROWSER_KEYS.alreadyRunning]: "Browser is starting, waiting...",
14
- [BROWSER_KEYS.creatingPage]: "Browser started successfully",
15
- [BROWSER_KEYS.navigatingTo]: "Navigating to URL...",
15
+ // 页面操作 (Page operations)
16
+ [BROWSER_KEYS.creatingPage]: "Creating new page",
17
+ [BROWSER_KEYS.navigatingTo]: "Navigating to URL: {{url}}",
16
18
  [BROWSER_KEYS.waitingForSelector]: "Waiting for selector: {{selector}}",
17
- [BROWSER_KEYS.waitingForTimeout]: "Waiting for timeout: {{timeout}}",
19
+ [BROWSER_KEYS.waitingForTimeout]: "Waiting for timeout: {{timeout}}ms",
18
20
  [BROWSER_KEYS.scrollingToBottom]: "Auto-scrolling page...",
21
+ [BROWSER_KEYS.scrollError]: "Error while scrolling: {{error}}",
19
22
  [BROWSER_KEYS.gettingContent]: "Getting page content...",
20
- [BROWSER_KEYS.savingCookies]: "Saving cookies...",
21
- [BROWSER_KEYS.contentLength]: "Content length: {{length}}",
22
- [BROWSER_KEYS.cookiesSaved]: "Cookies saved",
23
- [BROWSER_KEYS.cookiesLoaded]: "Cookies loaded",
24
- [BROWSER_KEYS.noCookiesFound]: "No cookies found",
23
+ [BROWSER_KEYS.contentLength]: "Content length: {{length}} bytes",
24
+ // Cookie 相关 (Cookie related)
25
+ [BROWSER_KEYS.savingCookies]: "Saving cookies for domain: {{domain}}",
26
+ [BROWSER_KEYS.cookiesSaved]: "Cookies saved successfully",
27
+ [BROWSER_KEYS.loadingCookies]: "Loading cookies for domain: {{domain}}",
28
+ [BROWSER_KEYS.cookiesLoaded]: "Cookies loaded successfully",
29
+ [BROWSER_KEYS.noCookiesFound]: "No cookies found for domain: {{domain}}",
30
+ // 错误相关 (Error related)
25
31
  [BROWSER_KEYS.errorLoadingCookies]: "Error loading cookies: {{error}}",
26
32
  [BROWSER_KEYS.errorSavingCookies]: "Error saving cookies: {{error}}",
27
- [BROWSER_KEYS.errorNavigating]: "Error navigating: {{error}}",
28
- [BROWSER_KEYS.errorGettingContent]: "Error in browser fetch: {{error}}",
33
+ [BROWSER_KEYS.errorNavigating]: "Error navigating to URL: {{error}}",
34
+ [BROWSER_KEYS.errorGettingContent]: "Error getting content: {{error}}",
29
35
  [BROWSER_KEYS.errorClosingBrowser]: "Error closing browser: {{error}}",
30
36
  [BROWSER_KEYS.errorCreatingPage]: "Error creating page: {{error}}",
31
- // 额外的键(不在 BROWSER_KEYS 中定义的)
32
- "waiting": "Browser is starting, waiting...",
33
- "startupSuccess": "Browser started successfully",
34
- "navigating": "Navigating to URL...",
35
- "scrolling": "Auto-scrolling page...",
36
- "scrollCompleted": "Auto-scroll completed",
37
- "contentTruncated": "Content too large, truncating...",
38
- "pageClosed": "Page closed",
39
- "fetchError": "Error in browser fetch: {{error}}",
40
- "highMemory": "High memory usage detected, attempting to free resources...",
41
- "closingDueToMemory": "Closing browser due to high memory usage...",
42
- "forcingGC": "Forcing garbage collection...",
43
- "memoryCheckError": "Error checking memory usage: {{error}}",
44
- "usingCookies": "Using stored cookies for domain: {{domain}}",
45
- "usingProxy": "Using proxy: {{proxy}}",
46
- "checkingCloudflare": "Checking for Cloudflare protection...",
47
- "cloudflareDetected": "Cloudflare protection detected, attempting to bypass...",
48
- "simulatingHuman": "Simulating human behavior...",
49
- "simulatingHumanError": "Error simulating human behavior: {{error}}",
50
- "stillOnCloudflare": "Still on Cloudflare protection page, trying to refresh...",
51
- "bypassFailed": "Failed to bypass Cloudflare protection",
52
- "cloudflareError": "Error handling Cloudflare protection: {{error}}",
53
- "continuingWithoutBypass": "Unable to bypass Cloudflare protection, continuing to try to get content...",
54
- "fetchingWithRetry": "Fetching HTML with browser (attempt {{attempt}}/{{maxAttempts}}): {{url}}",
55
- "memoryUsage": "Memory usage - Heap: {{heapUsed}}MB/{{heapTotal}}MB, RSS: {{rss}}MB",
56
- "memoryTooHigh": "Memory usage too high - Heap: {{heapUsed}}MB/{{heapTotal}}MB, RSS: {{rss}}MB",
57
- "unableToBypassCloudflare": "Unable to bypass Cloudflare protection, continuing to try to get content...",
58
- "contentTooLarge": "Content too large, truncating...",
59
- "failedToParseJSON": "Failed to parse JSON: {{error}}",
60
- "startingBrowserFetchForMarkdown": "Starting browser fetch for Markdown: {{url}}",
61
- "errorInBrowserFetchForMarkdown": "Error in browser fetch for Markdown: {{error}}",
62
- "fetchRequest": "Browser fetch request: {{url}}",
63
- "usingStoredCookies": "Using stored cookies for domain: {{domain}}",
64
- "closingInstance": "Closing browser instance",
65
- "fetchErrorWithAttempt": "Error in browser fetch (attempt {{attempt}}/{{maxAttempts}}): {{error}}",
66
- "retryingAfterDelay": "Retrying after {{delayMs}}ms delay...",
67
- "browserStartupSuccess": "Browser started successfully",
68
- "browserStartupFailed": "Browser startup failed: {{error}}",
69
- "usingCustomChromePath": "Using custom Chrome path: {{path}}",
70
- "browserDisconnected": "Browser disconnected",
71
- "waitingForBrowserStart": "Waiting for browser to start",
72
- "reusingExistingBrowser": "Reusing existing browser instance",
73
- "startingBrowser": "Starting browser",
74
- "browserStarted": "Browser started successfully",
75
- "browserStartError": "Browser startup error: {{error}}"
37
+ [BROWSER_KEYS.closingError]: "Error during browser closing: {{error}}",
38
+ // 额外的浏览器相关键 (Additional browser related keys)
39
+ [BROWSER_KEYS.waiting]: "Browser is starting, waiting...",
40
+ [BROWSER_KEYS.startupSuccess]: "Browser started successfully",
41
+ [BROWSER_KEYS.navigating]: "Navigating to URL: {{url}}",
42
+ [BROWSER_KEYS.scrolling]: "Auto-scrolling page...",
43
+ [BROWSER_KEYS.scrollCompleted]: "Auto-scroll completed",
44
+ [BROWSER_KEYS.contentTruncated]: "Content too large, truncating...",
45
+ [BROWSER_KEYS.pageClosed]: "Page closed",
46
+ [BROWSER_KEYS.fetchError]: "Error in browser fetch: {{error}}",
47
+ [BROWSER_KEYS.highMemory]: "High memory usage detected: {{usage}}MB",
48
+ [BROWSER_KEYS.closingDueToMemory]: "Closing browser due to high memory usage",
49
+ [BROWSER_KEYS.forcingGC]: "Forcing garbage collection",
50
+ [BROWSER_KEYS.memoryCheckError]: "Error checking memory usage: {{error}}",
51
+ [BROWSER_KEYS.usingCookies]: "Using cookies for domain: {{domain}}",
52
+ [BROWSER_KEYS.usingProxy]: "Using proxy: {{proxy}}",
53
+ // Cloudflare 相关 (Cloudflare related)
54
+ [BROWSER_KEYS.checkingCloudflare]: "Checking for Cloudflare protection",
55
+ [BROWSER_KEYS.cloudflareDetected]: "Cloudflare protection detected",
56
+ [BROWSER_KEYS.simulatingHuman]: "Simulating human interaction to bypass Cloudflare",
57
+ [BROWSER_KEYS.simulatingHumanError]: "Error simulating human interaction: {{error}}",
58
+ [BROWSER_KEYS.stillOnCloudflare]: "Still on Cloudflare page after bypass attempt",
59
+ [BROWSER_KEYS.bypassFailed]: "Cloudflare bypass failed",
60
+ [BROWSER_KEYS.cloudflareError]: "Cloudflare error: {{error}}",
61
+ [BROWSER_KEYS.continuingWithoutBypass]: "Continuing without Cloudflare bypass",
62
+ [BROWSER_KEYS.unableToBypassCloudflare]: "Unable to bypass Cloudflare protection",
63
+ // 获取和重试相关 (Fetch and retry related)
64
+ [BROWSER_KEYS.fetchingWithRetry]: "Fetching with retry: attempt {{attempt}} of {{maxAttempts}}",
65
+ [BROWSER_KEYS.memoryUsage]: "Current memory usage: {{usage}}MB",
66
+ [BROWSER_KEYS.memoryTooHigh]: "Memory usage too high: {{usage}}MB",
67
+ [BROWSER_KEYS.contentTooLarge]: "Content too large: {{size}} bytes",
68
+ [BROWSER_KEYS.failedToParseJSON]: "Failed to parse JSON: {{error}}",
69
+ [BROWSER_KEYS.startingBrowserFetchForMarkdown]: "Starting browser fetch for Markdown",
70
+ [BROWSER_KEYS.errorInBrowserFetchForMarkdown]: "Error in browser fetch for Markdown: {{error}}",
71
+ [BROWSER_KEYS.fetchRequest]: "Fetch request: {{url}}",
72
+ [BROWSER_KEYS.usingStoredCookies]: "Using stored cookies for domain: {{domain}}",
73
+ [BROWSER_KEYS.closingInstance]: "Closing browser instance",
74
+ [BROWSER_KEYS.fetchErrorWithAttempt]: "Fetch error (attempt {{attempt}}): {{error}}",
75
+ [BROWSER_KEYS.retryingAfterDelay]: "Retrying after {{delay}}ms delay",
76
+ // 浏览器启动相关 (Browser startup related)
77
+ [BROWSER_KEYS.browserStartupSuccess]: "Browser startup successful",
78
+ [BROWSER_KEYS.browserStartupFailed]: "Browser startup failed: {{error}}",
79
+ [BROWSER_KEYS.usingCustomChromePath]: "Using custom Chrome path: {{path}}",
80
+ [BROWSER_KEYS.browserDisconnected]: "Browser disconnected",
81
+ [BROWSER_KEYS.waitingForBrowserStart]: "Waiting for browser to start...",
82
+ [BROWSER_KEYS.reusingExistingBrowser]: "Reusing existing browser instance",
83
+ [BROWSER_KEYS.startingBrowser]: "Starting browser...",
84
+ [BROWSER_KEYS.browserStarted]: "Browser started",
85
+ [BROWSER_KEYS.browserStartError]: "Browser start error: {{error}}"
76
86
  };
@@ -3,38 +3,62 @@
3
3
  * Co-Author: AI Assistant (Claude)
4
4
  * Description: This code was collaboratively developed by Martin and AI Assistant.
5
5
  */
6
+ import { CLIENT_KEYS } from '../../keys/client.js';
6
7
  // 客户端相关消息 (Client related messages)
7
- export const client = {
8
- connecting: "Connecting to MCP server...",
9
- connected: "Connected to MCP server",
10
- disconnecting: "Disconnecting from MCP server...",
11
- disconnected: "Disconnected from MCP server",
12
- error: "Client error: {{error}}",
13
- callTool: "Calling tool: {{tool}}",
14
- callToolSuccess: "Tool call successful: {{tool}}",
15
- callToolError: "Tool call failed: {{tool}}, error: {{error}}",
16
- statusCodeDetected: "HTTP status code detected: {{code}}",
17
- usageInfo: "Usage: node client.js <method> <params_json> [proxy]",
18
- exampleUsage: "Example: node client.js fetch_html '{\"url\":\"https://example.com\",\"debug\":true}'",
19
- invalidJson: "Invalid JSON parameters",
20
- usingCommandLineProxy: "Using command line proxy: {{proxy}}",
21
- invalidProxyFormat: "Invalid proxy format: {{proxy}}",
22
- usingEnvProxy: "Using environment variable proxy: {{proxy}}",
23
- usingShellProxy: "Using shell proxy: {{proxy}}",
24
- noShellProxy: "No shell proxy found",
25
- systemProxyDisabled: "System proxy detection disabled",
26
- usingSystemProxy: "Using system proxy: {{proxy}}",
27
- noSystemProxy: "No system proxy found",
28
- requestFailed: "Request failed: {{error}}",
29
- fatalError: "Fatal error: {{error}}",
30
- startingServer: "Starting server at path: {{path}}",
31
- fetchingUrl: "Fetching URL: {{url}}",
32
- usingMode: "Using {{mode}} mode for URL: {{url}}",
33
- fetchFailed: "Fetch failed: {{error}}",
34
- fetchSuccess: "Fetch successful, content length: {{length}} bytes",
35
- browserModeNeeded: "Browser mode needed for URL: {{url}}",
36
- retryingWithBrowser: "Retrying with browser mode for URL: {{url}}",
37
- browserModeFetchFailed: "Browser mode fetch failed: {{error}}",
38
- browserModeFetchSuccess: "Browser mode fetch successful, content length: {{length}} bytes",
39
- serverClosed: "Server closed"
8
+ export default {
9
+ // 连接相关 (Connection related)
10
+ [CLIENT_KEYS.connecting]: 'Connecting to MCP server...',
11
+ [CLIENT_KEYS.connected]: 'Connected to MCP server',
12
+ [CLIENT_KEYS.connectionFailed]: 'Failed to connect to MCP server: {{error}}',
13
+ [CLIENT_KEYS.disconnected]: 'Disconnected from MCP server',
14
+ [CLIENT_KEYS.reconnecting]: 'Reconnecting to MCP server...',
15
+ // 错误相关 (Error related)
16
+ [CLIENT_KEYS.clientError]: 'Client error: {{error}}',
17
+ [CLIENT_KEYS.transportError]: 'Transport error: {{error}}',
18
+ [CLIENT_KEYS.requestError]: 'Request error: {{error}}',
19
+ [CLIENT_KEYS.fetchError]: 'Fetch error: {{error}}',
20
+ // 请求相关 (Request related)
21
+ [CLIENT_KEYS.requestStarted]: 'Request started: {{id}}',
22
+ [CLIENT_KEYS.requestCompleted]: 'Request completed: {{id}}',
23
+ [CLIENT_KEYS.requestCancelled]: 'Request cancelled: {{id}}',
24
+ // 内容相关 (Content related)
25
+ [CLIENT_KEYS.fetchingHtml]: 'Fetching HTML from {{url}}',
26
+ [CLIENT_KEYS.fetchingJson]: 'Fetching JSON from {{url}}',
27
+ [CLIENT_KEYS.fetchingText]: 'Fetching text from {{url}}',
28
+ [CLIENT_KEYS.fetchingMarkdown]: 'Fetching Markdown from {{url}}',
29
+ [CLIENT_KEYS.fetchSuccessful]: 'Fetch successful',
30
+ [CLIENT_KEYS.contentLength]: 'Content length: {{length}} bytes',
31
+ // 调试相关 (Debug related)
32
+ [CLIENT_KEYS.debugMode]: 'Debug mode: {{enabled}}',
33
+ [CLIENT_KEYS.debugInfo]: 'Debug info: {{info}}',
34
+ // 原有键 (Original keys)
35
+ [CLIENT_KEYS.error]: 'Error: {{error}}',
36
+ [CLIENT_KEYS.callTool]: 'Calling tool: {{name}}',
37
+ [CLIENT_KEYS.callToolSuccess]: 'Tool call successful: {{name}}',
38
+ [CLIENT_KEYS.callToolError]: 'Tool call error: {{name}} - {{error}}',
39
+ [CLIENT_KEYS.statusCodeDetected]: 'Status code detected: {{code}}',
40
+ [CLIENT_KEYS.usageInfo]: 'Usage info: {{info}}',
41
+ [CLIENT_KEYS.exampleUsage]: 'Example usage: {{example}}',
42
+ [CLIENT_KEYS.invalidJson]: 'Invalid JSON: {{error}}',
43
+ [CLIENT_KEYS.usingCommandLineProxy]: 'Using command line proxy: {{proxy}}',
44
+ [CLIENT_KEYS.invalidProxyFormat]: 'Invalid proxy format: {{proxy}}',
45
+ [CLIENT_KEYS.usingEnvProxy]: 'Using environment proxy: {{proxy}}',
46
+ [CLIENT_KEYS.usingShellProxy]: 'Using shell proxy: {{proxy}}',
47
+ [CLIENT_KEYS.noShellProxy]: 'No shell proxy found',
48
+ [CLIENT_KEYS.systemProxyDisabled]: 'System proxy disabled',
49
+ [CLIENT_KEYS.usingSystemProxy]: 'Using system proxy: {{proxy}}',
50
+ [CLIENT_KEYS.noSystemProxy]: 'No system proxy found',
51
+ [CLIENT_KEYS.requestFailed]: 'Request failed: {{error}}',
52
+ [CLIENT_KEYS.fatalError]: 'Fatal error: {{error}}',
53
+ [CLIENT_KEYS.startingServer]: 'Starting server...',
54
+ [CLIENT_KEYS.fetchingUrl]: 'Fetching URL: {{url}}',
55
+ [CLIENT_KEYS.usingMode]: 'Using {{mode}} mode',
56
+ [CLIENT_KEYS.fetchFailed]: 'Fetch failed: {{error}}',
57
+ [CLIENT_KEYS.fetchSuccess]: 'Fetch successful',
58
+ [CLIENT_KEYS.browserModeNeeded]: 'Browser mode needed for: {{url}}',
59
+ [CLIENT_KEYS.retryingWithBrowser]: 'Retrying with browser mode',
60
+ [CLIENT_KEYS.browserModeFetchFailed]: 'Browser mode fetch failed: {{error}}',
61
+ [CLIENT_KEYS.browserModeFetchSuccess]: 'Browser mode fetch successful',
62
+ [CLIENT_KEYS.serverClosed]: 'Server closed',
63
+ [CLIENT_KEYS.proxySet]: 'Proxy set: {{proxy}}'
40
64
  };
@@ -3,16 +3,40 @@
3
3
  * Co-Author: AI Assistant (Claude)
4
4
  * Description: This code was collaboratively developed by Martin and AI Assistant.
5
5
  */
6
- // 通用错误消息 (Common error messages)
7
- export const errors = {
8
- missingUrl: "Missing required parameter: url",
9
- invalidUrl: "Invalid URL: {{url}}",
10
- timeout: "Request timed out after {{timeout}}ms",
11
- networkError: "Network error: {{error}}",
12
- browserError: "Browser error: {{error}}",
13
- unexpectedError: "Unexpected error: {{error}}",
14
- forbidden: "Reason: Access forbidden (403 Forbidden)",
15
- cloudflareProtection: "Reason: Cloudflare protection",
16
- captchaRequired: "Reason: CAPTCHA required",
17
- connectionProblem: "Reason: Connection problem"
6
+ import { ERROR_KEYS } from '../../keys/errors.js';
7
+ export default {
8
+ // 通用错误日志 (Generic error logging)
9
+ [ERROR_KEYS.occurred]: 'Error occurred: type={{type}}, message={{message}}',
10
+ // 参数错误 (Parameter errors)
11
+ [ERROR_KEYS.missingRequiredParam]: 'Missing required parameter: {{param}}',
12
+ [ERROR_KEYS.invalidUrl]: 'Invalid URL: {{url}}',
13
+ // 请求错误 (Request errors)
14
+ [ERROR_KEYS.requestTimeout]: 'Request timed out after {{timeout}}ms',
15
+ [ERROR_KEYS.maxRedirectsExceeded]: 'Maximum redirects exceeded ({{max}})',
16
+ [ERROR_KEYS.requestFailed]: 'Request failed with status {{status}}: {{message}}',
17
+ [ERROR_KEYS.networkError]: 'Network error: {{message}}',
18
+ // 响应错误 (Response errors)
19
+ [ERROR_KEYS.invalidResponse]: 'Invalid response: {{message}}',
20
+ [ERROR_KEYS.invalidContentType]: 'Invalid content type: {{contentType}}',
21
+ [ERROR_KEYS.invalidJson]: 'Invalid JSON response',
22
+ // 浏览器错误 (Browser errors)
23
+ [ERROR_KEYS.browserInitFailed]: 'Browser initialization failed: {{message}}',
24
+ [ERROR_KEYS.pageLoadFailed]: 'Page load failed: {{message}}',
25
+ // 访问限制错误 (Access restriction errors)
26
+ [ERROR_KEYS.forbidden]: 'Access forbidden (403)',
27
+ [ERROR_KEYS.cloudflareProtection]: 'Cloudflare protection detected',
28
+ [ERROR_KEYS.captchaRequired]: 'CAPTCHA verification required',
29
+ // 连接错误 (Connection errors)
30
+ [ERROR_KEYS.timeout]: 'Connection timed out after {{timeout}}',
31
+ [ERROR_KEYS.connectionProblem]: 'Connection problem detected',
32
+ // 通用错误 (Generic errors)
33
+ [ERROR_KEYS.unknownError]: 'Unknown error: {{message}}',
34
+ // 错误类型键 (Error type keys)
35
+ [ERROR_KEYS.network_error]: 'Network error: {{error}}',
36
+ [ERROR_KEYS.access_denied_error]: 'Access denied: {{error}}',
37
+ [ERROR_KEYS.timeout_error]: 'Timeout error: {{error}}',
38
+ [ERROR_KEYS.parse_error]: 'Parse error: {{error}}',
39
+ [ERROR_KEYS.validation_error]: 'Validation error: {{error}}',
40
+ [ERROR_KEYS.browser_error]: 'Browser error: {{error}}',
41
+ [ERROR_KEYS.unknown_error]: 'Unknown error: {{error}}'
18
42
  };
@@ -0,0 +1,38 @@
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 { FACTORY_KEYS } from '../../keys/factory.js';
7
+ export default {
8
+ // 日志消息 (Log messages)
9
+ [FACTORY_KEYS.creating_fetcher]: 'Creating fetcher of type {{type}}',
10
+ [FACTORY_KEYS.fetcher_created]: '{{type}} fetcher created successfully',
11
+ [FACTORY_KEYS.fetcher_creation_failed]: 'Failed to create {{type}} fetcher: {{error}}',
12
+ [FACTORY_KEYS.invalid_fetcher_type]: 'Invalid fetcher type: {{type}}',
13
+ [FACTORY_KEYS.browser_mode_enabled]: 'Browser mode enabled',
14
+ [FACTORY_KEYS.browser_mode_disabled]: 'Browser mode disabled',
15
+ [FACTORY_KEYS.using_default_mode]: 'Using default mode: {{mode}}',
16
+ [FACTORY_KEYS.initializing]: 'Initializing fetcher factory',
17
+ [FACTORY_KEYS.initialization_complete]: 'Fetcher factory initialization complete',
18
+ [FACTORY_KEYS.initialization_failed]: 'Fetcher factory initialization failed: {{error}}',
19
+ [FACTORY_KEYS.auto_detecting_mode]: 'Auto detecting mode',
20
+ [FACTORY_KEYS.using_browser_mode]: 'Using browser mode',
21
+ [FACTORY_KEYS.using_node_mode]: 'Using Node mode',
22
+ [FACTORY_KEYS.defaultingToNodeMode]: 'Defaulting to Node mode',
23
+ // 为了向后兼容,保留旧的键 (For backward compatibility, keep the old keys)
24
+ creating_fetcher: 'Creating fetcher of type {{type}}',
25
+ fetcher_created: '{{type}} fetcher created successfully',
26
+ fetcher_creation_failed: 'Failed to create {{type}} fetcher: {{error}}',
27
+ invalid_fetcher_type: 'Invalid fetcher type: {{type}}',
28
+ browser_mode_enabled: 'Browser mode enabled',
29
+ browser_mode_disabled: 'Browser mode disabled',
30
+ using_default_mode: 'Using default mode: {{mode}}',
31
+ initializing: 'Initializing fetcher factory',
32
+ initialization_complete: 'Fetcher factory initialization complete',
33
+ initialization_failed: 'Fetcher factory initialization failed: {{error}}',
34
+ auto_detecting_mode: 'Auto detecting mode',
35
+ using_browser_mode: 'Using browser mode',
36
+ using_node_mode: 'Using Node mode',
37
+ defaulting_to_node_mode: 'Defaulting to Node mode'
38
+ };
@@ -3,9 +3,9 @@
3
3
  * Co-Author: AI Assistant (Claude)
4
4
  * Description: This code was collaboratively developed by Martin and AI Assistant.
5
5
  */
6
- import { FETCHER_KEYS } from '../../keys.js';
6
+ import { FETCHER_KEYS } from '../../keys/fetcher.js';
7
7
  // 获取器相关消息 (Fetcher related messages)
8
- export const fetcher = {
8
+ export default {
9
9
  [FETCHER_KEYS.addingDelay]: "Adding random delay",
10
10
  [FETCHER_KEYS.delayCompleted]: "Delay completed after {{delay}}ms",
11
11
  [FETCHER_KEYS.usingProxy]: "Using proxy: {{proxy}}",
@@ -14,6 +14,8 @@ export const fetcher = {
14
14
  [FETCHER_KEYS.notUsingProxy]: "Not using any proxy",
15
15
  [FETCHER_KEYS.finalProxyUsed]: "Final proxy used: {{proxy}}",
16
16
  [FETCHER_KEYS.noProxy]: "No proxy will be used",
17
+ [FETCHER_KEYS.foundNoProxy]: "Found no proxy: {{noProxy}}",
18
+ [FETCHER_KEYS.systemProxyDisabled]: "System proxy disabled",
17
19
  [FETCHER_KEYS.fetchingUrl]: "Fetching URL: {{url}} (Redirect: {{redirect}})",
18
20
  [FETCHER_KEYS.usingUserAgent]: "Using User-Agent: {{userAgent}}",
19
21
  [FETCHER_KEYS.usingHttpsProxy]: "Using HTTPS proxy",
@@ -35,6 +37,10 @@ export const fetcher = {
35
37
  [FETCHER_KEYS.fetchFailed]: "Failed to fetch: {{error}}",
36
38
  [FETCHER_KEYS.tooManyRedirects]: "Too many redirects ({{redirects}})",
37
39
  [FETCHER_KEYS.startingHtmlFetch]: "Starting HTML fetch",
40
+ [FETCHER_KEYS.fetchingHtml]: "Fetching HTML",
41
+ [FETCHER_KEYS.fetchingJson]: "Fetching JSON",
42
+ [FETCHER_KEYS.fetchingTxt]: "Fetching text",
43
+ [FETCHER_KEYS.fetchingMarkdown]: "Fetching Markdown",
38
44
  [FETCHER_KEYS.readingText]: "Reading text content",
39
45
  [FETCHER_KEYS.htmlContentLength]: "HTML content length: {{length}} bytes",
40
46
  [FETCHER_KEYS.startingJsonFetch]: "Starting JSON fetch",
@@ -3,20 +3,22 @@
3
3
  * Co-Author: AI Assistant (Claude)
4
4
  * Description: This code was collaboratively developed by Martin and AI Assistant.
5
5
  */
6
- import { server } from './server.js';
7
- import { client } from './client.js';
8
- import { fetcher } from './fetcher.js';
9
- import { browser } from './browser.js';
10
- import { node } from './node.js';
11
- import { tools } from './tools.js';
12
- import { errors } from './errors.js';
13
- import { resources } from './resources.js';
6
+ import server from './server.js';
7
+ import client from './client.js';
8
+ import fetcher from './fetcher.js';
9
+ import factory from './factory.js';
10
+ import browser from './browser.js';
11
+ import node from './node.js';
12
+ import tools from './tools.js';
13
+ import errors from './errors.js';
14
+ import resources from './resources.js';
14
15
  import prompts from './prompts.js';
15
16
  // 英文翻译资源 (English translation resources)
16
17
  export const enTranslation = {
17
18
  server,
18
19
  client,
19
20
  fetcher,
21
+ factory,
20
22
  browser,
21
23
  node,
22
24
  tools,
@@ -3,40 +3,62 @@
3
3
  * Co-Author: AI Assistant (Claude)
4
4
  * Description: This code was collaboratively developed by Martin and AI Assistant.
5
5
  */
6
+ import { NODE_KEYS } from '../../keys/node.js';
6
7
  // Node获取器相关消息 (Node fetcher related messages)
7
- export const node = {
8
- addingDelay: "Adding random delay...",
9
- noProxy: "No proxy will be used",
10
- usingProxy: "Using proxy: {{proxy}}",
11
- usingHttpsProxy: "Using HTTPS proxy agent",
12
- usingHttpProxy: "Using HTTP proxy agent",
13
- usingUserAgent: "Using User-Agent: {{userAgent}}",
14
- requestDetails: "Request details: URL={{url}}, Method={{method}}, Proxy={{proxy}}",
15
- requestOptions: "Request options: {{options}}",
16
- startingFetch: "Starting fetch request...",
17
- fetchingUrl: "Fetching URL: {{url}}",
18
- responseStatus: "Response status: {{status}} {{statusText}}",
19
- redirectingTo: "Redirecting to: {{location}}",
20
- constructedFullRedirectUrl: "Constructed full redirect URL: {{redirectUrl}}",
21
- requestSuccess: "Request successful",
22
- errorResponse: "Error response: {{status}} {{statusText}}",
23
- errorResponseBody: "Error response body (first 200 chars): {{body}}",
24
- errorReadingBody: "Failed to read error response body: {{error}}",
25
- fetchError: "Fetch error: {{error}}",
26
- requestAborted: "Request aborted after {{duration}}ms",
27
- networkError: "Network error ({{code}}), might retry with browser mode",
28
- tooManyRedirects: "Too many redirects ({{redirects}})",
29
- startingHtmlFetch: "Starting HTML fetch",
30
- readingText: "Got response, reading text",
31
- htmlContentLength: "HTML content length: {{length}} bytes",
32
- htmlFetchError: "HTML fetch error: {{error}}",
33
- startingJsonFetch: "Starting JSON fetch",
34
- parsingJson: "Got response, parsing JSON",
35
- jsonParsed: "JSON parsed successfully",
36
- jsonParseError: "JSON parse error: {{error}}",
37
- jsonFetchError: "JSON fetch error: {{error}}",
38
- startingTxtFetch: "Starting TXT fetch",
39
- startingMarkdownFetch: "Starting Markdown fetch",
40
- creatingTurndown: "Creating TurndownService instance",
41
- convertingToMarkdown: "Converting HTML to Markdown"
8
+ export default {
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',
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}}',
29
+ // 请求相关 (Request related)
30
+ [NODE_KEYS.usingUserAgent]: "Using User-Agent: {{userAgent}}",
31
+ [NODE_KEYS.requestDetails]: "Request details: method={{method}}, URL={{url}}",
32
+ [NODE_KEYS.requestOptions]: "Request options: {{options}}",
33
+ [NODE_KEYS.startingFetch]: "Starting fetch: {{url}}",
34
+ [NODE_KEYS.fetchingUrl]: "Fetching URL: {{url}}",
35
+ // 响应相关 (Response related)
36
+ [NODE_KEYS.responseStatus]: "Response status: {{status}}",
37
+ [NODE_KEYS.redirectingTo]: "Redirecting to: {{url}}",
38
+ [NODE_KEYS.constructedFullRedirectUrl]: "Constructed full redirect URL: {{url}}",
39
+ [NODE_KEYS.requestSuccess]: "Request successful",
40
+ // 错误相关 (Error related)
41
+ [NODE_KEYS.errorResponse]: "Error response: {{status}}",
42
+ [NODE_KEYS.errorResponseBody]: "Error response body: {{body}}",
43
+ [NODE_KEYS.errorReadingBody]: "Error reading response body: {{error}}",
44
+ [NODE_KEYS.fetchError]: "Fetch error: {{error}}",
45
+ [NODE_KEYS.requestAborted]: "Request aborted",
46
+ [NODE_KEYS.networkError]: "Network error: {{code}}",
47
+ [NODE_KEYS.tooManyRedirects]: "Too many redirects",
48
+ // 内容类型相关 (Content type related)
49
+ [NODE_KEYS.startingHtmlFetch]: 'Starting HTML fetch',
50
+ [NODE_KEYS.readingText]: 'Reading text content',
51
+ [NODE_KEYS.htmlContentLength]: 'HTML content length: {{length}} bytes',
52
+ [NODE_KEYS.htmlFetchError]: 'Error fetching HTML: {{error}}',
53
+ [NODE_KEYS.startingJsonFetch]: 'Starting JSON fetch',
54
+ [NODE_KEYS.parsingJson]: 'Parsing JSON',
55
+ [NODE_KEYS.jsonParsed]: 'JSON parsed successfully',
56
+ [NODE_KEYS.jsonParseError]: 'JSON parse error: {{error}}',
57
+ [NODE_KEYS.jsonFetchError]: 'Error fetching JSON: {{error}}',
58
+ [NODE_KEYS.startingTxtFetch]: 'Starting plain text fetch',
59
+ [NODE_KEYS.textContentLength]: 'Text content length: {{length}} bytes',
60
+ [NODE_KEYS.startingMarkdownFetch]: 'Starting Markdown fetch',
61
+ [NODE_KEYS.creatingTurndown]: 'Creating Turndown service',
62
+ [NODE_KEYS.convertingToMarkdown]: 'Converting HTML to Markdown',
63
+ [NODE_KEYS.markdownContentLength]: 'Markdown content length: {{length}} bytes'
42
64
  };