claudeos-core 1.5.0 → 1.6.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.
Files changed (39) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.de.md +54 -27
  3. package/README.es.md +54 -26
  4. package/README.fr.md +54 -26
  5. package/README.hi.md +54 -27
  6. package/README.ja.md +53 -26
  7. package/README.ko.md +56 -29
  8. package/README.md +53 -26
  9. package/README.ru.md +54 -27
  10. package/README.vi.md +54 -27
  11. package/README.zh-CN.md +54 -27
  12. package/bin/cli.js +6 -2
  13. package/bin/commands/init.js +48 -46
  14. package/bin/lib/cli-utils.js +6 -10
  15. package/bin/lib/lang-selector.js +10 -8
  16. package/bin/lib/resume-selector.js +10 -8
  17. package/content-validator/index.js +7 -12
  18. package/health-checker/index.js +7 -17
  19. package/lib/plan-parser.js +149 -0
  20. package/lib/safe-fs.js +2 -2
  21. package/lib/stale-report.js +36 -0
  22. package/manifest-generator/index.js +13 -36
  23. package/package.json +87 -87
  24. package/pass-json-validator/index.js +7 -12
  25. package/pass-prompts/templates/node-nestjs/pass1.md +132 -0
  26. package/pass-prompts/templates/node-nestjs/pass2.md +97 -0
  27. package/pass-prompts/templates/node-nestjs/pass3.md +121 -0
  28. package/pass-prompts/templates/vue-nuxt/pass1.md +119 -0
  29. package/pass-prompts/templates/vue-nuxt/pass2.md +83 -0
  30. package/pass-prompts/templates/vue-nuxt/pass3.md +100 -0
  31. package/plan-installer/domain-grouper.js +5 -2
  32. package/plan-installer/prompt-generator.js +1 -4
  33. package/plan-installer/scanners/scan-frontend.js +14 -7
  34. package/plan-installer/scanners/scan-java.js +18 -13
  35. package/plan-installer/scanners/scan-kotlin.js +47 -23
  36. package/plan-installer/scanners/scan-node.js +16 -2
  37. package/plan-installer/stack-detector.js +42 -1
  38. package/plan-validator/index.js +11 -121
  39. package/sync-checker/index.js +6 -19
package/README.md CHANGED
@@ -75,14 +75,16 @@ This difference compounds. 10 tasks/day × 20 minutes saved = **3+ hours/day**.
75
75
  |---|---|---|
76
76
  | **Java / Spring Boot** | `build.gradle`, `pom.xml`, 5 package patterns | 10 categories, 59 sub-items |
77
77
  | **Kotlin / Spring Boot** | `build.gradle.kts`, kotlin plugin, `settings.gradle.kts`, CQRS/BFF auto-detect | 12 categories, 95 sub-items |
78
- | **Node.js / Express / NestJS** | `package.json` | 9 categories, 57 sub-items |
79
- | **Next.js / React / Vue** | `package.json`, `next.config.*`, FSD support | 9 categories, 55 sub-items |
78
+ | **Node.js / Express** | `package.json` | 9 categories, 57 sub-items |
79
+ | **Node.js / NestJS** | `package.json` (`@nestjs/core`) | 10 categories, 68 sub-items |
80
+ | **Next.js / React** | `package.json`, `next.config.*`, FSD support | 9 categories, 55 sub-items |
81
+ | **Vue / Nuxt** | `package.json`, `nuxt.config.*`, Composition API | 9 categories, 58 sub-items |
80
82
  | **Python / Django** | `requirements.txt`, `pyproject.toml` | 10 categories, 55 sub-items |
81
83
  | **Python / FastAPI** | `requirements.txt`, `pyproject.toml` | 10 categories, 58 sub-items |
82
84
  | **Node.js / Fastify** | `package.json` | 10 categories, 62 sub-items |
83
85
  | **Angular** | `package.json`, `angular.json` | 12 categories, 78 sub-items |
84
86
 
85
- Auto-detected: language & version, framework & version, ORM (MyBatis, JPA, Exposed, Prisma, TypeORM, SQLAlchemy, etc.), database (PostgreSQL, MySQL, Oracle, MongoDB, SQLite), package manager (Gradle, Maven, npm, yarn, pnpm, pip, poetry), architecture (CQRS, BFF — from module names), multi-module structure (from settings.gradle).
87
+ Auto-detected: language & version, framework & version, ORM (MyBatis, JPA, Exposed, Prisma, TypeORM, SQLAlchemy, etc.), database (PostgreSQL, MySQL, Oracle, MongoDB, SQLite), package manager (Gradle, Maven, npm, yarn, pnpm, pip, poetry), architecture (CQRS, BFF — from module names), multi-module structure (from settings.gradle), monorepo (Turborepo, pnpm-workspace, Lerna, npm/yarn workspaces).
86
88
 
87
89
  **You don't specify anything. It's all detected automatically.**
88
90
 
