mewkit 1.10.3 → 1.10.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 +49 -4
- package/dist/commands/budget.d.ts +13 -0
- package/dist/commands/budget.d.ts.map +1 -1
- package/dist/commands/budget.js +45 -0
- package/dist/commands/budget.js.map +1 -1
- package/dist/commands/doctor-checks.d.ts +1 -1
- package/dist/commands/doctor-checks.d.ts.map +1 -1
- package/dist/commands/doctor-checks.js +7 -1
- package/dist/commands/doctor-checks.js.map +1 -1
- package/dist/commands/doctor-hard-gates.d.ts +3 -0
- package/dist/commands/doctor-hard-gates.d.ts.map +1 -0
- package/dist/commands/doctor-hard-gates.js +170 -0
- package/dist/commands/doctor-hard-gates.js.map +1 -0
- package/dist/commands/doctor.d.ts +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +12 -3
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/evolve.d.ts +11 -0
- package/dist/commands/evolve.d.ts.map +1 -0
- package/dist/commands/evolve.js +63 -0
- package/dist/commands/evolve.js.map +1 -0
- package/dist/commands/health.d.ts +14 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +193 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +64 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/inventory.d.ts +13 -0
- package/dist/commands/inventory.d.ts.map +1 -0
- package/dist/commands/inventory.js +85 -0
- package/dist/commands/inventory.js.map +1 -0
- package/dist/commands/pack-helpers.d.ts +37 -0
- package/dist/commands/pack-helpers.d.ts.map +1 -0
- package/dist/commands/pack-helpers.js +105 -0
- package/dist/commands/pack-helpers.js.map +1 -0
- package/dist/commands/pack.d.ts +9 -0
- package/dist/commands/pack.d.ts.map +1 -0
- package/dist/commands/pack.js +160 -0
- package/dist/commands/pack.js.map +1 -0
- package/dist/commands/policy.d.ts +8 -0
- package/dist/commands/policy.d.ts.map +1 -0
- package/dist/commands/policy.js +65 -0
- package/dist/commands/policy.js.map +1 -0
- package/dist/commands/portability.d.ts +7 -0
- package/dist/commands/portability.d.ts.map +1 -0
- package/dist/commands/portability.js +50 -0
- package/dist/commands/portability.js.map +1 -0
- package/dist/commands/providers.d.ts +6 -0
- package/dist/commands/providers.d.ts.map +1 -0
- package/dist/commands/providers.js +94 -0
- package/dist/commands/providers.js.map +1 -0
- package/dist/commands/reflect.d.ts +14 -0
- package/dist/commands/reflect.d.ts.map +1 -0
- package/dist/commands/reflect.js +135 -0
- package/dist/commands/reflect.js.map +1 -0
- package/dist/commands/simulate.d.ts +14 -0
- package/dist/commands/simulate.d.ts.map +1 -0
- package/dist/commands/simulate.js +86 -0
- package/dist/commands/simulate.js.map +1 -0
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/commands/upgrade.js +22 -1
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/commands/validate.d.ts +29 -0
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +242 -94
- package/dist/commands/validate.js.map +1 -1
- package/dist/core/build-inventory.d.ts +71 -0
- package/dist/core/build-inventory.d.ts.map +1 -0
- package/dist/core/build-inventory.js +222 -0
- package/dist/core/build-inventory.js.map +1 -0
- package/dist/core/check-packs.d.ts +13 -0
- package/dist/core/check-packs.d.ts.map +1 -0
- package/dist/core/check-packs.js +131 -0
- package/dist/core/check-packs.js.map +1 -0
- package/dist/core/check-stale-index.d.ts +35 -0
- package/dist/core/check-stale-index.d.ts.map +1 -0
- package/dist/core/check-stale-index.js +132 -0
- package/dist/core/check-stale-index.js.map +1 -0
- package/dist/core/check-workflow-drift.d.ts +49 -0
- package/dist/core/check-workflow-drift.d.ts.map +1 -0
- package/dist/core/check-workflow-drift.js +226 -0
- package/dist/core/check-workflow-drift.js.map +1 -0
- package/dist/core/context-budget.d.ts +9 -0
- package/dist/core/context-budget.d.ts.map +1 -0
- package/dist/core/context-budget.js +46 -0
- package/dist/core/context-budget.js.map +1 -0
- package/dist/core/event-log.d.ts +44 -0
- package/dist/core/event-log.d.ts.map +1 -0
- package/dist/core/event-log.js +169 -0
- package/dist/core/event-log.js.map +1 -0
- package/dist/core/evolution/event-clusters.d.ts +4 -0
- package/dist/core/evolution/event-clusters.d.ts.map +1 -0
- package/dist/core/evolution/event-clusters.js +82 -0
- package/dist/core/evolution/event-clusters.js.map +1 -0
- package/dist/core/evolution/recommendation-renderer.d.ts +3 -0
- package/dist/core/evolution/recommendation-renderer.d.ts.map +1 -0
- package/dist/core/evolution/recommendation-renderer.js +24 -0
- package/dist/core/evolution/recommendation-renderer.js.map +1 -0
- package/dist/core/evolution/review-failure-clusters.d.ts +10 -0
- package/dist/core/evolution/review-failure-clusters.d.ts.map +1 -0
- package/dist/core/evolution/review-failure-clusters.js +30 -0
- package/dist/core/evolution/review-failure-clusters.js.map +1 -0
- package/dist/core/evolution/suggestions.d.ts +24 -0
- package/dist/core/evolution/suggestions.d.ts.map +1 -0
- package/dist/core/evolution/suggestions.js +11 -0
- package/dist/core/evolution/suggestions.js.map +1 -0
- package/dist/core/gate-policy.d.ts +20 -0
- package/dist/core/gate-policy.d.ts.map +1 -0
- package/dist/core/gate-policy.js +64 -0
- package/dist/core/gate-policy.js.map +1 -0
- package/dist/core/harness-scaffold.d.ts +29 -0
- package/dist/core/harness-scaffold.d.ts.map +1 -0
- package/dist/core/harness-scaffold.js +53 -0
- package/dist/core/harness-scaffold.js.map +1 -0
- package/dist/core/hook-runner.d.ts +69 -0
- package/dist/core/hook-runner.d.ts.map +1 -0
- package/dist/core/hook-runner.js +95 -0
- package/dist/core/hook-runner.js.map +1 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/install-metadata.d.ts +15 -0
- package/dist/core/install-metadata.d.ts.map +1 -1
- package/dist/core/install-metadata.js +11 -0
- package/dist/core/install-metadata.js.map +1 -1
- package/dist/core/is-hook-script.d.ts +2 -0
- package/dist/core/is-hook-script.d.ts.map +1 -0
- package/dist/core/is-hook-script.js +45 -0
- package/dist/core/is-hook-script.js.map +1 -0
- package/dist/core/pack-manifest.d.ts +48 -0
- package/dist/core/pack-manifest.d.ts.map +1 -0
- package/dist/core/pack-manifest.js +126 -0
- package/dist/core/pack-manifest.js.map +1 -0
- package/dist/core/pack-resolver.d.ts +18 -0
- package/dist/core/pack-resolver.d.ts.map +1 -0
- package/dist/core/pack-resolver.js +144 -0
- package/dist/core/pack-resolver.js.map +1 -0
- package/dist/core/portability-matrix.d.ts +17 -0
- package/dist/core/portability-matrix.d.ts.map +1 -0
- package/dist/core/portability-matrix.js +31 -0
- package/dist/core/portability-matrix.js.map +1 -0
- package/dist/core/simulation-runner.d.ts +93 -0
- package/dist/core/simulation-runner.d.ts.map +1 -0
- package/dist/core/simulation-runner.js +161 -0
- package/dist/core/simulation-runner.js.map +1 -0
- package/dist/core/smart-update.d.ts +24 -0
- package/dist/core/smart-update.d.ts.map +1 -1
- package/dist/core/smart-update.js +69 -0
- package/dist/core/smart-update.js.map +1 -1
- package/dist/core/usage/usage-analyzer.d.ts +18 -0
- package/dist/core/usage/usage-analyzer.d.ts.map +1 -0
- package/dist/core/usage/usage-analyzer.js +41 -0
- package/dist/core/usage/usage-analyzer.js.map +1 -0
- package/dist/core/validate-install.d.ts.map +1 -1
- package/dist/core/validate-install.js +3 -1
- package/dist/core/validate-install.js.map +1 -1
- package/dist/index.js +91 -4
- package/dist/index.js.map +1 -1
- package/dist/memory/archive.d.ts +9 -0
- package/dist/memory/archive.d.ts.map +1 -0
- package/dist/memory/archive.js +42 -0
- package/dist/memory/archive.js.map +1 -0
- package/dist/memory/compact.d.ts +9 -0
- package/dist/memory/compact.d.ts.map +1 -0
- package/dist/memory/compact.js +33 -0
- package/dist/memory/compact.js.map +1 -0
- package/dist/memory/conflicts.d.ts +8 -0
- package/dist/memory/conflicts.d.ts.map +1 -0
- package/dist/memory/conflicts.js +28 -0
- package/dist/memory/conflicts.js.map +1 -0
- package/dist/memory/promote.d.ts +8 -0
- package/dist/memory/promote.d.ts.map +1 -0
- package/dist/memory/promote.js +10 -0
- package/dist/memory/promote.js.map +1 -0
- package/dist/memory/store-utils.d.ts +14 -0
- package/dist/memory/store-utils.d.ts.map +1 -0
- package/dist/memory/store-utils.js +44 -0
- package/dist/memory/store-utils.js.map +1 -0
- package/dist/migrate/converters/md-to-codex-rules.d.ts.map +1 -1
- package/dist/migrate/converters/md-to-codex-rules.js +30 -0
- package/dist/migrate/converters/md-to-codex-rules.js.map +1 -1
- package/dist/migrate/portability-policy.d.ts.map +1 -1
- package/dist/migrate/portability-policy.js +44 -23
- package/dist/migrate/portability-policy.js.map +1 -1
- package/dist/migrate/provider-support-summary.d.ts +49 -0
- package/dist/migrate/provider-support-summary.d.ts.map +1 -0
- package/dist/migrate/provider-support-summary.js +98 -0
- package/dist/migrate/provider-support-summary.js.map +1 -0
- package/dist/migrate/types.d.ts +2 -2
- package/package.json +1 -1
|
@@ -3,6 +3,14 @@ import path from "node:path";
|
|
|
3
3
|
import pc from "picocolors";
|
|
4
4
|
import { checkDocsReferences } from "../core/check-docs-references.js";
|
|
5
5
|
import { collectProviderContractDiagnostics } from "../migrate/provider-contract-diagnostics.js";
|
|
6
|
+
import { isHookScript } from "../core/is-hook-script.js";
|
|
7
|
+
import { checkWorkflowDrift } from "../core/check-workflow-drift.js";
|
|
8
|
+
import { checkOwnership } from "../core/build-inventory.js";
|
|
9
|
+
import { checkPacks } from "../core/check-packs.js";
|
|
10
|
+
import { analyzeCodexRuleSource } from "../migrate/converters/index.js";
|
|
11
|
+
import { discoverRules, discoverSkills } from "../migrate/discovery/index.js";
|
|
12
|
+
import { buildPortableSkillsByProvider } from "../migrate/portability-policy.js";
|
|
13
|
+
const ok = (cond) => (cond ? "pass" : "fail");
|
|
6
14
|
/** Find MeowKit .claude/ in cwd only (no walk-up). */
|
|
7
15
|
function findMeowkitDir(startDir) {
|
|
8
16
|
const candidate = path.join(startDir, ".claude");
|
|
@@ -11,13 +19,14 @@ function findMeowkitDir(startDir) {
|
|
|
11
19
|
}
|
|
12
20
|
return null;
|
|
13
21
|
}
|
|
14
|
-
function checkFileExists(
|
|
15
|
-
const fullPath = path.join(
|
|
22
|
+
function checkFileExists(baseDir, relativePath, section) {
|
|
23
|
+
const fullPath = path.join(baseDir, relativePath);
|
|
16
24
|
const exists = fs.existsSync(fullPath);
|
|
17
25
|
return {
|
|
18
26
|
name: `File exists: ${relativePath}`,
|
|
19
|
-
|
|
27
|
+
status: ok(exists),
|
|
20
28
|
detail: exists ? fullPath : `Missing: ${fullPath}`,
|
|
29
|
+
section,
|
|
21
30
|
};
|
|
22
31
|
}
|
|
23
32
|
function checkDirExists(meowkitDir, relativePath) {
|
|
@@ -25,167 +34,306 @@ function checkDirExists(meowkitDir, relativePath) {
|
|
|
25
34
|
const exists = fs.existsSync(fullPath) && fs.statSync(fullPath).isDirectory();
|
|
26
35
|
return {
|
|
27
36
|
name: `Directory exists: ${relativePath}`,
|
|
28
|
-
|
|
37
|
+
status: ok(exists),
|
|
29
38
|
detail: exists ? fullPath : `Missing: ${fullPath}`,
|
|
39
|
+
section: "Structure",
|
|
30
40
|
};
|
|
31
41
|
}
|
|
32
|
-
function checkHooksExecutable(meowkitDir) {
|
|
42
|
+
export function checkHooksExecutable(meowkitDir) {
|
|
33
43
|
const hooksDir = path.join(meowkitDir, "hooks");
|
|
34
44
|
const results = [];
|
|
35
45
|
if (!fs.existsSync(hooksDir)) {
|
|
36
|
-
results.push({
|
|
37
|
-
name: "Hooks directory",
|
|
38
|
-
passed: false,
|
|
39
|
-
detail: `Missing: ${hooksDir}`,
|
|
40
|
-
});
|
|
46
|
+
results.push({ name: "Hooks directory", status: "fail", detail: `Missing: ${hooksDir}`, section: "Hooks" });
|
|
41
47
|
return results;
|
|
42
48
|
}
|
|
43
|
-
|
|
49
|
+
// Only real hook scripts. Directories (lib/, handlers/, __tests__/) and sidecars
|
|
50
|
+
// (HOOKS_INDEX.md, handlers.json) are NOT hooks — the old code reported them as
|
|
51
|
+
// "Hook executable" because accessSync(X_OK) succeeds on a traversable directory.
|
|
52
|
+
const entries = fs.readdirSync(hooksDir).filter((f) => !f.startsWith("."));
|
|
53
|
+
const hookFiles = entries.filter((f) => isHookScript(path.join(hooksDir, f)));
|
|
54
|
+
const skipped = entries.length - hookFiles.length;
|
|
44
55
|
if (hookFiles.length === 0) {
|
|
45
|
-
results.push({
|
|
46
|
-
name: "Hooks present",
|
|
47
|
-
passed: false,
|
|
48
|
-
detail: "No hook files found in hooks/",
|
|
49
|
-
});
|
|
56
|
+
results.push({ name: "Hooks present", status: "fail", detail: "No hook scripts found in hooks/", section: "Hooks" });
|
|
50
57
|
return results;
|
|
51
58
|
}
|
|
52
59
|
for (const hook of hookFiles) {
|
|
53
60
|
const hookPath = path.join(hooksDir, hook);
|
|
61
|
+
let executable = true;
|
|
54
62
|
try {
|
|
55
63
|
fs.accessSync(hookPath, fs.constants.X_OK);
|
|
56
|
-
results.push({
|
|
57
|
-
name: `Hook executable: ${hook}`,
|
|
58
|
-
passed: true,
|
|
59
|
-
detail: hookPath,
|
|
60
|
-
});
|
|
61
64
|
}
|
|
62
65
|
catch {
|
|
63
|
-
|
|
64
|
-
name: `Hook executable: ${hook}`,
|
|
65
|
-
passed: false,
|
|
66
|
-
detail: `Not executable: ${hookPath}`,
|
|
67
|
-
});
|
|
66
|
+
executable = false;
|
|
68
67
|
}
|
|
68
|
+
results.push({
|
|
69
|
+
name: `Hook executable: ${hook}`,
|
|
70
|
+
status: ok(executable),
|
|
71
|
+
detail: executable ? hookPath : `Not executable: ${hookPath}`,
|
|
72
|
+
section: "Hooks",
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
if (skipped > 0) {
|
|
76
|
+
results.push({
|
|
77
|
+
name: "Hooks: non-script entries skipped",
|
|
78
|
+
status: "pass",
|
|
79
|
+
detail: `${skipped} non-script entr(ies) in hooks/ (subdirs, .md, .json) correctly excluded.`,
|
|
80
|
+
section: "Hooks",
|
|
81
|
+
});
|
|
69
82
|
}
|
|
70
83
|
return results;
|
|
71
84
|
}
|
|
72
85
|
function checkConfigJson(meowkitDir) {
|
|
73
86
|
const configPath = path.join(meowkitDir, "meowkit.config.json");
|
|
74
87
|
if (!fs.existsSync(configPath)) {
|
|
75
|
-
return {
|
|
76
|
-
name: "Config JSON valid",
|
|
77
|
-
passed: false,
|
|
78
|
-
detail: `Missing: ${configPath}`,
|
|
79
|
-
};
|
|
88
|
+
return { name: "Config JSON valid", status: "fail", detail: `Missing: ${configPath}`, section: "Structure" };
|
|
80
89
|
}
|
|
81
90
|
try {
|
|
82
|
-
|
|
83
|
-
JSON
|
|
84
|
-
return {
|
|
85
|
-
name: "Config JSON valid",
|
|
86
|
-
passed: true,
|
|
87
|
-
detail: configPath,
|
|
88
|
-
};
|
|
91
|
+
JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
92
|
+
return { name: "Config JSON valid", status: "pass", detail: configPath, section: "Structure" };
|
|
89
93
|
}
|
|
90
94
|
catch (error) {
|
|
91
95
|
const message = error instanceof Error ? error.message : String(error);
|
|
92
|
-
return {
|
|
93
|
-
name: "Config JSON valid",
|
|
94
|
-
passed: false,
|
|
95
|
-
detail: `Invalid JSON: ${message}`,
|
|
96
|
-
};
|
|
96
|
+
return { name: "Config JSON valid", status: "fail", detail: `Invalid JSON: ${message}`, section: "Structure" };
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
function checkDocsRefsContract(meowkitDir) {
|
|
100
|
-
const results = [];
|
|
101
100
|
const contractPath = path.join(meowkitDir, "rules", "docs-reference-contract.md");
|
|
102
101
|
if (!fs.existsSync(contractPath)) {
|
|
103
|
-
|
|
104
|
-
name: "Docs-reference contract present",
|
|
105
|
-
passed: false,
|
|
106
|
-
detail: `Missing: ${contractPath}`,
|
|
107
|
-
});
|
|
108
|
-
return results;
|
|
102
|
+
return [{ name: "Docs-reference contract present", status: "fail", detail: `Missing: ${contractPath}`, section: "Docs" }];
|
|
109
103
|
}
|
|
110
104
|
try {
|
|
111
105
|
const { scannedFiles, findings, errorCount, warnCount } = checkDocsReferences(meowkitDir);
|
|
112
|
-
const passed = errorCount === 0;
|
|
113
106
|
const summary = `Scanned ${scannedFiles} files — ${errorCount} error(s), ${warnCount} warning(s)`;
|
|
114
|
-
const
|
|
107
|
+
const status = errorCount > 0 ? "fail" : warnCount > 0 ? "warn" : "pass";
|
|
108
|
+
const detail = errorCount === 0
|
|
115
109
|
? summary
|
|
116
110
|
: `${summary}\n ${findings
|
|
117
111
|
.filter((f) => f.level === "ERROR")
|
|
118
112
|
.slice(0, 10)
|
|
119
113
|
.map((f) => `${f.file}:${f.line}: ${f.token}`)
|
|
120
114
|
.join("\n ")}`;
|
|
121
|
-
|
|
122
|
-
name: "Docs references on Type-1 allowlist",
|
|
123
|
-
passed,
|
|
124
|
-
detail,
|
|
125
|
-
});
|
|
115
|
+
return [{ name: "Docs references on Type-1 allowlist", status, detail, section: "Docs" }];
|
|
126
116
|
}
|
|
127
117
|
catch (error) {
|
|
128
118
|
const message = error instanceof Error ? error.message : String(error);
|
|
119
|
+
return [{ name: "Docs references on Type-1 allowlist", status: "fail", detail: `Validator crashed: ${message}`, section: "Docs" }];
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Honest portability rendering. The old code did `if (severity === "pass") continue` (hiding
|
|
124
|
+
* configured surfaces) and `passed: severity !== "fail"` (rendering WARN as green PASS, and
|
|
125
|
+
* never surfacing unsupported surfaces). Now: pass→PASS, warn→WARN, fail→FAIL, and an
|
|
126
|
+
* `unsupported` surface → N/A. A one-line coverage summary makes the totals explicit.
|
|
127
|
+
*/
|
|
128
|
+
/**
|
|
129
|
+
* Map a provider diagnostic to an honest status. Crucially: a `warn`-severity diagnostic
|
|
130
|
+
* renders WARN (the old code mapped it to PASS), and an `unsupported` surface renders N/A
|
|
131
|
+
* (the old code silently dropped it).
|
|
132
|
+
*/
|
|
133
|
+
export function diagnosticToStatus(surfaceStatus, severity) {
|
|
134
|
+
if (surfaceStatus === "unsupported")
|
|
135
|
+
return "na";
|
|
136
|
+
if (severity === "fail")
|
|
137
|
+
return "fail";
|
|
138
|
+
if (severity === "warn")
|
|
139
|
+
return "warn";
|
|
140
|
+
return "pass";
|
|
141
|
+
}
|
|
142
|
+
function checkPortability() {
|
|
143
|
+
const diagnostics = collectProviderContractDiagnostics();
|
|
144
|
+
const results = [];
|
|
145
|
+
let nPass = 0, nWarn = 0, nNa = 0, nFail = 0;
|
|
146
|
+
for (const d of diagnostics) {
|
|
147
|
+
const status = diagnosticToStatus(d.surfaceStatus, d.severity);
|
|
148
|
+
if (status === "na")
|
|
149
|
+
nNa++;
|
|
150
|
+
else if (status === "fail")
|
|
151
|
+
nFail++;
|
|
152
|
+
else if (status === "warn")
|
|
153
|
+
nWarn++;
|
|
154
|
+
else
|
|
155
|
+
nPass++;
|
|
129
156
|
results.push({
|
|
130
|
-
name:
|
|
131
|
-
|
|
132
|
-
detail:
|
|
157
|
+
name: `Provider contract: ${d.providerDisplayName}/${d.surface}`,
|
|
158
|
+
status,
|
|
159
|
+
detail: d.message,
|
|
160
|
+
section: "Portability",
|
|
133
161
|
});
|
|
134
162
|
}
|
|
163
|
+
results.push({
|
|
164
|
+
name: "Portability coverage",
|
|
165
|
+
status: "pass",
|
|
166
|
+
detail: `${nPass} native, ${nNa} N/A, ${nWarn} warn, ${nFail} fail across ${diagnostics.length} surface(s).`,
|
|
167
|
+
section: "Portability",
|
|
168
|
+
});
|
|
135
169
|
return results;
|
|
136
170
|
}
|
|
171
|
+
function countFiles(dir, predicate) {
|
|
172
|
+
if (!fs.existsSync(dir))
|
|
173
|
+
return 0;
|
|
174
|
+
let count = 0;
|
|
175
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
176
|
+
if (entry.name.startsWith("."))
|
|
177
|
+
continue;
|
|
178
|
+
const fullPath = path.join(dir, entry.name);
|
|
179
|
+
if (entry.isDirectory()) {
|
|
180
|
+
count += countFiles(fullPath, predicate);
|
|
181
|
+
}
|
|
182
|
+
else if (entry.isFile() && predicate(entry.name, fullPath)) {
|
|
183
|
+
count += 1;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return count;
|
|
187
|
+
}
|
|
188
|
+
function countSkillDirs(dir) {
|
|
189
|
+
if (!fs.existsSync(dir))
|
|
190
|
+
return 0;
|
|
191
|
+
return fs
|
|
192
|
+
.readdirSync(dir, { withFileTypes: true })
|
|
193
|
+
.filter((entry) => entry.isDirectory() && fs.existsSync(path.join(dir, entry.name, "SKILL.md"))).length;
|
|
194
|
+
}
|
|
195
|
+
function projectionCountResult(name, expected, actual, detail) {
|
|
196
|
+
return {
|
|
197
|
+
name,
|
|
198
|
+
status: expected === 0 || actual >= expected ? "pass" : "fail",
|
|
199
|
+
detail: expected === 0 ? `${detail} — no portable source items expected.` : `${detail}: expected ${expected}, found ${actual}.`,
|
|
200
|
+
section: "Portability",
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
export async function checkCodexProjection(projectRoot) {
|
|
204
|
+
const codexDir = path.join(projectRoot, ".codex");
|
|
205
|
+
const skillsDir = path.join(projectRoot, ".agents", "skills");
|
|
206
|
+
if (!fs.existsSync(codexDir) && !fs.existsSync(skillsDir))
|
|
207
|
+
return [];
|
|
208
|
+
const results = [
|
|
209
|
+
{
|
|
210
|
+
name: "Codex projection: AGENTS.md",
|
|
211
|
+
status: ok(fs.existsSync(path.join(projectRoot, "AGENTS.md"))),
|
|
212
|
+
detail: "Codex project instructions file",
|
|
213
|
+
section: "Portability",
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
name: "Codex projection: unsupported command dirs absent",
|
|
217
|
+
status: ok(!fs.existsSync(path.join(codexDir, "commands")) && !fs.existsSync(path.join(codexDir, "prompts"))),
|
|
218
|
+
detail: "Codex custom command directories are not documented; migration must not emit them.",
|
|
219
|
+
section: "Portability",
|
|
220
|
+
},
|
|
221
|
+
];
|
|
222
|
+
const sourceRulesDir = path.join(projectRoot, ".claude", "rules");
|
|
223
|
+
if (fs.existsSync(sourceRulesDir)) {
|
|
224
|
+
const sourceRules = await discoverRules(sourceRulesDir);
|
|
225
|
+
const expectedRules = sourceRules.filter((rule) => analyzeCodexRuleSource(rule).kind !== "unsupported").length;
|
|
226
|
+
const actualRules = countFiles(path.join(codexDir, "rules"), (name) => name.endsWith(".rules"));
|
|
227
|
+
results.push(projectionCountResult("Codex projection: command-policy rules", expectedRules, actualRules, "Translated source rules with Codex-compatible command policies"));
|
|
228
|
+
}
|
|
229
|
+
const sourceSkillsDir = path.join(projectRoot, ".claude", "skills");
|
|
230
|
+
if (fs.existsSync(sourceSkillsDir)) {
|
|
231
|
+
const sourceSkills = await discoverSkills(sourceSkillsDir);
|
|
232
|
+
const portableSkills = await buildPortableSkillsByProvider(sourceSkills, ["codex"]);
|
|
233
|
+
const expectedSkills = portableSkills.skillsByProvider.get("codex")?.length ?? 0;
|
|
234
|
+
const actualSkills = countSkillDirs(skillsDir);
|
|
235
|
+
results.push(projectionCountResult("Codex projection: portable skills", expectedSkills, actualSkills, "Runtime-compatible source skill folders"));
|
|
236
|
+
}
|
|
237
|
+
return results;
|
|
238
|
+
}
|
|
239
|
+
function statusIcon(status) {
|
|
240
|
+
switch (status) {
|
|
241
|
+
case "pass":
|
|
242
|
+
return pc.green("PASS");
|
|
243
|
+
case "warn":
|
|
244
|
+
return pc.yellow("WARN");
|
|
245
|
+
case "na":
|
|
246
|
+
return pc.dim("N/A ");
|
|
247
|
+
case "fail":
|
|
248
|
+
return pc.red("FAIL");
|
|
249
|
+
}
|
|
250
|
+
}
|
|
137
251
|
function printResult(result) {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
if (!result.passed) {
|
|
252
|
+
console.log(` [${statusIcon(result.status)}] ${result.name}`);
|
|
253
|
+
if (result.status !== "pass") {
|
|
141
254
|
console.log(` ${pc.dim(result.detail)}`);
|
|
142
255
|
}
|
|
143
256
|
}
|
|
144
257
|
export async function validate(args = {}) {
|
|
145
258
|
console.log(pc.bold(pc.cyan("Validating .claude/ project structure...")));
|
|
259
|
+
console.log(pc.dim("Scope: structure & wiring only. Run `mewkit doctor --hard-gates` to verify the gates actually block."));
|
|
146
260
|
console.log();
|
|
147
261
|
const meowkitDir = findMeowkitDir(process.cwd());
|
|
148
262
|
if (!meowkitDir) {
|
|
149
|
-
console.error(pc.red("Could not find .claude/ directory in current
|
|
263
|
+
console.error(pc.red("Could not find .claude/ directory in the current directory."));
|
|
150
264
|
process.exit(1);
|
|
151
265
|
}
|
|
152
266
|
console.log(`${pc.dim("Found:")} ${meowkitDir}`);
|
|
153
267
|
console.log();
|
|
154
|
-
const results = [];
|
|
155
|
-
// Required directories
|
|
156
|
-
results.push(checkDirExists(meowkitDir, "agents"));
|
|
157
|
-
results.push(checkDirExists(meowkitDir, "hooks"));
|
|
158
|
-
// CLAUDE.md lives at project root (Claude Code reads it from there)
|
|
159
268
|
const projectRoot = path.dirname(meowkitDir);
|
|
160
|
-
|
|
161
|
-
//
|
|
162
|
-
results
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
// Docs-reference contract (Type-1 allowlist)
|
|
166
|
-
results.push(...checkDocsRefsContract(meowkitDir));
|
|
167
|
-
if (args.portable) {
|
|
168
|
-
for (const diagnostic of collectProviderContractDiagnostics()) {
|
|
169
|
-
if (diagnostic.severity === "pass")
|
|
170
|
-
continue;
|
|
171
|
-
results.push({
|
|
172
|
-
name: `Provider contract: ${diagnostic.providerDisplayName}/${diagnostic.surface}`,
|
|
173
|
-
passed: diagnostic.severity !== "fail",
|
|
174
|
-
detail: diagnostic.message,
|
|
175
|
-
});
|
|
176
|
-
}
|
|
269
|
+
// `--workflow` / `--ownership` scope the run to a single check (cheap CI
|
|
270
|
+
// invocations). The default run includes both alongside the structural checks.
|
|
271
|
+
let results;
|
|
272
|
+
if (args.workflow) {
|
|
273
|
+
results = checkWorkflowDrift(projectRoot);
|
|
177
274
|
}
|
|
178
|
-
|
|
179
|
-
|
|
275
|
+
else if (args.ownership) {
|
|
276
|
+
results = checkOwnership(meowkitDir);
|
|
180
277
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
const failCount = results.filter((r) => !r.passed).length;
|
|
184
|
-
if (failCount === 0) {
|
|
185
|
-
console.log(pc.green(pc.bold(`All ${passCount} checks passed.`)));
|
|
278
|
+
else if (args.packs) {
|
|
279
|
+
results = checkPacks(meowkitDir);
|
|
186
280
|
}
|
|
187
281
|
else {
|
|
188
|
-
|
|
282
|
+
results = [
|
|
283
|
+
checkDirExists(meowkitDir, "agents"),
|
|
284
|
+
checkDirExists(meowkitDir, "hooks"),
|
|
285
|
+
checkFileExists(projectRoot, "CLAUDE.md", "Structure"),
|
|
286
|
+
checkConfigJson(meowkitDir),
|
|
287
|
+
...checkHooksExecutable(meowkitDir),
|
|
288
|
+
...checkDocsRefsContract(meowkitDir),
|
|
289
|
+
// Default run is advisory: a wholly-absent governance file WARNs
|
|
290
|
+
// (prompt `mewkit upgrade`) rather than failing an un-synced install.
|
|
291
|
+
// The scoped `--workflow`/`--ownership`/`--packs` paths above stay strict for CI.
|
|
292
|
+
...checkWorkflowDrift(projectRoot, { missingSpecSeverity: "warn" }),
|
|
293
|
+
...checkOwnership(meowkitDir, { missingInfraSeverity: "warn" }),
|
|
294
|
+
...checkPacks(meowkitDir, { missingInfraSeverity: "warn" }),
|
|
295
|
+
];
|
|
296
|
+
if (args.portable) {
|
|
297
|
+
results.push(...checkPortability());
|
|
298
|
+
results.push(...(await checkCodexProjection(projectRoot)));
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// Exhaustiveness guard: the printed `sections` array MUST list every `Section`
|
|
302
|
+
// union member, or a check's results compute but never render. The mapped type
|
|
303
|
+
// fails to compile if a member is missing here, keeping union + array in sync.
|
|
304
|
+
// ("Inventory" is produced only by `inventory --check`, listed for completeness.)
|
|
305
|
+
const SECTION_ORDER = {
|
|
306
|
+
Structure: true,
|
|
307
|
+
Hooks: true,
|
|
308
|
+
Portability: true,
|
|
309
|
+
Docs: true,
|
|
310
|
+
Workflow: true,
|
|
311
|
+
Ownership: true,
|
|
312
|
+
Packs: true,
|
|
313
|
+
Inventory: true,
|
|
314
|
+
};
|
|
315
|
+
const sections = Object.keys(SECTION_ORDER);
|
|
316
|
+
for (const section of sections) {
|
|
317
|
+
const inSection = results.filter((r) => r.section === section);
|
|
318
|
+
if (inSection.length === 0)
|
|
319
|
+
continue;
|
|
320
|
+
console.log(pc.bold(section));
|
|
321
|
+
for (const r of inSection)
|
|
322
|
+
printResult(r);
|
|
323
|
+
console.log();
|
|
324
|
+
}
|
|
325
|
+
const count = (s) => results.filter((r) => r.status === s).length;
|
|
326
|
+
const pass = count("pass"), warn = count("warn"), na = count("na"), fail = count("fail");
|
|
327
|
+
const parts = [pc.green(`${pass} passed`)];
|
|
328
|
+
if (warn > 0)
|
|
329
|
+
parts.push(pc.yellow(`${warn} warnings`));
|
|
330
|
+
if (na > 0)
|
|
331
|
+
parts.push(pc.dim(`${na} n/a`));
|
|
332
|
+
if (fail > 0)
|
|
333
|
+
parts.push(pc.red(`${fail} failed`));
|
|
334
|
+
console.log(parts.join(", "));
|
|
335
|
+
// FAIL always fails the build. WARN fails only under --strict (off by default).
|
|
336
|
+
if (fail > 0 || (args.strict && warn > 0)) {
|
|
189
337
|
process.exit(1);
|
|
190
338
|
}
|
|
191
339
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,kCAAkC,EAAE,MAAM,6CAA6C,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AA2BjF,MAAM,EAAE,GAAG,CAAC,IAAa,EAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,sDAAsD;AACtD,SAAS,cAAc,CAAC,QAAgB;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACjD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACtE,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,OAAe,EAAE,YAAoB,EAAE,OAAgB;IAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO;QACN,IAAI,EAAE,gBAAgB,YAAY,EAAE;QACpC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,QAAQ,EAAE;QAClD,OAAO;KACP,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB,EAAE,YAAoB;IAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9E,OAAO;QACN,IAAI,EAAE,qBAAqB,YAAY,EAAE;QACzC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,QAAQ,EAAE;QAClD,OAAO,EAAE,WAAW;KACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,UAAkB;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5G,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,iFAAiF;IACjF,gFAAgF;IAChF,kFAAkF;IAClF,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAElD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iCAAiC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACrH,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC;YACJ,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACR,UAAU,GAAG,KAAK,CAAC;QACpB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,oBAAoB,IAAI,EAAE;YAChC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC;YACtB,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,QAAQ,EAAE;YAC7D,OAAO,EAAE,OAAO;SAChB,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,mCAAmC;YACzC,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,GAAG,OAAO,2EAA2E;YAC7F,OAAO,EAAE,OAAO;SAChB,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,UAAkB;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;IAChE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,UAAU,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAC9G,CAAC;IACD,IAAI,CAAC;QACJ,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QACjD,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAChG,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAChH,CAAC;AACF,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAkB;IAChD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,4BAA4B,CAAC,CAAC;IAClF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,EAAE,IAAI,EAAE,iCAAiC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3H,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC1F,MAAM,OAAO,GAAG,WAAW,YAAY,YAAY,UAAU,cAAc,SAAS,aAAa,CAAC;QAClG,MAAM,MAAM,GAAW,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACjF,MAAM,MAAM,GACX,UAAU,KAAK,CAAC;YACf,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,GAAG,OAAO,cAAc,QAAQ;iBAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC;iBAClC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;iBACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;iBAC7C,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,EAAE,IAAI,EAAE,qCAAqC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3F,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,EAAE,IAAI,EAAE,qCAAqC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACpI,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAAqB,EAAE,QAAkC;IAC3F,IAAI,aAAa,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACvC,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB;IACxB,MAAM,WAAW,GAAG,kCAAkC,EAAE,CAAC;IACzD,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,EACZ,KAAK,GAAG,CAAC,EACT,GAAG,GAAG,CAAC,EACP,KAAK,GAAG,CAAC,CAAC;IAEX,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,MAAM,KAAK,IAAI;YAAE,GAAG,EAAE,CAAC;aACtB,IAAI,MAAM,KAAK,MAAM;YAAE,KAAK,EAAE,CAAC;aAC/B,IAAI,MAAM,KAAK,MAAM;YAAE,KAAK,EAAE,CAAC;;YAC/B,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,sBAAsB,CAAC,CAAC,mBAAmB,IAAI,CAAC,CAAC,OAAO,EAAE;YAChE,MAAM;YACN,MAAM,EAAE,CAAC,CAAC,OAAO;YACjB,OAAO,EAAE,aAAa;SACtB,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,GAAG,KAAK,YAAY,GAAG,SAAS,KAAK,UAAU,KAAK,gBAAgB,WAAW,CAAC,MAAM,cAAc;QAC5G,OAAO,EAAE,aAAa;KACtB,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,GAAW,EAAE,SAAsD;IACtF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAClE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,KAAK,IAAI,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC9D,KAAK,IAAI,CAAC,CAAC;QACZ,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,OAAO,EAAE;SACP,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SACzC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC1G,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,QAAgB,EAAE,MAAc,EAAE,MAAc;IAC5F,OAAO;QACN,IAAI;QACJ,MAAM,EAAE,QAAQ,KAAK,CAAC,IAAI,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QAC9D,MAAM,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,uCAAuC,CAAC,CAAC,CAAC,GAAG,MAAM,cAAc,QAAQ,WAAW,MAAM,GAAG;QAC/H,OAAO,EAAE,aAAa;KACtB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAmB;IAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IAErE,MAAM,OAAO,GAAkB;QAC9B;YACC,IAAI,EAAE,6BAA6B;YACnC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YAC9D,MAAM,EAAE,iCAAiC;YACzC,OAAO,EAAE,aAAa;SACtB;QACD;YACC,IAAI,EAAE,mDAAmD;YACzD,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;YAC7G,MAAM,EAAE,oFAAoF;YAC5F,OAAO,EAAE,aAAa;SACtB;KACD,CAAC;IAEF,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAClE,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,cAAc,CAAC,CAAC;QACxD,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,MAAM,CAAC;QAC/G,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChG,OAAO,CAAC,IAAI,CACX,qBAAqB,CACpB,wCAAwC,EACxC,aAAa,EACb,WAAW,EACX,gEAAgE,CAChE,CACD,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACpE,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,eAAe,CAAC,CAAC;QAC3D,MAAM,cAAc,GAAG,MAAM,6BAA6B,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACpF,MAAM,cAAc,GAAG,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;QACjF,MAAM,YAAY,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CACX,qBAAqB,CACpB,mCAAmC,EACnC,cAAc,EACd,YAAY,EACZ,yCAAyC,CACzC,CACD,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IACjC,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,MAAM;YACV,OAAO,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzB,KAAK,MAAM;YACV,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1B,KAAK,IAAI;YACR,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvB,KAAK,MAAM;YACV,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;AACF,CAAC;AAED,SAAS,WAAW,CAAC,MAAmB;IACvC,OAAO,CAAC,GAAG,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/D,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAwB,EAAE;IACxD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CACV,EAAE,CAAC,GAAG,CAAC,sGAAsG,CAAC,CAC9G,CAAC;IACF,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE7C,yEAAyE;IACzE,+EAA+E;IAC/E,IAAI,OAAsB,CAAC;IAC3B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;SAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAC3B,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACvB,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACP,OAAO,GAAG;YACT,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC;YACpC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC;YACnC,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC;YACtD,eAAe,CAAC,UAAU,CAAC;YAC3B,GAAG,oBAAoB,CAAC,UAAU,CAAC;YACnC,GAAG,qBAAqB,CAAC,UAAU,CAAC;YACpC,iEAAiE;YACjE,sEAAsE;YACtE,kFAAkF;YAClF,GAAG,kBAAkB,CAAC,WAAW,EAAE,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC;YACnE,GAAG,cAAc,CAAC,UAAU,EAAE,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC;YAC/D,GAAG,UAAU,CAAC,UAAU,EAAE,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC;SAC3D,CAAC;QACF,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,GAAG,gBAAgB,EAAE,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;IACF,CAAC;IAED,+EAA+E;IAC/E,+EAA+E;IAC/E,+EAA+E;IAC/E,kFAAkF;IAClF,MAAM,aAAa,GAA6B;QAC/C,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;KACf,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAc,CAAC;IACzD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QAC/D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACrC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,SAAS;YAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,EAAE,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1E,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,EACzB,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,EACpB,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAChB,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAEtB,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC;IAC3C,IAAI,IAAI,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;IACxD,IAAI,EAAE,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,IAAI,IAAI,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9B,gFAAgF;IAChF,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { CheckResult } from "../commands/validate.js";
|
|
2
|
+
import type { Status } from "../commands/doctor-checks.js";
|
|
3
|
+
export type ArtifactType = "skill" | "agent" | "rule" | "command" | "hook";
|
|
4
|
+
/** Frozen contract — the stale-index check consumes this shape. */
|
|
5
|
+
export interface InventoryEntry {
|
|
6
|
+
type: ArtifactType;
|
|
7
|
+
path: string;
|
|
8
|
+
id: string;
|
|
9
|
+
owner: string;
|
|
10
|
+
criticality: string;
|
|
11
|
+
status: string;
|
|
12
|
+
runtime: string;
|
|
13
|
+
contextCost?: string;
|
|
14
|
+
dependsOn?: string[];
|
|
15
|
+
source: "frontmatter" | "registry";
|
|
16
|
+
}
|
|
17
|
+
/** A structural or metadata problem surfaced honestly rather than skipped. */
|
|
18
|
+
export interface InventoryIssue {
|
|
19
|
+
path: string;
|
|
20
|
+
type: ArtifactType | "unknown";
|
|
21
|
+
problem: string;
|
|
22
|
+
}
|
|
23
|
+
export interface Inventory {
|
|
24
|
+
entries: InventoryEntry[];
|
|
25
|
+
issues: InventoryIssue[];
|
|
26
|
+
}
|
|
27
|
+
interface ArtifactRef {
|
|
28
|
+
type: ArtifactType;
|
|
29
|
+
rel: string;
|
|
30
|
+
abs: string;
|
|
31
|
+
id: string;
|
|
32
|
+
metaSource: "frontmatter" | "registry";
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The canonical "what counts" enumeration. Returns artifact references plus any
|
|
36
|
+
* structural anomalies (e.g. a skill subdir with no SKILL.md that is not a known
|
|
37
|
+
* runtime dir). Counting is presence-based; rules and rules-conditional are
|
|
38
|
+
* deliberately NOT merged — callers label them as separate buckets.
|
|
39
|
+
*/
|
|
40
|
+
export declare function enumerateArtifacts(claudeDir: string): {
|
|
41
|
+
refs: ArtifactRef[];
|
|
42
|
+
issues: InventoryIssue[];
|
|
43
|
+
};
|
|
44
|
+
/** Read the central registry for rules/commands/hooks. */
|
|
45
|
+
export declare function readRegistry(claudeDir: string): Record<string, Record<string, unknown>>;
|
|
46
|
+
/**
|
|
47
|
+
* Build the unified inventory. Each artifact's metadata comes from frontmatter
|
|
48
|
+
* (skills/agents) or the registry (rules/commands/hooks). Missing records and
|
|
49
|
+
* missing required fields are recorded as issues — never silently defaulted to
|
|
50
|
+
* a passing value.
|
|
51
|
+
*/
|
|
52
|
+
export declare function buildInventory(claudeDir: string): Inventory;
|
|
53
|
+
interface SchemaEnums {
|
|
54
|
+
owner: Set<string>;
|
|
55
|
+
criticality: Set<string>;
|
|
56
|
+
status: Set<string>;
|
|
57
|
+
runtime: Set<string>;
|
|
58
|
+
}
|
|
59
|
+
/** Load the allowed-enum sets from the governance schema (single source). */
|
|
60
|
+
export declare function loadSchemaEnums(claudeDir: string): SchemaEnums | null;
|
|
61
|
+
/**
|
|
62
|
+
* Ownership-completeness validation. FAILS when any artifact lacks a metadata
|
|
63
|
+
* record, is missing a required field, or carries an out-of-enum value, or when
|
|
64
|
+
* a structural anomaly exists (unknown dir, stale registry entry). PASSES only
|
|
65
|
+
* when every discovered artifact is 100% covered with valid values.
|
|
66
|
+
*/
|
|
67
|
+
export declare function checkOwnership(claudeDir: string, opts?: {
|
|
68
|
+
missingInfraSeverity?: Status;
|
|
69
|
+
}): CheckResult[];
|
|
70
|
+
export {};
|
|
71
|
+
//# sourceMappingURL=build-inventory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-inventory.d.ts","sourceRoot":"","sources":["../../src/core/build-inventory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAS3D,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAE3E,mEAAmE;AACnE,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,aAAa,GAAG,UAAU,CAAC;CACnC;AAED,8EAA8E;AAC9E,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACzB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,EAAE,cAAc,EAAE,CAAC;CACzB;AAOD,UAAU,WAAW;IACpB,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,aAAa,GAAG,UAAU,CAAC;CACvC;AAOD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAAC,MAAM,EAAE,cAAc,EAAE,CAAA;CAAE,CAuDvG;AAmBD,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CASvF;AAMD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAuC3D;AAED,UAAU,WAAW;IACpB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACrB;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAiBrE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,WAAW,EAAE,CAwD7G"}
|