@lmcc-dev/mult-fetch-mcp-server 1.1.0 → 1.2.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.
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 +50 -35
  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 +2 -2
  58. package/dist/src/lib/server/fetcher.js +13 -34
  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
@@ -4,132 +4,501 @@
4
4
  * Description: This code was collaboratively developed by Martin and AI Assistant.
5
5
  */
6
6
  /**
7
- * 共享的国际化键结构 (Shared internationalization key structure)
8
- * 用于避免在不同语言文件中重复相同的键结构 (Used to avoid repeating the same key structure in different language files)
7
+ * 创建键名生成器 - 用于生成特定模块的键名 (Create key name generator - for generating key names for specific modules)
8
+ * @param module 模块名称 (Module name)
9
+ * @returns 键名生成函数 (Key name generator function)
9
10
  */
11
+ const createKeyGenerator = (module) => (key) => `${module}.${key}`;
10
12
  /**
11
- * 获取器相关键 (Fetcher related keys)
13
+ * 创建资源操作键 - 用于生成资源操作相关的键 (Create resource operation keys - for generating resource operation related keys)
14
+ * @param module 模块名称 (Module name)
15
+ * @param operation 操作名称 (Operation name)
16
+ * @returns 资源操作键对象 (Resource operation keys object)
12
17
  */
