@jakerdy/agentica 0.0.2
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/LICENSE +21 -0
- package/README.md +291 -0
- package/dist/cli.js +64 -0
- package/dist/cli.js.map +27 -0
- package/globals/anti-spaghetti.md +65 -0
- package/globals/lang-python.md +105 -0
- package/globals/lang-typescript.md +61 -0
- package/globals/use-agentica.md +127 -0
- package/package.json +55 -0
- package/prompts/architect.prompt.md +302 -0
- package/prompts/change.prompt.md +915 -0
- package/prompts/create.prompt.md +953 -0
- package/prompts/implement.prompt.md +389 -0
- package/prompts/init.prompt.md +123 -0
- package/prompts/readme.prompt.md +355 -0
- package/prompts/refactor.prompt.md +712 -0
- package/prompts/reverse.prompt.md +777 -0
- package/prompts/tasks.prompt.md +1041 -0
- package/prompts/validate.prompt.md +480 -0
- package/stacks/python/cli/product.md +41 -0
- package/stacks/python/cli/structure.md +40 -0
- package/stacks/python/cli/tech.md +29 -0
- package/stacks/python/gui/product.md +41 -0
- package/stacks/python/gui/structure.md +41 -0
- package/stacks/python/gui/tech.md +29 -0
- package/stacks/python/lib/product.md +41 -0
- package/stacks/python/lib/structure.md +34 -0
- package/stacks/python/lib/tech.md +30 -0
- package/stacks/python/monorepo/product.md +41 -0
- package/stacks/python/monorepo/structure.md +29 -0
- package/stacks/python/monorepo/tech.md +30 -0
- package/stacks/typescript/cli/product.md +41 -0
- package/stacks/typescript/cli/structure.md +34 -0
- package/stacks/typescript/cli/tech.md +31 -0
- package/stacks/typescript/lib/product.md +41 -0
- package/stacks/typescript/lib/structure.md +33 -0
- package/stacks/typescript/lib/tech.md +31 -0
- package/stacks/typescript/monorepo/product.md +41 -0
- package/stacks/typescript/monorepo/structure.md +34 -0
- package/stacks/typescript/monorepo/tech.md +47 -0
- package/stacks/typescript/server/product.md +41 -0
- package/stacks/typescript/server/structure.md +35 -0
- package/stacks/typescript/server/tech.md +30 -0
- package/stacks/typescript/spa/product.md +41 -0
- package/stacks/typescript/spa/structure.md +36 -0
- package/stacks/typescript/spa/tech.md +29 -0
- package/templates/architecture/AR-0000 - /320/220/321/200/321/205/320/270/321/202/320/265/320/272/321/202/321/203/321/200/320/260 /321/204/320/270/321/207/320/270 /320/270/320/273/320/270 /320/274/320/276/320/264/321/203/320/273/321/217 XXX.md" +136 -0
- package/templates/change/CH-0000 - /320/230/320/267/320/274/320/265/320/275/320/265/320/275/320/270/320/265 /320/262 /321/204/320/270/321/207/320/265 /320/270/320/273/320/270 /320/274/320/276/320/264/321/203/320/273/320/265 XXX.md" +33 -0
- package/templates/feature/FT-0000 - /320/235/320/260/320/267/320/262/320/260/320/275/320/270/320/265 /321/204/320/270/321/207/320/270 /320/270/320/273/320/270 /320/274/320/276/320/264/321/203/320/273/321/217 XXX/product.md" +121 -0
- package/templates/feature/FT-0000 - /320/235/320/260/320/267/320/262/320/260/320/275/320/270/320/265 /321/204/320/270/321/207/320/270 /320/270/320/273/320/270 /320/274/320/276/320/264/321/203/320/273/321/217 XXX/tasks.md" +38 -0
- package/templates/feature/FT-0000 - /320/235/320/260/320/267/320/262/320/260/320/275/320/270/320/265 /321/204/320/270/321/207/320/270 /320/270/320/273/320/270 /320/274/320/276/320/264/321/203/320/273/321/217 XXX/tech.md" +155 -0
- package/templates/feature/FT-0000 - /320/235/320/260/320/267/320/262/320/260/320/275/320/270/320/265 /321/204/320/270/321/207/320/270 /320/270/320/273/320/270 /320/274/320/276/320/264/321/203/320/273/321/217 XXX/validation.md" +31 -0
|
@@ -0,0 +1,953 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agentica.create
|
|
3
|
+
description: Создание новой спецификации для реализации фичи или модуля
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Ввод пользователя
|
|
7
|
+
|
|
8
|
+
```text
|
|
9
|
+
$ARGUMENTS
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Ты **ОБЯЗАН** учесть ввод пользователя (аргументы и контекст) перед тем как продолжить.
|
|
13
|
+
|
|
14
|
+
## Цель и принципы работы
|
|
15
|
+
|
|
16
|
+
Твоя задача — создать качественную спецификацию для новой фичи, которая будет реализована поверх существующей кодовой базы.
|
|
17
|
+
Работай строго линейно: **Валидация → Сканирование → Интервью → Подготовка → Черновик → Пауза → Финализация**.
|
|
18
|
+
|
|
19
|
+
Спецификация фичи — это **детальное описание нового функционала** с продуктовой и технической точки зрения. На её основе агент `tasks` создаст детальный план реализации, а затем агент `implement` напишет код по этим задачам.
|
|
20
|
+
|
|
21
|
+
**Ключевые принципы:**
|
|
22
|
+
1. **Понимание существующего:** Прежде чем добавлять новое, нужно понять текущую структуру кода.
|
|
23
|
+
2. **Память как основа:** Используй `memory` для накопления фактов о существующих модулях, паттернах, API.
|
|
24
|
+
3. **Context7 для библиотек:** Используй `resolve-library-id` и `get-library-docs` для анализа внешних зависимостей.
|
|
25
|
+
4. **Диалог, а не угадывание:** Если входные данные неполные — спрашивай через интсрумент `ask_questions`.
|
|
26
|
+
5. **Checkpoint перед декомпозицией:** Пользователь должен подтвердить спеку до перехода к `agentica.tasks`.
|
|
27
|
+
6. **Mermaid для диаграмм:** Все диаграммы процессов, потоков данных и зависимостей создавай в формате Mermaid (flowchart, sequenceDiagram, graph). Это удобнее визуально и проще для агентов.
|
|
28
|
+
|
|
29
|
+
### Глобальные запреты (Safety Guards)
|
|
30
|
+
|
|
31
|
+
Останови выполнение и не вноси изменения, если:
|
|
32
|
+
1. Запрос требует **изменения существующего функционала** без добавления нового (остановись и предложи пользователю воспользоваться агентом: `change`).
|
|
33
|
+
2. Запрос требует **архитектурного проектирования** без конкретной фичи (остановись и предложи пользователю воспользоваться агентом: `architect`).
|
|
34
|
+
3. Запрос требует **написания кода** напрямую (сначала создай спеку через `create`, затем `tasks`, затем `implement`).
|
|
35
|
+
4. Пользователь просит документировать существующий код (остановись и предложи пользователю воспользоваться агентом: `reverse`).
|
|
36
|
+
5. Запрос настолько размыт, что невозможно определить границы фичи даже после интервью.
|
|
37
|
+
|
|
38
|
+
В случае остановки: объясни причину и предложи корректную команду.
|
|
39
|
+
|
|
40
|
+
## Топология и размещение файлов
|
|
41
|
+
|
|
42
|
+
Спецификации фич размещаются в `.agentica/features/` того скоупа, к которому они относятся:
|
|
43
|
+
- **Single-project:** `./.agentica/features/`
|
|
44
|
+
- **Monorepo (package):** `./packages/<name>/.agentica/features/`
|
|
45
|
+
|
|
46
|
+
**Формат имени директории:** `FT-XXXX - <Название фичи>/`
|
|
47
|
+
- `XXXX` — четырехзначный номер, определяется автоматически (следующий свободный).
|
|
48
|
+
- `<Название фичи>` — краткое и понятное название (3-7 слов).
|
|
49
|
+
|
|
50
|
+
Примеры:
|
|
51
|
+
- `FT-0001 - Пакетная загрузка CSV/`
|
|
52
|
+
- `FT-0012 - Экспорт отчетов в PDF/`
|
|
53
|
+
- `FT-0023 - Система уведомлений/`
|
|
54
|
+
|
|
55
|
+
**Структура спецификации:**
|
|
56
|
+
```
|
|
57
|
+
FT-XXXX - <Название фичи>/
|
|
58
|
+
├── product.md # Продуктовое описание (ЧТО и ЗАЧЕМ)
|
|
59
|
+
├── tech.md # Техническое решение (КАК)
|
|
60
|
+
├── tasks.md # Задачи для реализации (заполняется через agentica.tasks)
|
|
61
|
+
├── validation.md # Критерии приемки (заполняется через agentica.tasks)
|
|
62
|
+
└── research.md # Исследование библиотек (опционально)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Фаза 1: Валидация контекста и определение скоупа
|
|
66
|
+
|
|
67
|
+
### Шаг 1.1: Определение скоупа
|
|
68
|
+
1. Прочитай `structure.md` из корня проекта.
|
|
69
|
+
2. Определи тип проекта: Single-project или Monorepo.
|
|
70
|
+
3. Определи **целевой скоуп** для новой фичи:
|
|
71
|
+
- **Single-project:** Корень проекта (`./.agentica/`).
|
|
72
|
+
- **Monorepo (package):** Если пользователь явно указал пакет → используй его.
|
|
73
|
+
- **Monorepo (package):** Если открыт файл из конкретного пакета → используй его.
|
|
74
|
+
- **Monorepo (неоднозначно):** Задай вопрос через интсрумент `ask_questions` со списком пакетов.
|
|
75
|
+
- **Модуль внутри пакета:** Если фича касается конкретного модуля (например, только auth или только api), запомни это для tech.md.
|
|
76
|
+
|
|
77
|
+
### Шаг 1.2: Чтение контекста проекта
|
|
78
|
+
Прочитай следующие файлы из целевого скоупа (если существуют):
|
|
79
|
+
1. `product.md` — продуктовый контекст проекта/пакета.
|
|
80
|
+
2. `structure.md` — структура проекта/пакета.
|
|
81
|
+
3. `tech.md` — технический стек и стандарты.
|
|
82
|
+
4. Список существующих директорий в `features/` (для определения номера FT-XXXX).
|
|
83
|
+
5. Список существующих файлов в `architecture/` (могут быть релевантные AR-XXXX).
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
### Шаг 1.3: Проверка дублирования и конфликтов
|
|
87
|
+
1. Просмотри существующие `FT-XXXX` директории:
|
|
88
|
+
- Если похожая фича уже описана → уточни у пользователя через интсрумент `ask_questions`, нужна ли новая спека или дополнение существующей.
|
|
89
|
+
2. Просмотри существующие `CH-XXXX` в `.agentica/changes/`:
|
|
90
|
+
- Если есть активные изменения в той же области → уточни приоритеты и возможные конфликты.
|
|
91
|
+
|
|
92
|
+
## Фаза 2: Сканирование существующей кодовой базы
|
|
93
|
+
|
|
94
|
+
### Цель сканирования
|
|
95
|
+
Понять **текущее состояние** кода, куда будет добавляться новая фича:
|
|
96
|
+
- Какие модули существуют?
|
|
97
|
+
- Какие паттерны используются?
|
|
98
|
+
- Какие библиотеки уже подключены?
|
|
99
|
+
- Где находятся точки интеграции для новой фичи?
|
|
100
|
+
|
|
101
|
+
### Шаг 2.1: Определение зоны воздействия (Impact Zone)
|
|
102
|
+
|
|
103
|
+
На основе описания фичи определи:
|
|
104
|
+
1. **Модули/директории**, которые будут затронуты.
|
|
105
|
+
2. **Существующие файлы**, которые нужно будет изменить (entry points, конфиги).
|
|
106
|
+
3. **Связанные модули**, которые будут взаимодействовать с новой фичей.
|
|
107
|
+
|
|
108
|
+
Используй `semantic_search`, `grep_search`, `file_search` для поиска:
|
|
109
|
+
- Похожих функций/классов, которые можно использовать как образец.
|
|
110
|
+
- Entry points (main.ts, index.ts, app.py, routes.ts).
|
|
111
|
+
- Конфигурационных файлов (config.ts, settings.py).
|
|
112
|
+
|
|
113
|
+
### Шаг 2.2: Накопление контекста через Memory
|
|
114
|
+
|
|
115
|
+
**Важно:** Все находки сохраняй в `memory` для последующего использования при составлении спеки.
|
|
116
|
+
|
|
117
|
+
**Правила использования `memory`:**
|
|
118
|
+
|
|
119
|
+
1. **Категория:**
|
|
120
|
+
- `file_specific` — для фактов о конкретных файлах.
|
|
121
|
+
- `general` — для паттернов, архитектурных решений, связей между модулями.
|
|
122
|
+
|
|
123
|
+
2. **Subject (с префиксом для группировки):**
|
|
124
|
+
- Формат: `@<scope>/FT-XXXX--<тема>`
|
|
125
|
+
- `<scope>` — имя пакета (для монорепо) или `root` (для single-project).
|
|
126
|
+
- `XXXX` — номер будущей фичи (определяется на шаге 1.2).
|
|
127
|
+
- `<тема>` — группировка: `existing-modules`, `patterns`, `libraries`, `entry-points`, `integration-points`.
|
|
128
|
+
|
|
129
|
+
Примеры:
|
|
130
|
+
- `@root/FT-0012--existing-modules`
|
|
131
|
+
- `@api-service/FT-0023--patterns`
|
|
132
|
+
- `@root/FT-0012--libraries`
|
|
133
|
+
|
|
134
|
+
3. **Fact:** Короткое утверждение (до 200 символов).
|
|
135
|
+
|
|
136
|
+
4. **Citations:** Всегда указывай файл:строка.
|
|
137
|
+
|
|
138
|
+
5. **Reason:** Объясни, как этот факт повлияет на спецификацию новой фичи.
|
|
139
|
+
|
|
140
|
+
### Шаг 2.3: Что сканировать и сохранять
|
|
141
|
+
|
|
142
|
+
#### Существующие модули
|
|
143
|
+
Найди модули, которые будут взаимодействовать с новой фичей:
|
|
144
|
+
- Сохрани в `memory`: "Module: [имя] at [путь] - [назначение]"
|
|
145
|
+
- Сохрани в `memory`: "Public API: [функция/класс] at [файл:строка] - [сигнатура]"
|
|
146
|
+
|
|
147
|
+
Пример:
|
|
148
|
+
```
|
|
149
|
+
category: general
|
|
150
|
+
subject: @root/FT-0012--existing-modules
|
|
151
|
+
fact: Module 'FileProcessor' at src/processors/ handles file validation and parsing
|
|
152
|
+
citations: src/processors/file-processor.ts:1
|
|
153
|
+
reason: New CSV upload feature will need to integrate with existing file processing
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
#### Паттерны и архитектурные решения
|
|
157
|
+
Выяви используемые паттерны проектирования:
|
|
158
|
+
- Сохрани в `memory`: "Pattern: [название] at [файл:строка] - [как реализован]"
|
|
159
|
+
|
|
160
|
+
Пример:
|
|
161
|
+
```
|
|
162
|
+
category: general
|
|
163
|
+
subject: @root/FT-0012--patterns
|
|
164
|
+
fact: Factory pattern used for creating service instances in src/factories/
|
|
165
|
+
citations: src/factories/service-factory.ts:12
|
|
166
|
+
reason: New feature should follow the same factory pattern for consistency
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
#### Библиотеки и зависимости
|
|
170
|
+
Прочитай `package.json` / `pyproject.toml` / `requirements.txt`:
|
|
171
|
+
- Сохрани в `memory`: "Library: [имя] version [V] - [использование в проекте]"
|
|
172
|
+
|
|
173
|
+
Пример:
|
|
174
|
+
```
|
|
175
|
+
category: general
|
|
176
|
+
subject: @root/FT-0012--libraries
|
|
177
|
+
fact: Project uses 'csv-parse' v5.3.0 for CSV parsing in multiple modules
|
|
178
|
+
citations: package.json:15, src/parsers/csv.ts:3
|
|
179
|
+
reason: Can reuse existing CSV library instead of adding a new dependency
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
#### Точки интеграции (Entry Points)
|
|
183
|
+
Найди места, где новую фичу нужно будет "подключить":
|
|
184
|
+
- Сохрани в `memory`: "Entry point: [файл] at [строка] - [назначение]"
|
|
185
|
+
- Сохрани в `memory`: "Integration point: [место] at [файл:строка] - [что нужно добавить]"
|
|
186
|
+
|
|
187
|
+
Пример:
|
|
188
|
+
```
|
|
189
|
+
category: file_specific
|
|
190
|
+
subject: @root/FT-0012--integration-points
|
|
191
|
+
fact: CLI commands registered in src/cli.ts via Commander pattern
|
|
192
|
+
citations: src/cli.ts:23-45
|
|
193
|
+
reason: New CSV import command needs to be registered here
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
#### Конфигурация
|
|
197
|
+
Найди конфигурационные файлы:
|
|
198
|
+
- Сохрани в `memory`: "Config: [файл] - [что настраивает]"
|
|
199
|
+
|
|
200
|
+
Пример:
|
|
201
|
+
```
|
|
202
|
+
category: file_specific
|
|
203
|
+
subject: @root/FT-0012--integration-points
|
|
204
|
+
fact: App config in config/default.ts includes file upload settings (maxSize, allowedTypes)
|
|
205
|
+
citations: config/default.ts:12-18
|
|
206
|
+
reason: CSV upload limits should be added to the same config structure
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Шаг 2.4: Стратегия сканирования
|
|
210
|
+
|
|
211
|
+
1. **Начни с широкого поиска:** Используй `semantic_search` с описанием фичи, чтобы найти похожий функционал.
|
|
212
|
+
2. **Сузь до конкретных файлов:** Читай найденные файлы через `read_file`.
|
|
213
|
+
3. **Сохраняй сразу:** Как только нашёл что-то важное — сразу в `memory`.
|
|
214
|
+
4. **Группируй по темам:** Используй одинаковый subject для связанных фактов.
|
|
215
|
+
|
|
216
|
+
## Фаза 3: Интервью с пользователем
|
|
217
|
+
|
|
218
|
+
### Цель интервью
|
|
219
|
+
Собрать **полное** описание фичи, чтобы спецификация не содержала пробелов и неоднозначностей.
|
|
220
|
+
|
|
221
|
+
Используй интсрумент `ask_questions` для задавания вопросов. Не перегружай пользователя, задавай по 2-4 вопроса за раз.
|
|
222
|
+
|
|
223
|
+
### Когда запускать интервью
|
|
224
|
+
|
|
225
|
+
**Всегда спрашивай**, если:
|
|
226
|
+
1. Входные данные содержат **менее 3 предложений** описания фичи.
|
|
227
|
+
2. Не указаны ключевые user stories или use cases.
|
|
228
|
+
3. Непонятны границы фичи ("где она начинается и заканчивается").
|
|
229
|
+
4. Есть технические неоднозначности (выбор подхода, интеграция с существующим кодом).
|
|
230
|
+
5. Непонятны критерии успеха ("как понять, что фича работает?").
|
|
231
|
+
|
|
232
|
+
**Можно пропустить**, если:
|
|
233
|
+
1. Пользователь дал детальное описание (5+ абзацев) с use cases, пользовательскими сценариями и требованиями.
|
|
234
|
+
2. Контекст полностью покрывает 6 измерений (см. ниже).
|
|
235
|
+
|
|
236
|
+
### Структура интервью (6 измерений)
|
|
237
|
+
|
|
238
|
+
#### Измерение 1: Продуктовый контекст
|
|
239
|
+
- **Зачем** эта фича нужна? Какую проблему решает?
|
|
240
|
+
- **Кто** будет использовать? (конечный пользователь, разработчик, система)
|
|
241
|
+
- **Альтернативы:** Рассматривались ли другие подходы? Почему выбран именно этот?
|
|
242
|
+
|
|
243
|
+
#### Измерение 2: User Stories и Use Cases
|
|
244
|
+
- Какие **основные сценарии** использования фичи?
|
|
245
|
+
- Какие **edge cases** (граничные случаи) нужно учесть?
|
|
246
|
+
- Есть ли **последовательность действий** (шаг 1 → шаг 2 → шаг 3)?
|
|
247
|
+
|
|
248
|
+
Пример вопросов:
|
|
249
|
+
```
|
|
250
|
+
- Как пользователь будет запускать CSV импорт? (CLI команда, GUI кнопка, API endpoint?)
|
|
251
|
+
- Что происходит при ошибке в середине файла? (остановка, пропуск строки, rollback?)
|
|
252
|
+
- Нужна ли поддержка больших файлов (> 100MB)?
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
#### Измерение 3: Функциональные требования
|
|
256
|
+
- **Обязательные функции** (Must have): Без чего фича не работает?
|
|
257
|
+
- **Желательные функции** (Should have): Что улучшит UX, но не критично?
|
|
258
|
+
- **Опциональные функции** (Nice to have): Что можно добавить в будущем?
|
|
259
|
+
|
|
260
|
+
#### Измерение 4: Нефункциональные требования
|
|
261
|
+
- **Производительность:** Есть ли требования к скорости, latency, throughput?
|
|
262
|
+
- **Надёжность:** Нужны ли retry, fallback, graceful degradation?
|
|
263
|
+
- **Безопасность:** Нужна ли валидация, санитизация, авторизация?
|
|
264
|
+
- **UX:** Нужны ли progress indicators, user feedback, confirmations?
|
|
265
|
+
|
|
266
|
+
#### Измерение 5: Интеграция с существующим кодом
|
|
267
|
+
- Какие **существующие модули** будут использоваться?
|
|
268
|
+
- Нужно ли **изменять существующий код**? Если да, то что именно?
|
|
269
|
+
- Есть ли риски **breaking changes** для других частей системы?
|
|
270
|
+
|
|
271
|
+
#### Измерение 6: Технические решения
|
|
272
|
+
- Нужны ли **новые библиотеки**? Если да, какие рассматриваются?
|
|
273
|
+
- Какой **паттерн проектирования** предполагается? (или следовать существующим?)
|
|
274
|
+
- Есть ли **ограничения по стеку** (например, "только нативные модули", "без дополнительных зависимостей")?
|
|
275
|
+
|
|
276
|
+
### Критерий достаточности контекста
|
|
277
|
+
|
|
278
|
+
Считай контекст **достаточным**, если ты можешь ответить на следующие вопросы:
|
|
279
|
+
1. **Что** делает фича? (1-2 предложения)
|
|
280
|
+
2. **Зачем** она нужна? (проблема, которую решает)
|
|
281
|
+
3. **Кто** и **как** будет её использовать? (сценарии)
|
|
282
|
+
4. **Где** в коде она будет встраиваться? (модули, файлы)
|
|
283
|
+
5. **Какие** библиотеки/паттерны будут использоваться?
|
|
284
|
+
6. **Как** понять, что фича работает правильно? (критерии успеха)
|
|
285
|
+
|
|
286
|
+
Если не можешь ответить хотя бы на 4 из 6 — **продолжай интервью**.
|
|
287
|
+
|
|
288
|
+
### Техника задавания вопросов
|
|
289
|
+
|
|
290
|
+
1. **Группируй вопросы:** Задавай 2-4 связанных вопроса за раз (например, все про use cases).
|
|
291
|
+
2. **Предлагай варианты:** Если есть стандартные подходы, предложи их в options.
|
|
292
|
+
3. **Используй контекст:** Ссылайся на найденные в коде паттерны ("Я вижу, что для импорта используется фабрика. Применить тот же подход?").
|
|
293
|
+
4. **Не задавай очевидное:** Если из контекста ясно, что проект использует TypeScript — не спрашивай "на каком языке писать".
|
|
294
|
+
|
|
295
|
+
## Фаза 4: Подготовка к созданию спецификации
|
|
296
|
+
|
|
297
|
+
### Шаг 4.1: Определение номера спеки
|
|
298
|
+
1. Прочитай список директорий в `.agentica/features/` целевого скоупа.
|
|
299
|
+
2. Извлеки все номера `FT-XXXX`.
|
|
300
|
+
3. Определи следующий свободный номер (например, если есть FT-0001, FT-0002, FT-0003 → следующий FT-0004).
|
|
301
|
+
4. Сформируй название директории: `FT-XXXX - <Название фичи>/`
|
|
302
|
+
|
|
303
|
+
### Шаг 4.2: Создание Git ветки (если есть Git)
|
|
304
|
+
1. Проверь наличие Git репозитория: `git rev-parse --git-dir`
|
|
305
|
+
2. Если репозиторий существует:
|
|
306
|
+
- Проверь текущую ветку: `git branch --show-current`
|
|
307
|
+
- Создай новую ветку: `git checkout -b <scope_id>/FT-XXXX-<slug>`
|
|
308
|
+
- `<scope_id>` — имя пакета для монор или `feature` для single-project.
|
|
309
|
+
- `<slug>` — короткое имя фичи в kebab-case (например, `csv-batch-upload`)
|
|
310
|
+
|
|
311
|
+
3. Если репозитория нет — пропусти этот шаг.
|
|
312
|
+
|
|
313
|
+
### Шаг 4.3: Копирование шаблона
|
|
314
|
+
1. Прочитай структуру `.agentica/templates/feature/FT-0000/`
|
|
315
|
+
2. Скопируй все файлы из шаблона в новую директорию `.agentica/features/FT-XXXX - <Название фичи>/`:
|
|
316
|
+
- `product.md`
|
|
317
|
+
- `tech.md`
|
|
318
|
+
- `tasks.md` (пустой или с заглушкой)
|
|
319
|
+
- `validation.md` (пустой или с заглушкой)
|
|
320
|
+
|
|
321
|
+
**Важно:** Не заполняй сразу все файлы. На этом этапе работаем только с `product.md`, `tech.md` и (опционально) `research.md`.
|
|
322
|
+
|
|
323
|
+
### Шаг 4.4: Research библиотек (опционально)
|
|
324
|
+
|
|
325
|
+
**Когда проводить research:**
|
|
326
|
+
1. Фича требует **новую библиотеку**, которой нет в проекте.
|
|
327
|
+
2. Нужна **сложная логика**, которую нежелательно писать с нуля (парсинг, валидация, криптография, работа с датами и т.д.).
|
|
328
|
+
3. Есть **несколько альтернатив** и нужно выбрать оптимальную.
|
|
329
|
+
|
|
330
|
+
**Когда НЕ проводить research:**
|
|
331
|
+
1. Функционал **входит в скоуп продукта** и должен быть написан вручную (core business logic).
|
|
332
|
+
2. Подходящая библиотека **уже подключена** к проекту (найдена на шаге 2.3).
|
|
333
|
+
3. Задача **тривиальная** и не требует внешних зависимостей.
|
|
334
|
+
|
|
335
|
+
**Процесс research:**
|
|
336
|
+
|
|
337
|
+
1. **Инвентаризация текущих зависимостей:**
|
|
338
|
+
- Проверь `package.json` / `pyproject.toml` / `MyProject.csproj`.
|
|
339
|
+
- Найди библиотеки, которые уже решают похожие задачи.
|
|
340
|
+
- Сохрани в `memory`: "Library already in project: [имя] - [можно ли переиспользовать для новой фичи]"
|
|
341
|
+
|
|
342
|
+
2. **Поиск кандидатов:**
|
|
343
|
+
- Используй `mcp_context7_resolve-library-id` для поиска популярных библиотек.
|
|
344
|
+
- Для каждого кандидата используй `mcp_context7_get-library-docs` для получения документации.
|
|
345
|
+
- Сохрани в `memory`: "Library candidate: [имя] - [основные возможности]"
|
|
346
|
+
|
|
347
|
+
3. **Сравнение альтернатив:**
|
|
348
|
+
Создай таблицу сравнения в `research.md`:
|
|
349
|
+
|
|
350
|
+
| Библиотека | Плюсы | Минусы | Размер | Активность | Решение |
|
|
351
|
+
|:-----------|:------|:-------|:-------|:-----------|:--------|
|
|
352
|
+
| lib-a | ... | ... | 50KB | Active | ✅ |
|
|
353
|
+
| lib-b | ... | ... | 200KB | Stale | ❌ |
|
|
354
|
+
|
|
355
|
+
4. **Проверка совместимости:**
|
|
356
|
+
- Совместима ли библиотека с текущим стеком? (TypeScript types, Python version)
|
|
357
|
+
- Нет ли конфликтов с существующими зависимостями?
|
|
358
|
+
- Соответствует ли философии проекта из `tech.md`? (например, "минимум зависимостей", "only native modules")
|
|
359
|
+
|
|
360
|
+
5. **Рекомендация:**
|
|
361
|
+
В конце `research.md` чётко укажи:
|
|
362
|
+
- **Рекомендуемая библиотека:** [имя]
|
|
363
|
+
- **Обоснование:** [почему именно эта]
|
|
364
|
+
- **Альтернатива:** [запасной вариант, если основная не подойдёт]
|
|
365
|
+
|
|
366
|
+
**Пример структуры research.md:**
|
|
367
|
+
|
|
368
|
+
```markdown
|
|
369
|
+
# Research: Библиотеки для CSV парсинга
|
|
370
|
+
|
|
371
|
+
## Текущие зависимости
|
|
372
|
+
|
|
373
|
+
В проекте уже используется:
|
|
374
|
+
- `csv-parse` v5.3.0 в модуле `src/parsers/`
|
|
375
|
+
|
|
376
|
+
**Вывод:** Можно переиспользовать для новой фичи, дополнительная библиотека не нужна.
|
|
377
|
+
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
## Анализ альтернатив (если бы не было csv-parse)
|
|
381
|
+
|
|
382
|
+
| Библиотека | Плюсы | Минусы | Размер | Активность |
|
|
383
|
+
|:-----------|:------|:-------|:-------|:-----------|
|
|
384
|
+
| csv-parse | Streaming, RFC 4180, active | Требует Node 14+ | 45KB | ✅ Active |
|
|
385
|
+
| papaparse | Browser + Node, популярная | Больше размер | 120KB | ✅ Active |
|
|
386
|
+
| fast-csv | Высокая скорость | Меньше функций | 38KB | ⚠️ Moderate |
|
|
387
|
+
|
|
388
|
+
## Рекомендация
|
|
389
|
+
|
|
390
|
+
**Использовать:** `csv-parse` (уже в проекте)
|
|
391
|
+
|
|
392
|
+
**Обоснование:**
|
|
393
|
+
- Уже протестирован и используется в других модулях
|
|
394
|
+
- Поддерживает streaming для больших файлов
|
|
395
|
+
- Соответствует требованиям RFC 4180
|
|
396
|
+
|
|
397
|
+
**Альтернатива:** Если потребуется browser-совместимость → рассмотреть `papaparse`
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
## Фаза 5: Создание черновика спецификации
|
|
401
|
+
|
|
402
|
+
На этом этапе заполняем **только** `product.md` и `tech.md`. Файлы `tasks.md` и `validation.md` остаются пустыми (будут заполнены через `agentica.tasks`).
|
|
403
|
+
|
|
404
|
+
### Шаг 5.1: Заполнение product.md
|
|
405
|
+
|
|
406
|
+
**Цель:** Объяснить **ЧТО** и **ЗАЧЕМ**, понятным языком для любого члена команды (не только для разработчиков).
|
|
407
|
+
|
|
408
|
+
#### Структура product.md:
|
|
409
|
+
|
|
410
|
+
```markdown
|
|
411
|
+
# FT-XXXX: <Название фичи>
|
|
412
|
+
|
|
413
|
+
## Контекст и мотивация
|
|
414
|
+
|
|
415
|
+
### Проблема
|
|
416
|
+
[2-3 предложения: какую проблему решает фича]
|
|
417
|
+
|
|
418
|
+
### Целевая аудитория
|
|
419
|
+
[Кто будет использовать: конечные пользователи, разработчики, система]
|
|
420
|
+
|
|
421
|
+
### Альтернативы
|
|
422
|
+
[Какие альтернативные решения рассматривались и почему не подошли]
|
|
423
|
+
|
|
424
|
+
## Описание решения
|
|
425
|
+
|
|
426
|
+
### Что делает фича
|
|
427
|
+
[Краткое описание функционала в 2-3 предложениях]
|
|
428
|
+
|
|
429
|
+
### Ключевые возможности
|
|
430
|
+
- **[Функция 1]:** Описание
|
|
431
|
+
- **[Функция 2]:** Описание
|
|
432
|
+
- **[Функция 3]:** Описание
|
|
433
|
+
|
|
434
|
+
## Пользовательские сценарии (Use Cases)
|
|
435
|
+
|
|
436
|
+
### Сценарий 1: [Название]
|
|
437
|
+
**Действующее лицо:** [Кто]
|
|
438
|
+
**Цель:** [Зачем]
|
|
439
|
+
**Шаги:**
|
|
440
|
+
1. [Шаг 1]
|
|
441
|
+
2. [Шаг 2]
|
|
442
|
+
3. [Шаг 3]
|
|
443
|
+
|
|
444
|
+
**Ожидаемый результат:** [Что получаем]
|
|
445
|
+
|
|
446
|
+
### Сценарий 2: [Название]
|
|
447
|
+
[Аналогично]
|
|
448
|
+
|
|
449
|
+
## Граничные случаи (Edge Cases)
|
|
450
|
+
|
|
451
|
+
### Edge Case 1: [Название]
|
|
452
|
+
**Ситуация:** [Описание]
|
|
453
|
+
**Ожидаемое поведение:** [Как система должна отреагировать]
|
|
454
|
+
|
|
455
|
+
### Edge Case 2: [Название]
|
|
456
|
+
[Аналогично]
|
|
457
|
+
|
|
458
|
+
## Нефункциональные требования
|
|
459
|
+
|
|
460
|
+
### Производительность
|
|
461
|
+
- [Требование 1, например: обработка файла 100MB за < 5 секунд]
|
|
462
|
+
|
|
463
|
+
### Надёжность
|
|
464
|
+
- [Требование 2, например: retry при сбое сети, максимум 3 попытки]
|
|
465
|
+
|
|
466
|
+
### UX
|
|
467
|
+
- [Требование 3, например: progress indicator при загрузке]
|
|
468
|
+
|
|
469
|
+
## Не-цели (Out of Scope)
|
|
470
|
+
|
|
471
|
+
Что **явно** не входит в эту фичу:
|
|
472
|
+
- [Что не делаем 1]
|
|
473
|
+
- [Что не делаем 2]
|
|
474
|
+
|
|
475
|
+
## Критерии успеха
|
|
476
|
+
|
|
477
|
+
Фича считается завершенной, когда:
|
|
478
|
+
- [ ] [Критерий 1]
|
|
479
|
+
- [ ] [Критерий 2]
|
|
480
|
+
- [ ] [Критерий 3]
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
**Требования к качеству:**
|
|
484
|
+
1. **Конкретика:** Избегай размытых формулировок ("быстро", "удобно"). Пиши "< 5 секунд", "< 3 клика".
|
|
485
|
+
2. **User-centric:** Пиши с точки зрения пользователя, а не технической реализации.
|
|
486
|
+
3. **Примеры:** Добавляй примеры входных/выходных данных где это уместно.
|
|
487
|
+
|
|
488
|
+
### Шаг 5.2: Заполнение tech.md
|
|
489
|
+
|
|
490
|
+
**Цель:** Объяснить **КАК** будет реализована фича с технической точки зрения.
|
|
491
|
+
|
|
492
|
+
#### Структура tech.md:
|
|
493
|
+
|
|
494
|
+
````markdown
|
|
495
|
+
# FT-XXXX: <Название фичи> — Техническое решение
|
|
496
|
+
|
|
497
|
+
## Обзор архитектуры
|
|
498
|
+
|
|
499
|
+
### Высокоуровневая схема
|
|
500
|
+
|
|
501
|
+
[ASCII-диаграмма или описание потока данных]
|
|
502
|
+
|
|
503
|
+
User Input → Validator → Processor → Repository → Storage
|
|
504
|
+
↓ error ↓ event
|
|
505
|
+
ErrorHandler EventBus → Logger
|
|
506
|
+
|
|
507
|
+
### Основные компоненты
|
|
508
|
+
|
|
509
|
+
- **[Компонент 1]:** Назначение, зона ответственности
|
|
510
|
+
- **[Компонент 2]:** Назначение, зона ответственности
|
|
511
|
+
- **[Компонент 3]:** Назначение, зона ответственности
|
|
512
|
+
|
|
513
|
+
## Интеграция с существующим кодом
|
|
514
|
+
|
|
515
|
+
### Модули, которые будут изменены
|
|
516
|
+
|
|
517
|
+
#### [Существующий модуль 1]
|
|
518
|
+
**Файл:** `[путь/до/файла.ts]`
|
|
519
|
+
**Изменения:**
|
|
520
|
+
- Добавить метод `[название]` для [назначение]
|
|
521
|
+
- Импортировать новый компонент `[название]`
|
|
522
|
+
|
|
523
|
+
**Риски:**
|
|
524
|
+
- [Потенциальный риск 1]
|
|
525
|
+
- [Как минимизировать]
|
|
526
|
+
|
|
527
|
+
#### [Существующий модуль 2]
|
|
528
|
+
[Аналогично]
|
|
529
|
+
|
|
530
|
+
### Модули, которые будут переиспользованы
|
|
531
|
+
|
|
532
|
+
#### [Существующий модуль A]
|
|
533
|
+
**Используемые функции:**
|
|
534
|
+
- `[функция1]` — для [назначение]
|
|
535
|
+
- `[функция2]` — для [назначение]
|
|
536
|
+
|
|
537
|
+
**Требования:**
|
|
538
|
+
- [Что нужно учесть при использовании]
|
|
539
|
+
|
|
540
|
+
## Новые компоненты
|
|
541
|
+
|
|
542
|
+
### Компонент 1: [Название]
|
|
543
|
+
|
|
544
|
+
**Расположение:** `src/[путь]/[имя-файла].ts`
|
|
545
|
+
|
|
546
|
+
**Интерфейс (псевдокод):**
|
|
547
|
+
|
|
548
|
+
```typescript
|
|
549
|
+
interface ComponentName {
|
|
550
|
+
method1(param: Type): ReturnType;
|
|
551
|
+
method2(param: Type): ReturnType;
|
|
552
|
+
}
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
**Зависимости:**
|
|
556
|
+
- [Модуль A] — для [назначение]
|
|
557
|
+
- [Библиотека B] — для [назначение]
|
|
558
|
+
|
|
559
|
+
**Поведение:**
|
|
560
|
+
1. [Шаг 1 работы компонента]
|
|
561
|
+
2. [Шаг 2]
|
|
562
|
+
3. [Шаг 3]
|
|
563
|
+
|
|
564
|
+
**Обработка ошибок:**
|
|
565
|
+
- [Ошибка 1] → [Действие]
|
|
566
|
+
- [Ошибка 2] → [Действие]
|
|
567
|
+
|
|
568
|
+
### Компонент 2: [Название]
|
|
569
|
+
[Аналогично]
|
|
570
|
+
|
|
571
|
+
## Библиотеки и зависимости
|
|
572
|
+
|
|
573
|
+
### Новые зависимости
|
|
574
|
+
|
|
575
|
+
#### [Библиотека 1]
|
|
576
|
+
**Версия:** `^X.Y.Z`
|
|
577
|
+
**Назначение:** [Для чего используется]
|
|
578
|
+
**Обоснование:** [Почему выбрана именно эта]
|
|
579
|
+
**Альтернативы:** [Что ещё рассматривалось]
|
|
580
|
+
|
|
581
|
+
### Переиспользуемые зависимости
|
|
582
|
+
|
|
583
|
+
#### [Библиотека A] (уже в проекте)
|
|
584
|
+
**Как используется:** [Описание]
|
|
585
|
+
|
|
586
|
+
## Паттерны проектирования
|
|
587
|
+
|
|
588
|
+
### Паттерн 1: [Название]
|
|
589
|
+
**Где применяется:** [Компонент/модуль]
|
|
590
|
+
**Обоснование:** [Почему именно этот паттерн]
|
|
591
|
+
|
|
592
|
+
Пример:
|
|
593
|
+
```typescript
|
|
594
|
+
// Краткий пример реализации паттерна
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
### Соответствие существующим паттернам
|
|
598
|
+
|
|
599
|
+
Фича следует паттернам, используемым в проекте:
|
|
600
|
+
- [Паттерн X] — как в модуле `[существующий-модуль]`
|
|
601
|
+
- [Подход Y] — как в модуле `[существующий-модуль]`
|
|
602
|
+
|
|
603
|
+
## Потоки данных (Data Flow)
|
|
604
|
+
|
|
605
|
+
### Основной flow
|
|
606
|
+
|
|
607
|
+
```
|
|
608
|
+
1. User → Input
|
|
609
|
+
2. Input → Validator.validate()
|
|
610
|
+
├─ valid → Processor.process()
|
|
611
|
+
└─ invalid → ErrorHandler.handle() → User (error message)
|
|
612
|
+
3. Processor → Repository.save()
|
|
613
|
+
4. Repository → Success → User (confirmation)
|
|
614
|
+
5. Repository → Error → RetryManager.retry() → (back to step 3, max 3 attempts)
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
### Edge case flows
|
|
618
|
+
|
|
619
|
+
#### Flow для большого файла (> 100MB)
|
|
620
|
+
```
|
|
621
|
+
1. Input → SizeChecker
|
|
622
|
+
2. SizeChecker → StreamProcessor (вместо обычного Processor)
|
|
623
|
+
3. StreamProcessor → chunks → Repository.saveBatch()
|
|
624
|
+
4. Progress → EventBus.emit('progress') → UI (progress bar)
|
|
625
|
+
```
|
|
626
|
+
|
|
627
|
+
## Конфигурация
|
|
628
|
+
|
|
629
|
+
### Новые параметры конфигурации
|
|
630
|
+
|
|
631
|
+
Добавить в `config/default.ts`:
|
|
632
|
+
|
|
633
|
+
```typescript
|
|
634
|
+
csvUpload: {
|
|
635
|
+
maxFileSize: 100 * 1024 * 1024, // 100 MB
|
|
636
|
+
allowedExtensions: ['.csv', '.txt'],
|
|
637
|
+
batchSize: 1000,
|
|
638
|
+
retryAttempts: 3,
|
|
639
|
+
retryDelay: 1000, // ms
|
|
640
|
+
}
|
|
641
|
+
```
|
|
642
|
+
|
|
643
|
+
## Обработка ошибок
|
|
644
|
+
|
|
645
|
+
### Типы ошибок
|
|
646
|
+
|
|
647
|
+
| Ошибка | Код | Ситуация | Действие | User Message |
|
|
648
|
+
|:-------|:----|:---------|:---------|:-------------|
|
|
649
|
+
| ValidationError | E001 | Неверный формат CSV | Остановка, вывод ошибки | "Invalid CSV format at line X" |
|
|
650
|
+
| FileTooLargeError | E002 | Файл > 100MB | Остановка | "File exceeds maximum size" |
|
|
651
|
+
| NetworkError | E003 | Ошибка сети | Retry (max 3) | "Network error, retrying..." |
|
|
652
|
+
|
|
653
|
+
## Тестирование
|
|
654
|
+
|
|
655
|
+
### Unit-тесты
|
|
656
|
+
|
|
657
|
+
**Что покрываем:**
|
|
658
|
+
- Валидация входных данных
|
|
659
|
+
- Парсинг CSV
|
|
660
|
+
- Обработка ошибок
|
|
661
|
+
|
|
662
|
+
**Требование:** > 80% coverage для критичных компонентов.
|
|
663
|
+
|
|
664
|
+
### Интеграционные тесты
|
|
665
|
+
|
|
666
|
+
**Сценарии:**
|
|
667
|
+
- End-to-end: загрузка файла → сохранение в БД
|
|
668
|
+
- Error handling: некорректный файл → корректная ошибка
|
|
669
|
+
|
|
670
|
+
### Нагрузочные тесты (если применимо)
|
|
671
|
+
|
|
672
|
+
**Тест 1:** Файл 100MB → обработка за < 5 секунд
|
|
673
|
+
**Тест 2:** 1000 одновременных запросов → latency < 200ms
|
|
674
|
+
|
|
675
|
+
## Риски и компромиссы (Trade-offs)
|
|
676
|
+
|
|
677
|
+
### Риск 1: [Название]
|
|
678
|
+
**Вероятность:** [Низкая/Средняя/Высокая]
|
|
679
|
+
**Влияние:** [Низкое/Среднее/Высокое]
|
|
680
|
+
**Митигация:** [Как снизить риск]
|
|
681
|
+
|
|
682
|
+
### Компромисс 1: [Решение]
|
|
683
|
+
**Мы выбрали:** [Подход A]
|
|
684
|
+
**Вместо:** [Подход B]
|
|
685
|
+
**Плюсы:** [Что получаем]
|
|
686
|
+
**Минусы:** [Что теряем]
|
|
687
|
+
**Когда пересмотреть:** [При каких условиях нужно вернуться к этому решению]
|
|
688
|
+
|
|
689
|
+
## Миграция и обратная совместимость
|
|
690
|
+
|
|
691
|
+
### Breaking Changes
|
|
692
|
+
[Есть ли изменения, которые сломают существующий функционал?]
|
|
693
|
+
- **Да:** [Описание + план миграции]
|
|
694
|
+
- **Нет:** [Объяснение, почему совместимость сохранена]
|
|
695
|
+
|
|
696
|
+
### Миграция данных (если применимо)
|
|
697
|
+
[Нужно ли мигрировать существующие данные? Если да — план миграции]
|
|
698
|
+
|
|
699
|
+
## Checklist до декомпозиции на задачи
|
|
700
|
+
|
|
701
|
+
Перед запуском `agentica.tasks` убедись:
|
|
702
|
+
- [ ] Все зависимости доступны и совместимы
|
|
703
|
+
- [ ] Нет конфликтов с существующими модулями
|
|
704
|
+
- [ ] Определены все интерфейсы компонентов
|
|
705
|
+
- [ ] Описаны все edge cases
|
|
706
|
+
- [ ] Есть план тестирования
|
|
707
|
+
|
|
708
|
+
**Важно:** Файл `tasks.md` будет заполнен агентом `agentica.tasks`, который разобьёт спецификацию на конкретные задачи для реализации.
|
|
709
|
+
````
|
|
710
|
+
|
|
711
|
+
**Требования к качеству:**
|
|
712
|
+
1. **Конкретика:** Избегай "будет быстро", пиши "latency < 200ms".
|
|
713
|
+
2. **Псевдокод:** Используй TypeScript/Python-подобный псевдокод для интерфейсов.
|
|
714
|
+
3. **Диаграммы:** ASCII-схемы для потоков данных обязательны.
|
|
715
|
+
4. **Связь с кодом:** Указывай конкретные пути к существующим файлам (найденным на шаге 2).
|
|
716
|
+
|
|
717
|
+
### Шаг 5.3: Использование накопленных Memories
|
|
718
|
+
|
|
719
|
+
На этом этапе используй все факты, сохранённые в `memory` на шаге 2:
|
|
720
|
+
|
|
721
|
+
1. **Существующие модули** (`@<scope>/FT-XXXX--existing-modules`):
|
|
722
|
+
- Добавь в раздел "Интеграция с существующим кодом" → "Модули, которые будут переиспользованы".
|
|
723
|
+
|
|
724
|
+
2. **Паттерны** (`@<scope>/FT-XXXX--patterns`):
|
|
725
|
+
- Добавь в раздел "Паттерны проектирования" → "Соответствие существующим паттернам".
|
|
726
|
+
|
|
727
|
+
3. **Библиотеки** (`@<scope>/FT-XXXX--libraries`):
|
|
728
|
+
- Добавь в раздел "Библиотеки и зависимости" → "Переиспользуемые зависимости".
|
|
729
|
+
|
|
730
|
+
4. **Integration points** (`@<scope>/FT-XXXX--integration-points`):
|
|
731
|
+
- Добавь в раздел "Интеграция с существующим кодом" → "Модули, которые будут изменены".
|
|
732
|
+
|
|
733
|
+
**Важно:** Каждый факт из memory должен иметь `citations` (файл:строка). Используй эти ссылки в tech.md для конкретики:
|
|
734
|
+
```markdown
|
|
735
|
+
#### Модуль: CLI Router
|
|
736
|
+
**Файл:** `src/cli.ts:23-45`
|
|
737
|
+
**Изменения:**
|
|
738
|
+
- Добавить регистрацию новой команды `import-csv` в метод `registerCommands()`
|
|
739
|
+
```
|
|
740
|
+
|
|
741
|
+
## Фаза 6: Пауза для Review (ОБЯЗАТЕЛЬНАЯ)
|
|
742
|
+
|
|
743
|
+
### Checkpoint перед продолжением
|
|
744
|
+
|
|
745
|
+
**Критически важно:** Не переходи к следующему шагу до явного подтверждения пользователя.
|
|
746
|
+
|
|
747
|
+
После заполнения `product.md` и `tech.md`:
|
|
748
|
+
|
|
749
|
+
1. **Сообщи пользователю:**
|
|
750
|
+
```
|
|
751
|
+
Черновик спецификации FT-XXXX готов.
|
|
752
|
+
|
|
753
|
+
Создано:
|
|
754
|
+
- product.md — продуктовое описание фичи
|
|
755
|
+
- tech.md — техническое решение
|
|
756
|
+
- research.md — анализ библиотек (если проводился)
|
|
757
|
+
|
|
758
|
+
Пожалуйста, ознакомьтесь с документами и убедитесь:
|
|
759
|
+
✅ Продуктовое описание соответствует вашим ожиданиям
|
|
760
|
+
✅ Технические решения корректны
|
|
761
|
+
✅ Нет пропущенных сценариев или требований
|
|
762
|
+
|
|
763
|
+
Если всё верно, подтвердите, и я перейду к финализации.
|
|
764
|
+
Если нужны правки — опишите, что изменить.
|
|
765
|
+
```
|
|
766
|
+
|
|
767
|
+
2. **Жди ответа пользователя:**
|
|
768
|
+
- **Одобрение** ("всё ок", "подтверждаю", "продолжай") → переход к фазе 7.
|
|
769
|
+
- **Правки** ("добавь X", "измени Y") → внеси изменения, снова запроси подтверждение.
|
|
770
|
+
- **Отмена** ("не то", "начни заново") → останови процесс, предложи создать новую спеку.
|
|
771
|
+
|
|
772
|
+
### Почему это критично?
|
|
773
|
+
|
|
774
|
+
1. **Спека — основа для кода.** Если она неверна, весь последующий код будет неверным.
|
|
775
|
+
2. **Изменить спеку до реализации в 10 раз проще**, чем рефакторить код после.
|
|
776
|
+
3. **Пользователь — эксперт в продукте.** Только он может подтвердить, что спека решает правильную задачу.
|
|
777
|
+
|
|
778
|
+
**Запрещено:**
|
|
779
|
+
- Переходить к фазе 7 без явного подтверждения.
|
|
780
|
+
- Делать финальный коммит без review.
|
|
781
|
+
- Предполагать, что "если не ответил, значит одобрил".
|
|
782
|
+
|
|
783
|
+
## Фаза 7: Финализация
|
|
784
|
+
|
|
785
|
+
Эта фаза запускается **только после подтверждения** пользователя на шаге 6.
|
|
786
|
+
|
|
787
|
+
### Шаг 7.1: Git Commit
|
|
788
|
+
|
|
789
|
+
Если на шаге 4.2 была создана Git ветка:
|
|
790
|
+
|
|
791
|
+
1. **Добавь файлы в staging:**
|
|
792
|
+
```bash
|
|
793
|
+
git add .agentica/features/FT-XXXX*/
|
|
794
|
+
git add .agentica/templates/ # если были изменения шаблона
|
|
795
|
+
```
|
|
796
|
+
|
|
797
|
+
2. **Создай коммит:**
|
|
798
|
+
```bash
|
|
799
|
+
git commit -m "feat(spec): FT-XXXX <Название фичи>
|
|
800
|
+
|
|
801
|
+
- Created product specification
|
|
802
|
+
- Created technical specification
|
|
803
|
+
- Conducted library research (if applicable)
|
|
804
|
+
"
|
|
805
|
+
```
|
|
806
|
+
|
|
807
|
+
3. **Сообщи пользователю:**
|
|
808
|
+
```
|
|
809
|
+
Изменения закоммичены в ветку feature/FT-XXXX-<slug>
|
|
810
|
+
```
|
|
811
|
+
|
|
812
|
+
### Шаг 7.2: Финальная валидация
|
|
813
|
+
|
|
814
|
+
Автоматически проверь созданную спецификацию:
|
|
815
|
+
|
|
816
|
+
**Checklist:**
|
|
817
|
+
- [ ] Файл `product.md` существует и заполнен (не содержит "TODO", "[описать позже]").
|
|
818
|
+
- [ ] Файл `tech.md` существует и заполнен.
|
|
819
|
+
- [ ] В `tech.md` есть хотя бы одна диаграмма потока данных.
|
|
820
|
+
- [ ] В `tech.md` указаны конкретные пути к существующим файлам (проверь наличие конкретных цитат вида `src/...`).
|
|
821
|
+
- [ ] Если проводился research — файл `research.md` содержит рекомендацию.
|
|
822
|
+
- [ ] Номер `FT-XXXX` уникален (нет дубликатов в директории).
|
|
823
|
+
|
|
824
|
+
Если хотя бы одна проверка провалена — **сообщи пользователю** и попроси разрешения исправить.
|
|
825
|
+
|
|
826
|
+
### Шаг 7.3: Отчёт пользователю
|
|
827
|
+
|
|
828
|
+
Выдай финальный отчёт:
|
|
829
|
+
|
|
830
|
+
````markdown
|
|
831
|
+
## ✅ Спецификация FT-XXXX создана
|
|
832
|
+
|
|
833
|
+
**Фича:** <Название фичи>
|
|
834
|
+
**Скоуп:** [Single-project / Package: <название>]
|
|
835
|
+
**Ветка:** `feature/FT-XXXX-<slug>` (если Git)
|
|
836
|
+
|
|
837
|
+
### Созданные файлы:
|
|
838
|
+
- ✅ `product.md` — продуктовое описание (ЧТО и ЗАЧЕМ)
|
|
839
|
+
- ✅ `tech.md` — техническое решение (КАК)
|
|
840
|
+
- ✅ `research.md` — анализ библиотек (если проводился)
|
|
841
|
+
- ⏳ `tasks.md` — будет заполнен через `agentica.tasks`
|
|
842
|
+
- ⏳ `validation.md` — будет заполнен через `agentica.tasks`
|
|
843
|
+
|
|
844
|
+
### Ключевые компоненты:
|
|
845
|
+
- [Компонент 1]: [краткое описание]
|
|
846
|
+
- [Компонент 2]: [краткое описание]
|
|
847
|
+
|
|
848
|
+
### Библиотеки:
|
|
849
|
+
- [Новая библиотека X] — для [назначение]
|
|
850
|
+
- [Существующая библиотека Y] — переиспользуется
|
|
851
|
+
|
|
852
|
+
### Риски:
|
|
853
|
+
- [Риск 1] — [митигация]
|
|
854
|
+
|
|
855
|
+
---
|
|
856
|
+
|
|
857
|
+
### Следующий шаг:
|
|
858
|
+
|
|
859
|
+
Запустите декомпозицию на задачи:
|
|
860
|
+
|
|
861
|
+
```
|
|
862
|
+
/agentica.tasks --id FT-XXXX
|
|
863
|
+
```
|
|
864
|
+
|
|
865
|
+
Этот агент создаст детальный план реализации (`tasks.md`) и критерии приемки (`validation.md`).
|
|
866
|
+
|
|
867
|
+
После этого можно запустить реализацию:
|
|
868
|
+
|
|
869
|
+
```
|
|
870
|
+
/agentica.implement --id FT-XXXX
|
|
871
|
+
```
|
|
872
|
+
|
|
873
|
+
Агент `implement` будет работать по задачам из `tasks.md`, а не напрямую по спецификации.
|
|
874
|
+
````
|
|
875
|
+
|
|
876
|
+
## Дополнительные правила
|
|
877
|
+
|
|
878
|
+
### Работа с неопределённостью
|
|
879
|
+
|
|
880
|
+
Если пользователь говорит "сделай как лучше" или "на твоё усмотрение":
|
|
881
|
+
|
|
882
|
+
1. **Проанализируй контекст:** Посмотри на существующие паттерны в коде (шаг 2).
|
|
883
|
+
2. **Предложи 2-3 варианта** через интсрумент `ask_questions`:
|
|
884
|
+
```
|
|
885
|
+
Я вижу два подхода для реализации CSV импорта:
|
|
886
|
+
|
|
887
|
+
A) Синхронный парсинг (проще, но блокирует при больших файлах)
|
|
888
|
+
B) Streaming парсинг (сложнее, но масштабируется)
|
|
889
|
+
|
|
890
|
+
Какой подход предпочтителен?
|
|
891
|
+
```
|
|
892
|
+
3. **Дай рекомендацию** с обоснованием (можно пометить один вариант как `recommended`).
|
|
893
|
+
|
|
894
|
+
### Работа с конфликтами
|
|
895
|
+
|
|
896
|
+
Если новая фича конфликтует с существующим кодом:
|
|
897
|
+
|
|
898
|
+
1. **Задокументируй конфликт** в разделе "Интеграция" → "Модули, которые будут изменены" → "Риски".
|
|
899
|
+
2. **Предложи план разрешения:**
|
|
900
|
+
- Изменить существующий код (с указанием, что именно и как).
|
|
901
|
+
- Создать адаптер/обёртку для изоляции.
|
|
902
|
+
- Вынести общую логику в отдельный модуль.
|
|
903
|
+
3. **Спроси пользователя** через интсрумент `ask_questions`, какой подход применить.
|
|
904
|
+
|
|
905
|
+
### Работа с большими фичами
|
|
906
|
+
|
|
907
|
+
Если фича слишком большая (> 5 компонентов, > 3 модулей):
|
|
908
|
+
|
|
909
|
+
1. **Спроси пользователя** через интсрумент `ask_questions`:
|
|
910
|
+
```
|
|
911
|
+
Фича получается большой. Рекомендую разделить на несколько частей:
|
|
912
|
+
|
|
913
|
+
FT-XXXX (Phase 1): Базовый импорт CSV
|
|
914
|
+
FT-YYYY (Phase 2): Пакетная обработка
|
|
915
|
+
FT-ZZZZ (Phase 3): Progress tracking
|
|
916
|
+
|
|
917
|
+
Создать все три спеки сразу или сфокусироваться на Phase 1?
|
|
918
|
+
```
|
|
919
|
+
|
|
920
|
+
2. Если пользователь соглашается на разделение — создай только первую фичу, в конце отчёта предложи создать следующую.
|
|
921
|
+
|
|
922
|
+
### Терминология и стиль
|
|
923
|
+
|
|
924
|
+
1. **Используй термины из `tech.md`** проекта (если они есть).
|
|
925
|
+
2. **Пиши кратко, но точно:** Одно предложение лучше абзаца воды.
|
|
926
|
+
3. **Примеры кода:** TypeScript/Python-подобный (или на языке проекта) псевдокод, близкий к реальности.
|
|
927
|
+
|
|
928
|
+
### Обработка ошибок и откатов
|
|
929
|
+
|
|
930
|
+
Если на любом этапе что-то пошло не так:
|
|
931
|
+
|
|
932
|
+
1. **Сообщи пользователю** чётко и конкретно: "Не удалось [действие], причина: [объяснение]".
|
|
933
|
+
2. **Предложи варианты:**
|
|
934
|
+
- Повторить попытку (если временная ошибка).
|
|
935
|
+
- Изменить подход (если концептуальная проблема).
|
|
936
|
+
- Откатить изменения (если что-то сломалось).
|
|
937
|
+
3. **Не оставляй проект в полусделанном состоянии:** Если нужно остановиться — удали неполную спеку, откати Git ветку.
|
|
938
|
+
|
|
939
|
+
## Итоговый Checklist
|
|
940
|
+
|
|
941
|
+
Перед завершением работы убедись:
|
|
942
|
+
- [ ] Определён корректный скоуп (root или конкретный пакет).
|
|
943
|
+
- [ ] Собран полный контекст через интервью (6 измерений).
|
|
944
|
+
- [ ] Просканирован существующий код, факты сохранены в memory.
|
|
945
|
+
- [ ] Проведён research библиотек (если требовался).
|
|
946
|
+
- [ ] Создана Git ветка (если есть Git).
|
|
947
|
+
- [ ] Скопирован и заполнен шаблон (`product.md`, `tech.md`).
|
|
948
|
+
- [ ] Пользователь **подтвердил** спецификацию (фаза 6).
|
|
949
|
+
- [ ] Изменения закоммичены в Git (если есть Git).
|
|
950
|
+
- [ ] Написан финальный отчёт с предложением запустить `agentica.tasks`.
|
|
951
|
+
|
|
952
|
+
Только после выполнения всех пунктов можно считать задачу завершённой.
|
|
953
|
+
|