@lmcc-dev/mult-fetch-mcp-server 1.0.3 → 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.
- package/README.md +11 -9
- package/README.zh.md +19 -10
- package/dist/i18n-test-report.json +8 -0
- package/dist/i18n-unused-keys-report.json +8 -0
- package/dist/src/client.js +75 -62
- package/dist/src/index.js +0 -0
- package/dist/src/lib/BrowserFetcher.js +12 -12
- package/dist/src/lib/NodeFetcher.js +165 -106
- package/dist/src/lib/fetch.js +40 -0
- package/dist/src/lib/fetchers/FetcherFactory.js +43 -0
- package/dist/src/lib/fetchers/browser/BrowserFetcher.js +381 -0
- package/dist/src/lib/fetchers/browser/BrowserInstance.js +180 -0
- package/dist/src/lib/fetchers/browser/PageOperations.js +168 -0
- package/dist/src/lib/fetchers/common/types.js +41 -0
- package/dist/src/lib/fetchers/common/utils.js +141 -0
- package/dist/src/lib/fetchers/index.js +62 -0
- package/dist/src/lib/fetchers/node/HttpClient.js +239 -0
- package/dist/src/lib/fetchers/node/NodeFetcher.js +180 -0
- package/dist/src/lib/i18n/index.js +105 -17
- package/dist/src/lib/i18n/keys/base.js +41 -0
- package/dist/src/lib/i18n/keys/browser.js +91 -0
- package/dist/src/lib/i18n/keys/client.js +68 -0
- package/dist/src/lib/i18n/keys/errors.js +49 -0
- package/dist/src/lib/i18n/keys/factory.js +46 -0
- package/dist/src/lib/i18n/keys/fetcher.js +87 -0
- package/dist/src/lib/i18n/keys/index.js +16 -0
- package/dist/src/lib/i18n/keys/node.js +69 -0
- package/dist/src/lib/i18n/keys/prompts.js +79 -0
- package/dist/src/lib/i18n/keys/resources.js +53 -0
- package/dist/src/lib/i18n/keys/server.js +67 -0
- package/dist/src/lib/i18n/keys/tools.js +39 -0
- package/dist/src/lib/i18n/keys.js +504 -0
- package/dist/src/lib/i18n/locales/en/browser.js +79 -55
- package/dist/src/lib/i18n/locales/en/client.js +57 -33
- package/dist/src/lib/i18n/locales/en/errors.js +36 -12
- package/dist/src/lib/i18n/locales/en/factory.js +38 -0
- package/dist/src/lib/i18n/locales/en/fetcher.js +67 -60
- package/dist/src/lib/i18n/locales/en/index.js +9 -7
- package/dist/src/lib/i18n/locales/en/node.js +57 -35
- package/dist/src/lib/i18n/locales/en/prompts.js +42 -65
- package/dist/src/lib/i18n/locales/en/resources.js +52 -40
- package/dist/src/lib/i18n/locales/en/server.js +49 -24
- package/dist/src/lib/i18n/locales/en/tools.js +27 -19
- package/dist/src/lib/i18n/locales/zh/browser.js +79 -56
- package/dist/src/lib/i18n/locales/zh/client.js +57 -32
- package/dist/src/lib/i18n/locales/zh/errors.js +36 -12
- package/dist/src/lib/i18n/locales/zh/factory.js +38 -0
- package/dist/src/lib/i18n/locales/zh/fetcher.js +67 -60
- package/dist/src/lib/i18n/locales/zh/index.js +9 -7
- package/dist/src/lib/i18n/locales/zh/node.js +61 -36
- package/dist/src/lib/i18n/locales/zh/prompts.js +35 -57
- package/dist/src/lib/i18n/locales/zh/resources.js +51 -39
- package/dist/src/lib/i18n/locales/zh/server.js +51 -25
- package/dist/src/lib/i18n/locales/zh/tools.js +27 -19
- package/dist/src/lib/i18n/logger.js +90 -19
- package/dist/src/lib/logger.js +135 -14
- package/dist/src/lib/server/browser.js +12 -18
- package/dist/src/lib/server/fetcher.js +13 -34
- package/dist/src/lib/server/index.js +2 -2
- package/dist/src/lib/server/prompts.js +1 -1
- package/dist/src/lib/server/resources.js +1 -1
- package/dist/src/lib/server/tools.js +404 -308
- package/dist/src/lib/utils/ErrorHandler.js +125 -0
- package/dist/src/lib/utils/errorDetection.js +41 -0
- package/dist/src/lib/utils/errors.js +279 -0
- package/dist/src/mcp-server.js +0 -0
- package/dist/src/test-i18n.js +139 -0
- package/dist/tests/BrowserFetcher.test.js +951 -0
- package/dist/tests/NodeFetcher.test.js +263 -0
- package/dist/tests/client.test.js +211 -0
- package/dist/tests/fetch.test.js +70 -0
- package/dist/tests/fetchers/Fetcher.test.js +108 -0
- package/dist/tests/fetchers/browser/BrowserFetcher.test.js +195 -0
- package/dist/tests/fetchers/browser/BrowserInstance.test.js +163 -0
- package/dist/tests/fetchers/node/NodeFetcher.test.js +211 -0
- package/dist/tests/i18n-missing-keys.js +364 -0
- package/dist/tests/i18n-remove-unused-keys.js +236 -0
- package/dist/tests/i18n-test-report.json +2004 -0
- package/dist/tests/i18n-unused-keys.js +425 -0
- package/dist/tests/i18n.test.js +178 -0
- package/dist/tests/logger.test.js +100 -0
- package/dist/tests/mcp-server.test.js +113 -0
- package/dist/tests/server/browser.test.js +201 -0
- package/dist/tests/server/fetcher.test.js +173 -0
- package/dist/tests/server/index.test.js +122 -0
- package/dist/tests/server/prompts.test.js +246 -0
- package/dist/tests/server/resources.test.js +395 -0
- package/dist/tests/server/tools.test.js +223 -0
- package/dist/tests/setup.js +36 -0
- package/dist/tests/src/lib/i18n/index.js +108 -0
- package/dist/tests/src/lib/i18n/keys/base.js +47 -0
- package/dist/tests/src/lib/i18n/keys/browser.js +93 -0
- package/dist/tests/src/lib/i18n/keys/client.js +70 -0
- package/dist/tests/src/lib/i18n/keys/errors.js +34 -0
- package/dist/tests/src/lib/i18n/keys/fetcher.js +84 -0
- package/dist/tests/src/lib/i18n/keys/index.js +31 -0
- package/dist/tests/src/lib/i18n/keys/node.js +56 -0
- package/dist/tests/src/lib/i18n/keys/prompts.js +82 -0
- package/dist/tests/src/lib/i18n/keys/resources.js +50 -0
- package/dist/tests/src/lib/i18n/keys/server.js +64 -0
- package/dist/tests/src/lib/i18n/keys/tools.js +34 -0
- package/dist/tests/src/lib/i18n/locales/en/browser.js +88 -0
- package/dist/tests/src/lib/i18n/locales/en/client.js +66 -0
- package/dist/tests/src/lib/i18n/locales/en/errors.js +28 -0
- package/dist/tests/src/lib/i18n/locales/en/fetcher.js +71 -0
- package/dist/tests/src/lib/i18n/locales/en/index.js +29 -0
- package/dist/tests/src/lib/i18n/locales/en/node.js +51 -0
- package/dist/tests/src/lib/i18n/locales/en/prompts.js +52 -0
- package/dist/tests/src/lib/i18n/locales/en/resources.js +50 -0
- package/dist/tests/src/lib/i18n/locales/en/server.js +56 -0
- package/dist/tests/src/lib/i18n/locales/en/tools.js +28 -0
- package/dist/tests/src/lib/i18n/locales/zh/browser.js +87 -0
- package/dist/tests/src/lib/i18n/locales/zh/client.js +66 -0
- package/dist/tests/src/lib/i18n/locales/zh/errors.js +28 -0
- package/dist/tests/src/lib/i18n/locales/zh/fetcher.js +71 -0
- package/dist/tests/src/lib/i18n/locales/zh/index.js +29 -0
- package/dist/tests/src/lib/i18n/locales/zh/node.js +51 -0
- package/dist/tests/src/lib/i18n/locales/zh/prompts.js +53 -0
- package/dist/tests/src/lib/i18n/locales/zh/resources.js +50 -0
- package/dist/tests/src/lib/i18n/locales/zh/server.js +57 -0
- package/dist/tests/src/lib/i18n/locales/zh/tools.js +28 -0
- package/dist/tests/src/lib/i18n/logger.js +114 -0
- package/dist/tests/src/lib/logger.js +181 -0
- package/dist/tests/test-direct-client.js +0 -0
- package/dist/tests/test-i18n.js +530 -0
- package/dist/tests/test-mcp-methods.js +1 -1
- package/dist/tests/test-mcp.js +0 -0
- package/dist/tests/test-mini4k.js +0 -0
- package/dist/tests/tests/test-i18n.js +588 -0
- package/dist/tests/types.test.js +57 -0
- package/dist/tests/utils/ErrorHandler.test.js +144 -0
- package/dist/vitest.config.js +29 -0
- package/package.json +32 -19
- package/dist/src/cli-language.js +0 -78
- package/dist/src/lib/example.js +0 -93
- package/dist/src/lib/server/logger.js +0 -23
|
@@ -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
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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,65 +3,72 @@
|
|
|
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/fetcher.js';
|
|
6
7
|
// 获取器相关消息 (Fetcher related messages)
|
|
7
|
-
export
|
|
8
|
-
addingDelay: "Adding random delay",
|
|
9
|
-
delayCompleted: "Delay completed after {{delay}}ms",
|
|
10
|
-
usingProxy: "Using proxy: {{proxy}}",
|
|
11
|
-
usingSpecifiedProxy: "Using specified proxy: {{proxy}}",
|
|
12
|
-
attemptingToUseSystemProxy: "Attempting to use system proxy",
|
|
13
|
-
notUsingProxy: "Not using any proxy",
|
|
14
|
-
finalProxyUsed: "Final proxy used: {{proxy}}",
|
|
15
|
-
noProxy: "No proxy will be used",
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
8
|
+
export default {
|
|
9
|
+
[FETCHER_KEYS.addingDelay]: "Adding random delay",
|
|
10
|
+
[FETCHER_KEYS.delayCompleted]: "Delay completed after {{delay}}ms",
|
|
11
|
+
[FETCHER_KEYS.usingProxy]: "Using proxy: {{proxy}}",
|
|
12
|
+
[FETCHER_KEYS.usingSpecifiedProxy]: "Using specified proxy: {{proxy}}",
|
|
13
|
+
[FETCHER_KEYS.attemptingToUseSystemProxy]: "Attempting to use system proxy",
|
|
14
|
+
[FETCHER_KEYS.notUsingProxy]: "Not using any proxy",
|
|
15
|
+
[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}}",
|
|
21
|
+
[FETCHER_KEYS.usingHttpsProxy]: "Using HTTPS proxy",
|
|
22
|
+
[FETCHER_KEYS.usingHttpProxy]: "Using HTTP proxy",
|
|
23
|
+
[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}}",
|
|
29
|
+
[FETCHER_KEYS.requestSuccess]: "Request successful",
|
|
30
|
+
[FETCHER_KEYS.errorResponse]: "Error response: {{status}} {{statusText}}",
|
|
31
|
+
[FETCHER_KEYS.errorResponseBody]: "Error response body (first 200 chars): {{body}}",
|
|
32
|
+
[FETCHER_KEYS.errorReadingBody]: "Error reading response body: {{error}}",
|
|
33
|
+
[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}})",
|
|
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",
|
|
44
|
+
[FETCHER_KEYS.readingText]: "Reading text content",
|
|
45
|
+
[FETCHER_KEYS.htmlContentLength]: "HTML content length: {{length}} bytes",
|
|
46
|
+
[FETCHER_KEYS.startingJsonFetch]: "Starting JSON fetch",
|
|
47
|
+
[FETCHER_KEYS.parsingJson]: "Parsing JSON",
|
|
48
|
+
[FETCHER_KEYS.jsonParsed]: "JSON parsed successfully",
|
|
49
|
+
[FETCHER_KEYS.jsonParseError]: "JSON parse error: {{error}}. Text preview: \"{{textPreview}}\", length: {{textLength}} bytes",
|
|
50
|
+
[FETCHER_KEYS.startingTxtFetch]: "Starting text fetch",
|
|
51
|
+
[FETCHER_KEYS.textContentLength]: "Text content length: {{length}} bytes",
|
|
52
|
+
[FETCHER_KEYS.startingMarkdownFetch]: "Starting Markdown fetch",
|
|
53
|
+
[FETCHER_KEYS.creatingTurndown]: "Creating Turndown service",
|
|
54
|
+
[FETCHER_KEYS.convertingToMarkdown]: "Converting to Markdown",
|
|
55
|
+
[FETCHER_KEYS.markdownContentLength]: "Markdown content length: {{length}} bytes",
|
|
56
|
+
[FETCHER_KEYS.checkingProxyEnv]: "Checking proxy environment variables",
|
|
57
|
+
[FETCHER_KEYS.envVarValue]: "Environment variable {{envVar}} value: {{value}}",
|
|
58
|
+
[FETCHER_KEYS.foundSystemProxy]: "Found system proxy: {{proxy}}",
|
|
59
|
+
[FETCHER_KEYS.systemCommandProxySettings]: "System command proxy settings: {{output}}",
|
|
60
|
+
[FETCHER_KEYS.foundProxyFromCommand]: "Found proxy from command: {{proxy}}",
|
|
61
|
+
[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}}",
|
|
64
|
+
[FETCHER_KEYS.foundWindowsEnvProxy]: "Found Windows environment proxy: {{proxy}}",
|
|
65
|
+
[FETCHER_KEYS.errorGettingWindowsEnvVars]: "Error getting Windows environment variables: {{error}}",
|
|
66
|
+
[FETCHER_KEYS.unixEnvVars]: "Unix environment variables output: {{output}}",
|
|
67
|
+
[FETCHER_KEYS.foundUnixEnvProxy]: "Found Unix environment proxy: {{proxy}}",
|
|
68
|
+
[FETCHER_KEYS.errorGettingUnixEnvVars]: "Error getting Unix environment variables: {{error}}",
|
|
69
|
+
[FETCHER_KEYS.errorGettingSystemEnvVars]: "Error getting system environment variables: {{error}}",
|
|
70
|
+
[FETCHER_KEYS.noSystemProxyFound]: "No system proxy found",
|
|
71
|
+
[FETCHER_KEYS.notSet]: "not set",
|
|
72
|
+
[FETCHER_KEYS.debug]: "{{message}}",
|
|
73
|
+
[FETCHER_KEYS.none]: "none"
|
|
67
74
|
};
|
|
@@ -3,13 +3,14 @@
|
|
|
3
3
|
* Co-Author: AI Assistant (Claude)
|
|
4
4
|
* Description: This code was collaboratively developed by Martin and AI Assistant.
|
|
5
5
|
*/
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
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';
|
|
13
14
|
import resources from './resources.js';
|
|
14
15
|
import prompts from './prompts.js';
|
|
15
16
|
// 英文翻译资源 (English translation resources)
|
|
@@ -17,6 +18,7 @@ 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
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
};
|
|
@@ -3,70 +3,47 @@
|
|
|
3
3
|
* Co-Author: AI Assistant (Claude)
|
|
4
4
|
* Description: This code was collaboratively developed by Martin and AI Assistant.
|
|
5
5
|
*/
|
|
6
|
+
import { PROMPTS_KEYS } from '../../keys/prompts.js';
|
|
6
7
|
export default {
|
|
7
|
-
// Prompt list and get
|
|
8
|
-
list: {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
},
|
|
14
|
-
//
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
//
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
description: "Fetch website content",
|
|
49
|
-
result: "Website content fetch result",
|
|
50
|
-
message: "I want to fetch the content of a website",
|
|
51
|
-
response: "I can help you fetch website content. Please provide the website URL and desired format.",
|
|
52
|
-
instruction: "Please fetch the content of the following website",
|
|
53
|
-
formatInstruction: "Please return the content in the following format",
|
|
54
|
-
browserInstruction: "Use browser mode"
|
|
55
|
-
},
|
|
56
|
-
// Extract content prompt
|
|
57
|
-
extractContent: {
|
|
58
|
-
description: "Extract specific content from a website",
|
|
59
|
-
result: "Content extraction result",
|
|
60
|
-
message: "Please extract content from the following website",
|
|
61
|
-
selectorInstruction: "Use the following CSS selector to extract content",
|
|
62
|
-
dataTypeInstruction: "Extract the following type of data"
|
|
63
|
-
},
|
|
64
|
-
// Debug fetch prompt
|
|
65
|
-
debugFetch: {
|
|
66
|
-
description: "Debug website fetching issues",
|
|
67
|
-
result: "Fetch issue debugging result",
|
|
68
|
-
message: "I'm having issues fetching the following website",
|
|
69
|
-
errorDetails: "Error details",
|
|
70
|
-
instruction: "Please analyze possible causes and provide solutions. Consider the following points:\n1. Does the website have anti-scraping measures\n2. Is browser mode needed\n3. Are specific headers required\n4. Is redirect or cookie handling needed\n5. Does the website require JavaScript rendering"
|
|
71
|
-
}
|
|
8
|
+
// 提示列表和获取 (Prompt list and get)
|
|
9
|
+
[PROMPTS_KEYS.list.request]: 'Received prompt list request: {{params}}',
|
|
10
|
+
[PROMPTS_KEYS.get.request]: 'Received prompt get request: {{promptName}}, {{args}}',
|
|
11
|
+
// 错误消息 (Error messages)
|
|
12
|
+
[PROMPTS_KEYS.notFound]: 'Prompt template not found',
|
|
13
|
+
[PROMPTS_KEYS.missingRequiredArg]: 'Missing required argument',
|
|
14
|
+
[PROMPTS_KEYS.useBrowserValue]: 'Processing useBrowser parameter: original={{original}}, parsed={{parsed}}',
|
|
15
|
+
// 通用提示 (Generic prompt)
|
|
16
|
+
[PROMPTS_KEYS.generic.result]: 'Execute generic prompt',
|
|
17
|
+
[PROMPTS_KEYS.generic.message]: 'Execute prompt template',
|
|
18
|
+
[PROMPTS_KEYS.generic.args]: 'Arguments',
|
|
19
|
+
// 是/否 (Yes/No)
|
|
20
|
+
[PROMPTS_KEYS.yes]: 'Yes',
|
|
21
|
+
[PROMPTS_KEYS.no]: 'No',
|
|
22
|
+
// 提示描述和参数 (Prompt descriptions and parameters)
|
|
23
|
+
[PROMPTS_KEYS.url.description]: 'Website URL',
|
|
24
|
+
[PROMPTS_KEYS.format.description]: 'Return format, options: html, json, text, markdown',
|
|
25
|
+
[PROMPTS_KEYS.useBrowser.description]: 'Whether to use browser mode to fetch content',
|
|
26
|
+
[PROMPTS_KEYS.selector.description]: 'CSS selector for extracting specific content',
|
|
27
|
+
[PROMPTS_KEYS.dataType.description]: 'Type of data to extract, such as tables, lists, contact info, etc.',
|
|
28
|
+
[PROMPTS_KEYS.error.description]: 'Error information encountered during fetching',
|
|
29
|
+
// 获取网站提示 (Fetch website prompt)
|
|
30
|
+
[PROMPTS_KEYS.fetchWebsite.description]: 'Fetch website content',
|
|
31
|
+
[PROMPTS_KEYS.fetchWebsite.result]: 'Website content fetch result',
|
|
32
|
+
[PROMPTS_KEYS.fetchWebsite.message]: 'I want to fetch the content of a website',
|
|
33
|
+
[PROMPTS_KEYS.fetchWebsite.response]: 'I can help you fetch website content. Please provide the website URL and desired format.',
|
|
34
|
+
[PROMPTS_KEYS.fetchWebsite.instruction]: 'Please fetch the content of the following website',
|
|
35
|
+
[PROMPTS_KEYS.fetchWebsite.formatInstruction]: 'Please return the content in the following format',
|
|
36
|
+
[PROMPTS_KEYS.fetchWebsite.browserInstruction]: 'Use browser mode',
|
|
37
|
+
// 提取内容提示 (Extract content prompt)
|
|
38
|
+
[PROMPTS_KEYS.extractContent.description]: 'Extract specific content from a website',
|
|
39
|
+
[PROMPTS_KEYS.extractContent.result]: 'Content extraction result',
|
|
40
|
+
[PROMPTS_KEYS.extractContent.message]: 'Please extract content from the following website',
|
|
41
|
+
[PROMPTS_KEYS.extractContent.selectorInstruction]: 'Use the following CSS selector to extract content',
|
|
42
|
+
[PROMPTS_KEYS.extractContent.dataTypeInstruction]: 'Extract the following type of data',
|
|
43
|
+
// 调试获取提示 (Debug fetch prompt)
|
|
44
|
+
[PROMPTS_KEYS.debugFetch.description]: 'Debug website fetching issues',
|
|
45
|
+
[PROMPTS_KEYS.debugFetch.result]: 'Fetch issue debugging result',
|
|
46
|
+
[PROMPTS_KEYS.debugFetch.message]: 'I\'m having issues fetching the following website',
|
|
47
|
+
[PROMPTS_KEYS.debugFetch.errorDetails]: 'Error details',
|
|
48
|
+
[PROMPTS_KEYS.debugFetch.instruction]: 'Please analyze possible causes and provide solutions. Consider the following points:\n1. Does the website have anti-scraping measures\n2. Is browser mode needed\n3. Are specific headers required\n4. Is redirect or cookie handling needed\n5. Does the website require JavaScript rendering'
|
|
72
49
|
};
|