visionclaw 0.1.193 → 0.1.194-dev.feat-backup-progress-reporting.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 (352) hide show
  1. package/dist/agent/backup-uploader.d.ts +44 -0
  2. package/dist/agent/backup-uploader.d.ts.map +1 -0
  3. package/dist/agent/backup-uploader.js +83 -0
  4. package/dist/agent/backup-uploader.js.map +1 -0
  5. package/dist/agent/backup.d.ts +7 -1
  6. package/dist/agent/backup.d.ts.map +1 -1
  7. package/dist/agent/backup.js +337 -52
  8. package/dist/agent/backup.js.map +1 -1
  9. package/dist/agent/command-handlers.d.ts +2 -0
  10. package/dist/agent/command-handlers.d.ts.map +1 -1
  11. package/dist/agent/command-handlers.js +29 -3
  12. package/dist/agent/command-handlers.js.map +1 -1
  13. package/dist/agent/context.d.ts +2 -0
  14. package/dist/agent/context.d.ts.map +1 -1
  15. package/dist/agent/context.js +11 -1
  16. package/dist/agent/context.js.map +1 -1
  17. package/dist/agent/data-collector.d.ts.map +1 -1
  18. package/dist/agent/data-collector.js +23 -38
  19. package/dist/agent/data-collector.js.map +1 -1
  20. package/dist/agent/loop.d.ts +3 -0
  21. package/dist/agent/loop.d.ts.map +1 -1
  22. package/dist/agent/loop.js +48 -0
  23. package/dist/agent/loop.js.map +1 -1
  24. package/dist/agent/message-format.d.ts.map +1 -1
  25. package/dist/agent/message-format.js +3 -0
  26. package/dist/agent/message-format.js.map +1 -1
  27. package/dist/agent/status.d.ts.map +1 -1
  28. package/dist/agent/status.js +2 -1
  29. package/dist/agent/status.js.map +1 -1
  30. package/dist/backup.d.ts +4 -1
  31. package/dist/backup.d.ts.map +1 -1
  32. package/dist/backup.js +86 -3
  33. package/dist/backup.js.map +1 -1
  34. package/dist/calendar/google-calendar.d.ts +2 -0
  35. package/dist/calendar/google-calendar.d.ts.map +1 -1
  36. package/dist/calendar/google-calendar.js +3 -0
  37. package/dist/calendar/google-calendar.js.map +1 -1
  38. package/dist/channels/interface.d.ts +9 -0
  39. package/dist/channels/interface.d.ts.map +1 -1
  40. package/dist/channels/manager.d.ts +7 -1
  41. package/dist/channels/manager.d.ts.map +1 -1
  42. package/dist/channels/manager.js +12 -0
  43. package/dist/channels/manager.js.map +1 -1
  44. package/dist/channels/telegram.d.ts.map +1 -1
  45. package/dist/channels/telegram.js +5 -0
  46. package/dist/channels/telegram.js.map +1 -1
  47. package/dist/cli/index.d.ts +1 -0
  48. package/dist/cli/index.d.ts.map +1 -1
  49. package/dist/cli/index.js +42 -2
  50. package/dist/cli/index.js.map +1 -1
  51. package/dist/config/types.d.ts +9 -0
  52. package/dist/config/types.d.ts.map +1 -1
  53. package/dist/config/types.js +6 -0
  54. package/dist/config/types.js.map +1 -1
  55. package/dist/drive/google-drive.d.ts +1 -0
  56. package/dist/drive/google-drive.d.ts.map +1 -1
  57. package/dist/drive/google-drive.js +5 -0
  58. package/dist/drive/google-drive.js.map +1 -1
  59. package/dist/i18n/messages.d.ts +4 -0
  60. package/dist/i18n/messages.d.ts.map +1 -1
  61. package/dist/i18n/messages.js +7 -2
  62. package/dist/i18n/messages.js.map +1 -1
  63. package/dist/index.js.map +1 -1
  64. package/dist/obs/server.d.ts +7 -0
  65. package/dist/obs/server.d.ts.map +1 -1
  66. package/dist/obs/server.js +22 -0
  67. package/dist/obs/server.js.map +1 -1
  68. package/dist/onboarding/bot-profile.d.ts.map +1 -1
  69. package/dist/onboarding/bot-profile.js +1 -0
  70. package/dist/onboarding/bot-profile.js.map +1 -1
  71. package/dist/onboarding/index.d.ts.map +1 -1
  72. package/dist/onboarding/index.js +5 -0
  73. package/dist/onboarding/index.js.map +1 -1
  74. package/dist/onboarding/prepare-mac.d.ts +1 -0
  75. package/dist/onboarding/prepare-mac.d.ts.map +1 -1
  76. package/dist/onboarding/prepare-mac.js +32 -15
  77. package/dist/onboarding/prepare-mac.js.map +1 -1
  78. package/dist/onboarding/setup-shared.d.ts.map +1 -1
  79. package/dist/onboarding/setup-shared.js +6 -0
  80. package/dist/onboarding/setup-shared.js.map +1 -1
  81. package/dist/onboarding/setup-steps.d.ts.map +1 -1
  82. package/dist/onboarding/setup-steps.js +8 -0
  83. package/dist/onboarding/setup-steps.js.map +1 -1
  84. package/dist/realtime/agent-bridge.d.ts +7 -0
  85. package/dist/realtime/agent-bridge.d.ts.map +1 -0
  86. package/dist/realtime/agent-bridge.js +31 -0
  87. package/dist/realtime/agent-bridge.js.map +1 -0
  88. package/dist/realtime/assets/index.html +1058 -0
  89. package/dist/realtime/assets/samples/alloy.mp3 +0 -0
  90. package/dist/realtime/assets/samples/ash.mp3 +0 -0
  91. package/dist/realtime/assets/samples/ballad.mp3 +0 -0
  92. package/dist/realtime/assets/samples/cedar.mp3 +0 -0
  93. package/dist/realtime/assets/samples/coral.mp3 +0 -0
  94. package/dist/realtime/assets/samples/echo.mp3 +0 -0
  95. package/dist/realtime/assets/samples/marin.mp3 +0 -0
  96. package/dist/realtime/assets/samples/sage.mp3 +0 -0
  97. package/dist/realtime/assets/samples/shimmer.mp3 +0 -0
  98. package/dist/realtime/assets/samples/verse.mp3 +0 -0
  99. package/dist/realtime/context.d.ts +14 -0
  100. package/dist/realtime/context.d.ts.map +1 -0
  101. package/dist/realtime/context.js +153 -0
  102. package/dist/realtime/context.js.map +1 -0
  103. package/dist/realtime/http-helpers.d.ts +5 -0
  104. package/dist/realtime/http-helpers.d.ts.map +1 -0
  105. package/dist/realtime/http-helpers.js +29 -0
  106. package/dist/realtime/http-helpers.js.map +1 -0
  107. package/dist/realtime/index.d.ts +62 -0
  108. package/dist/realtime/index.d.ts.map +1 -0
  109. package/dist/realtime/index.js +94 -0
  110. package/dist/realtime/index.js.map +1 -0
  111. package/dist/realtime/server.d.ts +6 -0
  112. package/dist/realtime/server.d.ts.map +1 -0
  113. package/dist/realtime/server.js +476 -0
  114. package/dist/realtime/server.js.map +1 -0
  115. package/dist/realtime/telegram-auth.d.ts +2 -0
  116. package/dist/realtime/telegram-auth.d.ts.map +1 -0
  117. package/dist/realtime/telegram-auth.js +24 -0
  118. package/dist/realtime/telegram-auth.js.map +1 -0
  119. package/dist/realtime/tools.d.ts +829 -0
  120. package/dist/realtime/tools.d.ts.map +1 -0
  121. package/dist/realtime/tools.js +630 -0
  122. package/dist/realtime/tools.js.map +1 -0
  123. package/dist/realtime/types.d.ts +62 -0
  124. package/dist/realtime/types.d.ts.map +1 -0
  125. package/dist/realtime/types.js +3 -0
  126. package/dist/realtime/types.js.map +1 -0
  127. package/dist/realtime/voice-summarizer.d.ts +4 -0
  128. package/dist/realtime/voice-summarizer.d.ts.map +1 -0
  129. package/dist/realtime/voice-summarizer.js +129 -0
  130. package/dist/realtime/voice-summarizer.js.map +1 -0
  131. package/dist/restore.d.ts +5 -0
  132. package/dist/restore.d.ts.map +1 -1
  133. package/dist/restore.js +132 -16
  134. package/dist/restore.js.map +1 -1
  135. package/dist/tools/email.d.ts +1 -1
  136. package/dist/tools/memory.d.ts +13 -0
  137. package/dist/tools/memory.d.ts.map +1 -1
  138. package/dist/tools/memory.js +43 -43
  139. package/dist/tools/memory.js.map +1 -1
  140. package/dist/tools/stock-data.d.ts +16 -0
  141. package/dist/tools/stock-data.d.ts.map +1 -1
  142. package/dist/tools/stock-data.js +36 -38
  143. package/dist/tools/stock-data.js.map +1 -1
  144. package/dist/tools/web-fetch.d.ts +4 -0
  145. package/dist/tools/web-fetch.d.ts.map +1 -1
  146. package/dist/tools/web-fetch.js +95 -23
  147. package/dist/tools/web-fetch.js.map +1 -1
  148. package/dist/tos-storage.d.ts +45 -0
  149. package/dist/tos-storage.d.ts.map +1 -0
  150. package/dist/tos-storage.js +134 -0
  151. package/dist/tos-storage.js.map +1 -0
  152. package/dist-agent/bundle.cjs +170934 -167547
  153. package/package.json +3 -2
  154. package/dist/agent/applied-credential-signature.d.ts +0 -53
  155. package/dist/agent/applied-credential-signature.d.ts.map +0 -1
  156. package/dist/agent/applied-credential-signature.js +0 -137
  157. package/dist/agent/applied-credential-signature.js.map +0 -1
  158. package/dist/agent/engines/claude/cli-resolver.d.ts +0 -16
  159. package/dist/agent/engines/claude/cli-resolver.d.ts.map +0 -1
  160. package/dist/agent/engines/claude/cli-resolver.js +0 -83
  161. package/dist/agent/engines/claude/cli-resolver.js.map +0 -1
  162. package/dist/agent/engines/claude/session-browser-policy.d.ts +0 -9
  163. package/dist/agent/engines/claude/session-browser-policy.d.ts.map +0 -1
  164. package/dist/agent/engines/claude/session-browser-policy.js +0 -49
  165. package/dist/agent/engines/claude/session-browser-policy.js.map +0 -1
  166. package/dist/agent/engines/claude/session.d.ts +0 -291
  167. package/dist/agent/engines/claude/session.d.ts.map +0 -1
  168. package/dist/agent/engines/claude/session.js +0 -1177
  169. package/dist/agent/engines/claude/session.js.map +0 -1
  170. package/dist/agent/engines/client-factory.d.ts +0 -63
  171. package/dist/agent/engines/client-factory.d.ts.map +0 -1
  172. package/dist/agent/engines/client-factory.js +0 -382
  173. package/dist/agent/engines/client-factory.js.map +0 -1
  174. package/dist/agent/engines/engine.d.ts +0 -8
  175. package/dist/agent/engines/engine.d.ts.map +0 -1
  176. package/dist/agent/engines/engine.js +0 -15
  177. package/dist/agent/engines/engine.js.map +0 -1
  178. package/dist/agent/engines/openai/file-session.d.ts +0 -49
  179. package/dist/agent/engines/openai/file-session.d.ts.map +0 -1
  180. package/dist/agent/engines/openai/file-session.js +0 -108
  181. package/dist/agent/engines/openai/file-session.js.map +0 -1
  182. package/dist/agent/engines/openai/file-tools.d.ts +0 -35
  183. package/dist/agent/engines/openai/file-tools.d.ts.map +0 -1
  184. package/dist/agent/engines/openai/file-tools.js +0 -194
  185. package/dist/agent/engines/openai/file-tools.js.map +0 -1
  186. package/dist/agent/engines/openai/session.d.ts +0 -190
  187. package/dist/agent/engines/openai/session.d.ts.map +0 -1
  188. package/dist/agent/engines/openai/session.js +0 -1066
  189. package/dist/agent/engines/openai/session.js.map +0 -1
  190. package/dist/agent/engines/openai/tools.d.ts +0 -13
  191. package/dist/agent/engines/openai/tools.d.ts.map +0 -1
  192. package/dist/agent/engines/openai/tools.js +0 -248
  193. package/dist/agent/engines/openai/tools.js.map +0 -1
  194. package/dist/agent/engines/session-types.d.ts +0 -146
  195. package/dist/agent/engines/session-types.d.ts.map +0 -1
  196. package/dist/agent/engines/session-types.js +0 -2
  197. package/dist/agent/engines/session-types.js.map +0 -1
  198. package/dist/agent/engines/system-prompt-log.d.ts +0 -9
  199. package/dist/agent/engines/system-prompt-log.d.ts.map +0 -1
  200. package/dist/agent/engines/system-prompt-log.js +0 -46
  201. package/dist/agent/engines/system-prompt-log.js.map +0 -1
  202. package/dist/agent/transcript/transcript-backfill.d.ts +0 -54
  203. package/dist/agent/transcript/transcript-backfill.d.ts.map +0 -1
  204. package/dist/agent/transcript/transcript-backfill.js +0 -604
  205. package/dist/agent/transcript/transcript-backfill.js.map +0 -1
  206. package/dist/agent/transcript/transcript-indexer.d.ts +0 -273
  207. package/dist/agent/transcript/transcript-indexer.d.ts.map +0 -1
  208. package/dist/agent/transcript/transcript-indexer.js +0 -1217
  209. package/dist/agent/transcript/transcript-indexer.js.map +0 -1
  210. package/dist/agent/transcript/transcript-memory-migrations.d.ts +0 -25
  211. package/dist/agent/transcript/transcript-memory-migrations.d.ts.map +0 -1
  212. package/dist/agent/transcript/transcript-memory-migrations.js +0 -87
  213. package/dist/agent/transcript/transcript-memory-migrations.js.map +0 -1
  214. package/dist/agent/transcript-memory-migrations.d.ts +0 -25
  215. package/dist/agent/transcript-memory-migrations.d.ts.map +0 -1
  216. package/dist/agent/transcript-memory-migrations.js +0 -87
  217. package/dist/agent/transcript-memory-migrations.js.map +0 -1
  218. package/dist/agent/tunnel-credential-handler.d.ts +0 -90
  219. package/dist/agent/tunnel-credential-handler.d.ts.map +0 -1
  220. package/dist/agent/tunnel-credential-handler.js +0 -162
  221. package/dist/agent/tunnel-credential-handler.js.map +0 -1
  222. package/dist/agent/usage/usage-backfill-handler.d.ts +0 -18
  223. package/dist/agent/usage/usage-backfill-handler.d.ts.map +0 -1
  224. package/dist/agent/usage/usage-backfill-handler.js +0 -69
  225. package/dist/agent/usage/usage-backfill-handler.js.map +0 -1
  226. package/dist/agent/usage/usage-gate.d.ts +0 -25
  227. package/dist/agent/usage/usage-gate.d.ts.map +0 -1
  228. package/dist/agent/usage/usage-gate.js +0 -83
  229. package/dist/agent/usage/usage-gate.js.map +0 -1
  230. package/dist/agent/usage/usage-handler.d.ts +0 -7
  231. package/dist/agent/usage/usage-handler.d.ts.map +0 -1
  232. package/dist/agent/usage/usage-handler.js +0 -28
  233. package/dist/agent/usage/usage-handler.js.map +0 -1
  234. package/dist/agent/usage/usage-report-builder.d.ts +0 -26
  235. package/dist/agent/usage/usage-report-builder.d.ts.map +0 -1
  236. package/dist/agent/usage/usage-report-builder.js +0 -80
  237. package/dist/agent/usage/usage-report-builder.js.map +0 -1
  238. package/dist/agent/usage/usage-report-queue.d.ts +0 -26
  239. package/dist/agent/usage/usage-report-queue.d.ts.map +0 -1
  240. package/dist/agent/usage/usage-report-queue.js +0 -199
  241. package/dist/agent/usage/usage-report-queue.js.map +0 -1
  242. package/dist/agent/usage/usage-report-types.d.ts +0 -41
  243. package/dist/agent/usage/usage-report-types.d.ts.map +0 -1
  244. package/dist/agent/usage/usage-report-types.js +0 -2
  245. package/dist/agent/usage/usage-report-types.js.map +0 -1
  246. package/dist/agent/usage/usage-reporter.d.ts +0 -31
  247. package/dist/agent/usage/usage-reporter.d.ts.map +0 -1
  248. package/dist/agent/usage/usage-reporter.js +0 -102
  249. package/dist/agent/usage/usage-reporter.js.map +0 -1
  250. package/dist/agent/usage-backfill-handler.d.ts +0 -18
  251. package/dist/agent/usage-backfill-handler.d.ts.map +0 -1
  252. package/dist/agent/usage-backfill-handler.js +0 -69
  253. package/dist/agent/usage-backfill-handler.js.map +0 -1
  254. package/dist/agent/usage-gate.d.ts +0 -25
  255. package/dist/agent/usage-gate.d.ts.map +0 -1
  256. package/dist/agent/usage-gate.js +0 -83
  257. package/dist/agent/usage-gate.js.map +0 -1
  258. package/dist/agent/usage-report-builder.d.ts +0 -26
  259. package/dist/agent/usage-report-builder.d.ts.map +0 -1
  260. package/dist/agent/usage-report-builder.js +0 -80
  261. package/dist/agent/usage-report-builder.js.map +0 -1
  262. package/dist/agent/usage-report-queue.d.ts +0 -26
  263. package/dist/agent/usage-report-queue.d.ts.map +0 -1
  264. package/dist/agent/usage-report-queue.js +0 -199
  265. package/dist/agent/usage-report-queue.js.map +0 -1
  266. package/dist/agent/usage-report-types.d.ts +0 -41
  267. package/dist/agent/usage-report-types.d.ts.map +0 -1
  268. package/dist/agent/usage-report-types.js +0 -2
  269. package/dist/agent/usage-report-types.js.map +0 -1
  270. package/dist/agent/usage-reporter.d.ts +0 -31
  271. package/dist/agent/usage-reporter.d.ts.map +0 -1
  272. package/dist/agent/usage-reporter.js +0 -102
  273. package/dist/agent/usage-reporter.js.map +0 -1
  274. package/dist/agent/wake-cycle-tool-tracker.d.ts +0 -39
  275. package/dist/agent/wake-cycle-tool-tracker.d.ts.map +0 -1
  276. package/dist/agent/wake-cycle-tool-tracker.js +0 -72
  277. package/dist/agent/wake-cycle-tool-tracker.js.map +0 -1
  278. package/dist/billing/payg-handler.d.ts +0 -29
  279. package/dist/billing/payg-handler.d.ts.map +0 -1
  280. package/dist/billing/payg-handler.js +0 -92
  281. package/dist/billing/payg-handler.js.map +0 -1
  282. package/dist/billing/payment-handler.d.ts +0 -24
  283. package/dist/billing/payment-handler.d.ts.map +0 -1
  284. package/dist/billing/payment-handler.js +0 -101
  285. package/dist/billing/payment-handler.js.map +0 -1
  286. package/dist/builtin-skills/catalog/phone-adb-automation/SKILL.md +0 -412
  287. package/dist/builtin-skills/catalog/phone-adb-automation/phone_input.sh +0 -132
  288. package/dist/builtin-skills/catalog/phone-adb-automation/phone_launch.sh +0 -166
  289. package/dist/builtin-skills/catalog/phone-adb-automation/phone_screenshot.sh +0 -87
  290. package/dist/builtin-skills/catalog/phone-adb-automation/phone_security_kbd.py +0 -174
  291. package/dist/builtin-skills/catalog/phone-adb-automation/phone_setup.sh +0 -274
  292. package/dist/builtin-skills/catalog/phone-adb-automation/phone_swipe.sh +0 -111
  293. package/dist/builtin-skills/catalog/phone-adb-automation/phone_tap.sh +0 -87
  294. package/dist/builtin-skills/catalog/phone-adb-automation/phone_ui_parse.py +0 -176
  295. package/dist/builtin-skills/catalog/phone-adb-automation/phone_wake_unlock.sh +0 -67
  296. package/dist/builtin-skills/transcribe-audio/SKILL.md +0 -122
  297. package/dist/data-processing/convert-demo-cli.d.ts +0 -7
  298. package/dist/data-processing/convert-demo-cli.d.ts.map +0 -1
  299. package/dist/data-processing/convert-demo-cli.js +0 -30
  300. package/dist/data-processing/convert-demo-cli.js.map +0 -1
  301. package/dist/data-processing/convert-demo.d.ts +0 -26
  302. package/dist/data-processing/convert-demo.d.ts.map +0 -1
  303. package/dist/data-processing/convert-demo.js +0 -233
  304. package/dist/data-processing/convert-demo.js.map +0 -1
  305. package/dist/obs/rdp/icons/icons/app_windows.svg +0 -4
  306. package/dist/obs/rdp/icons/icons/clip_get.svg +0 -4
  307. package/dist/obs/rdp/icons/icons/clip_send.svg +0 -4
  308. package/dist/obs/rdp/icons/icons/clip_shared.svg +0 -4
  309. package/dist/obs/rdp/icons/icons/clipboard.svg +0 -4
  310. package/dist/obs/rdp/icons/icons/clipboard_shared.svg +0 -4
  311. package/dist/obs/rdp/icons/icons/control.svg +0 -4
  312. package/dist/obs/rdp/icons/icons/desktop.svg +0 -4
  313. package/dist/obs/rdp/icons/icons/display.svg +0 -4
  314. package/dist/obs/rdp/icons/icons/launchpad.svg +0 -4
  315. package/dist/obs/rdp/icons/icons/mission_control.svg +0 -4
  316. package/dist/obs/rdp/icons/icons/screenshot.svg +0 -4
  317. package/dist/obs/rdp/icons/icons/zoom_actual.svg +0 -4
  318. package/dist/obs/rdp/icons/icons/zoom_fit.svg +0 -4
  319. package/dist/obs/rdp/icons/icons/zoom_in.svg +0 -4
  320. package/dist/obs/rdp/icons/icons/zoom_out.svg +0 -4
  321. package/dist/obs/tunnel-telemetry.d.ts +0 -46
  322. package/dist/obs/tunnel-telemetry.d.ts.map +0 -1
  323. package/dist/obs/tunnel-telemetry.js +0 -70
  324. package/dist/obs/tunnel-telemetry.js.map +0 -1
  325. package/dist/onboarding/cloudflared-cert.d.ts +0 -15
  326. package/dist/onboarding/cloudflared-cert.d.ts.map +0 -1
  327. package/dist/onboarding/cloudflared-cert.js +0 -57
  328. package/dist/onboarding/cloudflared-cert.js.map +0 -1
  329. package/dist/onboarding/playwriter-extension.d.ts +0 -19
  330. package/dist/onboarding/playwriter-extension.d.ts.map +0 -1
  331. package/dist/onboarding/playwriter-extension.js +0 -246
  332. package/dist/onboarding/playwriter-extension.js.map +0 -1
  333. package/dist/service/gbox-tun.d.ts +0 -14
  334. package/dist/service/gbox-tun.d.ts.map +0 -1
  335. package/dist/service/gbox-tun.js +0 -315
  336. package/dist/service/gbox-tun.js.map +0 -1
  337. package/dist/skills/installed.d.ts +0 -11
  338. package/dist/skills/installed.d.ts.map +0 -1
  339. package/dist/skills/installed.js +0 -35
  340. package/dist/skills/installed.js.map +0 -1
  341. package/dist/tools/coordinate-resolver.d.ts +0 -30
  342. package/dist/tools/coordinate-resolver.d.ts.map +0 -1
  343. package/dist/tools/coordinate-resolver.js +0 -104
  344. package/dist/tools/coordinate-resolver.js.map +0 -1
  345. package/dist/utils/playwriter-relay.d.ts +0 -9
  346. package/dist/utils/playwriter-relay.d.ts.map +0 -1
  347. package/dist/utils/playwriter-relay.js +0 -77
  348. package/dist/utils/playwriter-relay.js.map +0 -1
  349. package/dist/utils/wechat-monitor.d.ts +0 -21
  350. package/dist/utils/wechat-monitor.d.ts.map +0 -1
  351. package/dist/utils/wechat-monitor.js +0 -88
  352. package/dist/utils/wechat-monitor.js.map +0 -1
@@ -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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"}