mewkit 1.10.3 → 1.11.0
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 +56 -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 +138 -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 +63 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/inventory.d.ts +17 -0
- package/dist/commands/inventory.d.ts.map +1 -0
- package/dist/commands/inventory.js +114 -0
- package/dist/commands/inventory.js.map +1 -0
- package/dist/commands/memory.d.ts +3 -0
- package/dist/commands/memory.d.ts.map +1 -1
- package/dist/commands/memory.js +67 -0
- package/dist/commands/memory.js.map +1 -1
- 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 +11 -0
- package/dist/commands/pack.d.ts.map +1 -0
- package/dist/commands/pack.js +192 -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/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 +28 -0
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +170 -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 +175 -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/types.d.ts +2 -2
- package/package.json +1 -1
|
@@ -3,6 +3,11 @@ 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
|
+
const ok = (cond) => (cond ? "pass" : "fail");
|
|
6
11
|
/** Find MeowKit .claude/ in cwd only (no walk-up). */
|
|
7
12
|
function findMeowkitDir(startDir) {
|
|
8
13
|
const candidate = path.join(startDir, ".claude");
|
|
@@ -11,13 +16,14 @@ function findMeowkitDir(startDir) {
|
|
|
11
16
|
}
|
|
12
17
|
return null;
|
|
13
18
|
}
|
|
14
|
-
function checkFileExists(
|
|
15
|
-
const fullPath = path.join(
|
|
19
|
+
function checkFileExists(baseDir, relativePath, section) {
|
|
20
|
+
const fullPath = path.join(baseDir, relativePath);
|
|
16
21
|
const exists = fs.existsSync(fullPath);
|
|
17
22
|
return {
|
|
18
23
|
name: `File exists: ${relativePath}`,
|
|
19
|
-
|
|
24
|
+
status: ok(exists),
|
|
20
25
|
detail: exists ? fullPath : `Missing: ${fullPath}`,
|
|
26
|
+
section,
|
|
21
27
|
};
|
|
22
28
|
}
|
|
23
29
|
function checkDirExists(meowkitDir, relativePath) {
|
|
@@ -25,167 +31,237 @@ function checkDirExists(meowkitDir, relativePath) {
|
|
|
25
31
|
const exists = fs.existsSync(fullPath) && fs.statSync(fullPath).isDirectory();
|
|
26
32
|
return {
|
|
27
33
|
name: `Directory exists: ${relativePath}`,
|
|
28
|
-
|
|
34
|
+
status: ok(exists),
|
|
29
35
|
detail: exists ? fullPath : `Missing: ${fullPath}`,
|
|
36
|
+
section: "Structure",
|
|
30
37
|
};
|
|
31
38
|
}
|
|
32
|
-
function checkHooksExecutable(meowkitDir) {
|
|
39
|
+
export function checkHooksExecutable(meowkitDir) {
|
|
33
40
|
const hooksDir = path.join(meowkitDir, "hooks");
|
|
34
41
|
const results = [];
|
|
35
42
|
if (!fs.existsSync(hooksDir)) {
|
|
36
|
-
results.push({
|
|
37
|
-
name: "Hooks directory",
|
|
38
|
-
passed: false,
|
|
39
|
-
detail: `Missing: ${hooksDir}`,
|
|
40
|
-
});
|
|
43
|
+
results.push({ name: "Hooks directory", status: "fail", detail: `Missing: ${hooksDir}`, section: "Hooks" });
|
|
41
44
|
return results;
|
|
42
45
|
}
|
|
43
|
-
|
|
46
|
+
// Only real hook scripts. Directories (lib/, handlers/, __tests__/) and sidecars
|
|
47
|
+
// (HOOKS_INDEX.md, handlers.json) are NOT hooks — the old code reported them as
|
|
48
|
+
// "Hook executable" because accessSync(X_OK) succeeds on a traversable directory.
|
|
49
|
+
const entries = fs.readdirSync(hooksDir).filter((f) => !f.startsWith("."));
|
|
50
|
+
const hookFiles = entries.filter((f) => isHookScript(path.join(hooksDir, f)));
|
|
51
|
+
const skipped = entries.length - hookFiles.length;
|
|
44
52
|
if (hookFiles.length === 0) {
|
|
45
|
-
results.push({
|
|
46
|
-
name: "Hooks present",
|
|
47
|
-
passed: false,
|
|
48
|
-
detail: "No hook files found in hooks/",
|
|
49
|
-
});
|
|
53
|
+
results.push({ name: "Hooks present", status: "fail", detail: "No hook scripts found in hooks/", section: "Hooks" });
|
|
50
54
|
return results;
|
|
51
55
|
}
|
|
52
56
|
for (const hook of hookFiles) {
|
|
53
57
|
const hookPath = path.join(hooksDir, hook);
|
|
58
|
+
let executable = true;
|
|
54
59
|
try {
|
|
55
60
|
fs.accessSync(hookPath, fs.constants.X_OK);
|
|
56
|
-
results.push({
|
|
57
|
-
name: `Hook executable: ${hook}`,
|
|
58
|
-
passed: true,
|
|
59
|
-
detail: hookPath,
|
|
60
|
-
});
|
|
61
61
|
}
|
|
62
62
|
catch {
|
|
63
|
-
|
|
64
|
-
name: `Hook executable: ${hook}`,
|
|
65
|
-
passed: false,
|
|
66
|
-
detail: `Not executable: ${hookPath}`,
|
|
67
|
-
});
|
|
63
|
+
executable = false;
|
|
68
64
|
}
|
|
65
|
+
results.push({
|
|
66
|
+
name: `Hook executable: ${hook}`,
|
|
67
|
+
status: ok(executable),
|
|
68
|
+
detail: executable ? hookPath : `Not executable: ${hookPath}`,
|
|
69
|
+
section: "Hooks",
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
if (skipped > 0) {
|
|
73
|
+
results.push({
|
|
74
|
+
name: "Hooks: non-script entries skipped",
|
|
75
|
+
status: "pass",
|
|
76
|
+
detail: `${skipped} non-script entr(ies) in hooks/ (subdirs, .md, .json) correctly excluded.`,
|
|
77
|
+
section: "Hooks",
|
|
78
|
+
});
|
|
69
79
|
}
|
|
70
80
|
return results;
|
|
71
81
|
}
|
|
72
82
|
function checkConfigJson(meowkitDir) {
|
|
73
83
|
const configPath = path.join(meowkitDir, "meowkit.config.json");
|
|
74
84
|
if (!fs.existsSync(configPath)) {
|
|
75
|
-
return {
|
|
76
|
-
name: "Config JSON valid",
|
|
77
|
-
passed: false,
|
|
78
|
-
detail: `Missing: ${configPath}`,
|
|
79
|
-
};
|
|
85
|
+
return { name: "Config JSON valid", status: "fail", detail: `Missing: ${configPath}`, section: "Structure" };
|
|
80
86
|
}
|
|
81
87
|
try {
|
|
82
|
-
|
|
83
|
-
JSON
|
|
84
|
-
return {
|
|
85
|
-
name: "Config JSON valid",
|
|
86
|
-
passed: true,
|
|
87
|
-
detail: configPath,
|
|
88
|
-
};
|
|
88
|
+
JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
89
|
+
return { name: "Config JSON valid", status: "pass", detail: configPath, section: "Structure" };
|
|
89
90
|
}
|
|
90
91
|
catch (error) {
|
|
91
92
|
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
|
-
};
|
|
93
|
+
return { name: "Config JSON valid", status: "fail", detail: `Invalid JSON: ${message}`, section: "Structure" };
|
|
97
94
|
}
|
|
98
95
|
}
|
|
99
96
|
function checkDocsRefsContract(meowkitDir) {
|
|
100
|
-
const results = [];
|
|
101
97
|
const contractPath = path.join(meowkitDir, "rules", "docs-reference-contract.md");
|
|
102
98
|
if (!fs.existsSync(contractPath)) {
|
|
103
|
-
|
|
104
|
-
name: "Docs-reference contract present",
|
|
105
|
-
passed: false,
|
|
106
|
-
detail: `Missing: ${contractPath}`,
|
|
107
|
-
});
|
|
108
|
-
return results;
|
|
99
|
+
return [{ name: "Docs-reference contract present", status: "fail", detail: `Missing: ${contractPath}`, section: "Docs" }];
|
|
109
100
|
}
|
|
110
101
|
try {
|
|
111
102
|
const { scannedFiles, findings, errorCount, warnCount } = checkDocsReferences(meowkitDir);
|
|
112
|
-
const passed = errorCount === 0;
|
|
113
103
|
const summary = `Scanned ${scannedFiles} files — ${errorCount} error(s), ${warnCount} warning(s)`;
|
|
114
|
-
const
|
|
104
|
+
const status = errorCount > 0 ? "fail" : warnCount > 0 ? "warn" : "pass";
|
|
105
|
+
const detail = errorCount === 0
|
|
115
106
|
? summary
|
|
116
107
|
: `${summary}\n ${findings
|
|
117
108
|
.filter((f) => f.level === "ERROR")
|
|
118
109
|
.slice(0, 10)
|
|
119
110
|
.map((f) => `${f.file}:${f.line}: ${f.token}`)
|
|
120
111
|
.join("\n ")}`;
|
|
121
|
-
|
|
122
|
-
name: "Docs references on Type-1 allowlist",
|
|
123
|
-
passed,
|
|
124
|
-
detail,
|
|
125
|
-
});
|
|
112
|
+
return [{ name: "Docs references on Type-1 allowlist", status, detail, section: "Docs" }];
|
|
126
113
|
}
|
|
127
114
|
catch (error) {
|
|
128
115
|
const message = error instanceof Error ? error.message : String(error);
|
|
116
|
+
return [{ name: "Docs references on Type-1 allowlist", status: "fail", detail: `Validator crashed: ${message}`, section: "Docs" }];
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Honest portability rendering. The old code did `if (severity === "pass") continue` (hiding
|
|
121
|
+
* configured surfaces) and `passed: severity !== "fail"` (rendering WARN as green PASS, and
|
|
122
|
+
* never surfacing unsupported surfaces). Now: pass→PASS, warn→WARN, fail→FAIL, and an
|
|
123
|
+
* `unsupported` surface → N/A. A one-line coverage summary makes the totals explicit.
|
|
124
|
+
*/
|
|
125
|
+
/**
|
|
126
|
+
* Map a provider diagnostic to an honest status. Crucially: a `warn`-severity diagnostic
|
|
127
|
+
* renders WARN (the old code mapped it to PASS), and an `unsupported` surface renders N/A
|
|
128
|
+
* (the old code silently dropped it).
|
|
129
|
+
*/
|
|
130
|
+
export function diagnosticToStatus(surfaceStatus, severity) {
|
|
131
|
+
if (surfaceStatus === "unsupported")
|
|
132
|
+
return "na";
|
|
133
|
+
if (severity === "fail")
|
|
134
|
+
return "fail";
|
|
135
|
+
if (severity === "warn")
|
|
136
|
+
return "warn";
|
|
137
|
+
return "pass";
|
|
138
|
+
}
|
|
139
|
+
function checkPortability() {
|
|
140
|
+
const diagnostics = collectProviderContractDiagnostics();
|
|
141
|
+
const results = [];
|
|
142
|
+
let nPass = 0, nWarn = 0, nNa = 0, nFail = 0;
|
|
143
|
+
for (const d of diagnostics) {
|
|
144
|
+
const status = diagnosticToStatus(d.surfaceStatus, d.severity);
|
|
145
|
+
if (status === "na")
|
|
146
|
+
nNa++;
|
|
147
|
+
else if (status === "fail")
|
|
148
|
+
nFail++;
|
|
149
|
+
else if (status === "warn")
|
|
150
|
+
nWarn++;
|
|
151
|
+
else
|
|
152
|
+
nPass++;
|
|
129
153
|
results.push({
|
|
130
|
-
name:
|
|
131
|
-
|
|
132
|
-
detail:
|
|
154
|
+
name: `Provider contract: ${d.providerDisplayName}/${d.surface}`,
|
|
155
|
+
status,
|
|
156
|
+
detail: d.message,
|
|
157
|
+
section: "Portability",
|
|
133
158
|
});
|
|
134
159
|
}
|
|
160
|
+
results.push({
|
|
161
|
+
name: "Portability coverage",
|
|
162
|
+
status: "pass",
|
|
163
|
+
detail: `${nPass} native, ${nNa} N/A, ${nWarn} warn, ${nFail} fail across ${diagnostics.length} surface(s).`,
|
|
164
|
+
section: "Portability",
|
|
165
|
+
});
|
|
135
166
|
return results;
|
|
136
167
|
}
|
|
168
|
+
function statusIcon(status) {
|
|
169
|
+
switch (status) {
|
|
170
|
+
case "pass":
|
|
171
|
+
return pc.green("PASS");
|
|
172
|
+
case "warn":
|
|
173
|
+
return pc.yellow("WARN");
|
|
174
|
+
case "na":
|
|
175
|
+
return pc.dim("N/A ");
|
|
176
|
+
case "fail":
|
|
177
|
+
return pc.red("FAIL");
|
|
178
|
+
}
|
|
179
|
+
}
|
|
137
180
|
function printResult(result) {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
if (!result.passed) {
|
|
181
|
+
console.log(` [${statusIcon(result.status)}] ${result.name}`);
|
|
182
|
+
if (result.status !== "pass") {
|
|
141
183
|
console.log(` ${pc.dim(result.detail)}`);
|
|
142
184
|
}
|
|
143
185
|
}
|
|
144
186
|
export async function validate(args = {}) {
|
|
145
187
|
console.log(pc.bold(pc.cyan("Validating .claude/ project structure...")));
|
|
188
|
+
console.log(pc.dim("Scope: structure & wiring only. Run `mewkit doctor --hard-gates` to verify the gates actually block."));
|
|
146
189
|
console.log();
|
|
147
190
|
const meowkitDir = findMeowkitDir(process.cwd());
|
|
148
191
|
if (!meowkitDir) {
|
|
149
|
-
console.error(pc.red("Could not find .claude/ directory in current
|
|
192
|
+
console.error(pc.red("Could not find .claude/ directory in the current directory."));
|
|
150
193
|
process.exit(1);
|
|
151
194
|
}
|
|
152
195
|
console.log(`${pc.dim("Found:")} ${meowkitDir}`);
|
|
153
196
|
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
197
|
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
|
-
}
|
|
198
|
+
// `--workflow` / `--ownership` scope the run to a single check (cheap CI
|
|
199
|
+
// invocations). The default run includes both alongside the structural checks.
|
|
200
|
+
let results;
|
|
201
|
+
if (args.workflow) {
|
|
202
|
+
results = checkWorkflowDrift(projectRoot);
|
|
177
203
|
}
|
|
178
|
-
|
|
179
|
-
|
|
204
|
+
else if (args.ownership) {
|
|
205
|
+
results = checkOwnership(meowkitDir);
|
|
180
206
|
}
|
|
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.`)));
|
|
207
|
+
else if (args.packs) {
|
|
208
|
+
results = checkPacks(meowkitDir);
|
|
186
209
|
}
|
|
187
210
|
else {
|
|
188
|
-
|
|
211
|
+
results = [
|
|
212
|
+
checkDirExists(meowkitDir, "agents"),
|
|
213
|
+
checkDirExists(meowkitDir, "hooks"),
|
|
214
|
+
checkFileExists(projectRoot, "CLAUDE.md", "Structure"),
|
|
215
|
+
checkConfigJson(meowkitDir),
|
|
216
|
+
...checkHooksExecutable(meowkitDir),
|
|
217
|
+
...checkDocsRefsContract(meowkitDir),
|
|
218
|
+
// Default run is advisory: a wholly-absent governance file WARNs
|
|
219
|
+
// (prompt `mewkit upgrade`) rather than failing an un-synced install.
|
|
220
|
+
// The scoped `--workflow`/`--ownership`/`--packs` paths above stay strict for CI.
|
|
221
|
+
...checkWorkflowDrift(projectRoot, { missingSpecSeverity: "warn" }),
|
|
222
|
+
...checkOwnership(meowkitDir, { missingInfraSeverity: "warn" }),
|
|
223
|
+
...checkPacks(meowkitDir, { missingInfraSeverity: "warn" }),
|
|
224
|
+
];
|
|
225
|
+
if (args.portable) {
|
|
226
|
+
results.push(...checkPortability());
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// Exhaustiveness guard: the printed `sections` array MUST list every `Section`
|
|
230
|
+
// union member, or a check's results compute but never render. The mapped type
|
|
231
|
+
// fails to compile if a member is missing here, keeping union + array in sync.
|
|
232
|
+
// ("Inventory" is produced only by `inventory --check`, listed for completeness.)
|
|
233
|
+
const SECTION_ORDER = {
|
|
234
|
+
Structure: true,
|
|
235
|
+
Hooks: true,
|
|
236
|
+
Portability: true,
|
|
237
|
+
Docs: true,
|
|
238
|
+
Workflow: true,
|
|
239
|
+
Ownership: true,
|
|
240
|
+
Packs: true,
|
|
241
|
+
Inventory: true,
|
|
242
|
+
};
|
|
243
|
+
const sections = Object.keys(SECTION_ORDER);
|
|
244
|
+
for (const section of sections) {
|
|
245
|
+
const inSection = results.filter((r) => r.section === section);
|
|
246
|
+
if (inSection.length === 0)
|
|
247
|
+
continue;
|
|
248
|
+
console.log(pc.bold(section));
|
|
249
|
+
for (const r of inSection)
|
|
250
|
+
printResult(r);
|
|
251
|
+
console.log();
|
|
252
|
+
}
|
|
253
|
+
const count = (s) => results.filter((r) => r.status === s).length;
|
|
254
|
+
const pass = count("pass"), warn = count("warn"), na = count("na"), fail = count("fail");
|
|
255
|
+
const parts = [pc.green(`${pass} passed`)];
|
|
256
|
+
if (warn > 0)
|
|
257
|
+
parts.push(pc.yellow(`${warn} warnings`));
|
|
258
|
+
if (na > 0)
|
|
259
|
+
parts.push(pc.dim(`${na} n/a`));
|
|
260
|
+
if (fail > 0)
|
|
261
|
+
parts.push(pc.red(`${fail} failed`));
|
|
262
|
+
console.log(parts.join(", "));
|
|
263
|
+
// FAIL always fails the build. WARN fails only under --strict (off by default).
|
|
264
|
+
if (fail > 0 || (args.strict && warn > 0)) {
|
|
189
265
|
process.exit(1);
|
|
190
266
|
}
|
|
191
267
|
}
|
|
@@ -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":"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"}
|
|
@@ -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"}
|