didev 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/README.md +378 -0
  2. package/dist/agents/analyst.d.ts +21 -0
  3. package/dist/agents/analyst.d.ts.map +1 -0
  4. package/dist/agents/analyst.js +69 -0
  5. package/dist/agents/analyst.js.map +1 -0
  6. package/dist/agents/architect.d.ts +21 -0
  7. package/dist/agents/architect.d.ts.map +1 -0
  8. package/dist/agents/architect.js +85 -0
  9. package/dist/agents/architect.js.map +1 -0
  10. package/dist/agents/base-agent.d.ts +56 -0
  11. package/dist/agents/base-agent.d.ts.map +1 -0
  12. package/dist/agents/base-agent.js +263 -0
  13. package/dist/agents/base-agent.js.map +1 -0
  14. package/dist/agents/developer.d.ts +21 -0
  15. package/dist/agents/developer.d.ts.map +1 -0
  16. package/dist/agents/developer.js +87 -0
  17. package/dist/agents/developer.js.map +1 -0
  18. package/dist/agents/orchestrator.d.ts +23 -0
  19. package/dist/agents/orchestrator.d.ts.map +1 -0
  20. package/dist/agents/orchestrator.js +287 -0
  21. package/dist/agents/orchestrator.js.map +1 -0
  22. package/dist/agents/reviewer.d.ts +15 -0
  23. package/dist/agents/reviewer.d.ts.map +1 -0
  24. package/dist/agents/reviewer.js +65 -0
  25. package/dist/agents/reviewer.js.map +1 -0
  26. package/dist/agents/tester.d.ts +15 -0
  27. package/dist/agents/tester.d.ts.map +1 -0
  28. package/dist/agents/tester.js +64 -0
  29. package/dist/agents/tester.js.map +1 -0
  30. package/dist/bmad/method.d.ts +6 -0
  31. package/dist/bmad/method.d.ts.map +1 -0
  32. package/dist/bmad/method.js +221 -0
  33. package/dist/bmad/method.js.map +1 -0
  34. package/dist/cli/commands/agent.d.ts +10 -0
  35. package/dist/cli/commands/agent.d.ts.map +1 -0
  36. package/dist/cli/commands/agent.js +28 -0
  37. package/dist/cli/commands/agent.js.map +1 -0
  38. package/dist/cli/commands/chat.d.ts +6 -0
  39. package/dist/cli/commands/chat.d.ts.map +1 -0
  40. package/dist/cli/commands/chat.js +556 -0
  41. package/dist/cli/commands/chat.js.map +1 -0
  42. package/dist/cli/commands/config.d.ts +3 -0
  43. package/dist/cli/commands/config.d.ts.map +1 -0
  44. package/dist/cli/commands/config.js +65 -0
  45. package/dist/cli/commands/config.js.map +1 -0
  46. package/dist/cli/commands/init.d.ts +8 -0
  47. package/dist/cli/commands/init.d.ts.map +1 -0
  48. package/dist/cli/commands/init.js +204 -0
  49. package/dist/cli/commands/init.js.map +1 -0
  50. package/dist/cli/commands/mcp.d.ts +5 -0
  51. package/dist/cli/commands/mcp.d.ts.map +1 -0
  52. package/dist/cli/commands/mcp.js +836 -0
  53. package/dist/cli/commands/mcp.js.map +1 -0
  54. package/dist/cli/commands/refactor.d.ts +8 -0
  55. package/dist/cli/commands/refactor.d.ts.map +1 -0
  56. package/dist/cli/commands/refactor.js +161 -0
  57. package/dist/cli/commands/refactor.js.map +1 -0
  58. package/dist/cli/commands/review.d.ts +9 -0
  59. package/dist/cli/commands/review.d.ts.map +1 -0
  60. package/dist/cli/commands/review.js +138 -0
  61. package/dist/cli/commands/review.js.map +1 -0
  62. package/dist/core/api.d.ts +73 -0
  63. package/dist/core/api.d.ts.map +1 -0
  64. package/dist/core/api.js +206 -0
  65. package/dist/core/api.js.map +1 -0
  66. package/dist/core/config.d.ts +42 -0
  67. package/dist/core/config.d.ts.map +1 -0
  68. package/dist/core/config.js +180 -0
  69. package/dist/core/config.js.map +1 -0
  70. package/dist/core/context.d.ts +33 -0
  71. package/dist/core/context.d.ts.map +1 -0
  72. package/dist/core/context.js +235 -0
  73. package/dist/core/context.js.map +1 -0
  74. package/dist/core/file-manager.d.ts +20 -0
  75. package/dist/core/file-manager.d.ts.map +1 -0
  76. package/dist/core/file-manager.js +133 -0
  77. package/dist/core/file-manager.js.map +1 -0
  78. package/dist/core/mcp.d.ts +31 -0
  79. package/dist/core/mcp.d.ts.map +1 -0
  80. package/dist/core/mcp.js +112 -0
  81. package/dist/core/mcp.js.map +1 -0
  82. package/dist/core/session.d.ts +16 -0
  83. package/dist/core/session.d.ts.map +1 -0
  84. package/dist/core/session.js +60 -0
  85. package/dist/core/session.js.map +1 -0
  86. package/dist/index.d.ts +3 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +237 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/utils/banner.d.ts +2 -0
  91. package/dist/utils/banner.d.ts.map +1 -0
  92. package/dist/utils/banner.js +50 -0
  93. package/dist/utils/banner.js.map +1 -0
  94. package/dist/utils/git.d.ts +9 -0
  95. package/dist/utils/git.d.ts.map +1 -0
  96. package/dist/utils/git.js +49 -0
  97. package/dist/utils/git.js.map +1 -0
  98. package/dist/utils/logger.d.ts +42 -0
  99. package/dist/utils/logger.d.ts.map +1 -0
  100. package/dist/utils/logger.js +98 -0
  101. package/dist/utils/logger.js.map +1 -0
  102. package/dist/utils/resilience.d.ts +17 -0
  103. package/dist/utils/resilience.d.ts.map +1 -0
  104. package/dist/utils/resilience.js +41 -0
  105. package/dist/utils/resilience.js.map +1 -0
  106. package/dist/utils/token-counter.d.ts +7 -0
  107. package/dist/utils/token-counter.d.ts.map +1 -0
  108. package/dist/utils/token-counter.js +20 -0
  109. package/dist/utils/token-counter.js.map +1 -0
  110. package/package.json +62 -0
  111. package/scripts/postinstall.mjs +54 -0
  112. package/scripts/setup-path.sh +42 -0
