ai-spend-agent 0.1.0 → 0.1.3
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/README.md +40 -0
- package/dist/index.js +249 -87
- package/package.json +14 -10
- package/dist/tsconfig.tsbuildinfo +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# ai-spend-agent
|
|
2
|
+
|
|
3
|
+
**Your AI spend in one view, in 90 seconds — local-first, no signup.**
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npx ai-spend-agent
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
If you use **Claude Code or Codex**, that one command reads the session logs
|
|
10
|
+
already on your machine and shows your real usage: total dollars *estimated at
|
|
11
|
+
API-equivalent rates*, where the money goes, a ranked "where to cut" list, a
|
|
12
|
+
subscription-vs-API **plan check**, and the **dead context** you pay for but
|
|
13
|
+
never use (tools/skills/MCP servers loaded on every turn and never invoked).
|
|
14
|
+
|
|
15
|
+
No logs? You get an instant, clearly-labeled demo on sample data.
|
|
16
|
+
|
|
17
|
+
## Connect real billing (optional, ~2 min)
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
ai-spend-agent connect openai # org-owner Admin key
|
|
21
|
+
ai-spend-agent connect anthropic # Admin key
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Billing-API numbers from OpenAI/Anthropic are tagged `verified`; local-log
|
|
25
|
+
numbers are always `estimated`; the beta Cursor/Copilot connectors are
|
|
26
|
+
`estimated` until reconciled against a real invoice. Every figure carries its
|
|
27
|
+
confidence label — that's the product.
|
|
28
|
+
|
|
29
|
+
## Privacy
|
|
30
|
+
|
|
31
|
+
Local-first: nothing is uploaded, there is no telemetry, secrets are
|
|
32
|
+
redacted from all output and persisted state, and provider keys are only ever
|
|
33
|
+
referenced as `env:NAME` — never stored.
|
|
34
|
+
|
|
35
|
+
## Docs
|
|
36
|
+
|
|
37
|
+
Full README, MCP server, and connector guides:
|
|
38
|
+
**https://github.com/futurastudio/ai-spend-agent#readme**
|
|
39
|
+
|
|
40
|
+
MIT licensed.
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { realpathSync } from "node:fs";
|
|
3
|
-
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { analyzeSpend, attributeUsageRecords, detectLocalCredentials, loadLocalAgentUsage, loadSampleUsageData, scanLocalUsageSignals, buildMissingSourcePrompts, confirmMapping, createProviderConnectorStub, createLocalFolderSourceRegistry, createScanAuditLog, fetchProviderUsageRecords, addApprovedSource, slugifySourceId } from "@agent-finops/core";
|
|
3
|
+
import { mkdir, readFile, rm, stat, writeFile } from "node:fs/promises";
|
|
4
|
+
import { dirname, extname, join, resolve } from "node:path";
|
|
5
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
6
|
+
import { analyzeSpend, attributeUsageRecords, detectLocalCredentials, redactSecrets, unsafeScanRootReason, loadDeadContext, sampleDeadContext, loadLocalAgentUsage, loadSampleUsageData, scanLocalUsageSignals, buildMissingSourcePrompts, confirmMapping, createProviderConnectorStub, createLocalFolderSourceRegistry, createScanAuditLog, fetchProviderUsageRecords, addApprovedSource, slugifySourceId } from "@agent-finops/core";
|
|
8
7
|
import { generateActionPlanMarkdown, generateApplyArtifactMarkdown, generateDemoPackageMarkdown, generateHtmlReport, generateMarkdownReport, generatePlainEnglishSummary, generatePolicyConfigDraftMarkdown, generateReportCardCaption, generateReportCardSvg, generateVerificationPlanMarkdown, groupByDimensions } from "@agent-finops/report";
|
|
9
8
|
export async function runCli(argv = process.argv.slice(2)) {
|
|
10
9
|
if (argv.includes("--help") || argv.includes("-h") || argv[0] === "help") {
|
|
@@ -21,6 +20,9 @@ export async function runCli(argv = process.argv.slice(2)) {
|
|
|
21
20
|
if (args.command === "doctor") {
|
|
22
21
|
return doctorCommand(args);
|
|
23
22
|
}
|
|
23
|
+
if (args.command === "reset") {
|
|
24
|
+
return resetCommand(args);
|
|
25
|
+
}
|
|
24
26
|
if (args.command === "init") {
|
|
25
27
|
return initCommand(args);
|
|
26
28
|
}
|
|
@@ -64,33 +66,7 @@ export async function runCli(argv = process.argv.slice(2)) {
|
|
|
64
66
|
};
|
|
65
67
|
}
|
|
66
68
|
async function quickstartCommand(args) {
|
|
67
|
-
|
|
68
|
-
// mined from this machine's agent logs (Claude Code / Codex — the spend no
|
|
69
|
-
// billing API can see), then (3) the bundled sample so the wow ALWAYS lands.
|
|
70
|
-
let records = [];
|
|
71
|
-
let mode = "demo";
|
|
72
|
-
const localSpend = await readOptionalLocalSpend(resolve(args.path));
|
|
73
|
-
if (localSpend && localSpend.length > 0) {
|
|
74
|
-
records = localSpend;
|
|
75
|
-
mode = "connected";
|
|
76
|
-
}
|
|
77
|
-
else if (!args.sample) {
|
|
78
|
-
const logs = await loadLocalAgentUsage({
|
|
79
|
-
// Env overrides keep tests (and unusual installs) isolated from $HOME.
|
|
80
|
-
claudeProjectsDir: process.env.AI_SPEND_CLAUDE_LOGS_DIR,
|
|
81
|
-
codexSessionsDir: process.env.AI_SPEND_CODEX_LOGS_DIR
|
|
82
|
-
}).catch(() => undefined);
|
|
83
|
-
if (logs && logs.records.length > 0) {
|
|
84
|
-
records = logs.records;
|
|
85
|
-
mode = "local-logs";
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
if (records.length === 0) {
|
|
89
|
-
// loadSampleUsageData resolves the bundled CSVs relative to the installed
|
|
90
|
-
// package, so this works from ANY directory (true zero-config).
|
|
91
|
-
records = await loadSampleUsageData();
|
|
92
|
-
mode = "demo";
|
|
93
|
-
}
|
|
69
|
+
const { records, mode, warnings } = await loadInstantReadData(args);
|
|
94
70
|
const summary = analyzeSpend(records);
|
|
95
71
|
const groupBy = args.groupBy ?? "model";
|
|
96
72
|
const color = args.noColor ? false : undefined;
|
|
@@ -98,14 +74,38 @@ async function quickstartCommand(args) {
|
|
|
98
74
|
// without ever printing a raw secret.
|
|
99
75
|
const detection = await detectLocalCredentials({ cwd: resolve(args.path) });
|
|
100
76
|
const nextSteps = quickstartNextSteps(mode, detection.credentials);
|
|
77
|
+
// Dead-context cost, globalized across the user's whole Claude Code setup
|
|
78
|
+
// (all projects' MCP + user-scope skills/agents/commands, vs. every
|
|
79
|
+
// transcript) so it's populated from ANY directory on the first run.
|
|
80
|
+
// Never throws into the readout.
|
|
81
|
+
let deadContext = args.sample
|
|
82
|
+
? undefined
|
|
83
|
+
: await loadDeadContext({
|
|
84
|
+
// Env overrides keep tests (and unusual installs) isolated from $HOME.
|
|
85
|
+
claudeProjectsDir: process.env.AI_SPEND_CLAUDE_LOGS_DIR,
|
|
86
|
+
claudeHomeDir: process.env.AI_SPEND_CLAUDE_HOME_DIR,
|
|
87
|
+
claudeConfigPath: process.env.AI_SPEND_CLAUDE_CONFIG,
|
|
88
|
+
projectDir: resolve(args.path),
|
|
89
|
+
includeAllProjectMcp: true,
|
|
90
|
+
sinceIso: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString(),
|
|
91
|
+
windowDays: 30
|
|
92
|
+
}).catch(() => undefined);
|
|
93
|
+
// Sample dead-context is shown ONLY on the demo readout. A real readout
|
|
94
|
+
// (local logs / connected billing) never gets fabricated waste injected —
|
|
95
|
+
// a genuinely clean setup earns its congratulation line instead.
|
|
96
|
+
if (mode === "demo" && (!deadContext || !deadContext.hasData)) {
|
|
97
|
+
deadContext = sampleDeadContext();
|
|
98
|
+
}
|
|
101
99
|
const summaryText = generatePlainEnglishSummary(summary, {
|
|
102
100
|
records,
|
|
103
101
|
groupBy,
|
|
104
102
|
color,
|
|
105
103
|
mode,
|
|
106
|
-
nextSteps
|
|
104
|
+
nextSteps,
|
|
105
|
+
deadContext
|
|
107
106
|
});
|
|
108
|
-
|
|
107
|
+
const header = [` ${dataModeBanner(mode)}`, ...warnings.map((warning) => ` ! ${warning}`)].join("\n");
|
|
108
|
+
return ok(`${header}\n${summaryText}`);
|
|
109
109
|
}
|
|
110
110
|
function quickstartNextSteps(mode, detected) {
|
|
111
111
|
const steps = [];
|
|
@@ -125,26 +125,137 @@ function quickstartNextSteps(mode, detected) {
|
|
|
125
125
|
steps.push("Want this watched while your laptop is off? Hosted beta waitlist: https://ai-spend-agent.vercel.app");
|
|
126
126
|
return steps;
|
|
127
127
|
}
|
|
128
|
-
async function
|
|
128
|
+
async function readPersistedSpend(rootPath) {
|
|
129
129
|
const stateDir = join(rootPath, ".ai-spend-agent");
|
|
130
130
|
try {
|
|
131
131
|
const spend = await readJson(join(stateDir, "spend.json"));
|
|
132
|
-
return spend.records;
|
|
132
|
+
return { mode: spend.mode, records: spend.records ?? [] };
|
|
133
133
|
}
|
|
134
134
|
catch {
|
|
135
135
|
return undefined;
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
|
+
async function loadInstantReadData(args) {
|
|
139
|
+
const warnings = [];
|
|
140
|
+
if (args.sample) {
|
|
141
|
+
return { records: await loadSampleUsageData(), mode: "demo", warnings };
|
|
142
|
+
}
|
|
143
|
+
const persisted = args.ignoreState ? undefined : await readPersistedSpend(resolve(args.path));
|
|
144
|
+
// Only real connected/synced provider state is authoritative enough to serve
|
|
145
|
+
// directly. Sample or legacy persisted state must NEVER mask real local logs.
|
|
146
|
+
if (persisted && persisted.records.length > 0 && persisted.mode === "connected_provider") {
|
|
147
|
+
return { records: persisted.records, mode: "connected", warnings };
|
|
148
|
+
}
|
|
149
|
+
// Real local agent logs (Claude Code / Codex) beat any sample/legacy state.
|
|
150
|
+
const logs = await loadLocalAgentUsage({
|
|
151
|
+
// Env overrides keep tests (and unusual installs) isolated from $HOME.
|
|
152
|
+
claudeProjectsDir: process.env.AI_SPEND_CLAUDE_LOGS_DIR,
|
|
153
|
+
codexSessionsDir: process.env.AI_SPEND_CODEX_LOGS_DIR
|
|
154
|
+
}).catch(() => undefined);
|
|
155
|
+
if (logs && logs.records.length > 0) {
|
|
156
|
+
if (persisted && persisted.records.length > 0 && persisted.mode !== "connected_provider") {
|
|
157
|
+
warnings.push("Ignored persisted sample/legacy state in .ai-spend-agent/spend.json — showing your real local agent logs. Run `ai-spend-agent reset` to clear it, or pass --ignore-state.");
|
|
158
|
+
}
|
|
159
|
+
return { records: logs.records, mode: "local-logs", warnings };
|
|
160
|
+
}
|
|
161
|
+
// No real logs. Persisted sample/legacy state may still be shown, but only as
|
|
162
|
+
// DEMO (never as connected), with a warning when its origin is unknown.
|
|
163
|
+
if (persisted && persisted.records.length > 0) {
|
|
164
|
+
if (persisted.mode === undefined) {
|
|
165
|
+
warnings.push("Persisted state in .ai-spend-agent/spend.json is from an older format with no data-mode tag — treating it as demo. Run `ai-spend-agent reset`, then re-scan to refresh.");
|
|
166
|
+
}
|
|
167
|
+
return { records: persisted.records, mode: "demo", warnings };
|
|
168
|
+
}
|
|
169
|
+
// loadSampleUsageData resolves the bundled CSVs relative to the installed
|
|
170
|
+
// package, so this works from ANY directory (true zero-config).
|
|
171
|
+
return { records: await loadSampleUsageData(), mode: "demo", warnings };
|
|
172
|
+
}
|
|
173
|
+
/** A one-line, unmissable banner telling the user which data they're seeing. */
|
|
174
|
+
function dataModeBanner(mode) {
|
|
175
|
+
if (mode === "local-logs")
|
|
176
|
+
return "DATA MODE: your local agent logs (estimated at API-equivalent rates)";
|
|
177
|
+
if (mode === "connected")
|
|
178
|
+
return "DATA MODE: connected provider billing";
|
|
179
|
+
return "DATA MODE: demo sample (illustrative — not your real spend)";
|
|
180
|
+
}
|
|
138
181
|
async function doctorCommand(args) {
|
|
139
182
|
const rootPath = resolve(args.path);
|
|
140
183
|
const stateDir = join(rootPath, ".ai-spend-agent");
|
|
184
|
+
const persisted = await readPersistedSpend(rootPath);
|
|
185
|
+
const stateMode = persisted ? (persisted.mode ?? "unknown legacy") : "no state";
|
|
186
|
+
const logs = await loadLocalAgentUsage({
|
|
187
|
+
claudeProjectsDir: process.env.AI_SPEND_CLAUDE_LOGS_DIR,
|
|
188
|
+
codexSessionsDir: process.env.AI_SPEND_CODEX_LOGS_DIR
|
|
189
|
+
}).catch(() => undefined);
|
|
190
|
+
const detected = logs?.agentsDetected ?? [];
|
|
191
|
+
const claudeFound = detected.includes("claude-code");
|
|
192
|
+
const codexFound = detected.includes("codex");
|
|
193
|
+
const hasLogs = claudeFound || codexFound;
|
|
194
|
+
const detection = await detectLocalCredentials({ cwd: rootPath }).catch(() => ({ credentials: [] }));
|
|
195
|
+
const providerRefs = detection.credentials.map((credential) => `${credential.provider} (${credential.hint})`);
|
|
196
|
+
const warnings = [];
|
|
197
|
+
if (stateMode === "sample")
|
|
198
|
+
warnings.push("sample state present — it will be shown as DEMO and cannot mask real logs; run `ai-spend-agent reset` to clear it");
|
|
199
|
+
if (stateMode === "unknown legacy")
|
|
200
|
+
warnings.push("legacy state with no data-mode tag — run `ai-spend-agent reset`, then re-scan");
|
|
201
|
+
if (!hasLogs)
|
|
202
|
+
warnings.push("no real Claude Code / Codex logs found — a first run here will show DEMO sample data");
|
|
203
|
+
if (providerRefs.length === 0)
|
|
204
|
+
warnings.push("no provider admin keys detected — connect OpenAI/Anthropic for VERIFIED billing (local logs stay ESTIMATED)");
|
|
205
|
+
const predictedMode = stateMode === "connected_provider"
|
|
206
|
+
? "connected provider billing"
|
|
207
|
+
: hasLogs
|
|
208
|
+
? "your local agent logs (estimated at API-equivalent rates)"
|
|
209
|
+
: "demo sample (illustrative)";
|
|
210
|
+
const lines = [
|
|
211
|
+
"AI Spend Analyst doctor",
|
|
212
|
+
`node version: ${process.version}`,
|
|
213
|
+
`cli version: ${await cliVersion()}`,
|
|
214
|
+
"local-first mode: enabled (no cloud upload, no telemetry)",
|
|
215
|
+
`path: ${rootPath}`,
|
|
216
|
+
`state directory: ${stateDir}`,
|
|
217
|
+
`state mode: ${stateMode}`,
|
|
218
|
+
`Claude Code logs: ${claudeFound ? "found" : "not found"}`,
|
|
219
|
+
`Codex logs: ${codexFound ? "found" : "not found"}`,
|
|
220
|
+
`provider env references: ${providerRefs.length > 0 ? providerRefs.join(", ") : "none detected"}`,
|
|
221
|
+
"redaction policy: secrets are never printed or persisted",
|
|
222
|
+
"plan check: available (subscription vs API-rate math)",
|
|
223
|
+
`data mode you'll get now: ${predictedMode}`,
|
|
224
|
+
warnings.length > 0 ? `launch warnings:\n${warnings.map((warning) => ` - ${warning}`).join("\n")}` : "launch warnings: none"
|
|
225
|
+
];
|
|
226
|
+
return ok(lines.join("\n"));
|
|
227
|
+
}
|
|
228
|
+
async function cliVersion() {
|
|
229
|
+
try {
|
|
230
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
231
|
+
const pkg = JSON.parse(await readFile(join(here, "..", "package.json"), "utf8"));
|
|
232
|
+
return pkg.version ?? "unknown";
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
return process.env.npm_package_version ?? "unknown";
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
async function resetCommand(args) {
|
|
239
|
+
const rootPath = resolve(args.path);
|
|
240
|
+
const stateDir = join(rootPath, ".ai-spend-agent");
|
|
241
|
+
// Clear derived spend state so a prior `scan --sample` (or stale provider
|
|
242
|
+
// sync) can never mask the next real local-log read. Leaves sources/audit.
|
|
243
|
+
const targets = ["spend.json", "mappings.json", "provider-records.json", "watch-latest.json", "watch-history.json"];
|
|
244
|
+
const removed = [];
|
|
245
|
+
for (const file of targets) {
|
|
246
|
+
try {
|
|
247
|
+
await rm(join(stateDir, file));
|
|
248
|
+
removed.push(file);
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
// File not present — nothing to clear for this target.
|
|
252
|
+
}
|
|
253
|
+
}
|
|
141
254
|
return ok([
|
|
142
|
-
"AI Spend Analyst
|
|
255
|
+
"AI Spend Analyst reset",
|
|
143
256
|
`path: ${rootPath}`,
|
|
144
|
-
"
|
|
145
|
-
"
|
|
146
|
-
"redaction policy: secrets are never printed",
|
|
147
|
-
`state directory: ${stateDir}`
|
|
257
|
+
removed.length > 0 ? `cleared: ${removed.join(", ")}` : "nothing to clear (no persisted spend state found)",
|
|
258
|
+
"next run will re-read your real local agent logs (or demo sample if none)."
|
|
148
259
|
].join("\n"));
|
|
149
260
|
}
|
|
150
261
|
async function initCommand(args) {
|
|
@@ -262,11 +373,14 @@ async function scanCommand(args) {
|
|
|
262
373
|
`discovery signals: ${discovery.signals.length}`,
|
|
263
374
|
`secrets detected: ${discovery.secretsDetected.length}`
|
|
264
375
|
];
|
|
376
|
+
if (discovery.unreadablePaths.length > 0) {
|
|
377
|
+
lines.push(`unreadable paths skipped: ${discovery.unreadablePaths.length} (permissions/broken links — scan continued)`);
|
|
378
|
+
}
|
|
265
379
|
if (args.sample) {
|
|
266
380
|
const records = await loadSampleUsageData();
|
|
267
381
|
const summary = analyzeSpend(records);
|
|
268
382
|
const mappings = attributeUsageRecords(records);
|
|
269
|
-
await writeLocalSpendState(stateDir, records, summary, mappings);
|
|
383
|
+
await writeLocalSpendState(stateDir, records, summary, mappings, "sample");
|
|
270
384
|
lines.push(`sample records: ${records.length}`);
|
|
271
385
|
lines.push(`total spend: $${summary.totalUsd.toFixed(2)}`);
|
|
272
386
|
lines.push(`attribution mappings: ${mappings.length}`);
|
|
@@ -311,15 +425,22 @@ async function watchCommand(args) {
|
|
|
311
425
|
deltaHeadline,
|
|
312
426
|
plainEnglish
|
|
313
427
|
].join("\n");
|
|
314
|
-
collected.push(stamped);
|
|
315
428
|
iteration += 1;
|
|
316
429
|
const moreToGo = unbounded || iteration < cycles;
|
|
317
|
-
|
|
430
|
+
const streaming = process.env.NODE_ENV !== "test";
|
|
431
|
+
if (moreToGo && streaming) {
|
|
432
|
+
// Stream interim cycles live, but do NOT also include them in the returned
|
|
433
|
+
// output — doing both double-printed the baseline before the no-change
|
|
434
|
+
// cycle. Streamed cycles are shown once here; the final cycle is returned.
|
|
318
435
|
// eslint-disable-next-line no-console
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
436
|
+
console.log(stamped);
|
|
437
|
+
// eslint-disable-next-line no-console
|
|
438
|
+
console.log(`\n[watch] sleeping ${intervalSeconds}s until next cycle. Press Ctrl+C to stop.\n`);
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
collected.push(stamped);
|
|
442
|
+
}
|
|
443
|
+
if (moreToGo) {
|
|
323
444
|
await sleep(intervalSeconds * 1000);
|
|
324
445
|
}
|
|
325
446
|
}
|
|
@@ -327,18 +448,24 @@ async function watchCommand(args) {
|
|
|
327
448
|
}
|
|
328
449
|
async function runWatchCycle(stateDir, args) {
|
|
329
450
|
let records;
|
|
451
|
+
let mode;
|
|
330
452
|
if (args.sample) {
|
|
331
453
|
records = await loadSampleUsageData();
|
|
454
|
+
mode = "sample";
|
|
332
455
|
}
|
|
333
456
|
else {
|
|
334
457
|
records = await loadLiveRecords(stateDir);
|
|
335
|
-
if (records.length
|
|
458
|
+
if (records.length > 0) {
|
|
459
|
+
mode = "connected_provider";
|
|
460
|
+
}
|
|
461
|
+
else {
|
|
336
462
|
records = await loadSampleUsageData();
|
|
463
|
+
mode = "sample";
|
|
337
464
|
}
|
|
338
465
|
}
|
|
339
466
|
const summary = analyzeSpend(records);
|
|
340
467
|
const mappings = attributeUsageRecords(records);
|
|
341
|
-
await writeLocalSpendState(stateDir, records, summary, mappings);
|
|
468
|
+
await writeLocalSpendState(stateDir, records, summary, mappings, mode);
|
|
342
469
|
const snapshot = {
|
|
343
470
|
capturedAt: new Date().toISOString(),
|
|
344
471
|
totalUsd: summary.totalUsd,
|
|
@@ -577,7 +704,7 @@ async function syncProviderCommand(args) {
|
|
|
577
704
|
records: result.records,
|
|
578
705
|
qa: result.qa
|
|
579
706
|
});
|
|
580
|
-
await writeLocalSpendState(stateDir, result.records, summary, mappings);
|
|
707
|
+
await writeLocalSpendState(stateDir, result.records, summary, mappings, "connected_provider");
|
|
581
708
|
await appendAuditEvent(stateDir, {
|
|
582
709
|
timestamp: result.fetchedAt,
|
|
583
710
|
action: "source_scanned",
|
|
@@ -671,23 +798,36 @@ async function reportCommand(args) {
|
|
|
671
798
|
};
|
|
672
799
|
}
|
|
673
800
|
}
|
|
801
|
+
/**
|
|
802
|
+
* Resolve where the AI Receipt SVG is written so it is always shareable:
|
|
803
|
+
* no --out -> ai-receipt.svg in cwd; --out a directory -> ai-spend-receipt.svg
|
|
804
|
+
* inside it; --out with no extension -> append .svg; explicit .svg honored.
|
|
805
|
+
*/
|
|
806
|
+
async function resolveReceiptPath(rootPath, out) {
|
|
807
|
+
if (!out)
|
|
808
|
+
return join(rootPath, "ai-receipt.svg");
|
|
809
|
+
const resolved = resolve(rootPath, out);
|
|
810
|
+
const isDir = await stat(resolved).then((entry) => entry.isDirectory()).catch(() => false);
|
|
811
|
+
if (isDir)
|
|
812
|
+
return join(resolved, "ai-spend-receipt.svg");
|
|
813
|
+
return extname(resolved) ? resolved : `${resolved}.svg`;
|
|
814
|
+
}
|
|
674
815
|
async function reportCardCommand(args) {
|
|
675
816
|
const rootPath = resolve(args.path);
|
|
676
|
-
|
|
677
|
-
if (args.sample) {
|
|
678
|
-
records = await loadSampleUsageData();
|
|
679
|
-
}
|
|
680
|
-
else {
|
|
681
|
-
const local = await readOptionalLocalSpend(rootPath);
|
|
682
|
-
records = local && local.length > 0 ? local : await loadSampleUsageData();
|
|
683
|
-
}
|
|
817
|
+
const { records, mode } = await loadInstantReadData(args);
|
|
684
818
|
const summary = analyzeSpend(records);
|
|
685
|
-
const outPath =
|
|
819
|
+
const outPath = await resolveReceiptPath(rootPath, args.out);
|
|
686
820
|
await mkdir(dirname(outPath), { recursive: true });
|
|
687
821
|
await writeFile(outPath, generateReportCardSvg({ summary, records }), "utf8");
|
|
822
|
+
const dataLine = mode === "demo"
|
|
823
|
+
? "data: DEMO sample data — run without --sample on a machine with Claude Code/Codex logs for your own numbers."
|
|
824
|
+
: mode === "local-logs"
|
|
825
|
+
? "data: local Claude Code/Codex logs priced at API-equivalent rates."
|
|
826
|
+
: "data: connected local spend state.";
|
|
688
827
|
return ok([
|
|
689
|
-
"
|
|
690
|
-
`
|
|
828
|
+
"Your AI Receipt — a shareable, redacted spend card (no client/project/user names).",
|
|
829
|
+
`receipt: ${outPath}`,
|
|
830
|
+
dataLine,
|
|
691
831
|
"",
|
|
692
832
|
"Caption to share:",
|
|
693
833
|
generateReportCardCaption({ summary, records }),
|
|
@@ -732,6 +872,10 @@ async function buildReportInput(stateDir, rootPath) {
|
|
|
732
872
|
]);
|
|
733
873
|
return {
|
|
734
874
|
summary: spendState.summary,
|
|
875
|
+
// Evidence ledger is built from the SAME records as the confidence
|
|
876
|
+
// breakdown so the two sections can never contradict each other.
|
|
877
|
+
allRecords: spendState.records ?? [],
|
|
878
|
+
dataMode: spendState.mode,
|
|
735
879
|
discovery,
|
|
736
880
|
mappings,
|
|
737
881
|
sourceRegistry,
|
|
@@ -782,6 +926,10 @@ function parseArgs(argv) {
|
|
|
782
926
|
parsed.noColor = true;
|
|
783
927
|
continue;
|
|
784
928
|
}
|
|
929
|
+
if (arg === "--ignore-state") {
|
|
930
|
+
parsed.ignoreState = true;
|
|
931
|
+
continue;
|
|
932
|
+
}
|
|
785
933
|
if (arg === "--group-by") {
|
|
786
934
|
const next = rest[index + 1];
|
|
787
935
|
if (isGroupByDimension(next)) {
|
|
@@ -897,7 +1045,11 @@ function parseArgs(argv) {
|
|
|
897
1045
|
if (arg === "--confidence") {
|
|
898
1046
|
const next = rest[index + 1];
|
|
899
1047
|
if (next) {
|
|
900
|
-
|
|
1048
|
+
const value = Number(next);
|
|
1049
|
+
// Reject NaN/out-of-range instead of rendering "NaN% confidence".
|
|
1050
|
+
if (Number.isFinite(value) && value >= 0 && value <= 1) {
|
|
1051
|
+
parsed.confidence = value;
|
|
1052
|
+
}
|
|
901
1053
|
index += 1;
|
|
902
1054
|
}
|
|
903
1055
|
continue;
|
|
@@ -958,14 +1110,6 @@ function parseArgs(argv) {
|
|
|
958
1110
|
}
|
|
959
1111
|
continue;
|
|
960
1112
|
}
|
|
961
|
-
if (arg === "--group-by") {
|
|
962
|
-
const next = rest[index + 1];
|
|
963
|
-
if (isGroupByDimension(next)) {
|
|
964
|
-
parsed.groupBy = next;
|
|
965
|
-
index += 1;
|
|
966
|
-
}
|
|
967
|
-
continue;
|
|
968
|
-
}
|
|
969
1113
|
if (arg === "--interval") {
|
|
970
1114
|
const next = rest[index + 1];
|
|
971
1115
|
if (next) {
|
|
@@ -986,24 +1130,16 @@ function parseArgs(argv) {
|
|
|
986
1130
|
return parsed;
|
|
987
1131
|
}
|
|
988
1132
|
function sanitizeSecretishError(message, authReference) {
|
|
989
|
-
|
|
1133
|
+
// Core's redactSecrets covers sk-*/ghp_*/github_pat_*/JWT/AIza/xox/AKIA and
|
|
1134
|
+
// secret-suffixed env assignments; the sk- fallback keeps short keys covered.
|
|
1135
|
+
let sanitized = redactSecrets(message).replace(/sk-[A-Za-z0-9_-]+/g, "[REDACTED]");
|
|
990
1136
|
if (authReference && !authReference.startsWith("env:")) {
|
|
991
1137
|
sanitized = sanitized.split(authReference).join("[REDACTED]");
|
|
992
1138
|
}
|
|
993
1139
|
return sanitized;
|
|
994
1140
|
}
|
|
995
|
-
function
|
|
996
|
-
|
|
997
|
-
if (rootPath === homePath) {
|
|
998
|
-
return "the home directory is too broad for V0 approved-source scanning";
|
|
999
|
-
}
|
|
1000
|
-
if (rootPath === "/") {
|
|
1001
|
-
return "the filesystem root is too broad for V0 approved-source scanning";
|
|
1002
|
-
}
|
|
1003
|
-
return undefined;
|
|
1004
|
-
}
|
|
1005
|
-
async function writeLocalSpendState(stateDir, records, summary, mappings) {
|
|
1006
|
-
await writeJson(join(stateDir, "spend.json"), { records, summary });
|
|
1141
|
+
async function writeLocalSpendState(stateDir, records, summary, mappings, mode) {
|
|
1142
|
+
await writeJson(join(stateDir, "spend.json"), { mode, records, summary });
|
|
1007
1143
|
await writeJson(join(stateDir, "mappings.json"), mappings);
|
|
1008
1144
|
}
|
|
1009
1145
|
async function readSourceRegistry(stateDir, rootPath) {
|
|
@@ -1042,7 +1178,9 @@ async function appendAuditEvent(stateDir, event) {
|
|
|
1042
1178
|
catch {
|
|
1043
1179
|
// Create a fresh local-only audit log if init has not run yet.
|
|
1044
1180
|
}
|
|
1045
|
-
|
|
1181
|
+
// Cap like watch-history: an unbounded log under cron watch grows forever
|
|
1182
|
+
// and makes every append an ever-larger rewrite.
|
|
1183
|
+
await writeJson(join(stateDir, "audit-log.json"), createScanAuditLog([...auditLog.events, event].slice(-500)));
|
|
1046
1184
|
}
|
|
1047
1185
|
async function readJson(path) {
|
|
1048
1186
|
return JSON.parse(await readFile(path, "utf8"));
|
|
@@ -1082,13 +1220,15 @@ function helpText() {
|
|
|
1082
1220
|
"",
|
|
1083
1221
|
"Other commands:",
|
|
1084
1222
|
" init [--path <dir>] Initialize local state",
|
|
1085
|
-
" doctor
|
|
1223
|
+
" doctor Launch-grade diagnostics: data mode, logs found, provider keys, warnings",
|
|
1224
|
+
" reset [--path <dir>] Clear persisted spend state (so sample state can't mask real logs)",
|
|
1225
|
+
" --ignore-state On the default/quickstart run, ignore persisted spend.json for this run",
|
|
1086
1226
|
" scan [--path <dir>] Scan a local workspace for AI usage signals",
|
|
1087
1227
|
" scan --sample Include deterministic sample spend analysis",
|
|
1088
1228
|
" quickstart [--sample] Plain-English 90-second readout (alias of the default run)",
|
|
1089
1229
|
" [--group-by source|model|client|project|agent|user|workspace|apiKey] Default: model",
|
|
1090
1230
|
" report [--out <name>] Generate local Markdown and HTML reports",
|
|
1091
|
-
" report-card [--out f.svg] Write a redacted, shareable SVG
|
|
1231
|
+
" report-card [--out f.svg] Write your AI Receipt — a redacted, shareable SVG + caption",
|
|
1092
1232
|
" apply-artifact Generate coding prompt, action plan, policy/config, verification, demo package",
|
|
1093
1233
|
"",
|
|
1094
1234
|
"Cron (production watch): add a crontab entry such as:",
|
|
@@ -1113,6 +1253,14 @@ const invokedAsMain = (() => {
|
|
|
1113
1253
|
}
|
|
1114
1254
|
})();
|
|
1115
1255
|
if (invokedAsMain) {
|
|
1256
|
+
// Fail with a clear message on old Node instead of a cryptic module/syntax
|
|
1257
|
+
// error deep in a dependency. npm warns on engines but never blocks install.
|
|
1258
|
+
const major = Number(process.versions.node.split(".")[0]);
|
|
1259
|
+
if (Number.isFinite(major) && major < 22) {
|
|
1260
|
+
console.error(`ai-spend-agent needs Node 22 or newer (you have ${process.versions.node}).\n` +
|
|
1261
|
+
"Upgrade Node, then run: npx ai-spend-agent");
|
|
1262
|
+
process.exit(1);
|
|
1263
|
+
}
|
|
1116
1264
|
const argv = process.argv.slice(2);
|
|
1117
1265
|
const command = argv[0];
|
|
1118
1266
|
const isInstantDemo = !command || command === "quickstart" || command === "demo";
|
|
@@ -1132,6 +1280,20 @@ if (invokedAsMain) {
|
|
|
1132
1280
|
try {
|
|
1133
1281
|
result = await runCli(argv);
|
|
1134
1282
|
}
|
|
1283
|
+
catch (error) {
|
|
1284
|
+
// The product's error voice, never a raw stack trace — and never an
|
|
1285
|
+
// un-redacted secret from a provider payload or file path.
|
|
1286
|
+
const message = sanitizeSecretishError(error instanceof Error ? error.message : String(error));
|
|
1287
|
+
result = {
|
|
1288
|
+
exitCode: 1,
|
|
1289
|
+
stdout: "",
|
|
1290
|
+
stderr: [
|
|
1291
|
+
`ai-spend-agent hit an unexpected error: ${message}`,
|
|
1292
|
+
"Nothing was uploaded; local state is unchanged.",
|
|
1293
|
+
"Try `ai-spend-agent doctor` for diagnostics, or open an issue: https://github.com/futurastudio/ai-spend-agent/issues"
|
|
1294
|
+
].join("\n")
|
|
1295
|
+
};
|
|
1296
|
+
}
|
|
1135
1297
|
finally {
|
|
1136
1298
|
spinner?.stop();
|
|
1137
1299
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-spend-agent",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Your AI spend in one view, in 90 seconds
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"description": "Your AI spend in one view, in 90 seconds — local-first CLI for OpenAI, Anthropic, Cursor, Copilot + Claude Code/Codex session logs, with a ranked savings cut list, and flags the tools your agent loads but never uses (dead context).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -11,15 +11,16 @@
|
|
|
11
11
|
"files": [
|
|
12
12
|
"dist",
|
|
13
13
|
"!dist/**/*.test.*",
|
|
14
|
-
"!dist/**/*.map"
|
|
14
|
+
"!dist/**/*.map",
|
|
15
|
+
"!dist/**/*.tsbuildinfo"
|
|
15
16
|
],
|
|
16
17
|
"license": "MIT",
|
|
17
18
|
"repository": {
|
|
18
19
|
"type": "git",
|
|
19
|
-
"url": "git+https://github.com/futurastudio/agent
|
|
20
|
+
"url": "git+https://github.com/futurastudio/ai-spend-agent.git",
|
|
20
21
|
"directory": "packages/cli"
|
|
21
22
|
},
|
|
22
|
-
"homepage": "https://github.com/futurastudio/agent
|
|
23
|
+
"homepage": "https://github.com/futurastudio/ai-spend-agent#readme",
|
|
23
24
|
"keywords": [
|
|
24
25
|
"ai",
|
|
25
26
|
"spend",
|
|
@@ -34,19 +35,22 @@
|
|
|
34
35
|
"llm",
|
|
35
36
|
"token",
|
|
36
37
|
"billing",
|
|
37
|
-
"cli"
|
|
38
|
+
"cli",
|
|
39
|
+
"mcp",
|
|
40
|
+
"claude-code-skills",
|
|
41
|
+
"dead-context"
|
|
38
42
|
],
|
|
39
43
|
"engines": {
|
|
40
44
|
"node": ">=22"
|
|
41
45
|
},
|
|
42
46
|
"scripts": {
|
|
43
47
|
"build": "tsc -b",
|
|
44
|
-
"typecheck": "tsc -b --pretty false"
|
|
48
|
+
"typecheck": "tsc -b --pretty false",
|
|
49
|
+
"prepack": "npm run build"
|
|
45
50
|
},
|
|
46
51
|
"dependencies": {
|
|
47
|
-
"@agent-finops/core": "0.1.
|
|
48
|
-
"@agent-finops/report": "0.1.
|
|
49
|
-
"picocolors": "^1.1.1",
|
|
52
|
+
"@agent-finops/core": "0.1.3",
|
|
53
|
+
"@agent-finops/report": "0.1.3",
|
|
50
54
|
"yocto-spinner": "^1.2.0"
|
|
51
55
|
}
|
|
52
56
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/@vitest/pretty-format/dist/index.d.ts","../../../node_modules/@vitest/utils/dist/display.d.ts","../../../node_modules/@vitest/utils/dist/types.d.ts","../../../node_modules/@vitest/utils/dist/helpers.d.ts","../../../node_modules/@vitest/utils/dist/timers.d.ts","../../../node_modules/@vitest/utils/dist/index.d.ts","../../../node_modules/@vitest/utils/dist/types.d-bcelap-c.d.ts","../../../node_modules/@vitest/utils/dist/diff.d.ts","../../../node_modules/@vitest/runner/dist/tasks.d-deyaimiu.d.ts","../../../node_modules/@vitest/runner/dist/index.d.ts","../../../node_modules/vitest/dist/chunks/traces.d.d2t_r8rx.d.ts","../../../node_modules/vite/types/hmrpayload.d.ts","../../../node_modules/vite/dist/node/chunks/modulerunnertransport.d.ts","../../../node_modules/vite/types/customevent.d.ts","../../../node_modules/vite/types/hot.d.ts","../../../node_modules/vite/dist/node/module-runner.d.ts","../../../node_modules/@vitest/snapshot/dist/environment.d-dojxxzv9.d.ts","../../../node_modules/@vitest/snapshot/dist/rawsnapshot.d-d_x3-62x.d.ts","../../../node_modules/@vitest/snapshot/dist/index.d.ts","../../../node_modules/vitest/dist/chunks/config.d.a1h_y6jt.d.ts","../../../node_modules/vitest/dist/chunks/environment.d.crsxczp1.d.ts","../../../node_modules/vitest/dist/chunks/rpc.d.b_8spu0w.d.ts","../../../node_modules/vitest/dist/chunks/worker.d.zphpo4yb.d.ts","../../../node_modules/vitest/dist/chunks/browser.d.bcoexmfg.d.ts","../../../node_modules/@vitest/spy/optional-types.d.ts","../../../node_modules/@vitest/spy/dist/index.d.ts","../../../node_modules/tinyrainbow/dist/index.d.ts","../../../node_modules/@standard-schema/spec/dist/index.d.ts","../../../node_modules/@types/deep-eql/index.d.ts","../../../node_modules/assertion-error/index.d.ts","../../../node_modules/@types/chai/index.d.ts","../../../node_modules/@vitest/expect/dist/index.d.ts","../../../node_modules/@vitest/runner/dist/utils.d.ts","../../../node_modules/tinybench/dist/index.d.ts","../../../node_modules/vitest/dist/chunks/benchmark.d.daahlpsq.d.ts","../../../node_modules/vitest/dist/chunks/global.d.dvssrdq5.d.ts","../../../node_modules/vitest/optional-runtime-types.d.ts","../../../node_modules/@vitest/mocker/dist/types.d-bji5eawu.d.ts","../../../node_modules/@vitest/mocker/dist/index.d-b41z0auw.d.ts","../../../node_modules/@vitest/mocker/dist/index.d.ts","../../../node_modules/vitest/dist/chunks/suite.d.udjtyagw.d.ts","../../../node_modules/vitest/dist/chunks/evaluatedmodules.d.bxj5omdx.d.ts","../../../node_modules/vitest/dist/runners.d.ts","../../../node_modules/expect-type/dist/utils.d.ts","../../../node_modules/expect-type/dist/overloads.d.ts","../../../node_modules/expect-type/dist/branding.d.ts","../../../node_modules/expect-type/dist/messages.d.ts","../../../node_modules/expect-type/dist/index.d.ts","../../../node_modules/vitest/dist/index.d.ts","../../../node_modules/zod/v4/core/json-schema.d.cts","../../../node_modules/zod/v4/core/standard-schema.d.cts","../../../node_modules/zod/v4/core/registries.d.cts","../../../node_modules/zod/v4/core/to-json-schema.d.cts","../../../node_modules/zod/v4/core/util.d.cts","../../../node_modules/zod/v4/core/versions.d.cts","../../../node_modules/zod/v4/core/schemas.d.cts","../../../node_modules/zod/v4/core/checks.d.cts","../../../node_modules/zod/v4/core/errors.d.cts","../../../node_modules/zod/v4/core/core.d.cts","../../../node_modules/zod/v4/core/parse.d.cts","../../../node_modules/zod/v4/core/regexes.d.cts","../../../node_modules/zod/v4/locales/ar.d.cts","../../../node_modules/zod/v4/locales/az.d.cts","../../../node_modules/zod/v4/locales/be.d.cts","../../../node_modules/zod/v4/locales/bg.d.cts","../../../node_modules/zod/v4/locales/ca.d.cts","../../../node_modules/zod/v4/locales/cs.d.cts","../../../node_modules/zod/v4/locales/da.d.cts","../../../node_modules/zod/v4/locales/de.d.cts","../../../node_modules/zod/v4/locales/el.d.cts","../../../node_modules/zod/v4/locales/en.d.cts","../../../node_modules/zod/v4/locales/eo.d.cts","../../../node_modules/zod/v4/locales/es.d.cts","../../../node_modules/zod/v4/locales/fa.d.cts","../../../node_modules/zod/v4/locales/fi.d.cts","../../../node_modules/zod/v4/locales/fr.d.cts","../../../node_modules/zod/v4/locales/fr-ca.d.cts","../../../node_modules/zod/v4/locales/he.d.cts","../../../node_modules/zod/v4/locales/hr.d.cts","../../../node_modules/zod/v4/locales/hu.d.cts","../../../node_modules/zod/v4/locales/hy.d.cts","../../../node_modules/zod/v4/locales/id.d.cts","../../../node_modules/zod/v4/locales/is.d.cts","../../../node_modules/zod/v4/locales/it.d.cts","../../../node_modules/zod/v4/locales/ja.d.cts","../../../node_modules/zod/v4/locales/ka.d.cts","../../../node_modules/zod/v4/locales/kh.d.cts","../../../node_modules/zod/v4/locales/km.d.cts","../../../node_modules/zod/v4/locales/ko.d.cts","../../../node_modules/zod/v4/locales/lt.d.cts","../../../node_modules/zod/v4/locales/mk.d.cts","../../../node_modules/zod/v4/locales/ms.d.cts","../../../node_modules/zod/v4/locales/nl.d.cts","../../../node_modules/zod/v4/locales/no.d.cts","../../../node_modules/zod/v4/locales/ota.d.cts","../../../node_modules/zod/v4/locales/ps.d.cts","../../../node_modules/zod/v4/locales/pl.d.cts","../../../node_modules/zod/v4/locales/pt.d.cts","../../../node_modules/zod/v4/locales/ro.d.cts","../../../node_modules/zod/v4/locales/ru.d.cts","../../../node_modules/zod/v4/locales/sl.d.cts","../../../node_modules/zod/v4/locales/sv.d.cts","../../../node_modules/zod/v4/locales/ta.d.cts","../../../node_modules/zod/v4/locales/th.d.cts","../../../node_modules/zod/v4/locales/tr.d.cts","../../../node_modules/zod/v4/locales/ua.d.cts","../../../node_modules/zod/v4/locales/uk.d.cts","../../../node_modules/zod/v4/locales/ur.d.cts","../../../node_modules/zod/v4/locales/uz.d.cts","../../../node_modules/zod/v4/locales/vi.d.cts","../../../node_modules/zod/v4/locales/zh-cn.d.cts","../../../node_modules/zod/v4/locales/zh-tw.d.cts","../../../node_modules/zod/v4/locales/yo.d.cts","../../../node_modules/zod/v4/locales/index.d.cts","../../../node_modules/zod/v4/core/doc.d.cts","../../../node_modules/zod/v4/core/api.d.cts","../../../node_modules/zod/v4/core/json-schema-processors.d.cts","../../../node_modules/zod/v4/core/json-schema-generator.d.cts","../../../node_modules/zod/v4/core/index.d.cts","../../../node_modules/zod/v4/classic/errors.d.cts","../../../node_modules/zod/v4/classic/parse.d.cts","../../../node_modules/zod/v4/classic/schemas.d.cts","../../../node_modules/zod/v4/classic/checks.d.cts","../../../node_modules/zod/v4/classic/compat.d.cts","../../../node_modules/zod/v4/classic/from-json-schema.d.cts","../../../node_modules/zod/v4/classic/iso.d.cts","../../../node_modules/zod/v4/classic/coerce.d.cts","../../../node_modules/zod/v4/classic/external.d.cts","../../../node_modules/zod/index.d.cts","../../core/dist/schema.d.ts","../../core/dist/analyze.d.ts","../../core/dist/attribution.d.ts","../../core/dist/credentialdetection.d.ts","../../core/dist/cutlist.d.ts","../../core/dist/discovery.d.ts","../../core/dist/insights.d.ts","../../core/dist/modelpricing.d.ts","../../core/dist/localagentlogs.d.ts","../../core/dist/planmath.d.ts","../../core/dist/sampledata.d.ts","../../core/dist/sourceregistry.d.ts","../../core/dist/providerconnectors.d.ts","../../core/dist/index.d.ts","../../report/dist/terminal.d.ts","../../report/dist/reportcard.d.ts","../../report/dist/index.d.ts","../../../node_modules/yocto-spinner/index.d.ts","../src/index.ts","../src/index.test.ts","../../../node_modules/@types/estree/index.d.ts","../../../node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/index.d.ts","../../../../node_modules/@types/connect/index.d.ts","../../../../node_modules/@types/estree/index.d.ts","../../../../node_modules/@types/json-schema/index.d.ts","../../../../node_modules/@types/eslint/use-at-your-own-risk.d.ts","../../../../node_modules/@types/eslint/index.d.ts","../../../../node_modules/@types/eslint-scope/index.d.ts","../../../../node_modules/@types/mysql/index.d.ts","../../../../node_modules/pg-types/index.d.ts","../../../../node_modules/pg-protocol/dist/messages.d.ts","../../../../node_modules/pg-protocol/dist/serializer.d.ts","../../../../node_modules/pg-protocol/dist/parser.d.ts","../../../../node_modules/pg-protocol/dist/index.d.ts","../../../../node_modules/@types/pg/lib/type-overrides.d.ts","../../../../node_modules/@types/pg/index.d.ts","../../../../node_modules/@types/pg-pool/index.d.ts","../../../../node_modules/@types/phoenix/index.d.ts","../../../../node_modules/@types/tedious/index.d.ts","../../../../node_modules/@types/ws/index.d.ts"],"fileIdsList":[[213,261,278,279],[86,87,213,261,278,279],[213,258,259,261,278,279],[213,260,261,278,279],[261,278,279],[213,261,266,278,279,296],[213,261,262,267,272,278,279,281,293,304],[213,261,262,263,272,278,279,281],[208,209,210,213,261,278,279],[213,261,264,278,279,305],[213,261,265,266,273,278,279,282],[213,261,266,278,279,293,301],[213,261,267,269,272,278,279,281],[213,260,261,268,278,279],[213,261,269,270,278,279],[213,261,271,272,278,279],[213,260,261,272,278,279],[213,261,272,273,274,278,279,293,304],[213,261,272,273,274,278,279,288,293,296],[213,254,261,269,272,275,278,279,281,293,304],[213,261,272,273,275,276,278,279,281,293,301,304],[213,261,275,277,278,279,293,301,304],[211,212,213,214,215,216,217,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310],[213,261,272,278,279],[213,261,278,279,280,304],[213,261,269,272,278,279,281,293],[213,261,278,279,282],[213,261,278,279,283],[213,260,261,278,279,284],[213,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310],[213,261,278,279,286],[213,261,278,279,287],[213,261,272,278,279,288,289],[213,261,278,279,288,290,305,307],[213,261,273,278,279],[213,261,272,278,279,293,294,296],[213,261,278,279,295,296],[213,261,278,279,293,294],[213,261,278,279,296],[213,261,278,279,297],[213,258,261,278,279,293,298,304],[213,261,272,278,279,299,300],[213,261,278,279,299,300],[213,261,266,278,279,281,293,301],[213,261,278,279,302],[213,261,278,279,281,303],[213,261,275,278,279,287,304],[213,261,266,278,279,305],[213,261,278,279,293,306],[213,261,278,279,280,307],[213,261,278,279,308],[213,254,261,278,279],[213,254,261,272,274,278,279,284,293,296,304,306,307,309],[213,261,278,279,293,310],[59,65,83,84,85,88,213,261,278,279],[95,213,261,278,279],[95,96,213,261,278,279],[63,65,66,213,261,278,279],[63,65,213,261,278,279],[63,213,261,278,279],[58,63,74,75,213,261,278,279],[58,63,74,213,261,278,279],[82,213,261,278,279],[58,64,213,261,278,279],[58,213,261,278,279],[60,213,261,278,279],[58,59,60,61,62,213,261,278,279],[101,102,213,261,278,279],[101,102,103,104,213,261,278,279],[101,103,213,261,278,279],[101,213,261,278,279],[213,226,230,261,278,279,304],[213,226,261,278,279,293,304],[213,221,261,278,279],[213,223,226,261,278,279,301,304],[213,261,278,279,281,301],[213,261,278,279,311],[213,221,261,278,279,311],[213,223,226,261,278,279,281,304],[213,218,219,222,225,261,272,278,279,293,304],[213,226,233,261,278,279],[213,218,224,261,278,279],[213,226,247,248,261,278,279],[213,222,226,261,278,279,296,304,311],[213,247,261,278,279,311],[213,220,221,261,278,279,311],[213,226,261,278,279],[213,220,221,222,223,224,225,226,227,228,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,248,249,250,251,252,253,261,278,279],[213,226,241,261,278,279],[213,226,233,234,261,278,279],[213,224,226,234,235,261,278,279],[213,225,261,278,279],[213,218,221,226,261,278,279],[213,226,230,234,235,261,278,279],[213,230,261,278,279],[213,224,226,229,261,278,279,304],[213,218,223,226,233,261,278,279],[213,261,278,279,293],[213,221,226,247,261,278,279,309,311],[69,213,261,278,279],[69,70,71,72,213,261,278,279],[71,213,261,278,279],[67,90,91,93,213,261,278,279],[67,68,80,93,213,261,278,279],[58,65,67,68,76,93,213,261,278,279],[73,213,261,278,279],[58,67,68,76,89,92,93,213,261,278,279],[67,68,73,76,93,213,261,278,279],[67,90,91,92,93,213,261,278,279],[67,73,77,78,79,93,213,261,278,279],[58,63,65,67,68,73,76,77,78,79,80,81,83,89,90,91,92,93,94,97,98,99,100,105,213,261,278,279],[58,65,67,68,76,77,90,91,92,93,98,213,261,278,279],[185,213,261,278,279],[176,213,261,278,279],[176,179,213,261,278,279],[111,171,174,176,177,178,179,180,181,182,183,184,213,261,278,279],[107,109,179,213,261,278,279],[176,177,213,261,278,279],[108,176,178,213,261,278,279],[109,111,113,114,115,116,213,261,278,279],[111,113,115,116,213,261,278,279],[111,113,115,213,261,278,279],[108,111,113,114,116,213,261,278,279],[107,109,110,111,112,113,114,115,116,117,118,171,172,173,174,175,213,261,278,279],[107,109,110,113,213,261,278,279],[109,110,113,213,261,278,279],[113,116,213,261,278,279],[107,108,110,111,112,114,115,116,213,261,278,279],[107,108,109,113,176,213,261,278,279],[113,114,115,116,213,261,278,279],[115,213,261,278,279],[119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,213,261,278,279],[106,205,213,261,274,278,279,282,283],[200,203,204,213,261,273,274,278,279,282,283,304],[187,213,261,278,279],[187,188,189,190,191,192,193,194,195,196,197,198,199,213,261,278,279],[187,194,213,261,278,279],[187,198,213,261,278,279],[186,213,261,278,279],[192,213,261,278,279],[200,201,202,213,261,278,279],[200,213,261,278,279],[213,261,275,278,279,311],[213,261,278,279,313,316],[213,261,278,279,313,314,315],[213,261,278,279,316],[213,261,272,278,279,293,301,311],[213,261,278,279,325],[213,261,272,278,279,293,301,311,319,320,323,324,325],[213,261,272,278,279,301,311],[213,261,272,275,277,278,279,281,293,301,304,310,311],[213,261,278,279,311,320,321,322],[213,261,278,279,293,311,320]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"49ab4f1d153a252779958fc87b700743d32b5ffa42addd70ae23ad3f429daa5c","impliedFormat":99},{"version":"53cf4076f42b29b8d411259d168d51b3a0274c42c8814e5b44dfa8803a35d4fc","impliedFormat":99},{"version":"a39461ee1f27cf3e6cfd63d21045713d26d521da55ea4d8efccb705f689e6dbb","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"de4a612aa8f1704af486f701e21993c786ba7d8cfed55fffa6684026aea2346e","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"8887e70871f697fa42ad7cdf32168db60ec2d6760c173c97973e35377fe5d83b","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"2b39c6cf59088713babbfc3e20ee85f1375d40e66953156fa658346b8346f24f","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"835fb2909ce458740fb4a49fc61709896c6864f5ce3db7f0a88f06c720d74d02","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"ead8e39c2e11891f286b06ae2aa71f208b1802661fcdb2425cffa4f494a68854","impliedFormat":1},{"version":"40ba6c32eb732a09e4446ade5cb6ad0c147f186f9c9dc6878b90b4418ad9f6ea","impliedFormat":1},{"version":"fdd814741843f85c98281522c58f5a646590ba9019fad2efaa95987655e0611b","impliedFormat":1},{"version":"c78aff4fb58b28b8f642d5095fc7eeb79f00e652a67caa19693af1adabb833c9","impliedFormat":1},{"version":"f80a08ced8818dc99359c0acd5b3f12762e1ce53758007759b0d4e503cbf4a5e","impliedFormat":1},{"version":"37935fa7564bcc6e0bc845b766a24391098d26f7c8245d6e8ab37bc016816e94","impliedFormat":1},{"version":"68add36d9632bc096d7245d24d6b0b8ad5f125183016102a3dad4c9c2438ccb0","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"0f8a263f4c8595c8a07de52e3f3927640c44386c1aa2984de9eae50d75e613b2","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"346fffde7c32da87c2196eb7494422449dc2ca82d3b4e6bf55be1d1a33ffc2b0","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"8b5875e4958528042103fdd775e106a7f76bafc29709f0690df9a7d2241d52a7","impliedFormat":1},{"version":"2f67911e4bf4e0717dc2ded248ce2d5e4398d945ee13889a6852c1233ea41508","impliedFormat":1},{"version":"d8430c275b0f59417ea8e173cfb888a4477b430ec35b595bf734f3ec7a7d729f","impliedFormat":1},{"version":"69364df1c776372d7df1fb46a6cb3a6bf7f55e700f533a104e3f9d70a32bec18","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"aef26cf95593c8ace1c62c4724f9afac77bdfa756fb8a00613cd152117cb2f43","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"2316301dd223d31962d917999acf8e543e0119c5d24ec984c9f22cb23247160c","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"268fd6d9f2e807a39a6c5aa654b00f949feb63d3faa7dd0f9bba7dde9172159c","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},{"version":"a5194013944aca9b1d1c87feb83e17842d1eb9302b5c0c2aa48b0d7bf3de977e","impliedFormat":99},{"version":"91c63d7ab35dda5e1fc0f108ba63685182797caf49d73518888866589b76e65d","impliedFormat":99},{"version":"b189ba3ac9b702e1c1440aab535ff9735a8c5e1e76ceff32b3be1f71aa3e24ea","impliedFormat":99},{"version":"6d2081dc088d63c090a4e72fa74e9464f8293c2b2e2e214b33122bcc83102da3","impliedFormat":99},{"version":"ab2bc9b59dca990dc56855cf6b02950c0629513c284805a08322fbf31cd0e9f0","impliedFormat":99},{"version":"5f5c1a6af7f8a0f6277eac8ed511a649d2977f93035399ff8340e39f720d8f98","impliedFormat":99},{"version":"6f3bcde90a7a82c91e2757c732efdc0066af8c2843270120088cbeeb75458a82","impliedFormat":99},{"version":"2ac2da1e33b6e75fcdd4d3083ccdc80d655afc773c23fd287bb3e4c21aadc8bd","impliedFormat":99},{"version":"a007112612b57b38fda50dca4294ede7c6004add875baf63a4e8c2fc39bf1c41","impliedFormat":99},{"version":"60b9f82505847a344680b80eb6614c3b154e5f855c4c01f2edbc8c2eaf7fa05f","impliedFormat":99},{"version":"c0f42dc93ed28853879744e831c883c41b4489b09da29b84e9c3265665ad1f26","impliedFormat":99},{"version":"7b72f835f11156a4916bc91da9e39d2a3fe52672abdea58b5f5fb5e260ef792c","impliedFormat":99},{"version":"80b719b1cfc00209ef957ef5e1f41694df2cf69db0b2b6142255bcb3ea946969","impliedFormat":99},{"version":"4e85de715f019f09d5100da791d833d2a96ecec0834a53ad8a7b253c1e979e1e","impliedFormat":99},{"version":"e8d11186804572d5170adee928c9fefca0fb1734f640f54fbb2434ede3a9fc55","impliedFormat":99},{"version":"fd1547111267e602eed65ad064e0bcf67c7da724f7e437b860247f27742cbae4","impliedFormat":99},{"version":"60d298b0d0f73fddd5c8f4a39cd2474dd10a8b5c7376337d500f6a35a1ce5afd","impliedFormat":99},{"version":"8c110b8f14d668f4c466dab0c35937efe81d5c896fac03eb08e7e084b8dfdccc","impliedFormat":99},{"version":"fb443e75ee28f8fc744dd726c00c584801c0103dfa9ff8d4e941fc5d06afadff","signature":"57374c3aab19ab03882ad61d985ef3bbc870060fd9be9ba229ac5a042bda8b44","impliedFormat":99},{"version":"947b8185e66f0db647d41fde11ee973ad22574c7dbe709df4f7e8717dab241b4","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"751764bb94219b4ce8f5475dc35d3de2e432fea01a0c9610cd7f69ad05e398c6","impliedFormat":1},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"58647d85d0f722a1ce9de50955df60a7489f0593bf1a7015521efe901c06d770","impliedFormat":1},{"version":"73b5fa37db36eeac90c4d752e39586f1b57187400c4f5280fd05f16437287a45","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"80523c00b8544a2000ae0143e4a90a00b47f99823eb7926c1e03c494216fc363","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"746911b62b329587939560deb5c036aca48aece03147b021fa680223255d5183","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2b55d426ff2b9087485e52ac4bc7cfafe1dc420fc76dad926cd46526567c501a","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"4113fcb657953db88a125082f517a4b51083526a18765e90f2401a5dbb864d7e","impliedFormat":1},{"version":"f60e3e3060207ac982da13363181fd7ee4beecc19a7c569f0d6bb034331066c2","impliedFormat":1},{"version":"17230b34bb564a3a2e36f9d3985372ccab4ad1722df2c43f7c5c2b553f68e5db","impliedFormat":1},{"version":"6e5c9272f6b3783be7bdddaf207cccdb8e033be3d14c5beacc03ae9d27d50929","impliedFormat":1},{"version":"9b4f7ff9681448c72abe38ea8eefd7ffe0c3aefe495137f02012a08801373f71","impliedFormat":1},{"version":"0dfe35191a04e8f9dc7caeb9f52f2ee07402736563d12cbccd15fb5f31ac877f","impliedFormat":1},{"version":"798367363a3274220cbed839b883fe2f52ba7197b25e8cb2ac59c1e1fd8af6b7","impliedFormat":1},{"version":"6ded4be4f8a693d0c1646dfa2f1b6582e34b73c66ce334cb5e86c7bf8c2e52b7","impliedFormat":1},{"version":"b3a24e1c22dd4fde2ce413fb8244e5fa8773ffca88e8173c780845c9856aef73","impliedFormat":1},{"version":"f4ae5546352701fd6932fdd86419438bb51253e4627a44808489742035bac644","impliedFormat":1},{"version":"c130f9616a960edc892aa0eb7a8a59f33e662c561474ed092c43a955cdb91dab","impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1}],"root":[205,206],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":199,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"tsBuildInfoFile":"./tsconfig.tsbuildinfo"},"referencedMap":[[85,1],[88,2],[86,1],[207,1],[258,3],[259,3],[260,4],[213,5],[261,6],[262,7],[263,8],[208,1],[211,9],[209,1],[210,1],[264,10],[265,11],[266,12],[267,13],[268,14],[269,15],[270,15],[271,16],[272,17],[273,18],[274,19],[214,1],[212,1],[275,20],[276,21],[277,22],[311,23],[278,24],[279,1],[280,25],[281,26],[282,27],[283,28],[284,29],[285,30],[286,31],[287,32],[288,33],[289,33],[290,34],[291,1],[292,35],[293,36],[295,37],[294,38],[296,39],[297,40],[298,41],[299,42],[300,43],[301,44],[302,45],[303,46],[304,47],[305,48],[306,49],[307,50],[308,51],[215,1],[216,1],[217,1],[255,52],[256,1],[257,1],[309,53],[310,54],[89,55],[96,56],[97,57],[95,1],[58,1],[67,58],[66,59],[90,58],[74,60],[76,61],[75,62],[83,63],[82,1],[65,64],[59,65],[61,66],[63,67],[62,1],[64,65],[60,1],[87,1],[103,68],[105,69],[104,70],[102,71],[101,1],[91,1],[84,1],[56,1],[57,1],[11,1],[10,1],[2,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[3,1],[20,1],[21,1],[4,1],[22,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[8,1],[49,1],[46,1],[47,1],[48,1],[50,1],[9,1],[51,1],[52,1],[53,1],[55,1],[54,1],[1,1],[233,72],[243,73],[232,72],[253,74],[224,75],[223,76],[252,77],[246,78],[251,79],[226,80],[240,81],[225,82],[249,83],[221,84],[220,77],[250,85],[222,86],[227,87],[228,1],[231,87],[218,1],[254,88],[244,89],[235,90],[236,91],[238,92],[234,93],[237,94],[247,77],[229,95],[230,96],[239,97],[219,98],[242,89],[241,87],[245,1],[248,99],[70,100],[73,101],[71,100],[69,1],[72,102],[92,103],[81,104],[77,105],[78,60],[99,106],[93,107],[79,108],[98,109],[68,1],[80,110],[106,111],[100,112],[94,1],[204,98],[186,113],[180,114],[184,115],[181,115],[177,114],[185,116],[182,117],[183,115],[178,118],[179,119],[173,120],[114,121],[116,122],[172,1],[115,123],[176,124],[175,125],[174,126],[107,1],[117,121],[118,1],[109,127],[113,128],[108,1],[110,129],[111,130],[112,1],[119,131],[120,131],[121,131],[122,131],[123,131],[124,131],[125,131],[126,131],[127,131],[128,131],[129,131],[130,131],[131,131],[132,131],[134,131],[133,131],[135,131],[136,131],[137,131],[138,131],[139,131],[171,132],[140,131],[141,131],[142,131],[143,131],[144,131],[145,131],[146,131],[147,131],[148,131],[149,131],[150,131],[151,131],[152,131],[154,131],[153,131],[155,131],[156,131],[157,131],[158,131],[159,131],[160,131],[161,131],[162,131],[163,131],[164,131],[165,131],[166,131],[167,131],[170,131],[168,131],[169,131],[206,133],[205,134],[188,135],[189,135],[190,1],[191,135],[192,1],[200,136],[193,135],[195,137],[194,1],[196,135],[199,138],[197,135],[187,139],[198,140],[203,141],[202,142],[201,142],[312,143],[317,144],[316,145],[315,146],[313,1],[314,1],[318,147],[326,148],[325,149],[324,148],[327,1],[328,150],[329,151],[323,152],[320,77],[322,153],[321,1],[319,1]],"latestChangedDtsFile":"./index.test.d.ts","version":"5.9.3"}
|