visionclaw 0.1.193 → 0.1.194-dev.feat-backup-progress-reporting.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/backup-uploader.d.ts +44 -0
- package/dist/agent/backup-uploader.d.ts.map +1 -0
- package/dist/agent/backup-uploader.js +83 -0
- package/dist/agent/backup-uploader.js.map +1 -0
- package/dist/agent/backup.d.ts +7 -1
- package/dist/agent/backup.d.ts.map +1 -1
- package/dist/agent/backup.js +337 -52
- package/dist/agent/backup.js.map +1 -1
- package/dist/agent/command-handlers.d.ts +2 -0
- package/dist/agent/command-handlers.d.ts.map +1 -1
- package/dist/agent/command-handlers.js +29 -3
- package/dist/agent/command-handlers.js.map +1 -1
- package/dist/agent/context.d.ts +2 -0
- package/dist/agent/context.d.ts.map +1 -1
- package/dist/agent/context.js +11 -1
- package/dist/agent/context.js.map +1 -1
- package/dist/agent/data-collector.d.ts.map +1 -1
- package/dist/agent/data-collector.js +23 -38
- package/dist/agent/data-collector.js.map +1 -1
- package/dist/agent/loop.d.ts +3 -0
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +48 -0
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/message-format.d.ts.map +1 -1
- package/dist/agent/message-format.js +3 -0
- package/dist/agent/message-format.js.map +1 -1
- package/dist/agent/status.d.ts.map +1 -1
- package/dist/agent/status.js +2 -1
- package/dist/agent/status.js.map +1 -1
- package/dist/backup.d.ts +4 -1
- package/dist/backup.d.ts.map +1 -1
- package/dist/backup.js +86 -3
- package/dist/backup.js.map +1 -1
- package/dist/calendar/google-calendar.d.ts +2 -0
- package/dist/calendar/google-calendar.d.ts.map +1 -1
- package/dist/calendar/google-calendar.js +3 -0
- package/dist/calendar/google-calendar.js.map +1 -1
- package/dist/channels/interface.d.ts +9 -0
- package/dist/channels/interface.d.ts.map +1 -1
- package/dist/channels/manager.d.ts +7 -1
- package/dist/channels/manager.d.ts.map +1 -1
- package/dist/channels/manager.js +12 -0
- package/dist/channels/manager.js.map +1 -1
- package/dist/channels/telegram.d.ts.map +1 -1
- package/dist/channels/telegram.js +5 -0
- package/dist/channels/telegram.js.map +1 -1
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +42 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/config/types.d.ts +9 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +6 -0
- package/dist/config/types.js.map +1 -1
- package/dist/drive/google-drive.d.ts +1 -0
- package/dist/drive/google-drive.d.ts.map +1 -1
- package/dist/drive/google-drive.js +5 -0
- package/dist/drive/google-drive.js.map +1 -1
- package/dist/i18n/messages.d.ts +4 -0
- package/dist/i18n/messages.d.ts.map +1 -1
- package/dist/i18n/messages.js +7 -2
- package/dist/i18n/messages.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/obs/server.d.ts +7 -0
- package/dist/obs/server.d.ts.map +1 -1
- package/dist/obs/server.js +22 -0
- package/dist/obs/server.js.map +1 -1
- package/dist/onboarding/bot-profile.d.ts.map +1 -1
- package/dist/onboarding/bot-profile.js +1 -0
- package/dist/onboarding/bot-profile.js.map +1 -1
- package/dist/onboarding/index.d.ts.map +1 -1
- package/dist/onboarding/index.js +5 -0
- package/dist/onboarding/index.js.map +1 -1
- package/dist/onboarding/prepare-mac.d.ts +1 -0
- package/dist/onboarding/prepare-mac.d.ts.map +1 -1
- package/dist/onboarding/prepare-mac.js +32 -15
- package/dist/onboarding/prepare-mac.js.map +1 -1
- package/dist/onboarding/setup-shared.d.ts.map +1 -1
- package/dist/onboarding/setup-shared.js +6 -0
- package/dist/onboarding/setup-shared.js.map +1 -1
- package/dist/onboarding/setup-steps.d.ts.map +1 -1
- package/dist/onboarding/setup-steps.js +8 -0
- package/dist/onboarding/setup-steps.js.map +1 -1
- package/dist/realtime/agent-bridge.d.ts +7 -0
- package/dist/realtime/agent-bridge.d.ts.map +1 -0
- package/dist/realtime/agent-bridge.js +31 -0
- package/dist/realtime/agent-bridge.js.map +1 -0
- package/dist/realtime/assets/index.html +1058 -0
- package/dist/realtime/assets/samples/alloy.mp3 +0 -0
- package/dist/realtime/assets/samples/ash.mp3 +0 -0
- package/dist/realtime/assets/samples/ballad.mp3 +0 -0
- package/dist/realtime/assets/samples/cedar.mp3 +0 -0
- package/dist/realtime/assets/samples/coral.mp3 +0 -0
- package/dist/realtime/assets/samples/echo.mp3 +0 -0
- package/dist/realtime/assets/samples/marin.mp3 +0 -0
- package/dist/realtime/assets/samples/sage.mp3 +0 -0
- package/dist/realtime/assets/samples/shimmer.mp3 +0 -0
- package/dist/realtime/assets/samples/verse.mp3 +0 -0
- package/dist/realtime/context.d.ts +14 -0
- package/dist/realtime/context.d.ts.map +1 -0
- package/dist/realtime/context.js +153 -0
- package/dist/realtime/context.js.map +1 -0
- package/dist/realtime/http-helpers.d.ts +5 -0
- package/dist/realtime/http-helpers.d.ts.map +1 -0
- package/dist/realtime/http-helpers.js +29 -0
- package/dist/realtime/http-helpers.js.map +1 -0
- package/dist/realtime/index.d.ts +62 -0
- package/dist/realtime/index.d.ts.map +1 -0
- package/dist/realtime/index.js +94 -0
- package/dist/realtime/index.js.map +1 -0
- package/dist/realtime/server.d.ts +6 -0
- package/dist/realtime/server.d.ts.map +1 -0
- package/dist/realtime/server.js +476 -0
- package/dist/realtime/server.js.map +1 -0
- package/dist/realtime/telegram-auth.d.ts +2 -0
- package/dist/realtime/telegram-auth.d.ts.map +1 -0
- package/dist/realtime/telegram-auth.js +24 -0
- package/dist/realtime/telegram-auth.js.map +1 -0
- package/dist/realtime/tools.d.ts +829 -0
- package/dist/realtime/tools.d.ts.map +1 -0
- package/dist/realtime/tools.js +630 -0
- package/dist/realtime/tools.js.map +1 -0
- package/dist/realtime/types.d.ts +62 -0
- package/dist/realtime/types.d.ts.map +1 -0
- package/dist/realtime/types.js +3 -0
- package/dist/realtime/types.js.map +1 -0
- package/dist/realtime/voice-summarizer.d.ts +4 -0
- package/dist/realtime/voice-summarizer.d.ts.map +1 -0
- package/dist/realtime/voice-summarizer.js +129 -0
- package/dist/realtime/voice-summarizer.js.map +1 -0
- package/dist/restore.d.ts +5 -0
- package/dist/restore.d.ts.map +1 -1
- package/dist/restore.js +132 -16
- package/dist/restore.js.map +1 -1
- package/dist/tools/email.d.ts +1 -1
- package/dist/tools/memory.d.ts +13 -0
- package/dist/tools/memory.d.ts.map +1 -1
- package/dist/tools/memory.js +43 -43
- package/dist/tools/memory.js.map +1 -1
- package/dist/tools/stock-data.d.ts +16 -0
- package/dist/tools/stock-data.d.ts.map +1 -1
- package/dist/tools/stock-data.js +36 -38
- package/dist/tools/stock-data.js.map +1 -1
- package/dist/tools/web-fetch.d.ts +4 -0
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +95 -23
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tos-storage.d.ts +45 -0
- package/dist/tos-storage.d.ts.map +1 -0
- package/dist/tos-storage.js +134 -0
- package/dist/tos-storage.js.map +1 -0
- package/dist-agent/bundle.cjs +170934 -167547
- package/package.json +3 -2
- package/dist/agent/applied-credential-signature.d.ts +0 -53
- package/dist/agent/applied-credential-signature.d.ts.map +0 -1
- package/dist/agent/applied-credential-signature.js +0 -137
- package/dist/agent/applied-credential-signature.js.map +0 -1
- package/dist/agent/engines/claude/cli-resolver.d.ts +0 -16
- package/dist/agent/engines/claude/cli-resolver.d.ts.map +0 -1
- package/dist/agent/engines/claude/cli-resolver.js +0 -83
- package/dist/agent/engines/claude/cli-resolver.js.map +0 -1
- package/dist/agent/engines/claude/session-browser-policy.d.ts +0 -9
- package/dist/agent/engines/claude/session-browser-policy.d.ts.map +0 -1
- package/dist/agent/engines/claude/session-browser-policy.js +0 -49
- package/dist/agent/engines/claude/session-browser-policy.js.map +0 -1
- package/dist/agent/engines/claude/session.d.ts +0 -291
- package/dist/agent/engines/claude/session.d.ts.map +0 -1
- package/dist/agent/engines/claude/session.js +0 -1177
- package/dist/agent/engines/claude/session.js.map +0 -1
- package/dist/agent/engines/client-factory.d.ts +0 -63
- package/dist/agent/engines/client-factory.d.ts.map +0 -1
- package/dist/agent/engines/client-factory.js +0 -382
- package/dist/agent/engines/client-factory.js.map +0 -1
- package/dist/agent/engines/engine.d.ts +0 -8
- package/dist/agent/engines/engine.d.ts.map +0 -1
- package/dist/agent/engines/engine.js +0 -15
- package/dist/agent/engines/engine.js.map +0 -1
- package/dist/agent/engines/openai/file-session.d.ts +0 -49
- package/dist/agent/engines/openai/file-session.d.ts.map +0 -1
- package/dist/agent/engines/openai/file-session.js +0 -108
- package/dist/agent/engines/openai/file-session.js.map +0 -1
- package/dist/agent/engines/openai/file-tools.d.ts +0 -35
- package/dist/agent/engines/openai/file-tools.d.ts.map +0 -1
- package/dist/agent/engines/openai/file-tools.js +0 -194
- package/dist/agent/engines/openai/file-tools.js.map +0 -1
- package/dist/agent/engines/openai/session.d.ts +0 -190
- package/dist/agent/engines/openai/session.d.ts.map +0 -1
- package/dist/agent/engines/openai/session.js +0 -1066
- package/dist/agent/engines/openai/session.js.map +0 -1
- package/dist/agent/engines/openai/tools.d.ts +0 -13
- package/dist/agent/engines/openai/tools.d.ts.map +0 -1
- package/dist/agent/engines/openai/tools.js +0 -248
- package/dist/agent/engines/openai/tools.js.map +0 -1
- package/dist/agent/engines/session-types.d.ts +0 -146
- package/dist/agent/engines/session-types.d.ts.map +0 -1
- package/dist/agent/engines/session-types.js +0 -2
- package/dist/agent/engines/session-types.js.map +0 -1
- package/dist/agent/engines/system-prompt-log.d.ts +0 -9
- package/dist/agent/engines/system-prompt-log.d.ts.map +0 -1
- package/dist/agent/engines/system-prompt-log.js +0 -46
- package/dist/agent/engines/system-prompt-log.js.map +0 -1
- package/dist/agent/transcript/transcript-backfill.d.ts +0 -54
- package/dist/agent/transcript/transcript-backfill.d.ts.map +0 -1
- package/dist/agent/transcript/transcript-backfill.js +0 -604
- package/dist/agent/transcript/transcript-backfill.js.map +0 -1
- package/dist/agent/transcript/transcript-indexer.d.ts +0 -273
- package/dist/agent/transcript/transcript-indexer.d.ts.map +0 -1
- package/dist/agent/transcript/transcript-indexer.js +0 -1217
- package/dist/agent/transcript/transcript-indexer.js.map +0 -1
- package/dist/agent/transcript/transcript-memory-migrations.d.ts +0 -25
- package/dist/agent/transcript/transcript-memory-migrations.d.ts.map +0 -1
- package/dist/agent/transcript/transcript-memory-migrations.js +0 -87
- package/dist/agent/transcript/transcript-memory-migrations.js.map +0 -1
- package/dist/agent/transcript-memory-migrations.d.ts +0 -25
- package/dist/agent/transcript-memory-migrations.d.ts.map +0 -1
- package/dist/agent/transcript-memory-migrations.js +0 -87
- package/dist/agent/transcript-memory-migrations.js.map +0 -1
- package/dist/agent/tunnel-credential-handler.d.ts +0 -90
- package/dist/agent/tunnel-credential-handler.d.ts.map +0 -1
- package/dist/agent/tunnel-credential-handler.js +0 -162
- package/dist/agent/tunnel-credential-handler.js.map +0 -1
- package/dist/agent/usage/usage-backfill-handler.d.ts +0 -18
- package/dist/agent/usage/usage-backfill-handler.d.ts.map +0 -1
- package/dist/agent/usage/usage-backfill-handler.js +0 -69
- package/dist/agent/usage/usage-backfill-handler.js.map +0 -1
- package/dist/agent/usage/usage-gate.d.ts +0 -25
- package/dist/agent/usage/usage-gate.d.ts.map +0 -1
- package/dist/agent/usage/usage-gate.js +0 -83
- package/dist/agent/usage/usage-gate.js.map +0 -1
- package/dist/agent/usage/usage-handler.d.ts +0 -7
- package/dist/agent/usage/usage-handler.d.ts.map +0 -1
- package/dist/agent/usage/usage-handler.js +0 -28
- package/dist/agent/usage/usage-handler.js.map +0 -1
- package/dist/agent/usage/usage-report-builder.d.ts +0 -26
- package/dist/agent/usage/usage-report-builder.d.ts.map +0 -1
- package/dist/agent/usage/usage-report-builder.js +0 -80
- package/dist/agent/usage/usage-report-builder.js.map +0 -1
- package/dist/agent/usage/usage-report-queue.d.ts +0 -26
- package/dist/agent/usage/usage-report-queue.d.ts.map +0 -1
- package/dist/agent/usage/usage-report-queue.js +0 -199
- package/dist/agent/usage/usage-report-queue.js.map +0 -1
- package/dist/agent/usage/usage-report-types.d.ts +0 -41
- package/dist/agent/usage/usage-report-types.d.ts.map +0 -1
- package/dist/agent/usage/usage-report-types.js +0 -2
- package/dist/agent/usage/usage-report-types.js.map +0 -1
- package/dist/agent/usage/usage-reporter.d.ts +0 -31
- package/dist/agent/usage/usage-reporter.d.ts.map +0 -1
- package/dist/agent/usage/usage-reporter.js +0 -102
- package/dist/agent/usage/usage-reporter.js.map +0 -1
- package/dist/agent/usage-backfill-handler.d.ts +0 -18
- package/dist/agent/usage-backfill-handler.d.ts.map +0 -1
- package/dist/agent/usage-backfill-handler.js +0 -69
- package/dist/agent/usage-backfill-handler.js.map +0 -1
- package/dist/agent/usage-gate.d.ts +0 -25
- package/dist/agent/usage-gate.d.ts.map +0 -1
- package/dist/agent/usage-gate.js +0 -83
- package/dist/agent/usage-gate.js.map +0 -1
- package/dist/agent/usage-report-builder.d.ts +0 -26
- package/dist/agent/usage-report-builder.d.ts.map +0 -1
- package/dist/agent/usage-report-builder.js +0 -80
- package/dist/agent/usage-report-builder.js.map +0 -1
- package/dist/agent/usage-report-queue.d.ts +0 -26
- package/dist/agent/usage-report-queue.d.ts.map +0 -1
- package/dist/agent/usage-report-queue.js +0 -199
- package/dist/agent/usage-report-queue.js.map +0 -1
- package/dist/agent/usage-report-types.d.ts +0 -41
- package/dist/agent/usage-report-types.d.ts.map +0 -1
- package/dist/agent/usage-report-types.js +0 -2
- package/dist/agent/usage-report-types.js.map +0 -1
- package/dist/agent/usage-reporter.d.ts +0 -31
- package/dist/agent/usage-reporter.d.ts.map +0 -1
- package/dist/agent/usage-reporter.js +0 -102
- package/dist/agent/usage-reporter.js.map +0 -1
- package/dist/agent/wake-cycle-tool-tracker.d.ts +0 -39
- package/dist/agent/wake-cycle-tool-tracker.d.ts.map +0 -1
- package/dist/agent/wake-cycle-tool-tracker.js +0 -72
- package/dist/agent/wake-cycle-tool-tracker.js.map +0 -1
- package/dist/billing/payg-handler.d.ts +0 -29
- package/dist/billing/payg-handler.d.ts.map +0 -1
- package/dist/billing/payg-handler.js +0 -92
- package/dist/billing/payg-handler.js.map +0 -1
- package/dist/billing/payment-handler.d.ts +0 -24
- package/dist/billing/payment-handler.d.ts.map +0 -1
- package/dist/billing/payment-handler.js +0 -101
- package/dist/billing/payment-handler.js.map +0 -1
- package/dist/builtin-skills/catalog/phone-adb-automation/SKILL.md +0 -412
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_input.sh +0 -132
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_launch.sh +0 -166
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_screenshot.sh +0 -87
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_security_kbd.py +0 -174
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_setup.sh +0 -274
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_swipe.sh +0 -111
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_tap.sh +0 -87
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_ui_parse.py +0 -176
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_wake_unlock.sh +0 -67
- package/dist/builtin-skills/transcribe-audio/SKILL.md +0 -122
- package/dist/data-processing/convert-demo-cli.d.ts +0 -7
- package/dist/data-processing/convert-demo-cli.d.ts.map +0 -1
- package/dist/data-processing/convert-demo-cli.js +0 -30
- package/dist/data-processing/convert-demo-cli.js.map +0 -1
- package/dist/data-processing/convert-demo.d.ts +0 -26
- package/dist/data-processing/convert-demo.d.ts.map +0 -1
- package/dist/data-processing/convert-demo.js +0 -233
- package/dist/data-processing/convert-demo.js.map +0 -1
- package/dist/obs/rdp/icons/icons/app_windows.svg +0 -4
- package/dist/obs/rdp/icons/icons/clip_get.svg +0 -4
- package/dist/obs/rdp/icons/icons/clip_send.svg +0 -4
- package/dist/obs/rdp/icons/icons/clip_shared.svg +0 -4
- package/dist/obs/rdp/icons/icons/clipboard.svg +0 -4
- package/dist/obs/rdp/icons/icons/clipboard_shared.svg +0 -4
- package/dist/obs/rdp/icons/icons/control.svg +0 -4
- package/dist/obs/rdp/icons/icons/desktop.svg +0 -4
- package/dist/obs/rdp/icons/icons/display.svg +0 -4
- package/dist/obs/rdp/icons/icons/launchpad.svg +0 -4
- package/dist/obs/rdp/icons/icons/mission_control.svg +0 -4
- package/dist/obs/rdp/icons/icons/screenshot.svg +0 -4
- package/dist/obs/rdp/icons/icons/zoom_actual.svg +0 -4
- package/dist/obs/rdp/icons/icons/zoom_fit.svg +0 -4
- package/dist/obs/rdp/icons/icons/zoom_in.svg +0 -4
- package/dist/obs/rdp/icons/icons/zoom_out.svg +0 -4
- package/dist/obs/tunnel-telemetry.d.ts +0 -46
- package/dist/obs/tunnel-telemetry.d.ts.map +0 -1
- package/dist/obs/tunnel-telemetry.js +0 -70
- package/dist/obs/tunnel-telemetry.js.map +0 -1
- package/dist/onboarding/cloudflared-cert.d.ts +0 -15
- package/dist/onboarding/cloudflared-cert.d.ts.map +0 -1
- package/dist/onboarding/cloudflared-cert.js +0 -57
- package/dist/onboarding/cloudflared-cert.js.map +0 -1
- package/dist/onboarding/playwriter-extension.d.ts +0 -19
- package/dist/onboarding/playwriter-extension.d.ts.map +0 -1
- package/dist/onboarding/playwriter-extension.js +0 -246
- package/dist/onboarding/playwriter-extension.js.map +0 -1
- package/dist/service/gbox-tun.d.ts +0 -14
- package/dist/service/gbox-tun.d.ts.map +0 -1
- package/dist/service/gbox-tun.js +0 -315
- package/dist/service/gbox-tun.js.map +0 -1
- package/dist/skills/installed.d.ts +0 -11
- package/dist/skills/installed.d.ts.map +0 -1
- package/dist/skills/installed.js +0 -35
- package/dist/skills/installed.js.map +0 -1
- package/dist/tools/coordinate-resolver.d.ts +0 -30
- package/dist/tools/coordinate-resolver.d.ts.map +0 -1
- package/dist/tools/coordinate-resolver.js +0 -104
- package/dist/tools/coordinate-resolver.js.map +0 -1
- package/dist/utils/playwriter-relay.d.ts +0 -9
- package/dist/utils/playwriter-relay.d.ts.map +0 -1
- package/dist/utils/playwriter-relay.js +0 -77
- package/dist/utils/playwriter-relay.js.map +0 -1
- package/dist/utils/wechat-monitor.d.ts +0 -21
- package/dist/utils/wechat-monitor.d.ts.map +0 -1
- package/dist/utils/wechat-monitor.js +0 -88
- package/dist/utils/wechat-monitor.js.map +0 -1
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
import { DatabaseSync } from "node:sqlite";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { getConfigDir } from "../config/index.js";
|
|
4
|
-
import { logger } from "../logger.js";
|
|
5
|
-
let db = null;
|
|
6
|
-
let stmtInsert = null;
|
|
7
|
-
let stmtListPending = null;
|
|
8
|
-
let stmtMarkInflight = null;
|
|
9
|
-
let stmtMarkAcked = null;
|
|
10
|
-
let stmtMarkRejected = null;
|
|
11
|
-
let stmtReleaseStale = null;
|
|
12
|
-
let stmtReleaseByIds = null;
|
|
13
|
-
let stmtMarkOldStale = null;
|
|
14
|
-
function requireStatement(stmt, name) {
|
|
15
|
-
if (!stmt)
|
|
16
|
-
throw new Error(`Usage report queue statement not initialized: ${name}`);
|
|
17
|
-
return stmt;
|
|
18
|
-
}
|
|
19
|
-
function getDb() {
|
|
20
|
-
if (db)
|
|
21
|
-
return db;
|
|
22
|
-
const dbPath = path.join(getConfigDir(), "usage.db");
|
|
23
|
-
db = new DatabaseSync(dbPath);
|
|
24
|
-
db.exec("PRAGMA journal_mode = WAL");
|
|
25
|
-
db.exec(`
|
|
26
|
-
CREATE TABLE IF NOT EXISTS usage_reports (
|
|
27
|
-
wake_cycle_id TEXT PRIMARY KEY,
|
|
28
|
-
report_json TEXT NOT NULL,
|
|
29
|
-
status TEXT NOT NULL DEFAULT 'pending',
|
|
30
|
-
attempt_count INTEGER NOT NULL DEFAULT 0,
|
|
31
|
-
last_attempt_at TEXT,
|
|
32
|
-
last_error TEXT,
|
|
33
|
-
created_at TEXT NOT NULL,
|
|
34
|
-
acked_at TEXT,
|
|
35
|
-
report_schema_version INTEGER NOT NULL,
|
|
36
|
-
session_type TEXT,
|
|
37
|
-
started_at TEXT,
|
|
38
|
-
ended_at TEXT,
|
|
39
|
-
duration_seconds INTEGER,
|
|
40
|
-
trigger_type TEXT,
|
|
41
|
-
trigger_channel TEXT,
|
|
42
|
-
trigger_message_id TEXT
|
|
43
|
-
)
|
|
44
|
-
`);
|
|
45
|
-
db.exec("CREATE INDEX IF NOT EXISTS idx_usage_reports_status_created ON usage_reports(status, created_at)");
|
|
46
|
-
try {
|
|
47
|
-
db.exec("ALTER TABLE usage_reports ADD COLUMN session_type TEXT");
|
|
48
|
-
}
|
|
49
|
-
catch { /* already migrated */ }
|
|
50
|
-
try {
|
|
51
|
-
db.exec("ALTER TABLE usage_reports ADD COLUMN started_at TEXT");
|
|
52
|
-
}
|
|
53
|
-
catch { /* already migrated */ }
|
|
54
|
-
try {
|
|
55
|
-
db.exec("ALTER TABLE usage_reports ADD COLUMN ended_at TEXT");
|
|
56
|
-
}
|
|
57
|
-
catch { /* already migrated */ }
|
|
58
|
-
try {
|
|
59
|
-
db.exec("ALTER TABLE usage_reports ADD COLUMN duration_seconds INTEGER");
|
|
60
|
-
}
|
|
61
|
-
catch { /* already migrated */ }
|
|
62
|
-
try {
|
|
63
|
-
db.exec("ALTER TABLE usage_reports ADD COLUMN trigger_type TEXT");
|
|
64
|
-
}
|
|
65
|
-
catch { /* already migrated */ }
|
|
66
|
-
try {
|
|
67
|
-
db.exec("ALTER TABLE usage_reports ADD COLUMN trigger_channel TEXT");
|
|
68
|
-
}
|
|
69
|
-
catch { /* already migrated */ }
|
|
70
|
-
try {
|
|
71
|
-
db.exec("ALTER TABLE usage_reports ADD COLUMN trigger_message_id TEXT");
|
|
72
|
-
}
|
|
73
|
-
catch { /* already migrated */ }
|
|
74
|
-
stmtInsert = db.prepare(`
|
|
75
|
-
INSERT INTO usage_reports (
|
|
76
|
-
wake_cycle_id,
|
|
77
|
-
report_json,
|
|
78
|
-
status,
|
|
79
|
-
attempt_count,
|
|
80
|
-
created_at,
|
|
81
|
-
report_schema_version,
|
|
82
|
-
session_type,
|
|
83
|
-
started_at,
|
|
84
|
-
ended_at,
|
|
85
|
-
duration_seconds,
|
|
86
|
-
trigger_type,
|
|
87
|
-
trigger_channel,
|
|
88
|
-
trigger_message_id
|
|
89
|
-
) VALUES (?, ?, 'pending', 0, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
90
|
-
ON CONFLICT(wake_cycle_id) DO NOTHING
|
|
91
|
-
`);
|
|
92
|
-
stmtListPending = db.prepare(`
|
|
93
|
-
SELECT wake_cycle_id, report_json, status, attempt_count, last_attempt_at, last_error, created_at, acked_at, report_schema_version
|
|
94
|
-
FROM usage_reports
|
|
95
|
-
WHERE status IN ('pending', 'stale')
|
|
96
|
-
ORDER BY created_at ASC
|
|
97
|
-
LIMIT ?
|
|
98
|
-
`);
|
|
99
|
-
stmtMarkInflight = db.prepare(`
|
|
100
|
-
UPDATE usage_reports
|
|
101
|
-
SET status = 'inflight', attempt_count = attempt_count + 1, last_attempt_at = ?, last_error = NULL
|
|
102
|
-
WHERE wake_cycle_id = ? AND status IN ('pending', 'stale')
|
|
103
|
-
`);
|
|
104
|
-
stmtMarkAcked = db.prepare("UPDATE usage_reports SET status = 'acked', acked_at = ?, last_error = NULL WHERE wake_cycle_id = ?");
|
|
105
|
-
stmtMarkRejected = db.prepare("UPDATE usage_reports SET status = 'rejected', last_error = ? WHERE wake_cycle_id = ?");
|
|
106
|
-
stmtReleaseStale = db.prepare(`
|
|
107
|
-
UPDATE usage_reports
|
|
108
|
-
SET status = 'pending', last_error = 'inflight_timeout'
|
|
109
|
-
WHERE status = 'inflight' AND last_attempt_at <= ?
|
|
110
|
-
`);
|
|
111
|
-
stmtReleaseByIds = db.prepare(`
|
|
112
|
-
UPDATE usage_reports
|
|
113
|
-
SET status = 'pending', last_error = ?
|
|
114
|
-
WHERE status = 'inflight' AND wake_cycle_id = ?
|
|
115
|
-
`);
|
|
116
|
-
stmtMarkOldStale = db.prepare(`
|
|
117
|
-
UPDATE usage_reports
|
|
118
|
-
SET status = 'stale', last_error = 'retention_expired'
|
|
119
|
-
WHERE status IN ('pending', 'inflight') AND created_at < ?
|
|
120
|
-
`);
|
|
121
|
-
return db;
|
|
122
|
-
}
|
|
123
|
-
export function enqueueUsageReport(report) {
|
|
124
|
-
getDb();
|
|
125
|
-
requireStatement(stmtInsert, "insert").run(report.wakeCycleId, JSON.stringify(report), new Date().toISOString(), report.schemaVersion, report.sessionType, report.startedAt, report.endedAt, report.durationSeconds, report.triggerType ?? null, report.triggerChannel ?? null, null);
|
|
126
|
-
}
|
|
127
|
-
export function listPendingUsageReports(limit) {
|
|
128
|
-
getDb();
|
|
129
|
-
const rows = requireStatement(stmtListPending, "listPending").all(Math.max(1, limit));
|
|
130
|
-
return rows.map((row) => ({
|
|
131
|
-
wakeCycleId: row.wake_cycle_id,
|
|
132
|
-
report: JSON.parse(row.report_json),
|
|
133
|
-
status: row.status,
|
|
134
|
-
attemptCount: row.attempt_count,
|
|
135
|
-
lastAttemptAt: row.last_attempt_at,
|
|
136
|
-
lastError: row.last_error,
|
|
137
|
-
createdAt: row.created_at,
|
|
138
|
-
ackedAt: row.acked_at,
|
|
139
|
-
reportSchemaVersion: row.report_schema_version,
|
|
140
|
-
}));
|
|
141
|
-
}
|
|
142
|
-
export function markUsageReportsInflight(ids) {
|
|
143
|
-
getDb();
|
|
144
|
-
const now = new Date().toISOString();
|
|
145
|
-
const stmt = requireStatement(stmtMarkInflight, "markInflight");
|
|
146
|
-
for (const id of ids)
|
|
147
|
-
stmt.run(now, id);
|
|
148
|
-
}
|
|
149
|
-
export function markUsageReportsAcked(ids) {
|
|
150
|
-
getDb();
|
|
151
|
-
const now = new Date().toISOString();
|
|
152
|
-
const stmt = requireStatement(stmtMarkAcked, "markAcked");
|
|
153
|
-
for (const id of ids)
|
|
154
|
-
stmt.run(now, id);
|
|
155
|
-
}
|
|
156
|
-
export function markUsageReportsRejected(rejections) {
|
|
157
|
-
getDb();
|
|
158
|
-
const stmt = requireStatement(stmtMarkRejected, "markRejected");
|
|
159
|
-
for (const rejection of rejections)
|
|
160
|
-
stmt.run(rejection.reason, rejection.wakeCycleId);
|
|
161
|
-
}
|
|
162
|
-
export function releaseStaleInflightUsageReports(timeoutMs) {
|
|
163
|
-
getDb();
|
|
164
|
-
const cutoff = new Date(Date.now() - timeoutMs).toISOString();
|
|
165
|
-
requireStatement(stmtReleaseStale, "releaseStale").run(cutoff);
|
|
166
|
-
}
|
|
167
|
-
export function releaseInflightUsageReports(ids, reason) {
|
|
168
|
-
getDb();
|
|
169
|
-
const stmt = requireStatement(stmtReleaseByIds, "releaseByIds");
|
|
170
|
-
for (const id of ids)
|
|
171
|
-
stmt.run(reason, id);
|
|
172
|
-
}
|
|
173
|
-
export function markUsageReportsStaleOlderThan(days) {
|
|
174
|
-
getDb();
|
|
175
|
-
const cutoff = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();
|
|
176
|
-
requireStatement(stmtMarkOldStale, "markOldStale").run(cutoff);
|
|
177
|
-
}
|
|
178
|
-
export function closeUsageReportQueue() {
|
|
179
|
-
if (!db)
|
|
180
|
-
return;
|
|
181
|
-
try {
|
|
182
|
-
db.close();
|
|
183
|
-
}
|
|
184
|
-
catch (err) {
|
|
185
|
-
logger.warn(`Failed to close usage report queue: ${err instanceof Error ? err.message : String(err)}`);
|
|
186
|
-
}
|
|
187
|
-
finally {
|
|
188
|
-
db = null;
|
|
189
|
-
stmtInsert = null;
|
|
190
|
-
stmtListPending = null;
|
|
191
|
-
stmtMarkInflight = null;
|
|
192
|
-
stmtMarkAcked = null;
|
|
193
|
-
stmtMarkRejected = null;
|
|
194
|
-
stmtReleaseStale = null;
|
|
195
|
-
stmtReleaseByIds = null;
|
|
196
|
-
stmtMarkOldStale = null;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
//# sourceMappingURL=usage-report-queue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usage-report-queue.js","sourceRoot":"","sources":["../../src/agent/usage-report-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
export declare const USAGE_REPORT_SCHEMA_VERSION = 2;
|
|
2
|
-
export interface ToolCallFact {
|
|
3
|
-
toolName: string;
|
|
4
|
-
toolUseId?: string;
|
|
5
|
-
parentToolUseId?: string;
|
|
6
|
-
startedAt: string;
|
|
7
|
-
endedAt: string;
|
|
8
|
-
success: boolean;
|
|
9
|
-
errorKind?: string;
|
|
10
|
-
}
|
|
11
|
-
export interface WakeCycleUsageReport {
|
|
12
|
-
schemaVersion: number;
|
|
13
|
-
wakeCycleId: string;
|
|
14
|
-
sessionType: string;
|
|
15
|
-
startedAt: string;
|
|
16
|
-
endedAt: string;
|
|
17
|
-
durationSeconds: number;
|
|
18
|
-
triggerType?: string;
|
|
19
|
-
triggerChannel?: string;
|
|
20
|
-
toolCalls: ToolCallFact[];
|
|
21
|
-
toolCallCount: number;
|
|
22
|
-
toolCallsTruncated?: boolean;
|
|
23
|
-
reportedToolCallCount?: number;
|
|
24
|
-
outcome?: "completed" | "error" | "stopped" | "switched";
|
|
25
|
-
agentVersion?: string;
|
|
26
|
-
modelId?: string;
|
|
27
|
-
}
|
|
28
|
-
export interface RejectedUsageReport {
|
|
29
|
-
wakeCycleId: string;
|
|
30
|
-
reason: string;
|
|
31
|
-
}
|
|
32
|
-
export interface UsageStatus {
|
|
33
|
-
status: "active" | "exhausted" | "skip";
|
|
34
|
-
wuUsed: number;
|
|
35
|
-
wuLimit: number | null;
|
|
36
|
-
bundleWuRemaining: number;
|
|
37
|
-
periodStart: string | null;
|
|
38
|
-
periodEnd: string | null;
|
|
39
|
-
coverage: "complete" | "partial" | "cutover";
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=usage-report-types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usage-report-types.d.ts","sourceRoot":"","sources":["../../src/agent/usage-report-types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;CAC9C"}
|
|
@@ -1 +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
|