@@ -96,7 +98,7 @@ Auto-detected: language & version, framework & version, ORM (MyBatis, JPA, Expos
96
98
  | E | DDD/Hexagonal | `{domain}/adapter/in/web/` | `user/adapter/in/web/UserController.java` |
97
99
  | C | Flat | `controller/*.java` | `controller/UserController.java` → extracts `user` from class name |
98
100
 
99
- Service-only domains (without controllers) are also detected via `service/`, `dao/`, `aggregator/`, `mapper/`, `repository/` directories. Skips: `common`, `config`, `util`, `core`, `front`, `admin`, `v1`, `v2`, etc.
101
+ Service-only domains (without controllers) are also detected via `service/`, `dao/`, `aggregator/`, `facade/`, `usecase/`, `orchestrator/`, `mapper/`, `repository/` directories. Skips: `common`, `config`, `util`, `core`, `front`, `admin`, `v1`, `v2`, etc.
100
102
 
101
103
  ### Kotlin Multi-Module Domain Detection
102
104
 
@@ -192,7 +194,7 @@ npx claudeos-core init --lang en # English (default)
192
194
 
193
195
  > **Note:** This sets the language for generated documentation files only. Code analysis (Pass 1–2) always runs in English; generated output (Pass 3) is written in your chosen language. Code examples inside the generated files remain in their original programming language syntax.
194
196
 
195
- That's it. After 5–18 minutes, all documentation is generated and ready to use.
197
+ That's it. After 5–18 minutes, all documentation is generated and ready to use. The CLI shows elapsed time per pass and total time in the completion banner.
196
198
 
197
199
  ### Manual Step-by-Step Installation
198
200
 
@@ -583,9 +585,18 @@ Yes, recommended. Your team can share the same Claude Code standards. Consider a
583
585
  **Q: What about mixed-stack projects (e.g., Java backend + React frontend)?**
584
586
  Fully supported. ClaudeOS-Core auto-detects both stacks, tags domains as `backend` or `frontend`, and uses stack-specific analysis prompts for each. Pass 2 merges everything, and Pass 3 generates both backend and frontend standards in one pass.
585
587
 
588
+ **Q: Does it work with Turborepo / pnpm workspaces / Lerna monorepos?**
589
+ Yes. ClaudeOS-Core detects `turbo.json`, `pnpm-workspace.yaml`, `lerna.json`, or `package.json#workspaces` and automatically scans sub-package `package.json` files for framework/ORM/DB dependencies. Domain scanning covers `apps/*/src/` and `packages/*/src/` patterns. Run from the monorepo root.
590
+
586
591
  **Q: What happens on re-run?**
587
592
  If previous Pass 1/2 results exist, an interactive prompt lets you choose: **Continue** (resume from where it stopped) or **Fresh** (delete all and start over). Use `--force` to skip the prompt and always start fresh. Pass 3 always re-runs. Previous versions can be restored from Master Plans.
588
593
 
594
+ **Q: Does NestJS get its own template or use the Express one?**
595
+ NestJS uses a dedicated `node-nestjs` template with NestJS-specific analysis categories: `@Module`, `@Injectable`, `@Controller` decorators, Guards, Pipes, Interceptors, DI container, CQRS patterns, and `Test.createTestingModule`. Express projects use the separate `node-express` template.
596
+
597
+ **Q: What about Vue / Nuxt projects?**
598
+ Vue/Nuxt uses a dedicated `vue-nuxt` template covering Composition API, `<script setup>`, defineProps/defineEmits, Pinia stores, `useFetch`/`useAsyncData`, Nitro server routes, and `@nuxt/test-utils`. Next.js/React projects use the `node-nextjs` template.
599
+
589
600
  **Q: Does it support Kotlin?**
590
601
  Yes. ClaudeOS-Core auto-detects Kotlin from `build.gradle.kts` or the kotlin plugin in `build.gradle`. It uses a dedicated `kotlin-spring` template with Kotlin-specific analysis (data classes, sealed classes, coroutines, extension functions, MockK, etc.).
591
602
 
@@ -604,50 +615,66 @@ pass-prompts/templates/
604
615
  ├── common/ # Shared header/footer
605
616
  ├── java-spring/ # Java / Spring Boot
606
617
  ├── kotlin-spring/ # Kotlin / Spring Boot (CQRS, BFF, multi-module)
607
- ├── node-express/ # Node.js / Express / NestJS
618
+ ├── node-express/ # Node.js / Express
619
+ ├── node-nestjs/ # Node.js / NestJS (Module, DI, Guard, Pipe, Interceptor)
608
620
  ├── node-fastify/ # Node.js / Fastify
609
- ├── node-nextjs/ # Next.js / React / Vue
621
+ ├── node-nextjs/ # Next.js / React
622
+ ├── vue-nuxt/ # Vue / Nuxt (Composition API, Pinia, Nitro)
610
623
  ├── angular/ # Angular
611
624
  ├── python-django/ # Python / Django (DRF)
612
625
  └── python-fastapi/ # Python / FastAPI
613
626
  ```
614
627
 
615
- `plan-installer` auto-detects your stack(s), then assembles type-specific prompts. For multi-stack projects, separate `pass1-backend-prompt.md` and `pass1-frontend-prompt.md` are generated, while `pass3-prompt.md` combines both stacks' generation targets.
628
+ `plan-installer` auto-detects your stack(s), then assembles type-specific prompts. NestJS and Vue/Nuxt use dedicated templates with framework-specific analysis categories (e.g., `@Module`/`@Injectable`/Guards for NestJS, `<script setup>`/Pinia/useFetch for Vue). For multi-stack projects, separate `pass1-backend-prompt.md` and `pass1-frontend-prompt.md` are generated, while `pass3-prompt.md` combines both stacks' generation targets.
616
629
 
617
630
  ---
618
631
 
619
632
  ## Monorepo Support
620
633
 
621
- ClaudeOS-Core reads the `package.json` in the **current directory**. In monorepo setups (Turborepo, Nx, Lerna, pnpm workspaces), the root `package.json` often doesn't contain framework dependencies like `next`, `express`, or `react` — they live in individual app directories.
634
+ ClaudeOS-Core automatically detects JS/TS monorepo setups and scans sub-packages for dependencies.
622
635
 
623
- **Run ClaudeOS-Core from the app directory, not the monorepo root:**
636
+ **Supported monorepo markers** (auto-detected):
637
+ - `turbo.json` (Turborepo)
638
+ - `pnpm-workspace.yaml` (pnpm workspaces)
639
+ - `lerna.json` (Lerna)
640
+ - `package.json#workspaces` (npm/yarn workspaces)
624
641
 
625
- ```bash
626
- # Example: Turborepo with apps/my-app
627
- cd apps/my-app
628
- npx claudeos-core init
642
+ **Run from the monorepo root** — ClaudeOS-Core reads `apps/*/package.json` and `packages/*/package.json` to discover framework/ORM/DB dependencies across sub-packages:
629
643
 
630
- # Example: Nx workspace
631
- cd apps/frontend
644
+ ```bash
645
+ cd my-monorepo
632
646
  npx claudeos-core init
633
647
  ```
634
648
 
635
- Each app gets its own independent set of Standards, Rules, Skills, and Guides tailored to that specific app's stack and patterns.
649
+ **What gets detected:**
650
+ - Dependencies from `apps/web/package.json` (e.g., `next`, `react`) → frontend stack
651
+ - Dependencies from `apps/api/package.json` (e.g., `express`, `prisma`) → backend stack
652
+ - Dependencies from `packages/db/package.json` (e.g., `drizzle-orm`) → ORM/DB
653
+ - Custom workspace paths from `pnpm-workspace.yaml` (e.g., `services/*`)
636
654
 
637
- **Typical monorepo structure:**
655
+ **Domain scanning also covers monorepo layouts:**
656
+ - `apps/api/src/modules/*/` and `apps/api/src/*/` for backend domains
657
+ - `apps/web/app/*/`, `apps/web/src/app/*/`, `apps/web/pages/*/` for frontend domains
658
+ - `packages/*/src/*/` for shared package domains
638
659
 
639
660
  ```
640
- my-monorepo/ ← Don't run here (root has no framework deps)
661
+ my-monorepo/ ← Run here: npx claudeos-core init
662
+ ├── turbo.json ← Auto-detected as Turborepo
641
663
  ├── apps/
642
- │ ├── web/ ← Run here: cd apps/web && npx claudeos-core init
643
- │ ├── api/ Run here: cd apps/api && npx claudeos-core init
644
- │ └── storybook/
664
+ │ ├── web/ ← Next.js detected from apps/web/package.json
665
+ ├── app/dashboard/ Frontend domain detected
666
+ └── package.json ← { "dependencies": { "next": "^14" } }
667
+ │ └── api/ ← Express detected from apps/api/package.json
668
+ │ ├── src/modules/users/ ← Backend domain detected
669
+ │ └── package.json ← { "dependencies": { "express": "^4" } }
645
670
  ├── packages/
646
- │ ├── ui/
647
- │ └── utils/
648
- └── package.json ← Only has devDependencies (turbo, eslint, etc.)
671
+ │ ├── db/ ← Drizzle detected from packages/db/package.json
672
+ │ └── ui/
673
+ └── package.json ← { "workspaces": ["apps/*", "packages/*"] }
649
674
  ```
650
675
 
676
+ > **Note:** For Kotlin/Java monorepos, multi-module detection uses `settings.gradle.kts` (see [Kotlin Multi-Module Detection](#kotlin-multi-module-domain-detection) above) and does not require JS monorepo markers.
677
+
651
678
  ## Troubleshooting
652
679
 
653
680
  **"claude: command not found"** — Claude Code CLI is not installed or not in PATH. See [Claude Code docs](https://code.claude.com/docs/en/overview).
@@ -670,7 +697,7 @@ Contributions are welcome! Areas where help is most needed:
670
697
 
671
698
  - **New stack templates** — Ruby/Rails, Go/Gin, PHP/Laravel, Rust/Axum
672
699
  - **Monorepo deep support** — Separate sub-project roots, workspace detection
673
- - **Test coverage** — Expanding test suite (currently 87 tests covering stack detection, domain grouping, plan validation, structure scanning, and verification tools)
700
+ - **Test coverage** — Expanding test suite (currently 256 tests covering all scanners, stack detection, domain grouping, plan parsing, prompt generation, CLI selectors, monorepo detection, and verification tools)
674
701
 
675
702
  ---
676
703
 
package/README.ru.md CHANGED
@@ -65,14 +65,16 @@ ClaudeOS-Core создаёт документацию, которая знает
65
65
  |---|---|---|
66
66
  | **Java / Spring Boot** | `build.gradle`, `pom.xml`, 5 паттернов пакетов | 10 категорий, 59 подпунктов |
67
67
  | **Kotlin / Spring Boot** | `build.gradle.kts`, kotlin plugin, `settings.gradle.kts`, CQRS/BFF auto-detect | 12 категорий, 95 подпунктов |
68
- | **Node.js / Express / NestJS** | `package.json` | 9 категорий, 57 подпунктов |
69
- | **Next.js / React / Vue** | `package.json`, `next.config.*`, поддержка FSD | 9 категорий, 55 подпунктов |
68
+ | **Node.js / Express** | `package.json` | 9 категорий, 57 подпунктов |
69
+ | **Node.js / NestJS** | `package.json` (`@nestjs/core`) | 10 категорий, 68 подпунктов |
70
+ | **Next.js / React** | `package.json`, `next.config.*`, поддержка FSD | 9 категорий, 55 подпунктов |
71
+ | **Vue / Nuxt** | `package.json`, `nuxt.config.*`, Composition API | 9 категорий, 58 подпунктов |
70
72
  | **Python / Django** | `requirements.txt`, `pyproject.toml` | 10 категорий, 55 подпунктов |
71
73
  | **Python / FastAPI** | `requirements.txt`, `pyproject.toml` | 10 категорий, 58 подпунктов |
72
74
  | **Node.js / Fastify** | `package.json` | 10 категорий, 62 подпункта |
73
75
  | **Angular** | `package.json`, `angular.json` | 12 категорий, 78 подпунктов |
74
76
 
75
- Автоматическое определение: язык и версия, фреймворк и версия, ORM (MyBatis, JPA, Exposed, Prisma, TypeORM, SQLAlchemy и др.), база данных (PostgreSQL, MySQL, Oracle, MongoDB, SQLite), пакетный менеджер (Gradle, Maven, npm, yarn, pnpm, pip, poetry), архитектура (CQRS, BFF — определяется из имён модулей), мультимодульная структура (из settings.gradle).
77
+ Автоматическое определение: язык и версия, фреймворк и версия, ORM (MyBatis, JPA, Exposed, Prisma, TypeORM, SQLAlchemy и др.), база данных (PostgreSQL, MySQL, Oracle, MongoDB, SQLite), пакетный менеджер (Gradle, Maven, npm, yarn, pnpm, pip, poetry), архитектура (CQRS, BFF — определяется из имён модулей), мультимодульная структура (из settings.gradle), монорепозиторий (Turborepo, pnpm-workspace, Lerna, npm/yarn workspaces).
76
78
 
77
79
  **Вам не нужно ничего указывать. Всё определяется автоматически.**
78
80
 
@@ -87,7 +89,7 @@ ClaudeOS-Core создаёт документацию, которая знает
87
89
  | E | DDD/Гексагональный | `{domain}/adapter/in/web/` | `user/adapter/in/web/UserController.java` |
88
90
  | C | Плоский | `controller/*.java` | `controller/UserController.java` → извлекает `user` из имени класса |
89
91
 
90
- Домены только с сервисами (без контроллеров) тоже обнаруживаются через директории `service/`, `dao/`, `aggregator/`, `mapper/`, `repository/`. Пропускаются: `common`, `config`, `util`, `core`, `front`, `admin`, `v1`, `v2` и т.д.
92
+ Домены только с сервисами (без контроллеров) тоже обнаруживаются через директории `service/`, `dao/`, `aggregator/`, `facade/`, `usecase/`, `orchestrator/`, `mapper/`, `repository/`. Пропускаются: `common`, `config`, `util`, `core`, `front`, `admin`, `v1`, `v2` и т.д.
91
93
 
92
94
 
93
95
  ### Обнаружение доменов Kotlin мультимодульных проектов
@@ -178,7 +180,7 @@ npx claudeos-core init --lang ko # 한국어
178
180
 
179
181
  > **Примечание:** Эта настройка изменяет только язык генерируемых файлов документации. Анализ кода (Pass 1–2) всегда выполняется на английском; только результат генерации (Pass 3) пишется на выбранном языке.
180
182
 
181
- Это всё. Через 5–18 минут вся документация сгенерирована и готова к использованию.
183
+ Это всё. Через 5–18 минут вся документация сгенерирована и готова к использованию. CLI показывает время каждого Pass и общее время в баннере завершения.
182
184
 
183
185
  ### Ручная пошаговая установка
184
186
 
@@ -530,6 +532,15 @@ Use both together.
530
532
  **В: Что происходит при повторном запуске?**
531
533
  Если предыдущие результаты Pass 1/2 существуют, интерактивный промпт позволяет выбрать: **Continue** (продолжить с места остановки) или **Fresh** (удалить всё и начать заново). Используйте `--force`, чтобы пропустить промпт и всегда начинать заново. Pass 3 всегда перезапускается. Предыдущие версии можно восстановить из Master Plans.
532
534
 
535
+ **В: Работает ли с Turborepo / pnpm workspaces / Lerna monorepo?**
536
+ Да. ClaudeOS-Core определяет `turbo.json`, `pnpm-workspace.yaml`, `lerna.json` или `package.json#workspaces` и автоматически сканирует `package.json` подпакетов для обнаружения зависимостей фреймворков/ORM/БД. Сканирование доменов охватывает паттерны `apps/*/src/` и `packages/*/src/`. Запускайте из корня monorepo.
537
+
538
+ **В: Использует ли NestJS собственный шаблон или шаблон Express?**
539
+ NestJS использует выделенный шаблон `node-nestjs` с NestJS-специфичными категориями анализа: декораторы `@Module`, `@Injectable`, `@Controller`, Guards, Pipes, Interceptors, DI-контейнер, паттерны CQRS и `Test.createTestingModule`. Проекты Express используют отдельный шаблон `node-express`.
540
+
541
+ **В: Как насчёт проектов Vue / Nuxt?**
542
+ Vue/Nuxt использует выделенный шаблон `vue-nuxt`, охватывающий Composition API, `<script setup>`, defineProps/defineEmits, хранилища Pinia, `useFetch`/`useAsyncData`, серверные маршруты Nitro и `@nuxt/test-utils`. Проекты Next.js/React используют шаблон `node-nextjs`.
543
+
533
544
  **В: Поддерживается ли Kotlin?**
534
545
  Да. ClaudeOS-Core автоматически определяет Kotlin из `build.gradle.kts` или плагина kotlin в `build.gradle`. Используется специальный шаблон `kotlin-spring` с Kotlin-специфичным анализом (data class, sealed class, корутины, функции-расширения, MockK и т.д.).
535
546
 
@@ -548,50 +559,66 @@ pass-prompts/templates/
548
559
  ├── common/ # Общий заголовок/футер
549
560
  ├── java-spring/ # Java / Spring Boot
550
561
  ├── kotlin-spring/ # Kotlin / Spring Boot (CQRS, BFF, multi-module)
551
- ├── node-express/ # Node.js / Express / NestJS
552
- ├── node-nextjs/ # Next.js / React / Vue
553
- ├── python-django/ # Python / Django (DRF)
562
+ ├── node-express/ # Node.js / Express
563
+ ├── node-nestjs/ # Node.js / NestJS (Module, DI, Guard, Pipe, Interceptor)
554
564
  ├── node-fastify/ # Node.js / Fastify
565
+ ├── node-nextjs/ # Next.js / React
566
+ ├── vue-nuxt/ # Vue / Nuxt (Composition API, Pinia, Nitro)
555
567
  ├── angular/ # Angular
568
+ ├── python-django/ # Python / Django (DRF)
556
569
  └── python-fastapi/ # Python / FastAPI
557
570
  ```
558
571
 
559
- `plan-installer` автоматически определяет ваш стек(и) и собирает типо-специфичные промпты. Для мульти-стек проектов генерируются отдельные `pass1-backend-prompt.md` и `pass1-frontend-prompt.md`, а `pass3-prompt.md` объединяет цели генерации обоих стеков.
572
+ `plan-installer` автоматически определяет ваш стек(и) и собирает типо-специфичные промпты. NestJS и Vue/Nuxt используют выделенные шаблоны с фреймворк-специфичными категориями анализа (например, `@Module`/`@Injectable`/Guards для NestJS, `<script setup>`/Pinia/useFetch для Vue). Для мульти-стек проектов генерируются отдельные `pass1-backend-prompt.md` и `pass1-frontend-prompt.md`, а `pass3-prompt.md` объединяет цели генерации обоих стеков.
560
573
 
561
574
  ---
562
575
 
563
576
  ## Поддержка Monorepo
564
577
 
565
- ClaudeOS-Core читает `package.json` в **текущей директории**. В monorepo (Turborepo, Nx, Lerna, pnpm workspaces) корневой `package.json` обычно не содержит зависимостей фреймворков, таких как `next`, `express`, `react` — они находятся в директориях отдельных приложений.
578
+ ClaudeOS-Core автоматически определяет JS/TS monorepo-структуры и сканирует подпакеты для обнаружения зависимостей.
566
579
 
567
- **Запускайте ClaudeOS-Core из директории приложения, а не из корня monorepo:**
580
+ **Поддерживаемые маркеры monorepo** (определяются автоматически):
581
+ - `turbo.json` (Turborepo)
582
+ - `pnpm-workspace.yaml` (pnpm workspaces)
583
+ - `lerna.json` (Lerna)
584
+ - `package.json#workspaces` (npm/yarn workspaces)
568
585
 
569
- ```bash
570
- # Пример: Turborepo с apps/my-app
571
- cd apps/my-app
572
- npx claudeos-core init
586
+ **Запускайте из корня monorepo** — ClaudeOS-Core читает `apps/*/package.json` и `packages/*/package.json` для обнаружения зависимостей фреймворков/ORM/БД по всем подпакетам:
573
587
 
574
- # Пример: Nx workspace
575
- cd apps/frontend
588
+ ```bash
589
+ cd my-monorepo
576
590
  npx claudeos-core init
577
591
  ```
578
592
 
579
- Каждое приложение получает собственный независимый набор Standards, Rules, Skills и Guides, адаптированных под стек и паттерны конкретного приложения.
593
+ **Что обнаруживается:**
594
+ - Зависимости из `apps/web/package.json` (например, `next`, `react`) — frontend-стек
595
+ - Зависимости из `apps/api/package.json` (например, `express`, `prisma`) — backend-стек
596
+ - Зависимости из `packages/db/package.json` (например, `drizzle-orm`) — ORM/БД
597
+ - Пользовательские пути воркспейсов из `pnpm-workspace.yaml` (например, `services/*`)
580
598
 
581
- **Типичная структура monorepo:**
599
+ **Сканирование доменов также охватывает monorepo-структуры:**
600
+ - `apps/api/src/modules/*/` и `apps/api/src/*/` для backend-доменов
601
+ - `apps/web/app/*/`, `apps/web/src/app/*/`, `apps/web/pages/*/` для frontend-доменов
602
+ - `packages/*/src/*/` для доменов общих пакетов
582
603
 
583
604
  ```
584
- my-monorepo/ ← Не запускайте здесь корне нет зависимостей фреймворков)
605
+ my-monorepo/ ← Запускайте здесь: npx claudeos-core init
606
+ ├── turbo.json ← Автоопределение как Turborepo
585
607
  ├── apps/
