claudeos-core 2.1.1 → 2.3.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/CHANGELOG.md +1649 -481
- package/CONTRIBUTING.md +92 -92
- package/README.de.md +64 -5
- package/README.es.md +64 -5
- package/README.fr.md +64 -5
- package/README.hi.md +64 -5
- package/README.ja.md +64 -5
- package/README.ko.md +1018 -959
- package/README.md +1020 -960
- package/README.ru.md +66 -5
- package/README.vi.md +1019 -960
- package/README.zh-CN.md +64 -5
- package/bin/cli.js +152 -148
- package/bin/commands/init.js +1673 -1518
- package/bin/commands/lint.js +62 -0
- package/bin/commands/memory.js +438 -438
- package/bin/lib/cli-utils.js +206 -206
- package/claude-md-validator/index.js +184 -0
- package/claude-md-validator/reporter.js +66 -0
- package/claude-md-validator/structural-checks.js +528 -0
- package/content-validator/index.js +666 -436
- package/lib/env-parser.js +317 -0
- package/lib/expected-guides.js +23 -23
- package/lib/expected-outputs.js +90 -90
- package/lib/language-config.js +35 -35
- package/lib/memory-scaffold.js +1058 -1052
- package/lib/plan-parser.js +165 -165
- package/lib/staged-rules.js +118 -118
- package/manifest-generator/index.js +174 -174
- package/package.json +90 -87
- package/pass-json-validator/index.js +337 -337
- package/pass-prompts/templates/angular/pass3.md +28 -13
- package/pass-prompts/templates/common/claude-md-scaffold.md +686 -0
- package/pass-prompts/templates/common/pass3-footer.md +402 -39
- package/pass-prompts/templates/common/pass3b-core-header.md +43 -0
- package/pass-prompts/templates/common/pass4.md +375 -302
- package/pass-prompts/templates/common/staging-override.md +26 -26
- package/pass-prompts/templates/java-spring/pass3.md +31 -21
- package/pass-prompts/templates/kotlin-spring/pass3.md +34 -22
- package/pass-prompts/templates/node-express/pass3.md +30 -21
- package/pass-prompts/templates/node-fastify/pass3.md +28 -14
- package/pass-prompts/templates/node-nestjs/pass3.md +29 -14
- package/pass-prompts/templates/node-nextjs/pass3.md +34 -21
- package/pass-prompts/templates/node-vite/pass1.md +117 -117
- package/pass-prompts/templates/node-vite/pass2.md +78 -78
- package/pass-prompts/templates/node-vite/pass3.md +30 -13
- package/pass-prompts/templates/python-django/pass3.md +32 -21
- package/pass-prompts/templates/python-fastapi/pass3.md +33 -21
- package/pass-prompts/templates/python-flask/pass1.md +119 -119
- package/pass-prompts/templates/python-flask/pass2.md +85 -85
- package/pass-prompts/templates/python-flask/pass3.md +31 -13
- package/pass-prompts/templates/vue-nuxt/pass3.md +32 -13
- package/plan-installer/domain-grouper.js +76 -76
- package/plan-installer/index.js +137 -129
- package/plan-installer/prompt-generator.js +188 -128
- package/plan-installer/scanners/scan-frontend.js +505 -473
- package/plan-installer/scanners/scan-java.js +226 -226
- package/plan-installer/scanners/scan-node.js +57 -57
- package/plan-installer/scanners/scan-python.js +85 -85
- package/plan-installer/stack-detector.js +482 -466
- package/plan-installer/structure-scanner.js +65 -65
- package/sync-checker/index.js +177 -177
|
@@ -1,174 +1,174 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* ClaudeOS-Core — Manifest Generator
|
|
5
|
-
*
|
|
6
|
-
* Role: Generate metadata JSON + initialize stale-report
|
|
7
|
-
* Output (claudeos-core/generated/):
|
|
8
|
-
* - rule-manifest.json : rules/standard/skills/guide file list + frontmatter
|
|
9
|
-
* - sync-map.json : plan/ <file> block → file path mapping (empty since
|
|
10
|
-
* master plan generation was removed in v2.1.0;
|
|
11
|
-
* kept for sync-checker backward compatibility)
|
|
12
|
-
* - stale-report.json : initialized (each verification tool appends results)
|
|
13
|
-
*
|
|
14
|
-
* v2.1.0 removed plan-manifest.json generation (master plan aggregation gone).
|
|
15
|
-
*
|
|
16
|
-
* Usage: npx claudeos-core <cmd> or node claudeos-core-tools/manifest-generator/index.js
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
const fs = require("fs");
|
|
20
|
-
const path = require("path");
|
|
21
|
-
const matter = require("gray-matter");
|
|
22
|
-
const { glob } = require("glob");
|
|
23
|
-
const { parseFileBlocks, parseCodeBlocks, CODE_BLOCK_PLANS } = require("../lib/plan-parser");
|
|
24
|
-
const { updateStaleReport } = require("../lib/stale-report");
|
|
25
|
-
|
|
26
|
-
const ROOT = process.env.CLAUDEOS_ROOT || path.resolve(__dirname, "../..");
|
|
27
|
-
const GEN = path.join(ROOT, "claudeos-core/generated");
|
|
28
|
-
|
|
29
|
-
const DIRS = {
|
|
30
|
-
rules: path.join(ROOT, ".claude/rules"),
|
|
31
|
-
standard: path.join(ROOT, "claudeos-core/standard"),
|
|
32
|
-
skills: path.join(ROOT, "claudeos-core/skills"),
|
|
33
|
-
plan: path.join(ROOT, "claudeos-core/plan"),
|
|
34
|
-
guide: path.join(ROOT, "claudeos-core/guide"),
|
|
35
|
-
database: path.join(ROOT, "claudeos-core/database"),
|
|
36
|
-
mcpGuide: path.join(ROOT, "claudeos-core/mcp-guide"),
|
|
37
|
-
memory: path.join(ROOT, "claudeos-core/memory"),
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
function rel(p) {
|
|
41
|
-
return path.relative(ROOT, p).replace(/\\/g, "/");
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
function stat(f) {
|
|
45
|
-
try {
|
|
46
|
-
const s = fs.statSync(f);
|
|
47
|
-
const c = fs.readFileSync(f, "utf-8");
|
|
48
|
-
return {
|
|
49
|
-
lines: c.endsWith("\n") ? c.split("\n").length - 1 : c.split("\n").length,
|
|
50
|
-
bytes: s.size,
|
|
51
|
-
modified: s.mtime.toISOString().split("T")[0],
|
|
52
|
-
};
|
|
53
|
-
} catch (_e) {
|
|
54
|
-
return { lines: 0, bytes: 0, modified: "unknown" };
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function frontmatter(f) {
|
|
59
|
-
try {
|
|
60
|
-
return matter(fs.readFileSync(f, "utf-8")).data || {};
|
|
61
|
-
} catch (_e) {
|
|
62
|
-
return {};
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
// Wrappers: read file → parse → attach planFile metadata
|
|
68
|
-
function extractFileBlocksFromFile(f) {
|
|
69
|
-
if (!fs.existsSync(f)) return [];
|
|
70
|
-
const content = fs.readFileSync(f, "utf-8");
|
|
71
|
-
return parseFileBlocks(content).map(b => ({ sourcePath: b.path, planFile: rel(f) }));
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function extractCodeBlockPathsFromFile(f) {
|
|
75
|
-
if (!fs.existsSync(f)) return [];
|
|
76
|
-
const content = fs.readFileSync(f, "utf-8");
|
|
77
|
-
return parseCodeBlocks(content).map(b => ({ sourcePath: b.path, planFile: rel(f) }));
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
async function main() {
|
|
81
|
-
console.log("\n╔═══════════════════════════════════════╗");
|
|
82
|
-
console.log("║ ClaudeOS-Core — Manifest Generator ║");
|
|
83
|
-
console.log("╚═══════════════════════════════════════╝\n");
|
|
84
|
-
|
|
85
|
-
if (!fs.existsSync(GEN)) fs.mkdirSync(GEN, { recursive: true });
|
|
86
|
-
|
|
87
|
-
// ─── rule-manifest.json ────────────────────────────────
|
|
88
|
-
const mf = {
|
|
89
|
-
generatedAt: new Date().toISOString(),
|
|
90
|
-
rules: [], standards: [], skills: [], guides: [], database: [], mcpGuide: [],
|
|
91
|
-
memory: [],
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
const scanTargets = [
|
|
95
|
-
["rules", DIRS.rules],
|
|
96
|
-
["standards", DIRS.standard],
|
|
97
|
-
["skills", DIRS.skills],
|
|
98
|
-
["guides", DIRS.guide],
|
|
99
|
-
["database", DIRS.database],
|
|
100
|
-
["mcpGuide", DIRS.mcpGuide],
|
|
101
|
-
["memory", DIRS.memory],
|
|
102
|
-
];
|
|
103
|
-
|
|
104
|
-
for (const [key, dir] of scanTargets) {
|
|
105
|
-
if (!fs.existsSync(dir)) continue;
|
|
106
|
-
for (const f of await glob("**/*.md", { cwd: dir, absolute: true })) {
|
|
107
|
-
const r = rel(f);
|
|
108
|
-
const s = stat(f);
|
|
109
|
-
const fm = frontmatter(f);
|
|
110
|
-
mf[key].push({
|
|
111
|
-
path: r,
|
|
112
|
-
paths: fm.paths || undefined,
|
|
113
|
-
name: fm.name || undefined,
|
|
114
|
-
...s,
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
mf.summary = {
|
|
120
|
-
totalRules: mf.rules.length,
|
|
121
|
-
totalStandards: mf.standards.length,
|
|
122
|
-
totalSkills: mf.skills.length,
|
|
123
|
-
totalGuides: mf.guides.length,
|
|
124
|
-
totalDatabase: mf.database.length,
|
|
125
|
-
totalMcpGuide: mf.mcpGuide.length,
|
|
126
|
-
totalMemory: mf.memory.length,
|
|
127
|
-
total: mf.rules.length + mf.standards.length + mf.skills.length +
|
|
128
|
-
mf.guides.length + mf.database.length + mf.mcpGuide.length +
|
|
129
|
-
mf.memory.length,
|
|
130
|
-
};
|
|
131
|
-
fs.writeFileSync(path.join(GEN, "rule-manifest.json"), JSON.stringify(mf, null, 2));
|
|
132
|
-
console.log(` ✅ rule-manifest.json — ${mf.summary.total} files indexed`);
|
|
133
|
-
|
|
134
|
-
// import-graph.json removed — @import was never a Claude Code feature
|
|
135
|
-
|
|
136
|
-
// ─── sync-map.json ─────────────────────────────────────
|
|
137
|
-
// Master plan aggregation was removed in v2.1.0 (plan/ directory is no longer
|
|
138
|
-
// populated). sync-map.json is still produced with an empty `mappings` array
|
|
139
|
-
// for sync-checker backward compatibility — sync-checker treats an empty map
|
|
140
|
-
// as "nothing to sync" and exits cleanly (see master-plan-removal tests).
|
|
141
|
-
// CODE_BLOCK_PLANS imported from lib/plan-parser.js
|
|
142
|
-
const sm = { generatedAt: new Date().toISOString(), mappings: [] };
|
|
143
|
-
if (fs.existsSync(DIRS.plan)) {
|
|
144
|
-
for (const p of await glob("*.md", { cwd: DIRS.plan, absolute: true })) {
|
|
145
|
-
const bn = path.basename(p);
|
|
146
|
-
if (CODE_BLOCK_PLANS.includes(bn)) {
|
|
147
|
-
sm.mappings.push(...extractCodeBlockPathsFromFile(p));
|
|
148
|
-
} else {
|
|
149
|
-
sm.mappings.push(...extractFileBlocksFromFile(p));
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
sm.summary = { totalMappings: sm.mappings.length };
|
|
154
|
-
fs.writeFileSync(path.join(GEN, "sync-map.json"), JSON.stringify(sm, null, 2));
|
|
155
|
-
console.log(` ✅ sync-map.json — ${sm.summary.totalMappings} mappings`);
|
|
156
|
-
|
|
157
|
-
// ─── plan-manifest.json ─ REMOVED in v2.1.0 ─────────────
|
|
158
|
-
// Master plan generation was removed; a plan-manifest with an empty plans
|
|
159
|
-
// array is noise — nothing reads it, nothing validates it. The two-file
|
|
160
|
-
// stale output (62 B plan-manifest + 147 B plan-sync-status) was removed
|
|
161
|
-
// to match the declared v2.1.0 contract "plan/ directory is no longer
|
|
162
|
-
// created during init".
|
|
163
|
-
|
|
164
|
-
// ─── Initialize stale-report.json (preserve existing sub-tool results) ──
|
|
165
|
-
updateStaleReport(GEN, "generatedAt", new Date().toISOString(), { totalIssues: 0, status: "initial" });
|
|
166
|
-
console.log(" ✅ stale-report.json — initialized");
|
|
167
|
-
console.log("\n 📁 Output: claudeos-core/generated/ (3 files)\n");
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
if (require.main === module) {
|
|
171
|
-
main().catch(e => { console.error(`\n ❌ Manifest Generator failed: ${e.message || e}`); process.exit(1); });
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
module.exports = { main };
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ClaudeOS-Core — Manifest Generator
|
|
5
|
+
*
|
|
6
|
+
* Role: Generate metadata JSON + initialize stale-report
|
|
7
|
+
* Output (claudeos-core/generated/):
|
|
8
|
+
* - rule-manifest.json : rules/standard/skills/guide file list + frontmatter
|
|
9
|
+
* - sync-map.json : plan/ <file> block → file path mapping (empty since
|
|
10
|
+
* master plan generation was removed in v2.1.0;
|
|
11
|
+
* kept for sync-checker backward compatibility)
|
|
12
|
+
* - stale-report.json : initialized (each verification tool appends results)
|
|
13
|
+
*
|
|
14
|
+
* v2.1.0 removed plan-manifest.json generation (master plan aggregation gone).
|
|
15
|
+
*
|
|
16
|
+
* Usage: npx claudeos-core <cmd> or node claudeos-core-tools/manifest-generator/index.js
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const fs = require("fs");
|
|
20
|
+
const path = require("path");
|
|
21
|
+
const matter = require("gray-matter");
|
|
22
|
+
const { glob } = require("glob");
|
|
23
|
+
const { parseFileBlocks, parseCodeBlocks, CODE_BLOCK_PLANS } = require("../lib/plan-parser");
|
|
24
|
+
const { updateStaleReport } = require("../lib/stale-report");
|
|
25
|
+
|
|
26
|
+
const ROOT = process.env.CLAUDEOS_ROOT || path.resolve(__dirname, "../..");
|
|
27
|
+
const GEN = path.join(ROOT, "claudeos-core/generated");
|
|
28
|
+
|
|
29
|
+
const DIRS = {
|
|
30
|
+
rules: path.join(ROOT, ".claude/rules"),
|
|
31
|
+
standard: path.join(ROOT, "claudeos-core/standard"),
|
|
32
|
+
skills: path.join(ROOT, "claudeos-core/skills"),
|
|
33
|
+
plan: path.join(ROOT, "claudeos-core/plan"),
|
|
34
|
+
guide: path.join(ROOT, "claudeos-core/guide"),
|
|
35
|
+
database: path.join(ROOT, "claudeos-core/database"),
|
|
36
|
+
mcpGuide: path.join(ROOT, "claudeos-core/mcp-guide"),
|
|
37
|
+
memory: path.join(ROOT, "claudeos-core/memory"),
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
function rel(p) {
|
|
41
|
+
return path.relative(ROOT, p).replace(/\\/g, "/");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function stat(f) {
|
|
45
|
+
try {
|
|
46
|
+
const s = fs.statSync(f);
|
|
47
|
+
const c = fs.readFileSync(f, "utf-8");
|
|
48
|
+
return {
|
|
49
|
+
lines: c.endsWith("\n") ? c.split("\n").length - 1 : c.split("\n").length,
|
|
50
|
+
bytes: s.size,
|
|
51
|
+
modified: s.mtime.toISOString().split("T")[0],
|
|
52
|
+
};
|
|
53
|
+
} catch (_e) {
|
|
54
|
+
return { lines: 0, bytes: 0, modified: "unknown" };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function frontmatter(f) {
|
|
59
|
+
try {
|
|
60
|
+
return matter(fs.readFileSync(f, "utf-8")).data || {};
|
|
61
|
+
} catch (_e) {
|
|
62
|
+
return {};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
// Wrappers: read file → parse → attach planFile metadata
|
|
68
|
+
function extractFileBlocksFromFile(f) {
|
|
69
|
+
if (!fs.existsSync(f)) return [];
|
|
70
|
+
const content = fs.readFileSync(f, "utf-8");
|
|
71
|
+
return parseFileBlocks(content).map(b => ({ sourcePath: b.path, planFile: rel(f) }));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function extractCodeBlockPathsFromFile(f) {
|
|
75
|
+
if (!fs.existsSync(f)) return [];
|
|
76
|
+
const content = fs.readFileSync(f, "utf-8");
|
|
77
|
+
return parseCodeBlocks(content).map(b => ({ sourcePath: b.path, planFile: rel(f) }));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async function main() {
|
|
81
|
+
console.log("\n╔═══════════════════════════════════════╗");
|
|
82
|
+
console.log("║ ClaudeOS-Core — Manifest Generator ║");
|
|
83
|
+
console.log("╚═══════════════════════════════════════╝\n");
|
|
84
|
+
|
|
85
|
+
if (!fs.existsSync(GEN)) fs.mkdirSync(GEN, { recursive: true });
|
|
86
|
+
|
|
87
|
+
// ─── rule-manifest.json ────────────────────────────────
|
|
88
|
+
const mf = {
|
|
89
|
+
generatedAt: new Date().toISOString(),
|
|
90
|
+
rules: [], standards: [], skills: [], guides: [], database: [], mcpGuide: [],
|
|
91
|
+
memory: [],
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const scanTargets = [
|
|
95
|
+
["rules", DIRS.rules],
|
|
96
|
+
["standards", DIRS.standard],
|
|
97
|
+
["skills", DIRS.skills],
|
|
98
|
+
["guides", DIRS.guide],
|
|
99
|
+
["database", DIRS.database],
|
|
100
|
+
["mcpGuide", DIRS.mcpGuide],
|
|
101
|
+
["memory", DIRS.memory],
|
|
102
|
+
];
|
|
103
|
+
|
|
104
|
+
for (const [key, dir] of scanTargets) {
|
|
105
|
+
if (!fs.existsSync(dir)) continue;
|
|
106
|
+
for (const f of await glob("**/*.md", { cwd: dir, absolute: true })) {
|
|
107
|
+
const r = rel(f);
|
|
108
|
+
const s = stat(f);
|
|
109
|
+
const fm = frontmatter(f);
|
|
110
|
+
mf[key].push({
|
|
111
|
+
path: r,
|
|
112
|
+
paths: fm.paths || undefined,
|
|
113
|
+
name: fm.name || undefined,
|
|
114
|
+
...s,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
mf.summary = {
|
|
120
|
+
totalRules: mf.rules.length,
|
|
121
|
+
totalStandards: mf.standards.length,
|
|
122
|
+
totalSkills: mf.skills.length,
|
|
123
|
+
totalGuides: mf.guides.length,
|
|
124
|
+
totalDatabase: mf.database.length,
|
|
125
|
+
totalMcpGuide: mf.mcpGuide.length,
|
|
126
|
+
totalMemory: mf.memory.length,
|
|
127
|
+
total: mf.rules.length + mf.standards.length + mf.skills.length +
|
|
128
|
+
mf.guides.length + mf.database.length + mf.mcpGuide.length +
|
|
129
|
+
mf.memory.length,
|
|
130
|
+
};
|
|
131
|
+
fs.writeFileSync(path.join(GEN, "rule-manifest.json"), JSON.stringify(mf, null, 2));
|
|
132
|
+
console.log(` ✅ rule-manifest.json — ${mf.summary.total} files indexed`);
|
|
133
|
+
|
|
134
|
+
// import-graph.json removed — @import was never a Claude Code feature
|
|
135
|
+
|
|
136
|
+
// ─── sync-map.json ─────────────────────────────────────
|
|
137
|
+
// Master plan aggregation was removed in v2.1.0 (plan/ directory is no longer
|
|
138
|
+
// populated). sync-map.json is still produced with an empty `mappings` array
|
|
139
|
+
// for sync-checker backward compatibility — sync-checker treats an empty map
|
|
140
|
+
// as "nothing to sync" and exits cleanly (see master-plan-removal tests).
|
|
141
|
+
// CODE_BLOCK_PLANS imported from lib/plan-parser.js
|
|
142
|
+
const sm = { generatedAt: new Date().toISOString(), mappings: [] };
|
|
143
|
+
if (fs.existsSync(DIRS.plan)) {
|
|
144
|
+
for (const p of await glob("*.md", { cwd: DIRS.plan, absolute: true })) {
|
|
145
|
+
const bn = path.basename(p);
|
|
146
|
+
if (CODE_BLOCK_PLANS.includes(bn)) {
|
|
147
|
+
sm.mappings.push(...extractCodeBlockPathsFromFile(p));
|
|
148
|
+
} else {
|
|
149
|
+
sm.mappings.push(...extractFileBlocksFromFile(p));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
sm.summary = { totalMappings: sm.mappings.length };
|
|
154
|
+
fs.writeFileSync(path.join(GEN, "sync-map.json"), JSON.stringify(sm, null, 2));
|
|
155
|
+
console.log(` ✅ sync-map.json — ${sm.summary.totalMappings} mappings`);
|
|
156
|
+
|
|
157
|
+
// ─── plan-manifest.json ─ REMOVED in v2.1.0 ─────────────
|
|
158
|
+
// Master plan generation was removed; a plan-manifest with an empty plans
|
|
159
|
+
// array is noise — nothing reads it, nothing validates it. The two-file
|
|
160
|
+
// stale output (62 B plan-manifest + 147 B plan-sync-status) was removed
|
|
161
|
+
// to match the declared v2.1.0 contract "plan/ directory is no longer
|
|
162
|
+
// created during init".
|
|
163
|
+
|
|
164
|
+
// ─── Initialize stale-report.json (preserve existing sub-tool results) ──
|
|
165
|
+
updateStaleReport(GEN, "generatedAt", new Date().toISOString(), { totalIssues: 0, status: "initial" });
|
|
166
|
+
console.log(" ✅ stale-report.json — initialized");
|
|
167
|
+
console.log("\n 📁 Output: claudeos-core/generated/ (3 files)\n");
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (require.main === module) {
|
|
171
|
+
main().catch(e => { console.error(`\n ❌ Manifest Generator failed: ${e.message || e}`); process.exit(1); });
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
module.exports = { main };
|
package/package.json
CHANGED
|
@@ -1,87 +1,90 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "claudeos-core",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "Auto-generate Claude Code documentation from your actual source code — Standards, Rules, Skills, and Guides tailored to your project",
|
|
5
|
-
"main": "bin/cli.js",
|
|
6
|
-
"bin": {
|
|
7
|
-
"claudeos-core": "bin/cli.js"
|
|
8
|
-
},
|
|
9
|
-
"files": [
|
|
10
|
-
"bin/",
|
|
11
|
-
"lib/",
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"pass-
|
|
17
|
-
"
|
|
18
|
-
"plan-
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"README.
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"README.
|
|
28
|
-
"README.
|
|
29
|
-
"README.
|
|
30
|
-
"README.
|
|
31
|
-
"README.
|
|
32
|
-
"README.
|
|
33
|
-
"README.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
},
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "claudeos-core",
|
|
3
|
+
"version": "2.3.0",
|
|
4
|
+
"description": "Auto-generate Claude Code documentation from your actual source code — Standards, Rules, Skills, and Guides tailored to your project",
|
|
5
|
+
"main": "bin/cli.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"claudeos-core": "bin/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin/",
|
|
11
|
+
"lib/",
|
|
12
|
+
"claude-md-validator/",
|
|
13
|
+
"content-validator/",
|
|
14
|
+
"health-checker/",
|
|
15
|
+
"manifest-generator/",
|
|
16
|
+
"pass-json-validator/",
|
|
17
|
+
"pass-prompts/",
|
|
18
|
+
"plan-installer/",
|
|
19
|
+
"plan-validator/",
|
|
20
|
+
"sync-checker/",
|
|
21
|
+
"bootstrap.sh",
|
|
22
|
+
"README.md",
|
|
23
|
+
"README.ko.md",
|
|
24
|
+
"LICENSE",
|
|
25
|
+
"CHANGELOG.md",
|
|
26
|
+
"CONTRIBUTING.md",
|
|
27
|
+
"README.zh-CN.md",
|
|
28
|
+
"README.ja.md",
|
|
29
|
+
"README.es.md",
|
|
30
|
+
"README.vi.md",
|
|
31
|
+
"README.hi.md",
|
|
32
|
+
"README.ru.md",
|
|
33
|
+
"README.fr.md",
|
|
34
|
+
"README.de.md"
|
|
35
|
+
],
|
|
36
|
+
"scripts": {
|
|
37
|
+
"init": "node bin/cli.js init",
|
|
38
|
+
"lint": "node bin/cli.js lint",
|
|
39
|
+
"health": "node bin/cli.js health",
|
|
40
|
+
"validate": "node bin/cli.js validate",
|
|
41
|
+
"refresh": "node bin/cli.js refresh",
|
|
42
|
+
"restore": "node bin/cli.js restore",
|
|
43
|
+
"pretest": "node -e \"require('glob')\" 2>/dev/null || npm install",
|
|
44
|
+
"test": "node --test tests/*.test.js",
|
|
45
|
+
"test:health": "node health-checker/index.js"
|
|
46
|
+
},
|
|
47
|
+
"keywords": [
|
|
48
|
+
"claude-code",
|
|
49
|
+
"automation",
|
|
50
|
+
"code-analysis",
|
|
51
|
+
"CLAUDE.md",
|
|
52
|
+
"standards",
|
|
53
|
+
"rules",
|
|
54
|
+
"skills",
|
|
55
|
+
"scaffolding",
|
|
56
|
+
"i18n",
|
|
57
|
+
"multi-language",
|
|
58
|
+
"spring-boot",
|
|
59
|
+
"kotlin",
|
|
60
|
+
"exposed",
|
|
61
|
+
"jooq",
|
|
62
|
+
"cqrs",
|
|
63
|
+
"bff",
|
|
64
|
+
"multi-module",
|
|
65
|
+
"monorepo",
|
|
66
|
+
"nextjs",
|
|
67
|
+
"express",
|
|
68
|
+
"fastify",
|
|
69
|
+
"angular",
|
|
70
|
+
"django",
|
|
71
|
+
"fastapi"
|
|
72
|
+
],
|
|
73
|
+
"author": "claudeos-core <claudeoscore@gmail.com> (https://github.com/claudeos-core)",
|
|
74
|
+
"license": "ISC",
|
|
75
|
+
"repository": {
|
|
76
|
+
"type": "git",
|
|
77
|
+
"url": "git+https://github.com/claudeos-core/claudeos-core.git"
|
|
78
|
+
},
|
|
79
|
+
"homepage": "https://github.com/claudeos-core/claudeos-core#readme",
|
|
80
|
+
"bugs": {
|
|
81
|
+
"url": "https://github.com/claudeos-core/claudeos-core/issues"
|
|
82
|
+
},
|
|
83
|
+
"engines": {
|
|
84
|
+
"node": ">=18.0.0"
|
|
85
|
+
},
|
|
86
|
+
"dependencies": {
|
|
87
|
+
"glob": "^13.0.6",
|
|
88
|
+
"gray-matter": "^4.0.3"
|
|
89
|
+
}
|
|
90
|
+
}
|