brainforge-ai 1.0.1 → 1.1.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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # ⚡ BrainForge
2
2
 
3
- > Transform any idea into a structured, AI-assisted project — with agents, slash commands, a phase roadmap, persistent memory, and a live HTML dashboard.
3
+ > Transform any idea into a structured, AI-assisted project — with agents, slash commands, a phase roadmap, persistent memory, and a live dashboard.
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/brainforge-ai.svg)](https://www.npmjs.com/package/brainforge-ai)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)
@@ -19,7 +19,7 @@ BrainForge is a CLI that installs a **structured AI development system** into an
19
19
  Instead of vibing and hoping the AI does the right thing, BrainForge forces a clean workflow:
20
20
 
21
21
  ```
22
- Idea → Plan → Research → Execute → Review → Commit → Repeat
22
+ Idea → Plan → Research → Execute → Test → Review → Commit → Repeat
23
23
  ```
24
24
 
25
25
  It works with any AI tool: **Claude Code**, **GitHub Copilot**, **Gemini CLI**, **Codex**, **Cursor**, **OpenCode**.
@@ -34,8 +34,9 @@ It works with any AI tool: **Claude Code**, **GitHub Copilot**, **Gemini CLI**,
34
34
  | No memory between sessions | Persistent project memory |
35
35
  | Hard to explain your code | `/explain-my-code` generates your defense speech |
36
36
  | Code looks too AI-perfect | Code Level Engine adapts to your real level |
37
+ | No tests | `/write-tests` generates the right tests for your level |
37
38
  | No version history | Automatic git checkpoints |
38
- | Lost in files | Live HTML dashboard |
39
+ | Lost in files | Live dashboard with auto-reload |
39
40
 
40
41
  ---
41
42
 
@@ -74,7 +75,7 @@ Answer the questions:
74
75
  - Target code level
75
76
  - Whether it's a school project
76
77
 
77
- BrainForge will generate the full structure and make the first git commit.
78
+ BrainForge generates the full structure and makes the first git commit automatically.
78
79
 
79
80
  ---
80
81
 
@@ -82,7 +83,7 @@ BrainForge will generate the full structure and make the first git commit.
82
83
 
83
84
  Open **Claude Code**, **Cursor**, or any AI tool in the project folder.
84
85
 
85
- The AI will automatically read `AGENTS.md` and know the rules.
86
+ The AI reads `AGENTS.md` automatically and knows the rules.
86
87
 
87
88
  ---
88
89
 
@@ -92,7 +93,7 @@ The AI will automatically read `AGENTS.md` and know the rules.
92
93
  ```
93
94
  /start-project
94
95
  ```
95
- Describe your idea. The AI asks questions, fills in `.brainforge/project.md`.
96
+ Describe your idea. The AI asks questions and fills in `.brainforge/project.md`.
96
97
 
97
98
  #### Step 2 — Create the roadmap
98
99
  ```
@@ -112,25 +113,31 @@ Research + planning. The AI proposes an approach and waits for your confirmation
112
113
  ```
113
114
  The AI codes **only what was planned**. Nothing more.
114
115
 
115
- #### Step 5 — Review the phase
116
+ #### Step 5 — Write tests
117
+ ```
118
+ /write-tests
119
+ ```
120
+ Generates tests adapted to your stack and code level.
121
+
122
+ #### Step 6 — Review the phase
116
123
  ```
117
124
  /review-phase 1
118
125
  ```
119
126
  Checks for bugs, dead code, complexity, and level-appropriateness.
120
127
 
121
- #### Step 6 — Save your progress
128
+ #### Step 7 — Save your progress
122
129
  ```
123
130
  /checkpoint
124
131
  ```
125
- Creates a local git commit. Never pushes.
132
+ Creates a local git commit. Never pushes automatically.
126
133
 
127
- #### Step 7Update the dashboard
128
- ```
129
- brainforge update-dashboard
130
- brainforge dashboard
134
+ #### Step 8Watch the dashboard update live
135
+ ```bash
136
+ brainforge serve
131
137
  ```
138
+ Opens `localhost:3000` — reloads automatically as you work.
132
139
 
133
- Repeat steps 3–7 for each phase.
140
+ Repeat steps 3–8 for each phase.
134
141
 
135
142
  ---
136
143
 
@@ -139,9 +146,11 @@ Repeat steps 3–7 for each phase.
139
146
  | Command | Description |
140
147
  |---------|-------------|
141
148
  | `brainforge init` | Initialize BrainForge in the current directory |
142
- | `brainforge doctor` | Health check verify all files and setup |
143
- | `brainforge dashboard` | Open the HTML dashboard in the browser |
149
+ | `brainforge serve` | Live dashboard on localhost:3000 (auto-reloads) |
150
+ | `brainforge dashboard` | Open the static HTML dashboard in the browser |
144
151
  | `brainforge update-dashboard` | Refresh dashboard data from project state |
152
+ | `brainforge doctor` | Health check — verify all files and setup |
153
+ | `brainforge guide` | Show all CLI and slash commands with project status |
145
154
  | `brainforge version` | Show version info |
146
155
 
147
156
  ---
@@ -150,28 +159,74 @@ Repeat steps 3–7 for each phase.
150
159
 
151
160
  These are prompt files in `.brainforge/commands/` — paste the command name into your AI tool.
152
161
 
162
+ ### Project Setup
163
+
164
+ | Command | What it does |
165
+ |---------|-------------|
166
+ | `/start-project` | Document your idea and gather all project info |
167
+ | `/create-roadmap` | Break project into phases (Epic › Feature › Task) |
168
+
169
+ ### Phase Workflow
170
+
153
171
  | Command | What it does |
154
172
  |---------|-------------|
155
- | `/start-project` | Document your idea, gather all project info |
156
- | `/create-roadmap` | Break project into phases (Epic > Feature > Task) |
157
173
  | `/initiate-phase N` | Research + plan phase N before any coding |
158
174
  | `/execute-phase N` | Code phase N following the plan exactly |
159
175
  | `/review-phase N` | Quality review — bugs, level check, academic check |
160
- | `/humanize-code` | Adapt code to match your real coding level |
161
- | `/explain-my-code` | Generate an explanation for a professor or team |
162
- | `/professor-check` | Detect code that looks suspiciously AI-generated |
163
176
  | `/checkpoint` | Local git commit (never pushes automatically) |
177
+
178
+ ### Code Quality
179
+
180
+ | Command | What it does |
181
+ |---------|-------------|
182
+ | `/write-tests` | Generate tests for a file, function, or phase |
183
+ | `/humanize-code` | Adapt code to match your real coding level |
164
184
  | `/debug-issue` | Systematic bug analysis and fix |
185
+
186
+ ### Student Tools
187
+
188
+ | Command | What it does |
189
+ |---------|-------------|
190
+ | `/explain-my-code` | Generate an explanation for your professor or team |
191
+ | `/professor-check` | Detect code that looks suspiciously AI-generated |
192
+ | `/generate-report` | Generate an academic report template |
193
+
194
+ ### Documentation & UI
195
+
196
+ | Command | What it does |
197
+ |---------|-------------|
165
198
  | `/design-system` | Create a UI/UX design system guide |
166
199
  | `/generate-docs` | Generate README and docs/ folder |
167
- | `/generate-report` | Generate an academic report template |
168
- | `/update-dashboard` | Refresh the HTML dashboard |
200
+ | `/update-dashboard` | Refresh the HTML dashboard data |
201
+
202
+ ---
203
+
204
+ ## The Live Dashboard
205
+
206
+ Run `brainforge serve` to open a live dashboard at `localhost:3000`.
207
+
208
+ It **auto-reloads** every time a file in `.brainforge/` changes — no manual refresh needed.
209
+
210
+ ```bash
211
+ brainforge serve # localhost:3000
212
+ brainforge serve --port 4000 # custom port
213
+ ```
214
+
215
+ It shows:
216
+ - Project name, description, stack, and level
217
+ - Phase progress bar
218
+ - Status of each phase (pending / in-progress / done)
219
+ - Recent git commits
220
+ - Known bugs
221
+ - Last architecture decisions
222
+ - Git status
223
+ - A green dot in the corner when live reload is active
169
224
 
170
225
  ---
171
226
 
172
227
  ## Code Level Engine
173
228
 
174
- BrainForge adapts all generated code to your target level:
229
+ BrainForge adapts all generated and reviewed code to your target level:
175
230
 
176
231
  | Level | Who it's for | What it produces |
177
232
  |-------|-------------|-----------------|
@@ -182,16 +237,34 @@ BrainForge adapts all generated code to your target level:
182
237
 
183
238
  ### The `academic-realistic` level
184
239
 
185
- This is the most important level for students. It produces code that:
240
+ The most important level for students. It produces code that:
186
241
 
187
242
  - ✅ Is clean enough to get a good grade
188
- - ✅ Is simple enough to explain in an oral defense
243
+ - ✅ Is simple enough to explain line by line in an oral defense
189
244
  - ✅ Has no enterprise patterns that would raise suspicion
190
245
  - ✅ Looks like it was written by a good student, not a senior engineer
191
246
  - ✅ Has natural comments — not AI-generated-sounding ones
192
247
 
193
248
  ---
194
249
 
250
+ ## `/write-tests` — Test Generator
251
+
252
+ The `/write-tests` command generates tests adapted to your project:
253
+
254
+ - **Detects the right framework** automatically (Jest, Vitest, pytest, PHPUnit…)
255
+ - **Adapts test complexity** to your code level
256
+ - **Beginner:** 2-3 tests per function, happy path only, no mocks
257
+ - **Academic-realistic:** happy path + edge cases, mocks for external services, readable names
258
+ - **Professional:** full coverage, integration tests, all error paths
259
+
260
+ ```
261
+ /write-tests src/auth/login.ts
262
+ /write-tests the login feature
263
+ /write-tests phase 2
264
+ ```
265
+
266
+ ---
267
+
195
268
  ## Project Structure
196
269
 
197
270
  After `brainforge init`, your project contains:
@@ -227,6 +300,7 @@ After `brainforge init`, your project contains:
227
300
  initiate-phase.md ← /initiate-phase
228
301
  execute-phase.md ← /execute-phase
229
302
  review-phase.md ← /review-phase
303
+ write-tests.md ← /write-tests
230
304
  humanize-code.md ← /humanize-code
231
305
  explain-my-code.md ← /explain-my-code
232
306
  professor-check.md ← /professor-check
@@ -237,7 +311,7 @@ After `brainforge init`, your project contains:
237
311
  generate-report.md ← /generate-report
238
312
  update-dashboard.md ← /update-dashboard
239
313
  dashboard/
240
- index.html ← visual dashboard (open in browser)
314
+ index.html ← visual dashboard
241
315
  style.css
242
316
  data.json
243
317
  AGENTS.md ← instructions for all AI agents
@@ -248,36 +322,9 @@ OPENAI.md ← OpenAI / Codex specific config
248
322
 
249
323
  ---
250
324
 
251
- ## The Dashboard
252
-
253
- The dashboard is a static HTML file at `.brainforge/dashboard/index.html`.
254
-
255
- It shows:
256
- - Project name, description, stack, and level
257
- - Phase progress bar
258
- - Status of each phase (pending / in-progress / done)
259
- - Recent git commits
260
- - Known bugs
261
- - Last decisions
262
- - Git status
263
-
264
- To open it:
265
-
266
- ```bash
267
- brainforge dashboard
268
- ```
269
-
270
- To refresh its data:
271
-
272
- ```bash
273
- brainforge update-dashboard
274
- ```
275
-
276
- ---
277
-
278
325
  ## Multi-AI Compatibility
279
326
 
280
- BrainForge generates configuration files for every major AI tool:
327
+ BrainForge generates config files for every major AI tool:
281
328
 
282
329
  | File | Tool |
283
330
  |------|------|
@@ -286,21 +333,14 @@ BrainForge generates configuration files for every major AI tool:
286
333
  | `OPENAI.md` | Codex / ChatGPT |
287
334
  | `AGENTS.md` | All tools (universal) |
288
335
 
289
- Each file tells the AI:
290
- - What the project is
291
- - What code level to use
292
- - How to follow the workflow
293
- - What files to read and update
294
- - Git rules (never push)
336
+ Each file tells the AI: what the project is, what code level to use, how to follow the workflow, what files to update, and git rules (never push).
295
337
 
296
338
  ---
297
339
 
298
340
  ## Git Rules
299
341
 
300
- BrainForge manages git for you — safely:
301
-
302
- | Action | Allowed |
303
- |--------|---------|
342
+ | Action | Status |
343
+ |--------|--------|
304
344
  | `git init` | ✅ Auto on first init |
305
345
  | `git add` + `git commit` | ✅ Via `/checkpoint` |
306
346
  | `git push` | ❌ Never automatic |
@@ -317,24 +357,24 @@ You always control when and where you push.
317
357
  npx brainforge-ai init
318
358
  # → choose "academic-realistic" code level
319
359
  # → choose "yes" for academic project
320
- # → follow workflow with /start-project → /create-roadmap → phases
321
- # → use /professor-check before submission
322
- # → use /generate-report for the written report
360
+ # → /start-project → /create-roadmap → phases
361
+ # → /write-tests before each review
362
+ # → /professor-check before submission
363
+ # → /generate-report for the written report
323
364
  ```
324
365
 
325
366
  ### Personal MVP
326
367
  ```bash
327
368
  npx brainforge-ai init
328
369
  # → choose "intermediate" or "professional"
329
- # → define your stack and features during /start-project
330
- # → build phase by phase
370
+ # → brainforge serve ← keep the dashboard open while you build
331
371
  ```
332
372
 
333
373
  ### Learning a new stack
334
374
  ```bash
335
375
  npx brainforge-ai init
336
376
  # → choose "beginner" or "intermediate"
337
- # → use /explain-my-code after each phase to understand what was built
377
+ # → /explain-my-code after each phase to understand what was built
338
378
  ```
339
379
 
340
380
  ---
@@ -358,6 +398,8 @@ npm link
358
398
 
359
399
  # Test locally
360
400
  brainforge init
401
+ brainforge guide
402
+ brainforge serve
361
403
  brainforge doctor
362
404
  ```
363
405
 
package/dist/cli.js CHANGED
@@ -6,6 +6,8 @@ const init_1 = require("./commands/init");
6
6
  const doctor_1 = require("./commands/doctor");
7
7
  const dashboard_1 = require("./commands/dashboard");
8
8
  const updateDashboard_1 = require("./commands/updateDashboard");
9
+ const serve_1 = require("./commands/serve");
10
+ const help_1 = require("./commands/help");
9
11
  const program = new commander_1.Command();
10
12
  program
11
13
  .name('brainforge')
@@ -35,6 +37,19 @@ program
35
37
  .action(async () => {
36
38
  await (0, updateDashboard_1.updateDashboardCommand)();
37
39
  });
40
+ program
41
+ .command('serve')
42
+ .description('Start a local server with live reload for the dashboard')
43
+ .option('-p, --port <number>', 'Port to listen on', '3000')
44
+ .action(async (opts) => {
45
+ await (0, serve_1.serveCommand)(parseInt(opts.port, 10));
46
+ });
47
+ program
48
+ .command('guide')
49
+ .description('Show all CLI and slash commands with project status')
50
+ .action(() => {
51
+ (0, help_1.helpCommand)();
52
+ });
38
53
  program
39
54
  .command('version')
40
55
  .description('Show version information')
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAA8C;AAC9C,8CAAkD;AAClD,oDAAwD;AACxD,gEAAoE;AAEpE,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CACV,yGAAyG,CAC1G;KACA,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAA,kBAAW,GAAE,CAAC;AACtB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAA,sBAAa,GAAE,CAAC;AACxB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,GAAG,EAAE;IACX,IAAA,4BAAgB,GAAE,CAAC;AACrB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAA,wCAAsB,GAAE,CAAC;AACjC,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAA8C;AAC9C,8CAAkD;AAClD,oDAAwD;AACxD,gEAAoE;AACpE,4CAAgD;AAChD,0CAA8C;AAE9C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CACV,yGAAyG,CAC1G;KACA,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAA,kBAAW,GAAE,CAAC;AACtB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAA,sBAAa,GAAE,CAAC;AACxB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,GAAG,EAAE;IACX,IAAA,4BAAgB,GAAE,CAAC;AACrB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAA,wCAAsB,GAAE,CAAC;AACjC,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,CAAC;KAC1D,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,IAAA,oBAAY,EAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,GAAG,EAAE;IACX,IAAA,kBAAW,GAAE,CAAC;AAChB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function helpCommand(): void;
2
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAyDA,wBAAgB,WAAW,IAAI,IAAI,CAmFlC"}
@@ -0,0 +1,131 @@
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.helpCommand = helpCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const config_1 = require("../core/config");
9
+ const logger_1 = require("../utils/logger");
10
+ const CLI_COMMANDS = [
11
+ { cmd: 'brainforge init', desc: 'Initialize BrainForge in the current directory' },
12
+ { cmd: 'brainforge serve', desc: 'Live dashboard on localhost:3000 (auto-reloads)' },
13
+ { cmd: 'brainforge dashboard', desc: 'Open the HTML dashboard in the browser' },
14
+ { cmd: 'brainforge update-dashboard', desc: 'Refresh dashboard data from project state' },
15
+ { cmd: 'brainforge doctor', desc: 'Health check — verify setup and files' },
16
+ { cmd: 'brainforge help', desc: 'Show this help screen' },
17
+ { cmd: 'brainforge version', desc: 'Show version info' },
18
+ ];
19
+ const SLASH_COMMANDS = [
20
+ {
21
+ group: 'Project Setup',
22
+ commands: [
23
+ { cmd: '/start-project', desc: 'Document your idea and gather project info' },
24
+ { cmd: '/create-roadmap', desc: 'Break project into phases (Epic › Feature › Task)' },
25
+ ],
26
+ },
27
+ {
28
+ group: 'Phase Workflow',
29
+ commands: [
30
+ { cmd: '/initiate-phase N', desc: 'Research + plan phase N before any coding' },
31
+ { cmd: '/execute-phase N', desc: 'Code phase N following the plan exactly' },
32
+ { cmd: '/review-phase N', desc: 'Quality review — bugs, level check, academic check' },
33
+ { cmd: '/checkpoint', desc: 'Local git commit (never pushes automatically)' },
34
+ ],
35
+ },
36
+ {
37
+ group: 'Code Quality',
38
+ commands: [
39
+ { cmd: '/write-tests', desc: 'Generate tests for a file, function, or phase' },
40
+ { cmd: '/humanize-code', desc: 'Adapt code to match your real coding level' },
41
+ { cmd: '/debug-issue', desc: 'Systematic bug analysis and fix' },
42
+ ],
43
+ },
44
+ {
45
+ group: 'Student Tools',
46
+ commands: [
47
+ { cmd: '/explain-my-code', desc: 'Generate an explanation for your professor or team' },
48
+ { cmd: '/professor-check', desc: 'Detect code that looks suspiciously AI-generated' },
49
+ { cmd: '/generate-report', desc: 'Generate an academic report template' },
50
+ ],
51
+ },
52
+ {
53
+ group: 'Documentation & UI',
54
+ commands: [
55
+ { cmd: '/design-system', desc: 'Create a UI/UX design system guide' },
56
+ { cmd: '/generate-docs', desc: 'Generate README and docs/ folder' },
57
+ { cmd: '/update-dashboard', desc: 'Refresh the HTML dashboard data' },
58
+ ],
59
+ },
60
+ ];
61
+ function helpCommand() {
62
+ const cwd = process.cwd();
63
+ const initialized = (0, config_1.configExists)(cwd);
64
+ console.log();
65
+ console.log(chalk_1.default.bold.magenta(' ⚡ BrainForge') + chalk_1.default.gray(' — structured AI development'));
66
+ console.log();
67
+ // Project status banner
68
+ if (initialized) {
69
+ try {
70
+ const config = (0, config_1.readConfig)(cwd);
71
+ const bar = progressBar(config.currentPhase, config.totalPhases);
72
+ console.log(chalk_1.default.gray(' Project : ') + chalk_1.default.white(config.projectName));
73
+ console.log(chalk_1.default.gray(' Level : ') + chalk_1.default.cyan(config.codeLevel) +
74
+ chalk_1.default.gray(' · Stack: ') + chalk_1.default.cyan(config.stack.join(', ')));
75
+ console.log(chalk_1.default.gray(' Progress: ') + bar +
76
+ chalk_1.default.gray(` ${config.currentPhase}/${config.totalPhases} phases`));
77
+ console.log();
78
+ }
79
+ catch {
80
+ // skip if config unreadable
81
+ }
82
+ }
83
+ else {
84
+ console.log(chalk_1.default.yellow(' ⚠ Not initialized.') +
85
+ chalk_1.default.gray(' Run: ') + chalk_1.default.white('brainforge init'));
86
+ console.log();
87
+ }
88
+ // CLI Commands
89
+ logger_1.logger.divider();
90
+ console.log(chalk_1.default.bold.white(' CLI Commands\n'));
91
+ for (const { cmd, desc } of CLI_COMMANDS) {
92
+ console.log(' ' + chalk_1.default.green(cmd.padEnd(34)) + chalk_1.default.gray(desc));
93
+ }
94
+ // Slash Commands
95
+ console.log();
96
+ logger_1.logger.divider();
97
+ console.log(chalk_1.default.bold.white(' Slash Commands') + chalk_1.default.gray(' (paste into your AI tool)\n'));
98
+ for (const group of SLASH_COMMANDS) {
99
+ console.log(chalk_1.default.bold.yellow(' ' + group.group));
100
+ for (const { cmd, desc } of group.commands) {
101
+ console.log(' ' + chalk_1.default.cyan(cmd.padEnd(22)) + chalk_1.default.gray(desc));
102
+ }
103
+ console.log();
104
+ }
105
+ // Workflow reminder
106
+ logger_1.logger.divider();
107
+ console.log(chalk_1.default.bold.white(' Workflow\n'));
108
+ const steps = [
109
+ '/start-project',
110
+ '/create-roadmap',
111
+ '/initiate-phase N',
112
+ '/execute-phase N',
113
+ '/write-tests',
114
+ '/review-phase N',
115
+ '/checkpoint',
116
+ ];
117
+ console.log(' ' + steps.map((s) => chalk_1.default.cyan(s)).join(chalk_1.default.gray(' → ')));
118
+ console.log();
119
+ // Docs link
120
+ console.log(chalk_1.default.gray(' Docs: ') +
121
+ chalk_1.default.underline('https://github.com/MEHDImp4/brainforge-ai'));
122
+ console.log();
123
+ }
124
+ function progressBar(current, total) {
125
+ if (total === 0)
126
+ return chalk_1.default.gray('[──────────]');
127
+ const filled = Math.round((current / total) * 10);
128
+ const bar = '█'.repeat(filled) + '─'.repeat(10 - filled);
129
+ return chalk_1.default.green('[') + chalk_1.default.green(bar) + chalk_1.default.green(']') + ' ';
130
+ }
131
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function serveCommand(port?: number): Promise<void>;
2
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAgBA,wBAAsB,YAAY,CAAC,IAAI,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA6H7D"}
@@ -0,0 +1,162 @@
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.serveCommand = serveCommand;
7
+ const http_1 = __importDefault(require("http"));
8
+ const fs_extra_1 = __importDefault(require("fs-extra"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const config_1 = require("../core/config");
11
+ const dashboard_1 = require("../core/dashboard");
12
+ const logger_1 = require("../utils/logger");
13
+ const MIME = {
14
+ '.html': 'text/html',
15
+ '.css': 'text/css',
16
+ '.js': 'application/javascript',
17
+ '.json': 'application/json',
18
+ };
19
+ async function serveCommand(port = 3000) {
20
+ const cwd = process.cwd();
21
+ if (!(0, config_1.configExists)(cwd)) {
22
+ logger_1.logger.error('BrainForge not initialized. Run: brainforge init');
23
+ return;
24
+ }
25
+ const brainDir = (0, config_1.getBrainforgeDir)(cwd);
26
+ const dashDir = path_1.default.join(brainDir, 'dashboard');
27
+ const clients = new Set();
28
+ // Debounce helper so rapid file saves don't spam reloads
29
+ let debounceTimer = null;
30
+ function scheduleReload() {
31
+ if (debounceTimer)
32
+ clearTimeout(debounceTimer);
33
+ debounceTimer = setTimeout(async () => {
34
+ try {
35
+ const config = (0, config_1.readConfig)(cwd);
36
+ const data = await (0, dashboard_1.generateDashboardData)(config, cwd);
37
+ await (0, dashboard_1.writeDashboardData)(data, cwd);
38
+ broadcast(clients, 'reload');
39
+ logger_1.logger.info('Dashboard refreshed — reloading browsers…');
40
+ }
41
+ catch (err) {
42
+ logger_1.logger.warn('Reload failed: ' + (err instanceof Error ? err.message : String(err)));
43
+ }
44
+ }, 300);
45
+ }
46
+ // Watch the whole .brainforge/ directory recursively
47
+ fs_extra_1.default.watch(brainDir, { recursive: true }, (event, filename) => {
48
+ if (filename && filename.includes('dashboard'))
49
+ return; // avoid loop
50
+ scheduleReload();
51
+ });
52
+ const server = http_1.default.createServer(async (req, res) => {
53
+ const url = req.url ?? '/';
54
+ // SSE endpoint
55
+ if (url === '/events') {
56
+ res.writeHead(200, {
57
+ 'Content-Type': 'text/event-stream',
58
+ 'Cache-Control': 'no-cache',
59
+ Connection: 'keep-alive',
60
+ 'Access-Control-Allow-Origin': '*',
61
+ });
62
+ res.write('data: connected\n\n');
63
+ clients.add(res);
64
+ req.on('close', () => clients.delete(res));
65
+ return;
66
+ }
67
+ // Static file serving
68
+ let filePath = url === '/' ? path_1.default.join(dashDir, 'index.html') : path_1.default.join(dashDir, url);
69
+ filePath = path_1.default.normalize(filePath);
70
+ // Security: prevent directory traversal
71
+ if (!filePath.startsWith(path_1.default.normalize(dashDir))) {
72
+ res.writeHead(403);
73
+ res.end('Forbidden');
74
+ return;
75
+ }
76
+ if (!fs_extra_1.default.existsSync(filePath)) {
77
+ res.writeHead(404);
78
+ res.end('Not found');
79
+ return;
80
+ }
81
+ const ext = path_1.default.extname(filePath);
82
+ const mime = MIME[ext] ?? 'application/octet-stream';
83
+ // Inject SSE client into HTML
84
+ if (ext === '.html') {
85
+ let html = fs_extra_1.default.readFileSync(filePath, 'utf-8');
86
+ html = injectSseClient(html);
87
+ res.writeHead(200, { 'Content-Type': 'text/html' });
88
+ res.end(html);
89
+ return;
90
+ }
91
+ res.writeHead(200, { 'Content-Type': mime });
92
+ fs_extra_1.default.createReadStream(filePath).pipe(res);
93
+ });
94
+ // Initial data generation before starting
95
+ try {
96
+ const config = (0, config_1.readConfig)(cwd);
97
+ const data = await (0, dashboard_1.generateDashboardData)(config, cwd);
98
+ await (0, dashboard_1.writeDashboardData)(data, cwd);
99
+ }
100
+ catch {
101
+ // non-fatal
102
+ }
103
+ server.listen(port, () => {
104
+ logger_1.logger.title('⚡ BrainForge Dashboard — Live');
105
+ logger_1.logger.divider();
106
+ logger_1.logger.success(`Running at http://localhost:${port}`);
107
+ logger_1.logger.info('Dashboard reloads automatically when .brainforge/ files change.');
108
+ logger_1.logger.info('Press Ctrl+C to stop.');
109
+ logger_1.logger.divider();
110
+ // Try to open browser
111
+ try {
112
+ const { execSync } = require('child_process');
113
+ const open = process.platform === 'win32'
114
+ ? `start http://localhost:${port}`
115
+ : process.platform === 'darwin'
116
+ ? `open http://localhost:${port}`
117
+ : `xdg-open http://localhost:${port}`;
118
+ execSync(open, { stdio: 'ignore' });
119
+ }
120
+ catch {
121
+ // ignore if can't open
122
+ }
123
+ });
124
+ server.on('error', (err) => {
125
+ if (err.code === 'EADDRINUSE') {
126
+ logger_1.logger.error(`Port ${port} is already in use. Try: brainforge serve --port ${port + 1}`);
127
+ }
128
+ else {
129
+ logger_1.logger.error(err.message);
130
+ }
131
+ process.exit(1);
132
+ });
133
+ }
134
+ function broadcast(clients, event) {
135
+ for (const client of clients) {
136
+ client.write(`event: ${event}\ndata: ${Date.now()}\n\n`);
137
+ }
138
+ }
139
+ function injectSseClient(html) {
140
+ const script = `
141
+ <script>
142
+ (function () {
143
+ const es = new EventSource('/events');
144
+ es.addEventListener('reload', () => location.reload());
145
+ es.addEventListener('error', () => {
146
+ setTimeout(() => location.reload(), 2000);
147
+ });
148
+ // Show a small indicator in the corner
149
+ const dot = document.createElement('div');
150
+ dot.title = 'BrainForge live reload active';
151
+ dot.style.cssText = 'position:fixed;bottom:12px;right:12px;width:10px;height:10px;border-radius:50%;background:#22c55e;box-shadow:0 0 6px #22c55e;z-index:9999;';
152
+ document.addEventListener('DOMContentLoaded', () => document.body.appendChild(dot));
153
+ es.onopen = () => { dot.style.background = '#22c55e'; dot.style.boxShadow = '0 0 6px #22c55e'; };
154
+ es.onerror = () => { dot.style.background = '#ef4444'; dot.style.boxShadow = '0 0 6px #ef4444'; };
155
+ })();
156
+ </script>`;
157
+ // Inject before </body> if present, otherwise append
158
+ return html.includes('</body>')
159
+ ? html.replace('</body>', script + '\n</body>')
160
+ : html + script;
161
+ }
162
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
@@ -1 +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"}
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,CAytBpF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgJrF"}
@@ -917,6 +917,104 @@ brainforge update-dashboard
917
917
 
