mindforge-cc 1.0.3 → 1.0.4

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,11 @@
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.4] — v1.0.4 Antigravity Install Fix — 2026-03-22
7
+
8
+ ### Fixed
9
+ - Antigravity local install now correctly copies commands and CLAUDE.md into `agents/`.
10
+
6
11
  ## [1.0.3] — v1.0.3 Antigravity Agents Folder — 2026-03-22
7
12
 
8
13
  ### Changed
package/README.md CHANGED
@@ -42,6 +42,11 @@ 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
+
45
50
  ### Both runtimes
46
51
  ```bash
47
52
  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
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',
57
57
  ];
58
58
 
59
59
  const IS_NON_INTERACTIVE =
@@ -102,6 +102,7 @@ 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)
105
106
  --verbose Detailed output
106
107
  --version, -v Print version
107
108
  --help, -h Print this help
@@ -147,7 +147,7 @@ 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 { dryRun = false, force = false, verbose = false, withUtils = false } = options;
151
151
  const cfg = RUNTIMES[runtime];
152
152
  const baseDir = resolveBaseDir(runtime, scope);
153
153
  const cmdsDir = norm(path.join(baseDir, cfg.commandsSubdir));
@@ -168,7 +168,7 @@ async function install(runtime, scope, options = {}) {
168
168
  // ── 1. Install CLAUDE.md ────────────────────────────────────────────────────
169
169
  const claudeSrc = runtime === 'claude'
170
170
  ? src('.claude', 'CLAUDE.md')
171
- : src('.agents', 'CLAUDE.md');
171
+ : src('.agent', 'CLAUDE.md');
172
172
 
173
173
  if (fsu.exists(claudeSrc)) {
174
174
  safeCopyClaude(claudeSrc, path.join(baseDir, 'CLAUDE.md'), { force, verbose });
@@ -178,7 +178,7 @@ async function install(runtime, scope, options = {}) {
178
178
  // ── 2. Install commands ─────────────────────────────────────────────────────
179
179
  const cmdSrc = runtime === 'claude'
180
180
  ? src('.claude', 'commands', 'mindforge')
181
- : src('.agents', 'mindforge');
181
+ : src('.agent', 'mindforge');
182
182
 
183
183
  if (fsu.exists(cmdSrc)) {
184
184
  fsu.ensureDir(cmdsDir);
@@ -217,13 +217,18 @@ async function install(runtime, scope, options = {}) {
217
217
  console.log(` ✅ MINDFORGE.md (project constitution)`);
218
218
  }
219
219
 
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)`);
220
+ // bin/ utilities (optional)
221
+ if (withUtils) {
222
+ const binDst = path.join(process.cwd(), 'bin');
223
+ const binSrc = src('bin');
224
+ if (fsu.exists(binSrc) && !fsu.exists(binDst)) {
225
+ fsu.copyDir(binSrc, binDst, { excludePatterns: SENSITIVE_EXCLUDE });
226
+ console.log(` ✅ bin/ (utilities)`);
227
+ } else if (fsu.exists(binDst)) {
228
+ console.log(` ⏭️ bin/ already exists — preserved`);
229
+ }
226
230
  }
231
+
227
232
  }
228
233
 
229
234
  // ── 4. Verify installation ──────────────────────────────────────────────────
@@ -273,10 +278,11 @@ async function run(args) {
273
278
  const dryRun = args.includes('--dry-run');
274
279
  const force = args.includes('--force');
275
280
  const verbose = args.includes('--verbose');
281
+ const withUtils = args.includes('--with-utils');
276
282
  const isUninstall = args.includes('--uninstall');
277
283
  const isUpdate = args.includes('--update');
278
284
  const isCheck = args.includes('--check');
279
- const options = { dryRun, force, verbose };
285
+ const options = { dryRun, force, verbose, withUtils };
280
286
 
281
287
  console.log(`\n⚡ MindForge v${VERSION} — Enterprise Agentic Framework\n`);
282
288
 
@@ -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,10 @@ 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 withUtils = await askYesNo(rl, 'Install optional bin/ utilities?', false);
225
236
  rl.close();
226
237
 
227
- await install(runtimes, scope);
238
+ await install(runtimes, scope, { withUtils });
228
239
  await generator.writeIntegrationsConfig(config);
229
240
  printNextSteps(runtimes, scope, credGuidance);
230
241
  } catch (err) {
@@ -15,6 +15,11 @@ 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
+
18
23
  ### Antigravity
19
24
  ```bash
20
25
  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.4",
4
4
  "description": "MindForge - Enterprise Agentic Framework for Claude Code and Antigravity",
5
5
  "bin": {
6
6
  "mindforge-cc": "bin/install.js"