deepspider 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/.claude/agents/check.md +122 -0
  2. package/.claude/agents/debug.md +106 -0
  3. package/.claude/agents/dispatch.md +214 -0
  4. package/.claude/agents/implement.md +96 -0
  5. package/.claude/agents/plan.md +396 -0
  6. package/.claude/agents/research.md +120 -0
  7. package/.claude/commands/evolve/merge.md +80 -0
  8. package/.claude/commands/trellis/before-backend-dev.md +13 -0
  9. package/.claude/commands/trellis/before-frontend-dev.md +13 -0
  10. package/.claude/commands/trellis/break-loop.md +107 -0
  11. package/.claude/commands/trellis/check-backend.md +13 -0
  12. package/.claude/commands/trellis/check-cross-layer.md +153 -0
  13. package/.claude/commands/trellis/check-frontend.md +13 -0
  14. package/.claude/commands/trellis/create-command.md +154 -0
  15. package/.claude/commands/trellis/finish-work.md +129 -0
  16. package/.claude/commands/trellis/integrate-skill.md +219 -0
  17. package/.claude/commands/trellis/onboard.md +358 -0
  18. package/.claude/commands/trellis/parallel.md +193 -0
  19. package/.claude/commands/trellis/record-session.md +62 -0
  20. package/.claude/commands/trellis/start.md +280 -0
  21. package/.claude/commands/trellis/update-spec.md +213 -0
  22. package/.claude/hooks/inject-subagent-context.py +758 -0
  23. package/.claude/hooks/ralph-loop.py +374 -0
  24. package/.claude/hooks/session-start.py +126 -0
  25. package/.claude/settings.json +41 -0
  26. package/.claude/skills/deepagents-guide/SKILL.md +428 -0
  27. package/.cursor/commands/trellis-before-backend-dev.md +13 -0
  28. package/.cursor/commands/trellis-before-frontend-dev.md +13 -0
  29. package/.cursor/commands/trellis-break-loop.md +107 -0
  30. package/.cursor/commands/trellis-check-backend.md +13 -0
  31. package/.cursor/commands/trellis-check-cross-layer.md +153 -0
  32. package/.cursor/commands/trellis-check-frontend.md +13 -0
  33. package/.cursor/commands/trellis-create-command.md +154 -0
  34. package/.cursor/commands/trellis-finish-work.md +129 -0
  35. package/.cursor/commands/trellis-integrate-skill.md +219 -0
  36. package/.cursor/commands/trellis-onboard.md +358 -0
  37. package/.cursor/commands/trellis-record-session.md +62 -0
  38. package/.cursor/commands/trellis-start.md +156 -0
  39. package/.cursor/commands/trellis-update-spec.md +213 -0
  40. package/.env.example +11 -0
  41. package/.husky/pre-commit +1 -0
  42. package/.mcp.json +8 -0
  43. package/.trellis/.template-hashes.json +65 -0
  44. package/.trellis/.version +1 -0
  45. package/.trellis/scripts/add-session.sh +384 -0
  46. package/.trellis/scripts/common/developer.sh +129 -0
  47. package/.trellis/scripts/common/git-context.sh +263 -0
  48. package/.trellis/scripts/common/paths.sh +208 -0
  49. package/.trellis/scripts/common/phase.sh +150 -0
  50. package/.trellis/scripts/common/registry.sh +247 -0
  51. package/.trellis/scripts/common/task-queue.sh +142 -0
  52. package/.trellis/scripts/common/task-utils.sh +151 -0
  53. package/.trellis/scripts/common/worktree.sh +128 -0
  54. package/.trellis/scripts/create-bootstrap.sh +299 -0
  55. package/.trellis/scripts/get-context.sh +7 -0
  56. package/.trellis/scripts/get-developer.sh +15 -0
  57. package/.trellis/scripts/init-developer.sh +34 -0
  58. package/.trellis/scripts/multi-agent/cleanup.sh +396 -0
  59. package/.trellis/scripts/multi-agent/create-pr.sh +241 -0
  60. package/.trellis/scripts/multi-agent/plan.sh +207 -0
  61. package/.trellis/scripts/multi-agent/start.sh +310 -0
  62. package/.trellis/scripts/multi-agent/status.sh +828 -0
  63. package/.trellis/scripts/task.sh +1118 -0
  64. package/.trellis/spec/backend/deepagents-guide.md +337 -0
  65. package/.trellis/spec/backend/directory-structure.md +126 -0
  66. package/.trellis/spec/backend/examples/skills/deepagents-guide/README.md +11 -0
  67. package/.trellis/spec/backend/examples/skills/deepagents-guide/agent.js.template +20 -0
  68. package/.trellis/spec/backend/examples/skills/deepagents-guide/skills-config.js.template +13 -0
  69. package/.trellis/spec/backend/examples/skills/deepagents-guide/subagent.js.template +19 -0
  70. package/.trellis/spec/backend/hook-guidelines.md +178 -0
  71. package/.trellis/spec/backend/index.md +36 -0
  72. package/.trellis/spec/backend/quality-guidelines.md +201 -0
  73. package/.trellis/spec/backend/state-management.md +76 -0
  74. package/.trellis/spec/backend/tool-guidelines.md +144 -0
  75. package/.trellis/spec/backend/type-safety.md +71 -0
  76. package/.trellis/spec/guides/code-reuse-thinking-guide.md +92 -0
  77. package/.trellis/spec/guides/cross-layer-thinking-guide.md +94 -0
  78. package/.trellis/spec/guides/index.md +79 -0
  79. package/.trellis/tasks/archive/02-02-evolving-skills/prd.md +61 -0
  80. package/.trellis/tasks/archive/02-02-evolving-skills/task.json +29 -0
  81. package/.trellis/tasks/archive/2026-02/00-bootstrap-guidelines/prd.md +86 -0
  82. package/.trellis/tasks/archive/2026-02/00-bootstrap-guidelines/task.json +27 -0
  83. package/.trellis/tasks/archive/2026-02/02-02-skills-system/check.jsonl +3 -0
  84. package/.trellis/tasks/archive/2026-02/02-02-skills-system/debug.jsonl +2 -0
  85. package/.trellis/tasks/archive/2026-02/02-02-skills-system/implement.jsonl +5 -0
  86. package/.trellis/tasks/archive/2026-02/02-02-skills-system/prd.md +33 -0
  87. package/.trellis/tasks/archive/2026-02/02-02-skills-system/task.json +41 -0
  88. package/.trellis/workflow.md +407 -0
  89. package/.trellis/workspace/index.md +123 -0
  90. package/.trellis/workspace/pony/index.md +40 -0
  91. package/.trellis/workspace/pony/journal-1.md +7 -0
  92. package/.trellis/worktree.yaml +47 -0
  93. package/AGENTS.md +18 -0
  94. package/CLAUDE.md +292 -0
  95. package/README.md +134 -0
  96. package/agents/deepspider.md +142 -0
  97. package/docs/DEBUG.md +42 -0
  98. package/docs/GUIDE.md +334 -0
  99. package/docs/PROMPT.md +60 -0
  100. package/docs/USAGE.md +226 -0
  101. package/eslint.config.js +51 -0
  102. package/package.json +78 -0
  103. package/requirements-crypto.txt +14 -0
  104. package/src/agent/index.js +97 -0
  105. package/src/agent/logger.js +164 -0
  106. package/src/agent/middleware/filterTools.js +64 -0
  107. package/src/agent/middleware/report.js +79 -0
  108. package/src/agent/prompts/system.js +315 -0
  109. package/src/agent/run.js +575 -0
  110. package/src/agent/skills/anti-detect/SKILL.md +28 -0
  111. package/src/agent/skills/anti-detect/evolved.md +12 -0
  112. package/src/agent/skills/captcha/SKILL.md +37 -0
  113. package/src/agent/skills/captcha/evolved.md +12 -0
  114. package/src/agent/skills/config.js +30 -0
  115. package/src/agent/skills/crawler/SKILL.md +9 -0
  116. package/src/agent/skills/crawler/evolved.md +16 -0
  117. package/src/agent/skills/dynamic-analysis/SKILL.md +91 -0
  118. package/src/agent/skills/dynamic-analysis/evolved.md +12 -0
  119. package/src/agent/skills/env/SKILL.md +72 -0
  120. package/src/agent/skills/env/evolved.md +12 -0
  121. package/src/agent/skills/evolve.js +79 -0
  122. package/src/agent/skills/general/SKILL.md +12 -0
  123. package/src/agent/skills/general/evolved.md +12 -0
  124. package/src/agent/skills/js2python/SKILL.md +30 -0
  125. package/src/agent/skills/js2python/evolved.md +13 -0
  126. package/src/agent/skills/report/SKILL.md +21 -0
  127. package/src/agent/skills/report/evolved.md +12 -0
  128. package/src/agent/skills/sandbox/SKILL.md +22 -0
  129. package/src/agent/skills/sandbox/evolved.md +16 -0
  130. package/src/agent/skills/static-analysis/SKILL.md +93 -0
  131. package/src/agent/skills/static-analysis/evolved.md +12 -0
  132. package/src/agent/skills/xpath/SKILL.md +119 -0
  133. package/src/agent/subagents/anti-detect.js +45 -0
  134. package/src/agent/subagents/captcha.js +51 -0
  135. package/src/agent/subagents/crawler.js +138 -0
  136. package/src/agent/subagents/dynamic.js +64 -0
  137. package/src/agent/subagents/env-agent.js +82 -0
  138. package/src/agent/subagents/index.js +37 -0
  139. package/src/agent/subagents/js2python.js +72 -0
  140. package/src/agent/subagents/sandbox.js +55 -0
  141. package/src/agent/subagents/static.js +66 -0
  142. package/src/agent/tools/analysis.js +135 -0
  143. package/src/agent/tools/analyzer.js +85 -0
  144. package/src/agent/tools/anti-detect.js +89 -0
  145. package/src/agent/tools/antidebug.js +64 -0
  146. package/src/agent/tools/async.js +43 -0
  147. package/src/agent/tools/browser.js +324 -0
  148. package/src/agent/tools/captcha.js +223 -0
  149. package/src/agent/tools/capture.js +179 -0
  150. package/src/agent/tools/correlate.js +303 -0
  151. package/src/agent/tools/crawler.js +116 -0
  152. package/src/agent/tools/cryptohook.js +80 -0
  153. package/src/agent/tools/debug.js +246 -0
  154. package/src/agent/tools/deobfuscator.js +90 -0
  155. package/src/agent/tools/env.js +83 -0
  156. package/src/agent/tools/envdump.js +92 -0
  157. package/src/agent/tools/evolve.js +164 -0
  158. package/src/agent/tools/extract.js +114 -0
  159. package/src/agent/tools/extractor.js +54 -0
  160. package/src/agent/tools/file.js +224 -0
  161. package/src/agent/tools/hook.js +84 -0
  162. package/src/agent/tools/hookManager.js +178 -0
  163. package/src/agent/tools/index.js +137 -0
  164. package/src/agent/tools/nodejs.js +101 -0
  165. package/src/agent/tools/patch.js +46 -0
  166. package/src/agent/tools/preprocess.js +71 -0
  167. package/src/agent/tools/profile.js +122 -0
  168. package/src/agent/tools/python.js +627 -0
  169. package/src/agent/tools/report.js +124 -0
  170. package/src/agent/tools/runtime.js +132 -0
  171. package/src/agent/tools/sandbox.js +79 -0
  172. package/src/agent/tools/store.js +73 -0
  173. package/src/agent/tools/trace.js +74 -0
  174. package/src/agent/tools/tracing.js +201 -0
  175. package/src/agent/tools/utils.js +51 -0
  176. package/src/agent/tools/verify.js +184 -0
  177. package/src/agent/tools/webcrack.js +109 -0
  178. package/src/analyzer/ASTAnalyzer.js +387 -0
  179. package/src/analyzer/CallStackAnalyzer.js +379 -0
  180. package/src/analyzer/Deobfuscator.js +289 -0
  181. package/src/analyzer/EncryptionAnalyzer.js +99 -0
  182. package/src/analyzer/index.js +22 -0
  183. package/src/browser/EnvBridge.js +186 -0
  184. package/src/browser/cdp.js +168 -0
  185. package/src/browser/client.js +197 -0
  186. package/src/browser/collector.js +444 -0
  187. package/src/browser/collectors/RequestCryptoLinker.js +109 -0
  188. package/src/browser/collectors/ResponseSearcher.js +107 -0
  189. package/src/browser/collectors/ScriptCollector.js +158 -0
  190. package/src/browser/collectors/index.js +26 -0
  191. package/src/browser/defaultHooks.js +932 -0
  192. package/src/browser/hooks/crypto.js +55 -0
  193. package/src/browser/hooks/index.js +64 -0
  194. package/src/browser/hooks/native.js +9 -0
  195. package/src/browser/hooks/network.js +33 -0
  196. package/src/browser/index.js +42 -0
  197. package/src/browser/interceptors/NetworkInterceptor.js +116 -0
  198. package/src/browser/interceptors/ScriptInterceptor.js +76 -0
  199. package/src/browser/interceptors/index.js +6 -0
  200. package/src/browser/ui/analysisPanel.js +1782 -0
  201. package/src/browser/ui/confirmDialog.js +158 -0
  202. package/src/browser/ui/panel.html +152 -0
  203. package/src/browser/ui/selector.js +170 -0
  204. package/src/config/index.js +5 -0
  205. package/src/config/paths.js +71 -0
  206. package/src/config/patterns/crypto.js +36 -0
  207. package/src/config/profiles/chrome.json +71 -0
  208. package/src/config/profiles/firefox.json +44 -0
  209. package/src/config/profiles/safari.json +38 -0
  210. package/src/core/EnvMonitor.js +200 -0
  211. package/src/core/PatchGenerator.js +278 -0
  212. package/src/core/Sandbox.js +181 -0
  213. package/src/env/AntiAntiDebug.js +111 -0
  214. package/src/env/AsyncHook.js +68 -0
  215. package/src/env/BrowserAPIList.js +265 -0
  216. package/src/env/CookieHook.js +48 -0
  217. package/src/env/CryptoHook.js +205 -0
  218. package/src/env/EnvCodeGenerator.js +157 -0
  219. package/src/env/EnvDumper.js +356 -0
  220. package/src/env/EnvExtractor.js +220 -0
  221. package/src/env/HookBase.js +618 -0
  222. package/src/env/NetworkHook.js +159 -0
  223. package/src/env/modules/bom/history.js +29 -0
  224. package/src/env/modules/bom/location.js +26 -0
  225. package/src/env/modules/bom/navigator.js +70 -0
  226. package/src/env/modules/bom/screen.js +26 -0
  227. package/src/env/modules/bom/storage.js +23 -0
  228. package/src/env/modules/dom/document.js +110 -0
  229. package/src/env/modules/dom/event.js +51 -0
  230. package/src/env/modules/index.js +34 -0
  231. package/src/env/modules/webapi/fetch.js +46 -0
  232. package/src/env/modules/webapi/url.js +47 -0
  233. package/src/env/modules/webapi/xhr.js +48 -0
  234. package/src/index.js +27 -0
  235. package/src/mcp/server.js +89 -0
  236. package/src/store/DataStore.js +708 -0
  237. package/src/store/Store.js +158 -0
  238. package/src/store/Validator.js +24 -0
  239. package/test/analyze.test.js +90 -0
  240. package/test/envdump.test.js +74 -0
  241. package/test/flow.test.js +90 -0
  242. package/test/hooks.test.js +138 -0
  243. package/test/plugin.test.js +35 -0
  244. package/test/refactor-full.test.js +30 -0
  245. package/test/refactor.test.js +21 -0
  246. package/test/samples/obfuscated.js +61 -0
  247. package/test/samples/original.js +66 -0
  248. package/test/samples/v10_eval_chain.js +52 -0
  249. package/test/samples/v11_bytecode_vm.js +81 -0
  250. package/test/samples/v12_polymorphic.js +69 -0
  251. package/test/samples/v1_ob_basic.js +98 -0
  252. package/test/samples/v2_ob_advanced.js +99 -0
  253. package/test/samples/v3_jjencode.js +77 -0
  254. package/test/samples/v4_aaencode.js +73 -0
  255. package/test/samples/v5_control_flow.js +86 -0
  256. package/test/samples/v6_string_encryption.js +71 -0
  257. package/test/samples/v7_jsvmp.js +83 -0
  258. package/test/samples/v8_anti_debug.js +79 -0
  259. package/test/samples/v9_proxy_trap.js +49 -0
  260. package/test/samples.test.js +96 -0
  261. package/test/webcrack.test.js +55 -0
