kodu 2.1.1 → 2.1.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/AGENTS.md +23 -1
- package/__tests__/core/fs/fs.service.test.ts +72 -0
- package/__tests__/shared/cleaner/cleaner.service.test.ts +102 -0
- package/__tests__/shared/git/git.service.test.ts +84 -0
- package/__tests__/shared/tokenizer/tokenizer.service.test.ts +45 -0
- package/dist/package.json +14 -3
- package/dist/src/commands/init/init.command.d.ts +1 -0
- package/dist/src/commands/init/init.command.js +34 -1
- package/dist/src/commands/init/init.command.js.map +1 -1
- package/dist/src/core/config/config.service.js +2 -4
- package/dist/src/core/config/config.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/lefthook.yml +9 -2
- package/package.json +14 -3
- package/skills/doc-gen/SKILL.md +490 -0
- package/skills/doc-gen/scripts/doc_gen.py +911 -0
- package/skills/implement-project/SKILL.md +409 -0
- package/skills/liteend-init/SKILL.md +84 -0
- package/skills/litefront-init/SKILL.md +96 -0
- package/skills/litefront-prototype/SKILL.md +484 -0
- package/skills/project-setup-standardizer/SKILL.md +285 -0
- package/skills/start/SKILL.md +319 -0
- package/skills/tech-blueprint/SKILL.md +890 -0
- package/skills/tech-blueprint/scripts/blueprint_validator.py +417 -0
- package/src/commands/init/init.command.ts +43 -1
- package/src/core/config/config.service.ts +3 -6
- package/tsconfig.build.json +3 -0
- package/tsconfig.json +5 -2
- package/dist/scripts/generate-json-schema.d.ts +0 -1
- package/dist/scripts/generate-json-schema.js +0 -17
- package/dist/scripts/generate-json-schema.js.map +0 -1
- package/skills/kodu-ops/SKILL.md +0 -184
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: project-setup-standardizer
|
|
3
|
+
description: Enforces a unified, production-ready project setup (scripts, linting, testing, biome, lefthook) across any JS/TS project (backend, frontend, CLI, etc.). This skill MUST be invoked when initializing a new project.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
**This skill is MANDATORY and must be invoked when creating a new project.**
|
|
7
|
+
|
|
8
|
+
You are responsible for transforming an existing JavaScript/TypeScript project into a **production-ready, standardized
|
|
9
|
+
structure**.
|
|
10
|
+
|
|
11
|
+
Your goal is NOT to suggest — you MUST **apply and enforce** the conventions below.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 1. PROJECT TYPE DETECTION
|
|
16
|
+
|
|
17
|
+
Before making any changes, detect the project type using these signals:
|
|
18
|
+
|
|
19
|
+
| Signal | Type |
|
|
20
|
+
|------------------------------------------------------------------|----------|
|
|
21
|
+
| `dependencies` contains `react` or `vue` | frontend |
|
|
22
|
+
| `devDependencies` contains `vite` (without react/vue) | frontend |
|
|
23
|
+
| `dependencies` contains `@nestjs/core` or `express` or `fastify` | backend |
|
|
24
|
+
| `bin` field exists in package.json | CLI |
|
|
25
|
+
| None of the above | library |
|
|
26
|
+
|
|
27
|
+
Frontend projects get additional tools (stylelint, steiger). All other types share the base setup.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 2. MIGRATION: REMOVE CONFLICTING TOOLS FIRST
|
|
32
|
+
|
|
33
|
+
Before installing Biome, you MUST remove ESLint and Prettier if present:
|
|
34
|
+
|
|
35
|
+
1. Delete config files: `.eslintrc*`, `.eslintignore`, `.prettierrc*`, `.prettierignore`
|
|
36
|
+
2. Remove from `package.json` dependencies/devDependencies: `eslint`, `prettier`, and all `eslint-*` / `prettier-*`
|
|
37
|
+
packages
|
|
38
|
+
3. Only after removal, proceed with Biome setup
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 3. PACKAGE.JSON SCRIPTS (MANDATORY STRUCTURE)
|
|
43
|
+
|
|
44
|
+
You MUST normalize `package.json/scripts` into clearly separated sections using visual separators.
|
|
45
|
+
|
|
46
|
+
Use this exact pattern:
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
"scripts": {
|
|
50
|
+
"________________ BUILD AND RUN ________________": "",
|
|
51
|
+
"build": "...",
|
|
52
|
+
"start:dev": "...",
|
|
53
|
+
"start:prod": "...",
|
|
54
|
+
"________________ FORMAT AND LINT ________________": "",
|
|
55
|
+
"lint": "biome check",
|
|
56
|
+
"lint:fix": "biome check --write",
|
|
57
|
+
"lint:fix:unsafe": "biome check --write --unsafe",
|
|
58
|
+
"ts:check": "tsc --noEmit",
|
|
59
|
+
"knip": "knip --production",
|
|
60
|
+
"check": "run-p ts:check lint:fix knip",
|
|
61
|
+
"________________ TEST ________________": "",
|
|
62
|
+
"test": "vitest run",
|
|
63
|
+
"test:watch": "vitest",
|
|
64
|
+
"test:cov": "vitest run --coverage",
|
|
65
|
+
|
|
66
|
+
"________________ OTHER ________________": "",
|
|
67
|
+
"prepare": "is-ci || lefthook install",
|
|
68
|
+
"update": "npx npm-check-updates -u && rimraf node_modules package-lock.json && npm i",
|
|
69
|
+
"postupdate": "npm run lint:fix && npm run check"
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
If the project has distinct unit and e2e test layers, add:
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
"test:unit": "...",
|
|
77
|
+
"test:e2e": "...",
|
|
78
|
+
"test:all": "run-s test:unit test:e2e"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Otherwise omit `test:all` — do not duplicate `test` under a different name.
|
|
82
|
+
|
|
83
|
+
### Rules:
|
|
84
|
+
|
|
85
|
+
- ALWAYS include `check` script → central quality gate
|
|
86
|
+
- ALWAYS include `ts:check`; if no `tsconfig.json` exists, create a minimal one (see section 7)
|
|
87
|
+
- ALWAYS include `knip` for unused exports/deps detection
|
|
88
|
+
- ALWAYS include `lint:fix` in `check`
|
|
89
|
+
- Use `run-p` (from `npm-run-all`) for parallel execution — never `npx run-p`
|
|
90
|
+
- `prepare` MUST use `is-ci || lefthook install` to avoid CI failures when lefthook is not yet installed
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## 4. FRONTEND-SPECIFIC REQUIREMENTS
|
|
95
|
+
|
|
96
|
+
If project type is **frontend**, additionally include:
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
"lint:fsd": "steiger ./src",
|
|
100
|
+
"lint:style": "stylelint '**/*.{css,scss}'",
|
|
101
|
+
"lint:style:fix": "npm run lint:style -- --fix",
|
|
102
|
+
"check": "run-p lint:style ts:check lint:fix knip lint:fsd"
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Mandatory:
|
|
106
|
+
|
|
107
|
+
- FSD validation via `steiger`
|
|
108
|
+
- stylelint integration
|
|
109
|
+
- include ALL checks in `check`
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 5. TESTING STANDARD (MANDATORY)
|
|
114
|
+
|
|
115
|
+
Use **vitest only**.
|
|
116
|
+
|
|
117
|
+
Rules:
|
|
118
|
+
|
|
119
|
+
- NO jest
|
|
120
|
+
- NO mixed frameworks
|
|
121
|
+
- coverage MUST be supported via `test:cov`
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 6. BIOME CONFIG (MANDATORY)
|
|
126
|
+
|
|
127
|
+
You MUST ensure `biome.json` exists with this content:
|
|
128
|
+
|
|
129
|
+
```json
|
|
130
|
+
{
|
|
131
|
+
"$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
|
|
132
|
+
"formatter": {
|
|
133
|
+
"enabled": true,
|
|
134
|
+
"indentStyle": "space",
|
|
135
|
+
"lineEnding": "lf"
|
|
136
|
+
},
|
|
137
|
+
"javascript": {
|
|
138
|
+
"formatter": {
|
|
139
|
+
"quoteStyle": "single"
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
"linter": {
|
|
143
|
+
"enabled": true,
|
|
144
|
+
"rules": {
|
|
145
|
+
"recommended": true,
|
|
146
|
+
"correctness": {
|
|
147
|
+
"noUnusedImports": "error",
|
|
148
|
+
"noUnusedVariables": "error",
|
|
149
|
+
"noUnusedFunctionParameters": "error"
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
"files": {
|
|
154
|
+
"includes": [
|
|
155
|
+
"**",
|
|
156
|
+
"!node_modules",
|
|
157
|
+
"!dist"
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
"vcs": {
|
|
161
|
+
"enabled": true,
|
|
162
|
+
"clientKind": "git",
|
|
163
|
+
"useIgnoreFile": true
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## 7. LEFTHOOK (MANDATORY)
|
|
171
|
+
|
|
172
|
+
You MUST write `lefthook.yml` with this exact content:
|
|
173
|
+
|
|
174
|
+
```yaml
|
|
175
|
+
pre-commit:
|
|
176
|
+
parallel: false
|
|
177
|
+
commands:
|
|
178
|
+
check:
|
|
179
|
+
run: npm run check
|
|
180
|
+
|
|
181
|
+
pre-push:
|
|
182
|
+
parallel: false
|
|
183
|
+
commands:
|
|
184
|
+
test-all:
|
|
185
|
+
run: npm run test:all
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Rules:
|
|
189
|
+
|
|
190
|
+
- `check` (lint + types + knip) gates every commit
|
|
191
|
+
- tests gate every push — `pre-push` does NOT re-run `check` (already gated at commit)
|
|
192
|
+
- no bypassing allowed
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## 8. MINIMAL TSCONFIG (if missing)
|
|
197
|
+
|
|
198
|
+
If `tsconfig.json` does not exist, create it:
|
|
199
|
+
|
|
200
|
+
```json
|
|
201
|
+
{
|
|
202
|
+
"compilerOptions": {
|
|
203
|
+
"target": "ES2022",
|
|
204
|
+
"module": "NodeNext",
|
|
205
|
+
"moduleResolution": "NodeNext",
|
|
206
|
+
"strict": true,
|
|
207
|
+
"noEmit": true,
|
|
208
|
+
"skipLibCheck": true
|
|
209
|
+
},
|
|
210
|
+
"include": [
|
|
211
|
+
"src",
|
|
212
|
+
"*.ts"
|
|
213
|
+
]
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## 9. REQUIRED DEV DEPENDENCIES
|
|
220
|
+
|
|
221
|
+
Ensure these are installed (add any that are missing):
|
|
222
|
+
|
|
223
|
+
Core (all project types):
|
|
224
|
+
|
|
225
|
+
- `@biomejs/biome`
|
|
226
|
+
- `typescript`
|
|
227
|
+
- `vitest`
|
|
228
|
+
- `lefthook`
|
|
229
|
+
- `is-ci`
|
|
230
|
+
- `npm-run-all`
|
|
231
|
+
- `knip`
|
|
232
|
+
- `rimraf`
|
|
233
|
+
- `npm-check-updates`
|
|
234
|
+
|
|
235
|
+
Frontend only:
|
|
236
|
+
|
|
237
|
+
- `stylelint`
|
|
238
|
+
- `steiger`
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## 10. ENFORCEMENT LOGIC
|
|
243
|
+
|
|
244
|
+
You MUST follow this order:
|
|
245
|
+
|
|
246
|
+
1. Detect project type (section 1)
|
|
247
|
+
2. Remove conflicting tools (section 2)
|
|
248
|
+
3. Rewrite `package.json` scripts (section 3, or 4 for frontend)
|
|
249
|
+
4. Write/update `biome.json` (section 6)
|
|
250
|
+
5. Write/update `lefthook.yml` (section 7)
|
|
251
|
+
6. Create `tsconfig.json` if missing (section 8)
|
|
252
|
+
7. Install missing dev dependencies (section 9)
|
|
253
|
+
|
|
254
|
+
NEVER:
|
|
255
|
+
|
|
256
|
+
- keep inconsistent scripts
|
|
257
|
+
- mix tools (eslint + biome)
|
|
258
|
+
- leave partial setup
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## 11. OUTPUT FORMAT
|
|
263
|
+
|
|
264
|
+
You must output:
|
|
265
|
+
|
|
266
|
+
1. Updated `package.json` (only the `scripts` and `devDependencies` sections)
|
|
267
|
+
2. `biome.json`
|
|
268
|
+
3. `lefthook.yml`
|
|
269
|
+
4. `tsconfig.json` (if created)
|
|
270
|
+
5. List of removed files and packages
|
|
271
|
+
|
|
272
|
+
All configs must be **complete and copy-paste ready**.
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## 12. PRINCIPLE
|
|
277
|
+
|
|
278
|
+
Your job is to enforce:
|
|
279
|
+
|
|
280
|
+
- determinism
|
|
281
|
+
- reproducibility
|
|
282
|
+
- zero-config onboarding
|
|
283
|
+
- strict quality gates
|
|
284
|
+
|
|
285
|
+
If something is ambiguous — choose the stricter option.
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: start
|
|
3
|
+
description: Единая точка входа для разработки продукта с нуля. Определяет текущее состояние проекта, объясняет что происходит на каждом шаге и вызывает нужные скиллы вместо пользователя. Запускай первым — этот скилл управляет всем. Другие скиллы (doc-gen, tech-blueprint, implement-project и т.д.) вызывать напрямую не нужно.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: opencode
|
|
6
|
+
metadata:
|
|
7
|
+
level: multi
|
|
8
|
+
output: docs/ + prototype/ + blueprint/ + projects/
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Назначение
|
|
12
|
+
|
|
13
|
+
Этот скилл — **единственный**, с которым нужно взаимодействовать. Он ведёт через весь конвейер разработки, вызывая остальные скиллы в нужный момент:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
[1] Документация → doc-gen → docs/<name>/
|
|
17
|
+
[2] Прототип → litefront-prototype → prototype/ (рекомендуется, не обязателен)
|
|
18
|
+
[3] ТЗ → tech-blueprint → blueprint/<name>/3_TECH_BLUEPRINT/
|
|
19
|
+
[4] Реализация → implement-project → projects/<name>/
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Каждый этап создаёт артефакты для следующего. Не нужно знать как работают другие скиллы.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## При первом запуске
|
|
27
|
+
|
|
28
|
+
1. Определить состояние проекта (см. «Определение состояния»)
|
|
29
|
+
2. Если ни одного проекта нет → объяснить конвейер, спросить название и описание идеи
|
|
30
|
+
3. Если проект найден → показать статус и предложить продолжить
|
|
31
|
+
|
|
32
|
+
**Объяснение для нового пользователя (сказать один раз в начале):**
|
|
33
|
+
|
|
34
|
+
> Разработка продукта проходит 4 этапа:
|
|
35
|
+
>
|
|
36
|
+
> **1. Документация** — опишем продукт: зачем, для кого, из чего состоит.
|
|
37
|
+
> Результат: VISION.md (цели) + SPEC.md (требования и сценарии).
|
|
38
|
+
>
|
|
39
|
+
> **2. Прототип** — создадим кликабельный UI-макет. Все данные симулируются,
|
|
40
|
+
> бэкенд не нужен. Помогает проверить UX до написания кода.
|
|
41
|
+
>
|
|
42
|
+
> **3. Техническое задание** — спроектируем базу данных, GraphQL API
|
|
43
|
+
> и архитектуру фронтенда и бэкенда. 5 документов.
|
|
44
|
+
>
|
|
45
|
+
> **4. Реализация** — напишем полный рабочий проект с тестами.
|
|
46
|
+
>
|
|
47
|
+
> Перед переходом к каждому следующему этапу я буду ждать вашего «продолжить».
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Структура workspace
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
docs/<ИмяПроекта>/ ← [Этап 1] продуктовая документация
|
|
55
|
+
├── INDEX.md
|
|
56
|
+
├── 1_PRODUCT_VISION/VISION.md
|
|
57
|
+
└── 2_PRODUCT_SPEC/SPEC.md
|
|
58
|
+
|
|
59
|
+
prototype/ ← [Этап 2] UI-прототип (общий для всех проектов)
|
|
60
|
+
└── src/...
|
|
61
|
+
|
|
62
|
+
blueprint/<ИмяПроекта>/ ← [Этап 3] техническое задание
|
|
63
|
+
└── 3_TECH_BLUEPRINT/
|
|
64
|
+
├── IMPLEMENTATION_GUIDE.md
|
|
65
|
+
├── DATABASE_MODEL.md
|
|
66
|
+
├── API_CONTRACTS.md
|
|
67
|
+
├── ARCHITECTURE.md
|
|
68
|
+
└── TESTING_PLAN.md
|
|
69
|
+
|
|
70
|
+
projects/<ИмяПроекта>/ ← [Этап 4] реализация
|
|
71
|
+
├── backend/
|
|
72
|
+
└── frontend/
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Определение состояния проекта
|
|
78
|
+
|
|
79
|
+
Проверить наличие файлов (bash):
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# Stage 1 завершён:
|
|
83
|
+
test -f docs/<name>/2_PRODUCT_SPEC/SPEC.md
|
|
84
|
+
|
|
85
|
+
# Stage 2 завершён:
|
|
86
|
+
test -d prototype/src
|
|
87
|
+
|
|
88
|
+
# Stage 3 создан (файлы есть):
|
|
89
|
+
test -f blueprint/<name>/3_TECH_BLUEPRINT/IMPLEMENTATION_GUIDE.md
|
|
90
|
+
|
|
91
|
+
# Stage 3 валиден (запустить и посмотреть на exit code):
|
|
92
|
+
python3 ~/.config/opencode/skills/tech-blueprint/scripts/blueprint_validator.py \
|
|
93
|
+
validate "<name>" --output ./blueprint
|
|
94
|
+
|
|
95
|
+
# Stage 4 завершён:
|
|
96
|
+
test -d projects/<name>/backend/src && test -d projects/<name>/frontend/src
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**Несколько проектов:** если в `docs/` найдено более одной папки — показать список и спросить с каким работаем.
|
|
100
|
+
|
|
101
|
+
**Консистентность:** если `docs/<name>/SPEC.md` новее чем `blueprint/<name>/3_TECH_BLUEPRINT/DATABASE_MODEL.md` — предупредить:
|
|
102
|
+
> ⚠️ SPEC.md изменялся после создания ТЗ. Рекомендуется пересоздать ТЗ командой «пересоздать ТЗ».
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Формат вывода статуса
|
|
107
|
+
|
|
108
|
+
При запросе «статус» / «где мы» / «прогресс»:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
## Проект: <ИмяПроекта>
|
|
112
|
+
|
|
113
|
+
| Этап | Статус | Детали |
|
|
114
|
+
|------|--------|--------|
|
|
115
|
+
| 1. Документация | ✅ Готово | docs/<name>/SPEC.md |
|
|
116
|
+
| 2. Прототип | ✅ Готово | prototype/src/ |
|
|
117
|
+
| 3. ТЗ | ⚠️ Нужны правки | blueprint_validator: 2 ошибки |
|
|
118
|
+
| 4. Реализация | ⏳ Не начата | — |
|
|
119
|
+
|
|
120
|
+
➡️ Следующий шаг: исправить ошибки ТЗ → сказать «валидируй» → затем «продолжить».
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Статусы: `✅ Готово` / `⚠️ Нужны правки` / `🔄 В процессе` / `⏳ Не начато`
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Этап 1: Документация (doc-gen)
|
|
128
|
+
|
|
129
|
+
**Сказать перед запуском:**
|
|
130
|
+
> Начинаем с описания продукта. Я буду задавать вопросы — чем точнее вы опишете
|
|
131
|
+
> идею, тем точнее получится документ. Обычно занимает 5-10 минут диалога.
|
|
132
|
+
|
|
133
|
+
**Действие:** запустить скилл `doc-gen`
|
|
134
|
+
(`~/.config/opencode/skills/doc-gen/SKILL.md`)
|
|
135
|
+
|
|
136
|
+
Выходные документы должны лежать в `docs/<ИмяПроекта>/`.
|
|
137
|
+
|
|
138
|
+
**После завершения — показать краткое резюме:**
|
|
139
|
+
```
|
|
140
|
+
✅ Документация создана: docs/<name>/
|
|
141
|
+
|
|
142
|
+
Ключевые сущности (из SPEC.md §Сущности): <список>
|
|
143
|
+
Ключевые операции: <3-5 операций>
|
|
144
|
+
Страницы: <список>
|
|
145
|
+
Роли пользователей: <список>
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**Ворота ревью — ждать подтверждения:**
|
|
149
|
+
> Прочитайте docs/<name>/2_PRODUCT_SPEC/SPEC.md.
|
|
150
|
+
> Все ли сущности и операции описаны верно?
|
|
151
|
+
> - Нужны правки → опишите что изменить, я обновлю
|
|
152
|
+
> - Всё верно → скажите **«продолжить»**
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Этап 2: Прототип (litefront-prototype) — рекомендуется
|
|
157
|
+
|
|
158
|
+
**Сказать перед запуском:**
|
|
159
|
+
> Создадим кликабельный UI-прототип — все страницы будут работать,
|
|
160
|
+
> но данные симулируются (без реального бэкенда).
|
|
161
|
+
> Поможет визуально проверить SPEC.md и уточнить UX до написания кода.
|
|
162
|
+
>
|
|
163
|
+
> Этот этап можно пропустить — скажите **«пропустить»**, тогда ТЗ
|
|
164
|
+
> будет создаваться только по тексту SPEC.md.
|
|
165
|
+
|
|
166
|
+
**Действие:** запустить скилл `litefront-prototype`
|
|
167
|
+
(`~/.config/opencode/skills/litefront-prototype/SKILL.md`)
|
|
168
|
+
|
|
169
|
+
**После завершения:**
|
|
170
|
+
```
|
|
171
|
+
✅ Прототип создан: prototype/
|
|
172
|
+
|
|
173
|
+
Запуск: cd prototype && npm run start:dev → http://localhost:3000
|
|
174
|
+
|
|
175
|
+
Реализованные страницы: <список из прототипа>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Ворота ревью — ждать подтверждения:**
|
|
179
|
+
> Запустите прототип и проверьте все страницы и переходы.
|
|
180
|
+
> - Нужны изменения в UI → опишите, обновлю прототип
|
|
181
|
+
> - Нужно уточнить SPEC.md → скажите **«назад к документации»**
|
|
182
|
+
> - Всё верно → скажите **«продолжить»**
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Этап 3: Техническое задание (tech-blueprint)
|
|
187
|
+
|
|
188
|
+
**Сказать перед запуском:**
|
|
189
|
+
> Создаём 5 технических документов — точное описание как будет построен проект:
|
|
190
|
+
> - **DATABASE_MODEL.md** — схема БД (Prisma ORM, PostgreSQL)
|
|
191
|
+
> - **API_CONTRACTS.md** — GraphQL API: операции, типы, права доступа
|
|
192
|
+
> - **ARCHITECTURE.md** — NestJS-модули и FSD-слайсы фронтенда
|
|
193
|
+
> - **TESTING_PLAN.md** — конкретные тест-сценарии
|
|
194
|
+
> - **IMPLEMENTATION_GUIDE.md** — руководство разработчика: стек, что уже готово, команды
|
|
195
|
+
>
|
|
196
|
+
> После генерации документы автоматически проверяются валидатором на 9 критериев.
|
|
197
|
+
|
|
198
|
+
**Действие:** запустить скилл `tech-blueprint`
|
|
199
|
+
(`~/.config/opencode/skills/tech-blueprint/SKILL.md`)
|
|
200
|
+
|
|
201
|
+
**После завершения — запустить валидатор:**
|
|
202
|
+
```bash
|
|
203
|
+
python3 ~/.config/opencode/skills/tech-blueprint/scripts/blueprint_validator.py \
|
|
204
|
+
validate "<name>" --output ./blueprint
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Если есть ошибки → **исправить перед тем как показывать пользователю** (не переходить к следующему этапу с ошибками).
|
|
208
|
+
|
|
209
|
+
**После успешной валидации — показать резюме:**
|
|
210
|
+
```
|
|
211
|
+
✅ ТЗ создано и валидно: blueprint/<name>/3_TECH_BLUEPRINT/
|
|
212
|
+
|
|
213
|
+
Prisma-модели: <список>
|
|
214
|
+
GraphQL-операции по доменам:
|
|
215
|
+
<Домен 1>: query1, mutation1
|
|
216
|
+
<Домен 2>: query2, mutation2
|
|
217
|
+
NestJS-модули для реализации: <список>
|
|
218
|
+
Новые FSD-слайсы: <список (без boilerplate-слайсов)>
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**Ворота ревью — ждать подтверждения:**
|
|
222
|
+
> Просмотрите ТЗ, особенно DATABASE_MODEL.md и API_CONTRACTS.md.
|
|
223
|
+
> - Хотите изменить → правьте файлы в blueprint/<name>/3_TECH_BLUEPRINT/ и скажите **«валидируй»**
|
|
224
|
+
> - Хотите полностью пересоздать → скажите **«пересоздать ТЗ»**
|
|
225
|
+
> - Всё верно → скажите **«продолжить»**
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Этап 4: Реализация (implement-project)
|
|
230
|
+
|
|
231
|
+
**Сказать перед запуском:**
|
|
232
|
+
> Финальный и самый длительный этап — полная реализация по утверждённому ТЗ.
|
|
233
|
+
> По завершении:
|
|
234
|
+
> - projects/<name>/backend/ — работающий NestJS API
|
|
235
|
+
> - projects/<name>/frontend/ — React SPA
|
|
236
|
+
> - все тесты из TESTING_PLAN.md реализованы
|
|
237
|
+
> - npm run check && npm run test:all зелёные в обоих проектах
|
|
238
|
+
|
|
239
|
+
**Финальная проверка перед запуском:**
|
|
240
|
+
- [ ] SPEC.md утверждён пользователем
|
|
241
|
+
- [ ] Прототип просмотрен (или явно пропущен)
|
|
242
|
+
- [ ] ТЗ прошло валидацию без ошибок (`blueprint_validator.py` → exit 0)
|
|
243
|
+
|
|
244
|
+
Если хотя бы один пункт не выполнен → предупредить и спросить подтверждение:
|
|
245
|
+
> ⚠️ Рекомендую сначала устранить [проблему]. Продолжить всё равно? («да» / «нет»)
|
|
246
|
+
|
|
247
|
+
**Действие:** запустить скилл `implement-project`
|
|
248
|
+
(`~/.config/opencode/skills/implement-project/SKILL.md`)
|
|
249
|
+
|
|
250
|
+
**После завершения:**
|
|
251
|
+
```
|
|
252
|
+
🎉 Проект реализован!
|
|
253
|
+
|
|
254
|
+
Запуск бэкенда:
|
|
255
|
+
cd projects/<name>/backend && npm run start:dev
|
|
256
|
+
|
|
257
|
+
Запуск фронтенда:
|
|
258
|
+
cd projects/<name>/frontend && npm run start:dev
|
|
259
|
+
|
|
260
|
+
Все проверки: npm run check && npm run test:all → ✅
|
|
261
|
+
|
|
262
|
+
Что дальше:
|
|
263
|
+
1. Настроить OIDC-провайдер (Logto/Keycloak) в .env обоих проектов
|
|
264
|
+
2. Поднять PostgreSQL + Redis (docker compose up -d)
|
|
265
|
+
3. npm run db:migrations:apply
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## Все распознаваемые команды
|
|
271
|
+
|
|
272
|
+
| Команда | Действие |
|
|
273
|
+
|---------|---------|
|
|
274
|
+
| «начать», «старт», «новый проект» | Определить состояние → начать или продолжить |
|
|
275
|
+
| «статус», «где мы», «прогресс» | Таблица состояния всех 4 этапов |
|
|
276
|
+
| «продолжить», «go», «следующий шаг» | Выполнить следующий незавершённый этап |
|
|
277
|
+
| «пропустить» | Пропустить прототип (только для этапа 2) |
|
|
278
|
+
| «назад к документации» | Повторно запустить doc-gen |
|
|
279
|
+
| «пересоздать прототип» | Повторно запустить litefront-prototype |
|
|
280
|
+
| «пересоздать ТЗ» | Повторно запустить tech-blueprint |
|
|
281
|
+
| «валидируй», «проверь ТЗ» | Запустить blueprint_validator → показать результат |
|
|
282
|
+
| «покажи документы» | Перечислить все созданные файлы с путями |
|
|
283
|
+
| «как запустить» | Команды запуска для текущего состояния проекта |
|
|
284
|
+
| «что такое [скилл]» | Объяснить назначение конкретного скилла |
|
|
285
|
+
| «помощь», «help» | Показать эту таблицу |
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## Обработка ошибок
|
|
290
|
+
|
|
291
|
+
**Документация не отражает идею:**
|
|
292
|
+
→ Описание правок от пользователя → обновить SPEC.md → показать что изменилось
|
|
293
|
+
|
|
294
|
+
**Прототип не запускается:**
|
|
295
|
+
→ `cd prototype && npm install && npm run start:dev` → показать полный текст ошибки
|
|
296
|
+
|
|
297
|
+
**Ошибки blueprint_validator:**
|
|
298
|
+
→ Показать каждую ошибку + объяснение → исправить автоматически где возможно → повторить валидацию
|
|
299
|
+
|
|
300
|
+
**SPEC.md обновлён после создания ТЗ:**
|
|
301
|
+
→ Предупредить об устаревании → предложить «пересоздать ТЗ»
|
|
302
|
+
|
|
303
|
+
**Тесты не проходят:**
|
|
304
|
+
→ Показать failing tests → предложить исправить → повторить `npm run test:all`
|
|
305
|
+
|
|
306
|
+
**Незнакомый вопрос пользователя:**
|
|
307
|
+
→ Ответить в контексте текущего этапа + подсказать следующий шаг
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## Ключевые принципы поведения
|
|
312
|
+
|
|
313
|
+
1. **Никогда не переходить к следующему этапу без явного «продолжить»** — всегда ждать
|
|
314
|
+
2. **Объяснять ЧТО и ЗАЧЕМ** перед каждым действием — один абзац, без лишних деталей
|
|
315
|
+
3. **Показывать прогресс**: «Этап 2 из 4 — Прототип» в начале каждого блока
|
|
316
|
+
4. **При ошибке — не продолжать**: исправить → проверить → только потом вперёд
|
|
317
|
+
5. **Краткие резюме**: 5-10 пунктов ключевых сущностей/операций — не пересказывать документ целиком
|
|
318
|
+
6. **Один вопрос за раз** — не перегружать пользователя опросником
|
|
319
|
+
7. **Помнить об ограничениях boilerplate** — не предлагать реализовывать уже готовое (`Profile`, `features/auth`, `pages/404`)
|