visionclaw 0.1.195-beta.0 → 0.1.195-dev.feat-e2e-test-system.1

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 (345) hide show
  1. package/dist/agent/command-handlers.d.ts.map +1 -1
  2. package/dist/agent/command-handlers.js +17 -0
  3. package/dist/agent/command-handlers.js.map +1 -1
  4. package/dist/builtin-skills/catalog/equity-research/SKILL.md +256 -0
  5. package/dist/builtin-skills/catalog/financial-modeling/SKILL.md +186 -0
  6. package/dist/builtin-skills/catalog/investment-banking/SKILL.md +213 -0
  7. package/dist/builtin-skills/catalog/private-equity/SKILL.md +282 -0
  8. package/dist/builtin-skills/catalog/wealth-management/SKILL.md +252 -0
  9. package/dist/channels/interface.d.ts +9 -0
  10. package/dist/channels/interface.d.ts.map +1 -1
  11. package/dist/channels/manager.d.ts.map +1 -1
  12. package/dist/channels/manager.js +3 -0
  13. package/dist/channels/manager.js.map +1 -1
  14. package/dist/channels/telegram.d.ts.map +1 -1
  15. package/dist/channels/telegram.js +7 -1
  16. package/dist/channels/telegram.js.map +1 -1
  17. package/dist/config/types.d.ts +6 -0
  18. package/dist/config/types.d.ts.map +1 -1
  19. package/dist/config/types.js +10 -0
  20. package/dist/config/types.js.map +1 -1
  21. package/dist/e2e/artifacts.d.ts +8 -0
  22. package/dist/e2e/artifacts.d.ts.map +1 -0
  23. package/dist/e2e/artifacts.js +35 -0
  24. package/dist/e2e/artifacts.js.map +1 -0
  25. package/dist/e2e/cleanup.d.ts +8 -0
  26. package/dist/e2e/cleanup.d.ts.map +1 -0
  27. package/dist/e2e/cleanup.js +108 -0
  28. package/dist/e2e/cleanup.js.map +1 -0
  29. package/dist/e2e/cli.d.ts +4 -0
  30. package/dist/e2e/cli.d.ts.map +1 -0
  31. package/dist/e2e/cli.js +16 -0
  32. package/dist/e2e/cli.js.map +1 -0
  33. package/dist/e2e/index.d.ts +5 -0
  34. package/dist/e2e/index.d.ts.map +1 -0
  35. package/dist/e2e/index.js +4 -0
  36. package/dist/e2e/index.js.map +1 -0
  37. package/dist/e2e/local-test-server.d.ts +7 -0
  38. package/dist/e2e/local-test-server.d.ts.map +1 -0
  39. package/dist/e2e/local-test-server.js +75 -0
  40. package/dist/e2e/local-test-server.js.map +1 -0
  41. package/dist/e2e/oauth-setup-store.d.ts +28 -0
  42. package/dist/e2e/oauth-setup-store.d.ts.map +1 -0
  43. package/dist/e2e/oauth-setup-store.js +56 -0
  44. package/dist/e2e/oauth-setup-store.js.map +1 -0
  45. package/dist/e2e/parser.d.ts +4 -0
  46. package/dist/e2e/parser.d.ts.map +1 -0
  47. package/dist/e2e/parser.js +52 -0
  48. package/dist/e2e/parser.js.map +1 -0
  49. package/dist/e2e/registry.d.ts +3 -0
  50. package/dist/e2e/registry.d.ts.map +1 -0
  51. package/dist/e2e/registry.js +44 -0
  52. package/dist/e2e/registry.js.map +1 -0
  53. package/dist/e2e/reporter.d.ts +6 -0
  54. package/dist/e2e/reporter.d.ts.map +1 -0
  55. package/dist/e2e/reporter.js +56 -0
  56. package/dist/e2e/reporter.js.map +1 -0
  57. package/dist/e2e/runner.d.ts +4 -0
  58. package/dist/e2e/runner.d.ts.map +1 -0
  59. package/dist/e2e/runner.js +116 -0
  60. package/dist/e2e/runner.js.map +1 -0
  61. package/dist/e2e/setup-google-guest.d.ts +19 -0
  62. package/dist/e2e/setup-google-guest.d.ts.map +1 -0
  63. package/dist/e2e/setup-google-guest.js +205 -0
  64. package/dist/e2e/setup-google-guest.js.map +1 -0
  65. package/dist/e2e/suite-utils.d.ts +19 -0
  66. package/dist/e2e/suite-utils.d.ts.map +1 -0
  67. package/dist/e2e/suite-utils.js +60 -0
  68. package/dist/e2e/suite-utils.js.map +1 -0
  69. package/dist/e2e/suites/agent.d.ts +3 -0
  70. package/dist/e2e/suites/agent.d.ts.map +1 -0
  71. package/dist/e2e/suites/agent.js +33 -0
  72. package/dist/e2e/suites/agent.js.map +1 -0
  73. package/dist/e2e/suites/browser.d.ts +3 -0
  74. package/dist/e2e/suites/browser.d.ts.map +1 -0
  75. package/dist/e2e/suites/browser.js +58 -0
  76. package/dist/e2e/suites/browser.js.map +1 -0
  77. package/dist/e2e/suites/cua.d.ts +3 -0
  78. package/dist/e2e/suites/cua.d.ts.map +1 -0
  79. package/dist/e2e/suites/cua.js +68 -0
  80. package/dist/e2e/suites/cua.js.map +1 -0
  81. package/dist/e2e/suites/google.d.ts +3 -0
  82. package/dist/e2e/suites/google.d.ts.map +1 -0
  83. package/dist/e2e/suites/google.js +145 -0
  84. package/dist/e2e/suites/google.js.map +1 -0
  85. package/dist/e2e/suites/memory.d.ts +3 -0
  86. package/dist/e2e/suites/memory.d.ts.map +1 -0
  87. package/dist/e2e/suites/memory.js +50 -0
  88. package/dist/e2e/suites/memory.js.map +1 -0
  89. package/dist/e2e/suites/obs.d.ts +3 -0
  90. package/dist/e2e/suites/obs.d.ts.map +1 -0
  91. package/dist/e2e/suites/obs.js +29 -0
  92. package/dist/e2e/suites/obs.js.map +1 -0
  93. package/dist/e2e/suites/self.d.ts +3 -0
  94. package/dist/e2e/suites/self.d.ts.map +1 -0
  95. package/dist/e2e/suites/self.js +65 -0
  96. package/dist/e2e/suites/self.js.map +1 -0
  97. package/dist/e2e/suites/upgrade.d.ts +3 -0
  98. package/dist/e2e/suites/upgrade.d.ts.map +1 -0
  99. package/dist/e2e/suites/upgrade.js +31 -0
  100. package/dist/e2e/suites/upgrade.js.map +1 -0
  101. package/dist/e2e/types.d.ts +91 -0
  102. package/dist/e2e/types.d.ts.map +1 -0
  103. package/dist/e2e/types.js +2 -0
  104. package/dist/e2e/types.js.map +1 -0
  105. package/dist/index.js.map +1 -1
  106. package/dist/service/daemon.d.ts +1 -0
  107. package/dist/service/daemon.d.ts.map +1 -1
  108. package/dist/service/daemon.js +110 -15
  109. package/dist/service/daemon.js.map +1 -1
  110. package/dist/tools/upgrade.d.ts +8 -0
  111. package/dist/tools/upgrade.d.ts.map +1 -1
  112. package/dist/tools/upgrade.js +64 -8
  113. package/dist/tools/upgrade.js.map +1 -1
  114. package/dist-agent/bundle.cjs +32037 -30064
  115. package/package.json +1 -1
  116. package/dist/agent/applied-credential-signature.d.ts +0 -53
  117. package/dist/agent/applied-credential-signature.d.ts.map +0 -1
  118. package/dist/agent/applied-credential-signature.js +0 -137
  119. package/dist/agent/applied-credential-signature.js.map +0 -1
  120. package/dist/agent/engines/claude/cli-resolver.d.ts +0 -16
  121. package/dist/agent/engines/claude/cli-resolver.d.ts.map +0 -1
  122. package/dist/agent/engines/claude/cli-resolver.js +0 -83
  123. package/dist/agent/engines/claude/cli-resolver.js.map +0 -1
  124. package/dist/agent/engines/claude/session-browser-policy.d.ts +0 -9
  125. package/dist/agent/engines/claude/session-browser-policy.d.ts.map +0 -1
  126. package/dist/agent/engines/claude/session-browser-policy.js +0 -49
  127. package/dist/agent/engines/claude/session-browser-policy.js.map +0 -1
  128. package/dist/agent/engines/claude/session.d.ts +0 -304
  129. package/dist/agent/engines/claude/session.d.ts.map +0 -1
  130. package/dist/agent/engines/claude/session.js +0 -1233
  131. package/dist/agent/engines/claude/session.js.map +0 -1
  132. package/dist/agent/engines/client-factory.d.ts +0 -63
  133. package/dist/agent/engines/client-factory.d.ts.map +0 -1
  134. package/dist/agent/engines/client-factory.js +0 -382
  135. package/dist/agent/engines/client-factory.js.map +0 -1
  136. package/dist/agent/engines/engine-factory.d.ts +0 -5
  137. package/dist/agent/engines/engine-factory.d.ts.map +0 -1
  138. package/dist/agent/engines/engine-factory.js +0 -7
  139. package/dist/agent/engines/engine-factory.js.map +0 -1
  140. package/dist/agent/engines/engine.d.ts +0 -8
  141. package/dist/agent/engines/engine.d.ts.map +0 -1
  142. package/dist/agent/engines/engine.js +0 -15
  143. package/dist/agent/engines/engine.js.map +0 -1
  144. package/dist/agent/engines/openai/file-session.d.ts +0 -19
  145. package/dist/agent/engines/openai/file-session.d.ts.map +0 -1
  146. package/dist/agent/engines/openai/file-session.js +0 -78
  147. package/dist/agent/engines/openai/file-session.js.map +0 -1
  148. package/dist/agent/engines/openai/file-tools.d.ts +0 -35
  149. package/dist/agent/engines/openai/file-tools.d.ts.map +0 -1
  150. package/dist/agent/engines/openai/file-tools.js +0 -194
  151. package/dist/agent/engines/openai/file-tools.js.map +0 -1
  152. package/dist/agent/engines/openai/session.d.ts +0 -55
  153. package/dist/agent/engines/openai/session.d.ts.map +0 -1
  154. package/dist/agent/engines/openai/session.js +0 -447
  155. package/dist/agent/engines/openai/session.js.map +0 -1
  156. package/dist/agent/engines/openai/tools.d.ts +0 -15
  157. package/dist/agent/engines/openai/tools.d.ts.map +0 -1
  158. package/dist/agent/engines/openai/tools.js +0 -221
  159. package/dist/agent/engines/openai/tools.js.map +0 -1
  160. package/dist/agent/engines/pi/session.d.ts +0 -54
  161. package/dist/agent/engines/pi/session.d.ts.map +0 -1
  162. package/dist/agent/engines/pi/session.js +0 -397
  163. package/dist/agent/engines/pi/session.js.map +0 -1
  164. package/dist/agent/engines/pi/tools.d.ts +0 -19
  165. package/dist/agent/engines/pi/tools.d.ts.map +0 -1
  166. package/dist/agent/engines/pi/tools.js +0 -127
  167. package/dist/agent/engines/pi/tools.js.map +0 -1
  168. package/dist/agent/engines/session-types.d.ts +0 -153
  169. package/dist/agent/engines/session-types.d.ts.map +0 -1
  170. package/dist/agent/engines/session-types.js +0 -2
  171. package/dist/agent/engines/session-types.js.map +0 -1
  172. package/dist/agent/engines/system-prompt-log.d.ts +0 -9
  173. package/dist/agent/engines/system-prompt-log.d.ts.map +0 -1
  174. package/dist/agent/engines/system-prompt-log.js +0 -46
  175. package/dist/agent/engines/system-prompt-log.js.map +0 -1
  176. package/dist/agent/model-provider.d.ts +0 -103
  177. package/dist/agent/model-provider.d.ts.map +0 -1
  178. package/dist/agent/model-provider.js +0 -540
  179. package/dist/agent/model-provider.js.map +0 -1
  180. package/dist/agent/transcript/transcript-backfill.d.ts +0 -54
  181. package/dist/agent/transcript/transcript-backfill.d.ts.map +0 -1
  182. package/dist/agent/transcript/transcript-backfill.js +0 -604
  183. package/dist/agent/transcript/transcript-backfill.js.map +0 -1
  184. package/dist/agent/transcript/transcript-indexer.d.ts +0 -273
  185. package/dist/agent/transcript/transcript-indexer.d.ts.map +0 -1
  186. package/dist/agent/transcript/transcript-indexer.js +0 -1217
  187. package/dist/agent/transcript/transcript-indexer.js.map +0 -1
  188. package/dist/agent/transcript/transcript-memory-migrations.d.ts +0 -25
  189. package/dist/agent/transcript/transcript-memory-migrations.d.ts.map +0 -1
  190. package/dist/agent/transcript/transcript-memory-migrations.js +0 -87
  191. package/dist/agent/transcript/transcript-memory-migrations.js.map +0 -1
  192. package/dist/agent/transcript-memory-migrations.d.ts +0 -25
  193. package/dist/agent/transcript-memory-migrations.d.ts.map +0 -1
  194. package/dist/agent/transcript-memory-migrations.js +0 -87
  195. package/dist/agent/transcript-memory-migrations.js.map +0 -1
  196. package/dist/agent/tunnel-credential-handler.d.ts +0 -90
  197. package/dist/agent/tunnel-credential-handler.d.ts.map +0 -1
  198. package/dist/agent/tunnel-credential-handler.js +0 -162
  199. package/dist/agent/tunnel-credential-handler.js.map +0 -1
  200. package/dist/agent/usage/usage-backfill-handler.d.ts +0 -18
  201. package/dist/agent/usage/usage-backfill-handler.d.ts.map +0 -1
  202. package/dist/agent/usage/usage-backfill-handler.js +0 -69
  203. package/dist/agent/usage/usage-backfill-handler.js.map +0 -1
  204. package/dist/agent/usage/usage-gate.d.ts +0 -25
  205. package/dist/agent/usage/usage-gate.d.ts.map +0 -1
  206. package/dist/agent/usage/usage-gate.js +0 -83
  207. package/dist/agent/usage/usage-gate.js.map +0 -1
  208. package/dist/agent/usage/usage-handler.d.ts +0 -7
  209. package/dist/agent/usage/usage-handler.d.ts.map +0 -1
  210. package/dist/agent/usage/usage-handler.js +0 -28
  211. package/dist/agent/usage/usage-handler.js.map +0 -1
  212. package/dist/agent/usage/usage-report-builder.d.ts +0 -26
  213. package/dist/agent/usage/usage-report-builder.d.ts.map +0 -1
  214. package/dist/agent/usage/usage-report-builder.js +0 -80
  215. package/dist/agent/usage/usage-report-builder.js.map +0 -1
  216. package/dist/agent/usage/usage-report-queue.d.ts +0 -26
  217. package/dist/agent/usage/usage-report-queue.d.ts.map +0 -1
  218. package/dist/agent/usage/usage-report-queue.js +0 -199
  219. package/dist/agent/usage/usage-report-queue.js.map +0 -1
  220. package/dist/agent/usage/usage-report-types.d.ts +0 -41
  221. package/dist/agent/usage/usage-report-types.d.ts.map +0 -1
  222. package/dist/agent/usage/usage-report-types.js +0 -2
  223. package/dist/agent/usage/usage-report-types.js.map +0 -1
  224. package/dist/agent/usage/usage-reporter.d.ts +0 -31
  225. package/dist/agent/usage/usage-reporter.d.ts.map +0 -1
  226. package/dist/agent/usage/usage-reporter.js +0 -102
  227. package/dist/agent/usage/usage-reporter.js.map +0 -1
  228. package/dist/agent/usage-backfill-handler.d.ts +0 -18
  229. package/dist/agent/usage-backfill-handler.d.ts.map +0 -1
  230. package/dist/agent/usage-backfill-handler.js +0 -69
  231. package/dist/agent/usage-backfill-handler.js.map +0 -1
  232. package/dist/agent/usage-gate.d.ts +0 -25
  233. package/dist/agent/usage-gate.d.ts.map +0 -1
  234. package/dist/agent/usage-gate.js +0 -83
  235. package/dist/agent/usage-gate.js.map +0 -1
  236. package/dist/agent/usage-report-builder.d.ts +0 -26
  237. package/dist/agent/usage-report-builder.d.ts.map +0 -1
  238. package/dist/agent/usage-report-builder.js +0 -80
  239. package/dist/agent/usage-report-builder.js.map +0 -1
  240. package/dist/agent/usage-report-queue.d.ts +0 -26
  241. package/dist/agent/usage-report-queue.d.ts.map +0 -1
  242. package/dist/agent/usage-report-queue.js +0 -199
  243. package/dist/agent/usage-report-queue.js.map +0 -1
  244. package/dist/agent/usage-report-types.d.ts +0 -41
  245. package/dist/agent/usage-report-types.d.ts.map +0 -1
  246. package/dist/agent/usage-report-types.js +0 -2
  247. package/dist/agent/usage-report-types.js.map +0 -1
  248. package/dist/agent/usage-reporter.d.ts +0 -31
  249. package/dist/agent/usage-reporter.d.ts.map +0 -1
  250. package/dist/agent/usage-reporter.js +0 -102
  251. package/dist/agent/usage-reporter.js.map +0 -1
  252. package/dist/agent/wake-cycle-tool-tracker.d.ts +0 -39
  253. package/dist/agent/wake-cycle-tool-tracker.d.ts.map +0 -1
  254. package/dist/agent/wake-cycle-tool-tracker.js +0 -72
  255. package/dist/agent/wake-cycle-tool-tracker.js.map +0 -1
  256. package/dist/billing/payg-handler.d.ts +0 -29
  257. package/dist/billing/payg-handler.d.ts.map +0 -1
  258. package/dist/billing/payg-handler.js +0 -92
  259. package/dist/billing/payg-handler.js.map +0 -1
  260. package/dist/billing/payment-handler.d.ts +0 -24
  261. package/dist/billing/payment-handler.d.ts.map +0 -1
  262. package/dist/billing/payment-handler.js +0 -101
  263. package/dist/billing/payment-handler.js.map +0 -1
  264. package/dist/builtin-skills/catalog/phone-adb-automation/SKILL.md +0 -412
  265. package/dist/builtin-skills/catalog/phone-adb-automation/phone_input.sh +0 -132
  266. package/dist/builtin-skills/catalog/phone-adb-automation/phone_launch.sh +0 -166
  267. package/dist/builtin-skills/catalog/phone-adb-automation/phone_screenshot.sh +0 -87
  268. package/dist/builtin-skills/catalog/phone-adb-automation/phone_security_kbd.py +0 -174
  269. package/dist/builtin-skills/catalog/phone-adb-automation/phone_setup.sh +0 -274
  270. package/dist/builtin-skills/catalog/phone-adb-automation/phone_swipe.sh +0 -111
  271. package/dist/builtin-skills/catalog/phone-adb-automation/phone_tap.sh +0 -87
  272. package/dist/builtin-skills/catalog/phone-adb-automation/phone_ui_parse.py +0 -176
  273. package/dist/builtin-skills/catalog/phone-adb-automation/phone_wake_unlock.sh +0 -67
  274. package/dist/builtin-skills/transcribe-audio/SKILL.md +0 -122
  275. package/dist/data-processing/convert-demo-cli.d.ts +0 -7
  276. package/dist/data-processing/convert-demo-cli.d.ts.map +0 -1
  277. package/dist/data-processing/convert-demo-cli.js +0 -30
  278. package/dist/data-processing/convert-demo-cli.js.map +0 -1
  279. package/dist/data-processing/convert-demo.d.ts +0 -26
  280. package/dist/data-processing/convert-demo.d.ts.map +0 -1
  281. package/dist/data-processing/convert-demo.js +0 -233
  282. package/dist/data-processing/convert-demo.js.map +0 -1
  283. package/dist/obs/rdp/icons/icons/app_windows.svg +0 -4
  284. package/dist/obs/rdp/icons/icons/clip_get.svg +0 -4
  285. package/dist/obs/rdp/icons/icons/clip_send.svg +0 -4
  286. package/dist/obs/rdp/icons/icons/clip_shared.svg +0 -4
  287. package/dist/obs/rdp/icons/icons/clipboard.svg +0 -4
  288. package/dist/obs/rdp/icons/icons/clipboard_shared.svg +0 -4
  289. package/dist/obs/rdp/icons/icons/control.svg +0 -4
  290. package/dist/obs/rdp/icons/icons/desktop.svg +0 -4
  291. package/dist/obs/rdp/icons/icons/display.svg +0 -4
  292. package/dist/obs/rdp/icons/icons/launchpad.svg +0 -4
  293. package/dist/obs/rdp/icons/icons/mission_control.svg +0 -4
  294. package/dist/obs/rdp/icons/icons/screenshot.svg +0 -4
  295. package/dist/obs/rdp/icons/icons/zoom_actual.svg +0 -4
  296. package/dist/obs/rdp/icons/icons/zoom_fit.svg +0 -4
  297. package/dist/obs/rdp/icons/icons/zoom_in.svg +0 -4
  298. package/dist/obs/rdp/icons/icons/zoom_out.svg +0 -4
  299. package/dist/obs/tunnel-telemetry.d.ts +0 -46
  300. package/dist/obs/tunnel-telemetry.d.ts.map +0 -1
  301. package/dist/obs/tunnel-telemetry.js +0 -70
  302. package/dist/obs/tunnel-telemetry.js.map +0 -1
  303. package/dist/onboarding/cloudflared-cert.d.ts +0 -15
  304. package/dist/onboarding/cloudflared-cert.d.ts.map +0 -1
  305. package/dist/onboarding/cloudflared-cert.js +0 -57
  306. package/dist/onboarding/cloudflared-cert.js.map +0 -1
  307. package/dist/onboarding/playwriter-extension.d.ts +0 -19
  308. package/dist/onboarding/playwriter-extension.d.ts.map +0 -1
  309. package/dist/onboarding/playwriter-extension.js +0 -246
  310. package/dist/onboarding/playwriter-extension.js.map +0 -1
  311. package/dist/realtime/websocket.d.ts +0 -7
  312. package/dist/realtime/websocket.d.ts.map +0 -1
  313. package/dist/realtime/websocket.js +0 -65
  314. package/dist/realtime/websocket.js.map +0 -1
  315. package/dist/service/gbox-tun.d.ts +0 -14
  316. package/dist/service/gbox-tun.d.ts.map +0 -1
  317. package/dist/service/gbox-tun.js +0 -315
  318. package/dist/service/gbox-tun.js.map +0 -1
  319. package/dist/skills/installed.d.ts +0 -11
  320. package/dist/skills/installed.d.ts.map +0 -1
  321. package/dist/skills/installed.js +0 -35
  322. package/dist/skills/installed.js.map +0 -1
  323. package/dist/tools/coordinate-resolver.d.ts +0 -30
  324. package/dist/tools/coordinate-resolver.d.ts.map +0 -1
  325. package/dist/tools/coordinate-resolver.js +0 -104
  326. package/dist/tools/coordinate-resolver.js.map +0 -1
  327. package/dist/utils/playwriter-relay.d.ts +0 -9
  328. package/dist/utils/playwriter-relay.d.ts.map +0 -1
  329. package/dist/utils/playwriter-relay.js +0 -77
  330. package/dist/utils/playwriter-relay.js.map +0 -1
  331. package/dist/utils/wechat-monitor.d.ts +0 -21
  332. package/dist/utils/wechat-monitor.d.ts.map +0 -1
  333. package/dist/utils/wechat-monitor.js +0 -88
  334. package/dist/utils/wechat-monitor.js.map +0 -1
  335. package/dist-agent/realtime/assets/index.html +0 -1058
  336. package/dist-agent/realtime/assets/samples/alloy.mp3 +0 -0
  337. package/dist-agent/realtime/assets/samples/ash.mp3 +0 -0
  338. package/dist-agent/realtime/assets/samples/ballad.mp3 +0 -0
  339. package/dist-agent/realtime/assets/samples/cedar.mp3 +0 -0
  340. package/dist-agent/realtime/assets/samples/coral.mp3 +0 -0
  341. package/dist-agent/realtime/assets/samples/echo.mp3 +0 -0
  342. package/dist-agent/realtime/assets/samples/marin.mp3 +0 -0
  343. package/dist-agent/realtime/assets/samples/sage.mp3 +0 -0
  344. package/dist-agent/realtime/assets/samples/shimmer.mp3 +0 -0
  345. package/dist-agent/realtime/assets/samples/verse.mp3 +0 -0
