mindforge-cc 1.0.3 → 1.0.5

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/CHANGELOG.md CHANGED
@@ -3,6 +3,16 @@
3
3
  All notable changes to MindForge are documented here.
4
4
  Format follows [Keep a Changelog](https://keepachangelog.com).
5
5
 
6
+ ## [1.0.5] — v1.0.5 Minimal Install Option — 2026-03-22
7
+
8
+ ### Added
9
+ - `--minimal` flag to install only essential project scaffolding.
10
+
11
+ ## [1.0.4] — v1.0.4 Antigravity Install Fix — 2026-03-22
12
+
13
+ ### Fixed
14
+ - Antigravity local install now correctly copies commands and CLAUDE.md into `agents/`.
15
+
6
16
  ## [1.0.3] — v1.0.3 Antigravity Agents Folder — 2026-03-22
7
17
 
8
18
  ### Changed
package/README.md CHANGED
@@ -42,6 +42,16 @@ npx mindforge-cc@latest --antigravity --global
42
42
 
43
43
  Local installs use `agents/` by default. Legacy `.agent/` is supported for existing projects.
44
44
 
45
+ Optional: add bin utilities on local install
46
+ ```bash
47
+ npx mindforge-cc@latest --claude --local --with-utils
48
+ ```
49
+
50
+ Optional: minimal project scaffolding
51
+ ```bash
52
+ npx mindforge-cc@latest --claude --local --minimal
53
+ ```
54
+
45
55
  ### Both runtimes
46
56
  ```bash
47
57
  npx mindforge-cc@latest --all --global
package/bin/install.js CHANGED
@@ -15,7 +15,7 @@
15
15
  * Runtime flags: --claude | --antigravity | --all
16
16
  * Scope flags: --global (-g) | --local (-l)
17
17
  * Action flags: --install (default) | --update | --uninstall | --check
18
- * Control flags: --skip-wizard | --dry-run | --verbose | --force
18
+ * Control flags: --skip-wizard | --dry-run | --verbose | --force | --with-utils | --minimal
19
19
  */
20
20
 
21
21
  'use strict';
@@ -53,7 +53,7 @@ const NON_INTERACTIVE_FLAGS = [
53
53
  '--claude', '--antigravity', '--all',
54
54
  '--global', '-g', '--local', '-l',
55
55
  '--uninstall', '--update', '--check',
56
- '--skip-wizard', '--dry-run',
56
+ '--skip-wizard', '--dry-run', '--with-utils', '--minimal',
57
57
  ];
58
58
 
59
59
  const IS_NON_INTERACTIVE =
@@ -102,6 +102,8 @@ function printHelp() {
102
102
  --dry-run Show what would happen without making changes
103
103
  --force Override existing installation without backup
104
104
  --skip-wizard Skip interactive wizard even in TTY
105
+ --with-utils Install local bin/ utilities (optional)
106
+ --minimal Install only essential project scaffolding
105
107
  --verbose Detailed output
106
108
  --version, -v Print version
107
109
  --help, -h Print this help
@@ -147,7 +147,13 @@ function verifyInstall(baseDir, cmdsDir, runtime, scope) {
147
147
 
148
148
  // ── Install single runtime ────────────────────────────────────────────────────
149
149
  async function install(runtime, scope, options = {}) {
150
- const { dryRun = false, force = false, verbose = false } = options;
150
+ const {
151
+ dryRun = false,
152
+ force = false,
153
+ verbose = false,
154
+ withUtils = false,
155
+ minimal = false,
156
+ } = options;
151
157
  const cfg = RUNTIMES[runtime];
152
158
  const baseDir = resolveBaseDir(runtime, scope);
153
159
  const cmdsDir = norm(path.join(baseDir, cfg.commandsSubdir));
@@ -168,7 +174,7 @@ async function install(runtime, scope, options = {}) {
168
174
  // ── 1. Install CLAUDE.md ────────────────────────────────────────────────────
169
175
  const claudeSrc = runtime === 'claude'
170
176
  ? src('.claude', 'CLAUDE.md')
171
- : src('.agents', 'CLAUDE.md');
177
+ : src('.agent', 'CLAUDE.md');
172
178
 
173
179
  if (fsu.exists(claudeSrc)) {
174
180
  safeCopyClaude(claudeSrc, path.join(baseDir, 'CLAUDE.md'), { force, verbose });
@@ -178,7 +184,7 @@ async function install(runtime, scope, options = {}) {
178
184
  // ── 2. Install commands ─────────────────────────────────────────────────────
179
185
  const cmdSrc = runtime === 'claude'
180
186
  ? src('.claude', 'commands', 'mindforge')
181
- : src('.agents', 'mindforge');
187
+ : src('.agent', 'mindforge');
182
188
 
183
189
  if (fsu.exists(cmdSrc)) {
184
190
  fsu.ensureDir(cmdsDir);
@@ -193,8 +199,29 @@ async function install(runtime, scope, options = {}) {
193
199
  const forgeSrc = src('.mindforge');
194
200
  const forgeDst = path.join(process.cwd(), '.mindforge');
195
201
  if (fsu.exists(forgeSrc)) {
196
- fsu.copyDir(forgeSrc, forgeDst, { excludePatterns: SENSITIVE_EXCLUDE });
197
- console.log(` ✅ .mindforge/ (framework engine)`);
202
+ if (minimal) {
203
+ const minimalEntries = new Set([
204
+ 'MINDFORGE-SCHEMA.json',
205
+ 'engine',
206
+ 'org',
207
+ 'governance',
208
+ 'integrations',
209
+ 'personas',
210
+ 'skills',
211
+ 'team',
212
+ ]);
213
+ fsu.ensureDir(forgeDst);
214
+ for (const entry of fs.readdirSync(forgeSrc, { withFileTypes: true })) {
215
+ if (!minimalEntries.has(entry.name)) continue;
216
+ const s = path.join(forgeSrc, entry.name);
217
+ const d = path.join(forgeDst, entry.name);
218
+ entry.isDirectory() ? fsu.copyDir(s, d, { excludePatterns: SENSITIVE_EXCLUDE }) : fsu.copy(s, d);
219
+ }
220
+ console.log(` ✅ .mindforge/ (minimal core)`);
221
+ } else {
222
+ fsu.copyDir(forgeSrc, forgeDst, { excludePatterns: SENSITIVE_EXCLUDE });
223
+ console.log(` ✅ .mindforge/ (framework engine)`);
224
+ }
198
225
  }
199
226
 
200
227
  // .planning/ — create only if it doesn't already exist (preserve project state)
@@ -202,8 +229,18 @@ async function install(runtime, scope, options = {}) {
202
229
  if (!fsu.exists(planningDst)) {
203
230
  const planningSrc = src('.planning');
204
231
  if (fsu.exists(planningSrc)) {
205
- fsu.copyDir(planningSrc, planningDst, { excludePatterns: SENSITIVE_EXCLUDE });
206
- console.log(` ✅ .planning/ (state templates)`);
232
+ if (minimal) {
233
+ fsu.ensureDir(planningDst);
234
+ ['STATE.md', 'HANDOFF.json', 'PROJECT.md'].forEach((name) => {
235
+ const s = path.join(planningSrc, name);
236
+ const d = path.join(planningDst, name);
237
+ if (fsu.exists(s)) fsu.copy(s, d);
238
+ });
239
+ console.log(` ✅ .planning/ (minimal state)`);
240
+ } else {
241
+ fsu.copyDir(planningSrc, planningDst, { excludePatterns: SENSITIVE_EXCLUDE });
242
+ console.log(` ✅ .planning/ (state templates)`);
243
+ }
207
244
  }
208
245
  } else {
209
246
  console.log(` ⏭️ .planning/ already exists — preserved (run /mindforge:health to verify)`);
@@ -217,13 +254,18 @@ async function install(runtime, scope, options = {}) {
217
254
  console.log(` ✅ MINDFORGE.md (project constitution)`);
218
255
  }
219
256
 
220
- // bin/ utilities (validate-config, wizard)
221
- const binDst = path.join(process.cwd(), 'bin');
222
- const binSrc = src('bin');
223
- if (fsu.exists(binSrc) && !fsu.exists(binDst)) {
224
- fsu.copyDir(binSrc, binDst, { excludePatterns: SENSITIVE_EXCLUDE });
225
- console.log(` ✅ bin/ (utilities)`);
257
+ // bin/ utilities (optional)
258
+ if (withUtils) {
259
+ const binDst = path.join(process.cwd(), 'bin');
260
+ const binSrc = src('bin');
261
+ if (fsu.exists(binSrc) && !fsu.exists(binDst)) {
262
+ fsu.copyDir(binSrc, binDst, { excludePatterns: SENSITIVE_EXCLUDE });
263
+ console.log(` ✅ bin/ (utilities)`);
264
+ } else if (fsu.exists(binDst)) {
265
+ console.log(` ⏭️ bin/ already exists — preserved`);
266
+ }
226
267
  }
268
+
227
269
  }
228
270
 
229
271
  // ── 4. Verify installation ──────────────────────────────────────────────────
@@ -273,10 +315,12 @@ async function run(args) {
273
315
  const dryRun = args.includes('--dry-run');
274
316
  const force = args.includes('--force');
275
317
  const verbose = args.includes('--verbose');
318
+ const withUtils = args.includes('--with-utils');
319
+ const minimal = args.includes('--minimal');
276
320
  const isUninstall = args.includes('--uninstall');
277
321
  const isUpdate = args.includes('--update');
278
322
  const isCheck = args.includes('--check');
279
- const options = { dryRun, force, verbose };
323
+ const options = { dryRun, force, verbose, withUtils, minimal };
280
324
 
281
325
  console.log(`\n⚡ MindForge v${VERSION} — Enterprise Agentic Framework\n`);
282
326
 
@@ -48,6 +48,16 @@ function askChoice(rl, q, choices, defaultIdx = 0) {
48
48
  });
49
49
  }
50
50
 
51
+ function askYesNo(rl, q, defaultYes = false) {
52
+ const def = defaultYes ? 'y' : 'n';
53
+ return new Promise((resolve) => {
54
+ rl.question(`${q} [${def}]: `, (answer) => {
55
+ const val = (answer.trim() || def).toLowerCase();
56
+ resolve(val === 'y' || val === 'yes');
57
+ });
58
+ });
59
+ }
60
+
51
61
  function askMultiChoice(rl, q, choices) {
52
62
  console.log(`\n${q}`);
53
63
  choices.forEach((choice, i) => console.log(` ${i + 1}) ${choice}`));
@@ -149,11 +159,11 @@ async function configureFeatures(rl) {
149
159
  return { config, credGuidance };
150
160
  }
151
161
 
152
- async function install(runtimes, scope) {
162
+ async function install(runtimes, scope, options = {}) {
153
163
  const installer = require('../installer-core');
154
164
  if (!installer || typeof installer.install !== 'function') return;
155
165
  for (const runtime of runtimes) {
156
- await installer.install(runtime, scope);
166
+ await installer.install(runtime, scope, options);
157
167
  }
158
168
  }
159
169
 
@@ -222,9 +232,11 @@ async function main() {
222
232
  const runtimes = await selectRuntime(rl, env.runtimes);
223
233
  const scope = await selectScope(rl);
224
234
  const { config, credGuidance } = await configureFeatures(rl);
235
+ const minimal = await askYesNo(rl, 'Install minimal project scaffolding?', false);
236
+ const withUtils = await askYesNo(rl, 'Install optional bin/ utilities?', false);
225
237
  rl.close();
226
238
 
227
- await install(runtimes, scope);
239
+ await install(runtimes, scope, { withUtils, minimal });
228
240
  await generator.writeIntegrationsConfig(config);
229
241
  printNextSteps(runtimes, scope, credGuidance);
230
242
  } catch (err) {
@@ -15,6 +15,16 @@ npx mindforge-cc@latest --claude --global
15
15
  npx mindforge-cc@latest --claude --local
16
16
  ```
17
17
 
18
+ Optional utilities:
19
+ ```bash
20
+ npx mindforge-cc@latest --claude --local --with-utils
21
+ ```
22
+
23
+ Minimal scaffolding:
24
+ ```bash
25
+ npx mindforge-cc@latest --claude --local --minimal
26
+ ```
27
+
18
28
  ### Antigravity
19
29
  ```bash
20
30
  npx mindforge-cc@latest --antigravity --global
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mindforge-cc",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "MindForge - Enterprise Agentic Framework for Claude Code and Antigravity",
5
5
  "bin": {
6
6
  "mindforge-cc": "bin/install.js"