claudeos-core 1.0.2 → 1.0.3
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/package.json +75 -75
- package/plan-installer/index.js +59 -2
package/package.json
CHANGED
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "claudeos-core",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Auto-generate Claude Code documentation from your actual source code — Standards, Rules, Skills, and Guides tailored to your project",
|
|
5
|
-
"main": "health-checker/index.js",
|
|
6
|
-
"bin": {
|
|
7
|
-
"claudeos-core": "bin/cli.js"
|
|
8
|
-
},
|
|
9
|
-
"files": [
|
|
10
|
-
"bin/",
|
|
11
|
-
"content-validator/",
|
|
12
|
-
"health-checker/",
|
|
13
|
-
"import-linter/",
|
|
14
|
-
"manifest-generator/",
|
|
15
|
-
"pass-json-validator/",
|
|
16
|
-
"pass-prompts/",
|
|
17
|
-
"plan-installer/",
|
|
18
|
-
"plan-validator/",
|
|
19
|
-
"sync-checker/",
|
|
20
|
-
"bootstrap.sh",
|
|
21
|
-
"README.md",
|
|
22
|
-
"README.ko.md",
|
|
23
|
-
"LICENSE",
|
|
24
|
-
"CHANGELOG.md",
|
|
25
|
-
"CONTRIBUTING.md",
|
|
26
|
-
"README.zh-CN.md",
|
|
27
|
-
"README.ja.md",
|
|
28
|
-
"README.es.md",
|
|
29
|
-
"README.vi.md",
|
|
30
|
-
"README.hi.md",
|
|
31
|
-
"README.ru.md",
|
|
32
|
-
"README.fr.md",
|
|
33
|
-
"README.de.md"
|
|
34
|
-
],
|
|
35
|
-
"scripts": {
|
|
36
|
-
"init": "node bin/cli.js init",
|
|
37
|
-
"health": "node bin/cli.js health",
|
|
38
|
-
"validate": "node bin/cli.js validate",
|
|
39
|
-
"refresh": "node bin/cli.js refresh",
|
|
40
|
-
"restore": "node bin/cli.js restore",
|
|
41
|
-
"test": "node health-checker/index.js"
|
|
42
|
-
},
|
|
43
|
-
"keywords": [
|
|
44
|
-
"claude-code",
|
|
45
|
-
"automation",
|
|
46
|
-
"code-analysis",
|
|
47
|
-
"CLAUDE.md",
|
|
48
|
-
"standards",
|
|
49
|
-
"rules",
|
|
50
|
-
"skills",
|
|
51
|
-
"scaffolding",
|
|
52
|
-
"spring-boot",
|
|
53
|
-
"nextjs",
|
|
54
|
-
"express",
|
|
55
|
-
"django",
|
|
56
|
-
"fastapi"
|
|
57
|
-
],
|
|
58
|
-
"author": "claudeos-core <claudeoscore@gmail.com> (https://github.com/claudeos-core)",
|
|
59
|
-
"license": "ISC",
|
|
60
|
-
"repository": {
|
|
61
|
-
"type": "git",
|
|
62
|
-
"url": "git+https://github.com/claudeos-core/claudeos-core.git"
|
|
63
|
-
},
|
|
64
|
-
"homepage": "https://github.com/claudeos-core/claudeos-core#readme",
|
|
65
|
-
"bugs": {
|
|
66
|
-
"url": "https://github.com/claudeos-core/claudeos-core/issues"
|
|
67
|
-
},
|
|
68
|
-
"engines": {
|
|
69
|
-
"node": ">=18.0.0"
|
|
70
|
-
},
|
|
71
|
-
"dependencies": {
|
|
72
|
-
"glob": "^13.0.6",
|
|
73
|
-
"gray-matter": "^4.0.3"
|
|
74
|
-
}
|
|
75
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "claudeos-core",
|
|
3
|
+
"version": "1.0.3",
|
|
4
|
+
"description": "Auto-generate Claude Code documentation from your actual source code — Standards, Rules, Skills, and Guides tailored to your project",
|
|
5
|
+
"main": "health-checker/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"claudeos-core": "bin/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin/",
|
|
11
|
+
"content-validator/",
|
|
12
|
+
"health-checker/",
|
|
13
|
+
"import-linter/",
|
|
14
|
+
"manifest-generator/",
|
|
15
|
+
"pass-json-validator/",
|
|
16
|
+
"pass-prompts/",
|
|
17
|
+
"plan-installer/",
|
|
18
|
+
"plan-validator/",
|
|
19
|
+
"sync-checker/",
|
|
20
|
+
"bootstrap.sh",
|
|
21
|
+
"README.md",
|
|
22
|
+
"README.ko.md",
|
|
23
|
+
"LICENSE",
|
|
24
|
+
"CHANGELOG.md",
|
|
25
|
+
"CONTRIBUTING.md",
|
|
26
|
+
"README.zh-CN.md",
|
|
27
|
+
"README.ja.md",
|
|
28
|
+
"README.es.md",
|
|
29
|
+
"README.vi.md",
|
|
30
|
+
"README.hi.md",
|
|
31
|
+
"README.ru.md",
|
|
32
|
+
"README.fr.md",
|
|
33
|
+
"README.de.md"
|
|
34
|
+
],
|
|
35
|
+
"scripts": {
|
|
36
|
+
"init": "node bin/cli.js init",
|
|
37
|
+
"health": "node bin/cli.js health",
|
|
38
|
+
"validate": "node bin/cli.js validate",
|
|
39
|
+
"refresh": "node bin/cli.js refresh",
|
|
40
|
+
"restore": "node bin/cli.js restore",
|
|
41
|
+
"test": "node health-checker/index.js"
|
|
42
|
+
},
|
|
43
|
+
"keywords": [
|
|
44
|
+
"claude-code",
|
|
45
|
+
"automation",
|
|
46
|
+
"code-analysis",
|
|
47
|
+
"CLAUDE.md",
|
|
48
|
+
"standards",
|
|
49
|
+
"rules",
|
|
50
|
+
"skills",
|
|
51
|
+
"scaffolding",
|
|
52
|
+
"spring-boot",
|
|
53
|
+
"nextjs",
|
|
54
|
+
"express",
|
|
55
|
+
"django",
|
|
56
|
+
"fastapi"
|
|
57
|
+
],
|
|
58
|
+
"author": "claudeos-core <claudeoscore@gmail.com> (https://github.com/claudeos-core)",
|
|
59
|
+
"license": "ISC",
|
|
60
|
+
"repository": {
|
|
61
|
+
"type": "git",
|
|
62
|
+
"url": "git+https://github.com/claudeos-core/claudeos-core.git"
|
|
63
|
+
},
|
|
64
|
+
"homepage": "https://github.com/claudeos-core/claudeos-core#readme",
|
|
65
|
+
"bugs": {
|
|
66
|
+
"url": "https://github.com/claudeos-core/claudeos-core/issues"
|
|
67
|
+
},
|
|
68
|
+
"engines": {
|
|
69
|
+
"node": ">=18.0.0"
|
|
70
|
+
},
|
|
71
|
+
"dependencies": {
|
|
72
|
+
"glob": "^13.0.6",
|
|
73
|
+
"gray-matter": "^4.0.3"
|
|
74
|
+
}
|
|
75
|
+
}
|
package/plan-installer/index.js
CHANGED
|
@@ -181,6 +181,27 @@ async function detectStack() {
|
|
|
181
181
|
}
|
|
182
182
|
}
|
|
183
183
|
|
|
184
|
+
// ── Config file fallback (모노레포: package.json에 없어도 설정 파일로 감지) ──
|
|
185
|
+
if (!stack.frontend) {
|
|
186
|
+
const nextConfigs = ["next.config.js", "next.config.mjs", "next.config.ts"];
|
|
187
|
+
if (nextConfigs.some(c => fs.existsSync(path.join(ROOT, c)))) {
|
|
188
|
+
stack.frontend = "nextjs"; stack.detected.push("next.config (fallback)");
|
|
189
|
+
if (!stack.language) stack.language = "typescript";
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (!stack.frontend) {
|
|
193
|
+
if (fs.existsSync(path.join(ROOT, "vite.config.ts")) || fs.existsSync(path.join(ROOT, "vite.config.js"))) {
|
|
194
|
+
if (!stack.frontend) { stack.frontend = "react"; stack.detected.push("vite.config (fallback)"); }
|
|
195
|
+
if (!stack.language) stack.language = "typescript";
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (!stack.frontend) {
|
|
199
|
+
if (fs.existsSync(path.join(ROOT, "nuxt.config.ts")) || fs.existsSync(path.join(ROOT, "nuxt.config.js"))) {
|
|
200
|
+
stack.frontend = "vue"; stack.detected.push("nuxt.config (fallback)");
|
|
201
|
+
if (!stack.language) stack.language = "typescript";
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
184
205
|
return stack;
|
|
185
206
|
}
|
|
186
207
|
|
|
@@ -333,6 +354,7 @@ async function scanStructure(stack) {
|
|
|
333
354
|
|
|
334
355
|
// ── Next.js/React/Vue ──
|
|
335
356
|
if (stack.frontend === "nextjs" || stack.frontend === "react" || stack.frontend === "vue") {
|
|
357
|
+
// App Router / Pages Router 도메인
|
|
336
358
|
const allDirs = [
|
|
337
359
|
...await glob("{app,src/app}/*/", { cwd: ROOT }),
|
|
338
360
|
...await glob("{pages,src/pages}/*/", { cwd: ROOT }),
|
|
@@ -344,10 +366,45 @@ async function scanStructure(stack) {
|
|
|
344
366
|
const files = await glob(`${dir}**/*.{tsx,jsx,ts,js}`, { cwd: ROOT });
|
|
345
367
|
if (files.length > 0) {
|
|
346
368
|
const pages = files.filter(f => /page\.|index\./.test(f)).length;
|
|
347
|
-
const
|
|
348
|
-
|
|
369
|
+
const layouts = files.filter(f => /layout\./.test(f)).length;
|
|
370
|
+
const clientFiles = files.filter(f => /client\./.test(f)).length;
|
|
371
|
+
const serverFiles = pages + layouts;
|
|
372
|
+
const components = files.filter(f => !/page\.|layout\.|index\.|client\./.test(f)).length;
|
|
373
|
+
frontendDomains.push({
|
|
374
|
+
name, type: "frontend", pages, layouts, clientFiles, serverFiles, components, totalFiles: files.length,
|
|
375
|
+
rscPattern: clientFiles > 0 ? "RSC+Client split" : "default",
|
|
376
|
+
});
|
|
349
377
|
}
|
|
350
378
|
}
|
|
379
|
+
|
|
380
|
+
// App Router RSC/Client 전체 통계 (project-analysis.json용)
|
|
381
|
+
if (stack.frontend === "nextjs") {
|
|
382
|
+
const allClientFiles = await glob("{app,src/app}/**/client.{tsx,ts,jsx,js}", { cwd: ROOT });
|
|
383
|
+
const allPageFiles = await glob("{app,src/app}/**/page.{tsx,ts,jsx,js}", { cwd: ROOT });
|
|
384
|
+
const allLayoutFiles = await glob("{app,src/app}/**/layout.{tsx,ts,jsx,js}", { cwd: ROOT });
|
|
385
|
+
frontend.clientComponents = allClientFiles.length;
|
|
386
|
+
frontend.serverPages = allPageFiles.length;
|
|
387
|
+
frontend.layouts = allLayoutFiles.length;
|
|
388
|
+
frontend.rscPattern = allClientFiles.length > 0;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// FSD (Feature-Sliced Design): features/*, widgets/*, entities/*
|
|
392
|
+
const fsdLayers = ["features", "widgets", "entities"];
|
|
393
|
+
for (const layer of fsdLayers) {
|
|
394
|
+
const fsdDirs = await glob(`{${layer},src/${layer}}/*/`, { cwd: ROOT });
|
|
395
|
+
for (const dir of fsdDirs) {
|
|
396
|
+
const name = path.basename(dir);
|
|
397
|
+
if (["ui", "common", "shared", "lib", "config", "index"].includes(name)) continue;
|
|
398
|
+
const files = await glob(`${dir}**/*.{tsx,jsx,ts,js}`, { cwd: ROOT, ignore: ["**/*.spec.*", "**/*.test.*", "**/*.stories.*"] });
|
|
399
|
+
if (files.length > 0) {
|
|
400
|
+
const uiFiles = files.filter(f => /\bui\b/.test(f)).length;
|
|
401
|
+
const modelFiles = files.filter(f => /model|store|hook/.test(f)).length;
|
|
402
|
+
frontendDomains.push({ name: `${layer}/${name}`, type: "frontend", components: uiFiles, models: modelFiles, totalFiles: files.length });
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
// components/* (기존)
|
|
351
408
|
const compDirs = await glob("{src/,}components/*/", { cwd: ROOT });
|
|
352
409
|
for (const dir of compDirs) {
|
|
353
410
|
const name = path.basename(dir);
|