@jshookmcp/jshook 0.2.7 → 0.2.9

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 (157) hide show
  1. package/README.md +36 -5
  2. package/README.zh.md +36 -5
  3. package/dist/{AntiCheatDetector-S8VRj-dD.mjs → AntiCheatDetector-BNk-EoBt.mjs} +3 -3
  4. package/dist/{CodeInjector-4Z3ngPoX.mjs → CodeInjector-Cq8q01kp.mjs} +5 -5
  5. package/dist/ConsoleMonitor-CPVQW1Y-.mjs +2201 -0
  6. package/dist/{DarwinAPI-B8hg_yhz.mjs → DarwinAPI-BNPxu0RH.mjs} +1 -1
  7. package/dist/DetailedDataManager-BQQcxh64.mjs +217 -0
  8. package/dist/EventBus-DgPmwpeu.mjs +141 -0
  9. package/dist/EvidenceGraphBridge-SFesNera.mjs +153 -0
  10. package/dist/{ExtensionManager-CZ6IveoV.mjs → ExtensionManager-CWYgw0YW.mjs} +13 -6
  11. package/dist/{FingerprintManager-BVxFJL2-.mjs → FingerprintManager-gzWtkKuf.mjs} +1 -1
  12. package/dist/{HardwareBreakpoint-DK1yjWkV.mjs → HardwareBreakpoint-B9gZCdFP.mjs} +3 -3
  13. package/dist/{HeapAnalyzer-CEbo10xU.mjs → HeapAnalyzer-BLDH0dCv.mjs} +4 -4
  14. package/dist/HookGeneratorBuilders.core.generators.storage-CtcdK78Q.mjs +639 -0
  15. package/dist/InstrumentationSession-CvPC7Jwy.mjs +244 -0
  16. package/dist/{MemoryController-DdtnBdD4.mjs → MemoryController-CbVdCIJF.mjs} +3 -3
  17. package/dist/{MemoryScanSession-RMixN3bX.mjs → MemoryScanSession-BsDZbLYm.mjs} +81 -78
  18. package/dist/{MemoryScanner-QjK4ld0B.mjs → MemoryScanner-Bcpml6II.mjs} +44 -18
  19. package/dist/{NativeMemoryManager.impl-CB6gJ0NM.mjs → NativeMemoryManager.impl-dZtA1ZGn.mjs} +14 -53
  20. package/dist/{NativeMemoryManager.utils-BML4q1ry.mjs → NativeMemoryManager.utils-B-FjA2mJ.mjs} +1 -1
  21. package/dist/{PEAnalyzer-CK0xe0Fs.mjs → PEAnalyzer-D1lzJ_VG.mjs} +2 -2
  22. package/dist/PageController-Bqm2kZ_X.mjs +417 -0
  23. package/dist/{PointerChainEngine-Cd73qu5b.mjs → PointerChainEngine-BOhyVsjx.mjs} +4 -4
  24. package/dist/PrerequisiteError-Dl33Svkz.mjs +20 -0
  25. package/dist/ResponseBuilder-D3iFYx2N.mjs +143 -0
  26. package/dist/ReverseEvidenceGraph-Dlsk94LC.mjs +269 -0
  27. package/dist/ScriptManager-aHHq0X7U.mjs +3000 -0
  28. package/dist/{Speedhack-CeF0XmEz.mjs → Speedhack-CqdIFlQl.mjs} +2 -2
  29. package/dist/{StructureAnalyzer-D4GkMduU.mjs → StructureAnalyzer-DhFaPvRO.mjs} +3 -3
  30. package/dist/ToolCatalog-C0JGZoOm.mjs +582 -0
  31. package/dist/ToolError-jh9whhMd.mjs +15 -0
  32. package/dist/ToolProbe-oC7aPrkv.mjs +45 -0
  33. package/dist/ToolRegistry-BjaF4oNz.mjs +131 -0
  34. package/dist/ToolRouter.policy-BWV67ZK-.mjs +304 -0
  35. package/dist/TraceRecorder-DgxyVbdQ.mjs +519 -0
  36. package/dist/{Win32API-Bc0QnQsN.mjs → Win32API-CePkipZY.mjs} +1 -1
  37. package/dist/{Win32Debug-DUHt9XUn.mjs → Win32Debug-BvKs-gxc.mjs} +2 -2
  38. package/dist/WorkflowEngine-CuvkZtWu.mjs +598 -0
  39. package/dist/analysis-CL9uACt9.mjs +463 -0
  40. package/dist/antidebug-CqDTB_uk.mjs +1081 -0
  41. package/dist/artifactRetention-CFEprwPw.mjs +591 -0
  42. package/dist/artifacts-Bk2-_uPq.mjs +59 -0
  43. package/dist/betterSqlite3-0pqusHHH.mjs +74 -0
  44. package/dist/binary-instrument-CXfpx6fT.mjs +979 -0
  45. package/dist/bind-helpers-xFfRF-qm.mjs +22 -0
  46. package/dist/boringssl-inspector-BH2D3VKc.mjs +180 -0
  47. package/dist/browser-BpOr5PEx.mjs +4082 -0
  48. package/dist/concurrency-Bt0yv1kJ.mjs +41 -0
  49. package/dist/{constants-CCvsN80K.mjs → constants-B0OANIBL.mjs} +88 -46
  50. package/dist/coordination-qUbyF8KU.mjs +259 -0
  51. package/dist/debugger-gnKxRSN0.mjs +1271 -0
  52. package/dist/definitions-6M-eejaT.mjs +53 -0
  53. package/dist/definitions-B18eyf0B.mjs +18 -0
  54. package/dist/definitions-B3QdlrHv.mjs +34 -0
  55. package/dist/definitions-B4rAvHNZ.mjs +63 -0
  56. package/dist/definitions-BB_4jnmy.mjs +37 -0
  57. package/dist/definitions-BMfYXoNC.mjs +43 -0
  58. package/dist/definitions-Beid2EB3.mjs +27 -0
  59. package/dist/definitions-C1UvM5Iy.mjs +126 -0
  60. package/dist/definitions-CXEI7QC72.mjs +216 -0
  61. package/dist/definitions-C_4r7Fo-2.mjs +14 -0
  62. package/dist/definitions-CkFDALoa.mjs +26 -0
  63. package/dist/definitions-Cke7zEb8.mjs +94 -0
  64. package/dist/definitions-ClJLzsJQ.mjs +25 -0
  65. package/dist/definitions-Cq-zroAU.mjs +28 -0
  66. package/dist/definitions-Cy3Sl6gV.mjs +34 -0
  67. package/dist/definitions-D3VsGcvz.mjs +47 -0
  68. package/dist/definitions-DVGfrn7y.mjs +96 -0
  69. package/dist/definitions-LKpC3-nL.mjs +9 -0
  70. package/dist/definitions-bAhHQJq9.mjs +359 -0
  71. package/dist/encoding-Bvz5jLRv.mjs +1065 -0
  72. package/dist/evidence-graph-bridge-C_fv9PuC.mjs +135 -0
  73. package/dist/{factory-CibqTNC8.mjs → factory-DxlGh9Xf.mjs} +37 -52
  74. package/dist/graphql-DYWzJ29s.mjs +1026 -0
  75. package/dist/handlers-9sAbfIg-.mjs +2552 -0
  76. package/dist/handlers-Bl8zkwz1.mjs +2716 -0
  77. package/dist/handlers-C67ktuRN.mjs +710 -0
  78. package/dist/handlers-C87g8oCe.mjs +276 -0
  79. package/dist/handlers-CTsDAO6p.mjs +681 -0
  80. package/dist/handlers-Cgyg6c0U.mjs +645 -0
  81. package/dist/handlers-D6j6yka7.mjs +2124 -0
  82. package/dist/handlers-DdFzXLvF.mjs +446 -0
  83. package/dist/handlers-DeLOCd5m.mjs +799 -0
  84. package/dist/handlers-DlCJN4Td.mjs +757 -0
  85. package/dist/handlers-DxGIq15_2.mjs +917 -0
  86. package/dist/handlers-U6L4xhuF.mjs +585 -0
  87. package/dist/handlers-tB9Mp9ZK.mjs +84 -0
  88. package/dist/handlers-tiy7EIBp.mjs +572 -0
  89. package/dist/handlers.impl-DS0d9fUw.mjs +761 -0
  90. package/dist/hooks-CzCWByww.mjs +898 -0
  91. package/dist/index.mjs +384 -155
  92. package/dist/{logger-BmWzC2lM.mjs → logger-Dh_xb7_2.mjs} +14 -6
  93. package/dist/maintenance-P7ePRXQC.mjs +830 -0
  94. package/dist/manifest-2ToTpjv8.mjs +106 -0
  95. package/dist/manifest-3g71z6Bg.mjs +79 -0
  96. package/dist/manifest-82baTv4U.mjs +45 -0
  97. package/dist/manifest-B3QVVeBS.mjs +82 -0
  98. package/dist/manifest-BB2J8IMJ.mjs +149 -0
  99. package/dist/manifest-BKbgbSiY.mjs +60 -0
  100. package/dist/manifest-Bcf-TJzH.mjs +848 -0
  101. package/dist/manifest-BmtZzQiQ2.mjs +45 -0
  102. package/dist/manifest-Bnd7kqEY.mjs +55 -0
  103. package/dist/manifest-BqQX6OQC2.mjs +65 -0
  104. package/dist/manifest-BqrQ4Tpj.mjs +81 -0
  105. package/dist/manifest-Br4RPFt5.mjs +370 -0
  106. package/dist/manifest-C5qDjysN.mjs +107 -0
  107. package/dist/manifest-C9RT5nk32.mjs +34 -0
  108. package/dist/manifest-CAhOuvSl.mjs +204 -0
  109. package/dist/manifest-CBYWCUBJ.mjs +51 -0
  110. package/dist/manifest-CFADCRa1.mjs +37 -0
  111. package/dist/manifest-CQVhavRF.mjs +114 -0
  112. package/dist/manifest-CT7zZBV1.mjs +48 -0
  113. package/dist/manifest-CV12bcrF.mjs +121 -0
  114. package/dist/manifest-CXsRWjjI.mjs +224 -0
  115. package/dist/manifest-CZLUCfG02.mjs +95 -0
  116. package/dist/manifest-D6phHKFd.mjs +131 -0
  117. package/dist/manifest-DCyjf4n2.mjs +294 -0
  118. package/dist/manifest-DHsnKgP6.mjs +60 -0
  119. package/dist/manifest-Df_dliIe.mjs +55 -0
  120. package/dist/manifest-Dh8WBmEW.mjs +129 -0
  121. package/dist/manifest-DhKRAT8_.mjs +92 -0
  122. package/dist/manifest-DlpTj4ic2.mjs +193 -0
  123. package/dist/manifest-DrbmZcFl2.mjs +253 -0
  124. package/dist/manifest-DuwHjUa5.mjs +70 -0
  125. package/dist/manifest-DzwvxPJX.mjs +38 -0
  126. package/dist/manifest-NXctwWQq.mjs +68 -0
  127. package/dist/manifest-Sc_0JQ13.mjs +418 -0
  128. package/dist/manifest-gZ4s_UtG.mjs +96 -0
  129. package/dist/manifest-qSleDqdO.mjs +1023 -0
  130. package/dist/modules-C184v-S9.mjs +11365 -0
  131. package/dist/mojo-ipc-B_H61Afw.mjs +525 -0
  132. package/dist/network-671Cw6hV.mjs +3346 -0
  133. package/dist/{artifacts-BbdOMET5.mjs → outputPaths-B1uGmrWZ.mjs} +219 -212
  134. package/dist/parse-args-BlRjqlkL.mjs +39 -0
  135. package/dist/platform-WmNn8Sxb.mjs +2070 -0
  136. package/dist/process-QcbIy5Zq.mjs +1401 -0
  137. package/dist/proxy-DqNs0bAd.mjs +170 -0
  138. package/dist/registry-D-6e18lB.mjs +34 -0
  139. package/dist/response-BQVP-xUn.mjs +28 -0
  140. package/dist/server/plugin-api.mjs +2 -2
  141. package/dist/shared-state-board-DV-dpHFJ.mjs +586 -0
  142. package/dist/sourcemap-Dq8ez8vS.mjs +650 -0
  143. package/dist/ssrf-policy-ZaUfvhq7.mjs +166 -0
  144. package/dist/streaming-BUQ0VJsg.mjs +725 -0
  145. package/dist/tool-builder-DCbIC5Eo.mjs +186 -0
  146. package/dist/transform-CiYJfNX0.mjs +1007 -0
  147. package/dist/types-Bx92KJfT.mjs +4 -0
  148. package/dist/wasm-DQTnHDs4.mjs +531 -0
  149. package/dist/workflow-f3xJOcjx.mjs +725 -0
  150. package/package.json +48 -78
  151. package/dist/ExtensionManager-DqUSOamB.mjs +0 -2
  152. package/dist/ToolCatalog-CnwmMIw3.mjs +0 -61483
  153. package/dist/{CacheAdapters-CzFNpD9a.mjs → CacheAdapters-CDe5WPSV.mjs} +0 -0
  154. package/dist/{StealthVerifier-BzBCFiwx.mjs → StealthVerifier-Bo4T3bz8.mjs} +0 -0
  155. package/dist/{VersionDetector-CNXcvD46.mjs → VersionDetector-CwVLVdDM.mjs} +0 -0
  156. package/dist/{formatAddress-ChCSIRWT.mjs → formatAddress-DVkj9kpI.mjs} +0 -0
  157. package/dist/{types-BBjOqye-.mjs → types-CPhOReNX.mjs} +1 -1
