@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,560 @@
1
+ "use strict";
2
+ /**
3
+ * Tool Registry — central registry of all clawdcursor tools.
4
+ *
5
+ * Import this to get all 40 tools in a transport-agnostic format.
6
+ * Adapters (HTTP, MCP) consume this registry.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.getCompactTools = exports.toJsonSchema = exports.toOpenAiFunctions = void 0;
10
+ exports.getTools = getTools;
11
+ exports.getAllTools = getAllTools;
12
+ exports.getCompactSurface = getCompactSurface;
13
+ exports.getToolsByCategory = getToolsByCategory;
14
+ exports.getTool = getTool;
15
+ const desktop_1 = require("./desktop");
16
+ const a11y_1 = require("./a11y");
17
+ const cdp_1 = require("./cdp");
18
+ const orchestration_1 = require("./orchestration");
19
+ const batch_1 = require("./batch");
20
+ const shortcuts_1 = require("./shortcuts");
21
+ const ocr_1 = require("./ocr");
22
+ const smart_1 = require("./smart");
23
+ const extras_1 = require("./extras");
24
+ const a11y_depth_1 = require("./a11y_depth");
25
+ const electron_bridge_1 = require("./electron_bridge");
26
+ const compact_1 = require("./compact");
27
+ Object.defineProperty(exports, "getCompactTools", { enumerable: true, get: function () { return compact_1.getCompactTools; } });
28
+ const agent_1 = require("./agent");
29
+ const favorites_1 = require("./favorites");
30
+ const scheduler_1 = require("./scheduler");
31
+ const introspection_1 = require("./introspection");
32
+ const types_1 = require("./types");
33
+ Object.defineProperty(exports, "toOpenAiFunctions", { enumerable: true, get: function () { return types_1.toOpenAiFunctions; } });
34
+ Object.defineProperty(exports, "toJsonSchema", { enumerable: true, get: function () { return types_1.toJsonSchema; } });
35
+ const cost_class_1 = require("./cost-class");
36
+ const tools_1 = require("../core/agent-loop/tools");
37
+ const project_mcp_1 = require("../core/agent-loop/project-mcp");
38
+ // ─── Step 3: Window-management re-projection ─────────────────────────────────
39
+ //
40
+ // These System A MCP names are now backed by System B (buildUnifiedTools)
41
+ // implementations. The System A handler functions in a11y.ts / extras.ts are
42
+ // intentionally NOT deleted yet (Step 8 handles that); only the registry
43
+ // routing changes here.
44
+ //
45
+ // Tools WITHOUT a System B equivalent are left on the System A path:
46
+ // • get_active_window — no System B counterpart in buildUnifiedTools()
47
+ // • get_screen_size — no System B counterpart in buildUnifiedTools()
48
+ //
49
+ // System B tool name → projected MCP name (via TOOL_META.mcpName):
50
+ // list_windows → get_windows
51
+ // focus_window → focus_window
52
+ // maximize_window → maximize_window
53
+ // minimize_window → minimize_window_to_taskbar (mcpName in TOOL_META)
54
+ // restore_window → restore_window
55
+ // close_window → close_window
56
+ // resize_window → resize_window
57
+ // list_displays → list_displays
58
+ /** System B names of the window tools to re-project onto the MCP surface. */
59
+ const WINDOW_SYSB_NAMES = new Set([
60
+ 'list_windows',
61
+ 'focus_window',
62
+ 'maximize_window',
63
+ 'minimize_window',
64
+ 'restore_window',
65
+ 'close_window',
66
+ 'resize_window',
67
+ 'list_displays',
68
+ ]);
69
+ /** MCP names that the projected window tools will carry (after mcpName rename). */
70
+ const WINDOW_MCP_NAMES = new Set([
71
+ 'get_windows',
72
+ 'focus_window',
73
+ 'maximize_window',
74
+ 'minimize_window_to_taskbar',
75
+ 'restore_window',
76
+ 'close_window',
77
+ 'resize_window',
78
+ 'list_displays',
79
+ ]);
80
+ /** Build projected window ToolDefinitions from System B (cached). */
81
+ let _projectedWindowCache = null;
82
+ function projectedWindowTools() {
83
+ if (_projectedWindowCache === null) {
84
+ const sysBTools = (0, tools_1.buildUnifiedTools)();
85
+ _projectedWindowCache = sysBTools
86
+ .filter(t => WINDOW_SYSB_NAMES.has(t.name))
87
+ .map(t => (0, project_mcp_1.projectToToolDefinition)(t));
88
+ }
89
+ return _projectedWindowCache;
90
+ }
91
+ // ─── Step 5: Mouse group re-projection ───────────────────────────────────────
92
+ //
93
+ // MCP tools mouse_click, mouse_drag, mouse_scroll, mouse_move_relative,
94
+ // mouse_down, mouse_up are re-projected from System B equivalents:
95
+ // click, drag, scroll, mouse_move_relative, mouse_down, mouse_up.
96
+ //
97
+ // COORDINATE-SPACE BACKWARD COMPATIBILITY
98
+ // ----------------------------------------
99
+ // The CURRENT System A mouse tools (desktop.ts) treat x/y as IMAGE-space
100
+ // (screenshot pixels) and always scale to physical via getMouseScaleFactor().
101
+ // External agents send image-space coords derived from the most-recent
102
+ // screenshot, so omitting `space` must still produce image-space scaling.
103
+ //
104
+ // System B granular tools default to `space:'screen'` when the arg is absent
105
+ // (accessibility-snapshot coords, no scaling). That default is WRONG for the
106
+ // MCP surface where callers never pass `space` — it would silently break all
107
+ // existing external agents on HiDPI/multi-monitor setups.
108
+ //
109
+ // FIX: for the coord-sensitive tools (click, drag, scroll) the projected
110
+ // handler injects `space:'image'` when the caller omits it, preserving the
111
+ // exact image→physical scaling that System A always applied.
112
+ //
113
+ // INTENDED BEHAVIOR CHANGE (bug fix)
114
+ // ------------------------------------
115
+ // Callers that now pass `space:'screen'` (e.g. a11y-snapshot coords) will
116
+ // NOT be double-scaled. Previously, System A always scaled regardless of
117
+ // origin — so a caller using a11y coords had to compensate. This is the one
118
+ // intentional change; see CHANGELOG.md under Unreleased/v2.
119
+ //
120
+ // Tools WITHOUT a System B equivalent are left on System A:
121
+ // • mouse_hover — no System B hover tool
122
+ // • mouse_double_click — System B click counts differ in schema shape
123
+ // • mouse_right_click — System B click button param differs in schema shape
124
+ // • mouse_middle_click — no System B equivalent
125
+ // • mouse_triple_click — no System B equivalent
126
+ // • mouse_scroll_horizontal — no System B equivalent
127
+ // • mouse_drag_stepped — no System B equivalent
128
+ //
129
+ // System B tool name → projected MCP name (via TOOL_META mcpName):
130
+ // click → mouse_click
131
+ // drag → mouse_drag
132
+ // scroll → mouse_scroll
133
+ // mouse_move_relative → mouse_move_relative (name unchanged)
134
+ // mouse_down → mouse_down (name unchanged)
135
+ // mouse_up → mouse_up (name unchanged)
136
+ /** System B names of the mouse tools to re-project onto the MCP surface. */
137
+ const MOUSE_SYSB_NAMES = new Set([
138
+ 'click',
139
+ 'drag',
140
+ 'scroll',
141
+ 'mouse_move_relative',
142
+ 'mouse_down',
143
+ 'mouse_up',
144
+ ]);
145
+ /** MCP names that the projected mouse tools will carry (after mcpName rename). */
146
+ const MOUSE_MCP_NAMES = new Set([
147
+ 'mouse_click',
148
+ 'mouse_drag',
149
+ 'mouse_scroll',
150
+ 'mouse_move_relative',
151
+ 'mouse_down',
152
+ 'mouse_up',
153
+ ]);
154
+ /**
155
+ * Names of the coord-sensitive System B mouse tools (click/drag/scroll) that
156
+ * need an image-space default injected for MCP backward compatibility.
157
+ */
158
+ const COORD_SENSITIVE_SYSB_NAMES = new Set(['click', 'drag', 'scroll']);
159
+ /** Build projected mouse ToolDefinitions from System B (cached). */
160
+ let _projectedMouseCache = null;
161
+ function projectedMouseTools() {
162
+ if (_projectedMouseCache !== null)
163
+ return _projectedMouseCache;
164
+ const sysBTools = (0, tools_1.buildUnifiedTools)();
165
+ _projectedMouseCache = sysBTools
166
+ .filter(t => MOUSE_SYSB_NAMES.has(t.name))
167
+ .map(t => {
168
+ const base = (0, project_mcp_1.projectToToolDefinition)(t);
169
+ // mouse_move_relative: System A scaled dx/dy by the DPI factor; System B
170
+ // passes them raw. Restore the scaling on the MCP surface so relative
171
+ // moves don't undershoot 2-3x on HiDPI/retina screens. MCP-only — the
172
+ // internal agent keeps System B's raw behavior.
173
+ if (t.name === 'mouse_move_relative') {
174
+ const sysBHandler = base.handler;
175
+ return {
176
+ ...base,
177
+ handler: (params, ctx) => {
178
+ const sf = ctx.getMouseScaleFactor();
179
+ const dx = Number(params.dx);
180
+ const dy = Number(params.dy);
181
+ const scaled = { ...params };
182
+ if (Number.isFinite(dx))
183
+ scaled.dx = Math.round(dx * sf);
184
+ if (Number.isFinite(dy))
185
+ scaled.dy = Math.round(dy * sf);
186
+ return sysBHandler(scaled, ctx);
187
+ },
188
+ };
189
+ }
190
+ if (!COORD_SENSITIVE_SYSB_NAMES.has(t.name)) {
191
+ // mouse_down, mouse_up — button-only, no coords to scale.
192
+ return base;
193
+ }
194
+ // click / drag / scroll: wrap the handler so omitting `space` defaults
195
+ // to 'image' (image-space scaling) rather than System B's 'screen' default.
196
+ // This keeps every existing external MCP caller unaffected — they never
197
+ // pass `space` and expect their screenshot coords to be scaled.
198
+ // When a caller explicitly passes `space:'screen'` (a11y-sourced coords),
199
+ // they get pass-through — the intended double-scale bug fix.
200
+ //
201
+ // Correct the published `space` description too: System B's own schema
202
+ // text says "screen (default)", which is the INTERNAL default and the
203
+ // opposite of the MCP projection's default (image). An agent reading the
204
+ // MCP schema must see the accurate contract or it double-scales a11y coords.
205
+ if (base.parameters.space) {
206
+ base.parameters.space.description =
207
+ 'Coordinate space. Omit (default) → image-space coords from the latest screenshot (scaled to physical pixels). Pass "screen" → a11y-snapshot coords (already physical, not scaled).';
208
+ }
209
+ const sysBHandler = base.handler;
210
+ return {
211
+ ...base,
212
+ handler: (params, ctx) => {
213
+ const withDefault = params.space === undefined
214
+ ? { ...params, space: 'image' }
215
+ : params;
216
+ return sysBHandler(withDefault, ctx);
217
+ },
218
+ };
219
+ });
220
+ return _projectedMouseCache;
221
+ }
222
+ // ─── Step 6: Accessibility / Perception group re-projection ─────────────────
223
+ //
224
+ // The following MCP tools are now backed by System B (buildUnifiedTools)
225
+ // implementations, routed through the uniform projectToToolDefinition path:
226
+ //
227
+ // System B name → MCP name (via TOOL_META mcpName / identity)
228
+ // read_screen → read_screen (name unchanged)
229
+ // invoke_element → invoke_element (name unchanged)
230
+ // set_field_value → set_field_value (name unchanged)
231
+ // focus_element → focus_element (name unchanged)
232
+ // a11y_get_value → a11y_get_value (name unchanged)
233
+ // a11y_expand → a11y_expand (name unchanged)
234
+ // a11y_collapse → a11y_collapse (name unchanged)
235
+ // a11y_toggle → a11y_toggle (name unchanged)
236
+ // a11y_select → a11y_select (name unchanged)
237
+ // get_element_state → get_element_state (name unchanged)
238
+ // wait_for_element → wait_for_element (name unchanged)
239
+ // (ocr_read_screen stays on System A — structured OCR output for external agents)
240
+ //
241
+ // BEHAVIOR UPGRADE (desirable)
242
+ // ─────────────────────────────
243
+ // System B's a11y tools (a11y_expand, a11y_collapse, a11y_toggle, a11y_select,
244
+ // a11y_get_value, get_element_state) call resolveAgentPid() which auto-scopes
245
+ // to the active window pid when processId is omitted. This is strictly better
246
+ // than the System A behavior (which walked the full system tree).
247
+ //
248
+ // PARAM RECONCILIATION
249
+ // ─────────────────────
250
+ // invoke_element: System A had automationId + action params absent in System B.
251
+ // → Both have been added to the System B tool (tools.ts) so the MCP schema
252
+ // is backward-compatible. No behavior is silently dropped.
253
+ // → automationId note: PlatformAdapter.invokeElement does not expose
254
+ // automationId in its query type. When only automationId is supplied,
255
+ // it is used as the name for the search (functional fallback). Document
256
+ // in CHANGELOG that automationId-only matching is name-based in v2.
257
+ //
258
+ // set_field_value: System A (a11y_depth.ts) had controlType param absent in
259
+ // the System B version.
260
+ // → controlType added to the System B tool (tools.ts) for backward-compat.
261
+ //
262
+ // ocr_read_screen: KEPT ON SYSTEM A. System A returns structured JSON
263
+ // (elements[] + bounds + fullText + dpiRatio + coordinateSystem) which
264
+ // external agents rely on to locate-and-click OCR'd text. System B's
265
+ // read_text returns lean plain text built for the in-context LLM — a
266
+ // downgrade for the MCP surface — so it is not projected. No format change.
267
+ //
268
+ // TOOLS LEFT ON SYSTEM A (no System B buildUnifiedTools() equivalent, or
269
+ // compact-surface invariant test requires no compactGroup):
270
+ // • find_element — not in buildUnifiedTools()
271
+ // • get_focused_element — not in buildUnifiedTools()
272
+ // • a11y_get_element — not in buildUnifiedTools()
273
+ // • a11y_list_children — not in buildUnifiedTools()
274
+ // • smart_type — not in buildUnifiedTools()
275
+ // • smart_read — not in buildUnifiedTools()
276
+ // • smart_click — System B has a smart_click but TOOL_META assigns
277
+ // compactGroup:'computer', which breaks the compact-
278
+ // surface invariant test (test section 10 requires
279
+ // smart_click to have NO compactGroup). Left on
280
+ // System A to preserve the invariant.
281
+ /** System B names of the a11y / perception tools to re-project onto the MCP surface. */
282
+ const A11Y_SYSB_NAMES = new Set([
283
+ 'read_screen',
284
+ 'invoke_element',
285
+ 'set_field_value',
286
+ 'focus_element',
287
+ 'a11y_get_value',
288
+ 'a11y_expand',
289
+ 'a11y_collapse',
290
+ 'a11y_toggle',
291
+ 'a11y_select',
292
+ 'get_element_state',
293
+ 'wait_for_element',
294
+ 'verify',
295
+ 'compile_ui',
296
+ 'find_action_button',
297
+ 'find_input_field',
298
+ // NOTE: `read_text` (System B) is intentionally NOT projected. Its lean
299
+ // `@x,y "text"` output is built for the in-context LLM. The MCP surface keeps
300
+ // System A's `ocr_read_screen`, whose structured JSON (elements[] + bounds +
301
+ // coordinateSystem) is what external agents need to locate-and-click OCR text.
302
+ ]);
303
+ /** MCP names that the projected a11y tools will carry (after mcpName rename). */
304
+ const A11Y_MCP_NAMES = new Set([
305
+ 'read_screen',
306
+ 'invoke_element',
307
+ 'set_field_value',
308
+ 'focus_element',
309
+ 'a11y_get_value',
310
+ 'a11y_expand',
311
+ 'a11y_collapse',
312
+ 'a11y_toggle',
313
+ 'a11y_select',
314
+ 'get_element_state',
315
+ 'wait_for_element',
316
+ 'verify',
317
+ 'compile_ui',
318
+ 'find_action_button',
319
+ 'find_input_field',
320
+ // `ocr_read_screen` stays on System A (structured OCR output) — see above.
321
+ ]);
322
+ /** Build projected a11y/perception ToolDefinitions from System B (cached). */
323
+ let _projectedA11yCache = null;
324
+ function projectedA11yTools() {
325
+ if (_projectedA11yCache !== null)
326
+ return _projectedA11yCache;
327
+ const sysBTools = (0, tools_1.buildUnifiedTools)();
328
+ _projectedA11yCache = sysBTools
329
+ .filter(t => A11Y_SYSB_NAMES.has(t.name))
330
+ .map(t => (0, project_mcp_1.projectToToolDefinition)(t));
331
+ return _projectedA11yCache;
332
+ }
333
+ // ─── Step 7: CDP / Browser group re-projection ───────────────────────────────
334
+ //
335
+ // 5 of the 12 current browser-category MCP tools map to System B browser_*
336
+ // equivalents via TOOL_META. Per-tool comparison:
337
+ //
338
+ // cdp_connect (System A):
339
+ // • Calls ctx.cdp.connect() — attaches to existing CDP session, no auto-launch.
340
+ // • Output: { text: "Connected to: … at …" } (no usage hint).
341
+ // browser_connect (System B) → cdp_connect:
342
+ // • Calls ctx.cdp.ensureConnected({launch, exePaths}) — auto-launches Edge/Chrome
343
+ // via getEdgePaths()/getChromePaths() if not already connected.
344
+ // • Output: includes "Use browser_navigate…" guidance.
345
+ // VERDICT: MIGRATE — System B is strictly BETTER (auto-launch + guidance).
346
+ //
347
+ // cdp_page_context (System A):
348
+ // • No params; always calls ctx.cdp.getPageContext() → structured interactive-
349
+ // element list (links/buttons/inputs with selectors).
350
+ // browser_read (System B) → cdp_page_context:
351
+ // • Optional `selector` param; no selector → getPageContext() (SAME output);
352
+ // with selector → ctx.cdp.readText(selector, 3000) (additive).
353
+ // VERDICT: MIGRATE — System B is EQUAL-OR-BETTER (adds selector param; no-param
354
+ // path returns identical structured list).
355
+ //
356
+ // cdp_click (System A):
357
+ // • selector OR text; same click logic.
358
+ // browser_click (System B) → cdp_click:
359
+ // • Same params (text preferred, selector alternative). Same click logic.
360
+ // • Error message adds "Call browser_read to see the actual elements" guidance.
361
+ // VERDICT: MIGRATE — System B is EQUAL (same params, marginally better errors).
362
+ //
363
+ // cdp_type (System A):
364
+ // • selector OR label, text required.
365
+ // browser_type (System B) → cdp_type:
366
+ // • Same params (text required, selector OR label). Same type logic.
367
+ // VERDICT: MIGRATE — System B is EQUAL.
368
+ //
369
+ // navigate_browser (System A):
370
+ // • safetyTier 2, category 'orchestration'. LAUNCHES the browser with
371
+ // --remote-debugging-port and then optionally navigates. This is the
372
+ // dedicated browser-launcher tool; external agents call it to start CDP.
373
+ // browser_navigate (System B) → navigate_browser:
374
+ // • safetyTier 1, category 'browser'. Navigates within an ALREADY-CONNECTED
375
+ // browser; requires a prior browser_connect call.
376
+ // VERDICT: DO NOT MIGRATE. The System B version would silently strip the
377
+ // browser-launch capability from navigate_browser — an external agent calling
378
+ // navigate_browser to start the browser would get "not connected" instead of
379
+ // a running browser. The launch semantics must not change.
380
+ //
381
+ // TOOLS LEFT ON SYSTEM A (no System B equivalent):
382
+ // • navigate_browser — dedicated browser launcher (see above)
383
+ // • cdp_read_text — has maxLength param; browser_read lacks it; also maps
384
+ // to a different MCP name (cdp_page_context)
385
+ // • cdp_select_option — no System B equivalent in buildUnifiedTools()
386
+ // • cdp_evaluate — no System B equivalent
387
+ // • cdp_wait_for_selector — no System B equivalent
388
+ // • cdp_list_tabs — no System B equivalent
389
+ // • cdp_switch_tab — no System B equivalent
390
+ // • cdp_scroll — no System B equivalent
391
+ //
392
+ // DOCUMENTED BEHAVIOR CHANGES (see CHANGELOG.md [Unreleased] — v2):
393
+ // • cdp_connect now auto-launches Edge/Chrome when not connected (was attach-only).
394
+ // • cdp_page_context gains an optional `selector` param; callers that pass a CSS
395
+ // selector now get plain text for that element instead of the full interactive-
396
+ // element list. Callers that pass no params are unaffected.
397
+ /** System B names of the CDP/browser tools to re-project onto the MCP surface. */
398
+ const BROWSER_SYSB_NAMES = new Set([
399
+ 'browser_connect',
400
+ 'browser_read',
401
+ 'browser_click',
402
+ 'browser_type',
403
+ // NOTE: 'browser_navigate' is intentionally NOT included.
404
+ // TOOL_META maps it to 'navigate_browser' but the System A navigate_browser is
405
+ // the browser LAUNCHER (safetyTier 2, category 'orchestration'). Projecting
406
+ // browser_navigate would silently strip the launch capability. Keep on System A.
407
+ ]);
408
+ /** MCP names that the projected browser tools will carry (after mcpName rename). */
409
+ const BROWSER_MCP_NAMES = new Set([
410
+ 'cdp_connect',
411
+ 'cdp_page_context',
412
+ 'cdp_click',
413
+ 'cdp_type',
414
+ // 'navigate_browser' is NOT in this set — it stays on System A.
415
+ ]);
416
+ /** Build projected CDP/browser ToolDefinitions from System B (cached). */
417
+ let _projectedBrowserCache = null;
418
+ function projectedBrowserTools() {
419
+ if (_projectedBrowserCache !== null)
420
+ return _projectedBrowserCache;
421
+ const sysBTools = (0, tools_1.buildUnifiedTools)();
422
+ _projectedBrowserCache = sysBTools
423
+ .filter(t => BROWSER_SYSB_NAMES.has(t.name))
424
+ .map(t => (0, project_mcp_1.projectToToolDefinition)(t));
425
+ return _projectedBrowserCache;
426
+ }
427
+ // ─── Step 4: Keyboard group re-projection ────────────────────────────────────
428
+ //
429
+ // MCP tools type_text, key_press, key_down, key_up, undo_last are re-projected
430
+ // from System B equivalents: type, key, key_down, key_up, undo_last.
431
+ //
432
+ // ALL five tools use the generic projectToToolDefinition() bridge so every
433
+ // handler runs through toolContextToAgent(ctx) → ctx.platform.* — the real
434
+ // runtime path. System B's `key` tool already carries all necessary fixes:
435
+ // (a) missing-arg guard
436
+ // (b) space-separated key sequences
437
+ // (c) BLOCKED_KEYS guard
438
+ // (d) `key` alias for `combo` (backward-compat)
439
+ // System B's `type` tool already uses the clipboard fast-path.
440
+ //
441
+ // System B tool name → projected MCP name (via TOOL_META mcpName):
442
+ // type → type_text
443
+ // key → key_press
444
+ // key_down → key_down (name unchanged)
445
+ // key_up → key_up (name unchanged)
446
+ // undo_last → undo_last (name unchanged)
447
+ /** System B names of the keyboard tools to re-project onto the MCP surface. */
448
+ const KEYBOARD_SYSB_NAMES = new Set(['type', 'key', 'key_down', 'key_up', 'undo_last']);
449
+ /** MCP names that the projected keyboard tools will carry. */
450
+ const KEYBOARD_MCP_NAMES = new Set([
451
+ 'type_text',
452
+ 'key_press',
453
+ 'key_down',
454
+ 'key_up',
455
+ 'undo_last',
456
+ ]);
457
+ /** Build projected keyboard ToolDefinitions from System B (cached). */
458
+ let _projectedKeyboardCache = null;
459
+ function projectedKeyboardTools() {
460
+ if (_projectedKeyboardCache !== null)
461
+ return _projectedKeyboardCache;
462
+ const sysBTools = (0, tools_1.buildUnifiedTools)();
463
+ _projectedKeyboardCache = sysBTools
464
+ .filter(t => KEYBOARD_SYSB_NAMES.has(t.name))
465
+ .map(t => (0, project_mcp_1.projectToToolDefinition)(t));
466
+ return _projectedKeyboardCache;
467
+ }
468
+ /**
469
+ * Unified tool accessor. Replaces the ad-hoc getAllTools() /
470
+ * getCompactSurface() pair — those remain as thin back-compat wrappers.
471
+ *
472
+ * Examples:
473
+ * getTools() → all granular tools
474
+ * getTools({ palette: 'compact' }) → 6 compact compound tools
475
+ * getTools({ compactGroup: 'computer' }) → granular tools owned by computer
476
+ * getTools({ palette: 'granular', compactGroup: 'accessibility' })
477
+ */
478
+ // The granular tool definitions are static (built from module-level
479
+ // get*Tools() functions, no runtime registration), so assemble the array
480
+ // once and reuse it. Before this, every getTool()/getTools() call rebuilt
481
+ // the whole 14-source array — and getTool() is on the hot dispatch path.
482
+ let _granularCache = null;
483
+ function granularTools() {
484
+ if (_granularCache === null) {
485
+ // Assemble all System A tools, then substitute the window group (Step 3),
486
+ // the keyboard group (Step 4), the mouse group (Step 5), the a11y /
487
+ // perception group (Step 6), and the CDP / browser group (Step 7) with
488
+ // projected System B tools. System A tools whose MCP names appear in any
489
+ // of the five exclusion sets are filtered out before projected tools are
490
+ // appended to avoid duplicates.
491
+ const systemATools = [
492
+ ...(0, desktop_1.getDesktopTools)(),
493
+ ...(0, a11y_1.getA11yTools)(),
494
+ ...(0, cdp_1.getCdpTools)(),
495
+ ...(0, orchestration_1.getOrchestrationTools)(),
496
+ ...(0, batch_1.getBatchTools)(),
497
+ ...(0, shortcuts_1.getShortcutTools)(),
498
+ ...(0, ocr_1.getOcrTools)(),
499
+ ...(0, smart_1.getSmartTools)(),
500
+ ...(0, extras_1.getExtraTools)(),
501
+ ...(0, a11y_depth_1.getA11yDepthTools)(),
502
+ ...(0, electron_bridge_1.getElectronBridgeTools)(),
503
+ ...(0, agent_1.getAgentTools)(),
504
+ ...(0, favorites_1.getFavoritesTools)(),
505
+ ...(0, scheduler_1.getSchedulerTools)(),
506
+ ...(0, introspection_1.getIntrospectionTools)(),
507
+ ].filter(t => !WINDOW_MCP_NAMES.has(t.name) &&
508
+ !KEYBOARD_MCP_NAMES.has(t.name) &&
509
+ !MOUSE_MCP_NAMES.has(t.name) &&
510
+ !A11Y_MCP_NAMES.has(t.name) &&
511
+ !BROWSER_MCP_NAMES.has(t.name));
512
+ _granularCache = [
513
+ ...systemATools,
514
+ ...projectedWindowTools(),
515
+ ...projectedKeyboardTools(),
516
+ ...projectedMouseTools(),
517
+ ...projectedA11yTools(),
518
+ ...projectedBrowserTools(),
519
+ ];
520
+ }
521
+ return _granularCache;
522
+ }
523
+ function getTools(options) {
524
+ const palette = options?.palette ?? 'granular';
525
+ if (palette === 'compact') {
526
+ return (0, compact_1.getCompactTools)();
527
+ }
528
+ const all = granularTools();
529
+ // Phase A: stamp token-cost metadata from the central table so every
530
+ // consumer (tools/list, coverage test, runtime hints) sees `costClass`.
531
+ (0, cost_class_1.stampCostClasses)(all);
532
+ if (options?.compactGroup) {
533
+ return all.filter(t => t.compactGroup === options.compactGroup);
534
+ }
535
+ // Return a shallow copy so callers can't mutate the cached array.
536
+ return all.slice();
537
+ }
538
+ /** Get all registered GRANULAR tools (the full primitive surface). Back-compat wrapper around getTools(). */
539
+ function getAllTools() {
540
+ return getTools();
541
+ }
542
+ /**
543
+ * Get the COMPACT surface — 6 compound tools covering every granular
544
+ * primitive. Equivalent semantics; ~1/12th the catalog tokens. Use via
545
+ * `clawdcursor mcp --compact` or `GET /tools?mode=compact`.
546
+ * Back-compat wrapper around getTools({ palette: 'compact' }).
547
+ */
548
+ function getCompactSurface() {
549
+ return getTools({ palette: 'compact' });
550
+ }
551
+ /** Get tools by category */
552
+ function getToolsByCategory(category) {
553
+ return getAllTools().filter(t => t.category === category);
554
+ }
555
+ /** Get a tool by name */
556
+ function getTool(name) {
557
+ // Search the cached array directly — no copy, no rebuild (hot path).
558
+ return granularTools().find(t => t.name === name);
559
+ }
560
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAkjBH,4BAmBC;AAGD,kCAEC;AAQD,8CAEC;AAGD,gDAEC;AAGD,0BAGC;AA7lBD,uCAA4C;AAC5C,iCAAsC;AACtC,+BAAoC;AACpC,mDAAwD;AACxD,mCAAwC;AACxC,2CAA+C;AAC/C,+BAAoC;AACpC,mCAAwC;AACxC,qCAAyC;AACzC,6CAAiD;AACjD,uDAA2D;AAC3D,uCAA4C;AAydnC,gGAzdA,yBAAe,OAydA;AAxdxB,mCAAwC;AACxC,2CAAgD;AAChD,2CAAgD;AAChD,mDAAwD;AAExD,mCAA0D;AAkdjD,kGAldA,yBAAiB,OAkdA;AAAE,6FAldA,oBAAY,OAkdA;AAjdxC,6CAAgD;AAChD,oDAA6D;AAC7D,gEAAyE;AAEzE,gFAAgF;AAChF,EAAE;AACF,0EAA0E;AAC1E,6EAA6E;AAC7E,yEAAyE;AACzE,wBAAwB;AACxB,EAAE;AACF,qEAAqE;AACrE,0EAA0E;AAC1E,0EAA0E;AAC1E,EAAE;AACF,mEAAmE;AACnE,qCAAqC;AACrC,sCAAsC;AACtC,yCAAyC;AACzC,4EAA4E;AAC5E,wCAAwC;AACxC,sCAAsC;AACtC,uCAAuC;AACvC,uCAAuC;AAEvC,6EAA6E;AAC7E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,cAAc;IACd,cAAc;IACd,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,cAAc;IACd,eAAe;IACf,eAAe;CAChB,CAAC,CAAC;AAEH,mFAAmF;AACnF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,aAAa;IACb,cAAc;IACd,iBAAiB;IACjB,4BAA4B;IAC5B,gBAAgB;IAChB,cAAc;IACd,eAAe;IACf,eAAe;CAChB,CAAC,CAAC;AAEH,qEAAqE;AACrE,IAAI,qBAAqB,GAA4B,IAAI,CAAC;AAC1D,SAAS,oBAAoB;IAC3B,IAAI,qBAAqB,KAAK,IAAI,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,IAAA,yBAAiB,GAAE,CAAC;QACtC,qBAAqB,GAAG,SAAS;aAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,qCAAuB,EAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAED,gFAAgF;AAChF,EAAE;AACF,wEAAwE;AACxE,mEAAmE;AACnE,oEAAoE;AACpE,EAAE;AACF,0CAA0C;AAC1C,2CAA2C;AAC3C,yEAAyE;AACzE,8EAA8E;AAC9E,uEAAuE;AACvE,0EAA0E;AAC1E,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,0DAA0D;AAC1D,EAAE;AACF,yEAAyE;AACzE,2EAA2E;AAC3E,6DAA6D;AAC7D,EAAE;AACF,qCAAqC;AACrC,uCAAuC;AACvC,0EAA0E;AAC1E,yEAAyE;AACzE,4EAA4E;AAC5E,4DAA4D;AAC5D,EAAE;AACF,4DAA4D;AAC5D,oDAAoD;AACpD,0EAA0E;AAC1E,iFAAiF;AACjF,oDAAoD;AACpD,oDAAoD;AACpD,uDAAuD;AACvD,oDAAoD;AACpD,EAAE;AACF,mEAAmE;AACnE,oCAAoC;AACpC,mCAAmC;AACnC,qCAAqC;AACrC,gEAAgE;AAChE,+DAA+D;AAC/D,+DAA+D;AAE/D,4EAA4E;AAC5E,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,OAAO;IACP,MAAM;IACN,QAAQ;IACR,qBAAqB;IACrB,YAAY;IACZ,UAAU;CACX,CAAC,CAAC;AAEH,kFAAkF;AAClF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,aAAa;IACb,YAAY;IACZ,cAAc;IACd,qBAAqB;IACrB,YAAY;IACZ,UAAU;CACX,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAExE,oEAAoE;AACpE,IAAI,oBAAoB,GAA4B,IAAI,CAAC;AACzD,SAAS,mBAAmB;IAC1B,IAAI,oBAAoB,KAAK,IAAI;QAAE,OAAO,oBAAoB,CAAC;IAE/D,MAAM,SAAS,GAAG,IAAA,yBAAiB,GAAE,CAAC;IACtC,oBAAoB,GAAG,SAAS;SAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACzC,GAAG,CAAC,CAAC,CAAC,EAAE;QACP,MAAM,IAAI,GAAG,IAAA,qCAAuB,EAAC,CAAC,CAAC,CAAC;QAExC,yEAAyE;QACzE,sEAAsE;QACtE,sEAAsE;QACtE,gDAAgD;QAChD,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;YACjC,OAAO;gBACL,GAAG,IAAI;gBACP,OAAO,EAAE,CAAC,MAA+B,EAAE,GAAgB,EAAE,EAAE;oBAC7D,MAAM,EAAE,GAAG,GAAG,CAAC,mBAAmB,EAAE,CAAC;oBACrC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAC7B,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;oBAC7B,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAAE,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;oBACzD,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAAE,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;oBACzD,OAAO,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAClC,CAAC;aACF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,0DAA0D;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,uEAAuE;QACvE,4EAA4E;QAC5E,wEAAwE;QACxE,gEAAgE;QAChE,0EAA0E;QAC1E,6DAA6D;QAC7D,EAAE;QACF,uEAAuE;QACvE,sEAAsE;QACtE,yEAAyE;QACzE,6EAA6E;QAC7E,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW;gBAC/B,oLAAoL,CAAC;QACzL,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;QACjC,OAAO;YACL,GAAG,IAAI;YACP,OAAO,EAAE,CACP,MAA+B,EAC/B,GAAgB,EAChB,EAAE;gBACF,MAAM,WAAW,GACf,MAAM,CAAC,KAAK,KAAK,SAAS;oBACxB,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;oBAC/B,CAAC,CAAC,MAAM,CAAC;gBACb,OAAO,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YACvC,CAAC;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEL,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,+EAA+E;AAC/E,EAAE;AACF,yEAAyE;AACzE,4EAA4E;AAC5E,EAAE;AACF,4EAA4E;AAC5E,0DAA0D;AAC1D,0DAA0D;AAC1D,0DAA0D;AAC1D,0DAA0D;AAC1D,0DAA0D;AAC1D,0DAA0D;AAC1D,0DAA0D;AAC1D,0DAA0D;AAC1D,0DAA0D;AAC1D,2DAA2D;AAC3D,0DAA0D;AAC1D,oFAAoF;AACpF,EAAE;AACF,+BAA+B;AAC/B,gCAAgC;AAChC,+EAA+E;AAC/E,8EAA8E;AAC9E,8EAA8E;AAC9E,kEAAkE;AAClE,EAAE;AACF,uBAAuB;AACvB,wBAAwB;AACxB,gFAAgF;AAChF,6EAA6E;AAC7E,+DAA+D;AAC/D,uEAAuE;AACvE,0EAA0E;AAC1E,4EAA4E;AAC5E,wEAAwE;AACxE,EAAE;AACF,4EAA4E;AAC5E,0BAA0B;AAC1B,6EAA6E;AAC7E,EAAE;AACF,sEAAsE;AACtE,yEAAyE;AACzE,uEAAuE;AACvE,uEAAuE;AACvE,8EAA8E;AAC9E,EAAE;AACF,yEAAyE;AACzE,4DAA4D;AAC5D,uDAAuD;AACvD,uDAAuD;AACvD,uDAAuD;AACvD,uDAAuD;AACvD,uDAAuD;AACvD,uDAAuD;AACvD,6EAA6E;AAC7E,+EAA+E;AAC/E,6EAA6E;AAC7E,0EAA0E;AAC1E,gEAAgE;AAEhE,wFAAwF;AACxF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,aAAa;IACb,gBAAgB;IAChB,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,aAAa;IACb,eAAe;IACf,aAAa;IACb,aAAa;IACb,mBAAmB;IACnB,kBAAkB;IAClB,QAAQ;IACR,YAAY;IACZ,oBAAoB;IACpB,kBAAkB;IAClB,wEAAwE;IACxE,8EAA8E;IAC9E,6EAA6E;IAC7E,+EAA+E;CAChF,CAAC,CAAC;AAEH,iFAAiF;AACjF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,aAAa;IACb,gBAAgB;IAChB,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,aAAa;IACb,eAAe;IACf,aAAa;IACb,aAAa;IACb,mBAAmB;IACnB,kBAAkB;IAClB,QAAQ;IACR,YAAY;IACZ,oBAAoB;IACpB,kBAAkB;IAClB,2EAA2E;CAC5E,CAAC,CAAC;AAEH,8EAA8E;AAC9E,IAAI,mBAAmB,GAA4B,IAAI,CAAC;AACxD,SAAS,kBAAkB;IACzB,IAAI,mBAAmB,KAAK,IAAI;QAAE,OAAO,mBAAmB,CAAC;IAE7D,MAAM,SAAS,GAAG,IAAA,yBAAiB,GAAE,CAAC;IACtC,mBAAmB,GAAG,SAAS;SAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACxC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,qCAAuB,EAAC,CAAC,CAAC,CAAC,CAAC;IAExC,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED,gFAAgF;AAChF,EAAE;AACF,2EAA2E;AAC3E,kDAAkD;AAClD,EAAE;AACF,4BAA4B;AAC5B,oFAAoF;AACpF,kEAAkE;AAClE,8CAA8C;AAC9C,sFAAsF;AACtF,sEAAsE;AACtE,2DAA2D;AAC3D,+EAA+E;AAC/E,EAAE;AACF,iCAAiC;AACjC,mFAAmF;AACnF,4DAA4D;AAC5D,gDAAgD;AAChD,iFAAiF;AACjF,qEAAqE;AACrE,oFAAoF;AACpF,+CAA+C;AAC/C,EAAE;AACF,0BAA0B;AAC1B,4CAA4C;AAC5C,0CAA0C;AAC1C,8EAA8E;AAC9E,oFAAoF;AACpF,oFAAoF;AACpF,EAAE;AACF,yBAAyB;AACzB,0CAA0C;AAC1C,wCAAwC;AACxC,yEAAyE;AACzE,4CAA4C;AAC5C,EAAE;AACF,iCAAiC;AACjC,0EAA0E;AAC1E,2EAA2E;AAC3E,+EAA+E;AAC/E,oDAAoD;AACpD,gFAAgF;AAChF,wDAAwD;AACxD,6EAA6E;AAC7E,oFAAoF;AACpF,mFAAmF;AACnF,iEAAiE;AACjE,EAAE;AACF,mDAAmD;AACnD,iEAAiE;AACjE,gFAAgF;AAChF,qEAAqE;AACrE,wEAAwE;AACxE,iDAAiD;AACjD,qDAAqD;AACrD,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD,EAAE;AACF,oEAAoE;AACpE,sFAAsF;AACtF,mFAAmF;AACnF,oFAAoF;AACpF,gEAAgE;AAEhE,kFAAkF;AAClF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,iBAAiB;IACjB,cAAc;IACd,eAAe;IACf,cAAc;IACd,0DAA0D;IAC1D,+EAA+E;IAC/E,4EAA4E;IAC5E,iFAAiF;CAClF,CAAC,CAAC;AAEH,oFAAoF;AACpF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,aAAa;IACb,kBAAkB;IAClB,WAAW;IACX,UAAU;IACV,gEAAgE;CACjE,CAAC,CAAC;AAEH,0EAA0E;AAC1E,IAAI,sBAAsB,GAA4B,IAAI,CAAC;AAC3D,SAAS,qBAAqB;IAC5B,IAAI,sBAAsB,KAAK,IAAI;QAAE,OAAO,sBAAsB,CAAC;IAEnE,MAAM,SAAS,GAAG,IAAA,yBAAiB,GAAE,CAAC;IACtC,sBAAsB,GAAG,SAAS;SAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,qCAAuB,EAAC,CAAC,CAAC,CAAC,CAAC;IAExC,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED,gFAAgF;AAChF,EAAE;AACF,+EAA+E;AAC/E,qEAAqE;AACrE,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,2EAA2E;AAC3E,0BAA0B;AAC1B,sCAAsC;AACtC,2BAA2B;AAC3B,kDAAkD;AAClD,+DAA+D;AAC/D,EAAE;AACF,mEAAmE;AACnE,2BAA2B;AAC3B,2BAA2B;AAC3B,6CAA6C;AAC7C,6CAA6C;AAC7C,6CAA6C;AAE7C,+EAA+E;AAC/E,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;AAExF,8DAA8D;AAC9D,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,WAAW;IACX,WAAW;IACX,UAAU;IACV,QAAQ;IACR,WAAW;CACZ,CAAC,CAAC;AAEH,uEAAuE;AACvE,IAAI,uBAAuB,GAA4B,IAAI,CAAC;AAC5D,SAAS,sBAAsB;IAC7B,IAAI,uBAAuB,KAAK,IAAI;QAAE,OAAO,uBAAuB,CAAC;IAErE,MAAM,SAAS,GAAG,IAAA,yBAAiB,GAAE,CAAC;IACtC,uBAAuB,GAAG,SAAS;SAChC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC5C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,qCAAuB,EAAC,CAAC,CAAC,CAAC,CAAC;IAExC,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAqBD;;;;;;;;;GASG;AACH,oEAAoE;AACpE,yEAAyE;AACzE,0EAA0E;AAC1E,yEAAyE;AACzE,IAAI,cAAc,GAA4B,IAAI,CAAC;AACnD,SAAS,aAAa;IACpB,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC5B,0EAA0E;QAC1E,oEAAoE;QACpE,uEAAuE;QACvE,yEAAyE;QACzE,yEAAyE;QACzE,gCAAgC;QAChC,MAAM,YAAY,GAAG;YACnB,GAAG,IAAA,yBAAe,GAAE;YACpB,GAAG,IAAA,mBAAY,GAAE;YACjB,GAAG,IAAA,iBAAW,GAAE;YAChB,GAAG,IAAA,qCAAqB,GAAE;YAC1B,GAAG,IAAA,qBAAa,GAAE;YAClB,GAAG,IAAA,4BAAgB,GAAE;YACrB,GAAG,IAAA,iBAAW,GAAE;YAChB,GAAG,IAAA,qBAAa,GAAE;YAClB,GAAG,IAAA,sBAAa,GAAE;YAClB,GAAG,IAAA,8BAAiB,GAAE;YACtB,GAAG,IAAA,wCAAsB,GAAE;YAC3B,GAAG,IAAA,qBAAa,GAAE;YAClB,GAAG,IAAA,6BAAiB,GAAE;YACtB,GAAG,IAAA,6BAAiB,GAAE;YACtB,GAAG,IAAA,qCAAqB,GAAE;SAC3B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACX,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7B,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/B,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5B,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3B,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAC/B,CAAC;QAEF,cAAc,GAAG;YACf,GAAG,YAAY;YACf,GAAG,oBAAoB,EAAE;YACzB,GAAG,sBAAsB,EAAE;YAC3B,GAAG,mBAAmB,EAAE;YACxB,GAAG,kBAAkB,EAAE;YACvB,GAAG,qBAAqB,EAAE;SAC3B,CAAC;IACJ,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAgB,QAAQ,CAAC,OAAyB;IAChD,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,UAAU,CAAC;IAE/C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,IAAA,yBAAe,GAAE,CAAC;IAC3B,CAAC;IAED,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAE5B,qEAAqE;IACrE,wEAAwE;IACxE,IAAA,6BAAgB,EAAC,GAAG,CAAC,CAAC;IAEtB,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAClE,CAAC;IAED,kEAAkE;IAClE,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC;AAED,6GAA6G;AAC7G,SAAgB,WAAW;IACzB,OAAO,QAAQ,EAAE,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,4BAA4B;AAC5B,SAAgB,kBAAkB,CAAC,QAAgB;IACjD,OAAO,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AAC5D,CAAC;AAED,yBAAyB;AACzB,SAAgB,OAAO,CAAC,IAAY;IAClC,qEAAqE;IACrE,OAAO,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ToolDefinition, ToolResult } from './types';
2
+ import type { UIMapHolder } from '../core/sense/ui-map-holder';
3
+ /**
4
+ * Enforce the canonical safety gate before direct MCP/REST tool handlers run.
5
+ *
6
+ * Uses `evaluateInput` from `pipeline/safety/layer` — the single source of
7
+ * truth for allow/block decisions. Passes `tool.safetyTier` when present so
8
+ * the gate consults the tool's own declared tier rather than guessing from
9
+ * the name string.
10
+ *
11
+ * Returns null when the tool is allowed; returns an error ToolResult when
12
+ * blocked or requiring confirmation.
13
+ */
14
+ export declare function evaluateToolCall(tool: ToolDefinition, args: Record<string, unknown>, opts?: {
15
+ uiMaps?: UIMapHolder;
16
+ }): ToolResult | null;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.evaluateToolCall = evaluateToolCall;
4
+ const safety_1 = require("../core/safety");
5
+ function labelFromArgs(args, uiMaps) {
6
+ const candidates = [
7
+ args.target,
8
+ args.name,
9
+ args.text,
10
+ args.label,
11
+ args.title,
12
+ args.selector,
13
+ ];
14
+ const value = candidates.find(v => typeof v === 'string' && v.trim().length > 0);
15
+ if (typeof value === 'string')
16
+ return value;
17
+ // el_NN refs carry no name/target — resolve the element's label from the
18
+ // holder so the destructive-label rule (Send/Delete/Pay…) still fires on
19
+ // the MCP route's ref path. Stale/unknown snapshot → no label → the blunt
20
+ // no-label rule stays in effect (safe default). Audit 2026-06-10, finding E.
21
+ if (uiMaps && typeof args.element_id === 'string' && typeof args.snapshot_id === 'string') {
22
+ const r = uiMaps.resolve(args.snapshot_id, Date.now());
23
+ if (r.ok) {
24
+ const el = r.map.elements.find(e => e.id === args.element_id);
25
+ const label = el?.text ?? el?.normalized_text;
26
+ if (typeof label === 'string' && label.trim().length > 0)
27
+ return label;
28
+ }
29
+ }
30
+ return undefined;
31
+ }
32
+ /**
33
+ * Enforce the canonical safety gate before direct MCP/REST tool handlers run.
34
+ *
35
+ * Uses `evaluateInput` from `pipeline/safety/layer` — the single source of
36
+ * truth for allow/block decisions. Passes `tool.safetyTier` when present so
37
+ * the gate consults the tool's own declared tier rather than guessing from
38
+ * the name string.
39
+ *
40
+ * Returns null when the tool is allowed; returns an error ToolResult when
41
+ * blocked or requiring confirmation.
42
+ */
43
+ function evaluateToolCall(tool, args, opts) {
44
+ const decision = (0, safety_1.evaluateInput)({
45
+ toolName: tool.name,
46
+ args,
47
+ safetyTier: tool.safetyTier,
48
+ ctx: {
49
+ targetLabel: labelFromArgs(args, opts?.uiMaps),
50
+ },
51
+ });
52
+ if (decision.allow)
53
+ return null;
54
+ const suggestedAction = decision.suggestedAction ?? 'block';
55
+ const reason = decision.reason ?? `${tool.name} requires user approval`;
56
+ if (suggestedAction === 'block') {
57
+ return {
58
+ text: `${tool.name}: safety block - ${reason}`,
59
+ isError: true,
60
+ };
61
+ }
62
+ // confirm / warn path
63
+ return {
64
+ text: `${tool.name}: safety confirm - ${reason} (requires user confirmation). ` +
65
+ `Next step: surface this to the user and wait for approval — re-issuing the same call will just block again. ` +
66
+ `If the user already authorized this intent, run the step inside \`batch({allowConfirm:true})\`.`,
67
+ isError: true,
68
+ };
69
+ }
70
+ //# sourceMappingURL=safety-gate.js.map