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,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/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/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/usage-gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,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/usage-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { CommandHandler } from "../command-dispatcher.js";
|
|
2
|
-
/**
|
|
3
|
-
* Creates a CommandHandler for the "usage" remote command.
|
|
4
|
-
* Delegates to buildToolUsageReport() — the same logic used by the /usage Telegram command.
|
|
5
|
-
*/
|
|
6
|
-
export declare function createUsageHandler(): CommandHandler;
|
|
7
|
-
//# sourceMappingURL=usage-handler.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usage-handler.d.ts","sourceRoot":"","sources":["../../../src/agent/usage/usage-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,cAAc,CAoBnD"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { logger } from "../../logger.js";
|
|
2
|
-
/**
|
|
3
|
-
* Creates a CommandHandler for the "usage" remote command.
|
|
4
|
-
* Delegates to buildToolUsageReport() — the same logic used by the /usage Telegram command.
|
|
5
|
-
*/
|
|
6
|
-
export function createUsageHandler() {
|
|
7
|
-
return async (_commandId, _payload) => {
|
|
8
|
-
try {
|
|
9
|
-
logger.system("[usage-handler] Received remote usage command");
|
|
10
|
-
const { buildToolUsageReport } = await import("../tool-usage.js");
|
|
11
|
-
const report = await buildToolUsageReport();
|
|
12
|
-
logger.system("[usage-handler] Usage report generated successfully");
|
|
13
|
-
return {
|
|
14
|
-
status: "completed",
|
|
15
|
-
result: JSON.stringify({ message: report }),
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
catch (err) {
|
|
19
|
-
const errMsg = err instanceof Error ? err.message : String(err);
|
|
20
|
-
logger.err(`[usage-handler] Failed to generate usage report: ${errMsg}`);
|
|
21
|
-
return {
|
|
22
|
-
status: "failed",
|
|
23
|
-
result: JSON.stringify({ error: errMsg }),
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=usage-handler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usage-handler.js","sourceRoot":"","sources":["../../../src/agent/usage/usage-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,KAAK,EAAE,UAAkB,EAAE,QAAiB,EAAE,EAAE;QACrD,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC;YAC/D,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,MAAM,oBAAoB,EAAE,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC;YACrE,OAAO;gBACL,MAAM,EAAE,WAAoB;gBAC5B,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;aAC5C,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,MAAM,CAAC,GAAG,CAAC,oDAAoD,MAAM,EAAE,CAAC,CAAC;YACzE,OAAO;gBACL,MAAM,EAAE,QAAiB;gBACzB,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;aAC1C,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -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/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/usage-report-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAiC3E;;;;;;;;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/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/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"}
|
|
@@ -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/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/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"}
|