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,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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"}