@@ -0,0 +1,287 @@
1
+ import chalk from 'chalk';
2
+ import boxen from 'boxen';
3
+ import inquirer from 'inquirer';
4
+ import { logger } from '../utils/logger.js';
5
+ import { collectProjectContext } from '../core/context.js';
6
+ import { loadConfig, getApiKey } from '../core/config.js';
7
+ import { initClient } from '../core/api.js';
8
+ import { AnalystAgent, FrontendAnalystAgent, BackendAnalystAgent } from './analyst.js';
9
+ import { ArchitectAgent, FrontendArchitectAgent, BackendArchitectAgent } from './architect.js';
10
+ import { DeveloperAgent, FrontendDeveloperAgent, BackendDeveloperAgent } from './developer.js';
11
+ import { ReviewerAgent, SecurityAuditorAgent } from './reviewer.js';
12
+ import { TesterAgent } from './tester.js';
13
+ import { initMcp } from '../core/mcp.js';
14
+ import { readProjectFile, writeProjectFile, renderDiff } from '../core/file-manager.js';
15
+ function buildPipeline(family, projectCtx, mode) {
16
+ const resolvedFamily = family === 'auto'
17
+ ? (projectCtx.type === 'frontend' ? 'frontend'
18
+ : projectCtx.type === 'backend' ? 'backend'
19
+ : 'fullstack')
20
+ : family;
21
+ if (mode === 'developer-only') {
22
+ if (resolvedFamily === 'frontend')
23
+ return [new FrontendDeveloperAgent()];
24
+ if (resolvedFamily === 'backend')
25
+ return [new BackendDeveloperAgent()];
26
+ return [new DeveloperAgent()];
27
+ }
28
+ if (mode === 'light') {
29
+ if (resolvedFamily === 'frontend') {
30
+ return [new FrontendAnalystAgent(), new FrontendDeveloperAgent(), new ReviewerAgent()];
31
+ }
32
+ if (resolvedFamily === 'backend') {
33
+ return [new BackendAnalystAgent(), new BackendDeveloperAgent(), new ReviewerAgent()];
34
+ }
35
+ return [new AnalystAgent(), new DeveloperAgent(), new ReviewerAgent()];
36
+ }
37
+ // Full pipeline — review-phase agents run in parallel (they only read, not depend on each other)
38
+ if (resolvedFamily === 'frontend') {
39
+ return [
40
+ new FrontendAnalystAgent(),
41
+ new FrontendArchitectAgent(),
42
+ new FrontendDeveloperAgent(),
43
+ [new ReviewerAgent(), new TesterAgent()],
44
+ ];
45
+ }
46
+ if (resolvedFamily === 'backend') {
47
+ return [
48
+ new BackendAnalystAgent(),
49
+ new BackendArchitectAgent(),
50
+ new BackendDeveloperAgent(),
51
+ [new SecurityAuditorAgent(), new ReviewerAgent(), new TesterAgent()],
52
+ ];
53
+ }
54
+ // Fullstack
55
+ return [
56
+ new AnalystAgent(),
57
+ new ArchitectAgent(),
58
+ new DeveloperAgent(),
59
+ [new ReviewerAgent(), new TesterAgent()],
60
+ ];
61
+ }
62
+ function pipelineAgents(steps) {
63
+ return steps.flatMap(s => Array.isArray(s) ? s : [s]);
64
+ }
65
+ function filterPipeline(steps, skip) {
66
+ return steps
67
+ .map(step => {
68
+ if (Array.isArray(step)) {
69
+ const filtered = step.filter(a => !skip.includes(a.name));
70
+ return filtered.length > 0 ? filtered : null;
71
+ }
72
+ return skip.includes(step.name) ? null : step;
73
+ })
74
+ .filter((s) => s !== null);
75
+ }
76
+ function formatPipelineLabel(steps) {
77
+ return steps
78
+ .map(step => Array.isArray(step)
79
+ ? step.map(a => `${a.emoji} ${a.name}`).join(' + ')
80
+ : `${step.emoji} ${step.name}`)
81
+ .join(' → ');
82
+ }
83
+ export async function runOrchestration(options) {
84
+ const start = Date.now();
85
+ const rootDir = options.rootDir ?? process.cwd();
86
+ const config = await loadConfig(rootDir);
87
+ const apiKey = await getApiKey(config);
88
+ if (!apiKey) {
89
+ logger.error('DEEPSEEK_API_KEY not set. Run: didev config set DEEPSEEK_API_KEY=sk-xxx');
90
+ process.exit(1);
91
+ }
92
+ const client = initClient({
93
+ apiKey,
94
+ baseUrl: config.api.baseUrl,
95
+ model: options.model ?? config.api.model,
96
+ maxTokens: config.api.maxTokens,
97
+ temperature: config.api.temperature,
98
+ });
99
+ const model = options.model ?? config.api.model;
100
+ const projectCtx = await collectProjectContext(rootDir);
101
+ // Connect MCP servers before agents start — shared via singleton McpManager
102
+ const mcp = await initMcp(config.mcp?.servers ?? []);
103
+ if (mcp.tools.length > 0) {
104
+ logger.success(`MCP: ${mcp.tools.length} tool(s) available to agents`);
105
+ }
106
+ const mode = options.mode ?? config.agents.family ?? 'full';
107
+ const family = options.family ?? 'auto';
108
+ const pipeline = buildPipeline(family, projectCtx, mode);
109
+ const filteredPipeline = options.skipAgents
110
+ ? filterPipeline(pipeline, options.skipAgents)
111
+ : pipeline;
112
+ // Display orchestration plan
113
+ logger.newline();
114
+ console.log(boxen(chalk.bold.cyan('🚀 didev agent') + '\n\n' +
115
+ chalk.white(`Task: ${options.task}`) + '\n\n' +
116
+ chalk.gray(`Pipeline: ${formatPipelineLabel(filteredPipeline)}`), { padding: 1, borderColor: 'cyan', borderStyle: 'double' }));
117
+ logger.newline();
118
+ const agentResults = [];
119
+ const allFileChanges = new Map();
120
+ // confirmWrites defaults to true — always ask before touching the filesystem
121
+ const confirmWrites = options.confirmWrites !== false;
122
+ const agentOptions = {
123
+ client,
124
+ model,
125
+ projectContext: projectCtx,
126
+ rootDir,
127
+ task: options.task,
128
+ dryRun: confirmWrites,
129
+ };
130
+ function trackFileChanges(fileChanges) {
131
+ for (const fc of fileChanges) {
132
+ allFileChanges.set(fc.path, allFileChanges.has(fc.path) ? 'modified' : 'created');
133
+ }
134
+ }
135
+ // Collect all pending writes across all agents (dry-run mode)
136
+ const allPendingWrites = new Map();
137
+ for (const step of filteredPipeline) {
138
+ const snapshot = agentResults.length > 0 ? [...agentResults] : undefined;
139
+ if (Array.isArray(step)) {
140
+ // Parallel stage — all agents get the same snapshot of previous results
141
+ const settled = await Promise.allSettled(step.map(agent => agent.run({ ...agentOptions, previousResults: snapshot })));
142
+ for (const outcome of settled) {
143
+ if (outcome.status === 'fulfilled') {
144
+ agentResults.push(outcome.value);
145
+ trackFileChanges(outcome.value.fileChanges);
146
+ // Collect pending writes from dry-run agents
147
+ for (const [path, entry] of outcome.value.pendingWrites) {
148
+ allPendingWrites.set(path, entry);
149
+ }
150
+ logger.dim(` Готово за ${(outcome.value.duration / 1000).toFixed(1)}s`);
151
+ }
152
+ else {
153
+ logger.error(`Агент завершился с ошибкой: ${outcome.reason.message}`);
154
+ }
155
+ }
156
+ logger.newline();
157
+ }
158
+ else {
159
+ // Sequential step
160
+ try {
161
+ const result = await step.run({ ...agentOptions, previousResults: snapshot });
162
+ agentResults.push(result);
163
+ trackFileChanges(result.fileChanges);
164
+ for (const [path, entry] of result.pendingWrites) {
165
+ allPendingWrites.set(path, entry);
166
+ }
167
+ logger.dim(` Готово за ${(result.duration / 1000).toFixed(1)}s`);
168
+ logger.newline();
169
+ }
170
+ catch (e) {
171
+ logger.error(`Агент ${step.name} завершился с ошибкой: ${e.message}`);
172
+ }
173
+ }
174
+ }
175
+ // ── Preview & confirm file writes ────────────────────────────────────────
176
+ if (confirmWrites && allPendingWrites.size > 0) {
177
+ await confirmAndApplyWrites(allPendingWrites, rootDir, allFileChanges);
178
+ }
179
+ const filesCreated = [...allFileChanges.entries()].filter(([, v]) => v === 'created').map(([k]) => k);
180
+ const filesModified = [...allFileChanges.entries()].filter(([, v]) => v === 'modified').map(([k]) => k);
181
+ const summary = buildSummary(options.task, agentResults, filesCreated, filesModified);
182
+ // Display final summary
183
+ displayFinalSummary(options.task, agentResults, filesCreated, filesModified, Date.now() - start);
184
+ return {
185
+ task: options.task,
186
+ agentResults,
187
+ totalDuration: Date.now() - start,
188
+ filesCreated,
189
+ filesModified,
190
+ summary,
191
+ };
192
+ }
193
+ async function confirmAndApplyWrites(pendingWrites, rootDir, allFileChanges) {
194
+ logger.newline();
195
+ const lines = [
196
+ chalk.bold.yellow('📝 Агенты подготовили изменения'),
197
+ '',
198
+ chalk.gray(`Файлов к записи: ${pendingWrites.size}`),
199
+ '',
200
+ ];
201
+ for (const [path, { description }] of pendingWrites) {
202
+ const exists = await readProjectFile(path, rootDir).then(() => true).catch(() => false);
203
+ const tag = exists ? chalk.yellow('~') : chalk.green('+');
204
+ const label = exists ? 'изменение' : 'новый файл';
205
+ lines.push(` ${tag} ${chalk.white(path)} ${chalk.gray(description ?? label)}`);
206
+ }
207
+ console.log(boxen(lines.join('\n'), { padding: 1, borderColor: 'yellow', borderStyle: 'round' }));
208
+ logger.newline();
209
+ // Show full diffs per file
210
+ const { showDiffs } = await inquirer.prompt([{
211
+ type: 'confirm',
212
+ name: 'showDiffs',
213
+ message: 'Показать diff изменений перед применением?',
214
+ default: true,
215
+ }]);
216
+ if (showDiffs) {
217
+ for (const [path, { content }] of pendingWrites) {
218
+ const original = await readProjectFile(path, rootDir).catch(() => '');
219
+ logger.newline();
220
+ logger.bold(`── ${path} ──`);
221
+ console.log(renderDiff(path, original, content));
222
+ }
223
+ logger.newline();
224
+ }
225
+ const { apply } = await inquirer.prompt([{
226
+ type: 'confirm',
227
+ name: 'apply',
228
+ message: `Применить ${pendingWrites.size} файл(ов)?`,
229
+ default: true,
230
+ }]);
231
+ if (apply) {
232
+ for (const [path, { content }] of pendingWrites) {
233
+ const existed = await readProjectFile(path, rootDir).then(() => true).catch(() => false);
234
+ await writeProjectFile(path, content, rootDir);
235
+ allFileChanges.set(path, existed ? 'modified' : 'created');
236
+ logger.success(`Записан: ${path}`);
237
+ }
238
+ }
239
+ else {
240
+ logger.info('Изменения отклонены — файлы не тронуты');
241
+ }
242
+ }
243
+ function buildSummary(task, results, filesCreated, filesModified) {
244
+ const lines = [`# Task: ${task}`, ''];
245
+ for (const r of results) {
246
+ lines.push(`## ${r.emoji ?? ''} ${r.agentName}`);
247
+ lines.push(r.output.slice(0, 10_000));
248
+ lines.push('');
249
+ }
250
+ if (filesCreated.length > 0) {
251
+ lines.push(`## Files Created\n${filesCreated.map(f => `- ${f}`).join('\n')}`);
252
+ }
253
+ if (filesModified.length > 0) {
254
+ lines.push(`\n## Files Modified\n${filesModified.map(f => `- ${f}`).join('\n')}`);
255
+ }
256
+ return lines.join('\n');
257
+ }
258
+ function displayFinalSummary(task, results, filesCreated, filesModified, durationMs) {
259
+ logger.newline();
260
+ const lines = [
261
+ chalk.bold.green('✅ Task Complete'),
262
+ '',
263
+ chalk.gray(`Task: ${task}`),
264
+ '',
265
+ ];
266
+ for (const r of results) {
267
+ lines.push(` ${chalk.green('✓')} ${r.emoji ?? ''} ${chalk.bold(r.agentName)} — ${chalk.gray((r.duration / 1000).toFixed(1) + 's')}`);
268
+ }
269
+ if (filesCreated.length > 0) {
270
+ lines.push('');
271
+ lines.push(chalk.bold('Files created:'));
272
+ filesCreated.forEach(f => lines.push(` ${chalk.green('+')} ${f}`));
273
+ }
274
+ if (filesModified.length > 0) {
275
+ lines.push('');
276
+ lines.push(chalk.bold('Files modified:'));
277
+ filesModified.forEach(f => lines.push(` ${chalk.yellow('~')} ${f}`));
278
+ }
279
+ lines.push('');
280
+ lines.push(chalk.gray(`Total time: ${(durationMs / 1000).toFixed(1)}s`));
281
+ console.log(boxen(lines.join('\n'), {
282
+ padding: 1,
283
+ borderColor: 'green',
284
+ borderStyle: 'round',
285
+ }));
286
+ }
287
+ //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/agents/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { BaseAgent } from './base-agent.js';
2
+ import type { ProjectContext } from '../core/context.js';
3
+ export declare class ReviewerAgent extends BaseAgent {
4
+ readonly name = "Reviewer";
5
+ readonly role = "Code Review & Quality";
6
+ readonly emoji = "\uD83D\uDD0D";
7
+ protected buildSystemPrompt(ctx: ProjectContext): string;
8
+ }
9
+ export declare class SecurityAuditorAgent extends BaseAgent {
10
+ readonly name = "Security Auditor";
11
+ readonly role = "Security Analysis";
12
+ readonly emoji = "\uD83D\uDD12";
13
+ protected buildSystemPrompt(ctx: ProjectContext): string;
14
+ }
15
+ //# sourceMappingURL=reviewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewer.d.ts","sourceRoot":"","sources":["../../src/agents/reviewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,qBAAa,aAAc,SAAQ,SAAS;IAC1C,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,IAAI,2BAA2B;IACxC,QAAQ,CAAC,KAAK,kBAAQ;IAEtB,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CA8BzD;AAED,qBAAa,oBAAqB,SAAQ,SAAS;IACjD,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,IAAI,uBAAuB;IACpC,QAAQ,CAAC,KAAK,kBAAQ;IAEtB,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAsBzD"}
@@ -0,0 +1,65 @@
1
+ import { BaseAgent } from './base-agent.js';
2
+ import { contextToSystemPrompt } from '../core/context.js';
3
+ export class ReviewerAgent extends BaseAgent {
4
+ name = 'Reviewer';
5
+ role = 'Code Review & Quality';
6
+ emoji = '🔍';
7
+ buildSystemPrompt(ctx) {
8
+ return `You are a senior Code Reviewer with expertise in ${ctx.language} and ${ctx.framework}.
9
+
10
+ ${contextToSystemPrompt(ctx)}
11
+
12
+ Your responsibilities:
13
+ 1. Review all files created/modified by the developer
14
+ 2. Check for code quality issues
15
+ 3. Identify security vulnerabilities
16
+ 4. Spot performance problems
17
+ 5. Ensure proper error handling
18
+ 6. Check test coverage needs
19
+ 7. Verify TypeScript types are correct
20
+
21
+ Review categories:
22
+ - **Code Quality**: Readability, naming, DRY, SOLID
23
+ - **Security**: Input validation, XSS, SQL injection, auth checks
24
+ - **Performance**: Unnecessary re-renders, N+1 queries, memory leaks
25
+ - **Error Handling**: Uncaught exceptions, missing validation
26
+ - **Types**: Missing types, unsafe casts
27
+ - **Architecture**: Coupling, cohesion, separation of concerns
28
+
29
+ Output:
30
+ - Summary verdict (✅ Ready / ⚠️ Minor issues / ❌ Critical issues)
31
+ - List of issues by severity (critical/warning/suggestion)
32
+ - If you find critical issues, use write_file to fix them
33
+ - List of fixes applied
34
+
35
+ Be thorough but fair. Focus on real bugs, not style preferences.`;
36
+ }
37
+ }
38
+ export class SecurityAuditorAgent extends BaseAgent {
39
+ name = 'Security Auditor';
40
+ role = 'Security Analysis';
41
+ emoji = '🔒';
42
+ buildSystemPrompt(ctx) {
43
+ return `You are a Security Engineer performing a security audit.
44
+
45
+ ${contextToSystemPrompt(ctx)}
46
+
47
+ Focus areas:
48
+ - Injection vulnerabilities (SQL, NoSQL, Command, XSS)
49
+ - Authentication and authorization flaws
50
+ - Sensitive data exposure (keys, tokens in code/logs)
51
+ - Missing input validation
52
+ - Insecure dependencies
53
+ - CSRF vulnerabilities
54
+ - Rate limiting absence
55
+ - Cryptography issues
56
+
57
+ Output format:
58
+ - Severity: CRITICAL / HIGH / MEDIUM / LOW / INFO
59
+ - CVE/OWASP reference if applicable
60
+ - Code snippet showing the issue
61
+ - Recommended fix
62
+ - Apply fixes via write_file for critical/high issues`;
63
+ }
64
+ }
65
+ //# sourceMappingURL=reviewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewer.js","sourceRoot":"","sources":["../../src/agents/reviewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,OAAO,aAAc,SAAQ,SAAS;IACjC,IAAI,GAAG,UAAU,CAAC;IAClB,IAAI,GAAG,uBAAuB,CAAC;IAC/B,KAAK,GAAG,IAAI,CAAC;IAEZ,iBAAiB,CAAC,GAAmB;QAC7C,OAAO,oDAAoD,GAAG,CAAC,QAAQ,QAAQ,GAAG,CAAC,SAAS;;EAE9F,qBAAqB,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;iEAyBqC,CAAC;IAChE,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IACxC,IAAI,GAAG,kBAAkB,CAAC;IAC1B,IAAI,GAAG,mBAAmB,CAAC;IAC3B,KAAK,GAAG,IAAI,CAAC;IAEZ,iBAAiB,CAAC,GAAmB;QAC7C,OAAO;;EAET,qBAAqB,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;sDAiB0B,CAAC;IACrD,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { BaseAgent } from './base-agent.js';
2
+ import type { ProjectContext } from '../core/context.js';
3
+ export declare class TesterAgent extends BaseAgent {
4
+ readonly name = "Tester";
5
+ readonly role = "Test Writing";
6
+ readonly emoji = "\uD83E\uDDEA";
7
+ protected buildSystemPrompt(ctx: ProjectContext): string;
8
+ }
9
+ export declare class PerformanceAuditorAgent extends BaseAgent {
10
+ readonly name = "Performance Auditor";
11
+ readonly role = "Performance Analysis";
12
+ readonly emoji = "\u26A1";
13
+ protected buildSystemPrompt(ctx: ProjectContext): string;
14
+ }
15
+ //# sourceMappingURL=tester.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tester.d.ts","sourceRoot":"","sources":["../../src/agents/tester.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,qBAAa,WAAY,SAAQ,SAAS;IACxC,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,IAAI,kBAAkB;IAC/B,QAAQ,CAAC,KAAK,kBAAQ;IAEtB,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAiCzD;AAED,qBAAa,uBAAwB,SAAQ,SAAS;IACpD,QAAQ,CAAC,IAAI,yBAAyB;IACtC,QAAQ,CAAC,IAAI,0BAA0B;IACvC,QAAQ,CAAC,KAAK,YAAO;IAErB,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAmBzD"}
@@ -0,0 +1,64 @@
1
+ import { BaseAgent } from './base-agent.js';
2
+ import { contextToSystemPrompt } from '../core/context.js';
3
+ export class TesterAgent extends BaseAgent {
4
+ name = 'Tester';
5
+ role = 'Test Writing';
6
+ emoji = '🧪';
7
+ buildSystemPrompt(ctx) {
8
+ const testFramework = ctx.dependencies.dev.includes('vitest') ? 'Vitest'
9
+ : ctx.dependencies.dev.includes('jest') ? 'Jest'
10
+ : ctx.dependencies.dev.includes('mocha') ? 'Mocha'
11
+ : 'the project\'s test framework';
12
+ return `You are an expert Test Engineer writing ${testFramework} tests for a ${ctx.language} ${ctx.type} project.
13
+
14
+ ${contextToSystemPrompt(ctx)}
15
+
16
+ Your responsibilities:
17
+ 1. Write unit tests for all new functions and components
18
+ 2. Write integration tests for API endpoints
19
+ 3. Write component tests for UI components
20
+ 4. Aim for >80% code coverage
21
+ 5. Test happy paths AND error cases
22
+ 6. Test edge cases and boundary conditions
23
+
24
+ Testing strategy:
25
+ - Unit tests: Pure functions, utilities, hooks
26
+ - Component tests: UI behavior, user interactions, states
27
+ - Integration tests: API routes, database queries
28
+
29
+ Rules:
30
+ - Use write_file to create test files alongside implementation files
31
+ - Mock external dependencies (API calls, databases)
32
+ - Test file naming: *.test.ts or *.spec.ts
33
+ - Use describe/it blocks for clear structure
34
+ - Add meaningful test descriptions
35
+ - Read the implementation files before writing tests
36
+
37
+ Write tests that actually VALIDATE the implementation, not just check it runs.`;
38
+ }
39
+ }
40
+ export class PerformanceAuditorAgent extends BaseAgent {
41
+ name = 'Performance Auditor';
42
+ role = 'Performance Analysis';
43
+ emoji = '⚡';
44
+ buildSystemPrompt(ctx) {
45
+ return `You are a Performance Engineer analyzing a ${ctx.type} ${ctx.framework} application.
46
+
47
+ ${contextToSystemPrompt(ctx)}
48
+
49
+ Analysis areas:
50
+ - Bundle size and code splitting opportunities
51
+ - Re-render causes (React memo, useMemo, useCallback)
52
+ - Data fetching efficiency (N+1 queries, over-fetching)
53
+ - Memory leaks (event listeners, subscriptions)
54
+ - Database query optimization
55
+ - Caching opportunities
56
+ - Lazy loading candidates
57
+
58
+ Output:
59
+ - Performance issues found (severity: high/medium/low)
60
+ - Specific recommendations with code examples
61
+ - Apply critical optimizations via write_file`;
62
+ }
63
+ }
64
+ //# sourceMappingURL=tester.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tester.js","sourceRoot":"","sources":["../../src/agents/tester.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,OAAO,WAAY,SAAQ,SAAS;IAC/B,IAAI,GAAG,QAAQ,CAAC;IAChB,IAAI,GAAG,cAAc,CAAC;IACtB,KAAK,GAAG,IAAI,CAAC;IAEZ,iBAAiB,CAAC,GAAmB;QAC7C,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;YACtE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;gBAChD,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;oBAClD,CAAC,CAAC,+BAA+B,CAAC;QAEpC,OAAO,2CAA2C,aAAa,gBAAgB,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI;;EAEzG,qBAAqB,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;+EAuBmD,CAAC;IAC9E,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,SAAS;IAC3C,IAAI,GAAG,qBAAqB,CAAC;IAC7B,IAAI,GAAG,sBAAsB,CAAC;IAC9B,KAAK,GAAG,GAAG,CAAC;IAEX,iBAAiB,CAAC,GAAmB;QAC7C,OAAO,8CAA8C,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,SAAS;;EAEhF,qBAAqB,CAAC,GAAG,CAAC;;;;;;;;;;;;;;8CAckB,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export declare function runBmadInit(rootDir?: string): Promise<void>;
2
+ export declare function runBmadEpic(rootDir?: string): Promise<void>;
3
+ export declare function runBmadStory(rootDir?: string): Promise<void>;
4
+ export declare function runBmadImplement(storyId?: string, rootDir?: string): Promise<void>;
5
+ export declare function runBmadReview(rootDir?: string): Promise<void>;
6
+ //# sourceMappingURL=method.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"method.d.ts","sourceRoot":"","sources":["../../src/bmad/method.ts"],"names":[],"mappings":"AAqDA,wBAAsB,WAAW,CAAC,OAAO,SAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBxE;AAED,wBAAsB,WAAW,CAAC,OAAO,SAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoDxE;AAED,wBAAsB,YAAY,CAAC,OAAO,SAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFzE;AAED,wBAAsB,gBAAgB,CACpC,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,SAAgB,GACtB,OAAO,CAAC,IAAI,CAAC,CAsCf;AAED,wBAAsB,aAAa,CAAC,OAAO,SAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1E"}