ai-spend-agent 0.1.1 → 0.1.4
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 +245 -94
- package/package.json +12 -8
- 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,53 +74,185 @@ 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
|
+
// Connect/verify guidance now lives in the readout's APPLY/VERIFY sections;
|
|
112
|
+
// this footer only carries what those can't know (detected local keys) and
|
|
113
|
+
// the report/waitlist pointers.
|
|
111
114
|
const steps = [];
|
|
112
|
-
if (mode === "local-logs") {
|
|
113
|
-
steps.push("These numbers are API-equivalent ESTIMATES from your local Claude Code / Codex logs.");
|
|
114
|
-
}
|
|
115
115
|
if (detected.length > 0) {
|
|
116
116
|
const names = detected.map((credential) => `${credential.provider} (${credential.hint})`).join(", ");
|
|
117
117
|
steps.push(`Found local key${detected.length === 1 ? "" : "s"}: ${names}`);
|
|
118
118
|
steps.push(`ai-spend-agent connect ${detected[0].provider} use it — note: COST data needs an ADMIN/owner key`);
|
|
119
119
|
}
|
|
120
|
-
else if (mode === "demo" || mode === "local-logs") {
|
|
121
|
-
steps.push("ai-spend-agent connect openai pull your real OpenAI spend (org-owner admin key, ~2 min)");
|
|
122
|
-
steps.push("ai-spend-agent connect anthropic pull your real Anthropic spend (admin key, ~2 min)");
|
|
123
|
-
}
|
|
124
120
|
steps.push("ai-spend-agent report write a shareable Markdown + HTML report");
|
|
121
|
+
steps.push("ai-spend-agent --group-by project see which project burns the most");
|
|
125
122
|
steps.push("Want this watched while your laptop is off? Hosted beta waitlist: https://ai-spend-agent.vercel.app");
|
|
126
123
|
return steps;
|
|
127
124
|
}
|
|
128
|
-
async function
|
|
125
|
+
async function readPersistedSpend(rootPath) {
|
|
129
126
|
const stateDir = join(rootPath, ".ai-spend-agent");
|
|
130
127
|
try {
|
|
131
128
|
const spend = await readJson(join(stateDir, "spend.json"));
|
|
132
|
-
return spend.records;
|
|
129
|
+
return { mode: spend.mode, records: spend.records ?? [] };
|
|
133
130
|
}
|
|
134
131
|
catch {
|
|
135
132
|
return undefined;
|
|
136
133
|
}
|
|
137
134
|
}
|
|
135
|
+
async function loadInstantReadData(args) {
|
|
136
|
+
const warnings = [];
|
|
137
|
+
if (args.sample) {
|
|
138
|
+
return { records: await loadSampleUsageData(), mode: "demo", warnings };
|
|
139
|
+
}
|
|
140
|
+
const persisted = args.ignoreState ? undefined : await readPersistedSpend(resolve(args.path));
|
|
141
|
+
// Only real connected/synced provider state is authoritative enough to serve
|
|
142
|
+
// directly. Sample or legacy persisted state must NEVER mask real local logs.
|
|
143
|
+
if (persisted && persisted.records.length > 0 && persisted.mode === "connected_provider") {
|
|
144
|
+
return { records: persisted.records, mode: "connected", warnings };
|
|
145
|
+
}
|
|
146
|
+
// Real local agent logs (Claude Code / Codex) beat any sample/legacy state.
|
|
147
|
+
const logs = await loadLocalAgentUsage({
|
|
148
|
+
// Env overrides keep tests (and unusual installs) isolated from $HOME.
|
|
149
|
+
claudeProjectsDir: process.env.AI_SPEND_CLAUDE_LOGS_DIR,
|
|
150
|
+
codexSessionsDir: process.env.AI_SPEND_CODEX_LOGS_DIR
|
|
151
|
+
}).catch(() => undefined);
|
|
152
|
+
if (logs && logs.records.length > 0) {
|
|
153
|
+
if (persisted && persisted.records.length > 0 && persisted.mode !== "connected_provider") {
|
|
154
|
+
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.");
|
|
155
|
+
}
|
|
156
|
+
return { records: logs.records, mode: "local-logs", warnings };
|
|
157
|
+
}
|
|
158
|
+
// No real logs. Persisted sample/legacy state may still be shown, but only as
|
|
159
|
+
// DEMO (never as connected), with a warning when its origin is unknown.
|
|
160
|
+
if (persisted && persisted.records.length > 0) {
|
|
161
|
+
if (persisted.mode === undefined) {
|
|
162
|
+
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.");
|
|
163
|
+
}
|
|
164
|
+
return { records: persisted.records, mode: "demo", warnings };
|
|
165
|
+
}
|
|
166
|
+
// loadSampleUsageData resolves the bundled CSVs relative to the installed
|
|
167
|
+
// package, so this works from ANY directory (true zero-config).
|
|
168
|
+
return { records: await loadSampleUsageData(), mode: "demo", warnings };
|
|
169
|
+
}
|
|
170
|
+
/** A one-line, unmissable banner telling the user which data they're seeing. */
|
|
171
|
+
function dataModeBanner(mode) {
|
|
172
|
+
if (mode === "local-logs")
|
|
173
|
+
return "DATA MODE: your local agent logs (estimated at API-equivalent rates)";
|
|
174
|
+
if (mode === "connected")
|
|
175
|
+
return "DATA MODE: connected provider billing";
|
|
176
|
+
return "DATA MODE: demo sample (illustrative — not your real spend)";
|
|
177
|
+
}
|
|
138
178
|
async function doctorCommand(args) {
|
|
139
179
|
const rootPath = resolve(args.path);
|
|
140
180
|
const stateDir = join(rootPath, ".ai-spend-agent");
|
|
181
|
+
const persisted = await readPersistedSpend(rootPath);
|
|
182
|
+
const stateMode = persisted ? (persisted.mode ?? "unknown legacy") : "no state";
|
|
183
|
+
const logs = await loadLocalAgentUsage({
|
|
184
|
+
claudeProjectsDir: process.env.AI_SPEND_CLAUDE_LOGS_DIR,
|
|
185
|
+
codexSessionsDir: process.env.AI_SPEND_CODEX_LOGS_DIR
|
|
186
|
+
}).catch(() => undefined);
|
|
187
|
+
const detected = logs?.agentsDetected ?? [];
|
|
188
|
+
const claudeFound = detected.includes("claude-code");
|
|
189
|
+
const codexFound = detected.includes("codex");
|
|
190
|
+
const hasLogs = claudeFound || codexFound;
|
|
191
|
+
const detection = await detectLocalCredentials({ cwd: rootPath }).catch(() => ({ credentials: [] }));
|
|
192
|
+
const providerRefs = detection.credentials.map((credential) => `${credential.provider} (${credential.hint})`);
|
|
193
|
+
const warnings = [];
|
|
194
|
+
if (stateMode === "sample")
|
|
195
|
+
warnings.push("sample state present — it will be shown as DEMO and cannot mask real logs; run `ai-spend-agent reset` to clear it");
|
|
196
|
+
if (stateMode === "unknown legacy")
|
|
197
|
+
warnings.push("legacy state with no data-mode tag — run `ai-spend-agent reset`, then re-scan");
|
|
198
|
+
if (!hasLogs)
|
|
199
|
+
warnings.push("no real Claude Code / Codex logs found — a first run here will show DEMO sample data");
|
|
200
|
+
if (providerRefs.length === 0)
|
|
201
|
+
warnings.push("no provider admin keys detected — connect OpenAI/Anthropic for VERIFIED billing (local logs stay ESTIMATED)");
|
|
202
|
+
const predictedMode = stateMode === "connected_provider"
|
|
203
|
+
? "connected provider billing"
|
|
204
|
+
: hasLogs
|
|
205
|
+
? "your local agent logs (estimated at API-equivalent rates)"
|
|
206
|
+
: "demo sample (illustrative)";
|
|
207
|
+
const lines = [
|
|
208
|
+
"AI Spend Analyst doctor",
|
|
209
|
+
`node version: ${process.version}`,
|
|
210
|
+
`cli version: ${await cliVersion()}`,
|
|
211
|
+
"local-first mode: enabled (no cloud upload, no telemetry)",
|
|
212
|
+
`path: ${rootPath}`,
|
|
213
|
+
`state directory: ${stateDir}`,
|
|
214
|
+
`state mode: ${stateMode}`,
|
|
215
|
+
`Claude Code logs: ${claudeFound ? "found" : "not found"}`,
|
|
216
|
+
`Codex logs: ${codexFound ? "found" : "not found"}`,
|
|
217
|
+
`provider env references: ${providerRefs.length > 0 ? providerRefs.join(", ") : "none detected"}`,
|
|
218
|
+
"redaction policy: secrets are never printed or persisted",
|
|
219
|
+
"plan check: available (subscription vs API-rate math)",
|
|
220
|
+
`data mode you'll get now: ${predictedMode}`,
|
|
221
|
+
warnings.length > 0 ? `launch warnings:\n${warnings.map((warning) => ` - ${warning}`).join("\n")}` : "launch warnings: none"
|
|
222
|
+
];
|
|
223
|
+
return ok(lines.join("\n"));
|
|
224
|
+
}
|
|
225
|
+
async function cliVersion() {
|
|
226
|
+
try {
|
|
227
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
228
|
+
const pkg = JSON.parse(await readFile(join(here, "..", "package.json"), "utf8"));
|
|
229
|
+
return pkg.version ?? "unknown";
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
return process.env.npm_package_version ?? "unknown";
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
async function resetCommand(args) {
|
|
236
|
+
const rootPath = resolve(args.path);
|
|
237
|
+
const stateDir = join(rootPath, ".ai-spend-agent");
|
|
238
|
+
// Clear derived spend state so a prior `scan --sample` (or stale provider
|
|
239
|
+
// sync) can never mask the next real local-log read. Leaves sources/audit.
|
|
240
|
+
const targets = ["spend.json", "mappings.json", "provider-records.json", "watch-latest.json", "watch-history.json"];
|
|
241
|
+
const removed = [];
|
|
242
|
+
for (const file of targets) {
|
|
243
|
+
try {
|
|
244
|
+
await rm(join(stateDir, file));
|
|
245
|
+
removed.push(file);
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
// File not present — nothing to clear for this target.
|
|
249
|
+
}
|
|
250
|
+
}
|
|
141
251
|
return ok([
|
|
142
|
-
"AI Spend Analyst
|
|
252
|
+
"AI Spend Analyst reset",
|
|
143
253
|
`path: ${rootPath}`,
|
|
144
|
-
"
|
|
145
|
-
"
|
|
146
|
-
"redaction policy: secrets are never printed",
|
|
147
|
-
`state directory: ${stateDir}`
|
|
254
|
+
removed.length > 0 ? `cleared: ${removed.join(", ")}` : "nothing to clear (no persisted spend state found)",
|
|
255
|
+
"next run will re-read your real local agent logs (or demo sample if none)."
|
|
148
256
|
].join("\n"));
|
|
149
257
|
}
|
|
150
258
|
async function initCommand(args) {
|
|
@@ -262,11 +370,14 @@ async function scanCommand(args) {
|
|
|
262
370
|
`discovery signals: ${discovery.signals.length}`,
|
|
263
371
|
`secrets detected: ${discovery.secretsDetected.length}`
|
|
264
372
|
];
|
|
373
|
+
if (discovery.unreadablePaths.length > 0) {
|
|
374
|
+
lines.push(`unreadable paths skipped: ${discovery.unreadablePaths.length} (permissions/broken links — scan continued)`);
|
|
375
|
+
}
|
|
265
376
|
if (args.sample) {
|
|
266
377
|
const records = await loadSampleUsageData();
|
|
267
378
|
const summary = analyzeSpend(records);
|
|
268
379
|
const mappings = attributeUsageRecords(records);
|
|
269
|
-
await writeLocalSpendState(stateDir, records, summary, mappings);
|
|
380
|
+
await writeLocalSpendState(stateDir, records, summary, mappings, "sample");
|
|
270
381
|
lines.push(`sample records: ${records.length}`);
|
|
271
382
|
lines.push(`total spend: $${summary.totalUsd.toFixed(2)}`);
|
|
272
383
|
lines.push(`attribution mappings: ${mappings.length}`);
|
|
@@ -311,15 +422,22 @@ async function watchCommand(args) {
|
|
|
311
422
|
deltaHeadline,
|
|
312
423
|
plainEnglish
|
|
313
424
|
].join("\n");
|
|
314
|
-
collected.push(stamped);
|
|
315
425
|
iteration += 1;
|
|
316
426
|
const moreToGo = unbounded || iteration < cycles;
|
|
317
|
-
|
|
427
|
+
const streaming = process.env.NODE_ENV !== "test";
|
|
428
|
+
if (moreToGo && streaming) {
|
|
429
|
+
// Stream interim cycles live, but do NOT also include them in the returned
|
|
430
|
+
// output — doing both double-printed the baseline before the no-change
|
|
431
|
+
// cycle. Streamed cycles are shown once here; the final cycle is returned.
|
|
318
432
|
// eslint-disable-next-line no-console
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
433
|
+
console.log(stamped);
|
|
434
|
+
// eslint-disable-next-line no-console
|
|
435
|
+
console.log(`\n[watch] sleeping ${intervalSeconds}s until next cycle. Press Ctrl+C to stop.\n`);
|
|
436
|
+
}
|
|
437
|
+
else {
|
|
438
|
+
collected.push(stamped);
|
|
439
|
+
}
|
|
440
|
+
if (moreToGo) {
|
|
323
441
|
await sleep(intervalSeconds * 1000);
|
|
324
442
|
}
|
|
325
443
|
}
|
|
@@ -327,18 +445,24 @@ async function watchCommand(args) {
|
|
|
327
445
|
}
|
|
328
446
|
async function runWatchCycle(stateDir, args) {
|
|
329
447
|
let records;
|
|
448
|
+
let mode;
|
|
330
449
|
if (args.sample) {
|
|
331
450
|
records = await loadSampleUsageData();
|
|
451
|
+
mode = "sample";
|
|
332
452
|
}
|
|
333
453
|
else {
|
|
334
454
|
records = await loadLiveRecords(stateDir);
|
|
335
|
-
if (records.length
|
|
455
|
+
if (records.length > 0) {
|
|
456
|
+
mode = "connected_provider";
|
|
457
|
+
}
|
|
458
|
+
else {
|
|
336
459
|
records = await loadSampleUsageData();
|
|
460
|
+
mode = "sample";
|
|
337
461
|
}
|
|
338
462
|
}
|
|
339
463
|
const summary = analyzeSpend(records);
|
|
340
464
|
const mappings = attributeUsageRecords(records);
|
|
341
|
-
await writeLocalSpendState(stateDir, records, summary, mappings);
|
|
465
|
+
await writeLocalSpendState(stateDir, records, summary, mappings, mode);
|
|
342
466
|
const snapshot = {
|
|
343
467
|
capturedAt: new Date().toISOString(),
|
|
344
468
|
totalUsd: summary.totalUsd,
|
|
@@ -577,7 +701,7 @@ async function syncProviderCommand(args) {
|
|
|
577
701
|
records: result.records,
|
|
578
702
|
qa: result.qa
|
|
579
703
|
});
|
|
580
|
-
await writeLocalSpendState(stateDir, result.records, summary, mappings);
|
|
704
|
+
await writeLocalSpendState(stateDir, result.records, summary, mappings, "connected_provider");
|
|
581
705
|
await appendAuditEvent(stateDir, {
|
|
582
706
|
timestamp: result.fetchedAt,
|
|
583
707
|
action: "source_scanned",
|
|
@@ -671,23 +795,36 @@ async function reportCommand(args) {
|
|
|
671
795
|
};
|
|
672
796
|
}
|
|
673
797
|
}
|
|
798
|
+
/**
|
|
799
|
+
* Resolve where the AI Receipt SVG is written so it is always shareable:
|
|
800
|
+
* no --out -> ai-receipt.svg in cwd; --out a directory -> ai-spend-receipt.svg
|
|
801
|
+
* inside it; --out with no extension -> append .svg; explicit .svg honored.
|
|
802
|
+
*/
|
|
803
|
+
async function resolveReceiptPath(rootPath, out) {
|
|
804
|
+
if (!out)
|
|
805
|
+
return join(rootPath, "ai-receipt.svg");
|
|
806
|
+
const resolved = resolve(rootPath, out);
|
|
807
|
+
const isDir = await stat(resolved).then((entry) => entry.isDirectory()).catch(() => false);
|
|
808
|
+
if (isDir)
|
|
809
|
+
return join(resolved, "ai-spend-receipt.svg");
|
|
810
|
+
return extname(resolved) ? resolved : `${resolved}.svg`;
|
|
811
|
+
}
|
|
674
812
|
async function reportCardCommand(args) {
|
|
675
813
|
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
|
-
}
|
|
814
|
+
const { records, mode } = await loadInstantReadData(args);
|
|
684
815
|
const summary = analyzeSpend(records);
|
|
685
|
-
const outPath =
|
|
816
|
+
const outPath = await resolveReceiptPath(rootPath, args.out);
|
|
686
817
|
await mkdir(dirname(outPath), { recursive: true });
|
|
687
818
|
await writeFile(outPath, generateReportCardSvg({ summary, records }), "utf8");
|
|
819
|
+
const dataLine = mode === "demo"
|
|
820
|
+
? "data: DEMO sample data — run without --sample on a machine with Claude Code/Codex logs for your own numbers."
|
|
821
|
+
: mode === "local-logs"
|
|
822
|
+
? "data: local Claude Code/Codex logs priced at API-equivalent rates."
|
|
823
|
+
: "data: connected local spend state.";
|
|
688
824
|
return ok([
|
|
689
|
-
"
|
|
690
|
-
`
|
|
825
|
+
"Your AI Receipt — a shareable, redacted spend card (no client/project/user names).",
|
|
826
|
+
`receipt: ${outPath}`,
|
|
827
|
+
dataLine,
|
|
691
828
|
"",
|
|
692
829
|
"Caption to share:",
|
|
693
830
|
generateReportCardCaption({ summary, records }),
|
|
@@ -732,6 +869,10 @@ async function buildReportInput(stateDir, rootPath) {
|
|
|
732
869
|
]);
|
|
733
870
|
return {
|
|
734
871
|
summary: spendState.summary,
|
|
872
|
+
// Evidence ledger is built from the SAME records as the confidence
|
|
873
|
+
// breakdown so the two sections can never contradict each other.
|
|
874
|
+
allRecords: spendState.records ?? [],
|
|
875
|
+
dataMode: spendState.mode,
|
|
735
876
|
discovery,
|
|
736
877
|
mappings,
|
|
737
878
|
sourceRegistry,
|
|
@@ -782,6 +923,10 @@ function parseArgs(argv) {
|
|
|
782
923
|
parsed.noColor = true;
|
|
783
924
|
continue;
|
|
784
925
|
}
|
|
926
|
+
if (arg === "--ignore-state") {
|
|
927
|
+
parsed.ignoreState = true;
|
|
928
|
+
continue;
|
|
929
|
+
}
|
|
785
930
|
if (arg === "--group-by") {
|
|
786
931
|
const next = rest[index + 1];
|
|
787
932
|
if (isGroupByDimension(next)) {
|
|
@@ -897,7 +1042,11 @@ function parseArgs(argv) {
|
|
|
897
1042
|
if (arg === "--confidence") {
|
|
898
1043
|
const next = rest[index + 1];
|
|
899
1044
|
if (next) {
|
|
900
|
-
|
|
1045
|
+
const value = Number(next);
|
|
1046
|
+
// Reject NaN/out-of-range instead of rendering "NaN% confidence".
|
|
1047
|
+
if (Number.isFinite(value) && value >= 0 && value <= 1) {
|
|
1048
|
+
parsed.confidence = value;
|
|
1049
|
+
}
|
|
901
1050
|
index += 1;
|
|
902
1051
|
}
|
|
903
1052
|
continue;
|
|
@@ -958,14 +1107,6 @@ function parseArgs(argv) {
|
|
|
958
1107
|
}
|
|
959
1108
|
continue;
|
|
960
1109
|
}
|
|
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
1110
|
if (arg === "--interval") {
|
|
970
1111
|
const next = rest[index + 1];
|
|
971
1112
|
if (next) {
|
|
@@ -986,24 +1127,16 @@ function parseArgs(argv) {
|
|
|
986
1127
|
return parsed;
|
|
987
1128
|
}
|
|
988
1129
|
function sanitizeSecretishError(message, authReference) {
|
|
989
|
-
|
|
1130
|
+
// Core's redactSecrets covers sk-*/ghp_*/github_pat_*/JWT/AIza/xox/AKIA and
|
|
1131
|
+
// secret-suffixed env assignments; the sk- fallback keeps short keys covered.
|
|
1132
|
+
let sanitized = redactSecrets(message).replace(/sk-[A-Za-z0-9_-]+/g, "[REDACTED]");
|
|
990
1133
|
if (authReference && !authReference.startsWith("env:")) {
|
|
991
1134
|
sanitized = sanitized.split(authReference).join("[REDACTED]");
|
|
992
1135
|
}
|
|
993
1136
|
return sanitized;
|
|
994
1137
|
}
|
|
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 });
|
|
1138
|
+
async function writeLocalSpendState(stateDir, records, summary, mappings, mode) {
|
|
1139
|
+
await writeJson(join(stateDir, "spend.json"), { mode, records, summary });
|
|
1007
1140
|
await writeJson(join(stateDir, "mappings.json"), mappings);
|
|
1008
1141
|
}
|
|
1009
1142
|
async function readSourceRegistry(stateDir, rootPath) {
|
|
@@ -1042,7 +1175,9 @@ async function appendAuditEvent(stateDir, event) {
|
|
|
1042
1175
|
catch {
|
|
1043
1176
|
// Create a fresh local-only audit log if init has not run yet.
|
|
1044
1177
|
}
|
|
1045
|
-
|
|
1178
|
+
// Cap like watch-history: an unbounded log under cron watch grows forever
|
|
1179
|
+
// and makes every append an ever-larger rewrite.
|
|
1180
|
+
await writeJson(join(stateDir, "audit-log.json"), createScanAuditLog([...auditLog.events, event].slice(-500)));
|
|
1046
1181
|
}
|
|
1047
1182
|
async function readJson(path) {
|
|
1048
1183
|
return JSON.parse(await readFile(path, "utf8"));
|
|
@@ -1082,13 +1217,15 @@ function helpText() {
|
|
|
1082
1217
|
"",
|
|
1083
1218
|
"Other commands:",
|
|
1084
1219
|
" init [--path <dir>] Initialize local state",
|
|
1085
|
-
" doctor
|
|
1220
|
+
" doctor Launch-grade diagnostics: data mode, logs found, provider keys, warnings",
|
|
1221
|
+
" reset [--path <dir>] Clear persisted spend state (so sample state can't mask real logs)",
|
|
1222
|
+
" --ignore-state On the default/quickstart run, ignore persisted spend.json for this run",
|
|
1086
1223
|
" scan [--path <dir>] Scan a local workspace for AI usage signals",
|
|
1087
1224
|
" scan --sample Include deterministic sample spend analysis",
|
|
1088
1225
|
" quickstart [--sample] Plain-English 90-second readout (alias of the default run)",
|
|
1089
1226
|
" [--group-by source|model|client|project|agent|user|workspace|apiKey] Default: model",
|
|
1090
1227
|
" report [--out <name>] Generate local Markdown and HTML reports",
|
|
1091
|
-
" report-card [--out f.svg] Write a redacted, shareable SVG
|
|
1228
|
+
" report-card [--out f.svg] Write your AI Receipt — a redacted, shareable SVG + caption",
|
|
1092
1229
|
" apply-artifact Generate coding prompt, action plan, policy/config, verification, demo package",
|
|
1093
1230
|
"",
|
|
1094
1231
|
"Cron (production watch): add a crontab entry such as:",
|
|
@@ -1140,6 +1277,20 @@ if (invokedAsMain) {
|
|
|
1140
1277
|
try {
|
|
1141
1278
|
result = await runCli(argv);
|
|
1142
1279
|
}
|
|
1280
|
+
catch (error) {
|
|
1281
|
+
// The product's error voice, never a raw stack trace — and never an
|
|
1282
|
+
// un-redacted secret from a provider payload or file path.
|
|
1283
|
+
const message = sanitizeSecretishError(error instanceof Error ? error.message : String(error));
|
|
1284
|
+
result = {
|
|
1285
|
+
exitCode: 1,
|
|
1286
|
+
stdout: "",
|
|
1287
|
+
stderr: [
|
|
1288
|
+
`ai-spend-agent hit an unexpected error: ${message}`,
|
|
1289
|
+
"Nothing was uploaded; local state is unchanged.",
|
|
1290
|
+
"Try `ai-spend-agent doctor` for diagnostics, or open an issue: https://github.com/futurastudio/ai-spend-agent/issues"
|
|
1291
|
+
].join("\n")
|
|
1292
|
+
};
|
|
1293
|
+
}
|
|
1143
1294
|
finally {
|
|
1144
1295
|
spinner?.stop();
|
|
1145
1296
|
}
|
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.4",
|
|
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,7 +11,8 @@
|
|
|
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": {
|
|
@@ -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.4",
|
|
53
|
+
"@agent-finops/report": "0.1.4",
|
|
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":"99f6bae51b6d92aa3c82c4eddeb1fb0dd9e8c79fd8c9e215384e9d9d33e16459","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":"8e1fb5200d912c410767b9ffe183f20226facd7f95e07b6c5ae79164ce4c3900","signature":"57374c3aab19ab03882ad61d985ef3bbc870060fd9be9ba229ac5a042bda8b44","impliedFormat":99},{"version":"6e911289e7092b4d956de305ec5b8968f19df549c18b757bf147602a7d3d32bc","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"}
|