918
918
  - Updated \`.brainforge/dashboard/data.json\`
919
919
  - Message: "Dashboard updated. Open .brainforge/dashboard/index.html"
920
+ `,
921
+ 'write-tests.md': `# /write-tests
922
+
923
+ **Objective:** Generate tests for a file, function, or entire phase.
924
+
925
+ ## Usage
926
+
927
+ \`\`\`
928
+ /write-tests [file or feature or phase number]
929
+ \`\`\`
930
+
931
+ Examples:
932
+ \`\`\`
933
+ /write-tests src/auth/login.ts
934
+ /write-tests the login feature
935
+ /write-tests phase 2
936
+ \`\`\`
937
+
938
+ ## Context to Read First
939
+
940
+ - \`.brainforge/config.json\` — stack and code level
941
+ - \`.brainforge/memory/coding-style.md\` — test style rules
942
+ - Target file(s) to test
943
+
944
+ ## Steps
945
+
946
+ 1. Read the target file(s) and understand the logic
947
+ 2. Identify what needs to be tested:
948
+ - Pure functions → unit tests
949
+ - API routes → integration tests
950
+ - UI components → component tests
951
+ 3. Choose the right test framework for the stack (see below)
952
+ 4. Write tests at **${config.codeLevel}** complexity level
953
+ 5. Place test files next to source or in a \`tests/\` folder
954
+ 6. Verify tests pass conceptually before writing
955
+
956
+ ## Test Framework by Stack
957
+
958
+ | Stack | Framework | Command |
959
+ |-------|-----------|---------|
960
+ | Node.js / TypeScript | Jest or Vitest | \`npm test\` |
961
+ | React | Vitest + Testing Library | \`npm test\` |
962
+ | Next.js | Jest + Testing Library | \`npm test\` |
963
+ | Python | pytest | \`pytest\` |
964
+ | Laravel | PHPUnit | \`php artisan test\` |
965
+
966
+ ## What to Test (by level)
967
+
968
+ ### ${config.codeLevel === 'beginner' ? 'beginner' : config.codeLevel === 'academic-realistic' ? 'academic-realistic' : config.codeLevel === 'professional' ? 'professional' : 'intermediate'}
969
+
970
+ ${config.codeLevel === 'beginner'
971
+ ? `- Test the main happy path only
972
+ - 2-3 tests per function maximum
973
+ - Simple assertions (toBe, toEqual)
974
+ - No mocks — test real behavior
975
+ - Comments explaining what each test does`
976
+ : config.codeLevel === 'intermediate'
977
+ ? `- Happy path + main edge cases
978
+ - Group tests with describe()
979
+ - Simple mocks for external dependencies
980
+ - Test error cases for user inputs
981
+ - Aim for ~60% coverage on critical files`
982
+ : config.codeLevel === 'academic-realistic'
983
+ ? `- Happy path + 2-3 edge cases per function
984
+ - Group with describe(), use clear test names
985
+ - Mock external services (DB, API calls)
986
+ - Test error handling on inputs
987
+ - Coverage enough to show you care — not 100%
988
+ - Test names readable as plain English sentences`
989
+ : `- Full happy path + all edge cases
990
+ - Mock all external dependencies
991
+ - Test error boundaries and failure modes
992
+ - Aim for 80%+ coverage on business logic
993
+ - Integration tests for API endpoints
994
+ - Snapshot tests for stable UI components`}
995
+
996
+ ## Test File Naming
997
+
998
+ \`\`\`
999
+ src/auth/login.ts → src/auth/login.test.ts
1000
+ src/utils/format.ts → src/utils/format.test.ts
1001
+ src/pages/Home.tsx → src/pages/Home.test.tsx
1002
+ \`\`\`
1003
+
1004
+ ## Rules
1005
+
1006
+ - Do NOT test implementation details — test behavior
1007
+ - Do NOT write tests that always pass (useless assertions)
1008
+ - Keep test files under 150 lines — split if needed
1009
+ - Each test must have a clear, readable name
1010
+ - NEVER skip failing tests with \`.skip\` — fix them
1011
+
1012
+ ## After Writing Tests
1013
+
1014
+ 1. Add test script to \`package.json\` if missing
1015
+ 2. Run the tests mentally to verify they make sense
1016
+ 3. Update \`.brainforge/phases/phase-XX.md\` checklist
1017
+ 4. Suggest: \`/checkpoint\` to commit the tests
920
1018
  `,