586
- │ ├── web/ ← Запускайте здесь: cd apps/web && npx claudeos-core init
587
- │ ├── api/ Запускайте здесь: cd apps/api && npx claudeos-core init
588
- │ └── storybook/
608
+ │ ├── web/ ← Next.js определён из apps/web/package.json
609
+ ├── app/dashboard/ Frontend-домен обнаружен
610
+ └── package.json ← { "dependencies": { "next": "^14" } }
611
+ │ └── api/ ← Express определён из apps/api/package.json
612
+ │ ├── src/modules/users/ ← Backend-домен обнаружен
613
+ │ └── package.json ← { "dependencies": { "express": "^4" } }
589
614
  ├── packages/
590
- │ ├── ui/
591
- │ └── utils/
592
- └── package.json ← Только devDependencies (turbo, eslint и т.д.)
615
+ │ ├── db/ ← Drizzle определён из packages/db/package.json
616
+ │ └── ui/
617
+ └── package.json ← { "workspaces": ["apps/*", "packages/*"] }
593
618
  ```
594
619
 
620
+ > **Примечание:** Для Kotlin/Java monorepo мультимодульное определение использует `settings.gradle.kts` (см. [Обнаружение доменов Kotlin мультимодульных проектов](#обнаружение-доменов-kotlin-мультимодульных-проектов) выше) и не требует JS monorepo-маркеров.
621
+
595
622
  ## Устранение неполадок
596
623
 
597
624
  **"claude: command not found"** — Claude Code CLI не установлен или не в PATH. Смотрите [документацию Claude Code](https://code.claude.com/docs/en/overview).
@@ -614,7 +641,7 @@ my-monorepo/ ← Не запускайте здесь (в к
614
641
 
615
642
  - **Новые шаблоны стеков** — Ruby/Rails, Go/Gin, PHP/Laravel, Rust/Axum
616
643
  - **Глубокая поддержка монорепо** — Отдельные корни подпроектов, обнаружение воркспейсов
617
- - **Покрытие тестами** — Расширение набора тестов (сейчас 87 тестов, покрывающих обнаружение стека, группировку доменов, валидацию планов, сканирование структуры и инструменты проверки)
644
+ - **Покрытие тестами** — Расширение набора тестов (сейчас 256 тестов, покрывающих все сканеры, обнаружение стека, группировку доменов, парсинг планов, генерацию промптов, селекторы CLI, обнаружение monorepo и инструменты проверки)
618
645
 
619
646
  ---
620
647
 
package/README.vi.md CHANGED
@@ -65,14 +65,16 @@ Sự khác biệt này tích lũy. 10 task/ngày × 20 phút tiết kiệm = **h
65
65
  |---|---|---|
66
66
  | **Java / Spring Boot** | `build.gradle`, `pom.xml`, 5 package patterns | 10 danh mục, 59 mục con |
67
67
  | **Kotlin / Spring Boot** | `build.gradle.kts`, kotlin plugin, `settings.gradle.kts`, CQRS/BFF auto-detect | 12 danh mục, 95 mục con |
68
- | **Node.js / Express / NestJS** | `package.json` | 9 danh mục, 57 mục con |
69
- | **Next.js / React / Vue** | `package.json`, `next.config.*`, hỗ trợ FSD | 9 danh mục, 55 mục con |
68
+ | **Node.js / Express** | `package.json` | 9 danh mục, 57 mục con |
69
+ | **Node.js / NestJS** | `package.json` (`@nestjs/core`) | 10 danh mục, 68 mục con |
70
+ | **Next.js / React** | `package.json`, `next.config.*`, hỗ trợ FSD | 9 danh mục, 55 mục con |
71
+ | **Vue / Nuxt** | `package.json`, `nuxt.config.*`, Composition API | 9 danh mục, 58 mục con |
70
72
  | **Python / Django** | `requirements.txt`, `pyproject.toml` | 10 danh mục, 55 mục con |
71
73
  | **Python / FastAPI** | `requirements.txt`, `pyproject.toml` | 10 danh mục, 58 mục con |
72
74
  | **Node.js / Fastify** | `package.json` | 10 danh mục, 62 mục con |
73
75
  | **Angular** | `package.json`, `angular.json` | 12 danh mục, 78 mục con |
74
76
 
75
- Tự động phát hiện: ngôn ngữ & phiên bản, framework & phiên bản, ORM (MyBatis, JPA, Exposed, Prisma, TypeORM, SQLAlchemy, v.v.), database (PostgreSQL, MySQL, Oracle, MongoDB, SQLite), package manager (Gradle, Maven, npm, yarn, pnpm, pip, poetry), kiến trúc (CQRS, BFF — phát hiện từ tên module), cấu trúc multi-module (từ settings.gradle).
77
+ Tự động phát hiện: ngôn ngữ & phiên bản, framework & phiên bản, ORM (MyBatis, JPA, Exposed, Prisma, TypeORM, SQLAlchemy, v.v.), database (PostgreSQL, MySQL, Oracle, MongoDB, SQLite), package manager (Gradle, Maven, npm, yarn, pnpm, pip, poetry), kiến trúc (CQRS, BFF — phát hiện từ tên module), cấu trúc multi-module (từ settings.gradle), monorepo (Turborepo, pnpm-workspace, Lerna, npm/yarn workspaces).
76
78
 
77
79
  **Bạn không cần chỉ định gì cả. Tất cả được phát hiện tự động.**
78
80
 
@@ -87,7 +89,7 @@ Tự động phát hiện: ngôn ngữ & phiên bản, framework & phiên bản,
87
89
  | E | DDD/Hexagonal | `{domain}/adapter/in/web/` | `user/adapter/in/web/UserController.java` |
88
90
  | C | Phẳng | `controller/*.java` | `controller/UserController.java` → trích `user` từ tên class |
89
91
 
90
- Các domain chỉ có service (không có controller) cũng được phát hiện qua thư mục `service/`, `dao/`, `aggregator/`, `mapper/`, `repository/`. Bỏ qua: `common`, `config`, `util`, `core`, `front`, `admin`, `v1`, `v2`, v.v.
92
+ Các domain chỉ có service (không có controller) cũng được phát hiện qua thư mục `service/`, `dao/`, `aggregator/`, `facade/`, `usecase/`, `orchestrator/`, `mapper/`, `repository/`. Bỏ qua: `common`, `config`, `util`, `core`, `front`, `admin`, `v1`, `v2`, v.v.
91
93
 
92
94
 
93
95
  ### Phát Hiện Domain Kotlin Multi-Module
@@ -178,7 +180,7 @@ npx claudeos-core init --lang ko # 한국어
178
180
 
179
181
  > **Lưu ý:** Chỉ thay đổi ngôn ngữ của file tài liệu được tạo. Phân tích mã (Pass 1–2) luôn chạy bằng tiếng Anh; chỉ kết quả tạo (Pass 3) được viết bằng ngôn ngữ đã chọn.
180
182
 
181
- Chỉ vậy thôi. Sau 5–18 phút, tất cả tài liệu được tạo và sẵn sàng sử dụng.
183
+ Chỉ vậy thôi. Sau 5–18 phút, tất cả tài liệu được tạo và sẵn sàng sử dụng. CLI hiển thị thời gian mỗi Pass và tổng thời gian trong banner hoàn thành.
182
184
 
183
185
  ### Cài Đặt Thủ Công Từng Bước
184
186
 
@@ -530,6 +532,15 @@ Hỗ trợ hoàn toàn. ClaudeOS-Core tự phát hiện cả hai stack, gắn ta
530
532
  **H: Chạy lại thì sao?**
531
533
  Nếu kết quả Pass 1/2 trước đó tồn tại, prompt tương tác cho phép bạn chọn: **Continue** (tiếp tục từ nơi dừng lại) hoặc **Fresh** (xóa tất cả và bắt đầu lại). Dùng `--force` để bỏ qua prompt và luôn bắt đầu lại từ đầu. Pass 3 luôn chạy lại. Phiên bản trước có thể khôi phục từ Master Plans.
532
534
 
535
+ **H: Có hoạt động với Turborepo / pnpm workspaces / Lerna monorepo không?**
536
+ Có. ClaudeOS-Core phát hiện `turbo.json`, `pnpm-workspace.yaml`, `lerna.json`, hoặc `package.json#workspaces` và tự động quét file `package.json` của sub-package để tìm dependency framework/ORM/DB. Quét domain bao gồm pattern `apps/*/src/` và `packages/*/src/`. Chạy từ thư mục gốc monorepo.
537
+
538
+ **H: NestJS có template riêng hay dùng chung với Express?**
539
+ NestJS sử dụng template `node-nestjs` chuyên dụng với các danh mục phân tích riêng cho NestJS: decorator `@Module`, `@Injectable`, `@Controller`, Guards, Pipes, Interceptors, DI container, pattern CQRS, và `Test.createTestingModule`. Dự án Express sử dụng template `node-express` riêng biệt.
540
+
541
+ **H: Dự án Vue / Nuxt thì sao?**
542
+ Vue/Nuxt sử dụng template `vue-nuxt` chuyên dụng bao gồm Composition API, `<script setup>`, defineProps/defineEmits, Pinia stores, `useFetch`/`useAsyncData`, Nitro server routes, và `@nuxt/test-utils`. Dự án Next.js/React sử dụng template `node-nextjs`.
543
+
533
544
  **H: Có hỗ trợ Kotlin không?**
534
545
  Có. ClaudeOS-Core tự động phát hiện Kotlin từ `build.gradle.kts` hoặc kotlin plugin trong `build.gradle`. Sử dụng template chuyên dụng `kotlin-spring` để phân tích các pattern đặc thù của Kotlin (data class, sealed class, coroutine, extension function, MockK, v.v.).
535
546
 
@@ -548,50 +559,66 @@ pass-prompts/templates/
548
559
  ├── common/ # Header/footer chung
549
560
  ├── java-spring/ # Java / Spring Boot
550
561
  ├── kotlin-spring/ # Kotlin / Spring Boot (CQRS, BFF, multi-module)
551
- ├── node-express/ # Node.js / Express / NestJS
552
- ├── node-nextjs/ # Next.js / React / Vue
553
- ├── python-django/ # Python / Django (DRF)
562
+ ├── node-express/ # Node.js / Express
563
+ ├── node-nestjs/ # Node.js / NestJS (Module, DI, Guard, Pipe, Interceptor)
554
564
  ├── node-fastify/ # Node.js / Fastify
565
+ ├── node-nextjs/ # Next.js / React
566
+ ├── vue-nuxt/ # Vue / Nuxt (Composition API, Pinia, Nitro)
555
567
  ├── angular/ # Angular
568
+ ├── python-django/ # Python / Django (DRF)
556
569
  └── python-fastapi/ # Python / FastAPI
557
570
  ```
558
571
 
559
- `plan-installer` tự phát hiện stack của bạn, sau đó lắp ráp prompt theo loại. Với dự án multi-stack, `pass1-backend-prompt.md` và `pass1-frontend-prompt.md` được tạo riêng, trong khi `pass3-prompt.md` kết hợp mục tiêu tạo file của cả hai stack.
572
+ `plan-installer` tự phát hiện stack của bạn, sau đó lắp ráp prompt theo loại. NestJS và Vue/Nuxt sử dụng template chuyên dụng với các danh mục phân tích riêng cho từng framework (ví dụ: `@Module`/`@Injectable`/Guards cho NestJS, `<script setup>`/Pinia/useFetch cho Vue). Với dự án multi-stack, `pass1-backend-prompt.md` và `pass1-frontend-prompt.md` được tạo riêng, trong khi `pass3-prompt.md` kết hợp mục tiêu tạo file của cả hai stack.
560
573
 
561
574
  ---
562
575
 
563
576
  ## Hỗ Trợ Monorepo
564
577
 
565
- ClaudeOS-Core đọc `package.json` trong **thư mục hiện tại**. Trong các thiết lập monorepo (Turborepo, Nx, Lerna, pnpm workspaces), `package.json` gốc thường không chứa các dependency framework như `next`, `express`, `react` — chúng nằm trong các thư mục app riêng lẻ.
578
+ ClaudeOS-Core tự động phát hiện thiết lập monorepo JS/TS quét các sub-package để tìm dependency.
566
579
 
567
- **Chạy ClaudeOS-Core từ thư mục app, không phải gốc monorepo:**
580
+ **Monorepo marker được hỗ trợ** (tự động phát hiện):
581
+ - `turbo.json` (Turborepo)
582
+ - `pnpm-workspace.yaml` (pnpm workspaces)
583
+ - `lerna.json` (Lerna)
584
+ - `package.json#workspaces` (npm/yarn workspaces)
568
585
 
569
- ```bash
570
- # Ví dụ: Turborepo với apps/my-app
571
- cd apps/my-app
572
- npx claudeos-core init
586
+ **Chạy từ thư mục gốc monorepo** — ClaudeOS-Core đọc `apps/*/package.json` và `packages/*/package.json` để tìm dependency framework/ORM/DB trong các sub-package:
573
587
 
574
- # Ví dụ: Nx workspace
575
- cd apps/frontend
588
+ ```bash
589
+ cd my-monorepo
576
590
  npx claudeos-core init
577
591
  ```
578
592
 
579
- Mỗi app nhận được bộ Standards, Rules, Skills và Guides độc lập, được tùy chỉnh cho stack và pattern của app cụ thể đó.
593
+ **Những được phát hiện:**
594
+ - Dependency từ `apps/web/package.json` (ví dụ: `next`, `react`) → frontend stack
595
+ - Dependency từ `apps/api/package.json` (ví dụ: `express`, `prisma`) → backend stack
596
+ - Dependency từ `packages/db/package.json` (ví dụ: `drizzle-orm`) → ORM/DB
597
+ - Đường dẫn workspace tùy chỉnh từ `pnpm-workspace.yaml` (ví dụ: `services/*`)
580
598
 
581
- **Cấu trúc monorepo điển hình:**
599
+ **Quét domain cũng bao gồm cấu trúc monorepo:**
600
+ - `apps/api/src/modules/*/` và `apps/api/src/*/` cho domain backend
601
+ - `apps/web/app/*/`, `apps/web/src/app/*/`, `apps/web/pages/*/` cho domain frontend
602
+ - `packages/*/src/*/` cho domain package chia sẻ
582
603
 
583
604
  ```
