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,199 +0,0 @@
1
- import { DatabaseSync } from "node:sqlite";
2
- import path from "node:path";
3
- import { getConfigDir } from "../config/index.js";
4
- import { logger } from "../logger.js";
5
- let db = null;
6
- let stmtInsert = null;
7
- let stmtListPending = null;
8
- let stmtMarkInflight = null;
9
- let stmtMarkAcked = null;
10
- let stmtMarkRejected = null;
11
- let stmtReleaseStale = null;
12
- let stmtReleaseByIds = null;
13
- let stmtMarkOldStale = null;
14
- function requireStatement(stmt, name) {
15
- if (!stmt)
16
- throw new Error(`Usage report queue statement not initialized: ${name}`);
17
- return stmt;
18
- }
19
- function getDb() {
20
- if (db)
21
- return db;
22
- const dbPath = path.join(getConfigDir(), "usage.db");
23
- db = new DatabaseSync(dbPath);
24
- db.exec("PRAGMA journal_mode = WAL");
25
- db.exec(`
26
- CREATE TABLE IF NOT EXISTS usage_reports (
27
- wake_cycle_id TEXT PRIMARY KEY,
28
- report_json TEXT NOT NULL,
29
- status TEXT NOT NULL DEFAULT 'pending',
30
- attempt_count INTEGER NOT NULL DEFAULT 0,
31
- last_attempt_at TEXT,
32
- last_error TEXT,
33
- created_at TEXT NOT NULL,
34
- acked_at TEXT,
35
- report_schema_version INTEGER NOT NULL,
36
- session_type TEXT,
37
- started_at TEXT,
38
- ended_at TEXT,
39
- duration_seconds INTEGER,
40
- trigger_type TEXT,
41
- trigger_channel TEXT,
42
- trigger_message_id TEXT
43
- )
44
- `);
45
- db.exec("CREATE INDEX IF NOT EXISTS idx_usage_reports_status_created ON usage_reports(status, created_at)");
46
- try {
47
- db.exec("ALTER TABLE usage_reports ADD COLUMN session_type TEXT");
48
- }
49
- catch { /* already migrated */ }
50
- try {
51
- db.exec("ALTER TABLE usage_reports ADD COLUMN started_at TEXT");
52
- }
53
- catch { /* already migrated */ }
54
- try {
55
- db.exec("ALTER TABLE usage_reports ADD COLUMN ended_at TEXT");
56
- }
57
- catch { /* already migrated */ }
58
- try {
59
- db.exec("ALTER TABLE usage_reports ADD COLUMN duration_seconds INTEGER");
60
- }
61
- catch { /* already migrated */ }
62
- try {
63
- db.exec("ALTER TABLE usage_reports ADD COLUMN trigger_type TEXT");
64
- }
65
- catch { /* already migrated */ }
66
- try {
67
- db.exec("ALTER TABLE usage_reports ADD COLUMN trigger_channel TEXT");
68
- }
69
- catch { /* already migrated */ }
70
- try {
71
- db.exec("ALTER TABLE usage_reports ADD COLUMN trigger_message_id TEXT");
72
- }
73
- catch { /* already migrated */ }
74
- stmtInsert = db.prepare(`
75
- INSERT INTO usage_reports (
76
- wake_cycle_id,
77
- report_json,
78
- status,
79
- attempt_count,
80
- created_at,
81
- report_schema_version,
82
- session_type,
83
- started_at,
84
- ended_at,
85
- duration_seconds,
86
- trigger_type,
87
- trigger_channel,
88
- trigger_message_id
89
- ) VALUES (?, ?, 'pending', 0, ?, ?, ?, ?, ?, ?, ?, ?, ?)
90
- ON CONFLICT(wake_cycle_id) DO NOTHING
91
- `);
92
- stmtListPending = db.prepare(`
93
- SELECT wake_cycle_id, report_json, status, attempt_count, last_attempt_at, last_error, created_at, acked_at, report_schema_version
94
- FROM usage_reports
95
- WHERE status IN ('pending', 'stale')
96
- ORDER BY created_at ASC
97
- LIMIT ?
98
- `);
99
- stmtMarkInflight = db.prepare(`
100
- UPDATE usage_reports
101
- SET status = 'inflight', attempt_count = attempt_count + 1, last_attempt_at = ?, last_error = NULL
102
- WHERE wake_cycle_id = ? AND status IN ('pending', 'stale')
103
- `);
104
- stmtMarkAcked = db.prepare("UPDATE usage_reports SET status = 'acked', acked_at = ?, last_error = NULL WHERE wake_cycle_id = ?");
105
- stmtMarkRejected = db.prepare("UPDATE usage_reports SET status = 'rejected', last_error = ? WHERE wake_cycle_id = ?");
106
- stmtReleaseStale = db.prepare(`
107
- UPDATE usage_reports
108
- SET status = 'pending', last_error = 'inflight_timeout'
109
- WHERE status = 'inflight' AND last_attempt_at <= ?
110
- `);
111
- stmtReleaseByIds = db.prepare(`
112
- UPDATE usage_reports
113
- SET status = 'pending', last_error = ?
114
- WHERE status = 'inflight' AND wake_cycle_id = ?
115
- `);
116
- stmtMarkOldStale = db.prepare(`
117
- UPDATE usage_reports
118
- SET status = 'stale', last_error = 'retention_expired'
119
- WHERE status IN ('pending', 'inflight') AND created_at < ?
120
- `);
121
- return db;
122
- }
123
- export function enqueueUsageReport(report) {
124
- getDb();
125
- requireStatement(stmtInsert, "insert").run(report.wakeCycleId, JSON.stringify(report), new Date().toISOString(), report.schemaVersion, report.sessionType, report.startedAt, report.endedAt, report.durationSeconds, report.triggerType ?? null, report.triggerChannel ?? null, null);
126
- }
127
- export function listPendingUsageReports(limit) {
128
- getDb();
129
- const rows = requireStatement(stmtListPending, "listPending").all(Math.max(1, limit));
130
- return rows.map((row) => ({
131
- wakeCycleId: row.wake_cycle_id,
132
- report: JSON.parse(row.report_json),
133
- status: row.status,
134
- attemptCount: row.attempt_count,
135
- lastAttemptAt: row.last_attempt_at,
136
- lastError: row.last_error,
137
- createdAt: row.created_at,
138
- ackedAt: row.acked_at,
139
- reportSchemaVersion: row.report_schema_version,
140
- }));
141
- }
142
- export function markUsageReportsInflight(ids) {
143
- getDb();
144
- const now = new Date().toISOString();
145
- const stmt = requireStatement(stmtMarkInflight, "markInflight");
146
- for (const id of ids)
147
- stmt.run(now, id);
148
- }
149
- export function markUsageReportsAcked(ids) {
150
- getDb();
151
- const now = new Date().toISOString();
152
- const stmt = requireStatement(stmtMarkAcked, "markAcked");
153
- for (const id of ids)
154
- stmt.run(now, id);
155
- }
156
- export function markUsageReportsRejected(rejections) {
157
- getDb();
158
- const stmt = requireStatement(stmtMarkRejected, "markRejected");
159
- for (const rejection of rejections)
160
- stmt.run(rejection.reason, rejection.wakeCycleId);
161
- }
162
- export function releaseStaleInflightUsageReports(timeoutMs) {
163
- getDb();
164
- const cutoff = new Date(Date.now() - timeoutMs).toISOString();
165
- requireStatement(stmtReleaseStale, "releaseStale").run(cutoff);
166
- }
167
- export function releaseInflightUsageReports(ids, reason) {
168
- getDb();
169
- const stmt = requireStatement(stmtReleaseByIds, "releaseByIds");
170
- for (const id of ids)
171
- stmt.run(reason, id);
172
- }
173
- export function markUsageReportsStaleOlderThan(days) {
174
- getDb();
175
- const cutoff = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();
176
- requireStatement(stmtMarkOldStale, "markOldStale").run(cutoff);
177
- }
178
- export function closeUsageReportQueue() {
179
- if (!db)
180
- return;
181
- try {
182
- db.close();
183
- }
184
- catch (err) {
185
- logger.warn(`Failed to close usage report queue: ${err instanceof Error ? err.message : String(err)}`);
186
- }
187
- finally {
188
- db = null;
189
- stmtInsert = null;
190
- stmtListPending = null;
191
- stmtMarkInflight = null;
192
- stmtMarkAcked = null;
193
- stmtMarkRejected = null;
194
- stmtReleaseStale = null;
195
- stmtReleaseByIds = null;
196
- stmtMarkOldStale = null;
197
- }
198
- }
199
- //# sourceMappingURL=usage-report-queue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usage-report-queue.js","sourceRoot":"","sources":["../../src/agent/usage-report-queue.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- export declare const USAGE_REPORT_SCHEMA_VERSION = 2;
2
- export interface ToolCallFact {
3
- toolName: string;
4
- toolUseId?: string;
5
- parentToolUseId?: string;
6
- startedAt: string;
7
- endedAt: string;
8
- success: boolean;
9
- errorKind?: string;
10
- }
11
- export interface WakeCycleUsageReport {
12
- schemaVersion: number;
13
- wakeCycleId: string;
14
- sessionType: string;
15
- startedAt: string;
16
- endedAt: string;
17
- durationSeconds: number;
18
- triggerType?: string;
19
- triggerChannel?: string;
20
- toolCalls: ToolCallFact[];
21
- toolCallCount: number;
22
- toolCallsTruncated?: boolean;
23
- reportedToolCallCount?: number;
24
- outcome?: "completed" | "error" | "stopped" | "switched";
25
- agentVersion?: string;
26
- modelId?: string;
27
- }
28
- export interface RejectedUsageReport {
29
- wakeCycleId: string;
30
- reason: string;
31
- }
32
- export interface UsageStatus {
33
- status: "active" | "exhausted" | "skip";
34
- wuUsed: number;
35
- wuLimit: number | null;
36
- bundleWuRemaining: number;
37
- periodStart: string | null;
38
- periodEnd: string | null;
39
- coverage: "complete" | "partial" | "cutover";
40
- }
41
- //# sourceMappingURL=usage-report-types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usage-report-types.d.ts","sourceRoot":"","sources":["../../src/agent/usage-report-types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;CAC9C"}
@@ -1,2 +0,0 @@
1
- export const USAGE_REPORT_SCHEMA_VERSION = 2;
2
- //# sourceMappingURL=usage-report-types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usage-report-types.js","sourceRoot":"","sources":["../../src/agent/usage-report-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC"}
@@ -1,31 +0,0 @@
1
- /**
2
- * Background usage reporter — periodically scans `transcript_memory.db` for
3
- * wake cycles that have not yet been queued into `usage.db`, builds usage
4
- * reports from stored tool call data, and enqueues them.
5
- *
6
- * Semantics:
7
- * - `wake_cycles.usage_reported = 0` → needs to be enqueued
8
- * - `wake_cycles.usage_reported = 1` → already enqueued into usage.db
9
- * - Server delivery state is tracked separately in usage.db
10
- *
11
- * If tool_calls_json is NULL or invalid, the cycle is still reported with
12
- * empty tool calls — the server marks coverage as `missing_tool_calls`.
13
- */
14
- import type { VisionClawConfig } from "../config/types.js";
15
- export declare class UsageReporter {
16
- private readonly config;
17
- private timer;
18
- private readonly scanIntervalMs;
19
- constructor(config: VisionClawConfig);
20
- /**
21
- * Start the periodic background scan.
22
- */
23
- start(): void;
24
- /**
25
- * Stop the periodic scan.
26
- */
27
- stop(): void;
28
- private tick;
29
- private scanAndReport;
30
- }
31
- //# sourceMappingURL=usage-reporter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usage-reporter.d.ts","sourceRoot":"","sources":["../../src/agent/usage-reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAa3D,qBAAa,aAAa;IAIZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAc;gBAEhB,MAAM,EAAE,gBAAgB;IAErD;;OAEG;IACH,KAAK,IAAI,IAAI;IAWb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ,OAAO,CAAC,IAAI;IAiBZ,OAAO,CAAC,aAAa;CA6CtB"}
@@ -1,102 +0,0 @@
1
- /**
2
- * Background usage reporter — periodically scans `transcript_memory.db` for
3
- * wake cycles that have not yet been queued into `usage.db`, builds usage
4
- * reports from stored tool call data, and enqueues them.
5
- *
6
- * Semantics:
7
- * - `wake_cycles.usage_reported = 0` → needs to be enqueued
8
- * - `wake_cycles.usage_reported = 1` → already enqueued into usage.db
9
- * - Server delivery state is tracked separately in usage.db
10
- *
11
- * If tool_calls_json is NULL or invalid, the cycle is still reported with
12
- * empty tool calls — the server marks coverage as `missing_tool_calls`.
13
- */
14
- import { listUnreportedWakeCycles, markWakeCycleUsageReported, markWakeCycleUsageReportError, } from "./transcript-indexer.js";
15
- import { buildWakeCycleUsageReportFromRecord } from "./usage-report-builder.js";
16
- import { enqueueUsageReport } from "./usage-report-queue.js";
17
- import { logger } from "../logger.js";
18
- /** Maximum wake cycles to process in a single scan. */
19
- const MAX_CYCLES_PER_SCAN = 100;
20
- export class UsageReporter {
21
- config;
22
- timer = null;
23
- scanIntervalMs = 5 * 60_000; // 5 minutes
24
- constructor(config) {
25
- this.config = config;
26
- }
27
- /**
28
- * Start the periodic background scan.
29
- */
30
- start() {
31
- if (this.timer)
32
- return; // already started
33
- logger.debug("[usage-reporter] Started (scan interval: 5 minutes)");
34
- // Run an initial scan shortly after startup to catch any unreported
35
- // cycles from the previous run.
36
- this.timer = setTimeout(() => {
37
- this.tick();
38
- }, 10_000); // 10 seconds after startup
39
- }
40
- /**
41
- * Stop the periodic scan.
42
- */
43
- stop() {
44
- if (this.timer) {
45
- clearTimeout(this.timer);
46
- this.timer = null;
47
- }
48
- logger.debug("[usage-reporter] Stopped");
49
- }
50
- tick() {
51
- try {
52
- this.scanAndReport();
53
- }
54
- catch (err) {
55
- logger.warn(`[usage-reporter] Scan failed: ${err instanceof Error ? err.message : String(err)}`);
56
- }
57
- finally {
58
- // Schedule next scan
59
- if (this.timer !== null) {
60
- this.timer = setTimeout(() => {
61
- this.tick();
62
- }, this.scanIntervalMs);
63
- }
64
- }
65
- }
66
- scanAndReport() {
67
- let rows;
68
- try {
69
- rows = listUnreportedWakeCycles(MAX_CYCLES_PER_SCAN);
70
- }
71
- catch (err) {
72
- logger.warn(`[usage-reporter] Failed to query unreported cycles: ${err instanceof Error ? err.message : String(err)}`);
73
- return;
74
- }
75
- if (rows.length === 0)
76
- return;
77
- logger.debug(`[usage-reporter] Found ${rows.length} unreported wake cycle(s)`);
78
- let enqueued = 0;
79
- let failed = 0;
80
- for (const row of rows) {
81
- try {
82
- const report = buildWakeCycleUsageReportFromRecord({
83
- row,
84
- config: this.config,
85
- });
86
- enqueueUsageReport(report);
87
- markWakeCycleUsageReported(row.wake_cycle_id);
88
- enqueued++;
89
- }
90
- catch (err) {
91
- const errorMsg = err instanceof Error ? err.message : String(err);
92
- markWakeCycleUsageReportError(row.wake_cycle_id, errorMsg);
93
- failed++;
94
- logger.warn(`[usage-reporter] Failed to enqueue usage report for ${row.wake_cycle_id}: ${errorMsg}`);
95
- }
96
- }
97
- if (enqueued > 0) {
98
- logger.system(`[usage-reporter] Enqueued ${enqueued} usage report(s)${failed > 0 ? `, ${failed} failed` : ""}`);
99
- }
100
- }
101
- }
102
- //# sourceMappingURL=usage-reporter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usage-reporter.js","sourceRoot":"","sources":["../../src/agent/usage-reporter.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- import type { ToolCallFact } from "./usage-report-types.js";
2
- export declare const MAX_TOOL_CALLS_PER_CYCLE = 500;
3
- export interface DrainResult {
4
- facts: ToolCallFact[];
5
- truncated: boolean;
6
- originalCount: number;
7
- }
8
- export declare class WakeCycleToolTracker {
9
- private readonly inFlight;
10
- private readonly completed;
11
- /**
12
- * Call when a `tool_use` event arrives from the SDK stream.
13
- * Records the tool call as in-flight until a matching `tool_result` closes it.
14
- */
15
- onToolUse(event: {
16
- toolUseId: string;
17
- parentToolUseId?: string;
18
- toolName: string;
19
- }): void;
20
- /**
21
- * Call when a `tool_result` event arrives from the SDK stream.
22
- * Finalizes the matching in-flight entry and moves it to the completed list.
23
- */
24
- onToolResult(event: {
25
- toolUseId: string;
26
- isError: boolean;
27
- errorKind?: string;
28
- }): void;
29
- /**
30
- * Drain all completed facts plus any still-in-flight facts (auto-closed
31
- * with `success: false` and `errorKind: "incomplete"`).
32
- *
33
- * If the total count exceeds `MAX_TOOL_CALLS_PER_CYCLE`, the returned
34
- * array is truncated to the first N entries (sorted by `startedAt`) and
35
- * `truncated` is set to `true`.
36
- */
37
- drain(): DrainResult;
38
- }
39
- //# sourceMappingURL=wake-cycle-tool-tracker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wake-cycle-tool-tracker.d.ts","sourceRoot":"","sources":["../../src/agent/wake-cycle-tool-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAG5D,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAS5C,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAEhD;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI;IASR;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI;IAsBR;;;;;;;OAOG;IACH,KAAK,IAAI,WAAW;CA2BrB"}
@@ -1,72 +0,0 @@
1
- import { logger } from "../logger.js";
2
- export const MAX_TOOL_CALLS_PER_CYCLE = 500;
3
- export class WakeCycleToolTracker {
4
- inFlight = new Map();
5
- completed = [];
6
- /**
7
- * Call when a `tool_use` event arrives from the SDK stream.
8
- * Records the tool call as in-flight until a matching `tool_result` closes it.
9
- */
10
- onToolUse(event) {
11
- this.inFlight.set(event.toolUseId, {
12
- toolUseId: event.toolUseId,
13
- parentToolUseId: event.parentToolUseId,
14
- toolName: event.toolName,
15
- startedAt: new Date().toISOString(),
16
- });
17
- }
18
- /**
19
- * Call when a `tool_result` event arrives from the SDK stream.
20
- * Finalizes the matching in-flight entry and moves it to the completed list.
21
- */
22
- onToolResult(event) {
23
- const entry = this.inFlight.get(event.toolUseId);
24
- if (!entry) {
25
- logger.warn(`tool_result for unknown toolUseId ${event.toolUseId} — ignoring`);
26
- return;
27
- }
28
- this.inFlight.delete(event.toolUseId);
29
- this.completed.push({
30
- toolUseId: entry.toolUseId,
31
- parentToolUseId: entry.parentToolUseId,
32
- toolName: entry.toolName,
33
- startedAt: entry.startedAt,
34
- endedAt: new Date().toISOString(),
35
- success: !event.isError,
36
- errorKind: event.errorKind,
37
- });
38
- }
39
- /**
40
- * Drain all completed facts plus any still-in-flight facts (auto-closed
41
- * with `success: false` and `errorKind: "incomplete"`).
42
- *
43
- * If the total count exceeds `MAX_TOOL_CALLS_PER_CYCLE`, the returned
44
- * array is truncated to the first N entries (sorted by `startedAt`) and
45
- * `truncated` is set to `true`.
46
- */
47
- drain() {
48
- // Auto-close any still-in-flight entries
49
- const now = new Date().toISOString();
50
- for (const entry of Array.from(this.inFlight.values())) {
51
- this.completed.push({
52
- toolUseId: entry.toolUseId,
53
- parentToolUseId: entry.parentToolUseId,
54
- toolName: entry.toolName,
55
- startedAt: entry.startedAt,
56
- endedAt: now,
57
- success: false,
58
- errorKind: "incomplete",
59
- });
60
- }
61
- this.inFlight.clear();
62
- // Sort completed facts by startedAt
63
- this.completed.sort((a, b) => a.startedAt.localeCompare(b.startedAt));
64
- const originalCount = this.completed.length;
65
- const truncated = originalCount > MAX_TOOL_CALLS_PER_CYCLE;
66
- const facts = truncated
67
- ? this.completed.splice(0, MAX_TOOL_CALLS_PER_CYCLE)
68
- : this.completed.splice(0);
69
- return { facts, truncated, originalCount };
70
- }
71
- }
72
- //# sourceMappingURL=wake-cycle-tool-tracker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wake-cycle-tool-tracker.js","sourceRoot":"","sources":["../../src/agent/wake-cycle-tool-tracker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAe5C,MAAM,OAAO,oBAAoB;IACd,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC5C,SAAS,GAAmB,EAAE,CAAC;IAEhD;;;OAGG;IACH,SAAS,CAAC,KAIT;QACC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE;YACjC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,KAIZ;QACC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CACT,qCAAqC,KAAK,CAAC,SAAS,aAAa,CAClE,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEtC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAClB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACjC,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO;YACvB,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACH,KAAK;QACH,yCAAyC;QACzC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAClB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,OAAO,EAAE,GAAG;gBACZ,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,YAAY;aACxB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEtB,oCAAoC;QACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAEtE,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAC5C,MAAM,SAAS,GAAG,aAAa,GAAG,wBAAwB,CAAC;QAC3D,MAAM,KAAK,GAAG,SAAS;YACrB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,wBAAwB,CAAC;YACpD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAE7B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;IAC7C,CAAC;CACF"}
@@ -1,29 +0,0 @@
1
- /**
2
- * PAYG (Pay as You Go) command handler for the `request_payment` heartbeat command.
3
- *
4
- * This is deterministic bot code u2014 the LLM agent is never involved in
5
- * payment flows. The handler:
6
- *
7
- * 1. Receives `request_payment` from the backend via heartbeat (includes amounts)
8
- * 2. Sends an amount selection prompt (inline keyboard) to the owner via Telegram
9
- * 3. Listens for `billing_payg_selected` events from the Telegram adapter
10
- * 4. Calls the backend to create a Stripe Payment Link (one-time)
11
- * 5. Sends the payment URL back to the owner as a URL button
12
- */
13
- import type { CommandHandler } from "../agent/command-dispatcher.js";
14
- import type { ChannelManager } from "../channels/manager.js";
15
- import type { BillingPaygSelectedEvent } from "../channels/interface.js";
16
- import type { OnboardingServiceClient } from "../onboarding/onboarding-service-client.js";
17
- export interface PaygHandler extends CommandHandler {
18
- /** Handle a billing_payg_selected event (user tapped an amount button). */
19
- handleAmountSelected: (event: BillingPaygSelectedEvent) => Promise<void>;
20
- }
21
- /**
22
- * Create a CommandHandler for the "request_payment" heartbeat command.
23
- *
24
- * @param channelManager - To send PAYG prompts and listen for amount selection events
25
- * @param ownerChatId - The owner's Telegram chat ID
26
- * @param serviceClient - Onboarding service client for creating payment links
27
- */
28
- export declare function createPaygHandler(channelManager: ChannelManager, ownerChatId: number, serviceClient: OnboardingServiceClient | null): PaygHandler;
29
- //# sourceMappingURL=payg-handler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"payg-handler.d.ts","sourceRoot":"","sources":["../../src/billing/payg-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAW1F,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,2EAA2E;IAC3E,oBAAoB,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1E;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,uBAAuB,GAAG,IAAI,GAC5C,WAAW,CAmGb"}
@@ -1,92 +0,0 @@
1
- /**
2
- * PAYG (Pay as You Go) command handler for the `request_payment` heartbeat command.
3
- *
4
- * This is deterministic bot code u2014 the LLM agent is never involved in
5
- * payment flows. The handler:
6
- *
7
- * 1. Receives `request_payment` from the backend via heartbeat (includes amounts)
8
- * 2. Sends an amount selection prompt (inline keyboard) to the owner via Telegram
9
- * 3. Listens for `billing_payg_selected` events from the Telegram adapter
10
- * 4. Calls the backend to create a Stripe Payment Link (one-time)
11
- * 5. Sends the payment URL back to the owner as a URL button
12
- */
13
- import { logger } from "../logger.js";
14
- const MAX_RETRIES = 2;
15
- const RETRY_DELAY_MS = 2_000;
16
- function sleep(ms) {
17
- return new Promise((resolve) => setTimeout(resolve, ms));
18
- }
19
- /**
20
- * Create a CommandHandler for the "request_payment" heartbeat command.
21
- *
22
- * @param channelManager - To send PAYG prompts and listen for amount selection events
23
- * @param ownerChatId - The owner's Telegram chat ID
24
- * @param serviceClient - Onboarding service client for creating payment links
25
- */
26
- export function createPaygHandler(channelManager, ownerChatId, serviceClient) {
27
- async function handleAmountSelected(event) {
28
- if (!serviceClient) {
29
- logger.warn("[payg] No service client u2014 cannot create payment link");
30
- await channelManager.sendMessage("telegram", String(event.chatId), "Payment is not configured. Please contact support.");
31
- return;
32
- }
33
- logger.system(`[payg] Amount selected: $${event.amount} by chat ${event.chatId}`);
34
- for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
35
- try {
36
- const result = await serviceClient.createPaymentLink(event.amount, event.chatId);
37
- if (result?.checkoutUrl) {
38
- await channelManager.sendTelegramCheckoutLink(event.chatId, `$${event.amount} Top-Up`, result.checkoutUrl);
39
- logger.system(`[payg] Payment link sent to chat ${event.chatId} for $${event.amount}`);
40
- return;
41
- }
42
- if (attempt < MAX_RETRIES) {
43
- logger.warn(`[payg] Payment link attempt ${attempt + 1} failed, retrying...`);
44
- await channelManager.sendMessage("telegram", String(event.chatId), "Payment setup failed, retrying...");
45
- await sleep(RETRY_DELAY_MS);
46
- }
47
- }
48
- catch (err) {
49
- const errMsg = err instanceof Error ? err.message : String(err);
50
- logger.err(`[payg] Payment link attempt ${attempt + 1} error: ${errMsg}`);
51
- if (attempt < MAX_RETRIES) {
52
- await sleep(RETRY_DELAY_MS);
53
- }
54
- }
55
- }
56
- logger.err("[payg] All payment link attempts failed");
57
- await channelManager.sendMessage("telegram", String(event.chatId), "Payment setup failed. Please try again later.");
58
- }
59
- const handler = Object.assign(async (_commandId, payload) => {
60
- const raw = (payload ?? {});
61
- const amounts = Array.isArray(raw.amounts) ? raw.amounts : [];
62
- if (amounts.length === 0) {
63
- logger.warn("[payg] request_payment received with no amounts");
64
- return {
65
- status: "failed",
66
- result: JSON.stringify({ error: "No amounts in payload" }),
67
- };
68
- }
69
- const typedPayload = {
70
- reason: typeof raw.reason === "string" ? raw.reason : undefined,
71
- amounts,
72
- };
73
- logger.system(`[payg] Request payment received with amounts: ${typedPayload.amounts.join(", ")}`);
74
- try {
75
- await channelManager.sendTelegramPaygPrompt(ownerChatId, typedPayload);
76
- return {
77
- status: "completed",
78
- result: JSON.stringify({ message: "PAYG prompt sent to owner" }),
79
- };
80
- }
81
- catch (err) {
82
- const errMsg = err instanceof Error ? err.message : String(err);
83
- logger.err(`[payg] Failed to send PAYG prompt: ${errMsg}`);
84
- return {
85
- status: "failed",
86
- result: JSON.stringify({ error: errMsg }),
87
- };
88
- }
89
- }, { handleAmountSelected });
90
- return handler;
91
- }
92
- //# sourceMappingURL=payg-handler.js.map