921
1019
  };
922
1020
  }
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/core/templates.ts"],"names":[],"mappings":";;AAEA,8CAqTC;AAED,kDAonBC;AAED,oDAgJC;AA7jCD,SAAgB,iBAAiB,CAAC,MAAwB;IACxD,OAAO;QACL,cAAc,EAAE;;;eAGL,MAAM,CAAC,WAAW;aACpB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;sCASE,MAAM,CAAC,SAAS;;;oDAGF,MAAM,CAAC,SAAS;;;;;;;;;;;;;;;;;;CAkBnE;QAEG,eAAe,EAAE;;;eAGN,MAAM,CAAC,WAAW;;;;;;;;;;;;;;;;;6BAiBJ,MAAM,CAAC,SAAS;;;;;;;;;;;;;;;CAe5C;QAEG,YAAY,EAAE;;;eAGH,MAAM,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;kCAoBC,MAAM,CAAC,SAAS;;;;;;;;;;;;;;;CAejD;QAEG,UAAU,EAAE;;;eAGD,MAAM,CAAC,WAAW;kBACf,MAAM,CAAC,SAAS;;;;;;;;;cASpB,MAAM,CAAC,SAAS;;;;;;;iBAOb,MAAM,CAAC,SAAS;;EAG/B,MAAM,CAAC,SAAS,KAAK,oBAAoB;YACvC,CAAC,CAAC;;;;gCAI0B;YAC5B,CAAC,CAAC,MAAM,CAAC,SAAS,KAAK,UAAU;gBACjC,CAAC,CAAC;;4CAEsC;gBACxC,CAAC,CAAC,MAAM,CAAC,SAAS,KAAK,cAAc;oBACrC,CAAC,CAAC;;mCAE6B;oBAC/B,CAAC,CAAC;;yBAGN;;;;;;;CAOC;QAEG,aAAa,EAAE;;;eAGJ,MAAM,CAAC,WAAW;kBACf,MAAM,CAAC,SAAS;;;;;;;;;;;uBAWX,MAAM,CAAC,SAAS;;;qDAGc,MAAM,CAAC,SAAS;;;;;;8CAMvB,MAAM,CAAC,SAAS;;;;;;;;;;;;;;;;;CAiB7D;QAEG,YAAY,EAAE;;;eAGH,MAAM,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiChC;QAEG,cAAc,EAAE;;;eAGL,MAAM,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BhC;QAEG,oBAAoB,EAAE;;;eAGX,MAAM,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;CAuBhC;KACE,CAAC;AACJ,CAAC;AAED,SAAgB,mBAAmB,CAAC,MAAwB;IAC1D,OAAO;QACL,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDvB;QAEG,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAqCE,MAAM,CAAC,SAAS;;;;;;;CAO1C;QAEG,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAkCE,MAAM,CAAC,SAAS;;;;;;CAM1C;QAEG,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA8BV,MAAM,CAAC,SAAS;;;;;;;;;;;;;;;;CAgB7B;QAEG,iBAAiB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBA6BJ,MAAM,CAAC,SAAS;;uCAEI,MAAM,CAAC,SAAS;;;;;;;;;;;;;;;;;;CAkBtD;QAEG,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;yCAmBiB,MAAM,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAoCxB,MAAM,CAAC,SAAS;CAChD;QAEG,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDzB;QAEG,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;kCAsBQ,MAAM,CAAC,SAAS;;;;;;;;;;;;;;;;;CAiBjD;QAEG,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CpB;QAEG,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCrB;QAEG,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BvB;QAEG,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCvB;QAEG,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCzB;QAEG,qBAAqB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqC1B;KACE,CAAC;AACJ,CAAC;AAED,SAAgB,oBAAoB,CAAC,MAAwB;IAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO;QACL,WAAW,EAAE;;eAEF,MAAM,CAAC,WAAW;aACpB,QAAQ;kBACH,MAAM,CAAC,SAAS;kBAChB,MAAM,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;cAyBpB,MAAM,CAAC,SAAS;;;;;;;;;;;;;;;;CAgB7B;QAEG,WAAW,EAAE;;eAEF,MAAM,CAAC,WAAW;aACpB,QAAQ;;;;;;;;;;;;YAYT,MAAM,CAAC,SAAS;;;;;;;;;;;;;;;;;;CAkB3B;QAEG,WAAW,EAAE;;eAEF,MAAM,CAAC,WAAW;aACpB,QAAQ;;;;;;;;;;;;;iBAaJ,MAAM,CAAC,SAAS;;;;;;;;;;;CAWhC;QAEG,WAAW,EAAE;;eAEF,MAAM,CAAC,WAAW;aACpB,QAAQ;;;;;;;;;iBASJ,MAAM,CAAC,SAAS;;qBAEZ,MAAM,CAAC,SAAS;;;;;;;;;;;;;CAapC;KACE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/core/templates.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brainforge-ai",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "CLI to transform a vague idea into a structured, AI-assisted project with agents, slash commands, memory, and a live dashboard",
5
5
  "keywords": [
6
6
  "ai",