@mseep/clawdcursor 1.5.5

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 (354) hide show
  1. package/CHANGELOG.md +2264 -0
  2. package/LICENSE +21 -0
  3. package/README.md +385 -0
  4. package/SECURITY.md +44 -0
  5. package/SKILL.md +503 -0
  6. package/dist/core/agent-loop/agent.d.ts +42 -0
  7. package/dist/core/agent-loop/agent.js +1023 -0
  8. package/dist/core/agent-loop/agent.js.map +1 -0
  9. package/dist/core/agent-loop/batch-tool.d.ts +25 -0
  10. package/dist/core/agent-loop/batch-tool.js +218 -0
  11. package/dist/core/agent-loop/batch-tool.js.map +1 -0
  12. package/dist/core/agent-loop/coord-scale.d.ts +72 -0
  13. package/dist/core/agent-loop/coord-scale.js +89 -0
  14. package/dist/core/agent-loop/coord-scale.js.map +1 -0
  15. package/dist/core/agent-loop/focus-guard.d.ts +24 -0
  16. package/dist/core/agent-loop/focus-guard.js +29 -0
  17. package/dist/core/agent-loop/focus-guard.js.map +1 -0
  18. package/dist/core/agent-loop/project-mcp.d.ts +97 -0
  19. package/dist/core/agent-loop/project-mcp.js +253 -0
  20. package/dist/core/agent-loop/project-mcp.js.map +1 -0
  21. package/dist/core/agent-loop/prompt.d.ts +45 -0
  22. package/dist/core/agent-loop/prompt.js +426 -0
  23. package/dist/core/agent-loop/prompt.js.map +1 -0
  24. package/dist/core/agent-loop/tool-meta.d.ts +93 -0
  25. package/dist/core/agent-loop/tool-meta.js +651 -0
  26. package/dist/core/agent-loop/tool-meta.js.map +1 -0
  27. package/dist/core/agent-loop/tools.d.ts +38 -0
  28. package/dist/core/agent-loop/tools.js +2134 -0
  29. package/dist/core/agent-loop/tools.js.map +1 -0
  30. package/dist/core/agent-loop/types.d.ts +170 -0
  31. package/dist/core/agent-loop/types.js +12 -0
  32. package/dist/core/agent-loop/types.js.map +1 -0
  33. package/dist/core/agent.d.ts +51 -0
  34. package/dist/core/agent.js +245 -0
  35. package/dist/core/agent.js.map +1 -0
  36. package/dist/core/app-categories.d.ts +67 -0
  37. package/dist/core/app-categories.js +108 -0
  38. package/dist/core/app-categories.js.map +1 -0
  39. package/dist/core/banner.d.ts +70 -0
  40. package/dist/core/banner.js +245 -0
  41. package/dist/core/banner.js.map +1 -0
  42. package/dist/core/classify/capability.d.ts +45 -0
  43. package/dist/core/classify/capability.js +78 -0
  44. package/dist/core/classify/capability.js.map +1 -0
  45. package/dist/core/decompose/llm-decomposer.d.ts +35 -0
  46. package/dist/core/decompose/llm-decomposer.js +156 -0
  47. package/dist/core/decompose/llm-decomposer.js.map +1 -0
  48. package/dist/core/decompose/parser.d.ts +27 -0
  49. package/dist/core/decompose/parser.js +101 -0
  50. package/dist/core/decompose/parser.js.map +1 -0
  51. package/dist/core/observability/correlation.d.ts +19 -0
  52. package/dist/core/observability/correlation.js +36 -0
  53. package/dist/core/observability/correlation.js.map +1 -0
  54. package/dist/core/observability/cost-meter.d.ts +51 -0
  55. package/dist/core/observability/cost-meter.js +134 -0
  56. package/dist/core/observability/cost-meter.js.map +1 -0
  57. package/dist/core/observability/logger.d.ts +61 -0
  58. package/dist/core/observability/logger.js +550 -0
  59. package/dist/core/observability/logger.js.map +1 -0
  60. package/dist/core/router/aliases.d.ts +50 -0
  61. package/dist/core/router/aliases.js +104 -0
  62. package/dist/core/router/aliases.js.map +1 -0
  63. package/dist/core/router/normalize.d.ts +41 -0
  64. package/dist/core/router/normalize.js +80 -0
  65. package/dist/core/router/normalize.js.map +1 -0
  66. package/dist/core/safety.d.ts +126 -0
  67. package/dist/core/safety.js +568 -0
  68. package/dist/core/safety.js.map +1 -0
  69. package/dist/core/sense/a11y-resolver.d.ts +73 -0
  70. package/dist/core/sense/a11y-resolver.js +76 -0
  71. package/dist/core/sense/a11y-resolver.js.map +1 -0
  72. package/dist/core/sense/fingerprint.d.ts +41 -0
  73. package/dist/core/sense/fingerprint.js +123 -0
  74. package/dist/core/sense/fingerprint.js.map +1 -0
  75. package/dist/core/sense/rank.d.ts +70 -0
  76. package/dist/core/sense/rank.js +192 -0
  77. package/dist/core/sense/rank.js.map +1 -0
  78. package/dist/core/sense/reactive-check.d.ts +40 -0
  79. package/dist/core/sense/reactive-check.js +48 -0
  80. package/dist/core/sense/reactive-check.js.map +1 -0
  81. package/dist/core/sense/snapshot.d.ts +19 -0
  82. package/dist/core/sense/snapshot.js +100 -0
  83. package/dist/core/sense/snapshot.js.map +1 -0
  84. package/dist/core/sense/types.d.ts +66 -0
  85. package/dist/core/sense/types.js +9 -0
  86. package/dist/core/sense/types.js.map +1 -0
  87. package/dist/core/sense/ui-map-anchors.d.ts +7 -0
  88. package/dist/core/sense/ui-map-anchors.js +24 -0
  89. package/dist/core/sense/ui-map-anchors.js.map +1 -0
  90. package/dist/core/sense/ui-map-elements.d.ts +5 -0
  91. package/dist/core/sense/ui-map-elements.js +33 -0
  92. package/dist/core/sense/ui-map-elements.js.map +1 -0
  93. package/dist/core/sense/ui-map-find.d.ts +56 -0
  94. package/dist/core/sense/ui-map-find.js +153 -0
  95. package/dist/core/sense/ui-map-find.js.map +1 -0
  96. package/dist/core/sense/ui-map-fuse.d.ts +4 -0
  97. package/dist/core/sense/ui-map-fuse.js +44 -0
  98. package/dist/core/sense/ui-map-fuse.js.map +1 -0
  99. package/dist/core/sense/ui-map-geom.d.ts +3 -0
  100. package/dist/core/sense/ui-map-geom.js +16 -0
  101. package/dist/core/sense/ui-map-geom.js.map +1 -0
  102. package/dist/core/sense/ui-map-holder.d.ts +58 -0
  103. package/dist/core/sense/ui-map-holder.js +87 -0
  104. package/dist/core/sense/ui-map-holder.js.map +1 -0
  105. package/dist/core/sense/ui-map-normalize.d.ts +19 -0
  106. package/dist/core/sense/ui-map-normalize.js +65 -0
  107. package/dist/core/sense/ui-map-normalize.js.map +1 -0
  108. package/dist/core/sense/ui-map-render.d.ts +4 -0
  109. package/dist/core/sense/ui-map-render.js +34 -0
  110. package/dist/core/sense/ui-map-render.js.map +1 -0
  111. package/dist/core/sense/ui-map-resolve.d.ts +41 -0
  112. package/dist/core/sense/ui-map-resolve.js +59 -0
  113. package/dist/core/sense/ui-map-resolve.js.map +1 -0
  114. package/dist/core/sense/ui-map-types.d.ts +66 -0
  115. package/dist/core/sense/ui-map-types.js +11 -0
  116. package/dist/core/sense/ui-map-types.js.map +1 -0
  117. package/dist/core/sense/ui-map.d.ts +29 -0
  118. package/dist/core/sense/ui-map.js +113 -0
  119. package/dist/core/sense/ui-map.js.map +1 -0
  120. package/dist/core/verify/assertions.d.ts +132 -0
  121. package/dist/core/verify/assertions.js +284 -0
  122. package/dist/core/verify/assertions.js.map +1 -0
  123. package/dist/index.d.ts +21 -0
  124. package/dist/index.js +24 -0
  125. package/dist/index.js.map +1 -0
  126. package/dist/llm/browser-config.d.ts +36 -0
  127. package/dist/llm/browser-config.js +83 -0
  128. package/dist/llm/browser-config.js.map +1 -0
  129. package/dist/llm/client.d.ts +268 -0
  130. package/dist/llm/client.js +1094 -0
  131. package/dist/llm/client.js.map +1 -0
  132. package/dist/llm/config.d.ts +79 -0
  133. package/dist/llm/config.js +375 -0
  134. package/dist/llm/config.js.map +1 -0
  135. package/dist/llm/credentials.d.ts +35 -0
  136. package/dist/llm/credentials.js +491 -0
  137. package/dist/llm/credentials.js.map +1 -0
  138. package/dist/llm/external-creds.d.ts +42 -0
  139. package/dist/llm/external-creds.js +169 -0
  140. package/dist/llm/external-creds.js.map +1 -0
  141. package/dist/llm/providers.d.ts +123 -0
  142. package/dist/llm/providers.js +717 -0
  143. package/dist/llm/providers.js.map +1 -0
  144. package/dist/paths.d.ts +31 -0
  145. package/dist/paths.js +147 -0
  146. package/dist/paths.js.map +1 -0
  147. package/dist/platform/accessibility.d.ts +139 -0
  148. package/dist/platform/accessibility.js +670 -0
  149. package/dist/platform/accessibility.js.map +1 -0
  150. package/dist/platform/cdp-driver.d.ts +318 -0
  151. package/dist/platform/cdp-driver.js +1179 -0
  152. package/dist/platform/cdp-driver.js.map +1 -0
  153. package/dist/platform/index.d.ts +11 -0
  154. package/dist/platform/index.js +69 -0
  155. package/dist/platform/index.js.map +1 -0
  156. package/dist/platform/keys.d.ts +17 -0
  157. package/dist/platform/keys.js +129 -0
  158. package/dist/platform/keys.js.map +1 -0
  159. package/dist/platform/launch-poll.d.ts +101 -0
  160. package/dist/platform/launch-poll.js +177 -0
  161. package/dist/platform/launch-poll.js.map +1 -0
  162. package/dist/platform/linux.d.ts +173 -0
  163. package/dist/platform/linux.js +1253 -0
  164. package/dist/platform/linux.js.map +1 -0
  165. package/dist/platform/macos.d.ts +136 -0
  166. package/dist/platform/macos.js +976 -0
  167. package/dist/platform/macos.js.map +1 -0
  168. package/dist/platform/native-desktop.d.ts +145 -0
  169. package/dist/platform/native-desktop.js +936 -0
  170. package/dist/platform/native-desktop.js.map +1 -0
  171. package/dist/platform/native-helper.d.ts +130 -0
  172. package/dist/platform/native-helper.js +592 -0
  173. package/dist/platform/native-helper.js.map +1 -0
  174. package/dist/platform/ocr-engine.d.ts +78 -0
  175. package/dist/platform/ocr-engine.js +363 -0
  176. package/dist/platform/ocr-engine.js.map +1 -0
  177. package/dist/platform/ps-runner.d.ts +28 -0
  178. package/dist/platform/ps-runner.js +228 -0
  179. package/dist/platform/ps-runner.js.map +1 -0
  180. package/dist/platform/types.d.ts +397 -0
  181. package/dist/platform/types.js +15 -0
  182. package/dist/platform/types.js.map +1 -0
  183. package/dist/platform/uri-handler.d.ts +75 -0
  184. package/dist/platform/uri-handler.js +273 -0
  185. package/dist/platform/uri-handler.js.map +1 -0
  186. package/dist/platform/wayland-backend.d.ts +53 -0
  187. package/dist/platform/wayland-backend.js +348 -0
  188. package/dist/platform/wayland-backend.js.map +1 -0
  189. package/dist/platform/windows.d.ts +232 -0
  190. package/dist/platform/windows.js +1210 -0
  191. package/dist/platform/windows.js.map +1 -0
  192. package/dist/postbuild.d.ts +10 -0
  193. package/dist/postbuild.js +98 -0
  194. package/dist/postbuild.js.map +1 -0
  195. package/dist/schema/snapshot.d.ts +33 -0
  196. package/dist/schema/snapshot.js +90 -0
  197. package/dist/schema/snapshot.js.map +1 -0
  198. package/dist/shortcuts.d.ts +30 -0
  199. package/dist/shortcuts.js +261 -0
  200. package/dist/shortcuts.js.map +1 -0
  201. package/dist/surface/cli.d.ts +7 -0
  202. package/dist/surface/cli.js +1556 -0
  203. package/dist/surface/cli.js.map +1 -0
  204. package/dist/surface/dashboard.d.ts +8 -0
  205. package/dist/surface/dashboard.js +1193 -0
  206. package/dist/surface/dashboard.js.map +1 -0
  207. package/dist/surface/doctor.d.ts +29 -0
  208. package/dist/surface/doctor.js +1514 -0
  209. package/dist/surface/doctor.js.map +1 -0
  210. package/dist/surface/format.d.ts +10 -0
  211. package/dist/surface/format.js +37 -0
  212. package/dist/surface/format.js.map +1 -0
  213. package/dist/surface/http-utility.d.ts +65 -0
  214. package/dist/surface/http-utility.js +336 -0
  215. package/dist/surface/http-utility.js.map +1 -0
  216. package/dist/surface/mcp-server.d.ts +91 -0
  217. package/dist/surface/mcp-server.js +280 -0
  218. package/dist/surface/mcp-server.js.map +1 -0
  219. package/dist/surface/onboarding.d.ts +15 -0
  220. package/dist/surface/onboarding.js +184 -0
  221. package/dist/surface/onboarding.js.map +1 -0
  222. package/dist/surface/pidfile.d.ts +79 -0
  223. package/dist/surface/pidfile.js +263 -0
  224. package/dist/surface/pidfile.js.map +1 -0
  225. package/dist/surface/readiness.d.ts +45 -0
  226. package/dist/surface/readiness.js +230 -0
  227. package/dist/surface/readiness.js.map +1 -0
  228. package/dist/surface/report.d.ts +68 -0
  229. package/dist/surface/report.js +341 -0
  230. package/dist/surface/report.js.map +1 -0
  231. package/dist/surface/skill-register.d.ts +14 -0
  232. package/dist/surface/skill-register.js +150 -0
  233. package/dist/surface/skill-register.js.map +1 -0
  234. package/dist/surface/version.d.ts +6 -0
  235. package/dist/surface/version.js +27 -0
  236. package/dist/surface/version.js.map +1 -0
  237. package/dist/tools/a11y.d.ts +8 -0
  238. package/dist/tools/a11y.js +545 -0
  239. package/dist/tools/a11y.js.map +1 -0
  240. package/dist/tools/a11y_depth.d.ts +19 -0
  241. package/dist/tools/a11y_depth.js +455 -0
  242. package/dist/tools/a11y_depth.js.map +1 -0
  243. package/dist/tools/agent.d.ts +15 -0
  244. package/dist/tools/agent.js +248 -0
  245. package/dist/tools/agent.js.map +1 -0
  246. package/dist/tools/batch.d.ts +46 -0
  247. package/dist/tools/batch.js +230 -0
  248. package/dist/tools/batch.js.map +1 -0
  249. package/dist/tools/cdp.d.ts +8 -0
  250. package/dist/tools/cdp.js +233 -0
  251. package/dist/tools/cdp.js.map +1 -0
  252. package/dist/tools/compact.d.ts +63 -0
  253. package/dist/tools/compact.js +418 -0
  254. package/dist/tools/compact.js.map +1 -0
  255. package/dist/tools/cost-class.d.ts +38 -0
  256. package/dist/tools/cost-class.js +117 -0
  257. package/dist/tools/cost-class.js.map +1 -0
  258. package/dist/tools/desktop.d.ts +9 -0
  259. package/dist/tools/desktop.js +346 -0
  260. package/dist/tools/desktop.js.map +1 -0
  261. package/dist/tools/electron_bridge.d.ts +41 -0
  262. package/dist/tools/electron_bridge.js +261 -0
  263. package/dist/tools/electron_bridge.js.map +1 -0
  264. package/dist/tools/extras.d.ts +22 -0
  265. package/dist/tools/extras.js +942 -0
  266. package/dist/tools/extras.js.map +1 -0
  267. package/dist/tools/favorites.d.ts +13 -0
  268. package/dist/tools/favorites.js +137 -0
  269. package/dist/tools/favorites.js.map +1 -0
  270. package/dist/tools/introspection.d.ts +13 -0
  271. package/dist/tools/introspection.js +55 -0
  272. package/dist/tools/introspection.js.map +1 -0
  273. package/dist/tools/ocr.d.ts +8 -0
  274. package/dist/tools/ocr.js +66 -0
  275. package/dist/tools/ocr.js.map +1 -0
  276. package/dist/tools/orchestration.d.ts +7 -0
  277. package/dist/tools/orchestration.js +377 -0
  278. package/dist/tools/orchestration.js.map +1 -0
  279. package/dist/tools/playbooks/extract-compose.d.ts +22 -0
  280. package/dist/tools/playbooks/extract-compose.js +85 -0
  281. package/dist/tools/playbooks/extract-compose.js.map +1 -0
  282. package/dist/tools/playbooks/find-replace.d.ts +11 -0
  283. package/dist/tools/playbooks/find-replace.js +56 -0
  284. package/dist/tools/playbooks/find-replace.js.map +1 -0
  285. package/dist/tools/playbooks/index.d.ts +63 -0
  286. package/dist/tools/playbooks/index.js +70 -0
  287. package/dist/tools/playbooks/index.js.map +1 -0
  288. package/dist/tools/playbooks/keys-blocklist.d.ts +24 -0
  289. package/dist/tools/playbooks/keys-blocklist.js +89 -0
  290. package/dist/tools/playbooks/keys-blocklist.js.map +1 -0
  291. package/dist/tools/registry.d.ts +40 -0
  292. package/dist/tools/registry.js +560 -0
  293. package/dist/tools/registry.js.map +1 -0
  294. package/dist/tools/safety-gate.d.ts +16 -0
  295. package/dist/tools/safety-gate.js +70 -0
  296. package/dist/tools/safety-gate.js.map +1 -0
  297. package/dist/tools/scheduler.d.ts +76 -0
  298. package/dist/tools/scheduler.js +413 -0
  299. package/dist/tools/scheduler.js.map +1 -0
  300. package/dist/tools/shortcuts.d.ts +13 -0
  301. package/dist/tools/shortcuts.js +205 -0
  302. package/dist/tools/shortcuts.js.map +1 -0
  303. package/dist/tools/smart.d.ts +15 -0
  304. package/dist/tools/smart.js +785 -0
  305. package/dist/tools/smart.js.map +1 -0
  306. package/dist/tools/types.d.ts +174 -0
  307. package/dist/tools/types.js +67 -0
  308. package/dist/tools/types.js.map +1 -0
  309. package/dist/tools/window-text.d.ts +15 -0
  310. package/dist/tools/window-text.js +39 -0
  311. package/dist/tools/window-text.js.map +1 -0
  312. package/dist/types.d.ts +122 -0
  313. package/dist/types.js +41 -0
  314. package/dist/types.js.map +1 -0
  315. package/native/Package.swift +38 -0
  316. package/native/README.md +113 -0
  317. package/native/Sources/ClawdCursorHelper/main.swift +602 -0
  318. package/native/Sources/ClawdCursorHost/main.swift +182 -0
  319. package/native/Sources/PermissionCheck/main.swift +53 -0
  320. package/native/Sources/ScreenshotHelper/main.swift +219 -0
  321. package/native/build.sh +139 -0
  322. package/native/entitlements.plist +12 -0
  323. package/package.json +115 -0
  324. package/scripts/banner.ps1 +112 -0
  325. package/scripts/coord-accuracy.ps1 +140 -0
  326. package/scripts/coord-uwp.ps1 +80 -0
  327. package/scripts/edge-glow.ps1 +180 -0
  328. package/scripts/find-element.ps1 +198 -0
  329. package/scripts/get-foreground-window.ps1 +71 -0
  330. package/scripts/get-screen-context.ps1 +183 -0
  331. package/scripts/get-windows.ps1 +66 -0
  332. package/scripts/install-panic-hotkey.ps1 +46 -0
  333. package/scripts/interact-element.ps1 +431 -0
  334. package/scripts/invoke-element.ps1 +314 -0
  335. package/scripts/linux/atspi-bridge.py +356 -0
  336. package/scripts/linux/ocr-recognize.py +154 -0
  337. package/scripts/mac/_window-picker.jxa +163 -0
  338. package/scripts/mac/find-element.jxa +0 -0
  339. package/scripts/mac/find-element.sh +161 -0
  340. package/scripts/mac/focus-window.jxa +284 -0
  341. package/scripts/mac/get-focused-element.jxa +102 -0
  342. package/scripts/mac/get-foreground-window.jxa +173 -0
  343. package/scripts/mac/get-screen-context.jxa +197 -0
  344. package/scripts/mac/get-ui-tree.sh +141 -0
  345. package/scripts/mac/get-windows.jxa +117 -0
  346. package/scripts/mac/interact-element.sh +235 -0
  347. package/scripts/mac/invoke-element.jxa +408 -0
  348. package/scripts/mac/ocr-recognize.swift +124 -0
  349. package/scripts/ocr-recognize.ps1 +102 -0
  350. package/scripts/postinstall-native.js +48 -0
  351. package/scripts/ps-bridge.ps1 +830 -0
  352. package/scripts/smoke-mcp.ps1 +119 -0
  353. package/scripts/sync-version.ts +178 -0
  354. package/scripts/verify-install.js +81 -0
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ /**
3
+ * Browser CDP tools — interact with web page DOM via Chrome DevTools Protocol.
4
+ *
5
+ * Structured access to browser page elements without screenshots.
6
+ * Requires: Edge/Chrome running with --remote-debugging-port
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.getCdpTools = getCdpTools;
10
+ const browser_config_1 = require("../llm/browser-config");
11
+ function getCdpTools() {
12
+ return [
13
+ {
14
+ name: 'cdp_connect',
15
+ description: `Connect to Edge/Chrome browser via Chrome DevTools Protocol (port ${browser_config_1.DEFAULT_CDP_PORT}). Must be called before other cdp_* tools. Use navigate_browser to launch Edge with CDP enabled.`,
16
+ parameters: {},
17
+ category: 'browser',
18
+ compactGroup: 'browser',
19
+ safetyTier: 1,
20
+ handler: async (_params, ctx) => {
21
+ try {
22
+ await ctx.cdp.disconnect();
23
+ }
24
+ catch { /* ignore */ }
25
+ const ok = await ctx.cdp.connect();
26
+ if (ok) {
27
+ const url = await ctx.cdp.getUrl();
28
+ const title = await ctx.cdp.getTitle();
29
+ // cdp_connect ATTACHES to whatever browser is already on the debug
30
+ // port — which is typically the USER'S own session. Disclose it so
31
+ // the agent knows navigation/tab actions affect the user's tabs, not
32
+ // a private instance (gauntlet F2).
33
+ return { text: `Attached to the EXISTING browser on port ${browser_config_1.DEFAULT_CDP_PORT}: "${title}" at ${url}. ⚠ This is likely the user's own session — reads see their current page; the first navigation automatically opens the agent's OWN tab so their tabs are never navigated away. Do not close their tabs/windows.` };
34
+ }
35
+ return { text: `Failed to connect to CDP on port ${browser_config_1.DEFAULT_CDP_PORT}. Use navigate_browser to launch Edge with CDP.`, isError: true };
36
+ },
37
+ },
38
+ {
39
+ name: 'cdp_page_context',
40
+ description: 'Get a structured list of interactive elements on the current browser page (inputs, buttons, links with selectors and positions).',
41
+ parameters: {},
42
+ category: 'browser',
43
+ compactGroup: 'browser',
44
+ safetyTier: 0,
45
+ handler: async (_params, ctx) => {
46
+ if (!(await ctx.cdp.isConnected()))
47
+ return { text: 'Not connected to CDP. Call cdp_connect first.', isError: true };
48
+ const context = await ctx.cdp.getPageContext();
49
+ return { text: context };
50
+ },
51
+ },
52
+ {
53
+ name: 'cdp_read_text',
54
+ description: 'Read text content from a DOM element. Useful for extracting information from web pages.',
55
+ parameters: {
56
+ selector: { type: 'string', description: 'CSS selector (default: "body" for full page text)', required: false },
57
+ maxLength: { type: 'number', description: 'Max characters to return (default: 3000)', required: false },
58
+ },
59
+ category: 'browser',
60
+ compactGroup: 'browser',
61
+ safetyTier: 0,
62
+ handler: async ({ selector, maxLength }, ctx) => {
63
+ if (!(await ctx.cdp.isConnected()))
64
+ return { text: 'Not connected to CDP. Call cdp_connect first.', isError: true };
65
+ const text = await ctx.cdp.readText(selector ?? 'body', maxLength ?? 3000);
66
+ return { text };
67
+ },
68
+ },
69
+ {
70
+ name: 'cdp_click',
71
+ description: 'Click a DOM element by CSS selector or by visible text content.',
72
+ parameters: {
73
+ selector: { type: 'string', description: 'CSS selector to click (e.g. "#submit", "button.primary")', required: false },
74
+ text: { type: 'string', description: 'Visible text of the element to click (alternative to selector)', required: false },
75
+ },
76
+ category: 'browser',
77
+ compactGroup: 'browser',
78
+ safetyTier: 1,
79
+ handler: async ({ selector, text }, ctx) => {
80
+ if (!(await ctx.cdp.isConnected()))
81
+ return { text: 'Not connected to CDP. Call cdp_connect first.', isError: true };
82
+ if (!selector && !text)
83
+ return { text: 'Provide either selector or text parameter.', isError: true };
84
+ const result = text ? await ctx.cdp.clickByText(text) : await ctx.cdp.click(selector);
85
+ return {
86
+ text: result.success ? `Clicked: ${selector || `"${text}"`} (method: ${result.method})` : `Click failed: ${result.error}`,
87
+ isError: !result.success,
88
+ };
89
+ },
90
+ },
91
+ {
92
+ name: 'cdp_type',
93
+ description: 'Type text into a DOM input field by CSS selector or by associated label text.',
94
+ parameters: {
95
+ selector: { type: 'string', description: 'CSS selector for the input field', required: false },
96
+ label: { type: 'string', description: 'Label text associated with the input (alternative to selector)', required: false },
97
+ text: { type: 'string', description: 'Text to type into the field', required: true },
98
+ },
99
+ category: 'browser',
100
+ compactGroup: 'browser',
101
+ safetyTier: 1,
102
+ handler: async ({ selector, label, text }, ctx) => {
103
+ if (!(await ctx.cdp.isConnected()))
104
+ return { text: 'Not connected to CDP. Call cdp_connect first.', isError: true };
105
+ if (!selector && !label)
106
+ return { text: 'Provide either selector or label parameter.', isError: true };
107
+ const result = label ? await ctx.cdp.typeByLabel(label, text) : await ctx.cdp.typeInField(selector, text);
108
+ return {
109
+ text: result.success ? `Typed "${text.substring(0, 60)}" into ${selector || `label="${label}"`}` : `Type failed: ${result.error}`,
110
+ isError: !result.success,
111
+ };
112
+ },
113
+ },
114
+ {
115
+ name: 'cdp_select_option',
116
+ description: 'Select an option in a <select> dropdown by value or visible text.',
117
+ parameters: {
118
+ selector: { type: 'string', description: 'CSS selector for the <select> element', required: true },
119
+ value: { type: 'string', description: 'Option value or visible text to select', required: true },
120
+ },
121
+ category: 'browser',
122
+ compactGroup: 'browser',
123
+ safetyTier: 1,
124
+ handler: async ({ selector, value }, ctx) => {
125
+ if (!(await ctx.cdp.isConnected()))
126
+ return { text: 'Not connected to CDP. Call cdp_connect first.', isError: true };
127
+ const result = await ctx.cdp.selectOption(selector, value);
128
+ return { text: result.success ? `Selected "${value}" in ${selector}` : `Select failed: ${result.error}`, isError: !result.success };
129
+ },
130
+ },
131
+ {
132
+ name: 'cdp_evaluate',
133
+ description: 'Execute JavaScript in the browser page context. Returns the result.',
134
+ parameters: {
135
+ javascript: { type: 'string', description: 'JavaScript code to evaluate in the page', required: true },
136
+ },
137
+ category: 'browser',
138
+ compactGroup: 'browser',
139
+ safetyTier: 3,
140
+ handler: async ({ javascript }, ctx) => {
141
+ if (!(await ctx.cdp.isConnected()))
142
+ return { text: 'Not connected to CDP. Call cdp_connect first.', isError: true };
143
+ try {
144
+ const result = await ctx.cdp.evaluate(javascript);
145
+ const text = typeof result === 'string' ? result : JSON.stringify(result, null, 2);
146
+ return { text: text ?? '(undefined)' };
147
+ }
148
+ catch (e) {
149
+ return { text: `JS error: ${e.message}`, isError: true };
150
+ }
151
+ },
152
+ },
153
+ {
154
+ name: 'cdp_wait_for_selector',
155
+ description: 'Wait for a DOM element matching a CSS selector to appear and become visible.',
156
+ parameters: {
157
+ selector: { type: 'string', description: 'CSS selector to wait for', required: true },
158
+ timeout: { type: 'number', description: 'Timeout in milliseconds (default: 10000)', required: false },
159
+ },
160
+ category: 'browser',
161
+ compactGroup: 'browser',
162
+ safetyTier: 0,
163
+ handler: async ({ selector, timeout }, ctx) => {
164
+ if (!(await ctx.cdp.isConnected()))
165
+ return { text: 'Not connected to CDP. Call cdp_connect first.', isError: true };
166
+ const result = await ctx.cdp.waitForSelector(selector, timeout ?? 10000);
167
+ return { text: result.success ? `Element "${selector}" found` : `Wait failed: ${result.error}`, isError: !result.success };
168
+ },
169
+ },
170
+ {
171
+ name: 'cdp_list_tabs',
172
+ description: 'List all open browser tabs with their URLs and titles.',
173
+ parameters: {},
174
+ category: 'browser',
175
+ compactGroup: 'browser',
176
+ safetyTier: 0,
177
+ handler: async () => {
178
+ try {
179
+ const resp = await fetch(`http://127.0.0.1:${browser_config_1.DEFAULT_CDP_PORT}/json`);
180
+ const tabs = await resp.json();
181
+ const pages = tabs.filter((t) => t.type === 'page' && !t.url.startsWith('edge://') && !t.url.startsWith('chrome://'));
182
+ if (!pages.length)
183
+ return { text: '(no tabs found)' };
184
+ const lines = pages.map((t, i) => `${i + 1}. "${t.title}" — ${t.url}`);
185
+ return { text: lines.join('\n') };
186
+ }
187
+ catch {
188
+ return { text: `Cannot list tabs. Use navigate_browser first to launch Edge with CDP on port ${browser_config_1.DEFAULT_CDP_PORT}.`, isError: true };
189
+ }
190
+ },
191
+ },
192
+ {
193
+ name: 'cdp_switch_tab',
194
+ description: 'Switch CDP connection to a different browser tab by URL or title substring.',
195
+ parameters: {
196
+ target: { type: 'string', description: 'URL or title substring to match', required: true },
197
+ },
198
+ category: 'browser',
199
+ compactGroup: 'browser',
200
+ safetyTier: 1,
201
+ handler: async ({ target }, ctx) => {
202
+ if (!(await ctx.cdp.isConnected()))
203
+ return { text: 'Not connected to CDP. Call cdp_connect first.', isError: true };
204
+ const ok = await ctx.cdp.switchTab(target);
205
+ if (ok) {
206
+ const url = await ctx.cdp.getUrl();
207
+ const title = await ctx.cdp.getTitle();
208
+ return { text: `Switched to: "${title}" at ${url}` };
209
+ }
210
+ return { text: `No tab matching "${target}" found.`, isError: true };
211
+ },
212
+ },
213
+ {
214
+ name: 'cdp_scroll',
215
+ description: 'Scroll the browser page via DOM (window.scrollBy). Works regardless of mouse position — use for reliable page scrolling.',
216
+ parameters: {
217
+ direction: { type: 'string', description: 'Scroll direction', required: true, enum: ['up', 'down'] },
218
+ amount: { type: 'number', description: 'Pixels to scroll (default: 500)', required: false },
219
+ },
220
+ category: 'browser',
221
+ compactGroup: 'browser',
222
+ safetyTier: 1,
223
+ handler: async ({ direction, amount }, ctx) => {
224
+ if (!(await ctx.cdp.isConnected()))
225
+ return { text: 'Not connected to CDP. Call cdp_connect first.', isError: true };
226
+ const pixels = (amount ?? 500) * (direction === 'down' ? 1 : -1);
227
+ await ctx.cdp.evaluate(`window.scrollBy(0, ${pixels})`);
228
+ return { text: `Scrolled ${direction} by ${Math.abs(pixels)} pixels` };
229
+ },
230
+ },
231
+ ];
232
+ }
233
+ //# sourceMappingURL=cdp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdp.js","sourceRoot":"","sources":["../../src/tools/cdp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Compact MCP surface — 6 compound tools covering every granular
3
+ * primitive, Anthropic-Computer-Use-style.
4
+ *
5
+ * Why this exists:
6
+ * An agent driving clawdcursor via MCP otherwise sees 97 granular
7
+ * tool schemas (~18,000 tokens of tool catalog). Most models
8
+ * over-think the choice, pick near-duplicates, and burn context.
9
+ * This file collapses the granular tools into 6 action-discriminated
10
+ * compound tools — the same "1 tool with N sub-actions" shape that
11
+ * Anthropic uses for computer_20250124.
12
+ *
13
+ * Net effect: the LLM sees ~1,500 tokens of tool catalog, picks a
14
+ * COMPOUND first (which primitive SPACE do I want?), then an
15
+ * ACTION (which specific operation?), then fills in the args.
16
+ * Decision trees shrink, accuracy rises.
17
+ *
18
+ * The 6 compounds cover EXACTLY the granular tool set — no new
19
+ * capability, no removed capability. Every compact action maps to
20
+ * exactly one granular tool via the delegation table. The granular
21
+ * surface stays available (same repo, same schemas); agents simply
22
+ * pick which shape to consume.
23
+ *
24
+ * Selection:
25
+ * `clawdcursor mcp` → 97 granular tools (back-compat)
26
+ * `clawdcursor mcp --compact` → 6 compound tools (this file)
27
+ * GET /tools?mode=compact → REST gets the same compact schemas
28
+ *
29
+ * Extending:
30
+ * Add a new granular tool → map it in the `ACTION_MAP` below under
31
+ * its owning compound. No other wiring needed; dispatcher picks it
32
+ * up automatically.
33
+ */
34
+ import type { ToolDefinition } from './types';
35
+ /**
36
+ * One row per compact sub-action.
37
+ *
38
+ * compound: which compound tool the LLM calls (computer/accessibility/…)
39
+ * action: the enum value for that compound's `action` arg
40
+ * delegate: the granular tool name to dispatch to
41
+ * argRemap: optional — rename fields before handing off (e.g. the
42
+ * compound's `combo` → granular `key_press`'s `key`).
43
+ */
44
+ interface ActionRoute {
45
+ action: string;
46
+ delegate: string;
47
+ argRemap?: Record<string, string>;
48
+ }
49
+ /**
50
+ * Shared runtime: look up the granular tool for a compact (compound,
51
+ * action) pair, optionally remap args, then hand off. Surfacing the
52
+ * same ToolResult contract the granular tool returns.
53
+ */
54
+ /**
55
+ * Index of every compound's action table — lets a misrouted action point the
56
+ * caller at the compound that actually owns it (e.g. `system open_app` →
57
+ * "that action is on `window`"), instead of a dead-end "unknown action".
58
+ */
59
+ export declare const COMPOUND_ROUTE_INDEX: Record<string, ActionRoute[]>;
60
+ export declare function getCompactTools(): ToolDefinition[];
61
+ /** Names of all compact tools (for tier + doc lookups). */
62
+ export declare const COMPACT_TOOL_NAMES: readonly ["computer", "accessibility", "window", "system", "browser", "task", "batch"];
63
+ export {};