13
- export const FETCHER_KEYS = {
14
- addingDelay: 'fetcher.addingDelay',
15
- delayCompleted: 'fetcher.delayCompleted',
16
- usingProxy: 'fetcher.usingProxy',
17
- usingSpecifiedProxy: 'fetcher.usingSpecifiedProxy',
18
- attemptingToUseSystemProxy: 'fetcher.attemptingToUseSystemProxy',
19
- notUsingProxy: 'fetcher.notUsingProxy',
20
- finalProxyUsed: 'fetcher.finalProxyUsed',
21
- noProxy: 'fetcher.noProxy',
22
- fetchingUrl: 'fetcher.fetchingUrl',
23
- usingUserAgent: 'fetcher.usingUserAgent',
24
- usingHttpsProxy: 'fetcher.usingHttpsProxy',
25
- usingHttpProxy: 'fetcher.usingHttpProxy',
26
- requestOptions: 'fetcher.requestOptions',
27
- startingFetch: 'fetcher.startingFetch',
28
- fetchCompleted: 'fetcher.fetchCompleted',
29
- responseStatus: 'fetcher.responseStatus',
30
- redirectingTo: 'fetcher.redirectingTo',
31
- constructedFullRedirectUrl: 'fetcher.constructedFullRedirectUrl',
32
- requestSuccess: 'fetcher.requestSuccess',
33
- errorResponse: 'fetcher.errorResponse',
34
- errorResponseBody: 'fetcher.errorResponseBody',
35
- errorReadingBody: 'fetcher.errorReadingBody',
36
- fetchError: 'fetcher.fetchError',
37
- requestAborted: 'fetcher.requestAborted',
38
- networkError: 'fetcher.networkError',
39
- requestTimeout: 'fetcher.requestTimeout',
40
- fetchFailed: 'fetcher.fetchFailed',
41
- tooManyRedirects: 'fetcher.tooManyRedirects',
42
- startingHtmlFetch: 'fetcher.startingHtmlFetch',
43
- readingText: 'fetcher.readingText',
44
- htmlContentLength: 'fetcher.htmlContentLength',
45
- startingJsonFetch: 'fetcher.startingJsonFetch',
46
- parsingJson: 'fetcher.parsingJson',
47
- jsonParsed: 'fetcher.jsonParsed',
48
- jsonParseError: 'fetcher.jsonParseError',
49
- startingTxtFetch: 'fetcher.startingTxtFetch',
50
- textContentLength: 'fetcher.textContentLength',
51
- startingMarkdownFetch: 'fetcher.startingMarkdownFetch',
52
- creatingTurndown: 'fetcher.creatingTurndown',
53
- convertingToMarkdown: 'fetcher.convertingToMarkdown',
54
- markdownContentLength: 'fetcher.markdownContentLength',
55
- checkingProxyEnv: 'fetcher.checkingProxyEnv',
56
- envVarValue: 'fetcher.envVarValue',
57
- foundSystemProxy: 'fetcher.foundSystemProxy',
58
- systemCommandProxySettings: 'fetcher.systemCommandProxySettings',
59
- foundProxyFromCommand: 'fetcher.foundProxyFromCommand',
60
- errorGettingProxyFromCommand: 'fetcher.errorGettingProxyFromCommand',
61
- checkingSystemEnvVars: 'fetcher.checkingSystemEnvVars',
62
- windowsEnvVars: 'fetcher.windowsEnvVars',
63
- foundWindowsEnvProxy: 'fetcher.foundWindowsEnvProxy',
64
- errorGettingWindowsEnvVars: 'fetcher.errorGettingWindowsEnvVars',
65
- unixEnvVars: 'fetcher.unixEnvVars',
66
- foundUnixEnvProxy: 'fetcher.foundUnixEnvProxy',
67
- errorGettingUnixEnvVars: 'fetcher.errorGettingUnixEnvVars',
68
- errorGettingSystemEnvVars: 'fetcher.errorGettingSystemEnvVars',
69
- noSystemProxyFound: 'fetcher.noSystemProxyFound',
70
- notSet: 'fetcher.notSet',
71
- debug: 'fetcher.debug',
72
- none: 'fetcher.none'
18
+ const createResourceOperationKeys = (module, operation) => {
19
+ const keyGen = createKeyGenerator(`${module}.${operation}`);
20
+ return {
21
+ request: keyGen('request'),
22
+ success: keyGen('success'),
23
+ error: keyGen('error'),
24
+ notFound: keyGen('notFound'),
25
+ duplicate: keyGen('duplicate')
26
+ };
73
27
  };
74
28
  /**
75
- * 浏览器相关键 (Browser related keys)
29
+ * 创建资源键 - 用于生成资源相关的键 (Create resource keys - for generating resource related keys)
30
+ * @param module 模块名称 (Module name)
31
+ * @returns 资源键对象 (Resource keys object)
76
32
  */
77
- export const BROWSER_KEYS = {
78
- closing: 'browser.closing',
79
- closed: 'browser.closed',
80
- starting: 'browser.starting',
81
- startingFailed: 'browser.startingFailed',
82
- alreadyRunning: 'browser.alreadyRunning',
83
- creatingPage: 'browser.creatingPage',
84
- navigatingTo: 'browser.navigatingTo',
85
- waitingForSelector: 'browser.waitingForSelector',
86
- waitingForTimeout: 'browser.waitingForTimeout',
87
- scrollingToBottom: 'browser.scrollingToBottom',
88
- gettingContent: 'browser.gettingContent',
89
- contentLength: 'browser.contentLength',
90
- savingCookies: 'browser.savingCookies',
91
- cookiesSaved: 'browser.cookiesSaved',
92
- loadingCookies: 'browser.loadingCookies',
93
- cookiesLoaded: 'browser.cookiesLoaded',
94
- noCookiesFound: 'browser.noCookiesFound',
95
- errorLoadingCookies: 'browser.errorLoadingCookies',
96
- errorSavingCookies: 'browser.errorSavingCookies',
97
- errorNavigating: 'browser.errorNavigating',
98
- errorGettingContent: 'browser.errorGettingContent',
99
- errorClosingBrowser: 'browser.errorClosingBrowser',
100
- errorCreatingPage: 'browser.errorCreatingPage'
33
+ const createResourceKeys = (module) => {
34
+ return {
35
+ list: createResourceOperationKeys(module, 'list'),
36
+ get: createResourceOperationKeys(module, 'get'),
37
+ create: createResourceOperationKeys(module, 'create'),
38
+ update: createResourceOperationKeys(module, 'update'),
39
+ delete: createResourceOperationKeys(module, 'delete')
40
+ };
101
41
  };
42
+ /**
43
+ * 获取器相关键 (Fetcher related keys)
44
+ */
45
+ export const FETCHER_KEYS = (() => {
46
+ const keyGen = createKeyGenerator('fetcher');
47
+ return {
48
+ // 延迟相关 (Delay related)
49
+ addingDelay: keyGen('addingDelay'),
50
+ delayCompleted: keyGen('delayCompleted'),
51
+ // 代理相关 (Proxy related)
52
+ usingProxy: keyGen('usingProxy'),
53
+ usingSpecifiedProxy: keyGen('usingSpecifiedProxy'),
54
+ attemptingToUseSystemProxy: keyGen('attemptingToUseSystemProxy'),
55
+ notUsingProxy: keyGen('notUsingProxy'),
56
+ finalProxyUsed: keyGen('finalProxyUsed'),
57
+ noProxy: keyGen('noProxy'),
58
+ usingHttpsProxy: keyGen('usingHttpsProxy'),
59
+ usingHttpProxy: keyGen('usingHttpProxy'),
60
+ // 请求相关 (Request related)
61
+ fetchingUrl: keyGen('fetchingUrl'),
62
+ usingUserAgent: keyGen('usingUserAgent'),
63
+ requestOptions: keyGen('requestOptions'),
64
+ startingFetch: keyGen('startingFetch'),
65
+ fetchCompleted: keyGen('fetchCompleted'),
66
+ // 响应相关 (Response related)
67
+ responseStatus: keyGen('responseStatus'),
68
+ redirectingTo: keyGen('redirectingTo'),
69
+ constructedFullRedirectUrl: keyGen('constructedFullRedirectUrl'),
70
+ requestSuccess: keyGen('requestSuccess'),
71
+ // 错误相关 (Error related)
72
+ errorResponse: keyGen('errorResponse'),
73
+ errorResponseBody: keyGen('errorResponseBody'),
74
+ errorReadingBody: keyGen('errorReadingBody'),
75
+ fetchError: keyGen('fetchError'),
76
+ requestAborted: keyGen('requestAborted'),
77
+ networkError: keyGen('networkError'),
78
+ requestTimeout: keyGen('requestTimeout'),
79
+ fetchFailed: keyGen('fetchFailed'),
80
+ tooManyRedirects: keyGen('tooManyRedirects'),
81
+ // 内容类型相关 (Content type related)
82
+ startingHtmlFetch: keyGen('startingHtmlFetch'),
83
+ readingText: keyGen('readingText'),
84
+ htmlContentLength: keyGen('htmlContentLength'),
85
+ startingJsonFetch: keyGen('startingJsonFetch'),
86
+ parsingJson: keyGen('parsingJson'),
87
+ jsonParsed: keyGen('jsonParsed'),
88
+ jsonParseError: keyGen('jsonParseError'),
89
+ startingTxtFetch: keyGen('startingTxtFetch'),
90
+ textContentLength: keyGen('textContentLength'),
91
+ startingMarkdownFetch: keyGen('startingMarkdownFetch'),
92
+ creatingTurndown: keyGen('creatingTurndown'),
93
+ convertingToMarkdown: keyGen('convertingToMarkdown'),
94
+ markdownContentLength: keyGen('markdownContentLength'),
95
+ // 系统代理相关 (System proxy related)
96
+ checkingProxyEnv: keyGen('checkingProxyEnv'),
97
+ envVarValue: keyGen('envVarValue'),
98
+ foundSystemProxy: keyGen('foundSystemProxy'),
99
+ systemCommandProxySettings: keyGen('systemCommandProxySettings'),
100
+ foundProxyFromCommand: keyGen('foundProxyFromCommand'),
101
+ errorGettingProxyFromCommand: keyGen('errorGettingProxyFromCommand'),
102
+ checkingSystemEnvVars: keyGen('checkingSystemEnvVars'),
103
+ windowsEnvVars: keyGen('windowsEnvVars'),
104
+ foundWindowsEnvProxy: keyGen('foundWindowsEnvProxy'),
105
+ errorGettingWindowsEnvVars: keyGen('errorGettingWindowsEnvVars'),
106
+ unixEnvVars: keyGen('unixEnvVars'),
107
+ foundUnixEnvProxy: keyGen('foundUnixEnvProxy'),
108
+ errorGettingUnixEnvVars: keyGen('errorGettingUnixEnvVars'),
109
+ errorGettingSystemEnvVars: keyGen('errorGettingSystemEnvVars'),
110
+ noSystemProxyFound: keyGen('noSystemProxyFound'),
111
+ // 通用 (General)
112
+ notSet: keyGen('notSet'),
113
+ debug: keyGen('debug'),
114
+ none: keyGen('none')
115
+ };
116
+ })();
117
+ /**
118
+ * 浏览器相关键 (Browser related keys)
119
+ */
120
+ export const BROWSER_KEYS = (() => {
121
+ const keyGen = createKeyGenerator('browser');
122
+ return {
123
+ // 浏览器生命周期 (Browser lifecycle)
124
+ closing: keyGen('closing'),
125
+ closed: keyGen('closed'),
126
+ starting: keyGen('starting'),
127
+ startingFailed: keyGen('startingFailed'),
128
+ alreadyRunning: keyGen('alreadyRunning'),
129
+ // 页面操作 (Page operations)
130
+ creatingPage: keyGen('creatingPage'),
131
+ navigatingTo: keyGen('navigatingTo'),
132
+ waitingForSelector: keyGen('waitingForSelector'),
133
+ waitingForTimeout: keyGen('waitingForTimeout'),
134
+ scrollingToBottom: keyGen('scrollingToBottom'),
135
+ gettingContent: keyGen('gettingContent'),
136
+ contentLength: keyGen('contentLength'),
137
+ // Cookie 相关 (Cookie related)
138
+ savingCookies: keyGen('savingCookies'),
139
+ cookiesSaved: keyGen('cookiesSaved'),
140
+ loadingCookies: keyGen('loadingCookies'),
141
+ cookiesLoaded: keyGen('cookiesLoaded'),
142
+ noCookiesFound: keyGen('noCookiesFound'),
143
+ // 错误相关 (Error related)
144
+ errorLoadingCookies: keyGen('errorLoadingCookies'),
145
+ errorSavingCookies: keyGen('errorSavingCookies'),
146
+ errorNavigating: keyGen('errorNavigating'),
147
+ errorGettingContent: keyGen('errorGettingContent'),
148
+ errorClosingBrowser: keyGen('errorClosingBrowser'),
149
+ errorCreatingPage: keyGen('errorCreatingPage'),
150
+ closingError: keyGen('closingError'),
151
+ // 额外的浏览器相关键 (Additional browser related keys)
152
+ waiting: keyGen('waiting'),
153
+ startupSuccess: keyGen('startupSuccess'),
154
+ navigating: keyGen('navigating'),
155
+ scrolling: keyGen('scrolling'),
156
+ scrollCompleted: keyGen('scrollCompleted'),
157
+ contentTruncated: keyGen('contentTruncated'),
158
+ pageClosed: keyGen('pageClosed'),
159
+ fetchError: keyGen('fetchError'),
160
+ highMemory: keyGen('highMemory'),
161
+ closingDueToMemory: keyGen('closingDueToMemory'),
162
+ forcingGC: keyGen('forcingGC'),
163
+ memoryCheckError: keyGen('memoryCheckError'),
164
+ usingCookies: keyGen('usingCookies'),
165
+ usingProxy: keyGen('usingProxy'),
166
+ // Cloudflare 相关 (Cloudflare related)
167
+ checkingCloudflare: keyGen('checkingCloudflare'),
168
+ cloudflareDetected: keyGen('cloudflareDetected'),
169
+ simulatingHuman: keyGen('simulatingHuman'),
170
+ simulatingHumanError: keyGen('simulatingHumanError'),
171
+ stillOnCloudflare: keyGen('stillOnCloudflare'),
172
+ bypassFailed: keyGen('bypassFailed'),
173
+ cloudflareError: keyGen('cloudflareError'),
174
+ continuingWithoutBypass: keyGen('continuingWithoutBypass'),
175
+ unableToBypassCloudflare: keyGen('unableToBypassCloudflare'),
176
+ // 获取和重试相关 (Fetch and retry related)
177
+ fetchingWithRetry: keyGen('fetchingWithRetry'),
178
+ memoryUsage: keyGen('memoryUsage'),
179
+ memoryTooHigh: keyGen('memoryTooHigh'),
180
+ contentTooLarge: keyGen('contentTooLarge'),
181
+ failedToParseJSON: keyGen('failedToParseJSON'),
182
+ startingBrowserFetchForMarkdown: keyGen('startingBrowserFetchForMarkdown'),
183
+ errorInBrowserFetchForMarkdown: keyGen('errorInBrowserFetchForMarkdown'),
184
+ fetchRequest: keyGen('fetchRequest'),
185
+ usingStoredCookies: keyGen('usingStoredCookies'),
186
+ closingInstance: keyGen('closingInstance'),
187
+ fetchErrorWithAttempt: keyGen('fetchErrorWithAttempt'),
188
+ retryingAfterDelay: keyGen('retryingAfterDelay'),
189
+ // 浏览器启动相关 (Browser startup related)
190
+ browserStartupSuccess: keyGen('browserStartupSuccess'),
191
+ browserStartupFailed: keyGen('browserStartupFailed'),
192
+ usingCustomChromePath: keyGen('usingCustomChromePath'),
193
+ browserDisconnected: keyGen('browserDisconnected'),
194
+ waitingForBrowserStart: keyGen('waitingForBrowserStart'),
195
+ reusingExistingBrowser: keyGen('reusingExistingBrowser'),
196
+ startingBrowser: keyGen('startingBrowser'),
197
+ browserStarted: keyGen('browserStarted'),
198
+ browserStartError: keyGen('browserStartError')
199
+ };
200
+ })();
102
201
  /**
103
202
  * 资源相关键 (Resources related keys)
104
203
  */
105
- export const RESOURCES_KEYS = {
106
- list: {
107
- request: 'resources.list.request',
108
- success: 'resources.list.success',
109
- error: 'resources.list.error'
110
- },
111
- get: {
112
- request: 'resources.get.request',
113
- success: 'resources.get.success',
114
- error: 'resources.get.error',
115
- notFound: 'resources.get.notFound'
116
- },
117
- create: {
118
- request: 'resources.create.request',
119
- success: 'resources.create.success',
120
- error: 'resources.create.error',
121
- duplicate: 'resources.create.duplicate'
122
- },
123
- update: {
124
- request: 'resources.update.request',
125
- success: 'resources.update.success',
126
- error: 'resources.update.error',
127
- notFound: 'resources.update.notFound'
128
- },
129
- delete: {
130
- request: 'resources.delete.request',
131
- success: 'resources.delete.success',
132
- error: 'resources.delete.error',
133
- notFound: 'resources.delete.notFound'
134
- }
135
- };
204
+ export const RESOURCES_KEYS = (() => {
205
+ const keyGen = createKeyGenerator('resources');
206
+ const resourceKeys = createResourceKeys('resources');
207
+ return {
208
+ ...resourceKeys,
209
+ // 额外的资源相关键 (Additional resource related keys)
210
+ fileReadError: keyGen('fileReadError'),
211
+ invalidUri: keyGen('invalidUri'),
212
+ notFound: keyGen('notFound'),
213
+ // 资源描述 (Resource descriptions)
214
+ readme: {
215
+ description: keyGen('readme.description')
216
+ },
217
+ package: {
218
+ description: keyGen('package.description')
219
+ },
220
+ index: {
221
+ description: keyGen('index.description')
222
+ },
223
+ client: {
224
+ description: keyGen('client.description')
225
+ },
226
+ // 资源模板描述 (Resource template descriptions)
227
+ sourceFile: {
228
+ name: keyGen('sourceFile.name'),
229
+ description: keyGen('sourceFile.description')
230
+ },
231
+ docFile: {
232
+ name: keyGen('docFile.name'),
233
+ description: keyGen('docFile.description')
234
+ },
235
+ filename: {
236
+ description: keyGen('filename.description')
237
+ }
238
+ };
239
+ })();
240
+ /**
241
+ * 服务器相关键 (Server related keys)
242
+ */
243
+ export const SERVER_KEYS = (() => {
244
+ const keyGen = createKeyGenerator('server');
245
+ return {
246
+ // 服务器状态相关 (Server status related)
247
+ starting: keyGen('starting'),
248
+ started: keyGen('started'),
249
+ stopping: keyGen('stopping'),
250
+ stopped: keyGen('stopped'),
251
+ error: keyGen('error'),
252
+ // 连接相关 (Connection related)
253
+ connecting: keyGen('connecting'),
254
+ connected: keyGen('connected'),
255
+ connectionError: keyGen('connectionError'),
256
+ disconnected: keyGen('disconnected'),
257
+ // 请求处理相关 (Request handling related)
258
+ requestReceived: keyGen('requestReceived'),
259
+ requestProcessed: keyGen('requestProcessed'),
260
+ requestError: keyGen('requestError'),
261
+ // 浏览器相关 (Browser related)
262
+ browser: {
263
+ initializing: keyGen('browser.initializing'),
264
+ initialized: keyGen('browser.initialized'),
265
+ error: keyGen('browser.error'),
266
+ closing: keyGen('browser.closing'),
267
+ closed: keyGen('browser.closed')
268
+ },
269
+ // 工具相关 (Tool related)
270
+ tool: {
271
+ requestReceived: keyGen('tool.requestReceived'),
272
+ requestProcessed: keyGen('tool.requestProcessed'),
273
+ requestError: keyGen('tool.requestError')
274
+ },
275
+ // 原有键 (Original keys)
276
+ receivedRequest: keyGen('receivedRequest'),
277
+ processingRequest: keyGen('processingRequest'),
278
+ requestCompleted: keyGen('requestCompleted'),
279
+ requestFailed: keyGen('requestFailed'),
280
+ receivedInterruptSignal: keyGen('receivedInterruptSignal'),
281
+ receivedTerminateSignal: keyGen('receivedTerminateSignal'),
282
+ uncaughtException: keyGen('uncaughtException'),
283
+ debug: keyGen('debug'),
284
+ listeningOn: keyGen('listeningOn'),
285
+ // 新增的翻译键 (New translation keys)
286
+ initializingBrowser: keyGen('initializingBrowser'),
287
+ closingBrowser: keyGen('closingBrowser'),
288
+ receivedToolRequest: keyGen('receivedToolRequest'),
289
+ processingToolRequestError: keyGen('processingToolRequestError'),
290
+ usingBrowserMode: keyGen('usingBrowserMode'),
291
+ usingAutoDetectMode: keyGen('usingAutoDetectMode'),
292
+ switchingToBrowserMode: keyGen('switchingToBrowserMode'),
293
+ fetchError: keyGen('fetchError')
294
+ };
295
+ })();
296
+ /**
297
+ * 客户端相关键 (Client related keys)
298
+ */
299
+ export const CLIENT_KEYS = (() => {
300
+ const keyGen = createKeyGenerator('client');
301
+ return {
302
+ connecting: keyGen('connecting'),
303
+ connected: keyGen('connected'),
304
+ disconnecting: keyGen('disconnecting'),
305
+ disconnected: keyGen('disconnected'),
306
+ error: keyGen('error'),
307
+ callTool: keyGen('callTool'),
308
+ callToolSuccess: keyGen('callToolSuccess'),
309
+ callToolError: keyGen('callToolError'),
310
+ statusCodeDetected: keyGen('statusCodeDetected'),
311
+ usageInfo: keyGen('usageInfo'),
312
+ exampleUsage: keyGen('exampleUsage'),
313
+ invalidJson: keyGen('invalidJson'),
314
+ usingCommandLineProxy: keyGen('usingCommandLineProxy'),
315
+ invalidProxyFormat: keyGen('invalidProxyFormat'),
316
+ usingEnvProxy: keyGen('usingEnvProxy'),
317
+ usingShellProxy: keyGen('usingShellProxy'),
318
+ noShellProxy: keyGen('noShellProxy'),
319
+ systemProxyDisabled: keyGen('systemProxyDisabled'),
320
+ usingSystemProxy: keyGen('usingSystemProxy'),
321
+ noSystemProxy: keyGen('noSystemProxy'),
322
+ requestFailed: keyGen('requestFailed'),
323
+ fatalError: keyGen('fatalError'),
324
+ startingServer: keyGen('startingServer'),
325
+ fetchingUrl: keyGen('fetchingUrl'),
326
+ usingMode: keyGen('usingMode'),
327
+ fetchFailed: keyGen('fetchFailed'),
328
+ fetchSuccess: keyGen('fetchSuccess'),
329
+ browserModeNeeded: keyGen('browserModeNeeded'),
330
+ retryingWithBrowser: keyGen('retryingWithBrowser'),
331
+ browserModeFetchFailed: keyGen('browserModeFetchFailed'),
332
+ browserModeFetchSuccess: keyGen('browserModeFetchSuccess'),
333
+ serverClosed: keyGen('serverClosed'),
334
+ proxySet: keyGen('proxySet')
335
+ };
336
+ })();
337
+ /**
338
+ * 错误相关键 (Error related keys)
339
+ */
340
+ export const ERROR_KEYS = (() => {
341
+ const keyGen = createKeyGenerator('error');
342
+ return {
343
+ unexpected: keyGen('unexpected'),
344
+ validation: keyGen('validation'),
345
+ notFound: keyGen('notFound'),
346
+ unauthorized: keyGen('unauthorized'),
347
+ forbidden: keyGen('forbidden'),
348
+ timeout: keyGen('timeout'),
349
+ // 通用错误消息 (Common error messages)
350
+ missingUrl: keyGen('missingUrl'),
351
+ invalidUrl: keyGen('invalidUrl'),
352
+ networkError: keyGen('networkError'),
353
+ browserError: keyGen('browserError'),
354
+ unexpectedError: keyGen('unexpectedError'),
355
+ cloudflareProtection: keyGen('cloudflareProtection'),
356
+ captchaRequired: keyGen('captchaRequired'),
357
+ connectionProblem: keyGen('connectionProblem')
358
+ };
359
+ })();
360
+ /**
361
+ * 工具相关键 (Tools related keys)
362
+ */
363
+ export const TOOLS_KEYS = (() => {
364
+ const keyGen = createKeyGenerator('tools');
365
+ return {
366
+ fetchHtml: {
367
+ description: keyGen('fetchHtml.description'),
368
+ error: keyGen('fetchHtml.error')
369
+ },
370
+ fetchJson: {
371
+ description: keyGen('fetchJson.description'),
372
+ error: keyGen('fetchJson.error'),
373
+ invalidJson: keyGen('fetchJson.invalidJson')
374
+ },
375
+ fetchTxt: {
376
+ description: keyGen('fetchTxt.description'),
377
+ error: keyGen('fetchTxt.error')
378
+ },
379
+ fetchMarkdown: {
380
+ description: keyGen('fetchMarkdown.description'),
381
+ error: keyGen('fetchMarkdown.error')
382
+ }
383
+ };
384
+ })();
385
+ /**
386
+ * 提示相关键 (Prompts related keys)
387
+ */
388
+ export const PROMPTS_KEYS = (() => {
389
+ const keyGen = createKeyGenerator('prompts');
390
+ return {
391
+ // 提示列表和获取 (Prompt list and get)
392
+ list: {
393
+ request: keyGen('list.request')
394
+ },
395
+ get: {
396
+ request: keyGen('get.request')
397
+ },
398
+ // 错误消息 (Error messages)
399
+ notFound: keyGen('notFound'),
400
+ missingRequiredArg: keyGen('missingRequiredArg'),
401
+ useBrowserValue: keyGen('useBrowserValue'),
402
+ // 通用提示 (Generic prompt)
403
+ generic: {
404
+ result: keyGen('generic.result'),
405
+ message: keyGen('generic.message'),
406
+ args: keyGen('generic.args')
407
+ },
408
+ // 是/否 (Yes/No)
409
+ yes: keyGen('yes'),
410
+ no: keyGen('no'),
411
+ // 提示描述和参数 (Prompt descriptions and parameters)
412
+ url: {
413
+ description: keyGen('url.description')
414
+ },
415
+ format: {
416
+ description: keyGen('format.description')
417
+ },
418
+ useBrowser: {
419
+ description: keyGen('useBrowser.description')
420
+ },
421
+ selector: {
422
+ description: keyGen('selector.description')
423
+ },
424
+ dataType: {
425
+ description: keyGen('dataType.description')
426
+ },
427
+ error: {
428
+ description: keyGen('error.description')
429
+ },
430
+ // 获取网站提示 (Fetch website prompt)
431
+ fetchWebsite: {
432
+ description: keyGen('fetchWebsite.description'),
433
+ result: keyGen('fetchWebsite.result'),
434
+ message: keyGen('fetchWebsite.message'),
435
+ response: keyGen('fetchWebsite.response'),
436
+ instruction: keyGen('fetchWebsite.instruction'),
437
+ formatInstruction: keyGen('fetchWebsite.formatInstruction'),
438
+ browserInstruction: keyGen('fetchWebsite.browserInstruction')
439
+ },
440
+ // 提取内容提示 (Extract content prompt)
441
+ extractContent: {
442
+ description: keyGen('extractContent.description'),
443
+ result: keyGen('extractContent.result'),
444
+ message: keyGen('extractContent.message'),
445
+ selectorInstruction: keyGen('extractContent.selectorInstruction'),
446
+ dataTypeInstruction: keyGen('extractContent.dataTypeInstruction')
447
+ },
448
+ // 调试获取提示 (Debug fetch prompt)
449
+ debugFetch: {
450
+ description: keyGen('debugFetch.description'),
451
+ result: keyGen('debugFetch.result'),
452
+ message: keyGen('debugFetch.message'),
453
+ errorDetails: keyGen('debugFetch.errorDetails'),
454
+ instruction: keyGen('debugFetch.instruction')
455
+ }
456
+ };
457
+ })();
458
+ /**
459
+ * 节点相关键 (Node related keys)
460
+ */
461
+ export const NODE_KEYS = (() => {
462
+ const keyGen = createKeyGenerator('node');
463
+ return {
464
+ // 延迟和代理相关 (Delay and proxy related)
465
+ addingDelay: keyGen('addingDelay'),
466
+ noProxy: keyGen('noProxy'),
467
+ usingProxy: keyGen('usingProxy'),
468
+ usingHttpsProxy: keyGen('usingHttpsProxy'),
469
+ usingHttpProxy: keyGen('usingHttpProxy'),
470
+ // 请求相关 (Request related)
471
+ usingUserAgent: keyGen('usingUserAgent'),
472
+ requestDetails: keyGen('requestDetails'),
473
+ requestOptions: keyGen('requestOptions'),
474
+ startingFetch: keyGen('startingFetch'),
475
+ fetchingUrl: keyGen('fetchingUrl'),
476
+ // 响应相关 (Response related)
477
+ responseStatus: keyGen('responseStatus'),
478
+ redirectingTo: keyGen('redirectingTo'),
479
+ constructedFullRedirectUrl: keyGen('constructedFullRedirectUrl'),
480
+ requestSuccess: keyGen('requestSuccess'),
481
+ // 错误相关 (Error related)
482
+ errorResponse: keyGen('errorResponse'),
483
+ errorResponseBody: keyGen('errorResponseBody'),
484
+ errorReadingBody: keyGen('errorReadingBody'),
485
+ fetchError: keyGen('fetchError'),
486
+ requestAborted: keyGen('requestAborted'),
487
+ networkError: keyGen('networkError'),
488
+ tooManyRedirects: keyGen('tooManyRedirects'),
489
+ // 内容类型相关 (Content type related)
490
+ startingHtmlFetch: keyGen('startingHtmlFetch'),
491
+ readingText: keyGen('readingText'),
492
+ htmlContentLength: keyGen('htmlContentLength'),
493
+ htmlFetchError: keyGen('htmlFetchError'),
494
+ startingJsonFetch: keyGen('startingJsonFetch'),
495
+ parsingJson: keyGen('parsingJson'),
496
+ jsonParsed: keyGen('jsonParsed'),
497
+ jsonParseError: keyGen('jsonParseError'),
498
+ jsonFetchError: keyGen('jsonFetchError'),
499
+ startingTxtFetch: keyGen('startingTxtFetch'),
500
+ startingMarkdownFetch: keyGen('startingMarkdownFetch'),
501
+ creatingTurndown: keyGen('creatingTurndown'),
502
+ convertingToMarkdown: keyGen('convertingToMarkdown')
503
+ };
504
+ })();