@@ -0,0 +1,135 @@
1
+ /**
2
+ * DeepSpider - 浏览器分析交互工具
3
+ */
4
+
5
+ import { z } from 'zod';
6
+ import { tool } from '@langchain/core/tools';
7
+ import { getBrowserClient } from '../../browser/index.js';
8
+
9
+ /**
10
+ * 通过 CDP 执行 JS(复用 session)
11
+ */
12
+ async function evaluateViaCDP(client, expression) {
13
+ const cdp = await client.getCDPSession();
14
+ if (!cdp) return null;
15
+ const result = await cdp.send('Runtime.evaluate', {
16
+ expression,
17
+ returnByValue: true,
18
+ });
19
+ return result.result?.value;
20
+ }
21
+
22
+ /**
23
+ * 获取待分析数据
24
+ */
25
+ export const getPendingAnalysis = tool(
26
+ async () => {
27
+ const client = getBrowserClient();
28
+ if (!client?.page) {
29
+ return JSON.stringify({ error: '浏览器未启动' });
30
+ }
31
+
32
+ const data = await evaluateViaCDP(client, `
33
+ (function() {
34
+ const deepspider = window.__deepspider__;
35
+ if (!deepspider?.pendingAnalysis) return null;
36
+ const result = deepspider.pendingAnalysis;
37
+ deepspider.pendingAnalysis = null;
38
+ return result;
39
+ })()
40
+ `);
41
+
42
+ return JSON.stringify(data || { pending: false });
43
+ },
44
+ {
45
+ name: 'get_pending_analysis',
46
+ description: '获取用户在浏览器中选中的待分析数据',
47
+ schema: z.object({}),
48
+ }
49
+ );
50
+
51
+ /**
52
+ * 获取待处理的对话消息
53
+ */
54
+ export const getPendingChat = tool(
55
+ async () => {
56
+ const client = getBrowserClient();
57
+ if (!client?.page) {
58
+ return JSON.stringify({ error: '浏览器未启动' });
59
+ }
60
+
61
+ const data = await evaluateViaCDP(client, `
62
+ (function() {
63
+ const deepspider = window.__deepspider__;
64
+ if (!deepspider?.pendingChat) return null;
65
+ const result = deepspider.pendingChat;
66
+ deepspider.pendingChat = null;
67
+ return result;
68
+ })()
69
+ `);
70
+
71
+ return JSON.stringify(data || { pending: false });
72
+ },
73
+ {
74
+ name: 'get_pending_chat',
75
+ description: '获取用户在浏览器面板中输入的对话消息',
76
+ schema: z.object({}),
77
+ }
78
+ );
79
+
80
+ /**
81
+ * 向浏览器面板发送消息
82
+ */
83
+ export const sendPanelMessage = tool(
84
+ async ({ message, role }) => {
85
+ const client = getBrowserClient();
86
+ if (!client?.page) {
87
+ return JSON.stringify({ error: '浏览器未启动' });
88
+ }
89
+
90
+ const escaped = JSON.stringify(message);
91
+ const r = role || 'assistant';
92
+ await evaluateViaCDP(client, `window.__deepspider__?.addMessage?.('${r}', ${escaped})`);
93
+
94
+ return JSON.stringify({ success: true });
95
+ },
96
+ {
97
+ name: 'send_panel_message',
98
+ description: '向浏览器分析面板发送消息',
99
+ schema: z.object({
100
+ message: z.string().describe('消息内容'),
101
+ role: z.enum(['assistant', 'system']).optional().default('assistant'),
102
+ }),
103
+ }
104
+ );
105
+
106
+ /**
107
+ * 开启选择器模式
108
+ */
109
+ export const startSelector = tool(
110
+ async () => {
111
+ const client = getBrowserClient();
112
+ if (!client?.page) {
113
+ return JSON.stringify({ error: '浏览器未启动' });
114
+ }
115
+
116
+ await evaluateViaCDP(client, `
117
+ window.__deepspider__?.startSelector?.();
118
+ window.__deepspider__?.showPanel?.();
119
+ `);
120
+
121
+ return JSON.stringify({ success: true, message: '选择器模式已开启' });
122
+ },
123
+ {
124
+ name: 'start_selector',
125
+ description: '开启浏览器元素选择器模式,让用户选择要分析的数据',
126
+ schema: z.object({}),
127
+ }
128
+ );
129
+
130
+ export const analysisTools = [
131
+ getPendingAnalysis,
132
+ getPendingChat,
133
+ sendPanelMessage,
134
+ startSelector,
135
+ ];
@@ -0,0 +1,85 @@
1
+ /**
2
+ * DeepSpider - 分析器工具
3
+ */
4
+
5
+ import { z } from 'zod';
6
+ import { tool } from '@langchain/core/tools';
7
+ import { ASTAnalyzer } from '../../analyzer/ASTAnalyzer.js';
8
+ import { CallStackAnalyzer } from '../../analyzer/CallStackAnalyzer.js';
9
+ import { EncryptionAnalyzer } from '../../analyzer/EncryptionAnalyzer.js';
10
+
11
+ /**
12
+ * AST 分析工具
13
+ */
14
+ export const analyzeAst = tool(
15
+ async ({ code, extractFunctions, extractCalls }) => {
16
+ const analyzer = new ASTAnalyzer();
17
+ const result = {};
18
+
19
+ if (extractFunctions) {
20
+ result.functions = analyzer.extractFunctions(code);
21
+ }
22
+ if (extractCalls) {
23
+ result.calls = analyzer.extractCalls(code);
24
+ }
25
+ result.dependencyGraph = Object.fromEntries(analyzer.buildDependencyGraph(code));
26
+
27
+ return JSON.stringify(result, null, 2);
28
+ },
29
+ {
30
+ name: 'analyze_ast',
31
+ description: '解析JS代码AST,提取函数定义、调用关系和依赖图。',
32
+ schema: z.object({
33
+ code: z.string().describe('JS代码'),
34
+ extractFunctions: z.boolean().optional().default(true),
35
+ extractCalls: z.boolean().optional().default(true),
36
+ }),
37
+ }
38
+ );
39
+
40
+ /**
41
+ * 调用栈分析工具
42
+ */
43
+ export const analyzeCallstack = tool(
44
+ async ({ code, entryPoint }) => {
45
+ const analyzer = new CallStackAnalyzer();
46
+ const result = {
47
+ entryPoints: analyzer.findEntryPoints(code),
48
+ callGraph: Object.fromEntries(analyzer.buildCallGraph(code)),
49
+ };
50
+
51
+ if (entryPoint) {
52
+ result.callChain = analyzer.buildCallChain(code, entryPoint);
53
+ result.callers = analyzer.findCallers(code, entryPoint);
54
+ }
55
+
56
+ return JSON.stringify(result, null, 2);
57
+ },
58
+ {
59
+ name: 'analyze_callstack',
60
+ description: '分析代码调用栈,追踪函数调用链,找出入口点和调用关系。',
61
+ schema: z.object({
62
+ code: z.string().describe('JS代码'),
63
+ entryPoint: z.string().optional().describe('入口函数名'),
64
+ }),
65
+ }
66
+ );
67
+
68
+ /**
69
+ * 加密分析工具
70
+ */
71
+ export const analyzeEncryption = tool(
72
+ async ({ code }) => {
73
+ const analyzer = new EncryptionAnalyzer();
74
+ return JSON.stringify(analyzer.analyze(code), null, 2);
75
+ },
76
+ {
77
+ name: 'analyze_encryption',
78
+ description: '识别代码中的加密函数和算法模式(MD5, SHA, AES, RSA等)。',
79
+ schema: z.object({
80
+ code: z.string().describe('JS代码'),
81
+ }),
82
+ }
83
+ );
84
+
85
+ export const analyzerTools = [analyzeAst, analyzeCallstack, analyzeEncryption];
@@ -0,0 +1,89 @@
1
+ /**
2
+ * DeepSpider - 反检测工具
3
+ */
4
+
5
+ import { z } from 'zod';
6
+ import { tool } from '@langchain/core/tools';
7
+ import { getBrowser } from '../../browser/index.js';
8
+
9
+ export const proxyTest = tool(
10
+ async ({ proxy_url }) => {
11
+ try {
12
+ // 测试代理可用性
13
+ const response = await fetch('https://httpbin.org/ip', {
14
+ agent: proxy_url ? new (await import('https-proxy-agent')).HttpsProxyAgent(proxy_url) : undefined,
15
+ timeout: 10000,
16
+ });
17
+ const data = await response.json();
18
+ return JSON.stringify({ success: true, ip: data.origin, proxy: proxy_url });
19
+ } catch (e) {
20
+ return JSON.stringify({ success: false, error: e.message });
21
+ }
22
+ },
23
+ {
24
+ name: 'proxy_test',
25
+ description: '测试代理可用性',
26
+ schema: z.object({
27
+ proxy_url: z.string().describe('代理地址,如 http://user:pass@host:port'),
28
+ }),
29
+ }
30
+ );
31
+
32
+ export const fingerprintGet = tool(
33
+ async () => {
34
+ try {
35
+ const browser = await getBrowser();
36
+ const page = browser.getPage();
37
+
38
+ const fingerprint = await page.evaluate(() => {
39
+ return {
40
+ userAgent: navigator.userAgent,
41
+ platform: navigator.platform,
42
+ language: navigator.language,
43
+ webdriver: navigator.webdriver,
44
+ hardwareConcurrency: navigator.hardwareConcurrency,
45
+ deviceMemory: navigator.deviceMemory,
46
+ screenResolution: `${screen.width}x${screen.height}`,
47
+ colorDepth: screen.colorDepth,
48
+ timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
49
+ };
50
+ });
51
+
52
+ return JSON.stringify({ success: true, fingerprint });
53
+ } catch (e) {
54
+ return JSON.stringify({ success: false, error: e.message });
55
+ }
56
+ },
57
+ {
58
+ name: 'fingerprint_get',
59
+ description: '获取当前浏览器指纹信息',
60
+ schema: z.object({}),
61
+ }
62
+ );
63
+
64
+ export const riskCheck = tool(
65
+ async () => {
66
+ try {
67
+ const browser = await getBrowser();
68
+ const page = browser.getPage();
69
+
70
+ const risks = await page.evaluate(() => {
71
+ const issues = [];
72
+ if (navigator.webdriver) issues.push('webdriver detected');
73
+ if (!window.chrome) issues.push('chrome object missing');
74
+ return { issues, count: issues.length };
75
+ });
76
+
77
+ return JSON.stringify({ success: true, ...risks });
78
+ } catch (e) {
79
+ return JSON.stringify({ success: false, error: e.message });
80
+ }
81
+ },
82
+ {
83
+ name: 'risk_check',
84
+ description: '检测当前风控状态',
85
+ schema: z.object({}),
86
+ }
87
+ );
88
+
89
+ export const antiDetectTools = [proxyTest, fingerprintGet, riskCheck];
@@ -0,0 +1,64 @@
1
+ /**
2
+ * DeepSpider - 反反调试工具
3
+ */
4
+
5
+ import { z } from 'zod';
6
+ import { tool } from '@langchain/core/tools';
7
+ import { AntiAntiDebug } from '../../env/AntiAntiDebug.js';
8
+
9
+ const antiDebug = new AntiAntiDebug();
10
+
11
+ export const generateAntiDebugger = tool(
12
+ async () => {
13
+ const code = antiDebug.generateAntiDebuggerCode();
14
+ return JSON.stringify({ success: true, code }, null, 2);
15
+ },
16
+ {
17
+ name: 'generate_anti_debugger',
18
+ description: '生成绕过无限 debugger 的代码',
19
+ schema: z.object({}),
20
+ }
21
+ );
22
+
23
+ export const generateAntiConsoleDetect = tool(
24
+ async () => {
25
+ const code = antiDebug.generateAntiConsoleDetectCode();
26
+ return JSON.stringify({ success: true, code }, null, 2);
27
+ },
28
+ {
29
+ name: 'generate_anti_console_detect',
30
+ description: '生成绕过控制台检测的代码',
31
+ schema: z.object({}),
32
+ }
33
+ );
34
+
35
+ export const generateAntiCDP = tool(
36
+ async () => {
37
+ const code = antiDebug.generateAntiCDPDetectCode();
38
+ return JSON.stringify({ success: true, code }, null, 2);
39
+ },
40
+ {
41
+ name: 'generate_anti_cdp',
42
+ description: '生成绕过 CDP 检测的代码',
43
+ schema: z.object({}),
44
+ }
45
+ );
46
+
47
+ export const generateFullAntiDebug = tool(
48
+ async () => {
49
+ const code = antiDebug.generateFullAntiDebugCode();
50
+ return JSON.stringify({ success: true, code }, null, 2);
51
+ },
52
+ {
53
+ name: 'generate_full_anti_debug',
54
+ description: '生成完整的反反调试代码(包含所有防护)',
55
+ schema: z.object({}),
56
+ }
57
+ );
58
+
59
+ export const antiDebugTools = [
60
+ generateAntiDebugger,
61
+ generateAntiConsoleDetect,
62
+ generateAntiCDP,
63
+ generateFullAntiDebug,
64
+ ];
@@ -0,0 +1,43 @@
1
+ /**
2
+ * DeepSpider - 异步追踪工具
3
+ */
4
+
5
+ import { z } from 'zod';
6
+ import { tool } from '@langchain/core/tools';
7
+ import { AsyncHook } from '../../env/AsyncHook.js';
8
+
9
+ const asyncHook = new AsyncHook();
10
+
11
+ export const generatePromiseHook = tool(
12
+ async () => {
13
+ const code = asyncHook.generatePromiseHookCode();
14
+ return JSON.stringify({
15
+ success: true,
16
+ code,
17
+ usage: "注入后通过 __deepspider__.getLogs('async') 获取日志",
18
+ }, null, 2);
19
+ },
20
+ {
21
+ name: 'generate_promise_hook',
22
+ description: '生成 Promise Hook,追踪异步调用链',
23
+ schema: z.object({}),
24
+ }
25
+ );
26
+
27
+ export const generateTimerHook = tool(
28
+ async () => {
29
+ const code = asyncHook.generateTimerHookCode();
30
+ return JSON.stringify({
31
+ success: true,
32
+ code,
33
+ usage: "注入后通过 __deepspider__.getLogs('timer') 获取日志",
34
+ }, null, 2);
35
+ },
36
+ {
37
+ name: 'generate_timer_hook',
38
+ description: '生成 setTimeout/setInterval Hook',
39
+ schema: z.object({}),
40
+ }
41
+ );
42
+
43
+ export const asyncTools = [generatePromiseHook, generateTimerHook];