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,604 +0,0 @@
1
- /**
2
- * Backfill historical VisionClaw runtime logs into the transcript-memory
3
- * database.
4
- *
5
- * IMPORTANT — terminology:
6
- * - "Log files" = VisionClaw runtime logs stored at
7
- * `~/.visionclaw/profiles/<profile>/logs/YYYY-MM-DD.jsonl(.gz)`.
8
- * Format: `{timestamp, level, category, message, data}`.
9
- * - "Transcript files" = Claude Agent SDK model transcripts stored at
10
- * `~/.claude/projects/<slug>/<sessionId>.jsonl`.
11
- * Format: `{type:"user"|"assistant", message:{...}}`.
12
- *
13
- * This module operates on **log files** (not Claude transcripts).
14
- *
15
- * Reads JSONL (and JSONL.gz) log files from the configured logs directory,
16
- * segments them into wake cycles (wake → next wake / end-of-file boundaries),
17
- * matching the existing data-processing segmenter, then generates
18
- * summaries + embeddings via Gemini, and inserts them into the same SQLite
19
- * DB used by the live transcript indexer.
20
- *
21
- * Usage:
22
- * visionclaw backfill-memory [--dry-run] [--since YYYY-MM-DD] [--concurrency N]
23
- */
24
- import fs from "node:fs";
25
- import path from "node:path";
26
- import readline from "node:readline";
27
- import { createGunzip } from "node:zlib";
28
- import { pipeline } from "node:stream/promises";
29
- import { PassThrough } from "node:stream";
30
- import { getConfigDir, loadConfig } from "../../config/index.js";
31
- import { generateSummary, generateEmbedding, insertWakeCycleRecord, wakeCycleExists, getWakeCycleCount, closeTranscriptMemoryDb, } from "./transcript-indexer.js";
32
- import { logger } from "../../logger.js";
33
- // ---------------------------------------------------------------------------
34
- // Log file discovery and streaming
35
- // ---------------------------------------------------------------------------
36
- function discoverLogFiles(logsDir, since) {
37
- if (!fs.existsSync(logsDir)) {
38
- console.error(`Logs directory not found: ${logsDir}`);
39
- return [];
40
- }
41
- const files = fs
42
- .readdirSync(logsDir)
43
- .filter((f) => (f.endsWith(".jsonl") || f.endsWith(".jsonl.gz")) &&
44
- !f.includes(".archive."))
45
- .sort();
46
- if (!since)
47
- return files.map((f) => path.join(logsDir, f));
48
- // Filter files whose date portion is >= since
49
- return files
50
- .filter((f) => {
51
- // File names are like "2026-03-30.jsonl" or "2026-03-30.jsonl.gz"
52
- const datePart = f.slice(0, 10);
53
- return datePart >= since;
54
- })
55
- .map((f) => path.join(logsDir, f));
56
- }
57
- function createLogInputStream(filePath) {
58
- const isGz = filePath.endsWith(".gz");
59
- if (isGz) {
60
- const fileStream = fs.createReadStream(filePath);
61
- const gunzip = createGunzip();
62
- const passthrough = new PassThrough();
63
- void pipeline(fileStream, gunzip, passthrough).catch(() => {
64
- // Stream errors will surface when readline tries to read
65
- });
66
- return passthrough;
67
- }
68
- return fs.createReadStream(filePath, { encoding: "utf-8" });
69
- }
70
- async function* streamLogEntries(filePath) {
71
- const fileName = path.basename(filePath);
72
- let lineIdx = 0;
73
- const rl = readline.createInterface({
74
- input: createLogInputStream(filePath),
75
- crlfDelay: Infinity,
76
- });
77
- for await (const raw of rl) {
78
- const trimmed = raw.trim();
79
- if (!trimmed) {
80
- lineIdx++;
81
- continue;
82
- }
83
- try {
84
- const obj = JSON.parse(trimmed);
85
- yield {
86
- timestamp: obj.timestamp ?? "",
87
- level: obj.level ?? "",
88
- category: obj.category ?? "",
89
- message: obj.message ?? "",
90
- data: obj.data ?? {},
91
- sourceFile: fileName,
92
- lineIndex: lineIdx,
93
- };
94
- }
95
- catch {
96
- // Skip malformed lines
97
- }
98
- lineIdx++;
99
- }
100
- }
101
- class AbortStreamingBackfillError extends Error {
102
- constructor() {
103
- super("streaming backfill aborted");
104
- }
105
- }
106
- async function streamWakeCycles(filePath, onCycle) {
107
- let current;
108
- let entryCount = 0;
109
- let cycleCount = 0;
110
- for await (const entry of streamLogEntries(filePath)) {
111
- entryCount++;
112
- if (entry.category === "wake") {
113
- if (current) {
114
- current.endLine = entry.lineIndex; // exclusive: up to the next wake
115
- await onCycle(current, cycleCount);
116
- cycleCount++;
117
- }
118
- current = {
119
- entries: [entry],
120
- sourceFile: filePath,
121
- startLine: entry.lineIndex,
122
- endLine: entry.lineIndex + 1,
123
- };
124
- continue;
125
- }
126
- if (!current)
127
- continue;
128
- current.entries.push(entry);
129
- current.endLine = entry.lineIndex + 1;
130
- }
131
- if (current) {
132
- await onCycle(current, cycleCount);
133
- cycleCount++;
134
- }
135
- return { entryCount, cycleCount };
136
- }
137
- // ---------------------------------------------------------------------------
138
- // Condensed text generation from VisionClaw log entries
139
- // ---------------------------------------------------------------------------
140
- function condenseCycleEntries(entries) {
141
- const parts = [];
142
- for (const entry of entries) {
143
- // TODO: [thinking] are purposely ignored because [thinking] is usually noisy internal narration rather than durable memory content.
144
- switch (entry.category) {
145
- case "incoming": {
146
- const channel = entry.data.channel ?? "";
147
- const sender = entry.data.sender ?? "";
148
- const text = entry.data.text ?? entry.message;
149
- parts.push(`[User] [${channel}] ${sender}: ${text}`);
150
- break;
151
- }
152
- case "send": {
153
- const text = entry.data.text ?? entry.message;
154
- if (text.length > 500) {
155
- parts.push(`[Sent to Model] ${text.slice(0, 500)}...[truncated]`);
156
- }
157
- else {
158
- parts.push(`[Sent to Model] ${text}`);
159
- }
160
- break;
161
- }
162
- case "assistant":
163
- parts.push(`[Assistant] ${entry.message}`);
164
- break;
165
- case "tool_call": {
166
- const name = entry.data.name ?? "unknown";
167
- const input = entry.data.input;
168
- const inputStr = input ? JSON.stringify(input) : "";
169
- const truncated = inputStr.length > 500
170
- ? inputStr.slice(0, 500) + "...[truncated]"
171
- : inputStr;
172
- parts.push(`[Tool Call] ${name}(${truncated})`);
173
- break;
174
- }
175
- case "tool_result": {
176
- // Only include errors in the condensed version
177
- if (entry.level === "error") {
178
- const name = entry.data.name ?? "unknown";
179
- const msg = entry.message.length > 300
180
- ? entry.message.slice(0, 300) + "...[truncated]"
181
- : entry.message;
182
- parts.push(`[Tool Error] ${name}: ${msg}`);
183
- }
184
- break;
185
- }
186
- case "wake": {
187
- const trigger = entry.data.trigger ?? "unknown";
188
- parts.push(`[Wake] trigger=${trigger}`);
189
- break;
190
- }
191
- case "result": {
192
- const turns = entry.data.turns;
193
- const cost = entry.data.cost;
194
- parts.push(`[Result] turns=${turns ?? "?"} cost=$${cost ?? "?"}`);
195
- break;
196
- }
197
- // Skip debug, system, channel (noise) categories
198
- }
199
- }
200
- return parts.join("\n");
201
- }
202
- // ---------------------------------------------------------------------------
203
- // Trivial wake cycle detection (backfill log format)
204
- // ---------------------------------------------------------------------------
205
- /**
206
- * Base tool name suffixes considered "housekeeping". MCP tools are often
207
- * prefixed by the SDK (e.g. `mcp__visionclaw__memory`), so we match by
208
- * suffix to handle both bare and prefixed names.
209
- */
210
- const TRIVIAL_TOOL_SUFFIXES = [
211
- "memory",
212
- "memory_transcript_search",
213
- "memory_transcript_detail",
214
- "finish",
215
- "wait",
216
- "switch_session",
217
- ];
218
- /**
219
- * Exact tool names from the Claude Agent SDK that are trivial.
220
- */
221
- const TRIVIAL_EXACT_NAMES = new Set([
222
- "ToolSearch",
223
- ]);
224
- /**
225
- * Check whether a tool name is trivial/housekeeping, handling MCP-prefixed
226
- * names like `mcp__visionclaw__memory` as well as bare names like `memory`.
227
- */
228
- function isTrivialTool(name) {
229
- if (TRIVIAL_EXACT_NAMES.has(name))
230
- return true;
231
- for (const suffix of TRIVIAL_TOOL_SUFFIXES) {
232
- if (name === suffix || name.endsWith(`__${suffix}`))
233
- return true;
234
- }
235
- return false;
236
- }
237
- /**
238
- * Check whether a backfill wake cycle only contains trivial/housekeeping
239
- * tool calls and no substantive work.
240
- */
241
- function isOnlyTrivialToolCallsBackfill(entries) {
242
- let hasToolCalls = false;
243
- for (const entry of entries) {
244
- if (entry.category === "tool_call") {
245
- hasToolCalls = true;
246
- const name = entry.data.name ?? "";
247
- if (!isTrivialTool(name)) {
248
- return false;
249
- }
250
- }
251
- }
252
- return hasToolCalls;
253
- }
254
- // ---------------------------------------------------------------------------
255
- // Wake cycle ID generation for backfill
256
- // ---------------------------------------------------------------------------
257
- function generateBackfillCycleId(cycle, cycleIndex) {
258
- const wakeEntry = cycle.entries.find((e) => e.category === "wake");
259
- const timestamp = wakeEntry?.timestamp ?? "";
260
- // Extract date from ISO timestamp (e.g., "2026-03-30T14:32:00.123+08:00" → "2026-03-30")
261
- const date = timestamp.slice(0, 10) || "unknown";
262
- // Detect session type from "send" entry
263
- const sendEntry = cycle.entries.find((e) => e.category === "send");
264
- let sessionType = "general";
265
- if (sendEntry) {
266
- const match = /\[Active session: (\w+)]/.exec(sendEntry.message);
267
- if (match?.[1])
268
- sessionType = match[1];
269
- }
270
- const seq = String(cycleIndex + 1).padStart(3, "0");
271
- return `${date}_${sessionType}_${seq}`;
272
- }
273
- // ---------------------------------------------------------------------------
274
- // Main backfill logic
275
- // ---------------------------------------------------------------------------
276
- async function processOneCycle(cycle, cycleId, config, dryRun) {
277
- // Check if already indexed
278
- if (wakeCycleExists(cycleId)) {
279
- return "skipped_existing";
280
- }
281
- // Skip cycles with only trivial/housekeeping tool calls
282
- if (isOnlyTrivialToolCallsBackfill(cycle.entries)) {
283
- return "skipped_trivial";
284
- }
285
- // Condense entries
286
- const condensed = condenseCycleEntries(cycle.entries);
287
- if (condensed.length < 50) {
288
- return "skipped_trivial";
289
- }
290
- // Detect session type
291
- const sendEntry = cycle.entries.find((e) => e.category === "send");
292
- let sessionType = "general";
293
- if (sendEntry) {
294
- const match = /\[Active session: (\w+)]/.exec(sendEntry.message);
295
- if (match?.[1])
296
- sessionType = match[1];
297
- }
298
- // Extract timestamps
299
- const wakeEntry = cycle.entries.find((e) => e.category === "wake");
300
- const resultEntry = [...cycle.entries]
301
- .reverse()
302
- .find((e) => e.category === "result");
303
- const timestampStart = wakeEntry?.timestamp ?? new Date().toISOString();
304
- const timestampEnd = resultEntry?.timestamp ?? timestampStart;
305
- if (dryRun) {
306
- console.log(` [DRY RUN] Would index ${cycleId}: ${condensed.length} chars, ` +
307
- `${cycle.entries.length} entries, ${sessionType} session`);
308
- return "indexed";
309
- }
310
- // Generate summary
311
- const { summary, key_excerpts } = await generateSummary(condensed, config);
312
- // Generate embedding (best-effort)
313
- const embeddingVec = await generateEmbedding(summary, config);
314
- const embeddingBlob = embeddingVec
315
- ? Buffer.from(embeddingVec.buffer, embeddingVec.byteOffset, embeddingVec.byteLength)
316
- : null;
317
- // Resolve source file path — store the absolute path to the VisionClaw log file
318
- const sourceFile = path.isAbsolute(cycle.sourceFile)
319
- ? cycle.sourceFile
320
- : path.join(getConfigDir(), "logs", cycle.sourceFile);
321
- // Insert into DB
322
- insertWakeCycleRecord({
323
- wakeCycleId: cycleId,
324
- sessionType,
325
- timestampStart,
326
- timestampEnd,
327
- summary,
328
- keyExcerpts: key_excerpts,
329
- sourceFile,
330
- startLine: cycle.startLine + 1, // Convert 0-indexed inclusive start → 1-indexed inclusive
331
- endLine: cycle.endLine + 1, // Convert 0-indexed exclusive end → 1-indexed exclusive
332
- embeddingBlob,
333
- });
334
- return "indexed";
335
- }
336
- async function sleep(ms) {
337
- return new Promise((resolve) => setTimeout(resolve, ms));
338
- }
339
- // ---------------------------------------------------------------------------
340
- // CLI entry point
341
- // ---------------------------------------------------------------------------
342
- export async function runBackfillMemory(args) {
343
- const options = {
344
- dryRun: args.includes("--dry-run"),
345
- since: null,
346
- concurrency: 1,
347
- };
348
- const sinceIdx = args.indexOf("--since");
349
- if (sinceIdx !== -1 && sinceIdx + 1 < args.length) {
350
- options.since = args[sinceIdx + 1];
351
- }
352
- const concIdx = args.indexOf("--concurrency");
353
- if (concIdx !== -1 && concIdx + 1 < args.length) {
354
- options.concurrency = Math.max(1, parseInt(args[concIdx + 1], 10) || 1);
355
- }
356
- console.log("VisionClaw Transcript Memory Backfill");
357
- console.log("─".repeat(50));
358
- if (options.dryRun)
359
- console.log("Mode: DRY RUN (no changes will be made)");
360
- if (options.since)
361
- console.log(`Since: ${options.since}`);
362
- console.log();
363
- // Load config for Gemini API key
364
- let config;
365
- try {
366
- config = loadConfig();
367
- }
368
- catch {
369
- console.error("Failed to load config. Run setup first.");
370
- process.exit(1);
371
- }
372
- const logsDir = path.join(getConfigDir(), "logs");
373
- const files = discoverLogFiles(logsDir, options.since);
374
- if (files.length === 0) {
375
- console.log("No log files found to process.");
376
- return;
377
- }
378
- console.log(`Found ${files.length} log file(s) to process\n`);
379
- const stats = {
380
- totalFiles: files.length,
381
- totalCycles: 0,
382
- indexedCycles: 0,
383
- skippedTrivial: 0,
384
- skippedExisting: 0,
385
- errors: 0,
386
- };
387
- try {
388
- for (const filePath of files) {
389
- const fileName = path.basename(filePath);
390
- console.log(`Processing ${fileName}...`);
391
- let firstCycle = true;
392
- const streamStats = await streamWakeCycles(filePath, async (cycle, cycleIndex) => {
393
- if (firstCycle) {
394
- firstCycle = false;
395
- }
396
- stats.totalCycles++;
397
- const cycleId = generateBackfillCycleId(cycle, cycleIndex);
398
- try {
399
- const result = await processOneCycle(cycle, cycleId, config, options.dryRun);
400
- switch (result) {
401
- case "indexed":
402
- stats.indexedCycles++;
403
- console.log(` ✓ ${cycleId} (${cycle.entries.length} entries)`);
404
- break;
405
- case "skipped_trivial":
406
- stats.skippedTrivial++;
407
- break;
408
- case "skipped_existing":
409
- stats.skippedExisting++;
410
- break;
411
- case "error":
412
- stats.errors++;
413
- break;
414
- }
415
- // Rate limit: small delay between Gemini API calls
416
- if (result === "indexed" && !options.dryRun) {
417
- await sleep(200);
418
- }
419
- }
420
- catch (err) {
421
- stats.errors++;
422
- console.error(` ✗ ${cycleId}: ${err instanceof Error ? err.message : String(err)}`);
423
- // Continue processing other cycles
424
- await sleep(1000); // Longer delay after error (rate limit, etc.)
425
- }
426
- });
427
- if (streamStats.entryCount === 0) {
428
- console.log(` No entries found, skipping`);
429
- continue;
430
- }
431
- console.log(` ${streamStats.entryCount} entries → ${streamStats.cycleCount} wake cycle(s)`);
432
- console.log();
433
- }
434
- }
435
- finally {
436
- closeTranscriptMemoryDb();
437
- }
438
- // Print summary
439
- console.log("─".repeat(50));
440
- console.log("Backfill Summary:");
441
- console.log(` Files processed: ${stats.totalFiles}`);
442
- console.log(` Wake cycles found: ${stats.totalCycles}`);
443
- console.log(` Indexed: ${stats.indexedCycles}`);
444
- console.log(` Skipped (trivial): ${stats.skippedTrivial}`);
445
- console.log(` Skipped (existing): ${stats.skippedExisting}`);
446
- console.log(` Errors: ${stats.errors}`);
447
- }
448
- // ---------------------------------------------------------------------------
449
- // Auto-backfill: one-time background backfill on agent startup
450
- // ---------------------------------------------------------------------------
451
- const BACKFILL_MARKER = "transcript-memory-backfilled";
452
- function writeMarker(markerPath, data) {
453
- try {
454
- fs.writeFileSync(markerPath, JSON.stringify(data, null, 2) + "\n");
455
- }
456
- catch {
457
- // best-effort
458
- }
459
- }
460
- /**
461
- * AbortController exposed to the caller so the agent loop can cancel
462
- * auto-backfill during graceful shutdown.
463
- */
464
- let backfillAbortController = null;
465
- /**
466
- * Cancel any in-progress auto-backfill. Safe to call multiple times or when
467
- * no backfill is running.
468
- */
469
- export function cancelAutoBackfill() {
470
- backfillAbortController?.abort();
471
- }
472
- /**
473
- * Check whether auto-backfill should run and execute it if needed.
474
- * Called from the agent loop on startup (fire-and-forget).
475
- *
476
- * Conditions for auto-backfill:
477
- * 1. No marker file exists (hasn't been done before)
478
- * 2. The transcript-memory DB has no entries (empty/new)
479
- * 3. Historical log files exist in the logs directory
480
- *
481
- * Robustness:
482
- * - Respects an AbortSignal so the agent can stop it on shutdown.
483
- * - Idempotent: already-indexed cycles are skipped via `wakeCycleExists()`.
484
- * - Crash-safe: the marker file is only written after all cycles are
485
- * processed. On restart the backfill resumes, skipping existing records.
486
- * - Concurrent writes: live `indexWakeCycle()` can run in parallel. SQLite
487
- * WAL mode + in-process synchronous driver ensures serialized writes.
488
- * - DB closed during backfill: all DB operations are wrapped in try/catch
489
- * so a closed-DB error does not crash the process.
490
- *
491
- * The backfill runs with a longer delay between API calls (500ms)
492
- * to avoid competing with the agent's own Gemini usage.
493
- */
494
- export async function maybeAutoBackfill(config) {
495
- const configDir = getConfigDir();
496
- const markerPath = path.join(configDir, BACKFILL_MARKER);
497
- // 1. Already done?
498
- if (fs.existsSync(markerPath)) {
499
- return;
500
- }
501
- // 2. DB already has entries? (e.g. manual backfill was run, or live indexing
502
- // has been running for a while)
503
- const existingCount = getWakeCycleCount();
504
- if (existingCount > 0) {
505
- // DB already has data — write marker and skip
506
- writeMarker(markerPath, { skipped: true, existingCount });
507
- logger.system(`[transcript-backfill] Skipping auto-backfill: DB already has ${existingCount} entries`);
508
- return;
509
- }
510
- // 3. Any log files to process?
511
- const logsDir = path.join(configDir, "logs");
512
- // TODO: For backfill, we only process logs not .claude transcripts.
513
- const files = discoverLogFiles(logsDir, null);
514
- if (files.length === 0) {
515
- writeMarker(markerPath, { skipped: true, reason: "no_log_files" });
516
- logger.system("[transcript-backfill] Skipping auto-backfill: no historical log files found");
517
- return;
518
- }
519
- // 4. Set up cancellation
520
- backfillAbortController = new AbortController();
521
- const { signal } = backfillAbortController;
522
- // 5. Run backfill
523
- logger.system(`[transcript-backfill] Starting auto-backfill of ${files.length} log file(s)...`);
524
- const stats = {
525
- totalFiles: files.length,
526
- totalCycles: 0,
527
- indexedCycles: 0,
528
- skippedTrivial: 0,
529
- skippedExisting: 0,
530
- errors: 0,
531
- };
532
- let aborted = false;
533
- for (const filePath of files) {
534
- if (signal.aborted) {
535
- aborted = true;
536
- break;
537
- }
538
- const fileName = path.basename(filePath);
539
- try {
540
- const streamStats = await streamWakeCycles(filePath, async (cycle, cycleIndex) => {
541
- // Re-check abort between cycles — the signal may have been set during
542
- // the previous processOneCycle() await. Cast via unknown to suppress
543
- // the linter's "always falsy" false positive (it doesn't model
544
- // AbortSignal mutation across awaits).
545
- if (signal.aborted) {
546
- aborted = true;
547
- throw new AbortStreamingBackfillError();
548
- }
549
- stats.totalCycles++;
550
- const cycleId = generateBackfillCycleId(cycle, cycleIndex);
551
- try {
552
- const result = await processOneCycle(cycle, cycleId, config, false);
553
- switch (result) {
554
- case "indexed":
555
- stats.indexedCycles++;
556
- break;
557
- case "skipped_trivial":
558
- stats.skippedTrivial++;
559
- break;
560
- case "skipped_existing":
561
- stats.skippedExisting++;
562
- break;
563
- case "error":
564
- stats.errors++;
565
- break;
566
- }
567
- // Longer delay for background operation to avoid starving
568
- // the agent's own Gemini API calls
569
- if (result === "indexed") {
570
- await sleep(500);
571
- }
572
- }
573
- catch (err) {
574
- stats.errors++;
575
- logger.warn(`[transcript-backfill] ${cycleId}: ${err instanceof Error ? err.message : String(err)}`);
576
- await sleep(2000);
577
- }
578
- });
579
- logger.debug(`[transcript-backfill] ${fileName}: ${streamStats.cycleCount} cycles processed`);
580
- }
581
- catch (err) {
582
- if (err instanceof AbortStreamingBackfillError) {
583
- break;
584
- }
585
- logger.warn(`[transcript-backfill] Failed to process ${fileName}: ${err instanceof Error ? err.message : String(err)}`);
586
- }
587
- }
588
- backfillAbortController = null;
589
- if (aborted) {
590
- logger.system(`[transcript-backfill] Auto-backfill interrupted (shutdown): ` +
591
- `${stats.indexedCycles} indexed so far. Will resume on next startup.`);
592
- // Do NOT write marker — let backfill resume on next startup
593
- return;
594
- }
595
- // Write marker only on successful completion
596
- writeMarker(markerPath, {
597
- completedAt: new Date().toISOString(),
598
- ...stats,
599
- });
600
- logger.system(`[transcript-backfill] Auto-backfill complete: ` +
601
- `${stats.indexedCycles} indexed, ${stats.skippedTrivial} trivial, ` +
602
- `${stats.skippedExisting} existing, ${stats.errors} errors`);
603
- }
604
- //# sourceMappingURL=transcript-backfill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transcript-backfill.js","sourceRoot":"","sources":["../../../src/agent/transcript/transcript-backfill.ts"],"names":[],"mappings":"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"}