viberadar 0.2.0 → 0.2.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.
|
@@ -9,6 +9,7 @@ export interface ProjectSnapshot {
|
|
|
9
9
|
testFiles: string[];
|
|
10
10
|
totalFiles: number;
|
|
11
11
|
techStack: string[];
|
|
12
|
+
existingConfig: string | null;
|
|
12
13
|
}
|
|
13
14
|
export declare function buildSnapshot(projectRoot: string): ProjectSnapshot;
|
|
14
15
|
export declare function buildPrompt(snap: ProjectSnapshot): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/init/prompt-builder.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/init/prompt-builder.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAyHD,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAqClE;AAwCD,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAyIzD"}
|
|
@@ -37,13 +37,27 @@ exports.buildSnapshot = buildSnapshot;
|
|
|
37
37
|
exports.buildPrompt = buildPrompt;
|
|
38
38
|
const fs = __importStar(require("fs"));
|
|
39
39
|
const path = __importStar(require("path"));
|
|
40
|
-
// ───
|
|
41
|
-
const
|
|
40
|
+
// ─── Директории которые не несут бизнес-смысла для агента ─────────────────────
|
|
41
|
+
const IGNORE_BUILD = new Set([
|
|
42
42
|
'node_modules', 'dist', 'build', '.git', '.next', 'coverage',
|
|
43
|
-
'.nyc_output', '__pycache__', '.venv', '.turbo', '.cache',
|
|
43
|
+
'.nyc_output', '__pycache__', '.venv', '.turbo', '.cache', '.idea',
|
|
44
|
+
'.vscode', 'playwright-report', 'test-results',
|
|
45
|
+
]);
|
|
46
|
+
// Папки с документацией/артефактами — показываем в дереве но не углубляемся
|
|
47
|
+
const IGNORE_DEEP = new Set([
|
|
48
|
+
'migrations', 'Releases', 'Backlog', 'attached_assets', 'temp',
|
|
49
|
+
'grant-start-AI', 'initdb', 'pdfFonts', 'fonts', 'public',
|
|
50
|
+
'Confluence', 'test-cases', 'user-guide', 'docs',
|
|
51
|
+
]);
|
|
52
|
+
// Шаблонные имена пакетов — заменяем на имя папки
|
|
53
|
+
const TEMPLATE_NAMES = new Set([
|
|
54
|
+
'rest-express', 'my-app', 'app', 'project', 'starter', 'template',
|
|
55
|
+
'nextjs-app', 'vite-app', 'react-app', 'express-app', 'node-app',
|
|
56
|
+
'backend', 'frontend', 'fullstack', 'monorepo', 'webapp',
|
|
44
57
|
]);
|
|
58
|
+
// ─── Сканирование структуры проекта ───────────────────────────────────────────
|
|
45
59
|
function buildDirTree(dir, prefix = '', depth = 0) {
|
|
46
|
-
if (depth >
|
|
60
|
+
if (depth > 3)
|
|
47
61
|
return '';
|
|
48
62
|
let result = '';
|
|
49
63
|
let entries;
|
|
@@ -54,7 +68,7 @@ function buildDirTree(dir, prefix = '', depth = 0) {
|
|
|
54
68
|
return '';
|
|
55
69
|
}
|
|
56
70
|
const filtered = entries
|
|
57
|
-
.filter(e => !
|
|
71
|
+
.filter(e => !IGNORE_BUILD.has(e.name) && !e.name.startsWith('.'))
|
|
58
72
|
.sort((a, b) => {
|
|
59
73
|
if (a.isDirectory() && !b.isDirectory())
|
|
60
74
|
return -1;
|
|
@@ -62,13 +76,13 @@ function buildDirTree(dir, prefix = '', depth = 0) {
|
|
|
62
76
|
return 1;
|
|
63
77
|
return a.name.localeCompare(b.name);
|
|
64
78
|
})
|
|
65
|
-
.slice(0,
|
|
79
|
+
.slice(0, 25);
|
|
66
80
|
filtered.forEach((entry, i) => {
|
|
67
81
|
const isLast = i === filtered.length - 1;
|
|
68
82
|
const connector = isLast ? '└── ' : '├── ';
|
|
69
83
|
const childPrefix = isLast ? ' ' : '│ ';
|
|
70
84
|
result += `${prefix}${connector}${entry.name}${entry.isDirectory() ? '/' : ''}\n`;
|
|
71
|
-
if (entry.isDirectory()) {
|
|
85
|
+
if (entry.isDirectory() && !IGNORE_DEEP.has(entry.name)) {
|
|
72
86
|
result += buildDirTree(path.join(dir, entry.name), prefix + childPrefix, depth + 1);
|
|
73
87
|
}
|
|
74
88
|
});
|
|
@@ -87,7 +101,7 @@ function collectFiles(dir, pattern, limit = 50) {
|
|
|
87
101
|
return;
|
|
88
102
|
}
|
|
89
103
|
for (const e of entries) {
|
|
90
|
-
if (
|
|
104
|
+
if (IGNORE_BUILD.has(e.name) || e.name.startsWith('.'))
|
|
91
105
|
continue;
|
|
92
106
|
const full = path.join(d, e.name);
|
|
93
107
|
if (e.isDirectory())
|
|
@@ -100,10 +114,7 @@ function collectFiles(dir, pattern, limit = 50) {
|
|
|
100
114
|
return results;
|
|
101
115
|
}
|
|
102
116
|
function detectTechStack(pkg) {
|
|
103
|
-
const deps = {
|
|
104
|
-
...pkg.dependencies,
|
|
105
|
-
...pkg.devDependencies,
|
|
106
|
-
};
|
|
117
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
107
118
|
const stack = [];
|
|
108
119
|
const checks = [
|
|
109
120
|
['react', 'React'],
|
|
@@ -130,6 +141,24 @@ function detectTechStack(pkg) {
|
|
|
130
141
|
}
|
|
131
142
|
return stack;
|
|
132
143
|
}
|
|
144
|
+
function resolveProjectName(packageJson, projectRoot) {
|
|
145
|
+
const pkgName = packageJson.name || '';
|
|
146
|
+
// Если имя выглядит как шаблонное — берём имя папки
|
|
147
|
+
if (!pkgName || TEMPLATE_NAMES.has(pkgName.toLowerCase())) {
|
|
148
|
+
return path.basename(projectRoot);
|
|
149
|
+
}
|
|
150
|
+
return pkgName;
|
|
151
|
+
}
|
|
152
|
+
function filterScripts(scripts) {
|
|
153
|
+
// Показываем только ключевые скрипты, не засоряем промпт CI-командами
|
|
154
|
+
const KEY_SCRIPTS = ['dev', 'start', 'build', 'test', 'test:e2e', 'lint'];
|
|
155
|
+
const result = {};
|
|
156
|
+
for (const key of KEY_SCRIPTS) {
|
|
157
|
+
if (scripts[key])
|
|
158
|
+
result[key] = scripts[key];
|
|
159
|
+
}
|
|
160
|
+
return result;
|
|
161
|
+
}
|
|
133
162
|
function buildSnapshot(projectRoot) {
|
|
134
163
|
const pkgPath = path.join(projectRoot, 'package.json');
|
|
135
164
|
let packageJson = {};
|
|
@@ -145,8 +174,15 @@ function buildSnapshot(projectRoot) {
|
|
|
145
174
|
const testFiles = collectFiles(projectRoot, /\.(test|spec)\.(tsx?|jsx?)$/)
|
|
146
175
|
.map(f => path.relative(projectRoot, f));
|
|
147
176
|
const allFiles = collectFiles(projectRoot, /\.(tsx?|jsx?)$/, 500);
|
|
177
|
+
// Читаем существующий конфиг если есть
|
|
178
|
+
let existingConfig = null;
|
|
179
|
+
const configPath = path.join(projectRoot, 'viberadar.config.json');
|
|
180
|
+
try {
|
|
181
|
+
existingConfig = fs.readFileSync(configPath, 'utf-8');
|
|
182
|
+
}
|
|
183
|
+
catch { }
|
|
148
184
|
return {
|
|
149
|
-
name: packageJson
|
|
185
|
+
name: resolveProjectName(packageJson, projectRoot),
|
|
150
186
|
projectRoot,
|
|
151
187
|
packageJson,
|
|
152
188
|
dirTree: buildDirTree(projectRoot),
|
|
@@ -156,104 +192,176 @@ function buildSnapshot(projectRoot) {
|
|
|
156
192
|
testFiles: testFiles.slice(0, 30),
|
|
157
193
|
totalFiles: allFiles.length,
|
|
158
194
|
techStack: detectTechStack(packageJson),
|
|
195
|
+
existingConfig,
|
|
159
196
|
};
|
|
160
197
|
}
|
|
161
198
|
// ─── Шаблон промпта ────────────────────────────────────────────────────────────
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
'
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
color: '#58a6ff',
|
|
171
|
-
},
|
|
199
|
+
const CONFIG_EXAMPLE = JSON.stringify({
|
|
200
|
+
version: '1',
|
|
201
|
+
features: {
|
|
202
|
+
auth: {
|
|
203
|
+
label: 'Авторизация',
|
|
204
|
+
description: 'Вход, регистрация, восстановление пароля, OAuth',
|
|
205
|
+
include: ['**/auth*', '**/login*', '**/register*', '**/password*'],
|
|
206
|
+
color: '#f85149',
|
|
172
207
|
},
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
208
|
+
chat: {
|
|
209
|
+
label: 'Чаты с AI',
|
|
210
|
+
description: 'Диалог с AI-ассистентом, история сообщений, стриминг',
|
|
211
|
+
include: ['**/chat*', '**/Chat*', '**/message*'],
|
|
212
|
+
color: '#58a6ff',
|
|
213
|
+
},
|
|
214
|
+
skills: {
|
|
215
|
+
label: 'Навыки',
|
|
216
|
+
description: 'Создание и настройка AI-агентов с кастомными инструкциями',
|
|
217
|
+
include: ['**/skill*', '**/Skill*'],
|
|
218
|
+
color: '#d2a8ff',
|
|
219
|
+
},
|
|
220
|
+
'knowledge-base': {
|
|
221
|
+
label: 'Базы знаний',
|
|
222
|
+
description: 'Загрузка документов, индексация, RAG-поиск',
|
|
223
|
+
include: ['**/knowledge*', '**/Knowledge*', '**/rag*', '**/indexing*'],
|
|
224
|
+
color: '#3fb950',
|
|
225
|
+
},
|
|
226
|
+
admin: {
|
|
227
|
+
label: 'Админ-панель',
|
|
228
|
+
description: 'Управление пользователями, тарифами, провайдерами',
|
|
229
|
+
include: ['**/admin*', '**/Admin*'],
|
|
230
|
+
color: '#e3b341',
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
}, null, 2);
|
|
234
|
+
function buildPrompt(snap) {
|
|
235
|
+
const scripts = snap.packageJson.scripts
|
|
236
|
+
? filterScripts(snap.packageJson.scripts)
|
|
237
|
+
: {};
|
|
238
|
+
const isUpdate = snap.existingConfig !== null;
|
|
239
|
+
const projectData = `
|
|
184
240
|
## Данные о проекте
|
|
185
241
|
|
|
186
242
|
**Название:** ${snap.name}
|
|
187
243
|
**Стек:** ${snap.techStack.length > 0 ? snap.techStack.join(', ') : 'не определён'}
|
|
188
244
|
**Всего исходных файлов:** ${snap.totalFiles}
|
|
189
245
|
|
|
190
|
-
### Структура
|
|
246
|
+
### Структура папок (упрощённая, без node_modules/dist/docs):
|
|
191
247
|
\`\`\`
|
|
192
248
|
${snap.name}/
|
|
193
249
|
${snap.dirTree}\`\`\`
|
|
194
250
|
|
|
195
|
-
${snap.pageFiles.length > 0 ? `###
|
|
251
|
+
${snap.pageFiles.length > 0 ? `### Страницы / UI-компоненты верхнего уровня:
|
|
196
252
|
${snap.pageFiles.map(f => `- ${f}`).join('\n')}
|
|
197
253
|
` : ''}
|
|
198
|
-
${snap.routeFiles.length > 0 ? `###
|
|
254
|
+
${snap.routeFiles.length > 0 ? `### Серверные роуты / API:
|
|
199
255
|
${snap.routeFiles.map(f => `- ${f}`).join('\n')}
|
|
200
256
|
` : ''}
|
|
201
|
-
${snap.testFiles.length > 0 ? `###
|
|
257
|
+
${snap.testFiles.length > 0 ? `### Тест-файлы (первые 30):
|
|
202
258
|
${snap.testFiles.map(f => `- ${f}`).join('\n')}
|
|
203
259
|
` : ''}
|
|
204
|
-
${
|
|
205
|
-
${Object.entries(
|
|
206
|
-
` : ''}
|
|
260
|
+
${Object.keys(scripts).length > 0 ? `### Ключевые скрипты:
|
|
261
|
+
${Object.entries(scripts).map(([k, v]) => `- \`${k}\`: ${v}`).join('\n')}
|
|
262
|
+
` : ''}`;
|
|
263
|
+
const configRules = `**Правила конфига:**
|
|
264
|
+
- Оптимально **10–20 фич** — не дроби слишком мелко, не объединяй несвязанное
|
|
265
|
+
- Каждая фича — понятное бизнес-название на русском или английском
|
|
266
|
+
- Паттерны в \`include\` — glob относительно корня проекта, учитывай и клиент и сервер
|
|
267
|
+
- Один файл может попадать в несколько фич — это нормально
|
|
268
|
+
- Не создавай фичу "other" или "misc"
|
|
269
|
+
|
|
270
|
+
**Цвета** (используй разные для каждой фичи):
|
|
271
|
+
\`#58a6ff\` синий · \`#3fb950\` зелёный · \`#d2a8ff\` фиолетовый · \`#ffa657\` оранжевый
|
|
272
|
+
\`#f85149\` красный · \`#e3b341\` жёлтый · \`#39d353\` лайм · \`#79c0ff\` голубой · \`#ff7b72\` коралловый · \`#a371f7\` лаванда · \`#ff7b72\` коралловый`;
|
|
273
|
+
if (isUpdate) {
|
|
274
|
+
// ── Режим обновления ──────────────────────────────────────────────────────
|
|
275
|
+
return `# VibeRadar — Обновление карты фич проекта
|
|
276
|
+
|
|
277
|
+
## Контекст
|
|
278
|
+
|
|
279
|
+
VibeRadar — инструмент для визуализации архитектуры проекта и тест-покрытия по фичам.
|
|
280
|
+
Конфиг для проекта **${snap.name}** уже существует. Твоя задача — **обновить** его
|
|
281
|
+
согласно пожеланиям пользователя.
|
|
282
|
+
${projectData}
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## Текущий конфиг (viberadar.config.json):
|
|
287
|
+
|
|
288
|
+
\`\`\`json
|
|
289
|
+
${snap.existingConfig}
|
|
290
|
+
\`\`\`
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## Твоя задача
|
|
295
|
+
|
|
296
|
+
Пользователь хочет изменить конфиг. Выслушай его пожелания и внеси изменения.
|
|
297
|
+
|
|
298
|
+
**Что можно делать:**
|
|
299
|
+
- Разбить одну фичу на несколько (например, "admin" → "admin-users" + "admin-workspaces")
|
|
300
|
+
- Объединить несколько фич в одну
|
|
301
|
+
- Переименовать фичу
|
|
302
|
+
- Добавить новую фичу
|
|
303
|
+
- Изменить паттерны \`include\` чтобы точнее покрывать файлы
|
|
304
|
+
- Изменить цвет фичи
|
|
305
|
+
|
|
306
|
+
${configRules}
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## Порядок ответа
|
|
311
|
+
|
|
312
|
+
1. **Уточни** что именно пользователь хочет изменить (если непонятно)
|
|
313
|
+
2. **Внеси изменения** в конфиг — покажи только изменённые фичи или весь файл целиком
|
|
314
|
+
3. **Сохрани** обновлённый \`viberadar.config.json\` в корне проекта
|
|
315
|
+
|
|
316
|
+
Спроси: "Что хочешь изменить в текущем конфиге?"
|
|
317
|
+
`;
|
|
318
|
+
}
|
|
319
|
+
// ── Режим создания ────────────────────────────────────────────────────────
|
|
320
|
+
return `# VibeRadar — Настройка карты фич проекта
|
|
321
|
+
|
|
322
|
+
## Контекст
|
|
323
|
+
|
|
324
|
+
VibeRadar — инструмент для визуализации архитектуры проекта и тест-покрытия по фичам.
|
|
325
|
+
Тебе нужно проанализировать проект **${snap.name}** и создать файл \`viberadar.config.json\`
|
|
326
|
+
с описанием бизнес-фич и паттернами файлов, которые к ним относятся.
|
|
327
|
+
${projectData}
|
|
207
328
|
|
|
208
329
|
---
|
|
209
330
|
|
|
210
331
|
## Твоя задача
|
|
211
332
|
|
|
212
333
|
### Шаг 1 — Анализ
|
|
213
|
-
Изучи структуру проекта. Определи **бизнес-фичи** — не технические
|
|
214
|
-
а именно то, что видит пользователь и что можно сломать отдельно.
|
|
334
|
+
Изучи структуру проекта. Определи **бизнес-фичи** — не технические слои.
|
|
215
335
|
|
|
216
|
-
|
|
217
|
-
|
|
336
|
+
✅ Хорошие фичи (что видит пользователь, что можно сломать изолированно):
|
|
337
|
+
"Авторизация", "Чаты с AI", "Навыки", "Базы знаний", "Файлы", "Биллинг", "Интеграции", "Админ-панель"
|
|
218
338
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
Не угадывай. Лучше задать 3–5 уточняющих вопросов, чем сделать неточный конфиг.
|
|
339
|
+
❌ Плохие фичи (технические абстракции):
|
|
340
|
+
"Components", "Utils", "Helpers", "Common", "Shared", "Services"
|
|
222
341
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
- "Что делает модуль \`no-code\`?"
|
|
342
|
+
### Шаг 2 — Уточняющие вопросы
|
|
343
|
+
**ОБЯЗАТЕЛЬНО** задай вопросы по неочевидным модулям прежде чем генерировать конфиг.
|
|
344
|
+
Не угадывай назначение — лучше 3–5 вопросов, чем неточный результат.
|
|
227
345
|
|
|
228
346
|
### Шаг 3 — Генерация конфига
|
|
229
|
-
После
|
|
347
|
+
После ответов создай \`viberadar.config.json\` в корне проекта.
|
|
230
348
|
|
|
231
|
-
|
|
232
|
-
- Не более 15 фич (оптимально 5–10)
|
|
233
|
-
- Каждая фича — понятное бизнес-название на русском или английском
|
|
234
|
-
- Паттерны в \`include\` — glob-паттерны относительно корня проекта
|
|
235
|
-
- Один файл может попадать в несколько фич (это нормально)
|
|
236
|
-
- Фича "other" не нужна — только значимые фичи
|
|
349
|
+
${configRules}
|
|
237
350
|
|
|
238
|
-
|
|
351
|
+
**Пример готового конфига:**
|
|
239
352
|
\`\`\`json
|
|
240
|
-
${
|
|
353
|
+
${CONFIG_EXAMPLE}
|
|
241
354
|
\`\`\`
|
|
242
355
|
|
|
243
|
-
**Доступные цвета (используй разные для каждой фичи):**
|
|
244
|
-
\`#58a6ff\` (синий), \`#3fb950\` (зелёный), \`#d2a8ff\` (фиолетовый),
|
|
245
|
-
\`#ffa657\` (оранжевый), \`#f85149\` (красный), \`#e3b341\` (жёлтый),
|
|
246
|
-
\`#39d353\` (лайм), \`#79c0ff\` (голубой), \`#ff7b72\` (коралловый)
|
|
247
|
-
|
|
248
356
|
---
|
|
249
357
|
|
|
250
|
-
##
|
|
358
|
+
## Порядок ответа
|
|
251
359
|
|
|
252
|
-
1.
|
|
253
|
-
2.
|
|
254
|
-
3.
|
|
360
|
+
1. **Сначала** — уточняющие вопросы
|
|
361
|
+
2. **После ответов** — создай \`viberadar.config.json\`
|
|
362
|
+
3. **Кратко** — объясни логику разбивки
|
|
255
363
|
|
|
256
|
-
Начинай с
|
|
364
|
+
Начинай с вопросов.
|
|
257
365
|
`;
|
|
258
366
|
}
|
|
259
367
|
//# sourceMappingURL=prompt-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../src/init/prompt-builder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../src/init/prompt-builder.ts"],"names":[],"mappings":"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"}
|