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,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/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/usage-reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAa9D,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/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/usage-reporter.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * Usage backfill handler — builds usage reports from stored wake cycle
3
- * records and uploads them directly to the onboarding server.
4
- *
5
- * For legacy rows that lack `tool_calls_json`, the handler attempts to
6
- * reconstruct tool calls by reading transcript lines from live or archived
7
- * transcript files (via `readWakeCycleTranscriptLines`).
8
- *
9
- * Backfill does NOT enqueue into usage.db and does NOT mutate
10
- * `usage_reported`. Server-side deduplication by `wakeCycleId` handles
11
- * any overlap with heartbeat-uploaded reports.
12
- */
13
- import type { VisionClawConfig } from "../config/types.js";
14
- export declare function createUsageBackfillHandler(config: VisionClawConfig): () => Promise<{
15
- status: "completed" | "failed";
16
- result?: string;
17
- }>;
18
- //# sourceMappingURL=usage-backfill-handler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usage-backfill-handler.d.ts","sourceRoot":"","sources":["../../src/agent/usage-backfill-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAc3D,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,gBAAgB,SAChD,OAAO,CAAC;IAAE,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAqE9E"}
@@ -1,69 +0,0 @@
1
- /**
2
- * Usage backfill handler — builds usage reports from stored wake cycle
3
- * records and uploads them directly to the onboarding server.
4
- *
5
- * For legacy rows that lack `tool_calls_json`, the handler attempts to
6
- * reconstruct tool calls by reading transcript lines from live or archived
7
- * transcript files (via `readWakeCycleTranscriptLines`).
8
- *
9
- * Backfill does NOT enqueue into usage.db and does NOT mutate
10
- * `usage_reported`. Server-side deduplication by `wakeCycleId` handles
11
- * any overlap with heartbeat-uploaded reports.
12
- */
13
- import { OnboardingServiceClient } from "../onboarding/onboarding-service-client.js";
14
- import { logger } from "../logger.js";
15
- import { listWakeCyclesForUsageBackfill, readWakeCycleTranscriptLines, extractToolCallsFromLines, updateWakeCycleToolCallsJson, } from "./transcript-indexer.js";
16
- import { buildWakeCycleUsageReportFromRecord } from "./usage-report-builder.js";
17
- const MAX_BACKFILL_REPORTS = 5_000;
18
- export function createUsageBackfillHandler(config) {
19
- return async () => {
20
- if (!config.onboardingServiceUrl || !config.visionclawServiceApiKey) {
21
- return { status: "failed", result: JSON.stringify({ error: "onboarding service credentials unavailable" }) };
22
- }
23
- const rows = listWakeCyclesForUsageBackfill(MAX_BACKFILL_REPORTS);
24
- const usageReports = [];
25
- for (const row of rows) {
26
- let overrideToolCalls;
27
- // If tool_calls_json is missing, attempt reconstruction from transcripts
28
- if (!row.tool_calls_json) {
29
- if (row.source_file && row.start_line > 0 && row.end_line > row.start_line) {
30
- try {
31
- const lines = await readWakeCycleTranscriptLines(row.source_file, row.start_line, row.end_line, row.timestamp_start);
32
- if (lines.length > 0) {
33
- const extracted = extractToolCallsFromLines(lines, {
34
- cycleStartedAt: row.timestamp_start,
35
- cycleEndedAt: row.timestamp_end,
36
- });
37
- overrideToolCalls = extracted.toolCalls;
38
- // Persist reconstructed tool calls for future backfills
39
- try {
40
- updateWakeCycleToolCallsJson(row.wake_cycle_id, JSON.stringify(extracted.toolCalls));
41
- }
42
- catch {
43
- // best-effort persistence — non-fatal
44
- }
45
- }
46
- }
47
- catch (err) {
48
- logger.warn(`[usage-backfill] Could not reconstruct tool calls for ${row.wake_cycle_id}: ${err instanceof Error ? err.message : String(err)}`);
49
- }
50
- }
51
- // If reconstruction failed or no source file, overrideToolCalls
52
- // remains undefined and buildWakeCycleUsageReportFromRecord will
53
- // produce empty tool calls from the NULL tool_calls_json.
54
- }
55
- usageReports.push(buildWakeCycleUsageReportFromRecord({
56
- row,
57
- config,
58
- overrideToolCalls,
59
- }));
60
- }
61
- const client = new OnboardingServiceClient(config.onboardingServiceUrl, config.agentName, config.visionclawServiceApiKey);
62
- const ok = await client.sendUsageBackfill(usageReports);
63
- if (!ok)
64
- return { status: "failed", result: JSON.stringify({ error: "backfill upload failed" }) };
65
- logger.system(`Usage backfill uploaded ${usageReports.length} wake cycle report(s)`);
66
- return { status: "completed", result: JSON.stringify({ count: usageReports.length }) };
67
- };
68
- }
69
- //# sourceMappingURL=usage-backfill-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usage-backfill-handler.js","sourceRoot":"","sources":["../../src/agent/usage-backfill-handler.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import type { VisionClawConfig } from "../config/types.js";
2
- import type { ChannelManager } from "../channels/manager.js";
3
- import type { HeartbeatManager } from "./heartbeat-manager.js";
4
- import type { UsageStatus } from "./usage-report-types.js";
5
- export declare const USAGE_GATE_MESSAGE = "Your WorkUnit (WU) allowance for this period has been used up. Please upgrade your plan or buy a WU bundle to continue.";
6
- /**
7
- * Determine whether the usage gate should block new Claude wake cycles.
8
- *
9
- * The usage gate is subordinate to the billing/subscription gate:
10
- * - If billing is "skip" (disabled), the usage gate is never enforced,
11
- * regardless of metered usage.
12
- * - If billing is "expired", the subscription gate takes priority; the
13
- * usage gate should not fire until the subscription is resolved.
14
- *
15
- * Enforcement requires ALL of:
16
- * - subscriptionStatus is "active" (billing is on and subscription valid)
17
- * - status is "exhausted" (WU used >= available WU)
18
- * - coverage is "complete" or "cutover" — meaning the server has
19
- * sufficient data to trust the metering result. "partial" coverage
20
- * is intentionally excluded because historical data may be incomplete
21
- * and gating the user on inaccurate numbers would be wrong.
22
- */
23
- export declare function shouldEnforceUsageGate(usageStatus: UsageStatus | undefined, subscriptionStatus?: string): boolean;
24
- export declare function runUsageGate(config: VisionClawConfig, channelManager: ChannelManager, heartbeat: HeartbeatManager): Promise<void>;
25
- //# sourceMappingURL=usage-gate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usage-gate.d.ts","sourceRoot":"","sources":["../../src/agent/usage-gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAO3D,eAAO,MAAM,kBAAkB,4HAA4H,CAAC;AAE5J;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,WAAW,GAAG,SAAS,EACpC,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAKT;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,gBAAgB,EACxB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
@@ -1,83 +0,0 @@
1
- import { loadOwnerConfig, buildPricingUrl } from "../config/index.js";
2
- import { getAgentState } from "./state.js";
3
- import { logger } from "../logger.js";
4
- const GATE_POLL_INTERVAL_MS = 10_000;
5
- export const USAGE_GATE_MESSAGE = "Your WorkUnit (WU) allowance for this period has been used up. Please upgrade your plan or buy a WU bundle to continue.";
6
- /**
7
- * Determine whether the usage gate should block new Claude wake cycles.
8
- *
9
- * The usage gate is subordinate to the billing/subscription gate:
10
- * - If billing is "skip" (disabled), the usage gate is never enforced,
11
- * regardless of metered usage.
12
- * - If billing is "expired", the subscription gate takes priority; the
13
- * usage gate should not fire until the subscription is resolved.
14
- *
15
- * Enforcement requires ALL of:
16
- * - subscriptionStatus is "active" (billing is on and subscription valid)
17
- * - status is "exhausted" (WU used >= available WU)
18
- * - coverage is "complete" or "cutover" — meaning the server has
19
- * sufficient data to trust the metering result. "partial" coverage
20
- * is intentionally excluded because historical data may be incomplete
21
- * and gating the user on inaccurate numbers would be wrong.
22
- */
23
- export function shouldEnforceUsageGate(usageStatus, subscriptionStatus) {
24
- // Usage gate only applies when billing is active. "skip" means billing
25
- // is turned off; "expired" is handled by the subscription gate first.
26
- if (subscriptionStatus !== "active")
27
- return false;
28
- return usageStatus?.status === "exhausted" && (usageStatus.coverage === "complete" || usageStatus.coverage === "cutover");
29
- }
30
- export async function runUsageGate(config, channelManager, heartbeat) {
31
- const ownerConfig = loadOwnerConfig();
32
- const agentState = getAgentState();
33
- agentState.gated = true;
34
- try {
35
- logger.system("Usage exhausted — entering usage gate (no Claude API calls)");
36
- const pricingUrl = buildPricingUrl(config);
37
- const message = `${USAGE_GATE_MESSAGE}\n\nBrowse plans or top up: ${pricingUrl}`;
38
- try {
39
- if (ownerConfig.telegramChatId) {
40
- const plans = heartbeat.lastBillingPlans;
41
- if (plans.length > 0) {
42
- await channelManager.sendTelegramPaymentPrompt(ownerConfig.telegramChatId, { message, plans });
43
- }
44
- else {
45
- await channelManager.sendMessage("telegram", String(ownerConfig.telegramChatId), message);
46
- }
47
- }
48
- else if (ownerConfig.ownerEmail) {
49
- await channelManager.sendMessage("gmail", ownerConfig.ownerEmail, message);
50
- }
51
- }
52
- catch {
53
- logger.warn("Failed to send usage gate notification to owner");
54
- }
55
- await heartbeat.stopRuntime();
56
- try {
57
- let status = heartbeat.lastUsageStatus;
58
- while (status?.status === "exhausted") {
59
- await new Promise((resolve) => setTimeout(resolve, GATE_POLL_INTERVAL_MS));
60
- status = await heartbeat.sendHeartbeatForUsageGate();
61
- if (status?.status !== "exhausted")
62
- break;
63
- logger.debug(`Usage gate: still exhausted, polling again in ${GATE_POLL_INTERVAL_MS / 1000}s`);
64
- }
65
- }
66
- finally {
67
- heartbeat.startRuntime(() => agentState.busy);
68
- }
69
- logger.system("Usage gate cleared — exiting usage gate");
70
- try {
71
- if (ownerConfig.telegramChatId) {
72
- await channelManager.sendMessage("telegram", String(ownerConfig.telegramChatId), "Usage balance updated. I can continue now.");
73
- }
74
- }
75
- catch {
76
- logger.warn("Failed to send usage gate cleared notification");
77
- }
78
- }
79
- finally {
80
- agentState.gated = false;
81
- }
82
- }
83
- //# sourceMappingURL=usage-gate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usage-gate.js","sourceRoot":"","sources":["../../src/agent/usage-gate.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Shared usage report builder — constructs a `WakeCycleUsageReport` from
3
- * a stored `WakeCycleRecord` row in `transcript_memory.db`.
4
- *
5
- * Used by:
6
- * - `UsageReporter` (background scan → enqueue into usage.db)
7
- * - `usage-backfill-handler` (direct server upload)
8
- */
9
- import type { VisionClawConfig } from "../config/types.js";
10
- import { type ToolCallFact, type WakeCycleUsageReport } from "./usage-report-types.js";
11
- import type { WakeCycleRecord } from "./transcript-indexer.js";
12
- /**
13
- * Build a `WakeCycleUsageReport` from a stored wake cycle record.
14
- *
15
- * If `tool_calls_json` is missing or invalid, the report is built with
16
- * empty tool calls — the server will mark coverage as `missing_tool_calls`.
17
- *
18
- * If `overrideToolCalls` is provided, it takes precedence over the stored
19
- * JSON (used when backfill reconstructs tool calls from archived transcripts).
20
- */
21
- export declare function buildWakeCycleUsageReportFromRecord(input: {
22
- row: WakeCycleRecord;
23
- config: VisionClawConfig;
24
- overrideToolCalls?: ToolCallFact[];
25
- }): WakeCycleUsageReport;
26
- //# sourceMappingURL=usage-report-builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usage-report-builder.d.ts","sourceRoot":"","sources":["../../src/agent/usage-report-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAiC/D;;;;;;;;GAQG;AACH,wBAAgB,mCAAmC,CAAC,KAAK,EAAE;IACzD,GAAG,EAAE,eAAe,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,iBAAiB,CAAC,EAAE,YAAY,EAAE,CAAC;CACpC,GAAG,oBAAoB,CA6BvB"}
@@ -1,80 +0,0 @@
1
- /**
2
- * Shared usage report builder — constructs a `WakeCycleUsageReport` from
3
- * a stored `WakeCycleRecord` row in `transcript_memory.db`.
4
- *
5
- * Used by:
6
- * - `UsageReporter` (background scan → enqueue into usage.db)
7
- * - `usage-backfill-handler` (direct server upload)
8
- */
9
- import { USAGE_REPORT_SCHEMA_VERSION, } from "./usage-report-types.js";
10
- function getCurrentVersionSafe() {
11
- try {
12
- return process.env.npm_package_version;
13
- }
14
- catch {
15
- return undefined;
16
- }
17
- }
18
- function durationSeconds(start, end) {
19
- const startMs = new Date(start).getTime();
20
- const endMs = new Date(end).getTime();
21
- if (Number.isNaN(startMs) || Number.isNaN(endMs) || endMs < startMs)
22
- return 0;
23
- return Math.max(0, Math.round((endMs - startMs) / 1000));
24
- }
25
- /**
26
- * Parse `tool_calls_json` from a wake cycle record.
27
- *
28
- * Returns an empty array if the JSON is null, empty, or invalid.
29
- */
30
- function parseToolCallsJson(json) {
31
- if (!json)
32
- return [];
33
- try {
34
- const parsed = JSON.parse(json);
35
- if (!Array.isArray(parsed))
36
- return [];
37
- return parsed;
38
- }
39
- catch {
40
- return [];
41
- }
42
- }
43
- /**
44
- * Build a `WakeCycleUsageReport` from a stored wake cycle record.
45
- *
46
- * If `tool_calls_json` is missing or invalid, the report is built with
47
- * empty tool calls — the server will mark coverage as `missing_tool_calls`.
48
- *
49
- * If `overrideToolCalls` is provided, it takes precedence over the stored
50
- * JSON (used when backfill reconstructs tool calls from archived transcripts).
51
- */
52
- export function buildWakeCycleUsageReportFromRecord(input) {
53
- const { row, config, overrideToolCalls } = input;
54
- const toolCalls = overrideToolCalls ?? parseToolCallsJson(row.tool_calls_json);
55
- const toolCallCount = overrideToolCalls
56
- ? overrideToolCalls.length
57
- : (row.tool_call_count || toolCalls.length);
58
- return {
59
- schemaVersion: USAGE_REPORT_SCHEMA_VERSION,
60
- wakeCycleId: row.wake_cycle_id,
61
- sessionType: row.session_type,
62
- startedAt: row.timestamp_start,
63
- endedAt: row.timestamp_end,
64
- durationSeconds: durationSeconds(row.timestamp_start, row.timestamp_end),
65
- triggerType: row.trigger_type ?? undefined,
66
- triggerChannel: row.trigger_channel ?? undefined,
67
- toolCalls,
68
- toolCallCount,
69
- ...(row.tool_calls_truncated
70
- ? {
71
- toolCallsTruncated: true,
72
- reportedToolCallCount: row.reported_tool_call_count ?? toolCalls.length,
73
- }
74
- : {}),
75
- outcome: row.outcome ?? "completed",
76
- agentVersion: getCurrentVersionSafe(),
77
- modelId: config.model,
78
- };
79
- }
80
- //# sourceMappingURL=usage-report-builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usage-report-builder.js","sourceRoot":"","sources":["../../src/agent/usage-report-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,2BAA2B,GAG5B,MAAM,yBAAyB,CAAC;AAGjC,SAAS,qBAAqB;IAC5B,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,GAAW;IACjD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IACtC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,OAAO;QAAE,OAAO,CAAC,CAAC;IAC9E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,IAAmB;IAC7C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,OAAO,MAAwB,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mCAAmC,CAAC,KAInD;IACC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,KAAK,CAAC;IAEjD,MAAM,SAAS,GAAG,iBAAiB,IAAI,kBAAkB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC/E,MAAM,aAAa,GAAG,iBAAiB;QACrC,CAAC,CAAC,iBAAiB,CAAC,MAAM;QAC1B,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAE9C,OAAO;QACL,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE,GAAG,CAAC,aAAa;QAC9B,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,SAAS,EAAE,GAAG,CAAC,eAAe;QAC9B,OAAO,EAAE,GAAG,CAAC,aAAa;QAC1B,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,aAAa,CAAC;QACxE,WAAW,EAAE,GAAG,CAAC,YAAY,IAAI,SAAS;QAC1C,cAAc,EAAE,GAAG,CAAC,eAAe,IAAI,SAAS;QAChD,SAAS;QACT,aAAa;QACb,GAAG,CAAC,GAAG,CAAC,oBAAoB;YAC1B,CAAC,CAAC;gBACE,kBAAkB,EAAE,IAAI;gBACxB,qBAAqB,EAAE,GAAG,CAAC,wBAAwB,IAAI,SAAS,CAAC,MAAM;aACxE;YACH,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,EAAG,GAAG,CAAC,OAA2C,IAAI,WAAW;QACxE,YAAY,EAAE,qBAAqB,EAAE;QACrC,OAAO,EAAE,MAAM,CAAC,KAAK;KACtB,CAAC;AACJ,CAAC"}
@@ -1,26 +0,0 @@
1
- import type { WakeCycleUsageReport } from "./usage-report-types.js";
2
- export type UsageReportQueueStatus = "pending" | "inflight" | "stale" | "rejected" | "acked";
3
- export interface UsageReportQueueRow {
4
- wakeCycleId: string;
5
- report: WakeCycleUsageReport;
6
- status: UsageReportQueueStatus;
7
- attemptCount: number;
8
- lastAttemptAt: string | null;
9
- lastError: string | null;
10
- createdAt: string;
11
- ackedAt: string | null;
12
- reportSchemaVersion: number;
13
- }
14
- export declare function enqueueUsageReport(report: WakeCycleUsageReport): void;
15
- export declare function listPendingUsageReports(limit: number): UsageReportQueueRow[];
16
- export declare function markUsageReportsInflight(ids: string[]): void;
17
- export declare function markUsageReportsAcked(ids: string[]): void;
18
- export declare function markUsageReportsRejected(rejections: {
19
- wakeCycleId: string;
20
- reason: string;
21
- }[]): void;
22
- export declare function releaseStaleInflightUsageReports(timeoutMs: number): void;
23
- export declare function releaseInflightUsageReports(ids: string[], reason: string): void;
24
- export declare function markUsageReportsStaleOlderThan(days: number): void;
25
- export declare function closeUsageReportQueue(): void;
26
- //# sourceMappingURL=usage-report-queue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usage-report-queue.d.ts","sourceRoot":"","sources":["../../src/agent/usage-report-queue.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAE7F,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,MAAM,EAAE,sBAAsB,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAqGD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAerE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAwB5E;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAK5D;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAKzD;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,IAAI,CAIpG;AAED,wBAAgB,gCAAgC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAIxE;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAI/E;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIjE;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAiB5C"}