@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,592 @@
1
+ "use strict";
2
+ /**
3
+ * ClawdCursor Native Helper Integration (macOS only)
4
+ * Communicates with the Swift helper via JSON-RPC over stdio
5
+ *
6
+ * On non-macOS platforms, all methods are no-ops or return appropriate defaults.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.NativeHelper = void 0;
43
+ exports.getNativeHelper = getNativeHelper;
44
+ exports.checkPermissionsQuick = checkPermissionsQuick;
45
+ exports.requestPermissions = requestPermissions;
46
+ exports.isHostRunning = isHostRunning;
47
+ exports.ensureHostAppRunning = ensureHostAppRunning;
48
+ exports.stopHostApp = stopHostApp;
49
+ exports.captureScreenViaHelper = captureScreenViaHelper;
50
+ exports.isMacOS = isMacOS;
51
+ const child_process_1 = require("child_process");
52
+ const path = __importStar(require("path"));
53
+ const fs = __importStar(require("fs"));
54
+ const os = __importStar(require("os"));
55
+ const readline = __importStar(require("readline"));
56
+ const crypto = __importStar(require("crypto"));
57
+ const paths_1 = require("../paths");
58
+ const IS_MACOS = process.platform === 'darwin';
59
+ const HOST_PORT = parseInt(process.env.CLAWDCURSOR_HOST_PORT || '3848', 10);
60
+ const HOST_BASE_URL = `http://127.0.0.1:${HOST_PORT}`;
61
+ class NativeHelper {
62
+ process = null;
63
+ requestId = 0;
64
+ pendingRequests = new Map();
65
+ readline = null;
66
+ useHostIpc = IS_MACOS;
67
+ /**
68
+ * Check if native helper is available (macOS only)
69
+ */
70
+ isAvailable() {
71
+ if (!IS_MACOS)
72
+ return false;
73
+ try {
74
+ this.getHelperPath();
75
+ return true;
76
+ }
77
+ catch {
78
+ return false;
79
+ }
80
+ }
81
+ getHelperPath(binary = 'clawdcursor-helper') {
82
+ if (!IS_MACOS) {
83
+ throw new Error('Native helper is only available on macOS');
84
+ }
85
+ // Look for the helper in various locations
86
+ const root = (0, paths_1.getPackageRoot)();
87
+ const locations = [
88
+ // Development: native/ClawdCursor.app
89
+ path.join(root, 'native', 'ClawdCursor.app', 'Contents', 'MacOS', binary),
90
+ // Installed via npm: node_modules/.clawdcursor/ClawdCursor.app
91
+ path.join(root, 'node_modules', '.clawdcursor', 'ClawdCursor.app', 'Contents', 'MacOS', binary),
92
+ // Global install
93
+ path.join(os.homedir(), '.clawdcursor', 'ClawdCursor.app', 'Contents', 'MacOS', binary),
94
+ ];
95
+ for (const loc of locations) {
96
+ if (fs.existsSync(loc)) {
97
+ return loc;
98
+ }
99
+ }
100
+ throw new Error('ClawdCursor native helper not found. On macOS, run: cd native && ./build.sh\n' +
101
+ 'Searched locations:\n' + locations.map(l => ` - ${l}`).join('\n'));
102
+ }
103
+ async start() {
104
+ if (!IS_MACOS) {
105
+ throw new Error('Native helper is only available on macOS');
106
+ }
107
+ if (this.useHostIpc) {
108
+ await ensureHostAppRunning();
109
+ return;
110
+ }
111
+ if (this.process)
112
+ return;
113
+ const helperPath = this.getHelperPath();
114
+ this.process = (0, child_process_1.spawn)(helperPath, [], {
115
+ stdio: ['pipe', 'pipe', 'pipe'],
116
+ });
117
+ this.readline = readline.createInterface({
118
+ input: this.process.stdout,
119
+ crlfDelay: Infinity,
120
+ });
121
+ this.readline.on('line', (line) => {
122
+ try {
123
+ const response = JSON.parse(line);
124
+ const pending = this.pendingRequests.get(response.id);
125
+ if (pending) {
126
+ this.pendingRequests.delete(response.id);
127
+ if (response.error) {
128
+ pending.reject(new Error(`${response.error.message} (code ${response.error.code})`));
129
+ }
130
+ else {
131
+ pending.resolve(response.result);
132
+ }
133
+ }
134
+ }
135
+ catch {
136
+ // Ignore non-JSON lines (could be debug output)
137
+ }
138
+ });
139
+ this.process.stderr?.on('data', (data) => {
140
+ const msg = data.toString();
141
+ // Check for permission errors
142
+ if (msg.includes('accessibility_denied') || msg.includes('screen_recording_denied')) {
143
+ console.error(`\n⚠️ Permission Error:\n${msg}`);
144
+ }
145
+ });
146
+ this.process.on('exit', (code) => {
147
+ this.process = null;
148
+ this.readline = null;
149
+ // Reject all pending requests
150
+ for (const [id, pending] of this.pendingRequests) {
151
+ pending.reject(new Error(`Helper process exited with code ${code}`));
152
+ this.pendingRequests.delete(id);
153
+ }
154
+ });
155
+ }
156
+ async stop() {
157
+ if (this.useHostIpc)
158
+ return;
159
+ if (this.process) {
160
+ this.process.kill();
161
+ this.process = null;
162
+ this.readline = null;
163
+ }
164
+ }
165
+ async call(method, params) {
166
+ const id = ++this.requestId;
167
+ const request = { id, method, params };
168
+ const timeoutMs = method === 'captureScreen' ? 90000 : 30000;
169
+ if (this.useHostIpc) {
170
+ await ensureHostAppRunning();
171
+ const res = await fetch(`${HOST_BASE_URL}/rpc`, {
172
+ method: 'POST',
173
+ headers: {
174
+ 'Content-Type': 'application/json',
175
+ 'x-clawdcursor-token': getOrCreateHostToken(),
176
+ },
177
+ body: JSON.stringify(request),
178
+ signal: AbortSignal.timeout(timeoutMs),
179
+ });
180
+ if (!res.ok) {
181
+ throw new Error(`Host IPC call failed (${res.status})`);
182
+ }
183
+ const rpc = await res.json();
184
+ if (rpc.error) {
185
+ throw new Error(`${rpc.error.message} (code ${rpc.error.code})`);
186
+ }
187
+ return rpc.result;
188
+ }
189
+ if (!this.process) {
190
+ await this.start();
191
+ }
192
+ return new Promise((resolve, reject) => {
193
+ // Guard against process dying between start() and write()
194
+ if (!this.process?.stdin) {
195
+ reject(new Error('Helper process not available'));
196
+ return;
197
+ }
198
+ const timeout = setTimeout(() => {
199
+ this.pendingRequests.delete(id);
200
+ reject(new Error(`Request ${method} timed out after ${timeoutMs}ms`));
201
+ }, timeoutMs);
202
+ this.pendingRequests.set(id, {
203
+ resolve: (value) => {
204
+ clearTimeout(timeout);
205
+ resolve(value);
206
+ },
207
+ reject: (error) => {
208
+ clearTimeout(timeout);
209
+ reject(error);
210
+ }
211
+ });
212
+ this.process.stdin.write(JSON.stringify(request) + '\n');
213
+ });
214
+ }
215
+ // MARK: - Public API
216
+ async checkPermissions() {
217
+ return this.call('checkPermissions');
218
+ }
219
+ async traverseAccessibilityTree(pid, options) {
220
+ return this.call('traverseAccessibilityTree', { pid, ...options });
221
+ }
222
+ async click(x, y, options) {
223
+ return this.call('click', { x, y, ...options });
224
+ }
225
+ async moveMouse(x, y) {
226
+ return this.call('moveMouse', { x, y });
227
+ }
228
+ async dragMouse(startX, startY, endX, endY) {
229
+ return this.call('dragMouse', { startX, startY, endX, endY });
230
+ }
231
+ async type(text, options) {
232
+ return this.call('type', { text, ...options });
233
+ }
234
+ async pressKey(key, modifiers) {
235
+ return this.call('pressKey', { key, modifiers });
236
+ }
237
+ async openApp(name, bundleId) {
238
+ return this.call('openApp', { name, bundleId });
239
+ }
240
+ async getWindowList() {
241
+ return this.call('getWindowList');
242
+ }
243
+ async captureScreen() {
244
+ return this.call('captureScreen');
245
+ }
246
+ }
247
+ exports.NativeHelper = NativeHelper;
248
+ // Singleton instance
249
+ let instance = null;
250
+ function getNativeHelper() {
251
+ if (!instance) {
252
+ instance = new NativeHelper();
253
+ // Cleanup on process exit
254
+ process.on('exit', () => {
255
+ instance?.stop();
256
+ });
257
+ process.on('SIGTERM', () => {
258
+ instance?.stop();
259
+ process.exit(0);
260
+ });
261
+ process.on('SIGINT', () => {
262
+ instance?.stop();
263
+ process.exit(0);
264
+ });
265
+ }
266
+ return instance;
267
+ }
268
+ // Functional permission probes — test what ClawdCursor can ACTUALLY do.
269
+ // The permission-check binary reports the app bundle's TCC grants, but these
270
+ // can differ from the terminal's grants. We probe using the same binaries
271
+ // that clawdcursor agent/doctor use, so status matches reality.
272
+ async function probeScreenRecording() {
273
+ // Try screenshot-helper first (the actual capture mechanism clawdcursor uses)
274
+ const screenshotHelperPath = getNativeHelperPath('screenshot-helper');
275
+ if (fs.existsSync(screenshotHelperPath)) {
276
+ const ok = await new Promise((resolve) => {
277
+ const tmp = `/tmp/.clawdcursor-probe-${process.pid}.png`;
278
+ const proc = (0, child_process_1.spawn)(screenshotHelperPath, ['--fullscreen', tmp]);
279
+ const timeout = setTimeout(() => { proc.kill(); resolve(false); }, 5000);
280
+ proc.on('close', (code) => {
281
+ clearTimeout(timeout);
282
+ try {
283
+ if (code === 0 && fs.existsSync(tmp) && fs.statSync(tmp).size > 100) {
284
+ fs.unlinkSync(tmp);
285
+ resolve(true);
286
+ }
287
+ else {
288
+ try {
289
+ fs.unlinkSync(tmp);
290
+ }
291
+ catch { /* */ }
292
+ resolve(false);
293
+ }
294
+ }
295
+ catch {
296
+ resolve(false);
297
+ }
298
+ });
299
+ });
300
+ if (ok)
301
+ return true;
302
+ }
303
+ // Fallback: try screencapture (tests the terminal's own TCC grant)
304
+ return new Promise((resolve) => {
305
+ const tmp = `/tmp/.clawdcursor-probe2-${process.pid}.png`;
306
+ const proc = (0, child_process_1.spawn)('screencapture', ['-x', '-t', 'png', tmp]);
307
+ const timeout = setTimeout(() => { proc.kill(); resolve(false); }, 5000);
308
+ proc.on('close', (code) => {
309
+ clearTimeout(timeout);
310
+ try {
311
+ if (code === 0 && fs.existsSync(tmp) && fs.statSync(tmp).size > 100) {
312
+ fs.unlinkSync(tmp);
313
+ resolve(true);
314
+ }
315
+ else {
316
+ try {
317
+ fs.unlinkSync(tmp);
318
+ }
319
+ catch { /* */ }
320
+ resolve(false);
321
+ }
322
+ }
323
+ catch {
324
+ resolve(false);
325
+ }
326
+ });
327
+ });
328
+ }
329
+ async function probeAccessibility() {
330
+ // Must test actual WINDOW access — process enumeration works without assistive access,
331
+ // but window/UI element queries require it. This matches what isShellAvailable() checks.
332
+ return new Promise((resolve) => {
333
+ const proc = (0, child_process_1.spawn)('osascript', ['-l', 'JavaScript', '-e',
334
+ 'var se = Application("System Events"); ' +
335
+ 'var p = se.processes.whose({frontmost: true})[0]; ' +
336
+ 'p.windows.length; true']);
337
+ const timeout = setTimeout(() => { proc.kill(); resolve(false); }, 5000);
338
+ let stdout = '';
339
+ proc.stdout.on('data', (d) => { stdout += d; });
340
+ proc.on('close', (code) => {
341
+ clearTimeout(timeout);
342
+ resolve(code === 0 && stdout.trim().length > 0);
343
+ });
344
+ });
345
+ }
346
+ // Quick permission check (doesn't need full helper running)
347
+ // On non-macOS platforms, returns permissions as granted (not applicable)
348
+ // Uses functional probes to test the terminal's actual capabilities,
349
+ // merged with the app bundle's permission-check for best accuracy.
350
+ async function checkPermissionsQuick() {
351
+ // On non-macOS platforms, permissions aren't needed in the same way
352
+ if (!IS_MACOS) {
353
+ return {
354
+ accessibility: true, // Not applicable on Windows/Linux
355
+ screenRecording: true,
356
+ processPath: process.execPath,
357
+ bundleId: undefined,
358
+ };
359
+ }
360
+ // Try native binary first (checks the app bundle's TCC grants)
361
+ let binaryResult = null;
362
+ if (await isHostRunning()) {
363
+ try {
364
+ const res = await fetch(`${HOST_BASE_URL}/status`, { signal: AbortSignal.timeout(5000) });
365
+ if (res.ok) {
366
+ binaryResult = await res.json();
367
+ }
368
+ }
369
+ catch { /* fall through */ }
370
+ }
371
+ if (!binaryResult) {
372
+ const permissionCheckPath = getNativeHelperPath('permission-check');
373
+ if (fs.existsSync(permissionCheckPath)) {
374
+ try {
375
+ binaryResult = await new Promise((resolve, reject) => {
376
+ const proc = (0, child_process_1.spawn)(permissionCheckPath, []);
377
+ let stdout = '';
378
+ const timeout = setTimeout(() => { proc.kill(); reject(new Error('timeout')); }, 10000);
379
+ proc.stdout.on('data', (data) => { stdout += data; });
380
+ proc.on('close', (code) => {
381
+ clearTimeout(timeout);
382
+ if (code !== 0) {
383
+ reject(new Error('non-zero exit'));
384
+ return;
385
+ }
386
+ try {
387
+ resolve(JSON.parse(stdout));
388
+ }
389
+ catch {
390
+ reject(new Error('parse error'));
391
+ }
392
+ });
393
+ });
394
+ }
395
+ catch { /* fall through to probes */ }
396
+ }
397
+ }
398
+ // Functional probes — test what the terminal can ACTUALLY do.
399
+ // If the binary says denied but the probe succeeds, the terminal has the permission.
400
+ // If the binary says granted, trust it (no need to probe).
401
+ const [probeScreen, probeAx] = await Promise.all([
402
+ (binaryResult?.screenRecording) ? Promise.resolve(true) : probeScreenRecording(),
403
+ (binaryResult?.accessibility) ? Promise.resolve(true) : probeAccessibility(),
404
+ ]);
405
+ return {
406
+ accessibility: (binaryResult?.accessibility ?? false) || probeAx,
407
+ screenRecording: (binaryResult?.screenRecording ?? false) || probeScreen,
408
+ processPath: binaryResult?.processPath ?? process.execPath,
409
+ bundleId: binaryResult?.bundleId ?? undefined,
410
+ };
411
+ }
412
+ // Request permissions with system popups (triggers macOS permission dialogs)
413
+ // Spawns permission-check with --prompt (Accessibility) and --request-screen-recording flags
414
+ async function requestPermissions() {
415
+ if (!IS_MACOS) {
416
+ return {
417
+ accessibility: true,
418
+ screenRecording: true,
419
+ processPath: process.execPath,
420
+ bundleId: undefined,
421
+ };
422
+ }
423
+ const permissionCheckPath = getNativeHelperPath('permission-check');
424
+ if (!fs.existsSync(permissionCheckPath)) {
425
+ throw new Error('permission-check binary not found. Run: cd native && ./build.sh');
426
+ }
427
+ return new Promise((resolve, reject) => {
428
+ const proc = (0, child_process_1.spawn)(permissionCheckPath, ['--prompt', '--request-screen-recording']);
429
+ let stdout = '';
430
+ let stderr = '';
431
+ const timeout = setTimeout(() => {
432
+ proc.kill();
433
+ reject(new Error('permission-check timed out'));
434
+ }, 30000);
435
+ proc.stdout.on('data', (data) => { stdout += data; });
436
+ proc.stderr.on('data', (data) => { stderr += data; });
437
+ proc.on('close', (code) => {
438
+ clearTimeout(timeout);
439
+ if (code !== 0) {
440
+ reject(new Error(`permission-check failed: ${stderr}`));
441
+ return;
442
+ }
443
+ try {
444
+ resolve(JSON.parse(stdout));
445
+ }
446
+ catch {
447
+ reject(new Error(`Invalid permission-check output: ${stdout}`));
448
+ }
449
+ });
450
+ });
451
+ }
452
+ function getNativeHelperPath(binary) {
453
+ const root = (0, paths_1.getPackageRoot)();
454
+ const locations = [
455
+ path.join(root, 'native', 'ClawdCursor.app', 'Contents', 'MacOS', binary),
456
+ path.join(root, 'node_modules', '.clawdcursor', 'ClawdCursor.app', 'Contents', 'MacOS', binary),
457
+ path.join(os.homedir(), '.clawdcursor', 'ClawdCursor.app', 'Contents', 'MacOS', binary),
458
+ ];
459
+ for (const loc of locations) {
460
+ if (fs.existsSync(loc))
461
+ return loc;
462
+ }
463
+ throw new Error(`ClawdCursor app binary not found: ${binary}`);
464
+ }
465
+ async function isHostRunning() {
466
+ if (!IS_MACOS)
467
+ return false;
468
+ try {
469
+ const res = await fetch(`${HOST_BASE_URL}/health`, { signal: AbortSignal.timeout(1500) });
470
+ return res.ok;
471
+ }
472
+ catch {
473
+ return false;
474
+ }
475
+ }
476
+ async function ensureHostAppRunning() {
477
+ if (!IS_MACOS)
478
+ return;
479
+ if (await isHostRunning())
480
+ return;
481
+ const appExecutable = getNativeHelperPath('ClawdCursorHost');
482
+ const appPath = path.resolve(appExecutable, '..', '..', '..');
483
+ await new Promise((resolve, reject) => {
484
+ const opener = (0, child_process_1.spawn)('open', ['-a', appPath], { stdio: 'ignore' });
485
+ opener.on('error', reject);
486
+ opener.on('close', () => resolve());
487
+ });
488
+ const started = Date.now();
489
+ while (Date.now() - started < 10000) {
490
+ if (await isHostRunning())
491
+ return;
492
+ await new Promise(r => setTimeout(r, 250));
493
+ }
494
+ throw new Error('ClawdCursor host app did not start in time');
495
+ }
496
+ async function stopHostApp() {
497
+ if (!IS_MACOS)
498
+ return;
499
+ await new Promise((resolve) => {
500
+ const proc = (0, child_process_1.spawn)('osascript', ['-e', 'tell application id "com.clawdcursor.app" to quit'], { stdio: 'ignore' });
501
+ proc.on('close', () => resolve());
502
+ proc.on('error', () => resolve());
503
+ });
504
+ const started = Date.now();
505
+ while (Date.now() - started < 3000) {
506
+ if (!(await isHostRunning()))
507
+ return;
508
+ await new Promise(r => setTimeout(r, 200));
509
+ }
510
+ // stale process recovery
511
+ await new Promise((resolve) => {
512
+ const proc = (0, child_process_1.spawn)('pkill', ['-f', 'ClawdCursorHost'], { stdio: 'ignore' });
513
+ proc.on('close', () => resolve());
514
+ proc.on('error', () => resolve());
515
+ });
516
+ }
517
+ function getOrCreateHostToken() {
518
+ const dir = path.join(os.homedir(), '.clawdcursor');
519
+ const tokenPath = path.join(dir, 'host-token');
520
+ fs.mkdirSync(dir, { recursive: true });
521
+ // Cryptographically-random token (Math.random is not secure for auth), written
522
+ // with an exclusive create ('wx') so a concurrent caller can't clobber/race the
523
+ // file between a check and write — if it already exists, read the existing one.
524
+ const token = crypto.randomBytes(24).toString('hex');
525
+ try {
526
+ fs.writeFileSync(tokenPath, token, { mode: 0o600, flag: 'wx' });
527
+ return token;
528
+ }
529
+ catch (err) {
530
+ if (err.code === 'EEXIST') {
531
+ return fs.readFileSync(tokenPath, 'utf-8').trim();
532
+ }
533
+ throw err;
534
+ }
535
+ }
536
+ /**
537
+ * Capture the screen using the standalone screenshot-helper binary.
538
+ * This avoids the ReplayKit CPU spin bug (19% idle CPU after capture in-process)
539
+ * by running capture in an isolated subprocess that exits immediately.
540
+ *
541
+ * Returns { path, width, height } on success.
542
+ */
543
+ async function captureScreenViaHelper(outputPath) {
544
+ if (!IS_MACOS) {
545
+ throw new Error('screenshot-helper is only available on macOS');
546
+ }
547
+ const helperPath = getNativeHelperPath('screenshot-helper');
548
+ // Unpredictable name (not Date.now()) so a co-tenant can't pre-create/symlink
549
+ // the path the helper writes to, and rapid captures can't collide (CWE-377).
550
+ const tmpPath = outputPath || path.join(os.tmpdir(), `.clawdcursor-cap-${crypto.randomUUID()}.png`);
551
+ return new Promise((resolve, reject) => {
552
+ const proc = (0, child_process_1.spawn)(helperPath, ['--fullscreen', tmpPath]);
553
+ let stdout = '';
554
+ let stderr = '';
555
+ const timeout = setTimeout(() => {
556
+ proc.kill();
557
+ reject(new Error('screenshot-helper timed out after 15s'));
558
+ }, 15000);
559
+ proc.stdout.on('data', (data) => { stdout += data; });
560
+ proc.stderr.on('data', (data) => { stderr += data; });
561
+ proc.on('close', (code) => {
562
+ clearTimeout(timeout);
563
+ if (code === 2) {
564
+ reject(new Error('Screen Recording permission denied — grant it in System Settings → Privacy & Security'));
565
+ return;
566
+ }
567
+ if (code !== 0) {
568
+ reject(new Error(`screenshot-helper failed (exit ${code}): ${stderr}`));
569
+ return;
570
+ }
571
+ try {
572
+ const result = JSON.parse(stdout.trim());
573
+ if (result.success) {
574
+ resolve({ path: result.path, width: result.width, height: result.height });
575
+ }
576
+ else {
577
+ reject(new Error(`screenshot-helper returned failure: ${stdout}`));
578
+ }
579
+ }
580
+ catch {
581
+ reject(new Error(`Invalid screenshot-helper output: ${stdout}`));
582
+ }
583
+ });
584
+ });
585
+ }
586
+ /**
587
+ * Check if we're running on macOS
588
+ */
589
+ function isMacOS() {
590
+ return IS_MACOS;
591
+ }
592
+ //# sourceMappingURL=native-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-helper.js","sourceRoot":"","sources":["../../src/platform/native-helper.ts"],"names":[],"mappings":"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"}