584
- my-monorepo/ ← Đừng chạy ở đây (gốc không có framework deps)
605
+ my-monorepo/ ← Chạy ở đây: npx claudeos-core init
606
+ ├── turbo.json ← Tự động phát hiện là Turborepo
585
607
  ├── apps/
586
- │ ├── web/ ← Chạy đây: cd apps/web && npx claudeos-core init
587
- │ ├── api/ Chạy đây: cd apps/api && npx claudeos-core init
588
- │ └── storybook/
608
+ │ ├── web/ ← Next.js phát hiện từ apps/web/package.json
609
+ ├── app/dashboard/ Domain frontend được phát hiện
610
+ └── package.json ← { "dependencies": { "next": "^14" } }
611
+ │ └── api/ ← Express phát hiện từ apps/api/package.json
612
+ │ ├── src/modules/users/ ← Domain backend được phát hiện
613
+ │ └── package.json ← { "dependencies": { "express": "^4" } }
589
614
  ├── packages/
590
- │ ├── ui/
591
- │ └── utils/
592
- └── package.json ← Chỉ devDependencies (turbo, eslint, v.v.)
615
+ │ ├── db/ ← Drizzle phát hiện từ packages/db/package.json
616
+ │ └── ui/
617
+ └── package.json ← { "workspaces": ["apps/*", "packages/*"] }
593
618
  ```
594
619
 
620
+ > **Lưu ý:** Với monorepo Kotlin/Java, phát hiện multi-module sử dụng `settings.gradle.kts` (xem [Phát Hiện Domain Kotlin Multi-Module](#phát-hiện-domain-kotlin-multi-module) ở trên) và không yêu cầu JS monorepo marker.
621
+
595
622
  ## Xử Lý Sự Cố
596
623
 
597
624
  **"claude: command not found"** — Claude Code CLI chưa được cài đặt hoặc không nằm trong PATH. Xem [tài liệu Claude Code](https://code.claude.com/docs/en/overview).
@@ -614,7 +641,7 @@ Chào đón mọi đóng góp! Các lĩnh vực cần hỗ trợ nhất:
614
641
 
615
642
  - **Template stack mới** — Ruby/Rails, Go/Gin, PHP/Laravel, Rust/Axum
616
643
  - **Hỗ trợ monorepo sâu** — Root sub-project riêng, phát hiện workspace
617
- - **Độ phủ test** — Mở rộng bộ test (hiện tại 87 test bao gồm phát hiện stack, nhóm domain, xác thực plan, quét cấu trúc và công cụ xác thực)
644
+ - **Độ phủ test** — Mở rộng bộ test (hiện tại 256 test bao gồm tất cả scanner, phát hiện stack, nhóm domain, phân tích plan, tạo prompt, bộ chọn CLI, phát hiện monorepo và công cụ xác thực)
618
645
 
619
646
  ---
620
647