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,324 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDashboardHtml = getDashboardHtml;
4
+ exports.getDashboardCss = getDashboardCss;
5
+ function getDashboardHtml() {
6
+ return `<!DOCTYPE html>
7
+ <html lang="en">
8
+ <head>
9
+ <meta charset="UTF-8" />
10
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
11
+ <title>BrainForge Dashboard</title>
12
+ <link rel="stylesheet" href="style.css" />
13
+ </head>
14
+ <body>
15
+ <div class="container">
16
+ <header class="header">
17
+ <div class="logo">⚡ BrainForge</div>
18
+ <div id="updated-at" class="updated-at"></div>
19
+ </header>
20
+
21
+ <section class="project-card">
22
+ <h1 id="project-name"></h1>
23
+ <p id="project-description" class="description"></p>
24
+ <div class="meta-grid">
25
+ <div class="meta-item"><span class="label">Type</span><span id="project-type"></span></div>
26
+ <div class="meta-item"><span class="label">Stack</span><span id="project-stack"></span></div>
27
+ <div class="meta-item"><span class="label">User Level</span><span id="user-level"></span></div>
28
+ <div class="meta-item"><span class="label">Code Level</span><span id="code-level" class="badge"></span></div>
29
+ <div class="meta-item"><span class="label">Git</span><span id="git-status"></span></div>
30
+ </div>
31
+ </section>
32
+
33
+ <section class="progress-section">
34
+ <div class="section-header">
35
+ <h2>Phases</h2>
36
+ <span id="phase-counter" class="counter"></span>
37
+ </div>
38
+ <div class="progress-bar-wrap">
39
+ <div id="progress-bar" class="progress-bar"></div>
40
+ </div>
41
+ <div id="phases-list" class="phases-list"></div>
42
+ </section>
43
+
44
+ <div class="two-col">
45
+ <section class="card">
46
+ <h2>Recent Commits</h2>
47
+ <ul id="commits-list" class="list"></ul>
48
+ </section>
49
+
50
+ <section class="card">
51
+ <h2>Known Bugs</h2>
52
+ <ul id="bugs-list" class="list"></ul>
53
+ </section>
54
+ </div>
55
+
56
+ <section class="card">
57
+ <h2>Last Decisions</h2>
58
+ <ul id="decisions-list" class="list"></ul>
59
+ </section>
60
+
61
+ <footer class="footer">
62
+ Powered by <strong>BrainForge</strong> — structured AI development
63
+ </footer>
64
+ </div>
65
+
66
+ <script>
67
+ async function loadData() {
68
+ try {
69
+ const res = await fetch('data.json?t=' + Date.now());
70
+ const d = await res.json();
71
+
72
+ document.title = 'BrainForge — ' + d.projectName;
73
+ document.getElementById('project-name').textContent = d.projectName;
74
+ document.getElementById('project-description').textContent = d.description || 'No description yet.';
75
+ document.getElementById('project-type').textContent = d.projectType || '—';
76
+ document.getElementById('project-stack').textContent = (d.stack || []).join(', ') || '—';
77
+ document.getElementById('user-level').textContent = d.userLevel || '—';
78
+ document.getElementById('code-level').textContent = d.codeLevel || '—';
79
+ document.getElementById('git-status').textContent = d.gitStatus || '—';
80
+ document.getElementById('updated-at').textContent = 'Updated: ' + new Date(d.updatedAt).toLocaleString();
81
+
82
+ const done = (d.phases || []).filter(p => p.status === 'done').length;
83
+ const total = d.totalPhases || d.phases?.length || 0;
84
+ document.getElementById('phase-counter').textContent = done + ' / ' + total + ' done';
85
+ const pct = total > 0 ? Math.round((done / total) * 100) : 0;
86
+ document.getElementById('progress-bar').style.width = pct + '%';
87
+ document.getElementById('progress-bar').textContent = pct + '%';
88
+
89
+ const phasesList = document.getElementById('phases-list');
90
+ (d.phases || []).forEach(p => {
91
+ const div = document.createElement('div');
92
+ div.className = 'phase-item ' + p.status;
93
+ div.innerHTML = '<span class="phase-num">' + String(p.id).padStart(2,'0') + '</span>'
94
+ + '<span class="phase-title">' + p.title + '</span>'
95
+ + '<span class="phase-status ' + p.status + '">' + p.status + '</span>';
96
+ phasesList.appendChild(div);
97
+ });
98
+
99
+ renderList('commits-list', d.recentCommits, 'No commits yet.');
100
+ renderList('bugs-list', d.knownBugs, 'No bugs tracked.');
101
+ renderList('decisions-list', d.decisions, 'No decisions recorded.');
102
+ } catch (e) {
103
+ document.body.innerHTML += '<p style="color:red;padding:1rem">Error loading data.json: ' + e.message + '</p>';
104
+ }
105
+ }
106
+
107
+ function renderList(id, items, empty) {
108
+ const el = document.getElementById(id);
109
+ if (!items || items.length === 0) {
110
+ el.innerHTML = '<li class="empty">' + empty + '</li>';
111
+ return;
112
+ }
113
+ el.innerHTML = items.map(i => '<li>' + i + '</li>').join('');
114
+ }
115
+
116
+ loadData();
117
+ </script>
118
+ </body>
119
+ </html>`;
120
+ }
121
+ function getDashboardCss() {
122
+ return `*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
123
+
124
+ :root {
125
+ --bg: #0f172a;
126
+ --surface: #1e293b;
127
+ --surface2: #273549;
128
+ --primary: #6366f1;
129
+ --primary-light: #818cf8;
130
+ --success: #22c55e;
131
+ --warning: #f59e0b;
132
+ --error: #ef4444;
133
+ --text: #f1f5f9;
134
+ --muted: #94a3b8;
135
+ --border: #334155;
136
+ --radius: 10px;
137
+ }
138
+
139
+ body {
140
+ background: var(--bg);
141
+ color: var(--text);
142
+ font-family: 'Inter', system-ui, -apple-system, sans-serif;
143
+ font-size: 15px;
144
+ line-height: 1.6;
145
+ min-height: 100vh;
146
+ }
147
+
148
+ .container {
149
+ max-width: 1100px;
150
+ margin: 0 auto;
151
+ padding: 2rem 1.5rem;
152
+ }
153
+
154
+ .header {
155
+ display: flex;
156
+ justify-content: space-between;
157
+ align-items: center;
158
+ margin-bottom: 2rem;
159
+ }
160
+
161
+ .logo {
162
+ font-size: 1.4rem;
163
+ font-weight: 700;
164
+ color: var(--primary-light);
165
+ letter-spacing: -0.5px;
166
+ }
167
+
168
+ .updated-at { color: var(--muted); font-size: 0.8rem; }
169
+
170
+ .project-card {
171
+ background: var(--surface);
172
+ border: 1px solid var(--border);
173
+ border-radius: var(--radius);
174
+ padding: 1.75rem;
175
+ margin-bottom: 1.5rem;
176
+ }
177
+
178
+ h1 { font-size: 1.6rem; font-weight: 700; margin-bottom: 0.4rem; }
179
+ h2 { font-size: 1.05rem; font-weight: 600; margin-bottom: 1rem; color: var(--primary-light); }
180
+
181
+ .description { color: var(--muted); margin-bottom: 1.25rem; }
182
+
183
+ .meta-grid {
184
+ display: grid;
185
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
186
+ gap: 0.75rem;
187
+ }
188
+
189
+ .meta-item {
190
+ background: var(--surface2);
191
+ border-radius: 8px;
192
+ padding: 0.6rem 0.9rem;
193
+ display: flex;
194
+ flex-direction: column;
195
+ gap: 2px;
196
+ }
197
+
198
+ .label { font-size: 0.72rem; color: var(--muted); text-transform: uppercase; letter-spacing: 0.5px; }
199
+
200
+ .badge {
201
+ display: inline-block;
202
+ background: var(--primary);
203
+ color: #fff;
204
+ border-radius: 20px;
205
+ padding: 1px 10px;
206
+ font-size: 0.8rem;
207
+ font-weight: 600;
208
+ width: fit-content;
209
+ }
210
+
211
+ .progress-section {
212
+ background: var(--surface);
213
+ border: 1px solid var(--border);
214
+ border-radius: var(--radius);
215
+ padding: 1.5rem;
216
+ margin-bottom: 1.5rem;
217
+ }
218
+
219
+ .section-header {
220
+ display: flex;
221
+ justify-content: space-between;
222
+ align-items: center;
223
+ margin-bottom: 0.75rem;
224
+ }
225
+
226
+ .counter { color: var(--muted); font-size: 0.85rem; }
227
+
228
+ .progress-bar-wrap {
229
+ background: var(--surface2);
230
+ border-radius: 20px;
231
+ height: 22px;
232
+ overflow: hidden;
233
+ margin-bottom: 1.25rem;
234
+ }
235
+
236
+ .progress-bar {
237
+ background: linear-gradient(90deg, var(--primary), var(--primary-light));
238
+ height: 100%;
239
+ border-radius: 20px;
240
+ display: flex;
241
+ align-items: center;
242
+ justify-content: center;
243
+ font-size: 0.75rem;
244
+ font-weight: 600;
245
+ color: #fff;
246
+ min-width: 2rem;
247
+ transition: width 0.5s ease;
248
+ }
249
+
250
+ .phases-list { display: flex; flex-direction: column; gap: 0.5rem; }
251
+
252
+ .phase-item {
253
+ display: flex;
254
+ align-items: center;
255
+ gap: 0.75rem;
256
+ padding: 0.6rem 0.9rem;
257
+ background: var(--surface2);
258
+ border-radius: 8px;
259
+ border-left: 3px solid var(--border);
260
+ }
261
+
262
+ .phase-item.done { border-left-color: var(--success); }
263
+ .phase-item.in-progress { border-left-color: var(--primary); }
264
+ .phase-item.pending { border-left-color: var(--border); }
265
+
266
+ .phase-num { color: var(--muted); font-size: 0.8rem; font-weight: 600; min-width: 24px; }
267
+ .phase-title { flex: 1; font-size: 0.9rem; }
268
+
269
+ .phase-status {
270
+ font-size: 0.72rem;
271
+ font-weight: 600;
272
+ padding: 2px 8px;
273
+ border-radius: 20px;
274
+ text-transform: capitalize;
275
+ }
276
+ .phase-status.done { background: #14532d; color: var(--success); }
277
+ .phase-status.in-progress { background: #1e1b4b; color: var(--primary-light); }
278
+ .phase-status.pending { background: var(--surface); color: var(--muted); }
279
+
280
+ .two-col {
281
+ display: grid;
282
+ grid-template-columns: 1fr 1fr;
283
+ gap: 1.5rem;
284
+ margin-bottom: 1.5rem;
285
+ }
286
+
287
+ @media (max-width: 640px) { .two-col { grid-template-columns: 1fr; } }
288
+
289
+ .card {
290
+ background: var(--surface);
291
+ border: 1px solid var(--border);
292
+ border-radius: var(--radius);
293
+ padding: 1.5rem;
294
+ margin-bottom: 1.5rem;
295
+ }
296
+
297
+ .list {
298
+ list-style: none;
299
+ display: flex;
300
+ flex-direction: column;
301
+ gap: 0.4rem;
302
+ }
303
+
304
+ .list li {
305
+ padding: 0.4rem 0.6rem;
306
+ background: var(--surface2);
307
+ border-radius: 6px;
308
+ font-size: 0.85rem;
309
+ color: var(--text);
310
+ }
311
+
312
+ .list li.empty { color: var(--muted); font-style: italic; background: none; padding: 0; }
313
+
314
+ .footer {
315
+ text-align: center;
316
+ color: var(--muted);
317
+ font-size: 0.8rem;
318
+ padding-top: 1.5rem;
319
+ border-top: 1px solid var(--border);
320
+ margin-top: 1rem;
321
+ }
322
+ `;
323
+ }
324
+ //# sourceMappingURL=dashboardTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboardTemplate.js","sourceRoot":"","sources":["../../src/core/dashboardTemplate.ts"],"names":[],"mappings":";;AAAA,4CAmHC;AAED,0CA0MC;AA/TD,SAAgB,gBAAgB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiHD,CAAC;AACT,CAAC;AAED,SAAgB,eAAe;IAC7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwMR,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { BrainForgeConfig } from './config';
2
+ export declare function createBrainforgeStructure(config: BrainForgeConfig, cwd?: string): Promise<void>;
3
+ //# sourceMappingURL=fileSystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileSystem.d.ts","sourceRoot":"","sources":["../../src/core/fileSystem.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAoB,MAAM,UAAU,CAAC;AAI9D,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,gBAAgB,EACxB,GAAG,SAAgB,GAClB,OAAO,CAAC,IAAI,CAAC,CAgHf"}