@sponsio/sdk 0.1.0-alpha.3 → 0.2.0-alpha.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/bin/sponsio.cjs +11 -0
- package/contracts/benchmark/agentdojo.yaml +551 -0
- package/contracts/benchmark/odcv_bench.yaml +393 -0
- package/contracts/benchmark/redcode_exec.yaml +488 -0
- package/contracts/benchmark/swebench.yaml +176 -0
- package/contracts/benchmark/tau2_bench.yaml +984 -0
- package/contracts/capability/credentials.yaml +8 -8
- package/contracts/capability/database.yaml +6 -6
- package/contracts/capability/filesystem-strict.yaml +4 -4
- package/contracts/capability/filesystem.yaml +9 -9
- package/contracts/capability/host-config-integrity.yaml +285 -0
- package/contracts/capability/self-modify.yaml +214 -9
- package/contracts/capability/shell.yaml +25 -32
- package/contracts/capability/subagent.yaml +5 -5
- package/contracts/core/llm_safety.yaml +21 -13
- package/contracts/incident/claude-code-secret-bypass.yaml +11 -12
- package/contracts/incident/cursor-railway-wipe.yaml +3 -3
- package/contracts/incident/mcp-composition.yaml +12 -12
- package/contracts/incident/openclaw.yaml +54 -45
- package/contracts/incident/subagent-escape.yaml +4 -4
- package/contracts/premium/.gitkeep +5 -6
- package/dist/cli/check.d.ts +2 -0
- package/dist/cli/check.d.ts.map +1 -0
- package/dist/cli/check.js +283 -0
- package/dist/cli/check.js.map +1 -0
- package/dist/cli/cli.d.ts +25 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +459 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/config.d.ts +88 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +243 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/demo.d.ts +12 -0
- package/dist/cli/demo.d.ts.map +1 -0
- package/dist/cli/demo.js +350 -0
- package/dist/cli/demo.js.map +1 -0
- package/dist/cli/doctor.d.ts +11 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +201 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/eval.d.ts +2 -0
- package/dist/cli/eval.d.ts.map +1 -0
- package/dist/cli/eval.js +361 -0
- package/dist/cli/eval.js.map +1 -0
- package/dist/cli/explain.d.ts +2 -0
- package/dist/cli/explain.d.ts.map +1 -0
- package/dist/cli/explain.js +266 -0
- package/dist/cli/explain.js.map +1 -0
- package/dist/cli/export-sessions.d.ts +2 -0
- package/dist/cli/export-sessions.d.ts.map +1 -0
- package/dist/cli/export-sessions.js +182 -0
- package/dist/cli/export-sessions.js.map +1 -0
- package/dist/cli/export.d.ts +2 -0
- package/dist/cli/export.d.ts.map +1 -0
- package/dist/cli/export.js +222 -0
- package/dist/cli/export.js.map +1 -0
- package/dist/cli/extractors/common.d.ts +27 -0
- package/dist/cli/extractors/common.d.ts.map +1 -0
- package/dist/cli/extractors/common.js +107 -0
- package/dist/cli/extractors/common.js.map +1 -0
- package/dist/cli/extractors/generic.d.ts +37 -0
- package/dist/cli/extractors/generic.d.ts.map +1 -0
- package/dist/cli/extractors/generic.js +185 -0
- package/dist/cli/extractors/generic.js.map +1 -0
- package/dist/cli/extractors/langchain.d.ts +18 -0
- package/dist/cli/extractors/langchain.d.ts.map +1 -0
- package/dist/cli/extractors/langchain.js +86 -0
- package/dist/cli/extractors/langchain.js.map +1 -0
- package/dist/cli/extractors/vercel.d.ts +17 -0
- package/dist/cli/extractors/vercel.d.ts.map +1 -0
- package/dist/cli/extractors/vercel.js +46 -0
- package/dist/cli/extractors/vercel.js.map +1 -0
- package/dist/cli/index.d.ts +38 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +146 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +177 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/mode.d.ts +2 -0
- package/dist/cli/mode.d.ts.map +1 -0
- package/dist/cli/mode.js +71 -0
- package/dist/cli/mode.js.map +1 -0
- package/dist/cli/onboard.d.ts +88 -0
- package/dist/cli/onboard.d.ts.map +1 -0
- package/dist/cli/onboard.js +758 -0
- package/dist/cli/onboard.js.map +1 -0
- package/dist/cli/otlp.d.ts +27 -0
- package/dist/cli/otlp.d.ts.map +1 -0
- package/dist/cli/otlp.js +79 -0
- package/dist/cli/otlp.js.map +1 -0
- package/dist/cli/package.json +1 -0
- package/dist/cli/packs.d.ts +16 -0
- package/dist/cli/packs.d.ts.map +1 -0
- package/dist/cli/packs.js +184 -0
- package/dist/cli/packs.js.map +1 -0
- package/dist/cli/patterns.d.ts +16 -0
- package/dist/cli/patterns.d.ts.map +1 -0
- package/dist/cli/patterns.js +136 -0
- package/dist/cli/patterns.js.map +1 -0
- package/dist/cli/prompt.d.ts +2 -0
- package/dist/cli/prompt.d.ts.map +1 -0
- package/dist/cli/prompt.js +54 -0
- package/dist/cli/prompt.js.map +1 -0
- package/dist/cli/replay.d.ts +2 -0
- package/dist/cli/replay.d.ts.map +1 -0
- package/dist/cli/replay.js +196 -0
- package/dist/cli/replay.js.map +1 -0
- package/dist/cli/report.d.ts +57 -0
- package/dist/cli/report.d.ts.map +1 -0
- package/dist/cli/report.js +298 -0
- package/dist/cli/report.js.map +1 -0
- package/dist/cli/scan.d.ts +2 -0
- package/dist/cli/scan.d.ts.map +1 -0
- package/dist/cli/scan.js +172 -0
- package/dist/cli/scan.js.map +1 -0
- package/dist/cli/skill.d.ts +15 -0
- package/dist/cli/skill.d.ts.map +1 -0
- package/dist/cli/skill.js +131 -0
- package/dist/cli/skill.js.map +1 -0
- package/dist/cli/tokens.d.ts +31 -0
- package/dist/cli/tokens.d.ts.map +1 -0
- package/dist/cli/tokens.js +73 -0
- package/dist/cli/tokens.js.map +1 -0
- package/dist/cli/types.d.ts +46 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +3 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/validate.d.ts +19 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +205 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/cli/zod.d.ts +36 -0
- package/dist/cli/zod.d.ts.map +1 -0
- package/dist/cli/zod.js +226 -0
- package/dist/cli/zod.js.map +1 -0
- package/dist/contract.d.ts +13 -13
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +21 -21
- package/dist/contract.js.map +1 -1
- package/dist/core/config-loader.d.ts +1 -1
- package/dist/core/config-loader.d.ts.map +1 -1
- package/dist/core/config-loader.js +100 -26
- package/dist/core/config-loader.js.map +1 -1
- package/dist/core/evaluator.d.ts +9 -1
- package/dist/core/evaluator.d.ts.map +1 -1
- package/dist/core/evaluator.js +189 -13
- package/dist/core/evaluator.js.map +1 -1
- package/dist/core/formula.d.ts +76 -17
- package/dist/core/formula.d.ts.map +1 -1
- package/dist/core/formula.js +83 -1
- package/dist/core/formula.js.map +1 -1
- package/dist/core/grounding.d.ts +50 -3
- package/dist/core/grounding.d.ts.map +1 -1
- package/dist/core/grounding.js +317 -141
- package/dist/core/grounding.js.map +1 -1
- package/dist/core/nl-parser.d.ts +1 -1
- package/dist/core/nl-parser.d.ts.map +1 -1
- package/dist/core/nl-parser.js +76 -4
- package/dist/core/nl-parser.js.map +1 -1
- package/dist/core/pack-loader.d.ts.map +1 -1
- package/dist/core/pack-loader.js +14 -2
- package/dist/core/pack-loader.js.map +1 -1
- package/dist/core/parser.d.ts.map +1 -1
- package/dist/core/parser.js +30 -1
- package/dist/core/parser.js.map +1 -1
- package/dist/core/pattern-factory.d.ts +4 -4
- package/dist/core/pattern-factory.d.ts.map +1 -1
- package/dist/core/pattern-factory.js +53 -4
- package/dist/core/pattern-factory.js.map +1 -1
- package/dist/core/patterns.d.ts +127 -5
- package/dist/core/patterns.d.ts.map +1 -1
- package/dist/core/patterns.js +267 -3
- package/dist/core/patterns.js.map +1 -1
- package/dist/core/session-log.d.ts.map +1 -1
- package/dist/core/session-log.js +20 -1
- package/dist/core/session-log.js.map +1 -1
- package/dist/core/spans.d.ts +1 -1
- package/dist/core/spans.d.ts.map +1 -1
- package/dist/core/spans.js.map +1 -1
- package/dist/core/sto.d.ts +30 -66
- package/dist/core/sto.d.ts.map +1 -1
- package/dist/core/sto.js +39 -100
- package/dist/core/sto.js.map +1 -1
- package/dist/index.d.ts +83 -33
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +194 -142
- package/dist/index.js.map +1 -1
- package/dist/integrations/openai-agents.d.ts.map +1 -1
- package/dist/integrations/openai-agents.js +6 -4
- package/dist/integrations/openai-agents.js.map +1 -1
- package/dist/integrations/vercel-ai.d.ts.map +1 -1
- package/dist/integrations/vercel-ai.js +21 -3
- package/dist/integrations/vercel-ai.js.map +1 -1
- package/dist/render/tokens.d.ts.map +1 -1
- package/dist/render/tokens.js +1 -0
- package/dist/render/tokens.js.map +1 -1
- package/package.json +35 -7
- package/prompts/onboard.md +246 -0
- package/prompts/scan.md +123 -0
- package/skills/SKILL.md +432 -0
package/dist/cli/cli.js
ADDED
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* ``sponsio`` — CLI frontend for ``@sponsio/sdk``.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
*
|
|
8
|
+
* npx @sponsio/sdk ./src
|
|
9
|
+
* npx @sponsio/sdk "src/**\/*.ts" --out tools.json
|
|
10
|
+
* npx @sponsio/sdk --config sponsio.yaml
|
|
11
|
+
* npx @sponsio/sdk ./src --pretty
|
|
12
|
+
*
|
|
13
|
+
* Writes the OpenAI function-calling JSON inventory to stdout (or to
|
|
14
|
+
* ``--out <file>``) so you can pipe into ``sponsio scan`` on the
|
|
15
|
+
* Python side:
|
|
16
|
+
*
|
|
17
|
+
* npx @sponsio/sdk ./src > tools.json
|
|
18
|
+
* sponsio scan tools.json --out sponsio.yaml
|
|
19
|
+
*
|
|
20
|
+
* When ``--config sponsio.yaml`` is passed, the CLI also reads the
|
|
21
|
+
* ``scan:`` section (for defaults) and ``extractor:`` (for LLM
|
|
22
|
+
* passthrough in the output JSON, so the Python-side scan doesn't
|
|
23
|
+
* need ``--config`` a second time). CLI flags always win over YAML.
|
|
24
|
+
*/
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const fs_1 = require("fs");
|
|
27
|
+
const config_1 = require("./config");
|
|
28
|
+
const onboard_1 = require("./onboard");
|
|
29
|
+
const report_1 = require("./report");
|
|
30
|
+
const validate_1 = require("./validate");
|
|
31
|
+
const patterns_1 = require("./patterns");
|
|
32
|
+
const doctor_1 = require("./doctor");
|
|
33
|
+
const packs_1 = require("./packs");
|
|
34
|
+
const skill_1 = require("./skill");
|
|
35
|
+
const mode_1 = require("./mode");
|
|
36
|
+
const init_1 = require("./init");
|
|
37
|
+
const scan_1 = require("./scan");
|
|
38
|
+
const prompt_1 = require("./prompt");
|
|
39
|
+
const explain_1 = require("./explain");
|
|
40
|
+
const replay_1 = require("./replay");
|
|
41
|
+
const check_1 = require("./check");
|
|
42
|
+
const eval_1 = require("./eval");
|
|
43
|
+
const export_1 = require("./export");
|
|
44
|
+
const export_sessions_1 = require("./export-sessions");
|
|
45
|
+
const demo_1 = require("./demo");
|
|
46
|
+
const index_1 = require("./index");
|
|
47
|
+
// Authored as a plain-string array (not a template literal) because
|
|
48
|
+
// the help text contains literal ``${VAR}`` tokens that describe the
|
|
49
|
+
// env-var interpolation syntax. Inside a template literal those
|
|
50
|
+
// would try to evaluate as JS expressions (and ``\$`` escapes are
|
|
51
|
+
// inconsistently handled across TS-target combos). Joining plain
|
|
52
|
+
// strings is dull but unambiguous.
|
|
53
|
+
const HELP = [
|
|
54
|
+
"sponsio — scan TypeScript/JavaScript for agent tool definitions",
|
|
55
|
+
"",
|
|
56
|
+
"USAGE:",
|
|
57
|
+
" sponsio <patterns...> [options]",
|
|
58
|
+
"",
|
|
59
|
+
"ARGUMENTS:",
|
|
60
|
+
' <patterns...> Files or glob patterns to scan (default: "src/**/*.{ts,tsx,js,jsx}")',
|
|
61
|
+
"",
|
|
62
|
+
"OPTIONS:",
|
|
63
|
+
" -o, --out <file> Write output to <file> instead of stdout",
|
|
64
|
+
" -c, --config <yaml> Read defaults from sponsio.yaml's ``scan:`` section and",
|
|
65
|
+
" embed ``extractor:`` config into the output for Python.",
|
|
66
|
+
" --pretty Pretty-print the emitted JSON",
|
|
67
|
+
" --provenance Include per-tool source-file provenance in output",
|
|
68
|
+
" -h, --help Show this help",
|
|
69
|
+
" -v, --version Show version",
|
|
70
|
+
"",
|
|
71
|
+
"EXAMPLES:",
|
|
72
|
+
" sponsio ./src",
|
|
73
|
+
' sponsio "src/tools/**/*.ts" --out tools.json',
|
|
74
|
+
" sponsio --config sponsio.yaml --pretty",
|
|
75
|
+
" sponsio ./src --out /tmp/inv.json && sponsio scan /tmp/inv.json -o sponsio.yaml",
|
|
76
|
+
" sponsio onboard .",
|
|
77
|
+
" sponsio init --mode observe",
|
|
78
|
+
" sponsio scan ./src --append",
|
|
79
|
+
" sponsio mode enforce",
|
|
80
|
+
" sponsio check -t trace.json --config sponsio.yaml",
|
|
81
|
+
" sponsio eval traces/ --config sponsio.yaml --json",
|
|
82
|
+
" sponsio explain C1",
|
|
83
|
+
" sponsio prompt onboard",
|
|
84
|
+
" sponsio replay --list",
|
|
85
|
+
" sponsio export run.json --to traces/ --label safe",
|
|
86
|
+
" sponsio export-sessions --to audit.jsonl",
|
|
87
|
+
" sponsio demo --scenario wire",
|
|
88
|
+
" sponsio report --since 24h",
|
|
89
|
+
" sponsio validate ./sponsio.yaml",
|
|
90
|
+
" sponsio patterns",
|
|
91
|
+
" sponsio doctor",
|
|
92
|
+
" sponsio skill install",
|
|
93
|
+
"",
|
|
94
|
+
"SUBCOMMANDS:",
|
|
95
|
+
" onboard [.] Generate sponsio.yaml + print integration snippet",
|
|
96
|
+
" init [target] Skeleton sponsio.yaml (no scan)",
|
|
97
|
+
" scan <patterns…> AST-scan source -> sponsio.yaml with contracts",
|
|
98
|
+
" mode <observe|enforce> Flip the mode line in sponsio.yaml",
|
|
99
|
+
" check -t <trace> … Replay a trace file, report contract pass/fail",
|
|
100
|
+
" eval <traces/> … Replay labelled corpus, report FPR/FNR + diff",
|
|
101
|
+
" explain <Cn|substr> Explain a contract: source, last violation",
|
|
102
|
+
" prompt <onboard|scan|…> Print agent-facing contract-authoring template",
|
|
103
|
+
" replay [session|--list] Pretty-print a session log",
|
|
104
|
+
" export <src> --to <dir> Sponsio-native trace -> OTLP/JSON",
|
|
105
|
+
" export-sessions --to <f> Session log -> OTLP-JSONL",
|
|
106
|
+
" report [--since 24h …] Summarize ~/.sponsio/sessions/ into markdown/json",
|
|
107
|
+
" validate [path] Parse sponsio.yaml + report contract counts (sto contracts flagged as Cloud-only)",
|
|
108
|
+
" patterns [--category …] List deterministic pattern templates available in TS",
|
|
109
|
+
" packs List the built-in pack library (Python-executed)",
|
|
110
|
+
" doctor Env + config health check",
|
|
111
|
+
" demo [--scenario wire] Terminal demo of unsafe agent + Sponsio block",
|
|
112
|
+
" skill install Drop SKILL.md into Cursor/Claude/Codex skill dirs",
|
|
113
|
+
"",
|
|
114
|
+
"CONFIG FILE SHAPE:",
|
|
115
|
+
" # sponsio.yaml",
|
|
116
|
+
" scan:",
|
|
117
|
+
' patterns: ["src/**/*.ts", "packages/*/src/**/*.ts"]',
|
|
118
|
+
' ignore: ["**/generated/**"]',
|
|
119
|
+
' out: "tools.json"',
|
|
120
|
+
" provenance: true",
|
|
121
|
+
" extractor:",
|
|
122
|
+
" provider: openai",
|
|
123
|
+
" model: gpt-4o",
|
|
124
|
+
" api_key: ${OPENAI_API_KEY} # ${VAR} / ${VAR:-default} supported",
|
|
125
|
+
].join("\n") + "\n";
|
|
126
|
+
function parseArgs(argv) {
|
|
127
|
+
const args = {
|
|
128
|
+
patterns: [],
|
|
129
|
+
pretty: false,
|
|
130
|
+
help: false,
|
|
131
|
+
version: false,
|
|
132
|
+
includeProvenance: false,
|
|
133
|
+
};
|
|
134
|
+
for (let i = 0; i < argv.length; i++) {
|
|
135
|
+
const a = argv[i];
|
|
136
|
+
if (a === "-h" || a === "--help")
|
|
137
|
+
args.help = true;
|
|
138
|
+
else if (a === "-v" || a === "--version")
|
|
139
|
+
args.version = true;
|
|
140
|
+
else if (a === "--pretty")
|
|
141
|
+
args.pretty = true;
|
|
142
|
+
else if (a === "--provenance")
|
|
143
|
+
args.includeProvenance = true;
|
|
144
|
+
else if (a === "-o" || a === "--out") {
|
|
145
|
+
args.out = argv[++i];
|
|
146
|
+
}
|
|
147
|
+
else if (a === "-c" || a === "--config") {
|
|
148
|
+
args.configPath = argv[++i];
|
|
149
|
+
}
|
|
150
|
+
else if (a.startsWith("-")) {
|
|
151
|
+
process.stderr.write(`unknown flag: ${a}\n`);
|
|
152
|
+
process.exit(2);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
args.patterns.push(a);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return args;
|
|
159
|
+
}
|
|
160
|
+
async function main() {
|
|
161
|
+
const raw = process.argv.slice(2);
|
|
162
|
+
if (raw[0] === "onboard") {
|
|
163
|
+
try {
|
|
164
|
+
await (0, onboard_1.runOnboardCli)(raw.slice(1));
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
168
|
+
process.exit(1);
|
|
169
|
+
}
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
if (raw[0] === "report") {
|
|
173
|
+
try {
|
|
174
|
+
await (0, report_1.runReportCli)(raw.slice(1));
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
178
|
+
process.exit(1);
|
|
179
|
+
}
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
if (raw[0] === "validate") {
|
|
183
|
+
try {
|
|
184
|
+
await (0, validate_1.runValidateCli)(raw.slice(1));
|
|
185
|
+
}
|
|
186
|
+
catch (err) {
|
|
187
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
188
|
+
process.exit(1);
|
|
189
|
+
}
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
if (raw[0] === "patterns") {
|
|
193
|
+
try {
|
|
194
|
+
await (0, patterns_1.runPatternsCli)(raw.slice(1));
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
198
|
+
process.exit(1);
|
|
199
|
+
}
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
if (raw[0] === "packs") {
|
|
203
|
+
try {
|
|
204
|
+
await (0, packs_1.runPacksCli)(raw.slice(1));
|
|
205
|
+
}
|
|
206
|
+
catch (err) {
|
|
207
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
if (raw[0] === "doctor") {
|
|
213
|
+
try {
|
|
214
|
+
await (0, doctor_1.runDoctorCli)(raw.slice(1));
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
218
|
+
process.exit(1);
|
|
219
|
+
}
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
if (raw[0] === "skill") {
|
|
223
|
+
try {
|
|
224
|
+
await (0, skill_1.runSkillCli)(raw.slice(1));
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
228
|
+
process.exit(1);
|
|
229
|
+
}
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
if (raw[0] === "mode") {
|
|
233
|
+
try {
|
|
234
|
+
await (0, mode_1.runModeCli)(raw.slice(1));
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
238
|
+
process.exit(1);
|
|
239
|
+
}
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
if (raw[0] === "init") {
|
|
243
|
+
try {
|
|
244
|
+
await (0, init_1.runInitCli)(raw.slice(1));
|
|
245
|
+
}
|
|
246
|
+
catch (err) {
|
|
247
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
248
|
+
process.exit(1);
|
|
249
|
+
}
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
if (raw[0] === "scan") {
|
|
253
|
+
try {
|
|
254
|
+
await (0, scan_1.runScanCli)(raw.slice(1));
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
258
|
+
process.exit(1);
|
|
259
|
+
}
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
if (raw[0] === "prompt") {
|
|
263
|
+
try {
|
|
264
|
+
await (0, prompt_1.runPromptCli)(raw.slice(1));
|
|
265
|
+
}
|
|
266
|
+
catch (err) {
|
|
267
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
268
|
+
process.exit(1);
|
|
269
|
+
}
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
if (raw[0] === "explain") {
|
|
273
|
+
try {
|
|
274
|
+
await (0, explain_1.runExplainCli)(raw.slice(1));
|
|
275
|
+
}
|
|
276
|
+
catch (err) {
|
|
277
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
278
|
+
process.exit(1);
|
|
279
|
+
}
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
if (raw[0] === "replay") {
|
|
283
|
+
try {
|
|
284
|
+
await (0, replay_1.runReplayCli)(raw.slice(1));
|
|
285
|
+
}
|
|
286
|
+
catch (err) {
|
|
287
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
288
|
+
process.exit(1);
|
|
289
|
+
}
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
if (raw[0] === "check") {
|
|
293
|
+
try {
|
|
294
|
+
await (0, check_1.runCheckCli)(raw.slice(1));
|
|
295
|
+
}
|
|
296
|
+
catch (err) {
|
|
297
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
298
|
+
process.exit(1);
|
|
299
|
+
}
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
if (raw[0] === "eval") {
|
|
303
|
+
try {
|
|
304
|
+
await (0, eval_1.runEvalCli)(raw.slice(1));
|
|
305
|
+
}
|
|
306
|
+
catch (err) {
|
|
307
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
308
|
+
process.exit(1);
|
|
309
|
+
}
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
if (raw[0] === "export") {
|
|
313
|
+
try {
|
|
314
|
+
await (0, export_1.runExportCli)(raw.slice(1));
|
|
315
|
+
}
|
|
316
|
+
catch (err) {
|
|
317
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
318
|
+
process.exit(1);
|
|
319
|
+
}
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
if (raw[0] === "export-sessions") {
|
|
323
|
+
try {
|
|
324
|
+
await (0, export_sessions_1.runExportSessionsCli)(raw.slice(1));
|
|
325
|
+
}
|
|
326
|
+
catch (err) {
|
|
327
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
328
|
+
process.exit(1);
|
|
329
|
+
}
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
if (raw[0] === "demo") {
|
|
333
|
+
try {
|
|
334
|
+
await (0, demo_1.runDemoCli)(raw.slice(1));
|
|
335
|
+
}
|
|
336
|
+
catch (err) {
|
|
337
|
+
process.stderr.write(`${err instanceof Error ? err.stack ?? err.message : err}\n`);
|
|
338
|
+
process.exit(1);
|
|
339
|
+
}
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
const args = parseArgs(raw);
|
|
343
|
+
if (args.help) {
|
|
344
|
+
process.stdout.write(HELP);
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
if (args.version) {
|
|
348
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
349
|
+
const pkg = require("../package.json");
|
|
350
|
+
process.stdout.write(`${pkg.version}\n`);
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
// ---------------------------------------------------------------
|
|
354
|
+
// Resolve config (if any). Precedence: CLI flag > YAML > default.
|
|
355
|
+
// We load the YAML *first* so CLI flags can overwrite whatever we
|
|
356
|
+
// parsed; the opposite order (CLI then YAML) would silently undo
|
|
357
|
+
// ``--out foo.json`` when the YAML also set ``scan.out``.
|
|
358
|
+
// ---------------------------------------------------------------
|
|
359
|
+
let config;
|
|
360
|
+
if (args.configPath) {
|
|
361
|
+
try {
|
|
362
|
+
config = (0, config_1.loadConfig)(args.configPath);
|
|
363
|
+
}
|
|
364
|
+
catch (err) {
|
|
365
|
+
if (err instanceof config_1.ConfigError) {
|
|
366
|
+
process.stderr.write(`[config] ${err.message}\n`);
|
|
367
|
+
process.exit(2);
|
|
368
|
+
}
|
|
369
|
+
throw err;
|
|
370
|
+
}
|
|
371
|
+
// Warn about unset env-var references. We don't fail on these
|
|
372
|
+
// — shell semantics says a missing var expands to empty, and
|
|
373
|
+
// aborting a pure AST scan because an ``OPENAI_API_KEY`` env
|
|
374
|
+
// isn't exported would be actively unhelpful (the scanner
|
|
375
|
+
// itself doesn't use that key; only the downstream Python
|
|
376
|
+
// extractor does). But a warning means users find out before
|
|
377
|
+
// the Python side yells about ``api_key: ""``.
|
|
378
|
+
if (config.missingEnvVars.length) {
|
|
379
|
+
process.stderr.write(`[config] warning: ${config.missingEnvVars.length} ` +
|
|
380
|
+
`env var(s) referenced in ${config.sourcePath} are unset ` +
|
|
381
|
+
`and have no default, expanded to empty string: ` +
|
|
382
|
+
config.missingEnvVars.join(", ") +
|
|
383
|
+
`\n`);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
// ---------------------------------------------------------------
|
|
387
|
+
// Apply precedence for each knob.
|
|
388
|
+
// ---------------------------------------------------------------
|
|
389
|
+
const effectivePatterns = args.patterns.length > 0
|
|
390
|
+
? args.patterns
|
|
391
|
+
: config?.scan.patterns && config.scan.patterns.length > 0
|
|
392
|
+
? config.scan.patterns
|
|
393
|
+
: ["src/**/*.{ts,tsx,js,jsx}"];
|
|
394
|
+
const effectiveOut = args.out ?? config?.scan.out;
|
|
395
|
+
// Provenance is a boolean flag so we can't use ``??`` to mean
|
|
396
|
+
// "CLI not provided" — but since CLI parsing only sets
|
|
397
|
+
// includeProvenance to ``true`` on --provenance (never back to
|
|
398
|
+
// false from a flag), the YAML value only matters when the flag
|
|
399
|
+
// wasn't passed. Keep this explicit so future additions (e.g. a
|
|
400
|
+
// ``--no-provenance`` flag) don't accidentally tangle precedence.
|
|
401
|
+
const effectiveProvenance = args.includeProvenance
|
|
402
|
+
? true
|
|
403
|
+
: config?.scan.provenance === true;
|
|
404
|
+
// ---------------------------------------------------------------
|
|
405
|
+
// If a bare directory was passed, expand it to a glob. Kept here
|
|
406
|
+
// (not in the config loader) because ``scan.patterns`` in YAML is
|
|
407
|
+
// authored with globs already — only CLI args get the fast-path
|
|
408
|
+
// directory expansion.
|
|
409
|
+
// ---------------------------------------------------------------
|
|
410
|
+
const expanded = await Promise.all(effectivePatterns.map(async (p) => {
|
|
411
|
+
try {
|
|
412
|
+
const stat = await fs_1.promises.stat(p);
|
|
413
|
+
if (stat.isDirectory()) {
|
|
414
|
+
return `${p.replace(/\/$/, "")}/**/*.{ts,tsx,js,jsx}`;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
catch {
|
|
418
|
+
// not a real path — treat as a glob
|
|
419
|
+
}
|
|
420
|
+
return p;
|
|
421
|
+
}));
|
|
422
|
+
const scanOptions = config?.scan.ignore ? { ignore: config.scan.ignore } : {};
|
|
423
|
+
const result = await (0, index_1.scan)(expanded, scanOptions);
|
|
424
|
+
// ---------------------------------------------------------------
|
|
425
|
+
// Build the output payload. The extractor passthrough goes on a
|
|
426
|
+
// ``_extractor`` key with a leading underscore so Python's tool
|
|
427
|
+
// inventory loader (which accepts any top-level dict with a
|
|
428
|
+
// ``tools:`` key) ignores it as metadata rather than trying to
|
|
429
|
+
// interpret it as a tool. The Python ``sponsio scan`` side will
|
|
430
|
+
// read ``_extractor`` in a follow-up PR.
|
|
431
|
+
// ---------------------------------------------------------------
|
|
432
|
+
const basePayload = effectiveProvenance
|
|
433
|
+
? result
|
|
434
|
+
: { tools: result.tools };
|
|
435
|
+
const payload = { ...basePayload };
|
|
436
|
+
if (config && Object.keys(config.extractor).length > 0) {
|
|
437
|
+
payload._extractor = config.extractor;
|
|
438
|
+
}
|
|
439
|
+
const json = args.pretty
|
|
440
|
+
? JSON.stringify(payload, null, 2)
|
|
441
|
+
: JSON.stringify(payload);
|
|
442
|
+
if (effectiveOut) {
|
|
443
|
+
await fs_1.promises.writeFile(effectiveOut, json + "\n", "utf8");
|
|
444
|
+
process.stderr.write(`wrote ${result.tools.length} tools to ${effectiveOut}\n`);
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
process.stdout.write(json + "\n");
|
|
448
|
+
}
|
|
449
|
+
if (result.diagnostics.length) {
|
|
450
|
+
for (const d of result.diagnostics) {
|
|
451
|
+
process.stderr.write(`[${d.level}] ${d.filepath}:${d.line} ${d.message}\n`);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
main().catch((err) => {
|
|
456
|
+
process.stderr.write(`${err.stack ?? err.message ?? err}\n`);
|
|
457
|
+
process.exit(1);
|
|
458
|
+
});
|
|
459
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;;;;;;;;;;;GAqBG;;AAEH,2BAAoC;AACpC,qCAAuE;AACvE,uCAA0C;AAC1C,qCAAwC;AACxC,yCAA4C;AAC5C,yCAA4C;AAC5C,qCAAwC;AACxC,mCAAsC;AACtC,mCAAsC;AACtC,iCAAoC;AACpC,iCAAoC;AACpC,iCAAoC;AACpC,qCAAwC;AACxC,uCAA0C;AAC1C,qCAAwC;AACxC,mCAAsC;AACtC,iCAAoC;AACpC,qCAAwC;AACxC,uDAAyD;AACzD,iCAAoC;AACpC,mCAA+B;AAY/B,oEAAoE;AACpE,qEAAqE;AACrE,iEAAiE;AACjE,kEAAkE;AAClE,kEAAkE;AAClE,mCAAmC;AACnC,MAAM,IAAI,GACR;IACE,iEAAiE;IACjE,EAAE;IACF,QAAQ;IACR,mCAAmC;IACnC,EAAE;IACF,YAAY;IACZ,4FAA4F;IAC5F,EAAE;IACF,UAAU;IACV,gEAAgE;IAChE,+EAA+E;IAC/E,+EAA+E;IAC/E,qDAAqD;IACrD,yEAAyE;IACzE,sCAAsC;IACtC,oCAAoC;IACpC,EAAE;IACF,WAAW;IACX,iBAAiB;IACjB,gDAAgD;IAClD,0CAA0C;IAC1C,mFAAmF;IACnF,qBAAqB;IACrB,+BAA+B;IAC/B,+BAA+B;IAC/B,wBAAwB;IACxB,qDAAqD;IACrD,qDAAqD;IACrD,sBAAsB;IACtB,0BAA0B;IAC1B,yBAAyB;IACzB,qDAAqD;IACrD,4CAA4C;IAC5C,gCAAgC;IAChC,8BAA8B;IAC9B,mCAAmC;IACnC,oBAAoB;IACpB,kBAAkB;IAClB,yBAAyB;IACvB,EAAE;IACF,cAAc;IACd,gFAAgF;IAChF,8DAA8D;IAC9D,6EAA6E;IAC7E,iEAAiE;IACjE,6EAA6E;IAC7E,4EAA4E;IAC5E,yEAAyE;IACzE,6EAA6E;IAC7E,yDAAyD;IACzD,gEAAgE;IAChE,wDAAwD;IACxD,gFAAgF;IAChF,gHAAgH;IAChH,mFAAmF;IACnF,+EAA+E;IAC/E,wDAAwD;IACxD,4EAA4E;IAC5E,gFAAgF;IAChF,EAAE;IACF,oBAAoB;IACpB,kBAAkB;IAClB,SAAS;IACT,0DAA0D;IAC1D,oCAAoC;IACpC,6BAA6B;IAC7B,sBAAsB;IACtB,cAAc;IACd,sBAAsB;IACtB,sBAAsB;IACtB,2EAA2E;CAC5E,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEtB,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,IAAI,GAAY;QACpB,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,KAAK;QACd,iBAAiB,EAAE,KAAK;KACzB,CAAC;IACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,QAAQ;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;aAC9C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,WAAW;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;aACzD,IAAI,CAAC,KAAK,UAAU;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;aACzC,IAAI,CAAC,KAAK,cAAc;YAAE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;aACxD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC;YAC1C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;aAAM,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,IAAA,uBAAa,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,IAAA,qBAAY,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,IAAA,yBAAc,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,IAAA,yBAAc,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,IAAA,mBAAW,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,IAAA,qBAAY,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,IAAA,mBAAW,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,IAAA,iBAAU,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,IAAA,iBAAU,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,IAAA,iBAAU,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,IAAA,qBAAY,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,IAAA,uBAAa,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,IAAA,qBAAY,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,IAAA,mBAAW,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,IAAA,iBAAU,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,IAAA,qBAAY,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,iBAAiB,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,IAAA,sCAAoB,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,IAAA,iBAAU,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAE5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,8DAA8D;QAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,kEAAkE;IAClE,mEAAmE;IACnE,kEAAkE;IAClE,iEAAiE;IACjE,0DAA0D;IAC1D,kEAAkE;IAClE,IAAI,MAAiC,CAAC;IACtC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,oBAAW,EAAE,CAAC;gBAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,+DAA+D;QAC/D,6DAA6D;QAC7D,6DAA6D;QAC7D,0DAA0D;QAC1D,0DAA0D;QAC1D,8DAA8D;QAC9D,+CAA+C;QAC/C,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qBAAqB,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG;gBAClD,4BAA4B,MAAM,CAAC,UAAU,aAAa;gBAC1D,iDAAiD;gBACjD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChC,IAAI,CACP,CAAC;QACJ,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,kCAAkC;IAClC,kEAAkE;IAClE,MAAM,iBAAiB,GACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QACtB,CAAC,CAAC,IAAI,CAAC,QAAQ;QACf,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAC1D,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ;YACtB,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC;IAEnC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,IAAI,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC;IAElD,8DAA8D;IAC9D,uDAAuD;IACvD,+DAA+D;IAC/D,gEAAgE;IAChE,iEAAiE;IACjE,kEAAkE;IAClE,MAAM,mBAAmB,GAAG,IAAI,CAAC,iBAAiB;QAChD,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC;IAErC,kEAAkE;IAClE,kEAAkE;IAClE,kEAAkE;IAClE,gEAAgE;IAChE,uBAAuB;IACvB,kEAAkE;IAClE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,aAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAuB,CAAC;YACxD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,MAAM,MAAM,GAAG,MAAM,IAAA,YAAI,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAEjD,kEAAkE;IAClE,iEAAiE;IACjE,gEAAgE;IAChE,4DAA4D;IAC5D,+DAA+D;IAC/D,iEAAiE;IACjE,yCAAyC;IACzC,kEAAkE;IAClE,MAAM,WAAW,GAAG,mBAAmB;QACrC,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAE5B,MAAM,OAAO,GAA4B,EAAE,GAAG,WAAW,EAAE,CAAC;IAC5D,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvD,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;IACxC,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;QACtB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAE5B,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,aAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;QACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,SAAS,MAAM,CAAC,KAAK,CAAC,MAAM,aAAa,YAAY,IAAI,CAC1D,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,IAAI,CACvD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,IAAI,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ``sponsio.yaml`` loader for ``@sponsio/sdk``.
|
|
3
|
+
*
|
|
4
|
+
* Parity feature with the Python side's ``sponsio/config.py``. The
|
|
5
|
+
* goal is *semantic* parity — same YAML file works for both
|
|
6
|
+
* scanners, same env-var interpolation rules, same precedence
|
|
7
|
+
* (CLI flag > YAML > built-in default) — not byte-level parity of
|
|
8
|
+
* the parsed dataclasses (the TS scanner only needs a narrow slice
|
|
9
|
+
* of the schema).
|
|
10
|
+
*
|
|
11
|
+
* The three things we read:
|
|
12
|
+
*
|
|
13
|
+
* 1. ``scan:`` — optional section for TS-scanner-specific
|
|
14
|
+
* knobs: patterns, ignore list, output path, provenance
|
|
15
|
+
* inclusion. Lets a repo put all scanner config in one
|
|
16
|
+
* file instead of sprinkling CLI flags across workflows.
|
|
17
|
+
* 2. ``extractor:`` — *passthrough* (not interpreted here).
|
|
18
|
+
* We embed it in the output JSON as ``_extractor`` metadata
|
|
19
|
+
* so a downstream ``sponsio scan tools.json`` picks up the
|
|
20
|
+
* same LLM config without needing ``--config`` a second
|
|
21
|
+
* time. Mirrors the Python ``ExtractorSection``.
|
|
22
|
+
* 3. ``${ENV_VAR}`` / ``${ENV_VAR:-default}`` — interpolated
|
|
23
|
+
* on load with EXACTLY the same regex and semantics as
|
|
24
|
+
* Python (see ``_ENV_VAR_RE`` in ``sponsio/config.py``).
|
|
25
|
+
*
|
|
26
|
+
* Sections we *don't* parse: contracts, agents, judge, defaults.
|
|
27
|
+
* Those are Python-runtime concerns; touching them here would
|
|
28
|
+
* duplicate the Python schema and invite drift.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* Parse-time LLM config — passed through to the output JSON for
|
|
32
|
+
* Python-side consumption. All fields optional because partial
|
|
33
|
+
* configs are common (e.g. ``provider`` + ``model`` with the
|
|
34
|
+
* api_key coming from an env var later).
|
|
35
|
+
*/
|
|
36
|
+
export interface ExtractorSection {
|
|
37
|
+
provider?: string;
|
|
38
|
+
model?: string;
|
|
39
|
+
api_key?: string;
|
|
40
|
+
base_url?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* TS-scanner-specific config knobs. Everything optional; CLI flags
|
|
44
|
+
* still override whatever we find here.
|
|
45
|
+
*/
|
|
46
|
+
export interface ScanSection {
|
|
47
|
+
patterns?: string[];
|
|
48
|
+
ignore?: string[];
|
|
49
|
+
out?: string;
|
|
50
|
+
provenance?: boolean;
|
|
51
|
+
}
|
|
52
|
+
export interface SponsioConfig {
|
|
53
|
+
/** Raw extractor section — unvalidated, emitted verbatim so any
|
|
54
|
+
* future field the Python side adds flows through without a
|
|
55
|
+
* TS-side schema change. */
|
|
56
|
+
extractor: ExtractorSection;
|
|
57
|
+
scan: ScanSection;
|
|
58
|
+
/** Env-var references that appeared in the file but were unset
|
|
59
|
+
* AND had no default. The loader keeps going (shell-like
|
|
60
|
+
* semantics: the var expands to empty) but surfaces these for
|
|
61
|
+
* CLI-time warnings — silent empty strings are a classic
|
|
62
|
+
* "api_key: " source of head-scratching. */
|
|
63
|
+
missingEnvVars: string[];
|
|
64
|
+
/** Absolute path the file was loaded from — used in error
|
|
65
|
+
* messages and tests. */
|
|
66
|
+
sourcePath: string;
|
|
67
|
+
}
|
|
68
|
+
export declare class ConfigError extends Error {
|
|
69
|
+
readonly sourcePath?: string | undefined;
|
|
70
|
+
constructor(message: string, sourcePath?: string | undefined);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Load and parse ``sponsio.yaml``.
|
|
74
|
+
*
|
|
75
|
+
* Design notes:
|
|
76
|
+
* * We *don't* validate the full Python schema — only the two
|
|
77
|
+
* sections we care about. Everything else (``contracts``,
|
|
78
|
+
* ``agents``, ``judge``) sails through untouched so a
|
|
79
|
+
* single file can be authoritative for both Python and TS.
|
|
80
|
+
* * Missing file → ``ConfigError`` (not silently-empty config),
|
|
81
|
+
* because the user explicitly passed ``--config <path>`` and
|
|
82
|
+
* typos are the #1 failure mode.
|
|
83
|
+
* * Malformed YAML → ``ConfigError`` with the parser's line/col
|
|
84
|
+
* where available (js-yaml's default YAMLException already
|
|
85
|
+
* includes this in its ``reason`` field).
|
|
86
|
+
*/
|
|
87
|
+
export declare function loadConfig(configPath: string): SponsioConfig;
|
|
88
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAMH;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B;;iCAE6B;IAC7B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB;;;;iDAI6C;IAC7C,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB;8BAC0B;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,WAAY,SAAQ,KAAK;aACS,UAAU,CAAC,EAAE,MAAM;gBAApD,OAAO,EAAE,MAAM,EAAkB,UAAU,CAAC,EAAE,MAAM,YAAA;CAIjE;AA6CD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CA4D5D"}
|