@@ -1,315 +0,0 @@
1
- import { execSync, spawn, spawnSync } from "node:child_process";
2
- import { chmodSync, existsSync, mkdirSync, unlinkSync, writeFileSync } from "node:fs";
3
- import { homedir } from "node:os";
4
- import { dirname, join } from "node:path";
5
- const LABEL = "dev.visionclaw.gbox-tun";
6
- const LAUNCH_DAEMONS_DIR = "/Library/LaunchDaemons";
7
- const PLIST_PATH = join(LAUNCH_DAEMONS_DIR, `${LABEL}.plist`);
8
- const GBOX_TUN_BIN = join(homedir(), ".visionclaw", "bin", "gbox-tun");
9
- const LOG_DIR = join(homedir(), ".visionclaw", "logs");
10
- const GREEN = "\x1b[32m";
11
- const RED = "\x1b[31m";
12
- const YELLOW = "\x1b[33m";
13
- const DIM = "\x1b[2m";
14
- const RESET = "\x1b[0m";
15
- const BOLD = "\x1b[1m";
16
- function ok(msg) {
17
- console.log(` ${GREEN}✓${RESET} ${msg}`);
18
- }
19
- function fail(msg) {
20
- console.log(` ${RED}✗${RESET} ${msg}`);
21
- }
22
- function warn(msg) {
23
- console.log(` ${YELLOW}!${RESET} ${msg}`);
24
- }
25
- function escapeXml(s) {
26
- return s
27
- .replace(/&/g, "&")
28
- .replace(/</g, "&lt;")
29
- .replace(/>/g, "&gt;")
30
- .replace(/"/g, "&quot;");
31
- }
32
- function generatePlist(options) {
33
- return `<?xml version="1.0" encoding="UTF-8"?>
34
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
35
- <plist version="1.0">
36
- <dict>
37
- <key>Label</key>
38
- <string>${LABEL}</string>
39
-
40
- <key>ProgramArguments</key>
41
- <array>
42
- <string>${escapeXml(GBOX_TUN_BIN)}</string>
43
- <string>--server</string>
44
- <string>${escapeXml(options.server)}</string>
45
- <string>--apikey</string>
46
- <string>${escapeXml(options.apikey)}</string>
47
- </array>
48
-
49
- <key>RunAtLoad</key>
50
- <true/>
51
-
52
- <key>KeepAlive</key>
53
- <true/>
54
-
55
- <key>EnvironmentVariables</key>
56
- <dict>
57
- <key>HOME</key>
58
- <string>${escapeXml(homedir())}</string>
59
- </dict>
60
-
61
- <key>WorkingDirectory</key>
62
- <string>${escapeXml(join(homedir(), ".visionclaw", "bin"))}</string>
63
-
64
- <key>StandardOutPath</key>
65
- <string>${escapeXml(join(LOG_DIR, "gbox-tun-stdout.log"))}</string>
66
-
67
- <key>StandardErrorPath</key>
68
- <string>${escapeXml(join(LOG_DIR, "gbox-tun-stderr.log"))}</string>
69
- </dict>
70
- </plist>
71
- `;
72
- }
73
- function isLoaded() {
74
- const result = spawnSync("sudo", ["launchctl", "list", LABEL], {
75
- encoding: "utf-8",
76
- stdio: ["pipe", "pipe", "pipe"],
77
- });
78
- return result.status === 0;
79
- }
80
- export async function downloadGboxTunBinary(_server) {
81
- const platform = process.platform === "darwin" ? "darwin" : "linux";
82
- const arch = process.arch === "arm64" ? "arm64" : "amd64";
83
- const url = `https://screenshots.tos-cn-guangzhou.volces.com/gbox-tun/latest/gbox-tun-${platform}-${arch}`;
84
- console.log(` Downloading gbox-tun from ${url}...`);
85
- const response = await fetch(url, { signal: AbortSignal.timeout(120_000) });
86
- if (!response.ok) {
87
- throw new Error(`Failed to download gbox-tun: HTTP ${response.status}`);
88
- }
89
- const buffer = Buffer.from(await response.arrayBuffer());
90
- mkdirSync(dirname(GBOX_TUN_BIN), { recursive: true });
91
- writeFileSync(GBOX_TUN_BIN, buffer);
92
- chmodSync(GBOX_TUN_BIN, 0o755);
93
- ok(`Downloaded gbox-tun (${buffer.length} bytes)`);
94
- }
95
- export async function installGboxTunService(options) {
96
- if (process.platform !== "darwin") {
97
- fail("gbox-tun service installation is only supported on macOS.");
98
- return;
99
- }
100
- console.log(`\n${BOLD}Installing gbox-tun as a system daemon...${RESET}\n`);
101
- if (!existsSync(GBOX_TUN_BIN)) {
102
- try {
103
- await downloadGboxTunBinary(options.server);
104
- }
105
- catch (err) {
106
- fail(`gbox-tun binary not found and download failed: ${err instanceof Error ? err.message : String(err)}`);
107
- return;
108
- }
109
- }
110
- if (isLoaded()) {
111
- warn("gbox-tun daemon is already loaded. Unloading first...");
112
- spawnSync("sudo", ["launchctl", "bootout", `system/${LABEL}`], {
113
- stdio: "inherit",
114
- });
115
- }
116
- mkdirSync(LOG_DIR, { recursive: true });
117
- const plist = generatePlist(options);
118
- const tmpPlist = `/tmp/${LABEL}.plist`;
119
- writeFileSync(tmpPlist, plist, "utf-8");
120
- try {
121
- execSync(`sudo cp "${tmpPlist}" "${PLIST_PATH}"`, { stdio: "inherit" });
122
- execSync(`sudo chmod 644 "${PLIST_PATH}"`, { stdio: "inherit" });
123
- execSync(`sudo chown root:wheel "${PLIST_PATH}"`, { stdio: "inherit" });
124
- }
125
- finally {
126
- try {
127
- unlinkSync(tmpPlist);
128
- }
129
- catch { /* cleanup best-effort */ }
130
- }
131
- ok(`Plist written to ${DIM}${PLIST_PATH}${RESET}`);
132
- const result = spawnSync("sudo", ["launchctl", "bootstrap", "system", PLIST_PATH], { stdio: "inherit" });
133
- if (result.status === 0) {
134
- ok("gbox-tun daemon loaded successfully");
135
- console.log(`\n gbox-tun will now start automatically on boot.`);
136
- console.log(` Logs: ${DIM}~/.visionclaw/logs/gbox-tun-*.log${RESET}`);
137
- console.log(` Manage: ${DIM}visionclaw gbox-tun status${RESET}`);
138
- console.log(` ${DIM}visionclaw gbox-tun uninstall${RESET}\n`);
139
- }
140
- else {
141
- fail("Failed to load gbox-tun daemon via launchctl");
142
- console.log(` Try manually: ${DIM}sudo launchctl bootstrap system ${PLIST_PATH}${RESET}\n`);
143
- }
144
- }
145
- export function uninstallGboxTunService() {
146
- if (process.platform !== "darwin") {
147
- fail("gbox-tun service uninstallation is only supported on macOS.");
148
- return;
149
- }
150
- console.log(`\n${BOLD}Uninstalling gbox-tun system daemon...${RESET}\n`);
151
- if (isLoaded()) {
152
- const result = spawnSync("sudo", ["launchctl", "bootout", `system/${LABEL}`], { stdio: "inherit" });
153
- if (result.status === 0) {
154
- ok("gbox-tun daemon unloaded from launchd");
155
- }
156
- else {
157
- warn("Failed to unload gbox-tun daemon (may already be stopped)");
158
- }
159
- }
160
- else {
161
- ok("gbox-tun daemon was not loaded");
162
- }
163
- if (existsSync(PLIST_PATH)) {
164
- try {
165
- execSync(`sudo rm "${PLIST_PATH}"`, { stdio: "inherit" });
166
- ok(`Plist removed: ${DIM}${PLIST_PATH}${RESET}`);
167
- }
168
- catch {
169
- fail(`Failed to remove plist: ${PLIST_PATH}`);
170
- }
171
- }
172
- else {
173
- ok("Plist file did not exist");
174
- }
175
- if (existsSync(GBOX_TUN_BIN)) {
176
- unlinkSync(GBOX_TUN_BIN);
177
- ok(`gbox-tun binary removed: ${DIM}${GBOX_TUN_BIN}${RESET}`);
178
- }
179
- console.log(`\n gbox-tun will no longer start automatically on boot.\n`);
180
- }
181
- export function printGboxTunServiceStatus() {
182
- if (process.platform !== "darwin") {
183
- fail("gbox-tun service status is only available on macOS.");
184
- return;
185
- }
186
- console.log(`\n${BOLD}gbox-tun Service Status${RESET}\n`);
187
- if (!existsSync(GBOX_TUN_BIN)) {
188
- fail("gbox-tun binary not installed");
189
- console.log(` Run ${DIM}visionclaw setup${RESET} to install gbox-tun.\n`);
190
- return;
191
- }
192
- ok(`Binary: ${DIM}${GBOX_TUN_BIN}${RESET}`);
193
- if (existsSync(PLIST_PATH)) {
194
- ok(`Plist installed: ${DIM}${PLIST_PATH}${RESET}`);
195
- }
196
- else {
197
- fail("Plist not installed");
198
- console.log(` Run ${DIM}visionclaw gbox-tun install${RESET} to set up the daemon.\n`);
199
- return;
200
- }
201
- if (isLoaded()) {
202
- ok("Daemon is registered with launchd");
203
- const result = spawnSync("sudo", ["launchctl", "print", `system/${LABEL}`], {
204
- encoding: "utf-8",
205
- stdio: ["pipe", "pipe", "pipe"],
206
- });
207
- if (result.status === 0) {
208
- const pidMatch = /pid\s*=\s*(\d+)/i.exec(result.stdout);
209
- if (pidMatch) {
210
- ok(`Process running (PID ${pidMatch[1]})`);
211
- }
212
- }
213
- }
214
- else {
215
- warn("Plist exists but daemon is not loaded");
216
- console.log(` Run ${DIM}visionclaw gbox-tun install${RESET} to reload.\n`);
217
- }
218
- console.log("");
219
- }
220
- export async function startGboxTun(options) {
221
- if (process.platform !== "darwin") {
222
- fail("gbox-tun is only supported on macOS.");
223
- return;
224
- }
225
- if (!existsSync(GBOX_TUN_BIN)) {
226
- try {
227
- await downloadGboxTunBinary(options.server);
228
- }
229
- catch (err) {
230
- fail(`gbox-tun binary not found and download failed: ${err instanceof Error ? err.message : String(err)}`);
231
- return;
232
- }
233
- }
234
- if (options.foreground) {
235
- console.log(`\n${BOLD}Starting gbox-tun in foreground...${RESET}\n`);
236
- console.log(` Server: ${DIM}${options.server}${RESET}`);
237
- console.log(` Press Ctrl+C to stop.\n`);
238
- const child = spawn("sudo", [GBOX_TUN_BIN, "--server", options.server, "--apikey", options.apikey], {
239
- stdio: "inherit",
240
- env: { ...process.env, HOME: homedir() },
241
- });
242
- const cleanup = () => {
243
- child.kill("SIGTERM");
244
- };
245
- process.on("SIGINT", cleanup);
246
- process.on("SIGTERM", cleanup);
247
- return new Promise((resolve, reject) => {
248
- child.on("exit", (code) => {
249
- process.off("SIGINT", cleanup);
250
- process.off("SIGTERM", cleanup);
251
- if (code === 0 || code === null) {
252
- resolve();
253
- }
254
- else {
255
- reject(new Error(`gbox-tun exited with code ${code}`));
256
- }
257
- });
258
- child.on("error", reject);
259
- });
260
- }
261
- // Background (daemon) mode
262
- console.log(`\n${BOLD}Starting gbox-tun daemon...${RESET}\n`);
263
- if (isLoaded()) {
264
- ok("gbox-tun daemon is already running");
265
- return;
266
- }
267
- // Ensure plist is installed
268
- if (!existsSync(PLIST_PATH)) {
269
- mkdirSync(LOG_DIR, { recursive: true });
270
- const plist = generatePlist(options);
271
- const tmpPlist = `/tmp/${LABEL}.plist`;
272
- writeFileSync(tmpPlist, plist, "utf-8");
273
- try {
274
- execSync(`sudo cp "${tmpPlist}" "${PLIST_PATH}"`, { stdio: "inherit" });
275
- execSync(`sudo chmod 644 "${PLIST_PATH}"`, { stdio: "inherit" });
276
- execSync(`sudo chown root:wheel "${PLIST_PATH}"`, { stdio: "inherit" });
277
- }
278
- finally {
279
- try {
280
- unlinkSync(tmpPlist);
281
- }
282
- catch { /* cleanup best-effort */ }
283
- }
284
- ok(`Plist written to ${DIM}${PLIST_PATH}${RESET}`);
285
- }
286
- const result = spawnSync("sudo", ["launchctl", "bootstrap", "system", PLIST_PATH], { stdio: "inherit" });
287
- if (result.status === 0) {
288
- ok("gbox-tun daemon started");
289
- console.log(` Logs: ${DIM}~/.visionclaw/logs/gbox-tun-*.log${RESET}\n`);
290
- }
291
- else {
292
- fail("Failed to start gbox-tun daemon");
293
- }
294
- }
295
- export function stopGboxTun() {
296
- if (process.platform !== "darwin") {
297
- fail("gbox-tun is only supported on macOS.");
298
- return;
299
- }
300
- console.log(`\n${BOLD}Stopping gbox-tun daemon...${RESET}\n`);
301
- if (!isLoaded()) {
302
- ok("gbox-tun daemon is not running");
303
- console.log("");
304
- return;
305
- }
306
- const result = spawnSync("sudo", ["launchctl", "bootout", `system/${LABEL}`], { stdio: "inherit" });
307
- if (result.status === 0) {
308
- ok("gbox-tun daemon stopped");
309
- }
310
- else {
311
- fail("Failed to stop gbox-tun daemon");
312
- }
313
- console.log("");
314
- }
315
- //# sourceMappingURL=gbox-tun.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gbox-tun.js","sourceRoot":"","sources":["../../src/service/gbox-tun.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- export interface InstalledSkillSummary {
2
- name: string;
3
- description: string;
4
- }
5
- export declare function readSkillDescription(skillMdPath: string): string;
6
- /**
7
- * Enumerate installed skills (name + one-line description) in
8
- * `getSkillsDir()`. Returns an empty array if the directory is missing.
9
- */
10
- export declare function listInstalledSkills(): InstalledSkillSummary[];
11
- //# sourceMappingURL=installed.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"installed.d.ts","sourceRoot":"","sources":["../../src/skills/installed.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKhE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,qBAAqB,EAAE,CAgB7D"}
@@ -1,35 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { getSkillsDir } from "../config/index.js";
4
- export function readSkillDescription(skillMdPath) {
5
- if (!fs.existsSync(skillMdPath))
6
- return "(no description)";
7
- const raw = fs.readFileSync(skillMdPath, "utf-8");
8
- const match = /^description:\s*(.+)$/m.exec(raw);
9
- return match ? match[1] : "(no description)";
10
- }
11
- /**
12
- * Enumerate installed skills (name + one-line description) in
13
- * `getSkillsDir()`. Returns an empty array if the directory is missing.
14
- */
15
- export function listInstalledSkills() {
16
- const skillsDir = getSkillsDir();
17
- if (!fs.existsSync(skillsDir))
18
- return [];
19
- const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
20
- const result = [];
21
- for (const entry of entries) {
22
- if (!entry.isDirectory())
23
- continue;
24
- const skillFile = path.join(skillsDir, entry.name, "SKILL.md");
25
- if (!fs.existsSync(skillFile))
26
- continue;
27
- result.push({
28
- name: entry.name,
29
- description: readSkillDescription(skillFile),
30
- });
31
- }
32
- result.sort((a, b) => a.name.localeCompare(b.name));
33
- return result;
34
- }
35
- //# sourceMappingURL=installed.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"installed.js","sourceRoot":"","sources":["../../src/skills/installed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOlD,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,kBAAkB,CAAC;IAC3D,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC/D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,SAAS;QACxC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW,EAAE,oBAAoB,CAAC,SAAS,CAAC;SAC7C,CAAC,CAAC;IACL,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,30 +0,0 @@
1
- /**
2
- * Resolves natural language targets to pixel coordinates using
3
- * Anthropic's computer_20251124 tool via the Messages API.
4
- *
5
- * Sends screenshot + instruction to Claude; Claude returns a tool_use
6
- * with action and coordinate. We extract coordinates only (no execution).
7
- *
8
- * IMPORTANT: The input screenshot is assumed to be already resized to fit
9
- * Claude's vision constraints (done by takeScreenshot). We read the actual
10
- * image dimensions, tell the computer-use tool those are the display size,
11
- * and unscale returned coordinates back to the real display space.
12
- * Reference: https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool
13
- */
14
- import type { VisionClawConfig } from "../config/types.js";
15
- export interface ResolvedAction {
16
- action: string;
17
- x: number;
18
- y: number;
19
- }
20
- /**
21
- * Resolve a natural language target to pixel coordinates.
22
- * Uses Messages API with computer_20251124 tool; returns the first tool_use result.
23
- *
24
- * The input screenshot is expected to already be resized to fit Claude's
25
- * vision constraints (by takeScreenshot). We read its actual pixel dimensions,
26
- * use those as display_width_px / display_height_px, and unscale the returned
27
- * coordinates back to the real display space using imageWidth/displayWidth ratio.
28
- */
29
- export declare function resolveCoordinates(screenshotBase64: string, instruction: string, displayWidth: number, displayHeight: number, config: VisionClawConfig, screenshotFilePath?: string): Promise<ResolvedAction | null>;
30
- //# sourceMappingURL=coordinate-resolver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"coordinate-resolver.d.ts","sourceRoot":"","sources":["../../src/tools/coordinate-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAQD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,gBAAgB,EACxB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAyFhC"}
@@ -1,104 +0,0 @@
1
- /**
2
- * Resolves natural language targets to pixel coordinates using
3
- * Anthropic's computer_20251124 tool via the Messages API.
4
- *
5
- * Sends screenshot + instruction to Claude; Claude returns a tool_use
6
- * with action and coordinate. We extract coordinates only (no execution).
7
- *
8
- * IMPORTANT: The input screenshot is assumed to be already resized to fit
9
- * Claude's vision constraints (done by takeScreenshot). We read the actual
10
- * image dimensions, tell the computer-use tool those are the display size,
11
- * and unscale returned coordinates back to the real display space.
12
- * Reference: https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool
13
- */
14
- import { logger } from "../logger.js";
15
- import { getImageDimensions, getImageDimensionsFromFile } from "./screenshot.js";
16
- import { createClient, getModelId } from "../agent/providers/client-factory.js";
17
- function clamp(n, min, max) {
18
- return Math.max(min, Math.min(max, n));
19
- }
20
- // ── Resolver ───────────────────────────────────────────────────────────
21
- /**
22
- * Resolve a natural language target to pixel coordinates.
23
- * Uses Messages API with computer_20251124 tool; returns the first tool_use result.
24
- *
25
- * The input screenshot is expected to already be resized to fit Claude's
26
- * vision constraints (by takeScreenshot). We read its actual pixel dimensions,
27
- * use those as display_width_px / display_height_px, and unscale the returned
28
- * coordinates back to the real display space using imageWidth/displayWidth ratio.
29
- */
30
- export async function resolveCoordinates(screenshotBase64, instruction, displayWidth, displayHeight, config, screenshotFilePath) {
31
- // Read actual pixel dimensions of the (already resized) screenshot.
32
- // Prefer file path to avoid base64 decode + temp file round-trip.
33
- const dims = screenshotFilePath
34
- ? await getImageDimensionsFromFile(screenshotFilePath)
35
- : await getImageDimensions(Buffer.from(screenshotBase64, "base64"));
36
- if (!dims) {
37
- logger.warn("Could not read screenshot dimensions, aborting coordinate resolution");
38
- return null;
39
- }
40
- const imgW = dims.width;
41
- const imgH = dims.height;
42
- // Scale factors to convert from image space back to actual display space
43
- const scaleX = displayWidth / imgW;
44
- const scaleY = displayHeight / imgH;
45
- logger.info(`Resolving coordinates: "${instruction}" (display ${displayWidth}x${displayHeight}, image ${imgW}x${imgH}, scaleX=${scaleX.toFixed(3)}, scaleY=${scaleY.toFixed(3)})`, { instruction, displayWidth, displayHeight, imgW, imgH, scaleX, scaleY });
46
- const client = createClient(config);
47
- const response = await client.beta.messages.create({
48
- model: getModelId(config),
49
- max_tokens: 1024,
50
- betas: ["computer-use-2025-11-24"],
51
- tools: [
52
- {
53
- type: "computer_20251124",
54
- name: "computer",
55
- display_width_px: imgW,
56
- display_height_px: imgH,
57
- display_number: 1,
58
- },
59
- ],
60
- system: "You are a helpful assistant that can resolve natural language targets to pixel coordinates using the computer tool. Call the tool directly, no questions or explanations.",
61
- tool_choice: { type: "tool", name: "computer" },
62
- messages: [
63
- {
64
- role: "user",
65
- content: [
66
- {
67
- type: "image",
68
- source: {
69
- type: "base64",
70
- media_type: "image/png",
71
- data: screenshotBase64,
72
- },
73
- },
74
- {
75
- type: "text",
76
- text: instruction,
77
- },
78
- ],
79
- },
80
- ],
81
- });
82
- for (const block of response.content) {
83
- if (block.type === "tool_use" && block.name === "computer") {
84
- const input = block.input;
85
- const coord = input.coordinate;
86
- const action = input.action ?? "left_click";
87
- logger.debug(`Coordinate resolver raw response: action=${action} coordinate=${JSON.stringify(coord)}`, { instruction, action, coordinate: coord, fullInput: input });
88
- if (Array.isArray(coord) && coord.length >= 2) {
89
- const rawX = coord[0];
90
- const rawY = coord[1];
91
- if (typeof rawX === "number" && typeof rawY === "number" && Number.isFinite(rawX) && Number.isFinite(rawY)) {
92
- // Unscale: Claude returned coords in image space → convert to actual display space
93
- const x = clamp(Math.round(rawX * scaleX), 0, displayWidth);
94
- const y = clamp(Math.round(rawY * scaleY), 0, displayHeight);
95
- logger.info(`Resolved coordinates: action=${action} raw=(${rawX},${rawY}) unscaled=(${x},${y}) scaleX=${scaleX.toFixed(3)} scaleY=${scaleY.toFixed(3)}`, { instruction, action, rawX, rawY, x, y, scaleX, scaleY });
96
- return { action, x, y };
97
- }
98
- }
99
- }
100
- }
101
- logger.info(`Could not resolve coordinates: "${instruction}"`, { instruction });
102
- return null;
103
- }
104
- //# sourceMappingURL=coordinate-resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"coordinate-resolver.js","sourceRoot":"","sources":["../../src/tools/coordinate-resolver.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- export interface PlaywriterRelayStatus {
2
- reachable: boolean;
3
- extensionConnected: boolean;
4
- activeTargets: number;
5
- }
6
- export declare function getRelayCdpEndpoint(host: string, port: number): string;
7
- export declare function getPlaywriterRelayStatus(host?: string, port?: number): Promise<PlaywriterRelayStatus>;
8
- export declare function ensurePlaywriterRelay(host?: string, port?: number): void;
9
- //# sourceMappingURL=playwriter-relay.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"playwriter-relay.d.ts","sourceRoot":"","sources":["../../src/utils/playwriter-relay.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB;AAUD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtE;AAOD,wBAAsB,wBAAwB,CAAC,IAAI,SAAc,EAAE,IAAI,SAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAkB/G;AAED,wBAAgB,qBAAqB,CAAC,IAAI,SAAc,EAAE,IAAI,SAAQ,GAAG,IAAI,CAwC5E"}
@@ -1,77 +0,0 @@
1
- import { execSync } from "node:child_process";
2
- import { existsSync } from "node:fs";
3
- import { logger } from "../logger.js";
4
- import { getPackageRoot } from "./version-check.js";
5
- import { killPlaywrightProfileCdpChrome } from "../agent/browser-launcher.js";
6
- import { getPlaywriterExtensionInstallations } from "../onboarding/playwriter-extension.js";
7
- import path from "node:path";
8
- const PM2_PROCESS_NAME = "playwriter-relay";
9
- function getScriptPath() {
10
- return path.join(getPackageRoot(), "scripts", "playwriter-relay.mjs");
11
- }
12
- function getRelayBaseUrl(host, port) {
13
- return `http://${host}:${port}`;
14
- }
15
- export function getRelayCdpEndpoint(host, port) {
16
- return `${getRelayBaseUrl(host, port)}/cdp`;
17
- }
18
- function isOnlyPlaywrightProfileInstallation(installations) {
19
- return installations.length > 0
20
- && installations.every((profile) => profile === ".playwright-mcp" || profile.startsWith(".playwright-mcp/"));
21
- }
22
- export async function getPlaywriterRelayStatus(host = "127.0.0.1", port = 19988) {
23
- try {
24
- const response = await fetch(`${getRelayBaseUrl(host, port)}/extension/status`, {
25
- signal: AbortSignal.timeout(1000),
26
- });
27
- if (!response.ok) {
28
- return { reachable: true, extensionConnected: false, activeTargets: 0 };
29
- }
30
- const status = await response.json();
31
- return {
32
- reachable: true,
33
- extensionConnected: status.connected === true,
34
- activeTargets: typeof status.activeTargets === "number" ? status.activeTargets : 0,
35
- };
36
- }
37
- catch {
38
- return { reachable: false, extensionConnected: false, activeTargets: 0 };
39
- }
40
- }
41
- export function ensurePlaywriterRelay(host = "127.0.0.1", port = 19988) {
42
- killPlaywrightProfileCdpChrome();
43
- const installations = getPlaywriterExtensionInstallations();
44
- if (!isOnlyPlaywrightProfileInstallation(installations)) {
45
- throw new Error(`Refusing to start Playwriter relay: expected Playwriter extension only in .playwright-mcp, found ${installations.length > 0 ? installations.join(", ") : "none"}`);
46
- }
47
- const scriptPath = getScriptPath();
48
- if (!existsSync(scriptPath)) {
49
- throw new Error(`Playwriter relay script not found: ${scriptPath}`);
50
- }
51
- try {
52
- const status = execSync(`pm2 describe ${PM2_PROCESS_NAME} 2>/dev/null`, {
53
- encoding: "utf-8",
54
- });
55
- if (status.includes("online")) {
56
- logger.system("Playwriter relay already running");
57
- return;
58
- }
59
- execSync(`pm2 restart ${PM2_PROCESS_NAME}`, { encoding: "utf-8" });
60
- logger.system("Playwriter relay restarted");
61
- return;
62
- }
63
- catch {
64
- // Process doesn't exist yet.
65
- }
66
- execSync(`pm2 start "${scriptPath}" --name ${PM2_PROCESS_NAME} --update-env`, {
67
- encoding: "utf-8",
68
- env: {
69
- ...process.env,
70
- PLAYWRITER_RELAY_HOST: host,
71
- PLAYWRITER_RELAY_PORT: String(port),
72
- },
73
- });
74
- execSync("pm2 save", { encoding: "utf-8" });
75
- logger.system("Playwriter relay started via pm2");
76
- }
77
- //# sourceMappingURL=playwriter-relay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"playwriter-relay.js","sourceRoot":"","sources":["../../src/utils/playwriter-relay.ts"],"names":[],"mappings":"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"}