@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,68 @@
1
+ /**
2
+ * Error Report — opt-in user report submission.
3
+ *
4
+ * Users can send task logs + system info to help improve the agent.
5
+ * All data is redacted before sending (no clipboard, no typed text,
6
+ * no file paths with usernames, no API keys).
7
+ *
8
+ * Privacy-first: never automatic, user must explicitly trigger.
9
+ */
10
+ export interface ErrorReport {
11
+ reportId: string;
12
+ timestamp: string;
13
+ version: string;
14
+ system: {
15
+ platform: string;
16
+ arch: string;
17
+ nodeVersion: string;
18
+ osRelease: string;
19
+ };
20
+ task?: {
21
+ description: string;
22
+ status: string;
23
+ totalSteps: number;
24
+ durationMs: number;
25
+ layersUsed: (string | number)[];
26
+ llmCallCount: number;
27
+ };
28
+ steps: RedactedStep[];
29
+ userNote?: string;
30
+ errorContext?: string;
31
+ }
32
+ interface RedactedStep {
33
+ stepIndex: number;
34
+ timestamp: string;
35
+ layer: string | number;
36
+ actionType: string;
37
+ result: string;
38
+ durationMs?: number;
39
+ error?: string;
40
+ verification?: {
41
+ method: string;
42
+ verified: boolean;
43
+ };
44
+ }
45
+ /** Build a report from a task log */
46
+ export declare function buildReport(logPath?: string, userNote?: string): ErrorReport;
47
+ /** Submit a report to the backend */
48
+ export declare function submitReport(report: ErrorReport): Promise<{
49
+ success: boolean;
50
+ reportId: string;
51
+ error?: string;
52
+ }>;
53
+ /** Save report locally (fallback if network fails) */
54
+ export declare function saveReportLocally(report: ErrorReport): string;
55
+ /** Interactive report flow — shows what will be sent, asks for confirmation */
56
+ export declare function interactiveReport(): Promise<void>;
57
+ /** Build and submit a report programmatically (for REST API) */
58
+ export declare function apiSubmitReport(opts: {
59
+ logPath?: string;
60
+ userNote?: string;
61
+ logIndex?: number;
62
+ }): Promise<{
63
+ success: boolean;
64
+ reportId: string;
65
+ preview?: ErrorReport;
66
+ error?: string;
67
+ }>;
68
+ export {};
@@ -0,0 +1,341 @@
1
+ "use strict";
2
+ /**
3
+ * Error Report — opt-in user report submission.
4
+ *
5
+ * Users can send task logs + system info to help improve the agent.
6
+ * All data is redacted before sending (no clipboard, no typed text,
7
+ * no file paths with usernames, no API keys).
8
+ *
9
+ * Privacy-first: never automatic, user must explicitly trigger.
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.buildReport = buildReport;
46
+ exports.submitReport = submitReport;
47
+ exports.saveReportLocally = saveReportLocally;
48
+ exports.interactiveReport = interactiveReport;
49
+ exports.apiSubmitReport = apiSubmitReport;
50
+ const fs = __importStar(require("fs"));
51
+ const path = __importStar(require("path"));
52
+ const os = __importStar(require("os"));
53
+ const readline = __importStar(require("readline"));
54
+ const version_1 = require("./version");
55
+ const paths_1 = require("../paths");
56
+ // ─── Configuration ──────────────────────────────────────────
57
+ const REPORT_ENDPOINT = process.env.CLAWD_REPORT_URL || 'https://api.clawdcursor.com/reports';
58
+ const LOG_DIR = paths_1.TASK_LOGS_DIR;
59
+ // ─── Redaction ───────────────────────────────────────────────
60
+ const SENSITIVE_PATTERNS = [
61
+ // API keys
62
+ /sk-[a-zA-Z0-9_-]{20,}/g,
63
+ /api[_-]?key["\s:=]+["']?[a-zA-Z0-9_-]{16,}/gi,
64
+ /bearer\s+[a-zA-Z0-9_.-]{20,}/gi,
65
+ // Auth tokens in URLs
66
+ /token=[a-zA-Z0-9_.-]{10,}/gi,
67
+ /auth=[a-zA-Z0-9_.-]{10,}/gi,
68
+ // Email addresses
69
+ /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,
70
+ ];
71
+ /** Redact user home directory from paths */
72
+ function redactPaths(text) {
73
+ const home = os.homedir().replace(/\\/g, '/');
74
+ const homeWin = os.homedir().replace(/\//g, '\\');
75
+ let result = text.replace(new RegExp(escapeRegex(home), 'gi'), '~');
76
+ result = result.replace(new RegExp(escapeRegex(homeWin), 'gi'), '~');
77
+ // Also redact common username patterns in paths
78
+ const username = os.userInfo().username;
79
+ if (username.length > 2) {
80
+ result = result.replace(new RegExp(`/Users/${escapeRegex(username)}`, 'gi'), '/Users/[REDACTED]');
81
+ result = result.replace(new RegExp(`\\\\Users\\\\${escapeRegex(username)}`, 'gi'), '\\Users\\[REDACTED]');
82
+ result = result.replace(new RegExp(`/home/${escapeRegex(username)}`, 'gi'), '/home/[REDACTED]');
83
+ }
84
+ return result;
85
+ }
86
+ function escapeRegex(str) {
87
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
88
+ }
89
+ /** Redact sensitive patterns from a string */
90
+ function redactSensitive(text) {
91
+ let result = text;
92
+ for (const pattern of SENSITIVE_PATTERNS) {
93
+ result = result.replace(pattern, '[REDACTED]');
94
+ }
95
+ return redactPaths(result);
96
+ }
97
+ /** Redact a step entry — strips typed text, clipboard, actionParams with sensitive data */
98
+ function redactStep(raw) {
99
+ const step = {
100
+ stepIndex: raw.stepIndex ?? 0,
101
+ timestamp: raw.timestamp ?? '',
102
+ layer: raw.layer ?? '',
103
+ actionType: raw.actionType ?? '',
104
+ result: raw.result ?? '',
105
+ };
106
+ if (raw.durationMs !== undefined)
107
+ step.durationMs = raw.durationMs;
108
+ if (raw.error)
109
+ step.error = redactSensitive(String(raw.error));
110
+ if (raw.verification) {
111
+ const v = raw.verification;
112
+ step.verification = {
113
+ method: v.method ?? 'unknown',
114
+ verified: v.verified ?? false,
115
+ };
116
+ }
117
+ // Deliberately omit: actionParams (may contain typed text, selectors with user data),
118
+ // llmReasoning (may reference user content), uiStateSummary (may contain screen text)
119
+ return step;
120
+ }
121
+ // ─── Report Building ────────────────────────────────────────
122
+ /** Read and parse a task log JSONL file */
123
+ function readTaskLog(logPath) {
124
+ try {
125
+ const content = fs.readFileSync(logPath, 'utf-8');
126
+ return content.trim().split('\n').map(line => {
127
+ try {
128
+ return JSON.parse(line);
129
+ }
130
+ catch {
131
+ return null;
132
+ }
133
+ }).filter(Boolean);
134
+ }
135
+ catch {
136
+ return [];
137
+ }
138
+ }
139
+ /** Get the most recent task log file path */
140
+ function getMostRecentLog() {
141
+ try {
142
+ const files = fs.readdirSync(LOG_DIR)
143
+ .filter(f => f.endsWith('.jsonl'))
144
+ .sort()
145
+ .reverse();
146
+ if (files.length === 0)
147
+ return null;
148
+ return path.join(LOG_DIR, files[0]);
149
+ }
150
+ catch {
151
+ return null;
152
+ }
153
+ }
154
+ /** Get N most recent log files */
155
+ function getRecentLogs(count) {
156
+ try {
157
+ return fs.readdirSync(LOG_DIR)
158
+ .filter(f => f.endsWith('.jsonl'))
159
+ .sort()
160
+ .reverse()
161
+ .slice(0, count)
162
+ .map(f => path.join(LOG_DIR, f));
163
+ }
164
+ catch {
165
+ return [];
166
+ }
167
+ }
168
+ /** Build a report from a task log */
169
+ function buildReport(logPath, userNote) {
170
+ const targetPath = logPath || getMostRecentLog();
171
+ const entries = targetPath ? readTaskLog(targetPath) : [];
172
+ // Separate summary from steps
173
+ const summary = entries.find(e => e._type === 'task_summary');
174
+ const steps = entries.filter(e => e._type !== 'task_summary');
175
+ const reportId = `rpt_${Date.now().toString(36)}_${Math.random().toString(36).substring(2, 6)}`;
176
+ const report = {
177
+ reportId,
178
+ timestamp: new Date().toISOString(),
179
+ version: (0, version_1.getVersion)(),
180
+ system: {
181
+ platform: process.platform,
182
+ arch: process.arch,
183
+ nodeVersion: process.version,
184
+ osRelease: os.release(),
185
+ },
186
+ steps: steps.map(redactStep),
187
+ };
188
+ if (summary) {
189
+ report.task = {
190
+ description: redactSensitive(String(summary.task || '')),
191
+ status: String(summary.status || 'unknown'),
192
+ totalSteps: summary.totalSteps ?? 0,
193
+ durationMs: summary.durationMs ?? 0,
194
+ layersUsed: summary.layersUsed ?? [],
195
+ llmCallCount: summary.llmCallCount ?? 0,
196
+ };
197
+ }
198
+ if (userNote) {
199
+ report.userNote = userNote;
200
+ }
201
+ // Check if the last step had an error
202
+ const lastStep = steps[steps.length - 1];
203
+ if (lastStep?.error) {
204
+ report.errorContext = redactSensitive(String(lastStep.error));
205
+ }
206
+ return report;
207
+ }
208
+ // ─── Submission ─────────────────────────────────────────────
209
+ /** Submit a report to the backend */
210
+ async function submitReport(report) {
211
+ try {
212
+ const resp = await fetch(REPORT_ENDPOINT, {
213
+ method: 'POST',
214
+ headers: { 'Content-Type': 'application/json' },
215
+ body: JSON.stringify(report),
216
+ signal: AbortSignal.timeout(15000),
217
+ });
218
+ if (resp.ok) {
219
+ const data = await resp.json().catch(() => ({}));
220
+ return { success: true, reportId: data.reportId ?? report.reportId };
221
+ }
222
+ return { success: false, reportId: report.reportId, error: `Server responded ${resp.status}` };
223
+ }
224
+ catch (err) {
225
+ const message = err instanceof Error ? err.message : 'Network error';
226
+ return { success: false, reportId: report.reportId, error: message };
227
+ }
228
+ }
229
+ /** Save report locally (fallback if network fails) */
230
+ function saveReportLocally(report) {
231
+ const reportDir = paths_1.REPORTS_DIR;
232
+ fs.mkdirSync(reportDir, { recursive: true });
233
+ const filePath = path.join(reportDir, `${report.reportId}.json`);
234
+ fs.writeFileSync(filePath, JSON.stringify(report, null, 2));
235
+ return filePath;
236
+ }
237
+ // ─── Interactive CLI ────────────────────────────────────────
238
+ /** Interactive report flow — shows what will be sent, asks for confirmation */
239
+ async function interactiveReport() {
240
+ const logPath = getMostRecentLog();
241
+ if (!logPath) {
242
+ console.log('\n No task logs found. Run a task first, then try again.\n');
243
+ return;
244
+ }
245
+ const logName = path.basename(logPath);
246
+ console.log(`\n Most recent task log: ${logName}`);
247
+ // Show available logs
248
+ const recentLogs = getRecentLogs(5);
249
+ if (recentLogs.length > 1) {
250
+ console.log('\n Recent logs:');
251
+ recentLogs.forEach((l, i) => {
252
+ const entries = readTaskLog(l);
253
+ const summary = entries.find(e => e._type === 'task_summary');
254
+ const task = summary?.task ? redactSensitive(String(summary.task)).substring(0, 60) : '(no summary)';
255
+ const status = summary?.status ?? 'unknown';
256
+ const marker = i === 0 ? ' [latest]' : '';
257
+ console.log(` ${i + 1}. ${path.basename(l)} — ${status} — "${task}"${marker}`);
258
+ });
259
+ }
260
+ // Build the report
261
+ const report = buildReport(logPath);
262
+ // Show preview
263
+ console.log('\n ── Report Preview ──────────────────────────────');
264
+ console.log(` Report ID: ${report.reportId}`);
265
+ console.log(` Version: ${report.version}`);
266
+ console.log(` Platform: ${report.system.platform}/${report.system.arch}`);
267
+ console.log(` Node: ${report.system.nodeVersion}`);
268
+ if (report.task) {
269
+ console.log(` Task: "${report.task.description}"`);
270
+ console.log(` Status: ${report.task.status}`);
271
+ console.log(` Steps: ${report.task.totalSteps}`);
272
+ console.log(` Duration: ${(report.task.durationMs / 1000).toFixed(1)}s`);
273
+ console.log(` LLM Calls: ${report.task.llmCallCount}`);
274
+ }
275
+ console.log(` Step data: ${report.steps.length} entries (redacted)`);
276
+ if (report.errorContext) {
277
+ console.log(` Error: ${report.errorContext}`);
278
+ }
279
+ console.log(' ────────────────────────────────────────────────');
280
+ console.log('\n Privacy: No typed text, clipboard data, screenshots,');
281
+ console.log(' or personal file paths are included.');
282
+ // Ask for optional note
283
+ const rl = readline.createInterface({
284
+ input: process.stdin,
285
+ output: process.stdout,
286
+ });
287
+ const note = await new Promise((resolve) => {
288
+ rl.question('\n Add a note (optional, press Enter to skip): ', resolve);
289
+ });
290
+ if (note.trim()) {
291
+ report.userNote = note.trim();
292
+ }
293
+ // Confirm
294
+ const confirm = await new Promise((resolve) => {
295
+ rl.question(' Send this report? (y/N) ', resolve);
296
+ });
297
+ rl.close();
298
+ if (confirm.toLowerCase() !== 'y' && confirm.toLowerCase() !== 'yes') {
299
+ // Save locally as fallback
300
+ const savedPath = saveReportLocally(report);
301
+ console.log(`\n Report saved locally: ${savedPath}`);
302
+ console.log(' You can manually share this file if needed.\n');
303
+ return;
304
+ }
305
+ // Submit
306
+ console.log('\n Sending report...');
307
+ const result = await submitReport(report);
308
+ if (result.success) {
309
+ console.log(` Report sent. ID: ${result.reportId}`);
310
+ console.log(' Thank you — this helps us make clawdcursor better.\n');
311
+ }
312
+ else {
313
+ // Save locally on failure
314
+ const savedPath = saveReportLocally(report);
315
+ console.log(` Failed to send: ${result.error}`);
316
+ console.log(` Report saved locally: ${savedPath}`);
317
+ console.log(' You can manually share this file if needed.\n');
318
+ }
319
+ }
320
+ // ─── Server API Helpers ─────────────────────────────────────
321
+ /** Build and submit a report programmatically (for REST API) */
322
+ async function apiSubmitReport(opts) {
323
+ let targetPath = opts.logPath;
324
+ if (!targetPath && opts.logIndex !== undefined) {
325
+ const logs = getRecentLogs(opts.logIndex + 1);
326
+ targetPath = logs[opts.logIndex];
327
+ }
328
+ if (!targetPath) {
329
+ targetPath = getMostRecentLog() ?? undefined;
330
+ }
331
+ if (!targetPath) {
332
+ return { success: false, reportId: '', error: 'No task logs found' };
333
+ }
334
+ const report = buildReport(targetPath, opts.userNote);
335
+ const result = await submitReport(report);
336
+ if (!result.success) {
337
+ saveReportLocally(report);
338
+ }
339
+ return { ...result, preview: report };
340
+ }
341
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/surface/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface SkillRegResult {
2
+ name: string;
3
+ ok: boolean;
4
+ detail: string;
5
+ }
6
+ export interface SkillRegSummary {
7
+ registered: number;
8
+ results: SkillRegResult[];
9
+ }
10
+ /**
11
+ * Register clawdcursor as a skill in every detected agent framework.
12
+ * Returns per-host results + how many registries got it.
13
+ */
14
+ export declare function registerSkills(folderName?: string): SkillRegSummary;
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.registerSkills = registerSkills;
37
+ /**
38
+ * Cross-framework skill registration.
39
+ *
40
+ * clawdcursor exposes the SAME capability two ways: an MCP server (typed tools)
41
+ * and a Skill (SKILL.md — the "how to use me" knowledge: fallback positioning,
42
+ * the el_NN UI map, sustainable/autonomous execution via the daemon + `task`).
43
+ * An agent that only gets the MCP tools has the hands but not the playbook.
44
+ *
45
+ * This used to run ONLY inside `clawdcursor doctor`. But doctor configures the
46
+ * autonomous daemon, and the MCP-first onboarding explicitly tells people to
47
+ * skip it — so MCP-direct users never registered the skill, and clawdcursor
48
+ * showed up as bare MCP tools with none of the guidance. Pulling it out here
49
+ * lets `consent` (always required) and `clawdcursor register-skill` install the
50
+ * skill into EVERY detected agent framework, regardless of install path.
51
+ *
52
+ * Best-effort and non-invasive: only writes into a framework's skills directory
53
+ * if that directory already exists (never creates host config the user doesn't
54
+ * have), and symlinks the package root so SKILL.md's referenced paths (scripts/,
55
+ * etc.) resolve — falling back to a plain SKILL.md copy when symlinks are blocked.
56
+ */
57
+ const fs = __importStar(require("fs"));
58
+ const path = __importStar(require("path"));
59
+ const paths_1 = require("../paths");
60
+ /** Agent frameworks that expose a skills registry, and where it lives. */
61
+ function hostRegistries(homeDir) {
62
+ return [
63
+ // Claude Code — ~/.claude/skills/<name>/SKILL.md (Skill tool + /<skill>).
64
+ ['Claude Code', path.join(homeDir, '.claude', 'skills')],
65
+ // OpenClaw — the original target. Both the workspace and flat layouts.
66
+ ['OpenClaw', path.join(homeDir, '.openclaw', 'workspace', 'skills')],
67
+ ['OpenClaw (dev)', path.join(homeDir, '.openclaw-dev', 'workspace', 'skills')],
68
+ ['OpenClaw (flat)', path.join(homeDir, '.openclaw', 'skills')],
69
+ // Codex — ~/.codex/skills.
70
+ ['Codex', path.join(homeDir, '.codex', 'skills')],
71
+ // Cursor — ~/.cursor/skills (only if the user's Cursor has skills enabled).
72
+ ['Cursor', path.join(homeDir, '.cursor', 'skills')],
73
+ ];
74
+ }
75
+ /**
76
+ * Register clawdcursor as a skill in every detected agent framework.
77
+ * Returns per-host results + how many registries got it.
78
+ */
79
+ function registerSkills(folderName = 'clawdcursor') {
80
+ const results = [];
81
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '';
82
+ if (!homeDir)
83
+ return { registered: 0, results };
84
+ const clawdCursorRoot = (0, paths_1.getPackageRoot)();
85
+ const skillSource = path.join(clawdCursorRoot, 'SKILL.md');
86
+ if (!fs.existsSync(skillSource)) {
87
+ results.push({ name: 'Skill registration', ok: false, detail: 'SKILL.md not found at package root' });
88
+ return { registered: 0, results };
89
+ }
90
+ let registered = 0;
91
+ for (const [name, skillsDir] of hostRegistries(homeDir)) {
92
+ if (!fs.existsSync(skillsDir))
93
+ continue; // framework not installed → skip silently
94
+ const skillTarget = path.join(skillsDir, folderName);
95
+ const targetSkillFile = path.join(skillTarget, 'SKILL.md');
96
+ // Already present → refresh the SKILL.md if ours is newer (so an upgrade
97
+ // propagates new guidance), otherwise leave it.
98
+ if (fs.existsSync(skillTarget)) {
99
+ try {
100
+ if (fs.existsSync(targetSkillFile)) {
101
+ const srcMtime = fs.statSync(skillSource).mtimeMs;
102
+ const dstMtime = fs.statSync(targetSkillFile).mtimeMs;
103
+ if (srcMtime > dstMtime) {
104
+ fs.copyFileSync(skillSource, targetSkillFile);
105
+ results.push({ name: `${name} skill`, ok: true, detail: 'Refreshed (SKILL.md updated)' });
106
+ }
107
+ else {
108
+ results.push({ name: `${name} skill`, ok: true, detail: 'Registered (up to date)' });
109
+ }
110
+ }
111
+ else {
112
+ fs.copyFileSync(skillSource, targetSkillFile);
113
+ results.push({ name: `${name} skill`, ok: true, detail: 'Registered (SKILL.md copied)' });
114
+ }
115
+ registered++;
116
+ }
117
+ catch {
118
+ // best-effort
119
+ }
120
+ continue;
121
+ }
122
+ // Fresh: symlink the whole package root (keeps SKILL.md's relative paths
123
+ // valid); fall back to a SKILL.md copy if symlinks are blocked.
124
+ try {
125
+ fs.symlinkSync(clawdCursorRoot, skillTarget, process.platform === 'win32' ? 'junction' : 'dir');
126
+ results.push({ name: `${name} skill`, ok: true, detail: 'Registered (symlink)' });
127
+ registered++;
128
+ }
129
+ catch {
130
+ try {
131
+ fs.mkdirSync(skillTarget, { recursive: true });
132
+ fs.copyFileSync(skillSource, targetSkillFile);
133
+ results.push({ name: `${name} skill`, ok: true, detail: 'Registered (SKILL.md copied)' });
134
+ registered++;
135
+ }
136
+ catch {
137
+ // non-critical
138
+ }
139
+ }
140
+ }
141
+ if (registered === 0) {
142
+ results.push({
143
+ name: 'Skill registration',
144
+ ok: true,
145
+ detail: 'No host registry found (Claude Code, OpenClaw, Codex, Cursor) — clawdcursor still works standalone via MCP',
146
+ });
147
+ }
148
+ return { registered, results };
149
+ }
150
+ //# sourceMappingURL=skill-register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-register.js","sourceRoot":"","sources":["../../src/surface/skill-register.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Version utilities.
3
+ * Reads package.json at runtime so CLI + API stay in sync.
4
+ */
5
+ export declare function getVersion(): string;
6
+ export declare const VERSION: string;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ /**
3
+ * Version utilities.
4
+ * Reads package.json at runtime so CLI + API stay in sync.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.VERSION = void 0;
8
+ exports.getVersion = getVersion;
9
+ const fs_1 = require("fs");
10
+ const path_1 = require("path");
11
+ const paths_1 = require("../paths");
12
+ let cachedVersion = null;
13
+ function getVersion() {
14
+ if (cachedVersion)
15
+ return cachedVersion;
16
+ try {
17
+ const pkgPath = (0, path_1.join)((0, paths_1.getPackageRoot)(), 'package.json');
18
+ const pkg = JSON.parse((0, fs_1.readFileSync)(pkgPath, 'utf-8'));
19
+ cachedVersion = pkg.version || '0.0.0';
20
+ }
21
+ catch {
22
+ cachedVersion = '0.0.0';
23
+ }
24
+ return cachedVersion;
25
+ }
26
+ exports.VERSION = getVersion();
27
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/surface/version.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAQH,gCAUC;AAhBD,2BAAkC;AAClC,+BAA4B;AAC5B,oCAA0C;AAE1C,IAAI,aAAa,GAAkB,IAAI,CAAC;AAExC,SAAgB,UAAU;IACxB,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,IAAA,sBAAc,GAAE,EAAE,cAAc,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,OAAO,EAAE,OAAO,CAAC,CAAyB,CAAC;QAC/E,aAAa,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,aAAa,GAAG,OAAO,CAAC;IAC1B,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAEY,QAAA,OAAO,GAAG,UAAU,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Accessibility & window management tools.
3
+ *
4
+ * Text-first strategy: always try read_screen before desktop_screenshot.
5
+ * Provides structured perception of the desktop without vision models.
6
+ */
7
+ import type { ToolDefinition } from './types';
8
+ export declare function getA11yTools(): ToolDefinition[];