@@ -0,0 +1,9 @@
1
+ import { t as tool } from "./tool-builder-DCbIC5Eo.mjs";
2
+ //#region src/server/domains/sourcemap/definitions.ts
3
+ const sourcemapTools = [
4
+ tool("sourcemap_discover", (t) => t.desc("自动发现页面中的 SourceMap(CDP scriptParsed + 脚本尾部注释回退)").boolean("includeInline", "包含 data: URI 内联 SourceMap", { default: true })),
5
+ tool("sourcemap_fetch_and_parse", (t) => t.desc("获取并解析 SourceMap v3(纯 TypeScript VLQ 解码),还原映射统计").string("sourceMapUrl", "SourceMap URL(绝对/相对/data: URI)").string("scriptUrl", "用于解析相对路径的脚本 URL").required("sourceMapUrl")),
6
+ tool("sourcemap_reconstruct_tree", (t) => t.desc("从 SourceMap 重建原始项目文件树并写出到目录").string("sourceMapUrl", "SourceMap URL").string("outputDir", "输出目录").required("sourceMapUrl"))
7
+ ];
8
+ //#endregion
9
+ export { sourcemapTools as t };
@@ -0,0 +1,359 @@
1
+ import { t as tool } from "./tool-builder-DCbIC5Eo.mjs";
2
+ //#region src/server/domains/browser/definitions.tools.advanced.ts
3
+ const advancedBrowserToolDefinitions = [tool("js_heap_search", (t) => t.desc("Search JS heap for strings matching a pattern.").string("pattern", "Pattern to search").number("maxResults", "Max matches", { default: 50 }).boolean("caseSensitive", "Case sensitive", { default: false }).required("pattern").query()), tool("tab_workflow", (t) => t.desc("Cross-tab coordination.").enum("action", [
4
+ "list",
5
+ "alias_bind",
6
+ "alias_open",
7
+ "navigate",
8
+ "wait_for",
9
+ "context_set",
10
+ "context_get",
11
+ "transfer"
12
+ ], "Action").string("alias", "Tab alias").string("fromAlias", "Source tab alias").number("index", "Tab index (0-based)").string("url", "URL").string("selector", "CSS selector to wait for").string("waitForText", "Text to wait for").string("key", "Context key").string("value", "Context value").string("expression", "JS expression for transfer").number("timeoutMs", "Timeout ms", { default: 1e4 }).requiredOpenWorld("action"))];
13
+ //#endregion
14
+ //#region src/server/domains/browser/definitions.tools.page-core.ts
15
+ const browserPageCoreTools = [
16
+ tool("page_navigate", (t) => t.desc("Navigate to a URL.").string("url", "Target URL").enum("waitUntil", [
17
+ "load",
18
+ "domcontentloaded",
19
+ "networkidle",
20
+ "commit"
21
+ ], "When to consider navigation succeeded", { default: "networkidle" }).number("timeout", "Navigation timeout in ms", {
22
+ default: 3e4,
23
+ minimum: 1e3,
24
+ maximum: 12e4
25
+ }).boolean("enableNetworkMonitoring", "Enable network monitoring before navigation", { default: false }).required("url").idempotent().openWorld()),
26
+ tool("page_reload", (t) => t.desc("Reload current page").idempotent().openWorld()),
27
+ tool("page_back", (t) => t.desc("Go back in history").openWorld()),
28
+ tool("page_forward", (t) => t.desc("Go forward in history").openWorld()),
29
+ tool("page_click", (t) => t.desc("Click an element.").string("selector", "CSS selector").enum("button", [
30
+ "left",
31
+ "right",
32
+ "middle"
33
+ ], "Mouse button", { default: "left" }).number("clickCount", "Number of clicks", {
34
+ default: 1,
35
+ minimum: 1,
36
+ maximum: 10
37
+ }).number("delay", "Delay between mousedown and mouseup in ms", {
38
+ minimum: 0,
39
+ maximum: 1e4
40
+ }).string("frameUrl", "iframe URL substring").string("frameSelector", "iframe CSS selector").requiredOpenWorld("selector")),
41
+ tool("page_type", (t) => t.desc("Type text into an element.").string("selector", "CSS selector").string("text", "Text to type").number("delay", "Delay between key presses in ms", {
42
+ minimum: 0,
43
+ maximum: 1e3
44
+ }).string("frameUrl", "iframe URL substring").string("frameSelector", "iframe CSS selector").requiredOpenWorld("selector", "text")),
45
+ tool("page_select", (t) => t.desc("Select option(s) in a <select> element.").string("selector", "CSS selector").array("values", { type: "string" }, "Values to select").string("frameUrl", "iframe URL substring").string("frameSelector", "iframe CSS selector").required("selector", "values").idempotent().openWorld()),
46
+ tool("page_hover", (t) => t.desc("Hover over an element.").string("selector", "CSS selector").string("frameUrl", "iframe URL substring").string("frameSelector", "iframe CSS selector").required("selector").idempotent().openWorld()),
47
+ tool("page_scroll", (t) => t.desc("Scroll the page.").number("x", "Horizontal position", { default: 0 }).number("y", "Vertical position", { default: 0 }).idempotent()),
48
+ tool("page_wait_for_selector", (t) => t.desc("Wait for an element to appear.").string("selector", "CSS selector").number("timeout", "Timeout in ms", {
49
+ default: 3e4,
50
+ minimum: 1e3,
51
+ maximum: 12e4
52
+ }).required("selector").query()),
53
+ tool("page_evaluate", (t) => t.desc("Execute JavaScript in page context.").string("code", "JavaScript code").boolean("autoSummarize", "Auto-summarize large results", { default: true }).number("maxSize", "Max result size in bytes before summarizing", {
54
+ default: 51200,
55
+ minimum: 1024,
56
+ maximum: 10485760
57
+ }).array("fieldFilter", { type: "string" }, "Field names to strip from result (recursive)").boolean("stripBase64", "Strip base64 strings from result", { default: false }).string("frameUrl", "iframe URL substring").string("frameSelector", "iframe CSS selector").requiredOpenWorld("code")),
58
+ tool("page_screenshot", (t) => t.desc("Take a screenshot.").prop("selector", {
59
+ oneOf: [{
60
+ type: "string",
61
+ description: "CSS selector"
62
+ }, {
63
+ type: "array",
64
+ items: { type: "string" },
65
+ description: "Multiple CSS selectors"
66
+ }],
67
+ description: "Element selector(s). Omit for full page viewport."
68
+ }).object("clip", {
69
+ x: {
70
+ type: "number",
71
+ description: "Left offset"
72
+ },
73
+ y: {
74
+ type: "number",
75
+ description: "Top offset"
76
+ },
77
+ width: {
78
+ type: "number",
79
+ description: "Width"
80
+ },
81
+ height: {
82
+ type: "number",
83
+ description: "Height"
84
+ }
85
+ }, "Pixel region to capture", { required: [
86
+ "x",
87
+ "y",
88
+ "width",
89
+ "height"
90
+ ] }).string("path", "File path to save screenshot").enum("type", ["png", "jpeg"], "Image format", { default: "png" }).number("quality", "Image quality 0-100 (jpeg only)", {
91
+ minimum: 1,
92
+ maximum: 100
93
+ }).boolean("fullPage", "Capture full scrollable page", { default: false }).query()),
94
+ tool("get_all_scripts", (t) => t.desc("List all loaded scripts.").boolean("includeSource", "Include source code", { default: false }).query()),
95
+ tool("get_script_source", (t) => t.desc("Get source code of a script.").string("scriptId", "Script ID").string("url", "Script URL (supports wildcards)").boolean("preview", "Preview only (first N lines + metadata)", { default: false }).number("maxLines", "Max lines in preview", {
96
+ default: 100,
97
+ minimum: 1,
98
+ maximum: 1e4
99
+ }).number("startLine", "Start line (1-based)", { minimum: 1 }).number("endLine", "End line (1-based)", { minimum: 1 }).query())
100
+ ];
101
+ //#endregion
102
+ //#region src/server/domains/browser/definitions.tools.page-system.ts
103
+ const browserPageSystemTools = [
104
+ tool("console_monitor", (t) => t.desc("Enable or disable console monitoring.").enum("action", ["enable", "disable"], "Action").required("action").idempotent()),
105
+ tool("console_get_logs", (t) => t.desc("Get captured console logs.").enum("type", [
106
+ "log",
107
+ "warn",
108
+ "error",
109
+ "info",
110
+ "debug"
111
+ ], "Log type filter").number("limit", "Max logs").number("since", "Timestamp filter").query()),
112
+ tool("console_execute", (t) => t.desc("Execute JS in console context.").string("expression", "JavaScript expression").requiredOpenWorld("expression")),
113
+ tool("page_inject_script", (t) => t.desc("Inject JS into the page.").string("script", "JavaScript code").requiredOpenWorld("script")),
114
+ tool("page_cookies", (t) => t.desc("Manage page cookies. Clear requires expectedCount (call get first).").enum("action", [
115
+ "get",
116
+ "set",
117
+ "clear"
118
+ ], "Action").number("expectedCount", "Required for clear: must match current count").array("cookies", {
119
+ type: "object",
120
+ properties: {
121
+ name: { type: "string" },
122
+ value: { type: "string" },
123
+ domain: { type: "string" },
124
+ path: { type: "string" },
125
+ expires: { type: "number" },
126
+ httpOnly: { type: "boolean" },
127
+ secure: { type: "boolean" },
128
+ sameSite: {
129
+ type: "string",
130
+ enum: [
131
+ "Strict",
132
+ "Lax",
133
+ "None"
134
+ ]
135
+ }
136
+ },
137
+ required: ["name", "value"]
138
+ }, "Cookies (action=set)").destructive().required("action")),
139
+ tool("page_set_viewport", (t) => t.desc("Set viewport size.").number("width", "Width").number("height", "Height").required("width", "height").idempotent()),
140
+ tool("page_emulate_device", (t) => t.desc("Emulate a mobile device.").string("device", "Device name").required("device").idempotent()),
141
+ tool("page_local_storage", (t) => t.desc("Manage localStorage.").enum("action", ["get", "set"], "Action").string("key", "Key").string("value", "Value").required("action")),
142
+ tool("page_press_key", (t) => t.desc("Press a keyboard key.").string("key", "Key name").requiredOpenWorld("key"))
143
+ ];
144
+ //#endregion
145
+ //#region src/server/domains/browser/definitions.tools.runtime.ts
146
+ const browserRuntimeTools = [
147
+ tool("get_detailed_data", (t) => t.desc("Retrieve large data by detailId.").string("detailId", "Detail ID from previous response").string("path", "Path to specific nested data").required("detailId").query()),
148
+ tool("browser_launch", (t) => t.desc("Launch or connect to a browser.").enum("driver", ["chrome", "camoufox"], "Browser driver", { default: "chrome" }).boolean("headless", "Run headless", { default: false }).enum("os", [
149
+ "windows",
150
+ "macos",
151
+ "linux"
152
+ ], "OS fingerprint (camoufox)", { default: "windows" }).enum("mode", ["launch", "connect"], "Launch or connect", { default: "launch" }).string("browserURL", "Browser debug endpoint URL").string("wsEndpoint", "WebSocket endpoint").boolean("autoConnect", "Auto-detect local Chrome debug WebSocket", { default: false }).enum("channel", [
153
+ "stable",
154
+ "beta",
155
+ "dev",
156
+ "canary"
157
+ ], "Chrome channel", { default: "stable" }).string("userDataDir", "Chrome profile directory").boolean("geoip", "Auto-resolve GeoIP (camoufox)", { default: false }).boolean("humanize", "Humanize cursor (camoufox)", { default: false }).string("proxy", "Proxy URL (camoufox)").boolean("blockImages", "Block images (camoufox)", { default: false }).boolean("blockWebrtc", "Block WebRTC (camoufox)", { default: false }).boolean("blockWebgl", "Block WebGL (camoufox)", { default: false }).string("locale", "Firefox locale (camoufox)").array("addons", { type: "string" }, "Firefox addons (camoufox)").array("fonts", { type: "string" }, "Custom fonts (camoufox)").array("excludeAddons", { type: "string" }, "Addons to exclude (camoufox)").boolean("customFontsOnly", "Only use custom fonts (camoufox)", { default: false }).object("screen", {
158
+ width: { type: "number" },
159
+ height: { type: "number" }
160
+ }, "Screen resolution (camoufox)").object("window", {
161
+ width: { type: "number" },
162
+ height: { type: "number" }
163
+ }, "Window size (camoufox)").prop("fingerprint", {
164
+ type: "object",
165
+ description: "Pre-generated fingerprint (camoufox)",
166
+ additionalProperties: true
167
+ }).prop("webglConfig", {
168
+ type: "object",
169
+ description: "WebGL config (camoufox)",
170
+ additionalProperties: true
171
+ }).prop("firefoxUserPrefs", {
172
+ type: "object",
173
+ description: "Firefox about:config overrides (camoufox)",
174
+ additionalProperties: true
175
+ }).boolean("mainWorldEval", "Main world eval (camoufox)", { default: false }).boolean("enableCache", "Enable cache (camoufox)", { default: false }).openWorld()),
176
+ tool("camoufox_server", (t) => t.desc("Manage Camoufox WebSocket server.").enum("action", [
177
+ "launch",
178
+ "close",
179
+ "status"
180
+ ], "Action").number("port", "Listen port (launch)").string("ws_path", "WebSocket path (launch)").enum("os", [
181
+ "windows",
182
+ "macos",
183
+ "linux"
184
+ ], "OS fingerprint (launch)", { default: "windows" }).boolean("headless", "Headless (launch)", { default: true }).boolean("geoip", "GeoIP (launch)", { default: false }).boolean("humanize", "Humanize cursor (launch)", { default: false }).string("proxy", "Proxy URL (launch)").boolean("blockImages", "Block images (launch)", { default: false }).boolean("blockWebrtc", "Block WebRTC (launch)", { default: false }).boolean("blockWebgl", "Block WebGL (launch)", { default: false }).string("locale", "Firefox locale (launch)").array("addons", { type: "string" }, "Addons (launch)").array("fonts", { type: "string" }, "Fonts (launch)").array("excludeAddons", { type: "string" }, "Excluded addons (launch)").boolean("customFontsOnly", "Only custom fonts (launch)", { default: false }).object("screen", {
185
+ width: { type: "number" },
186
+ height: { type: "number" }
187
+ }, "Screen resolution (launch)").object("window", {
188
+ width: { type: "number" },
189
+ height: { type: "number" }
190
+ }, "Window size (launch)").prop("fingerprint", {
191
+ type: "object",
192
+ description: "Pre-generated fingerprint (launch)",
193
+ additionalProperties: true
194
+ }).prop("webglConfig", {
195
+ type: "object",
196
+ description: "WebGL config (launch)",
197
+ additionalProperties: true
198
+ }).prop("firefoxUserPrefs", {
199
+ type: "object",
200
+ description: "Firefox about:config overrides (launch)",
201
+ additionalProperties: true
202
+ }).boolean("mainWorldEval", "Main world eval (launch)", { default: false }).boolean("enableCache", "Enable cache (launch)", { default: false }).required("action").destructive()),
203
+ tool("browser_attach", (t) => t.desc("Attach to a running browser via CDP.").string("browserURL", "Debug endpoint URL").string("wsEndpoint", "WebSocket URL").boolean("autoConnect", "Auto-detect local Chrome debug WebSocket", { default: false }).enum("channel", [
204
+ "stable",
205
+ "beta",
206
+ "dev",
207
+ "canary"
208
+ ], "Chrome channel", { default: "stable" }).string("userDataDir", "Chrome profile directory").number("pageIndex", "Tab index to activate", { default: 0 }).openWorld()),
209
+ tool("browser_list_cdp_targets", (t) => t.desc("List CDP targets.").string("browserURL", "Browser URL").string("wsEndpoint", "WebSocket endpoint").boolean("autoConnect", "Auto-detect local Chrome debug WebSocket", { default: false }).enum("channel", [
210
+ "stable",
211
+ "beta",
212
+ "dev",
213
+ "canary"
214
+ ], "Chrome channel", { default: "stable" }).string("userDataDir", "Chrome profile directory").string("type", "Target type filter").array("types", { type: "string" }, "Target types to include").string("targetId", "Exact targetId filter").string("urlPattern", "URL substring filter").string("titlePattern", "Title substring filter").boolean("attachedOnly", "Only attached targets", { default: false }).boolean("discoverOOPIF", "Auto-discover cross-origin iframes", { default: true }).query().openWorld()),
215
+ tool("browser_attach_cdp_target", (t) => t.desc("Attach to a CDP target by targetId.").string("targetId", "Target ID").required("targetId")),
216
+ tool("browser_detach_cdp_target", (t) => t.desc("Detach the current CDP target session.").destructive()),
217
+ tool("browser_evaluate_cdp_target", (t) => t.desc("Evaluate JS in the attached CDP target.").string("code", "JavaScript code").string("script", "Alias of code").boolean("returnByValue", "Return by value", { default: true }).boolean("awaitPromise", "Await promises", { default: true }).boolean("autoSummarize", "Summarize large results", { default: true }).number("maxSize", "Max size before summarizing", { default: 51200 }).array("fieldFilter", { type: "string" }, "Field names to strip").boolean("stripBase64", "Strip base64 payloads", { default: false }).required("code")),
218
+ tool("browser_close", (t) => t.desc("Close browser.").destructive()),
219
+ tool("browser_status", (t) => t.desc("Browser status.").query())
220
+ ];
221
+ //#endregion
222
+ //#region src/server/domains/browser/definitions.tools.security.ts
223
+ const browserSecurityStateTools = [
224
+ tool("captcha_detect", (t) => t.desc("Detect CAPTCHA on the page.").query()),
225
+ tool("captcha_wait", (t) => t.desc("Wait for manual CAPTCHA solve.").number("timeout", "Timeout in ms", { default: 3e5 }).query().openWorld()),
226
+ tool("captcha_config", (t) => t.desc("Configure CAPTCHA detection and auto-handling.").boolean("autoDetectCaptcha", "Auto-detect after navigation").boolean("autoSwitchHeadless", "Switch to headed on detection").number("captchaTimeout", "Wait timeout in ms").idempotent()),
227
+ tool("stealth_inject", (t) => t.desc("Inject stealth scripts.").idempotent()),
228
+ tool("stealth_set_user_agent", (t) => t.desc("Set User-Agent and fingerprint.").enum("platform", [
229
+ "windows",
230
+ "mac",
231
+ "linux"
232
+ ], "Platform", { default: "windows" }).idempotent()),
233
+ tool("stealth_configure_jitter", (t) => t.desc("Configure CDP timing jitter.").boolean("enabled", "Enable", { default: true }).number("minDelayMs", "Min delay ms", { default: 20 }).number("maxDelayMs", "Max delay ms", { default: 80 }).boolean("burstMode", "Skip jitter for time-critical ops", { default: false }).idempotent()),
234
+ tool("stealth_generate_fingerprint", (t) => t.desc("Generate a browser fingerprint.").enum("os", [
235
+ "windows",
236
+ "macos",
237
+ "linux"
238
+ ], "Target OS").enum("browser", ["chrome", "firefox"], "Target browser", { default: "chrome" }).string("locale", "Locale", { default: "en-US" })),
239
+ tool("stealth_verify", (t) => t.desc("Run anti-detection checks.").query()),
240
+ tool("browser_list_tabs", (t) => t.desc("List open tabs.").string("browserURL", "Browser URL").string("wsEndpoint", "WebSocket endpoint").boolean("autoConnect", "Auto-detect Chrome debug WebSocket", { default: false }).enum("channel", [
241
+ "stable",
242
+ "beta",
243
+ "dev",
244
+ "canary"
245
+ ], "Chrome channel", { default: "stable" }).string("userDataDir", "Chrome profile directory").query().openWorld()),
246
+ tool("browser_select_tab", (t) => t.desc("Switch active tab.").number("index", "Tab index").string("urlPattern", "URL substring match").string("titlePattern", "Title substring match").idempotent()),
247
+ tool("framework_state_extract", (t) => t.desc("Extract framework component state.").enum("framework", [
248
+ "auto",
249
+ "react",
250
+ "vue2",
251
+ "vue3",
252
+ "svelte",
253
+ "solid",
254
+ "preact"
255
+ ], "Framework", { default: "auto" }).string("selector", "Root element CSS selector").number("maxDepth", "Max traversal depth", { default: 5 }).query().openWorld()),
256
+ tool("indexeddb_dump", (t) => t.desc("Dump IndexedDB contents.").string("database", "Database name").string("store", "Object store name").number("maxRecords", "Max records per store", { default: 100 }).query()),
257
+ tool("camoufox_geolocation", (t) => t.desc("Get geolocation for a locale.").string("locale", "Locale string").string("proxy", "Proxy URL for IP lookup").required("locale").query())
258
+ ];
259
+ //#endregion
260
+ //#region src/server/domains/browser/definitions.tools.behavior.ts
261
+ const behaviorTools = [
262
+ tool("human_mouse", (t) => t.desc("Move mouse along a Bezier curve with jitter.").number("fromX", "Start X").number("fromY", "Start Y").number("toX", "Target X").number("toY", "Target Y").string("selector", "CSS selector (alternative to toX/toY)").number("durationMs", "Duration ms", { default: 600 }).number("steps", "Intermediate points", { default: 24 }).number("jitterPx", "Max jitter px", { default: 1.5 }).enum("curve", [
263
+ "ease",
264
+ "linear",
265
+ "ease-in",
266
+ "ease-out"
267
+ ], "Speed curve", { default: "ease" }).boolean("click", "Click at destination", { default: false }).openWorld()),
268
+ tool("human_scroll", (t) => t.desc("Scroll with human-like speed variation.").number("distance", "Distance px", { default: 500 }).enum("direction", [
269
+ "up",
270
+ "down",
271
+ "left",
272
+ "right"
273
+ ], "Direction", { default: "down" }).number("durationMs", "Duration ms", { default: 1500 }).number("segments", "Segments", { default: 8 }).number("pauseMs", "Pause between segments ms", { default: 80 }).number("jitter", "Variation factor 0-1", { default: .3 }).string("selector", "Scrollable container selector").openWorld()),
274
+ tool("human_typing", (t) => t.desc("Type text with human-like speed and occasional typos.").string("selector", "CSS selector").string("text", "Text to type").number("wpm", "Words per minute", { default: 90 }).number("errorRate", "Typo probability per char", { default: .02 }).number("correctDelayMs", "Delay before correcting typo ms", { default: 200 }).boolean("clearFirst", "Clear existing value first", { default: false }).requiredOpenWorld("selector", "text")),
275
+ tool("captcha_vision_solve", (t) => t.desc("Solve CAPTCHA via external service or AI vision.").enum("mode", ["external_service", "manual"], "Solver mode").string("provider", "External solver provider").string("apiKey", "API key").enum("challengeType", [
276
+ "image",
277
+ "widget",
278
+ "browser_check",
279
+ "auto"
280
+ ], "Challenge type", { default: "auto" }).string("typeHint", "Legacy alias for challengeType").string("siteKey", "Widget site key").string("pageUrl", "Page URL").number("timeoutMs", "Timeout ms", { default: 18e4 }).number("maxRetries", "Max retries", { default: 2 }).openWorld()),
281
+ tool("widget_challenge_solve", (t) => t.desc("Solve embedded widget challenge.").string("siteKey", "Widget site key").string("pageUrl", "Page URL").enum("mode", [
282
+ "external_service",
283
+ "hook",
284
+ "manual"
285
+ ], "Solving mode").string("provider", "External solver provider").string("apiKey", "API key").number("timeoutMs", "Timeout ms", { default: 12e4 }).boolean("injectToken", "Auto-inject token", { default: true }).openWorld())
286
+ ];
287
+ //#endregion
288
+ //#region src/server/domains/browser/definitions.tools.jsdom.ts
289
+ /**
290
+ * jsdom-backed headless DOM tools.
291
+ *
292
+ * Operate on an in-memory JSDOM session (no browser required). Each session
293
+ * is referenced by `sessionId` returned from `browser_jsdom_parse`; sessions
294
+ * auto-expire after 10 minutes of inactivity.
295
+ */
296
+ const browserJsdomToolDefinitions = [
297
+ tool("browser_jsdom_parse", (t) => t.desc("Parse HTML into an in-memory JSDOM session. No browser needed.").string("html", "HTML source").string("url", "Document URL").string("contentType", "Content-Type").enum("runScripts", [
298
+ "none",
299
+ "outside-only",
300
+ "dangerously"
301
+ ], "Script execution mode", { default: "none" }).boolean("includeNodeLocations", "Track source offsets", { default: false }).boolean("pretendToBeVisual", "Expose rAF/matchMedia shims", { default: false }).string("referrer", "Referrer URL").number("storageQuotaBytes", "Storage quota bytes", { default: 5e6 }).required("html").query()),
302
+ tool("browser_jsdom_query", (t) => t.desc("Query a JSDOM session with a CSS selector.").string("sessionId", "Session ID").string("selector", "CSS selector").number("maxResults", "Max matches", { default: 50 }).array("attributes", { type: "string" }, "Attribute whitelist").boolean("includeText", "Include textContent", { default: true }).boolean("includeHtml", "Include outerHTML", { default: false }).boolean("includeLocation", "Include source offsets", { default: false }).required("sessionId", "selector").query()),
303
+ tool("browser_jsdom_execute", (t) => t.desc("Evaluate JS inside a JSDOM session.").string("sessionId", "Session ID").string("code", "JavaScript code").number("timeoutMs", "Timeout hint ms", { default: 5e3 }).required("sessionId", "code")),
304
+ tool("browser_jsdom_serialize", (t) => t.desc("Serialize a JSDOM session to HTML.").string("sessionId", "Session ID").string("selector", "CSS selector for a fragment").boolean("pretty", "Pretty-print", { default: false }).required("sessionId").query()),
305
+ tool("browser_jsdom_cookies", (t) => t.desc("Manage cookies on a JSDOM session. Isolated from the attached browser.").string("sessionId", "Session ID").enum("action", [
306
+ "get",
307
+ "set",
308
+ "clear"
309
+ ], "Action", { default: "get" }).string("url", "URL scope").object("cookie", {
310
+ name: {
311
+ type: "string",
312
+ description: "Name"
313
+ },
314
+ value: {
315
+ type: "string",
316
+ description: "Value"
317
+ },
318
+ domain: {
319
+ type: "string",
320
+ description: "Domain"
321
+ },
322
+ path: {
323
+ type: "string",
324
+ description: "Path"
325
+ },
326
+ expires: {
327
+ type: "string",
328
+ description: "Expiration"
329
+ },
330
+ httpOnly: {
331
+ type: "boolean",
332
+ description: "HttpOnly"
333
+ },
334
+ secure: {
335
+ type: "boolean",
336
+ description: "Secure"
337
+ },
338
+ sameSite: {
339
+ type: "string",
340
+ description: "SameSite"
341
+ },
342
+ raw: {
343
+ type: "string",
344
+ description: "Raw Set-Cookie string"
345
+ }
346
+ }, "Cookie (action=set)").destructive().requiredOpenWorld("sessionId"))
347
+ ];
348
+ //#endregion
349
+ //#region src/server/domains/browser/definitions.tools.ts
350
+ const browserTools = [
351
+ ...browserRuntimeTools,
352
+ ...browserPageCoreTools,
353
+ ...browserPageSystemTools,
354
+ ...browserSecurityStateTools,
355
+ ...behaviorTools,
356
+ ...browserJsdomToolDefinitions
357
+ ];
358
+ //#endregion
359
+ export { advancedBrowserToolDefinitions as n, browserTools as t };