viberadar 0.1.2 → 0.2.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.
- package/dist/cli.js +32 -1
- package/dist/cli.js.map +1 -1
- package/dist/init/index.d.ts +2 -0
- package/dist/init/index.d.ts.map +1 -0
- package/dist/init/index.js +113 -0
- package/dist/init/index.js.map +1 -0
- package/dist/init/prompt-builder.d.ts +15 -0
- package/dist/init/prompt-builder.d.ts.map +1 -0
- package/dist/init/prompt-builder.js +259 -0
- package/dist/init/prompt-builder.js.map +1 -0
- package/package.json +4 -3
- package/viberadar.js +2 -0
package/dist/cli.js
CHANGED
|
@@ -36,9 +36,11 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
36
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
37
|
const scanner_1 = require("./scanner");
|
|
38
38
|
const server_1 = require("./server");
|
|
39
|
+
const init_1 = require("./init");
|
|
39
40
|
const PROJECT_ROOT = process.cwd();
|
|
40
41
|
const PORT = 4242;
|
|
41
|
-
|
|
42
|
+
const command = process.argv[2];
|
|
43
|
+
async function runDashboard() {
|
|
42
44
|
console.log('🔭 VibeRadar starting...');
|
|
43
45
|
console.log(` Project: ${PROJECT_ROOT}`);
|
|
44
46
|
console.log(' Scanning modules...');
|
|
@@ -50,6 +52,35 @@ async function main() {
|
|
|
50
52
|
const { default: open } = await Promise.resolve().then(() => __importStar(require('open')));
|
|
51
53
|
await open(`http://localhost:${PORT}`);
|
|
52
54
|
}
|
|
55
|
+
function printHelp() {
|
|
56
|
+
console.log(`
|
|
57
|
+
🔭 VibeRadar
|
|
58
|
+
|
|
59
|
+
Команды:
|
|
60
|
+
npx viberadar Запустить дашборд на http://localhost:4242
|
|
61
|
+
npx viberadar init Сгенерировать промпт для AI-агента (настройка фич)
|
|
62
|
+
npx viberadar help Показать эту справку
|
|
63
|
+
`);
|
|
64
|
+
}
|
|
65
|
+
async function main() {
|
|
66
|
+
switch (command) {
|
|
67
|
+
case 'init':
|
|
68
|
+
await (0, init_1.runInit)(PROJECT_ROOT);
|
|
69
|
+
break;
|
|
70
|
+
case 'help':
|
|
71
|
+
case '--help':
|
|
72
|
+
case '-h':
|
|
73
|
+
printHelp();
|
|
74
|
+
break;
|
|
75
|
+
case undefined:
|
|
76
|
+
await runDashboard();
|
|
77
|
+
break;
|
|
78
|
+
default:
|
|
79
|
+
console.error(`❌ Неизвестная команда: ${command}`);
|
|
80
|
+
printHelp();
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
53
84
|
main().catch((err) => {
|
|
54
85
|
console.error('❌ VibeRadar error:', err.message);
|
|
55
86
|
process.exit(1);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,uCAAwC;AACxC,qCAAuC;AACvC,iCAAiC;AAEjC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AACnC,MAAM,IAAI,GAAG,IAAI,CAAC;AAClB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,KAAK,UAAU,YAAY;IACzB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,eAAe,YAAY,EAAE,CAAC,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,IAAA,qBAAW,EAAC,YAAY,CAAC,CAAC;IAE7C,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;IAEvD,MAAM,IAAA,oBAAW,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;IAEnE,OAAO,CAAC,GAAG,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAEzC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,wDAAa,MAAM,GAAC,CAAC;IAC/C,MAAM,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;CAOb,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,MAAM,IAAA,cAAO,EAAC,YAAY,CAAC,CAAC;YAC5B,MAAM;QACR,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,SAAS,EAAE,CAAC;YACZ,MAAM;QACR,KAAK,SAAS;YACZ,MAAM,YAAY,EAAE,CAAC;YACrB,MAAM;QACR;YACE,OAAO,CAAC,KAAK,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC;YACnD,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/init/index.ts"],"names":[],"mappings":"AAuCA,wBAAsB,OAAO,CAAC,WAAW,EAAE,MAAM,iBA4ChD"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.runInit = runInit;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const child_process = __importStar(require("child_process"));
|
|
40
|
+
const prompt_builder_1 = require("./prompt-builder");
|
|
41
|
+
const PROMPT_FILE = 'VIBERADAR_PROMPT.md';
|
|
42
|
+
function copyToClipboard(text) {
|
|
43
|
+
try {
|
|
44
|
+
const platform = process.platform;
|
|
45
|
+
if (platform === 'win32') {
|
|
46
|
+
child_process.execSync('clip', { input: text });
|
|
47
|
+
}
|
|
48
|
+
else if (platform === 'darwin') {
|
|
49
|
+
child_process.execSync('pbcopy', { input: text });
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Linux — пробуем xclip, потом xsel
|
|
53
|
+
try {
|
|
54
|
+
child_process.execSync('xclip -selection clipboard', { input: text });
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
child_process.execSync('xsel --clipboard --input', { input: text });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function printBox(lines) {
|
|
67
|
+
const width = Math.max(...lines.map(l => l.length)) + 4;
|
|
68
|
+
const border = '─'.repeat(width);
|
|
69
|
+
console.log(`┌${border}┐`);
|
|
70
|
+
for (const line of lines) {
|
|
71
|
+
const padding = ' '.repeat(width - line.length - 2);
|
|
72
|
+
console.log(`│ ${line}${padding}│`);
|
|
73
|
+
}
|
|
74
|
+
console.log(`└${border}┘`);
|
|
75
|
+
}
|
|
76
|
+
async function runInit(projectRoot) {
|
|
77
|
+
console.log('\n🔭 VibeRadar Init\n');
|
|
78
|
+
console.log(' Сканирую структуру проекта...');
|
|
79
|
+
const snap = (0, prompt_builder_1.buildSnapshot)(projectRoot);
|
|
80
|
+
console.log(` Проект: ${snap.name}`);
|
|
81
|
+
if (snap.techStack.length > 0) {
|
|
82
|
+
console.log(` Стек: ${snap.techStack.join(', ')}`);
|
|
83
|
+
}
|
|
84
|
+
console.log(` Файлов: ${snap.totalFiles}`);
|
|
85
|
+
console.log(` Страниц: ${snap.pageFiles.length}`);
|
|
86
|
+
console.log(` Роутов: ${snap.routeFiles.length}`);
|
|
87
|
+
console.log(` Тестов: ${snap.testFiles.length}`);
|
|
88
|
+
console.log('\n Генерирую промпт для AI-агента...');
|
|
89
|
+
const prompt = (0, prompt_builder_1.buildPrompt)(snap);
|
|
90
|
+
// Сохраняем файл
|
|
91
|
+
const promptPath = path.join(projectRoot, PROMPT_FILE);
|
|
92
|
+
fs.writeFileSync(promptPath, prompt, 'utf-8');
|
|
93
|
+
console.log(` Сохранён: ${PROMPT_FILE}`);
|
|
94
|
+
// Копируем в буфер
|
|
95
|
+
const copied = copyToClipboard(prompt);
|
|
96
|
+
console.log('');
|
|
97
|
+
printBox([
|
|
98
|
+
copied
|
|
99
|
+
? '✅ Промпт скопирован в буфер обмена!'
|
|
100
|
+
: `📄 Промпт сохранён в ${PROMPT_FILE}`,
|
|
101
|
+
'',
|
|
102
|
+
'Дальше:',
|
|
103
|
+
`1. Вставь промпт в Cursor / Claude / Windsurf (Ctrl+V)`,
|
|
104
|
+
'2. Ответь на уточняющие вопросы агента',
|
|
105
|
+
'3. Агент создаст viberadar.config.json',
|
|
106
|
+
'4. Запусти: npx viberadar',
|
|
107
|
+
]);
|
|
108
|
+
if (!copied) {
|
|
109
|
+
console.log(`\n Не удалось скопировать в буфер. Открой файл:\n ${promptPath}\n`);
|
|
110
|
+
}
|
|
111
|
+
console.log('');
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/init/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,0BA4CC;AAnFD,uCAAyB;AACzB,2CAA6B;AAC7B,6DAA+C;AAC/C,qDAA8D;AAE9D,MAAM,WAAW,GAAG,qBAAqB,CAAC;AAE1C,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,IAAI,CAAC;gBACH,aAAa,CAAC,QAAQ,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACxE,CAAC;YAAC,MAAM,CAAC;gBACP,aAAa,CAAC,QAAQ,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAe;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;AAC7B,CAAC;AAEM,KAAK,UAAU,OAAO,CAAC,WAAmB;IAC/C,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAEhD,MAAM,IAAI,GAAG,IAAA,8BAAa,EAAC,WAAW,CAAC,CAAC;IAExC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAEnD,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,IAAA,4BAAW,EAAC,IAAI,CAAC,CAAC;IAEjC,iBAAiB;IACjB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACvD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,EAAE,CAAC,CAAC;IAE3C,mBAAmB;IACnB,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,QAAQ,CAAC;QACP,MAAM;YACJ,CAAC,CAAC,qCAAqC;YACvC,CAAC,CAAC,wBAAwB,WAAW,EAAE;QACzC,EAAE;QACF,SAAS;QACT,wDAAwD;QACxD,wCAAwC;QACxC,wCAAwC;QACxC,2BAA2B;KAC5B,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,yDAAyD,UAAU,IAAI,CAAC,CAAC;IACvF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface ProjectSnapshot {
|
|
2
|
+
name: string;
|
|
3
|
+
projectRoot: string;
|
|
4
|
+
packageJson: Record<string, any>;
|
|
5
|
+
dirTree: string;
|
|
6
|
+
topFiles: string[];
|
|
7
|
+
routeFiles: string[];
|
|
8
|
+
pageFiles: string[];
|
|
9
|
+
testFiles: string[];
|
|
10
|
+
totalFiles: number;
|
|
11
|
+
techStack: string[];
|
|
12
|
+
}
|
|
13
|
+
export declare function buildSnapshot(projectRoot: string): ProjectSnapshot;
|
|
14
|
+
export declare function buildPrompt(snap: ProjectSnapshot): string;
|
|
15
|
+
//# sourceMappingURL=prompt-builder.d.ts.map
|
|
@@ -0,0 +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;CACrB;AAwFD,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CA6BlE;AAID,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAiGzD"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.buildSnapshot = buildSnapshot;
|
|
37
|
+
exports.buildPrompt = buildPrompt;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
// ─── Сканирование структуры проекта ───────────────────────────────────────────
|
|
41
|
+
const IGNORE = new Set([
|
|
42
|
+
'node_modules', 'dist', 'build', '.git', '.next', 'coverage',
|
|
43
|
+
'.nyc_output', '__pycache__', '.venv', '.turbo', '.cache',
|
|
44
|
+
]);
|
|
45
|
+
function buildDirTree(dir, prefix = '', depth = 0) {
|
|
46
|
+
if (depth > 4)
|
|
47
|
+
return '';
|
|
48
|
+
let result = '';
|
|
49
|
+
let entries;
|
|
50
|
+
try {
|
|
51
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return '';
|
|
55
|
+
}
|
|
56
|
+
const filtered = entries
|
|
57
|
+
.filter(e => !IGNORE.has(e.name) && !e.name.startsWith('.'))
|
|
58
|
+
.sort((a, b) => {
|
|
59
|
+
if (a.isDirectory() && !b.isDirectory())
|
|
60
|
+
return -1;
|
|
61
|
+
if (!a.isDirectory() && b.isDirectory())
|
|
62
|
+
return 1;
|
|
63
|
+
return a.name.localeCompare(b.name);
|
|
64
|
+
})
|
|
65
|
+
.slice(0, 30); // не больше 30 элементов на уровень
|
|
66
|
+
filtered.forEach((entry, i) => {
|
|
67
|
+
const isLast = i === filtered.length - 1;
|
|
68
|
+
const connector = isLast ? '└── ' : '├── ';
|
|
69
|
+
const childPrefix = isLast ? ' ' : '│ ';
|
|
70
|
+
result += `${prefix}${connector}${entry.name}${entry.isDirectory() ? '/' : ''}\n`;
|
|
71
|
+
if (entry.isDirectory()) {
|
|
72
|
+
result += buildDirTree(path.join(dir, entry.name), prefix + childPrefix, depth + 1);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
function collectFiles(dir, pattern, limit = 50) {
|
|
78
|
+
const results = [];
|
|
79
|
+
function walk(d) {
|
|
80
|
+
if (results.length >= limit)
|
|
81
|
+
return;
|
|
82
|
+
let entries;
|
|
83
|
+
try {
|
|
84
|
+
entries = fs.readdirSync(d, { withFileTypes: true });
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
for (const e of entries) {
|
|
90
|
+
if (IGNORE.has(e.name) || e.name.startsWith('.'))
|
|
91
|
+
continue;
|
|
92
|
+
const full = path.join(d, e.name);
|
|
93
|
+
if (e.isDirectory())
|
|
94
|
+
walk(full);
|
|
95
|
+
else if (pattern.test(e.name))
|
|
96
|
+
results.push(full);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
walk(dir);
|
|
100
|
+
return results;
|
|
101
|
+
}
|
|
102
|
+
function detectTechStack(pkg) {
|
|
103
|
+
const deps = {
|
|
104
|
+
...pkg.dependencies,
|
|
105
|
+
...pkg.devDependencies,
|
|
106
|
+
};
|
|
107
|
+
const stack = [];
|
|
108
|
+
const checks = [
|
|
109
|
+
['react', 'React'],
|
|
110
|
+
['next', 'Next.js'],
|
|
111
|
+
['vue', 'Vue'],
|
|
112
|
+
['svelte', 'Svelte'],
|
|
113
|
+
['express', 'Express'],
|
|
114
|
+
['fastify', 'Fastify'],
|
|
115
|
+
['nestjs/core', 'NestJS'],
|
|
116
|
+
['typescript', 'TypeScript'],
|
|
117
|
+
['vitest', 'Vitest'],
|
|
118
|
+
['jest', 'Jest'],
|
|
119
|
+
['playwright', 'Playwright'],
|
|
120
|
+
['prisma', 'Prisma'],
|
|
121
|
+
['drizzle-orm', 'Drizzle ORM'],
|
|
122
|
+
['mongoose', 'Mongoose'],
|
|
123
|
+
['tailwindcss', 'Tailwind CSS'],
|
|
124
|
+
['trpc', 'tRPC'],
|
|
125
|
+
['graphql', 'GraphQL'],
|
|
126
|
+
];
|
|
127
|
+
for (const [key, label] of checks) {
|
|
128
|
+
if (Object.keys(deps).some(d => d.includes(key)))
|
|
129
|
+
stack.push(label);
|
|
130
|
+
}
|
|
131
|
+
return stack;
|
|
132
|
+
}
|
|
133
|
+
function buildSnapshot(projectRoot) {
|
|
134
|
+
const pkgPath = path.join(projectRoot, 'package.json');
|
|
135
|
+
let packageJson = {};
|
|
136
|
+
try {
|
|
137
|
+
packageJson = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
138
|
+
}
|
|
139
|
+
catch { }
|
|
140
|
+
const pageFiles = collectFiles(projectRoot, /[Pp]age\.(tsx?|jsx?)$|[Pp]ages.*\.(tsx?|jsx?)$/)
|
|
141
|
+
.map(f => path.relative(projectRoot, f));
|
|
142
|
+
const routeFiles = collectFiles(projectRoot, /route|router|routes/i)
|
|
143
|
+
.filter(f => /\.(ts|js)$/.test(f))
|
|
144
|
+
.map(f => path.relative(projectRoot, f));
|
|
145
|
+
const testFiles = collectFiles(projectRoot, /\.(test|spec)\.(tsx?|jsx?)$/)
|
|
146
|
+
.map(f => path.relative(projectRoot, f));
|
|
147
|
+
const allFiles = collectFiles(projectRoot, /\.(tsx?|jsx?)$/, 500);
|
|
148
|
+
return {
|
|
149
|
+
name: packageJson.name || path.basename(projectRoot),
|
|
150
|
+
projectRoot,
|
|
151
|
+
packageJson,
|
|
152
|
+
dirTree: buildDirTree(projectRoot),
|
|
153
|
+
topFiles: allFiles.slice(0, 20).map(f => path.relative(projectRoot, f)),
|
|
154
|
+
routeFiles: routeFiles.slice(0, 30),
|
|
155
|
+
pageFiles: pageFiles.slice(0, 30),
|
|
156
|
+
testFiles: testFiles.slice(0, 30),
|
|
157
|
+
totalFiles: allFiles.length,
|
|
158
|
+
techStack: detectTechStack(packageJson),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
// ─── Шаблон промпта ────────────────────────────────────────────────────────────
|
|
162
|
+
function buildPrompt(snap) {
|
|
163
|
+
const configSchema = JSON.stringify({
|
|
164
|
+
version: '1',
|
|
165
|
+
features: {
|
|
166
|
+
'feature-name': {
|
|
167
|
+
label: 'Читаемое название фичи',
|
|
168
|
+
description: 'Что делает эта фича с точки зрения пользователя',
|
|
169
|
+
include: ['**/паттерн-файлов*', '**/другой-паттерн*'],
|
|
170
|
+
color: '#58a6ff',
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
}, null, 2);
|
|
174
|
+
return `# VibeRadar — Настройка карты фич проекта
|
|
175
|
+
|
|
176
|
+
## Контекст
|
|
177
|
+
|
|
178
|
+
VibeRadar — инструмент для визуализации архитектуры проекта и тест-покрытия по фичам.
|
|
179
|
+
Тебе нужно проанализировать проект **${snap.name}** и создать файл \`viberadar.config.json\`
|
|
180
|
+
с описанием бизнес-фич и паттернами файлов, которые к ним относятся.
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Данные о проекте
|
|
185
|
+
|
|
186
|
+
**Название:** ${snap.name}
|
|
187
|
+
**Стек:** ${snap.techStack.length > 0 ? snap.techStack.join(', ') : 'не определён'}
|
|
188
|
+
**Всего исходных файлов:** ${snap.totalFiles}
|
|
189
|
+
|
|
190
|
+
### Структура папок:
|
|
191
|
+
\`\`\`
|
|
192
|
+
${snap.name}/
|
|
193
|
+
${snap.dirTree}\`\`\`
|
|
194
|
+
|
|
195
|
+
${snap.pageFiles.length > 0 ? `### Найденные страницы/компоненты:
|
|
196
|
+
${snap.pageFiles.map(f => `- ${f}`).join('\n')}
|
|
197
|
+
` : ''}
|
|
198
|
+
${snap.routeFiles.length > 0 ? `### Найденные роуты/API:
|
|
199
|
+
${snap.routeFiles.map(f => `- ${f}`).join('\n')}
|
|
200
|
+
` : ''}
|
|
201
|
+
${snap.testFiles.length > 0 ? `### Найденные тест-файлы (первые 30):
|
|
202
|
+
${snap.testFiles.map(f => `- ${f}`).join('\n')}
|
|
203
|
+
` : ''}
|
|
204
|
+
${snap.packageJson.scripts ? `### Скрипты из package.json:
|
|
205
|
+
${Object.entries(snap.packageJson.scripts).map(([k, v]) => `- ${k}: ${v}`).join('\n')}
|
|
206
|
+
` : ''}
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Твоя задача
|
|
211
|
+
|
|
212
|
+
### Шаг 1 — Анализ
|
|
213
|
+
Изучи структуру проекта. Определи **бизнес-фичи** — не технические слои (не "components", не "utils"),
|
|
214
|
+
а именно то, что видит пользователь и что можно сломать отдельно.
|
|
215
|
+
|
|
216
|
+
Примеры хороших фич: "Авторизация", "Чаты с AI", "Навыки", "Файлы", "Биллинг", "Админ-панель"
|
|
217
|
+
Примеры плохих фич: "Components", "Utils", "Helpers", "Common"
|
|
218
|
+
|
|
219
|
+
### Шаг 2 — Уточнения
|
|
220
|
+
**ВАЖНО:** Если ты не уверен в назначении какой-то папки или модуля — **обязательно спроси**.
|
|
221
|
+
Не угадывай. Лучше задать 3–5 уточняющих вопросов, чем сделать неточный конфиг.
|
|
222
|
+
|
|
223
|
+
Примеры вопросов:
|
|
224
|
+
- "Вижу папку \`actions/\` — это фича или внутренняя система?"
|
|
225
|
+
- "Есть файлы \`skills\` и \`agents\` — это одна фича или разные?"
|
|
226
|
+
- "Что делает модуль \`no-code\`?"
|
|
227
|
+
|
|
228
|
+
### Шаг 3 — Генерация конфига
|
|
229
|
+
После уточнений создай файл \`viberadar.config.json\` в корне проекта.
|
|
230
|
+
|
|
231
|
+
**Правила конфига:**
|
|
232
|
+
- Не более 15 фич (оптимально 5–10)
|
|
233
|
+
- Каждая фича — понятное бизнес-название на русском или английском
|
|
234
|
+
- Паттерны в \`include\` — glob-паттерны относительно корня проекта
|
|
235
|
+
- Один файл может попадать в несколько фич (это нормально)
|
|
236
|
+
- Фича "other" не нужна — только значимые фичи
|
|
237
|
+
|
|
238
|
+
**Схема конфига:**
|
|
239
|
+
\`\`\`json
|
|
240
|
+
${configSchema}
|
|
241
|
+
\`\`\`
|
|
242
|
+
|
|
243
|
+
**Доступные цвета (используй разные для каждой фичи):**
|
|
244
|
+
\`#58a6ff\` (синий), \`#3fb950\` (зелёный), \`#d2a8ff\` (фиолетовый),
|
|
245
|
+
\`#ffa657\` (оранжевый), \`#f85149\` (красный), \`#e3b341\` (жёлтый),
|
|
246
|
+
\`#39d353\` (лайм), \`#79c0ff\` (голубой), \`#ff7b72\` (коралловый)
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Формат ответа
|
|
251
|
+
|
|
252
|
+
1. Сначала задай все уточняющие вопросы (если есть)
|
|
253
|
+
2. После получения ответов — создай файл \`viberadar.config.json\`
|
|
254
|
+
3. Кратко объясни почему выбрал именно эти фичи
|
|
255
|
+
|
|
256
|
+
Начинай с анализа и вопросов.
|
|
257
|
+
`;
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=prompt-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../src/init/prompt-builder.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "viberadar",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Live module map with test coverage for vibecoding projects",
|
|
5
5
|
"main": "./dist/cli.js",
|
|
6
6
|
"bin": {
|
|
7
|
-
"viberadar": "./
|
|
7
|
+
"viberadar": "./viberadar.js"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
10
|
"build": "tsc && node scripts/bundle-ui.js",
|
|
@@ -24,7 +24,8 @@
|
|
|
24
24
|
"license": "MIT",
|
|
25
25
|
"files": [
|
|
26
26
|
"dist",
|
|
27
|
-
"bin"
|
|
27
|
+
"bin",
|
|
28
|
+
"viberadar.js"
|
|
28
29
|
],
|
|
29
30
|
"dependencies": {
|
|
30
31
|
"open": "^10.1.0",
|
package/viberadar.js
ADDED