brainforge-ai 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 (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +254 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +47 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/dashboard.d.ts +2 -0
  8. package/dist/commands/dashboard.d.ts.map +1 -0
  9. package/dist/commands/dashboard.js +46 -0
  10. package/dist/commands/dashboard.js.map +1 -0
  11. package/dist/commands/doctor.d.ts +2 -0
  12. package/dist/commands/doctor.d.ts.map +1 -0
  13. package/dist/commands/doctor.js +90 -0
  14. package/dist/commands/doctor.js.map +1 -0
  15. package/dist/commands/init.d.ts +2 -0
  16. package/dist/commands/init.d.ts.map +1 -0
  17. package/dist/commands/init.js +203 -0
  18. package/dist/commands/init.js.map +1 -0
  19. package/dist/commands/updateDashboard.d.ts +2 -0
  20. package/dist/commands/updateDashboard.d.ts.map +1 -0
  21. package/dist/commands/updateDashboard.js +31 -0
  22. package/dist/commands/updateDashboard.js.map +1 -0
  23. package/dist/core/config.d.ts +25 -0
  24. package/dist/core/config.d.ts.map +1 -0
  25. package/dist/core/config.js +52 -0
  26. package/dist/core/config.js.map +1 -0
  27. package/dist/core/dashboard.d.ts +25 -0
  28. package/dist/core/dashboard.d.ts.map +1 -0
  29. package/dist/core/dashboard.js +76 -0
  30. package/dist/core/dashboard.js.map +1 -0
  31. package/dist/core/dashboardTemplate.d.ts +3 -0
  32. package/dist/core/dashboardTemplate.d.ts.map +1 -0
  33. package/dist/core/dashboardTemplate.js +324 -0
  34. package/dist/core/dashboardTemplate.js.map +1 -0
  35. package/dist/core/fileSystem.d.ts +3 -0
  36. package/dist/core/fileSystem.d.ts.map +1 -0
  37. package/dist/core/fileSystem.js +468 -0
  38. package/dist/core/fileSystem.js.map +1 -0
  39. package/dist/core/git.d.ts +6 -0
  40. package/dist/core/git.d.ts.map +1 -0
  41. package/dist/core/git.js +63 -0
  42. package/dist/core/git.js.map +1 -0
  43. package/dist/core/templates.d.ts +5 -0
  44. package/dist/core/templates.d.ts.map +1 -0
  45. package/dist/core/templates.js +1065 -0
  46. package/dist/core/templates.js.map +1 -0
  47. package/dist/utils/logger.d.ts +10 -0
  48. package/dist/utils/logger.d.ts.map +1 -0
  49. package/dist/utils/logger.js +17 -0
  50. package/dist/utils/logger.js.map +1 -0
  51. package/package.json +54 -0
@@ -0,0 +1,468 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createBrainforgeStructure = createBrainforgeStructure;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const config_1 = require("./config");
10
+ const templates_1 = require("./templates");
11
+ const dashboardTemplate_1 = require("./dashboardTemplate");
12
+ async function createBrainforgeStructure(config, cwd = process.cwd()) {
13
+ const brainDir = (0, config_1.getBrainforgeDir)(cwd);
14
+ // Create directory structure
15
+ const dirs = [
16
+ brainDir,
17
+ path_1.default.join(brainDir, 'memory'),
18
+ path_1.default.join(brainDir, 'phases'),
19
+ path_1.default.join(brainDir, 'agents'),
20
+ path_1.default.join(brainDir, 'commands'),
21
+ path_1.default.join(brainDir, 'dashboard'),
22
+ ];
23
+ for (const dir of dirs) {
24
+ await fs_extra_1.default.ensureDir(dir);
25
+ }
26
+ // Write config
27
+ await fs_extra_1.default.writeJson(path_1.default.join(brainDir, 'config.json'), config, { spaces: 2 });
28
+ // Write project.md
29
+ await fs_extra_1.default.writeFile(path_1.default.join(brainDir, 'project.md'), generateProjectMd(config));
30
+ // Write questions.md
31
+ await fs_extra_1.default.writeFile(path_1.default.join(brainDir, 'questions.md'), generateQuestionsMd(config));
32
+ // Write decisions.md
33
+ await fs_extra_1.default.writeFile(path_1.default.join(brainDir, 'decisions.md'), generateDecisionsMd());
34
+ // Write roadmap.md placeholder
35
+ await fs_extra_1.default.writeFile(path_1.default.join(brainDir, 'roadmap.md'), generateRoadmapMd(config));
36
+ // Write memory files
37
+ const memoryFiles = {
38
+ 'architecture.md': generateArchitectureMd(config),
39
+ 'coding-style.md': generateCodingStyleMd(config),
40
+ 'known-bugs.md': generateKnownBugsMd(),
41
+ 'glossary.md': generateGlossaryMd(),
42
+ 'design-system.md': generateDesignSystemMd(config),
43
+ };
44
+ for (const [filename, content] of Object.entries(memoryFiles)) {
45
+ await fs_extra_1.default.writeFile(path_1.default.join(brainDir, 'memory', filename), content);
46
+ }
47
+ // Write phase templates
48
+ await fs_extra_1.default.writeFile(path_1.default.join(brainDir, 'phases', 'phase-01.md'), generatePhaseMd(1, 'Project Setup & Foundation', config));
49
+ await fs_extra_1.default.writeFile(path_1.default.join(brainDir, 'phases', 'phase-02.md'), generatePhaseMd(2, 'Core Features', config));
50
+ // Write agent files
51
+ const agents = (0, templates_1.getAgentTemplates)(config);
52
+ for (const [filename, content] of Object.entries(agents)) {
53
+ await fs_extra_1.default.writeFile(path_1.default.join(brainDir, 'agents', filename), content);
54
+ }
55
+ // Write command files
56
+ const commands = (0, templates_1.getCommandTemplates)(config);
57
+ for (const [filename, content] of Object.entries(commands)) {
58
+ await fs_extra_1.default.writeFile(path_1.default.join(brainDir, 'commands', filename), content);
59
+ }
60
+ // Write dashboard files
61
+ await fs_extra_1.default.writeFile(path_1.default.join(brainDir, 'dashboard', 'index.html'), (0, dashboardTemplate_1.getDashboardHtml)());
62
+ await fs_extra_1.default.writeFile(path_1.default.join(brainDir, 'dashboard', 'style.css'), (0, dashboardTemplate_1.getDashboardCss)());
63
+ await fs_extra_1.default.writeJson(path_1.default.join(brainDir, 'dashboard', 'data.json'), {
64
+ projectName: config.projectName,
65
+ description: config.description,
66
+ stack: config.stack,
67
+ userLevel: config.userLevel,
68
+ codeLevel: config.codeLevel,
69
+ projectType: config.projectType,
70
+ currentPhase: 0,
71
+ totalPhases: 2,
72
+ phases: [
73
+ { id: 1, title: 'Project Setup & Foundation', status: 'pending' },
74
+ { id: 2, title: 'Core Features', status: 'pending' },
75
+ ],
76
+ recentCommits: [],
77
+ gitStatus: 'clean',
78
+ knownBugs: [],
79
+ decisions: [],
80
+ updatedAt: new Date().toISOString(),
81
+ }, { spaces: 2 });
82
+ // Write root files (AGENTS.md, CLAUDE.md, GEMINI.md, OPENAI.md, README.md)
83
+ const rootFiles = (0, templates_1.getRootFileTemplates)(config);
84
+ for (const [filename, content] of Object.entries(rootFiles)) {
85
+ const filePath = path_1.default.join(cwd, filename);
86
+ if (!fs_extra_1.default.existsSync(filePath)) {
87
+ await fs_extra_1.default.writeFile(filePath, content);
88
+ }
89
+ }
90
+ }
91
+ function generateProjectMd(config) {
92
+ return `# Project: ${config.projectName}
93
+
94
+ **Description:** ${config.description || '_To be filled_'}
95
+ **Type:** ${config.projectType}
96
+ **Stack:** ${config.stack.join(', ')}
97
+ **User Level:** ${config.userLevel}
98
+ **Code Level:** ${config.codeLevel}
99
+ **Academic:** ${config.isAcademic ? 'Yes' : 'No'}
100
+ **Created:** ${config.createdAt}
101
+
102
+ ## Features
103
+
104
+ - Docker: ${config.useDocker ? 'Yes' : 'No'}
105
+ - Database: ${config.useDatabase ? 'Yes' : 'No'}
106
+ - Authentication: ${config.useAuth ? 'Yes' : 'No'}
107
+ - Admin Dashboard: ${config.useAdminDashboard ? 'Yes' : 'No'}
108
+ - Responsive: ${config.useResponsive ? 'Yes' : 'No'}
109
+
110
+ ## Goal
111
+
112
+ _Describe the main goal of the project here._
113
+
114
+ ## Scope
115
+
116
+ _Define what is in scope and what is out of scope._
117
+
118
+ ## Success Criteria
119
+
120
+ - [ ] Core features working
121
+ - [ ] Tested and reviewed
122
+ - [ ] Documented
123
+ `;
124
+ }
125
+ function generateQuestionsMd(config) {
126
+ return `# Project Questions
127
+
128
+ _Answered during init_
129
+
130
+ | Question | Answer |
131
+ |----------|--------|
132
+ | Project type | ${config.projectType} |
133
+ | Stack | ${config.stack.join(', ')} |
134
+ | User level | ${config.userLevel} |
135
+ | Code level | ${config.codeLevel} |
136
+ | Docker | ${config.useDocker ? 'Yes' : 'No'} |
137
+ | Database | ${config.useDatabase ? 'Yes' : 'No'} |
138
+ | Authentication | ${config.useAuth ? 'Yes' : 'No'} |
139
+ | Admin dashboard | ${config.useAdminDashboard ? 'Yes' : 'No'} |
140
+ | Responsive | ${config.useResponsive ? 'Yes' : 'No'} |
141
+ | Academic project | ${config.isAcademic ? 'Yes' : 'No'} |
142
+
143
+ ## Open Questions
144
+
145
+ _Add questions that need clarification here._
146
+
147
+ - [ ] ?
148
+ `;
149
+ }
150
+ function generateDecisionsMd() {
151
+ return `# Architecture Decisions
152
+
153
+ _Decisions taken during the project_
154
+
155
+ ## Format
156
+
157
+ \`\`\`
158
+ - [YYYY-MM-DD] Decision title
159
+ Context: why this decision was needed
160
+ Choice: what was decided
161
+ Reason: why this option
162
+ \`\`\`
163
+
164
+ ## Decisions
165
+
166
+ - [${new Date().toISOString().slice(0, 10)}] Project initialized with BrainForge
167
+ Context: Starting a new project
168
+ Choice: Using BrainForge CLI
169
+ Reason: Structured, AI-assisted development workflow
170
+ `;
171
+ }
172
+ function generateRoadmapMd(config) {
173
+ return `# Project Roadmap: ${config.projectName}
174
+
175
+ _Generated by BrainForge. Run /create-roadmap to generate a detailed roadmap._
176
+
177
+ ## Epic 1: Foundation
178
+
179
+ ### Feature 1.1: Project Setup
180
+ - Task: Initialize project structure
181
+ - Subtask: Create folder structure
182
+ - Subtask: Configure environment
183
+ - Task: Setup stack
184
+ - Subtask: Install dependencies
185
+ - Subtask: Configure tools
186
+
187
+ ### Feature 1.2: Core Architecture
188
+ - Task: Define data models
189
+ - Task: Setup routing/navigation
190
+
191
+ ## Epic 2: Core Features
192
+
193
+ ### Feature 2.1: Main Functionality
194
+ - Task: Implement primary feature
195
+ - Task: Connect to data source
196
+
197
+ ### Feature 2.2: UI/UX
198
+ - Task: Build main screens
199
+ - Task: Make responsive
200
+
201
+ ## Epic 3: Quality & Delivery
202
+
203
+ ### Feature 3.1: Testing
204
+ - Task: Unit tests
205
+ - Task: Integration tests
206
+
207
+ ### Feature 3.2: Documentation
208
+ - Task: Write README
209
+ - Task: Prepare presentation
210
+
211
+ ## Phase Summary
212
+
213
+ | Phase | Epic | Status |
214
+ |-------|------|--------|
215
+ | Phase 01 | Foundation | pending |
216
+ | Phase 02 | Core Features | pending |
217
+ `;
218
+ }
219
+ function generateArchitectureMd(config) {
220
+ return `# Architecture Memory
221
+
222
+ **Stack:** ${config.stack.join(', ')}
223
+ **Pattern:** _To be defined_
224
+
225
+ ## Folder Structure
226
+
227
+ \`\`\`
228
+ project/
229
+ _Update this as you build_
230
+ \`\`\`
231
+
232
+ ## Key Decisions
233
+
234
+ _Add architecture decisions here as the project evolves._
235
+
236
+ ## Data Flow
237
+
238
+ _Describe how data flows through your application._
239
+
240
+ ## External Services
241
+
242
+ _List any external APIs, databases, or services._
243
+ `;
244
+ }
245
+ function generateCodingStyleMd(config) {
246
+ const rules = {
247
+ beginner: [
248
+ 'Write simple, direct code — no unnecessary abstractions',
249
+ 'Use clear variable names (no abbreviations)',
250
+ 'Add comments in French for important functions',
251
+ 'Keep each file under 100 lines',
252
+ 'Avoid design patterns unless absolutely needed',
253
+ 'Use console.log for debugging — remove before delivery',
254
+ ],
255
+ intermediate: [
256
+ 'Clean structure with reasonable separation of concerns',
257
+ 'Reusable components/functions where it makes sense',
258
+ 'Simple validation on user inputs',
259
+ 'Follow naming conventions of the chosen framework',
260
+ 'Keep files under 200 lines',
261
+ 'Avoid over-engineering',
262
+ ],
263
+ professional: [
264
+ 'Strict typing (TypeScript strict mode)',
265
+ 'Separation of concerns, DDD-lite',
266
+ 'Input validation at all boundaries',
267
+ 'Error handling and logging',
268
+ 'Unit tests for critical paths',
269
+ 'Environment-based config',
270
+ ],
271
+ 'academic-realistic': [
272
+ 'Code clean but not enterprise-perfect',
273
+ 'No unnecessary design patterns',
274
+ 'Easy to explain line by line',
275
+ 'Simple folder structure',
276
+ 'Comments where logic is non-obvious',
277
+ 'Avoid abstractions that are hard to justify to a professor',
278
+ 'Prefer readable over clever',
279
+ 'Naming should be clear but natural (not overly perfect)',
280
+ ],
281
+ };
282
+ const levelRules = rules[config.codeLevel] || rules['intermediate'];
283
+ return `# Coding Style Guide
284
+
285
+ **Level:** ${config.codeLevel}
286
+ **User Level:** ${config.userLevel}
287
+
288
+ ## Rules
289
+
290
+ ${levelRules.map((r) => `- ${r}`).join('\n')}
291
+
292
+ ## Stack Conventions
293
+
294
+ **Stack:** ${config.stack.join(', ')}
295
+
296
+ _Update this section with conventions specific to your stack._
297
+
298
+ ## What to Avoid
299
+
300
+ - Over-engineered abstractions
301
+ - Premature optimization
302
+ - Unnecessary dependencies
303
+ - Magic strings/numbers without constants
304
+ - Dead code
305
+
306
+ ## Code Level Engine
307
+
308
+ \`\`\`
309
+ beginner → simple, direct, few files, FR comments
310
+ intermediate → clean, modular, good practices
311
+ professional → strict, tested, secure, scalable
312
+ academic-realistic → clean but natural, explainable, no enterprise patterns
313
+ \`\`\`
314
+ `;
315
+ }
316
+ function generateKnownBugsMd() {
317
+ return `# Known Bugs
318
+
319
+ _Updated automatically during /debug-issue and /review-phase_
320
+
321
+ ## Active
322
+
323
+ _No bugs tracked yet._
324
+
325
+ ## Resolved
326
+
327
+ _No resolved bugs yet._
328
+
329
+ ## Format
330
+
331
+ \`\`\`
332
+ - [YYYY-MM-DD] Bug title
333
+ File: path/to/file.ts
334
+ Description: what happens
335
+ Status: active | resolved
336
+ Fix: how it was fixed (if resolved)
337
+ \`\`\`
338
+ `;
339
+ }
340
+ function generateGlossaryMd() {
341
+ return `# Project Glossary
342
+
343
+ _Define domain terms and technical jargon here._
344
+
345
+ | Term | Definition |
346
+ |------|------------|
347
+ | BrainForge | The CLI tool managing this project |
348
+ | Phase | A structured development step with a clear goal |
349
+ | Checkpoint | A git commit marking a stable state |
350
+ | Code Level | The complexity target for generated/written code |
351
+
352
+ _Add more terms as your project grows._
353
+ `;
354
+ }
355
+ function generateDesignSystemMd(config) {
356
+ return `# Design System
357
+
358
+ **Project:** ${config.projectName}
359
+ **Style:** Modern, clean, minimal
360
+
361
+ ## Colors
362
+
363
+ \`\`\`css
364
+ --color-primary: #6366f1;
365
+ --color-secondary: #8b5cf6;
366
+ --color-success: #22c55e;
367
+ --color-warning: #f59e0b;
368
+ --color-error: #ef4444;
369
+ --color-bg: #0f172a;
370
+ --color-surface: #1e293b;
371
+ --color-text: #f1f5f9;
372
+ --color-muted: #94a3b8;
373
+ \`\`\`
374
+
375
+ ## Typography
376
+
377
+ - Headings: Inter, system-ui
378
+ - Body: Inter, system-ui
379
+ - Code: JetBrains Mono, monospace
380
+ - Base size: 16px
381
+
382
+ ## Spacing
383
+
384
+ Use multiples of 4px: 4, 8, 12, 16, 24, 32, 48, 64
385
+
386
+ ## Components
387
+
388
+ - Buttons: rounded-md, padding 8px 16px
389
+ - Cards: rounded-lg, shadow-md, bg surface
390
+ - Inputs: border, rounded-md, focus ring primary
391
+ - Badges: small, rounded-full
392
+
393
+ ## Responsive Rules
394
+
395
+ - Mobile first
396
+ - Breakpoints: 640px (sm), 768px (md), 1024px (lg), 1280px (xl)
397
+ - Max container width: 1280px
398
+
399
+ ## Dark Mode
400
+
401
+ Default dark. Light mode optional via class toggle.
402
+
403
+ ## Animations
404
+
405
+ - Transitions: 150ms ease
406
+ - Hover effects: subtle scale or color shift
407
+ - No flashy animations — keep it professional
408
+ `;
409
+ }
410
+ function generatePhaseMd(phaseNum, title, config) {
411
+ const padded = String(phaseNum).padStart(2, '0');
412
+ return `# Phase ${padded}: ${title}
413
+
414
+ **Status:** pending
415
+ **Project:** ${config.projectName}
416
+ **Stack:** ${config.stack.join(', ')}
417
+ **Code Level:** ${config.codeLevel}
418
+
419
+ ## Objective
420
+
421
+ _Describe what this phase must accomplish._
422
+
423
+ ## Context
424
+
425
+ _What should be already done before this phase starts?_
426
+
427
+ ## Files Likely Involved
428
+
429
+ _List the files that will be created or modified._
430
+
431
+ \`\`\`
432
+ _To be filled during /initiate-phase_
433
+ \`\`\`
434
+
435
+ ## Dependencies
436
+
437
+ - Depends on: Phase ${phaseNum === 1 ? 'none' : '0' + (phaseNum - 1)}
438
+ - Blocking: Phase ${String(phaseNum + 1).padStart(2, '0')}
439
+
440
+ ## Execution Plan
441
+
442
+ _Generated by /initiate-phase_
443
+
444
+ - [ ] Step 1
445
+ - [ ] Step 2
446
+ - [ ] Step 3
447
+
448
+ ## Validation Criteria
449
+
450
+ - [ ] Feature works as expected
451
+ - [ ] No obvious bugs
452
+ - [ ] Code matches level: ${config.codeLevel}
453
+ - [ ] Committed with checkpoint
454
+
455
+ ## Risks
456
+
457
+ - _Add risks here_
458
+
459
+ ## Difficulty
460
+
461
+ **Level:** medium
462
+
463
+ ## Notes
464
+
465
+ _Add notes during execution_
466
+ `;
467
+ }
468
+ //# sourceMappingURL=fileSystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileSystem.js","sourceRoot":"","sources":["../../src/core/fileSystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function isGitRepo(cwd?: string): Promise<boolean>;
2
+ export declare function initGit(cwd?: string): Promise<void>;
3
+ export declare function commitCheckpoint(message: string, cwd?: string): Promise<boolean>;
4
+ export declare function getRecentCommits(limit?: number, cwd?: string): Promise<string[]>;
5
+ export declare function getGitStatus(cwd?: string): Promise<string>;
6
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/core/git.ts"],"names":[],"mappings":"AAKA,wBAAsB,SAAS,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAErE;AAED,wBAAsB,OAAO,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhE;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,GAAG,SAAgB,GAClB,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAED,wBAAsB,gBAAgB,CACpC,KAAK,SAAI,EACT,GAAG,SAAgB,GAClB,OAAO,CAAC,MAAM,EAAE,CAAC,CAQnB;AAED,wBAAsB,YAAY,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CASvE"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isGitRepo = isGitRepo;
7
+ exports.initGit = initGit;
8
+ exports.commitCheckpoint = commitCheckpoint;
9
+ exports.getRecentCommits = getRecentCommits;
10
+ exports.getGitStatus = getGitStatus;
11
+ const simple_git_1 = __importDefault(require("simple-git"));
12
+ const fs_extra_1 = __importDefault(require("fs-extra"));
13
+ const path_1 = __importDefault(require("path"));
14
+ const logger_1 = require("../utils/logger");
15
+ async function isGitRepo(cwd = process.cwd()) {
16
+ return fs_extra_1.default.existsSync(path_1.default.join(cwd, '.git'));
17
+ }
18
+ async function initGit(cwd = process.cwd()) {
19
+ const git = (0, simple_git_1.default)(cwd);
20
+ await git.init();
21
+ logger_1.logger.success('Git repository initialized.');
22
+ }
23
+ async function commitCheckpoint(message, cwd = process.cwd()) {
24
+ try {
25
+ const git = (0, simple_git_1.default)(cwd);
26
+ const status = await git.status();
27
+ if (status.files.length === 0) {
28
+ logger_1.logger.warn('Nothing to commit — working tree clean.');
29
+ return false;
30
+ }
31
+ await git.add('.');
32
+ await git.commit(message);
33
+ logger_1.logger.success(`Committed: "${message}"`);
34
+ return true;
35
+ }
36
+ catch (err) {
37
+ const msg = err instanceof Error ? err.message : String(err);
38
+ logger_1.logger.warn(`Git commit skipped: ${msg}`);
39
+ return false;
40
+ }
41
+ }
42
+ async function getRecentCommits(limit = 5, cwd = process.cwd()) {
43
+ try {
44
+ const git = (0, simple_git_1.default)(cwd);
45
+ const log = await git.log({ maxCount: limit });
46
+ return log.all.map((c) => `${c.date.slice(0, 10)} — ${c.message}`);
47
+ }
48
+ catch {
49
+ return [];
50
+ }
51
+ }
52
+ async function getGitStatus(cwd = process.cwd()) {
53
+ try {
54
+ const git = (0, simple_git_1.default)(cwd);
55
+ const status = await git.status();
56
+ const changed = status.files.length;
57
+ return changed === 0 ? 'clean' : `${changed} file(s) modified`;
58
+ }
59
+ catch {
60
+ return 'no git';
61
+ }
62
+ }
63
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/core/git.ts"],"names":[],"mappings":";;;;;AAKA,8BAEC;AAED,0BAIC;AAED,4CAsBC;AAED,4CAWC;AAED,oCASC;AA7DD,4DAAkD;AAClD,wDAA0B;AAC1B,gDAAwB;AACxB,4CAAyC;AAElC,KAAK,UAAU,SAAS,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACjD,OAAO,kBAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC;AAEM,KAAK,UAAU,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC/C,MAAM,GAAG,GAAc,IAAA,oBAAS,EAAC,GAAG,CAAC,CAAC;IACtC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IACjB,eAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAChD,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,OAAe,EACf,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAEnB,IAAI,CAAC;QACH,MAAM,GAAG,GAAc,IAAA,oBAAS,EAAC,GAAG,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QAElC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,eAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACvD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1B,eAAM,CAAC,OAAO,CAAC,eAAe,OAAO,GAAG,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,eAAM,CAAC,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,KAAK,GAAG,CAAC,EACT,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAEnB,IAAI,CAAC;QACH,MAAM,GAAG,GAAc,IAAA,oBAAS,EAAC,GAAG,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAc,IAAA,oBAAS,EAAC,GAAG,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QACpC,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,mBAAmB,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { BrainForgeConfig } from './config';
2
+ export declare function getAgentTemplates(config: BrainForgeConfig): Record<string, string>;
3
+ export declare function getCommandTemplates(config: BrainForgeConfig): Record<string, string>;
4
+ export declare function getRootFileTemplates(config: BrainForgeConfig): Record<string, string>;
5
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/core/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqTlF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAonBpF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgJrF"}