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