trace-to-skill 0.1.26
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/LICENSE +190 -0
- package/README.md +456 -0
- package/dist/src/agentsLint.d.ts +15 -0
- package/dist/src/agentsLint.js +156 -0
- package/dist/src/agentsLint.js.map +1 -0
- package/dist/src/analyze.d.ts +3 -0
- package/dist/src/analyze.js +53 -0
- package/dist/src/analyze.js.map +1 -0
- package/dist/src/benchmark.d.ts +27 -0
- package/dist/src/benchmark.js +109 -0
- package/dist/src/benchmark.js.map +1 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +281 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/doctor.d.ts +18 -0
- package/dist/src/doctor.js +300 -0
- package/dist/src/doctor.js.map +1 -0
- package/dist/src/eval.d.ts +19 -0
- package/dist/src/eval.js +48 -0
- package/dist/src/eval.js.map +1 -0
- package/dist/src/github.d.ts +11 -0
- package/dist/src/github.js +66 -0
- package/dist/src/github.js.map +1 -0
- package/dist/src/githubContext.d.ts +6 -0
- package/dist/src/githubContext.js +60 -0
- package/dist/src/githubContext.js.map +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.js +11 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/init.d.ts +16 -0
- package/dist/src/init.js +186 -0
- package/dist/src/init.js.map +1 -0
- package/dist/src/parsers.d.ts +2 -0
- package/dist/src/parsers.js +138 -0
- package/dist/src/parsers.js.map +1 -0
- package/dist/src/report.d.ts +11 -0
- package/dist/src/report.js +273 -0
- package/dist/src/report.js.map +1 -0
- package/dist/src/rules.d.ts +2 -0
- package/dist/src/rules.js +400 -0
- package/dist/src/rules.js.map +1 -0
- package/dist/src/scorecard.d.ts +25 -0
- package/dist/src/scorecard.js +75 -0
- package/dist/src/scorecard.js.map +1 -0
- package/dist/src/types.d.ts +31 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/docs/ADOPTION_GUIDE.md +97 -0
- package/docs/AGENTS_LINT.md +30 -0
- package/docs/BENCHMARK.md +21 -0
- package/docs/FAILURE_TAXONOMY.md +57 -0
- package/docs/SCORECARD.md +51 -0
- package/examples/codex-failed-run.md +17 -0
- package/fixtures/codex-session.jsonl +4 -0
- package/fixtures/failed-run.md +28 -0
- package/fixtures/github-pr-event.json +6 -0
- package/fixtures/github-prompt-injection-event.json +9 -0
- package/fixtures/instruction-drift/AGENTS.md +5 -0
- package/fixtures/instruction-drift/CLAUDE.md +6 -0
- package/fixtures/mcp-risk.json +22 -0
- package/fixtures/prompt-injection.md +7 -0
- package/fixtures/safe-run.md +12 -0
- package/package.json +55 -0
- package/schemas/agents-lint-result.schema.json +67 -0
- package/schemas/analysis-result.schema.json +134 -0
- package/schemas/doctor-result.schema.json +81 -0
- package/schemas/scorecard-result.schema.json +102 -0
- package/skills/codex-readiness-auditor/SKILL.md +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Finding } from "./types.js";
|
|
2
|
+
export type DoctorStatus = "pass" | "warn" | "fail";
|
|
3
|
+
export interface DoctorCheck {
|
|
4
|
+
id: string;
|
|
5
|
+
status: DoctorStatus;
|
|
6
|
+
title: string;
|
|
7
|
+
detail: string;
|
|
8
|
+
recommendation?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface DoctorResult {
|
|
11
|
+
generatedAt: string;
|
|
12
|
+
root: string;
|
|
13
|
+
score: number;
|
|
14
|
+
summary: string;
|
|
15
|
+
checks: DoctorCheck[];
|
|
16
|
+
findings: Finding[];
|
|
17
|
+
}
|
|
18
|
+
export declare function doctorRepo(target?: string): Promise<DoctorResult>;
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import { promises as fs } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { collectFindings } from "./rules.js";
|
|
4
|
+
const SKIP_DIRS = new Set([".git", "node_modules", "dist", "coverage", ".next", "build"]);
|
|
5
|
+
const INSTRUCTION_FILES = [
|
|
6
|
+
"AGENTS.md",
|
|
7
|
+
"CLAUDE.md",
|
|
8
|
+
"GEMINI.md",
|
|
9
|
+
".github/copilot-instructions.md"
|
|
10
|
+
];
|
|
11
|
+
export async function doctorRepo(target = process.cwd()) {
|
|
12
|
+
const root = path.resolve(target);
|
|
13
|
+
const stats = await fs.stat(root);
|
|
14
|
+
if (!stats.isDirectory()) {
|
|
15
|
+
throw new Error("doctor requires a repository directory");
|
|
16
|
+
}
|
|
17
|
+
const files = await listFiles(root);
|
|
18
|
+
const fileSet = new Set(files);
|
|
19
|
+
const checks = await buildChecks(root, files, fileSet);
|
|
20
|
+
const findings = await collectRepoFindings(root, files);
|
|
21
|
+
const score = calculateDoctorScore(checks, findings);
|
|
22
|
+
return {
|
|
23
|
+
generatedAt: new Date().toISOString(),
|
|
24
|
+
root,
|
|
25
|
+
score,
|
|
26
|
+
summary: summarizeDoctor(score, checks, findings),
|
|
27
|
+
checks,
|
|
28
|
+
findings
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
async function buildChecks(root, files, fileSet) {
|
|
32
|
+
const checks = [];
|
|
33
|
+
const instructionFiles = files.filter((file) => isInstructionFile(file));
|
|
34
|
+
checks.push(checkInstructions(instructionFiles));
|
|
35
|
+
checks.push(checkCi(files));
|
|
36
|
+
checks.push(await checkValidation(root, fileSet));
|
|
37
|
+
checks.push(await checkLicense(root, fileSet));
|
|
38
|
+
checks.push(checkOssHealth(fileSet));
|
|
39
|
+
checks.push(checkDistribution(fileSet));
|
|
40
|
+
checks.push(checkTraceLoop(fileSet));
|
|
41
|
+
return checks;
|
|
42
|
+
}
|
|
43
|
+
function checkInstructions(instructionFiles) {
|
|
44
|
+
if (instructionFiles.includes("AGENTS.md")) {
|
|
45
|
+
return {
|
|
46
|
+
id: "agent-instructions",
|
|
47
|
+
status: "pass",
|
|
48
|
+
title: "Codex instructions found",
|
|
49
|
+
detail: "AGENTS.md is present, so Codex and other agents have a repository-level source of truth."
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
if (instructionFiles.length > 0) {
|
|
53
|
+
return {
|
|
54
|
+
id: "agent-instructions",
|
|
55
|
+
status: "warn",
|
|
56
|
+
title: "Agent instructions are tool-specific",
|
|
57
|
+
detail: `Found ${instructionFiles.join(", ")} but no AGENTS.md.`,
|
|
58
|
+
recommendation: "Add AGENTS.md as the shared maintainer-controlled instruction file, and have tool-specific files reference it."
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
id: "agent-instructions",
|
|
63
|
+
status: "fail",
|
|
64
|
+
title: "No agent instruction file found",
|
|
65
|
+
detail: "The repository has no AGENTS.md, CLAUDE.md, GEMINI.md, Cursor rules, or Copilot instruction file.",
|
|
66
|
+
recommendation: "Add AGENTS.md with validation, scope, safety, and completion-evidence rules before handing work to coding agents."
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function checkCi(files) {
|
|
70
|
+
const workflows = files.filter((file) => /^\.github\/workflows\/.+\.ya?ml$/i.test(file));
|
|
71
|
+
if (workflows.length > 0) {
|
|
72
|
+
return {
|
|
73
|
+
id: "ci",
|
|
74
|
+
status: "pass",
|
|
75
|
+
title: "GitHub Actions workflow found",
|
|
76
|
+
detail: `Found ${workflows.length} workflow file(s).`
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
id: "ci",
|
|
81
|
+
status: "fail",
|
|
82
|
+
title: "No GitHub Actions workflow found",
|
|
83
|
+
detail: "Codex-generated changes need a CI signal that maintainers and contributors can see.",
|
|
84
|
+
recommendation: "Add at least one GitHub Actions workflow for tests, typecheck, lint, or agent-learning evaluation."
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
async function checkValidation(root, fileSet) {
|
|
88
|
+
const packageJson = await readJsonObject(path.join(root, "package.json"));
|
|
89
|
+
const scripts = asObject(packageJson?.scripts);
|
|
90
|
+
const validationScripts = scripts
|
|
91
|
+
? Object.keys(scripts).filter((name) => /^(test|check|build|lint|typecheck|ci)$/i.test(name))
|
|
92
|
+
: [];
|
|
93
|
+
if (validationScripts.length > 0) {
|
|
94
|
+
return {
|
|
95
|
+
id: "validation",
|
|
96
|
+
status: "pass",
|
|
97
|
+
title: "Validation scripts found",
|
|
98
|
+
detail: `package.json exposes ${validationScripts.map((name) => `"${name}"`).join(", ")}.`
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const knownManifests = ["Cargo.toml", "go.mod", "pyproject.toml", "pom.xml", "build.gradle", "Package.swift"];
|
|
102
|
+
if (knownManifests.some((file) => fileSet.has(file))) {
|
|
103
|
+
return {
|
|
104
|
+
id: "validation",
|
|
105
|
+
status: "warn",
|
|
106
|
+
title: "Project manifest found without obvious validation script",
|
|
107
|
+
detail: "A language manifest exists, but doctor could not find a standard validation entrypoint.",
|
|
108
|
+
recommendation: "Document the canonical test/build/lint command in AGENTS.md and CI."
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
id: "validation",
|
|
113
|
+
status: "warn",
|
|
114
|
+
title: "No validation command detected",
|
|
115
|
+
detail: "Doctor could not find a package.json validation script or common language manifest.",
|
|
116
|
+
recommendation: "Add a repeatable validation command so Codex can prove changes before completion."
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
async function checkLicense(root, fileSet) {
|
|
120
|
+
const licenseFile = filesFirst(fileSet, ["LICENSE", "LICENSE.md", "COPYING"]);
|
|
121
|
+
if (!licenseFile) {
|
|
122
|
+
return {
|
|
123
|
+
id: "license",
|
|
124
|
+
status: "fail",
|
|
125
|
+
title: "No license file found",
|
|
126
|
+
detail: "Open-source users and program reviewers need clear reuse terms.",
|
|
127
|
+
recommendation: "Add a standard OSI-approved license such as Apache-2.0 or MIT."
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
const content = await fs.readFile(path.join(root, licenseFile), "utf8");
|
|
131
|
+
const normalized = content.toLowerCase();
|
|
132
|
+
const license = normalized.includes("apache license") ? "Apache-2.0" :
|
|
133
|
+
normalized.includes("mit license") ? "MIT" :
|
|
134
|
+
normalized.includes("bsd") ? "BSD-style" :
|
|
135
|
+
"custom or unrecognized";
|
|
136
|
+
return {
|
|
137
|
+
id: "license",
|
|
138
|
+
status: license === "custom or unrecognized" ? "warn" : "pass",
|
|
139
|
+
title: "License file found",
|
|
140
|
+
detail: `${licenseFile} appears to be ${license}.`,
|
|
141
|
+
recommendation: license === "custom or unrecognized" ? "Prefer a standard OSI-approved license to reduce adoption friction." : undefined
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function checkOssHealth(fileSet) {
|
|
145
|
+
const present = ["README.md", "CONTRIBUTING.md", "SECURITY.md", "CODE_OF_CONDUCT.md"].filter((file) => fileSet.has(file));
|
|
146
|
+
if (present.length >= 3 && present.includes("README.md")) {
|
|
147
|
+
return {
|
|
148
|
+
id: "oss-health",
|
|
149
|
+
status: "pass",
|
|
150
|
+
title: "Open-source maintenance files found",
|
|
151
|
+
detail: `Found ${present.join(", ")}.`
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
id: "oss-health",
|
|
156
|
+
status: "warn",
|
|
157
|
+
title: "Open-source maintenance metadata is thin",
|
|
158
|
+
detail: `Found ${present.join(", ") || "none of README.md, CONTRIBUTING.md, SECURITY.md, CODE_OF_CONDUCT.md"}.`,
|
|
159
|
+
recommendation: "Add README, contribution, security, and conduct docs so contributors and agent-generated PRs have a clear path."
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
function checkDistribution(fileSet) {
|
|
163
|
+
const channels = [
|
|
164
|
+
fileSet.has("package.json") ? "npm package" : undefined,
|
|
165
|
+
fileSet.has("action.yml") || fileSet.has("action.yaml") ? "GitHub Action" : undefined,
|
|
166
|
+
fileSet.has("Dockerfile") ? "Docker image" : undefined
|
|
167
|
+
].filter((item) => Boolean(item));
|
|
168
|
+
if (channels.length > 0) {
|
|
169
|
+
return {
|
|
170
|
+
id: "distribution",
|
|
171
|
+
status: "pass",
|
|
172
|
+
title: "Distribution surface found",
|
|
173
|
+
detail: `Detected ${channels.join(", ")}.`
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
id: "distribution",
|
|
178
|
+
status: "warn",
|
|
179
|
+
title: "No obvious installation surface found",
|
|
180
|
+
detail: "Users are more likely to try and star a project when installation is one command.",
|
|
181
|
+
recommendation: "Provide an npm package, GitHub Action, Docker image, or binary release."
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
function checkTraceLoop(fileSet) {
|
|
185
|
+
const hasRuns = fileSet.has("runs/README.md") || fileSet.has("runs/.gitkeep");
|
|
186
|
+
const hasTraceToSkillWorkflow = Array.from(fileSet).some((file) => /^\.github\/workflows\/.+\.ya?ml$/i.test(file));
|
|
187
|
+
if (hasRuns && hasTraceToSkillWorkflow) {
|
|
188
|
+
return {
|
|
189
|
+
id: "agent-learning-loop",
|
|
190
|
+
status: "pass",
|
|
191
|
+
title: "Agent learning loop scaffold found",
|
|
192
|
+
detail: "A runs directory and GitHub workflow are present."
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
return {
|
|
196
|
+
id: "agent-learning-loop",
|
|
197
|
+
status: "warn",
|
|
198
|
+
title: "Agent learning loop is not scaffolded",
|
|
199
|
+
detail: "Doctor did not find both a runs directory scaffold and GitHub workflow.",
|
|
200
|
+
recommendation: "Run trace-to-skill init --comment --sarif to collect traces, report findings, and gate repeated failures."
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
async function collectRepoFindings(root, files) {
|
|
204
|
+
const candidates = files.filter((file) => !isEvidenceArchive(file) && (isInstructionFile(file) || isMcpConfigCandidate(file)));
|
|
205
|
+
if (candidates.length === 0) {
|
|
206
|
+
return [];
|
|
207
|
+
}
|
|
208
|
+
const inputs = [];
|
|
209
|
+
for (const file of candidates.slice(0, 40)) {
|
|
210
|
+
const fullPath = path.join(root, file);
|
|
211
|
+
const content = await fs.readFile(fullPath, "utf8");
|
|
212
|
+
inputs.push({ path: file, content });
|
|
213
|
+
}
|
|
214
|
+
return collectFindings(inputs).filter((finding) => finding.kind === "ignored_instruction" ||
|
|
215
|
+
finding.kind === "mcp_risk" ||
|
|
216
|
+
finding.kind === "secret_exposure" ||
|
|
217
|
+
finding.kind === "hidden_unicode");
|
|
218
|
+
}
|
|
219
|
+
async function listFiles(root) {
|
|
220
|
+
const files = [];
|
|
221
|
+
async function visit(dir) {
|
|
222
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
223
|
+
for (const entry of entries) {
|
|
224
|
+
const fullPath = path.join(dir, entry.name);
|
|
225
|
+
const relative = path.relative(root, fullPath).split(path.sep).join("/");
|
|
226
|
+
if (entry.isDirectory()) {
|
|
227
|
+
if (!SKIP_DIRS.has(entry.name)) {
|
|
228
|
+
await visit(fullPath);
|
|
229
|
+
}
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
if (entry.isFile()) {
|
|
233
|
+
files.push(relative);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
await visit(root);
|
|
238
|
+
return files.sort((a, b) => a.localeCompare(b));
|
|
239
|
+
}
|
|
240
|
+
function calculateDoctorScore(checks, findings) {
|
|
241
|
+
const checkPenalty = checks.reduce((total, check) => {
|
|
242
|
+
if (check.status === "fail") {
|
|
243
|
+
return total + 15;
|
|
244
|
+
}
|
|
245
|
+
if (check.status === "warn") {
|
|
246
|
+
return total + 7;
|
|
247
|
+
}
|
|
248
|
+
return total;
|
|
249
|
+
}, 0);
|
|
250
|
+
const findingPenalty = findings.reduce((total, finding) => {
|
|
251
|
+
const value = {
|
|
252
|
+
low: 2,
|
|
253
|
+
medium: 5,
|
|
254
|
+
high: 10,
|
|
255
|
+
critical: 20
|
|
256
|
+
}[finding.severity];
|
|
257
|
+
return total + value;
|
|
258
|
+
}, 0);
|
|
259
|
+
return Math.max(0, Math.min(100, 100 - checkPenalty - findingPenalty));
|
|
260
|
+
}
|
|
261
|
+
function summarizeDoctor(score, checks, findings) {
|
|
262
|
+
if (checks.some((check) => check.status === "fail") || findings.some((finding) => finding.severity === "critical")) {
|
|
263
|
+
return "Repository is not ready for broad Codex automation. Fix failed checks and critical findings first.";
|
|
264
|
+
}
|
|
265
|
+
if (score >= 85) {
|
|
266
|
+
return "Repository is Codex-ready, with clear maintainer controls and validation evidence.";
|
|
267
|
+
}
|
|
268
|
+
if (score >= 70) {
|
|
269
|
+
return "Repository is close to Codex-ready, but a few maintainer controls should be tightened.";
|
|
270
|
+
}
|
|
271
|
+
return "Repository needs clearer agent instructions, validation, or OSS maintenance metadata before broad automation.";
|
|
272
|
+
}
|
|
273
|
+
function isInstructionFile(file) {
|
|
274
|
+
return INSTRUCTION_FILES.includes(file) ||
|
|
275
|
+
/(^|\/)(AGENTS|CLAUDE|GEMINI|COPILOT|copilot-instructions)\.md$/i.test(file) ||
|
|
276
|
+
/^\.cursor\/rules\/.+/i.test(file);
|
|
277
|
+
}
|
|
278
|
+
function isMcpConfigCandidate(file) {
|
|
279
|
+
return /(^|\/)(mcp|\.mcp|mcp-config|model-context)\.(json|jsonc)$/i.test(file) ||
|
|
280
|
+
/(^|\/)\.cursor\/mcp\.json$/i.test(file);
|
|
281
|
+
}
|
|
282
|
+
function isEvidenceArchive(file) {
|
|
283
|
+
return /^(fixtures|examples|runs)\//i.test(file);
|
|
284
|
+
}
|
|
285
|
+
function filesFirst(fileSet, names) {
|
|
286
|
+
return names.find((name) => fileSet.has(name));
|
|
287
|
+
}
|
|
288
|
+
async function readJsonObject(filePath) {
|
|
289
|
+
try {
|
|
290
|
+
const raw = await fs.readFile(filePath, "utf8");
|
|
291
|
+
return asObject(JSON.parse(raw));
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
return undefined;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
function asObject(value) {
|
|
298
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : undefined;
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AnalysisResult } from "./types.js";
|
|
2
|
+
export interface EvalResult {
|
|
3
|
+
passed: boolean;
|
|
4
|
+
score: number;
|
|
5
|
+
threshold: number;
|
|
6
|
+
criticalFindings: number;
|
|
7
|
+
message: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ComparisonResult {
|
|
10
|
+
decision: "keep" | "revise" | "reject";
|
|
11
|
+
beforeScore: number;
|
|
12
|
+
afterScore: number;
|
|
13
|
+
delta: number;
|
|
14
|
+
beforeCriticalFindings: number;
|
|
15
|
+
afterCriticalFindings: number;
|
|
16
|
+
message: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function evaluate(result: AnalysisResult, threshold?: number): EvalResult;
|
|
19
|
+
export declare function compareAnalyses(before: AnalysisResult, after: AnalysisResult): ComparisonResult;
|
package/dist/src/eval.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export function evaluate(result, threshold = 75) {
|
|
2
|
+
const criticalFindings = result.findings.filter((finding) => finding.severity === "critical").length;
|
|
3
|
+
const passed = result.score >= threshold && criticalFindings === 0;
|
|
4
|
+
return {
|
|
5
|
+
passed,
|
|
6
|
+
score: result.score,
|
|
7
|
+
threshold,
|
|
8
|
+
criticalFindings,
|
|
9
|
+
message: passed
|
|
10
|
+
? `Agent workflow passed with score ${result.score}/100.`
|
|
11
|
+
: `Agent workflow failed: score ${result.score}/100, critical findings ${criticalFindings}.`
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function compareAnalyses(before, after) {
|
|
15
|
+
const beforeCriticalFindings = countCritical(before);
|
|
16
|
+
const afterCriticalFindings = countCritical(after);
|
|
17
|
+
const delta = after.score - before.score;
|
|
18
|
+
const criticalDelta = afterCriticalFindings - beforeCriticalFindings;
|
|
19
|
+
const decision = decide(delta, criticalDelta, afterCriticalFindings);
|
|
20
|
+
return {
|
|
21
|
+
decision,
|
|
22
|
+
beforeScore: before.score,
|
|
23
|
+
afterScore: after.score,
|
|
24
|
+
delta,
|
|
25
|
+
beforeCriticalFindings,
|
|
26
|
+
afterCriticalFindings,
|
|
27
|
+
message: buildComparisonMessage(decision, delta, beforeCriticalFindings, afterCriticalFindings)
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function decide(delta, criticalDelta, afterCriticalFindings) {
|
|
31
|
+
if (criticalDelta > 0 || delta < -5) {
|
|
32
|
+
return "reject";
|
|
33
|
+
}
|
|
34
|
+
if (delta >= 5 && afterCriticalFindings === 0) {
|
|
35
|
+
return "keep";
|
|
36
|
+
}
|
|
37
|
+
return "revise";
|
|
38
|
+
}
|
|
39
|
+
function countCritical(result) {
|
|
40
|
+
return result.findings.filter((finding) => finding.severity === "critical").length;
|
|
41
|
+
}
|
|
42
|
+
function buildComparisonMessage(decision, delta, beforeCriticalFindings, afterCriticalFindings) {
|
|
43
|
+
return `Decision: ${decision}. Score delta ${formatDelta(delta)}. Critical findings ${beforeCriticalFindings} -> ${afterCriticalFindings}.`;
|
|
44
|
+
}
|
|
45
|
+
function formatDelta(value) {
|
|
46
|
+
return value >= 0 ? `+${value}` : String(value);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=eval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval.js","sourceRoot":"","sources":["../../src/eval.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,QAAQ,CAAC,MAAsB,EAAE,SAAS,GAAG,EAAE;IAC7D,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;IACrG,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,SAAS,IAAI,gBAAgB,KAAK,CAAC,CAAC;IAEnE,OAAO;QACL,MAAM;QACN,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS;QACT,gBAAgB;QAChB,OAAO,EAAE,MAAM;YACb,CAAC,CAAC,oCAAoC,MAAM,CAAC,KAAK,OAAO;YACzD,CAAC,CAAC,gCAAgC,MAAM,CAAC,KAAK,2BAA2B,gBAAgB,GAAG;KAC/F,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAsB,EAAE,KAAqB;IAC3E,MAAM,sBAAsB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,qBAAqB,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IACzC,MAAM,aAAa,GAAG,qBAAqB,GAAG,sBAAsB,CAAC;IACrE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,qBAAqB,CAAC,CAAC;IAErE,OAAO;QACL,QAAQ;QACR,WAAW,EAAE,MAAM,CAAC,KAAK;QACzB,UAAU,EAAE,KAAK,CAAC,KAAK;QACvB,KAAK;QACL,sBAAsB;QACtB,qBAAqB;QACrB,OAAO,EAAE,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,CAAC;KAChG,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,KAAa,EAAE,aAAqB,EAAE,qBAA6B;IACjF,IAAI,aAAa,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QACpC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,KAAK,IAAI,CAAC,IAAI,qBAAqB,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CAAC,MAAsB;IAC3C,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;AACrF,CAAC;AAED,SAAS,sBAAsB,CAC7B,QAAsC,EACtC,KAAa,EACb,sBAA8B,EAC9B,qBAA6B;IAE7B,OAAO,aAAa,QAAQ,iBAAiB,WAAW,CAAC,KAAK,CAAC,uBAAuB,sBAAsB,OAAO,qBAAqB,GAAG,CAAC;AAC9I,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface GitHubCommentOptions {
|
|
2
|
+
token?: string;
|
|
3
|
+
repository?: string;
|
|
4
|
+
eventPath?: string;
|
|
5
|
+
body: string;
|
|
6
|
+
dryRun?: boolean;
|
|
7
|
+
marker?: string;
|
|
8
|
+
reportName?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function postPullRequestComment(options: GitHubCommentOptions): Promise<string>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
const MARKER = "<!-- trace-to-skill-report -->";
|
|
3
|
+
export async function postPullRequestComment(options) {
|
|
4
|
+
const token = options.token ?? process.env.GITHUB_TOKEN;
|
|
5
|
+
const repository = options.repository ?? process.env.GITHUB_REPOSITORY;
|
|
6
|
+
const eventPath = options.eventPath ?? process.env.GITHUB_EVENT_PATH;
|
|
7
|
+
const marker = options.marker ?? MARKER;
|
|
8
|
+
const reportName = options.reportName ?? "trace-to-skill report";
|
|
9
|
+
if (!repository) {
|
|
10
|
+
throw new Error("GITHUB_REPOSITORY is required for PR comments.");
|
|
11
|
+
}
|
|
12
|
+
const pullNumber = await resolvePullRequestNumber(eventPath);
|
|
13
|
+
if (!pullNumber) {
|
|
14
|
+
throw new Error("No pull_request number found in GITHUB_EVENT_PATH.");
|
|
15
|
+
}
|
|
16
|
+
if (options.dryRun) {
|
|
17
|
+
return `dry-run: would post ${reportName} to ${repository}#${pullNumber}`;
|
|
18
|
+
}
|
|
19
|
+
if (!token) {
|
|
20
|
+
throw new Error("GITHUB_TOKEN is required for PR comments.");
|
|
21
|
+
}
|
|
22
|
+
const commentsUrl = `https://api.github.com/repos/${repository}/issues/${pullNumber}/comments`;
|
|
23
|
+
const comments = (await githubRequest(commentsUrl, token));
|
|
24
|
+
const existing = comments.find((comment) => comment.user?.type === "Bot" && comment.body?.includes(marker));
|
|
25
|
+
if (existing) {
|
|
26
|
+
await githubRequest(`https://api.github.com/repos/${repository}/issues/comments/${existing.id}`, token, {
|
|
27
|
+
method: "PATCH",
|
|
28
|
+
body: JSON.stringify({ body: options.body })
|
|
29
|
+
});
|
|
30
|
+
return `updated ${reportName} comment on ${repository}#${pullNumber}`;
|
|
31
|
+
}
|
|
32
|
+
await githubRequest(commentsUrl, token, {
|
|
33
|
+
method: "POST",
|
|
34
|
+
body: JSON.stringify({ body: options.body })
|
|
35
|
+
});
|
|
36
|
+
return `posted ${reportName} comment on ${repository}#${pullNumber}`;
|
|
37
|
+
}
|
|
38
|
+
async function resolvePullRequestNumber(eventPath) {
|
|
39
|
+
if (!eventPath) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
const event = JSON.parse(await readFile(eventPath, "utf8"));
|
|
43
|
+
return event.pull_request?.number ?? event.number;
|
|
44
|
+
}
|
|
45
|
+
async function githubRequest(url, token, init = {}) {
|
|
46
|
+
const response = await fetch(url, {
|
|
47
|
+
...init,
|
|
48
|
+
headers: {
|
|
49
|
+
Accept: "application/vnd.github+json",
|
|
50
|
+
Authorization: `Bearer ${token}`,
|
|
51
|
+
"Content-Type": "application/json",
|
|
52
|
+
"User-Agent": "trace-to-skill",
|
|
53
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
54
|
+
...init.headers
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
if (!response.ok) {
|
|
58
|
+
const text = await response.text();
|
|
59
|
+
throw new Error(`GitHub API ${response.status}: ${text.slice(0, 500)}`);
|
|
60
|
+
}
|
|
61
|
+
if (response.status === 204) {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
return response.json();
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/github.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAoB5C,MAAM,MAAM,GAAG,gCAAgC,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,OAA6B;IACxE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACxD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACvE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACrE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;IACxC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,uBAAuB,CAAC;IAEjE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,wBAAwB,CAAC,SAAS,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,uBAAuB,UAAU,OAAO,UAAU,IAAI,UAAU,EAAE,CAAC;IAC5E,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,WAAW,GAAG,gCAAgC,UAAU,WAAW,UAAU,WAAW,CAAC;IAC/F,MAAM,QAAQ,GAAG,CAAC,MAAM,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,CAAsB,CAAC;IAChF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAE5G,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,aAAa,CAAC,gCAAgC,UAAU,oBAAoB,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE;YACtG,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;SAC7C,CAAC,CAAC;QACH,OAAO,WAAW,UAAU,eAAe,UAAU,IAAI,UAAU,EAAE,CAAC;IACxE,CAAC;IAED,MAAM,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE;QACtC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;KAC7C,CAAC,CAAC;IAEH,OAAO,UAAU,UAAU,eAAe,UAAU,IAAI,UAAU,EAAE,CAAC;AACvE,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,SAA6B;IACnE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAKzD,CAAC;IAEF,OAAO,KAAK,CAAC,YAAY,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;AACpD,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,KAAa,EAAE,OAAoB,EAAE;IAC7E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,GAAG,IAAI;QACP,OAAO,EAAE;YACP,MAAM,EAAE,6BAA6B;YACrC,aAAa,EAAE,UAAU,KAAK,EAAE;YAChC,cAAc,EAAE,kBAAkB;YAClC,YAAY,EAAE,gBAAgB;YAC9B,sBAAsB,EAAE,YAAY;YACpC,GAAG,IAAI,CAAC,OAAO;SAChB;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AnalysisResult, TraceInput } from "./types.js";
|
|
2
|
+
export interface GithubContextResult extends AnalysisResult {
|
|
3
|
+
eventPath: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function analyzeGithubEventContext(eventPath: string): Promise<GithubContextResult>;
|
|
6
|
+
export declare function extractGithubContextInputs(event: unknown): TraceInput[];
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { analyzeInputs } from "./analyze.js";
|
|
3
|
+
export async function analyzeGithubEventContext(eventPath) {
|
|
4
|
+
const raw = await readFile(eventPath, "utf8");
|
|
5
|
+
const parsed = JSON.parse(raw);
|
|
6
|
+
const inputs = extractGithubContextInputs(parsed);
|
|
7
|
+
const result = analyzeInputs(inputs);
|
|
8
|
+
return {
|
|
9
|
+
...result,
|
|
10
|
+
eventPath
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export function extractGithubContextInputs(event) {
|
|
14
|
+
const root = asObject(event);
|
|
15
|
+
if (!root) {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
const inputs = [];
|
|
19
|
+
addObjectText(inputs, "github-event/action", root, ["action"]);
|
|
20
|
+
addObjectText(inputs, "github-event/pull_request", root.pull_request, ["title", "body"]);
|
|
21
|
+
addObjectText(inputs, "github-event/issue", root.issue, ["title", "body"]);
|
|
22
|
+
addObjectText(inputs, "github-event/comment", root.comment, ["body"]);
|
|
23
|
+
addObjectText(inputs, "github-event/discussion", root.discussion, ["title", "body"]);
|
|
24
|
+
addObjectText(inputs, "github-event/review", root.review, ["body"]);
|
|
25
|
+
addObjectText(inputs, "github-event/check_run", asObject(root.check_run)?.output, ["title", "summary", "text"]);
|
|
26
|
+
const commits = Array.isArray(root.commits) ? root.commits : [];
|
|
27
|
+
commits.slice(0, 20).forEach((commit, index) => {
|
|
28
|
+
addObjectText(inputs, `github-event/commit-${index + 1}`, commit, ["message"]);
|
|
29
|
+
});
|
|
30
|
+
return inputs.length > 0 ? inputs : [{
|
|
31
|
+
path: "github-event/empty",
|
|
32
|
+
content: "No supported GitHub event text fields found."
|
|
33
|
+
}];
|
|
34
|
+
}
|
|
35
|
+
function addObjectText(inputs, label, value, keys) {
|
|
36
|
+
const object = asObject(value);
|
|
37
|
+
if (!object) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const lines = [];
|
|
41
|
+
for (const key of keys) {
|
|
42
|
+
const text = stringValue(object[key]);
|
|
43
|
+
if (text) {
|
|
44
|
+
lines.push(`${key}: ${text}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (lines.length > 0) {
|
|
48
|
+
inputs.push({
|
|
49
|
+
path: label,
|
|
50
|
+
content: lines.join("\n")
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function stringValue(value) {
|
|
55
|
+
return typeof value === "string" && value.trim().length > 0 ? value : undefined;
|
|
56
|
+
}
|
|
57
|
+
function asObject(value) {
|
|
58
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : undefined;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=githubContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"githubContext.js","sourceRoot":"","sources":["../../src/githubContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { lintAgents, renderAgentsLintMarkdown } from "./agentsLint.js";
|
|
2
|
+
export { analyzeInputs, analyzeTargets } from "./analyze.js";
|
|
3
|
+
export { renderBenchmarkMarkdown, runBenchmark } from "./benchmark.js";
|
|
4
|
+
export { doctorRepo } from "./doctor.js";
|
|
5
|
+
export { compareAnalyses, evaluate } from "./eval.js";
|
|
6
|
+
export { analyzeGithubEventContext, extractGithubContextInputs } from "./githubContext.js";
|
|
7
|
+
export { postPullRequestComment } from "./github.js";
|
|
8
|
+
export { initProject } from "./init.js";
|
|
9
|
+
export { renderAgentsRules, renderComparison, renderDoctorMarkdown, renderDoctorPrComment, renderMarkdown, renderPrComment, renderSarif, renderSkill } from "./report.js";
|
|
10
|
+
export { renderScorecardMarkdown, renderScorecardPrComment, runScorecard } from "./scorecard.js";
|
|
11
|
+
export type { AnalysisResult, Finding, FindingKind, Severity } from "./types.js";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { lintAgents, renderAgentsLintMarkdown } from "./agentsLint.js";
|
|
2
|
+
export { analyzeInputs, analyzeTargets } from "./analyze.js";
|
|
3
|
+
export { renderBenchmarkMarkdown, runBenchmark } from "./benchmark.js";
|
|
4
|
+
export { doctorRepo } from "./doctor.js";
|
|
5
|
+
export { compareAnalyses, evaluate } from "./eval.js";
|
|
6
|
+
export { analyzeGithubEventContext, extractGithubContextInputs } from "./githubContext.js";
|
|
7
|
+
export { postPullRequestComment } from "./github.js";
|
|
8
|
+
export { initProject } from "./init.js";
|
|
9
|
+
export { renderAgentsRules, renderComparison, renderDoctorMarkdown, renderDoctorPrComment, renderMarkdown, renderPrComment, renderSarif, renderSkill } from "./report.js";
|
|
10
|
+
export { renderScorecardMarkdown, renderScorecardPrComment, runScorecard } from "./scorecard.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1K,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|