brainforge-ai 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +314 -31
- package/dist/cli.js +13 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/dashboard.d.ts +1 -1
- package/dist/commands/dashboard.d.ts.map +1 -1
- package/dist/commands/dashboard.js +34 -14
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +2 -1
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/serve.js +16 -16
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +99 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/core/dashboardTemplate.d.ts.map +1 -1
- package/dist/core/dashboardTemplate.js +317 -313
- package/dist/core/dashboardTemplate.js.map +1 -1
- package/dist/core/fileSystem.d.ts.map +1 -1
- package/dist/core/fileSystem.js +316 -309
- package/dist/core/fileSystem.js.map +1 -1
- package/dist/core/templates.d.ts +1 -0
- package/dist/core/templates.d.ts.map +1 -1
- package/dist/core/templates.js +8386 -1129
- package/dist/core/templates.js.map +1 -1
- package/package.json +54 -54
package/dist/commands/serve.js
CHANGED
|
@@ -137,22 +137,22 @@ function broadcast(clients, event) {
|
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
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
|
-
})();
|
|
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
156
|
</script>`;
|
|
157
157
|
// Inject before </body> if present, otherwise append
|
|
158
158
|
return html.includes('</body>')
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAmBA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAuFnD"}
|
|
@@ -0,0 +1,99 @@
|
|
|
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.updateCommand = updateCommand;
|
|
7
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const ora_1 = __importDefault(require("ora"));
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const config_1 = require("../core/config");
|
|
12
|
+
const templates_1 = require("../core/templates");
|
|
13
|
+
const dashboardTemplate_1 = require("../core/dashboardTemplate");
|
|
14
|
+
const logger_1 = require("../utils/logger");
|
|
15
|
+
// Files managed by BrainForge — safe to overwrite on update
|
|
16
|
+
// User data (project.md, phases/, memory/, decisions.md…) is never touched
|
|
17
|
+
const PROTECTED = new Set([
|
|
18
|
+
'config.json',
|
|
19
|
+
'project.md',
|
|
20
|
+
'questions.md',
|
|
21
|
+
'decisions.md',
|
|
22
|
+
'roadmap.md',
|
|
23
|
+
]);
|
|
24
|
+
async function updateCommand() {
|
|
25
|
+
const cwd = process.cwd();
|
|
26
|
+
if (!(0, config_1.configExists)(cwd)) {
|
|
27
|
+
logger_1.logger.error('BrainForge not initialized. Run: brainforge init');
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const config = (0, config_1.readConfig)(cwd);
|
|
31
|
+
const brainDir = (0, config_1.getBrainforgeDir)(cwd);
|
|
32
|
+
logger_1.logger.title('⚡ BrainForge Update');
|
|
33
|
+
logger_1.logger.divider();
|
|
34
|
+
logger_1.logger.info(`Project: ${chalk_1.default.white(config.projectName)}`);
|
|
35
|
+
console.log();
|
|
36
|
+
const spinner = (0, ora_1.default)('Updating templates…').start();
|
|
37
|
+
const updated = [];
|
|
38
|
+
const skipped = [];
|
|
39
|
+
// ── Agents ────────────────────────────────────────────────────────────────
|
|
40
|
+
const agents = (0, templates_1.getAgentTemplates)(config);
|
|
41
|
+
for (const [filename, content] of Object.entries(agents)) {
|
|
42
|
+
const dest = path_1.default.join(brainDir, 'agents', filename);
|
|
43
|
+
await fs_extra_1.default.ensureDir(path_1.default.dirname(dest));
|
|
44
|
+
await fs_extra_1.default.writeFile(dest, content);
|
|
45
|
+
updated.push(`agents/${filename}`);
|
|
46
|
+
}
|
|
47
|
+
// ── Slash commands ─────────────────────────────────────────────────────────
|
|
48
|
+
const commands = (0, templates_1.getCommandTemplates)(config);
|
|
49
|
+
for (const [filename, content] of Object.entries(commands)) {
|
|
50
|
+
const dest = path_1.default.join(brainDir, 'commands', filename);
|
|
51
|
+
await fs_extra_1.default.ensureDir(path_1.default.dirname(dest));
|
|
52
|
+
await fs_extra_1.default.writeFile(dest, content);
|
|
53
|
+
updated.push(`commands/${filename}`);
|
|
54
|
+
}
|
|
55
|
+
// ── Dashboard HTML + CSS ──────────────────────────────────────────────────
|
|
56
|
+
await fs_extra_1.default.ensureDir(path_1.default.join(brainDir, 'dashboard'));
|
|
57
|
+
await fs_extra_1.default.writeFile(path_1.default.join(brainDir, 'dashboard', 'index.html'), (0, dashboardTemplate_1.getDashboardHtml)());
|
|
58
|
+
await fs_extra_1.default.writeFile(path_1.default.join(brainDir, 'dashboard', 'style.css'), (0, dashboardTemplate_1.getDashboardCss)());
|
|
59
|
+
updated.push('dashboard/index.html', 'dashboard/style.css');
|
|
60
|
+
// ── Root files (AGENTS.md, CLAUDE.md, GEMINI.md, OPENAI.md) ──────────────
|
|
61
|
+
const rootFiles = (0, templates_1.getRootFileTemplates)(config);
|
|
62
|
+
for (const [filename, content] of Object.entries(rootFiles)) {
|
|
63
|
+
const dest = path_1.default.join(cwd, filename);
|
|
64
|
+
await fs_extra_1.default.writeFile(dest, content);
|
|
65
|
+
updated.push(filename);
|
|
66
|
+
}
|
|
67
|
+
// ── Claude Code Skills ─────────────────────────────────────────────────────
|
|
68
|
+
const skills = (0, templates_1.getSkillTemplates)(config);
|
|
69
|
+
const claudeSkillsDir = path_1.default.join(cwd, '.claude', 'skills');
|
|
70
|
+
await fs_extra_1.default.ensureDir(claudeSkillsDir);
|
|
71
|
+
for (const [filename, content] of Object.entries(skills)) {
|
|
72
|
+
const dest = path_1.default.join(claudeSkillsDir, filename);
|
|
73
|
+
await fs_extra_1.default.writeFile(dest, content);
|
|
74
|
+
updated.push(`.claude/skills/${filename}`);
|
|
75
|
+
}
|
|
76
|
+
// ── User data — never touched ──────────────────────────────────────────────
|
|
77
|
+
for (const f of PROTECTED) {
|
|
78
|
+
skipped.push(f);
|
|
79
|
+
}
|
|
80
|
+
// phases/ and memory/ are always preserved
|
|
81
|
+
skipped.push('phases/', 'memory/');
|
|
82
|
+
spinner.succeed('Update complete.');
|
|
83
|
+
console.log();
|
|
84
|
+
// Summary
|
|
85
|
+
logger_1.logger.success(`${updated.length} files updated:`);
|
|
86
|
+
for (const f of updated) {
|
|
87
|
+
console.log(chalk_1.default.gray(' ✔ .brainforge/') + f);
|
|
88
|
+
}
|
|
89
|
+
console.log();
|
|
90
|
+
logger_1.logger.info(`${skipped.length} user files preserved (untouched):`);
|
|
91
|
+
for (const f of skipped) {
|
|
92
|
+
console.log(chalk_1.default.gray(' ○ .brainforge/') + f);
|
|
93
|
+
}
|
|
94
|
+
console.log();
|
|
95
|
+
logger_1.logger.divider();
|
|
96
|
+
logger_1.logger.info('All agent prompts and slash commands are up to date.');
|
|
97
|
+
logger_1.logger.info('Run brainforge serve to see the refreshed dashboard.');
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboardTemplate.d.ts","sourceRoot":"","sources":["../../src/core/dashboardTemplate.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"dashboardTemplate.d.ts","sourceRoot":"","sources":["../../src/core/dashboardTemplate.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,IAAI,MAAM,CAuHzC;AAED,wBAAgB,eAAe,IAAI,MAAM,CA0MxC"}
|