@hanzlaa/rcode 3.2.0 → 3.2.1

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/cli/install.js CHANGED
@@ -415,8 +415,33 @@ function getPathsForIde(ide, target) {
415
415
  referencesDir: path.join(target, '.rihal', 'references'),
416
416
  binDir: path.join(target, '.rihal', 'bin'),
417
417
  };
418
+ case 'vscode':
419
+ // VS Code's Claude Code / Continue / Copilot extensions all read from
420
+ // .claude/ (Claude Code's canonical paths). We install there directly
421
+ // and additionally write a .vscode/rihal/ marker so VS Code workspace
422
+ // settings can pin behaviour.
423
+ return {
424
+ agentsDir: path.join(target, '.claude', 'agents'),
425
+ commandsDir: path.join(target, '.claude', 'commands', 'rihal'),
426
+ workflowsDir: path.join(target, '.rihal', 'workflows'),
427
+ referencesDir: path.join(target, '.rihal', 'references'),
428
+ binDir: path.join(target, '.rihal', 'bin'),
429
+ markerDir: path.join(target, '.vscode', 'rihal'),
430
+ };
431
+ case 'antigravity':
432
+ // Antigravity (Google's agentic IDE) — install to .antigravity/ mirroring
433
+ // the .gemini/ structure. Antigravity's plugin protocol is still firming
434
+ // up; the user can adjust paths via .rihal/config.yaml's `extra_install_paths`
435
+ // if Antigravity expects different routing.
436
+ return {
437
+ agentsDir: path.join(target, '.antigravity', 'rihal', 'agents'),
438
+ commandsDir: path.join(target, '.antigravity', 'rihal', 'commands'),
439
+ workflowsDir: path.join(target, '.rihal', 'workflows'),
440
+ referencesDir: path.join(target, '.rihal', 'references'),
441
+ binDir: path.join(target, '.rihal', 'bin'),
442
+ };
418
443
  default:
419
- throw new Error(`Unknown IDE: ${ide}. Supported: claude, cursor, gemini`);
444
+ throw new Error(`Unknown IDE: ${ide}. Supported: claude, cursor, gemini, vscode, antigravity`);
420
445
  }
421
446
  }
422
447
 
@@ -1231,27 +1256,28 @@ async function install(opts) {
1231
1256
  }
1232
1257
 
1233
1258
  // Validate IDE — structured error for unsupported editors (#197).
1234
- if (!['claude', 'cursor', 'gemini'].includes(opts.ide)) {
1259
+ if (!['claude', 'cursor', 'gemini', 'vscode', 'antigravity'].includes(opts.ide)) {
1235
1260
  console.error(`✖ --ide ${opts.ide} is not supported in v${readPackageVersion()}.`);
1236
1261
  console.error('');
1237
1262
  console.error(' Currently supported:');
1238
- console.error(' claude — Claude Code native (recommended)');
1239
- console.error(' cursor — Cursor IDE');
1240
- console.error(' gemini — Gemini CLI');
1263
+ console.error(' claude — Claude Code native (recommended)');
1264
+ console.error(' cursor — Cursor IDE');
1265
+ console.error(' gemini — Gemini CLI');
1266
+ console.error(' vscode — VS Code (with Claude Code / Continue / Copilot extension)');
1267
+ console.error(' antigravity — Antigravity (experimental)');
1241
1268
  console.error('');
1242
- console.error(' Tracked for v3.0 (see issue #182):');
1243
- console.error(' vscodeVS Code native extension');
1244
- console.error(' jetbrains IntelliJ / PyCharm');
1245
- console.error(' zed — Zed editor');
1269
+ console.error(' Tracked for future:');
1270
+ console.error(' jetbrainsIntelliJ / PyCharm');
1271
+ console.error(' zed Zed editor');
1246
1272
  console.error('');
1247
- if (/^(vscode|vs-code|code)$/i.test(opts.ide)) {
1248
- console.error(' Workaround: if you use VS Code WITH the Claude Code extension,');
1249
- console.error(' run `--ide claude` — the extension reads from .claude/ too.');
1250
- console.error('');
1251
- }
1252
1273
  return 1;
1253
1274
  }
1254
1275
 
1276
+ // VS Code installs to .claude/ paths (extension reads from there). Inform the user.
1277
+ if (opts.ide === 'vscode') {
1278
+ console.log(' ' + dim('VS Code → installing to .claude/ paths (read by Claude Code / Continue / Copilot extensions).'));
1279
+ }
1280
+
1255
1281
  // Gemini IDE support deferred
1256
1282
  if (opts.ide === 'gemini') {
1257
1283
  console.log(`\n⚠️ Gemini CLI install not yet implemented\n`);
@@ -1261,6 +1287,12 @@ async function install(opts) {
1261
1287
  return 1;
1262
1288
  }
1263
1289
 
1290
+ // Antigravity install is experimental — best-effort path, user may need to adjust
1291
+ if (opts.ide === 'antigravity') {
1292
+ console.log(' ' + warn('Antigravity install is experimental. Files land at .antigravity/rihal/{agents,commands}/.'));
1293
+ console.log(' ' + dim('If Antigravity expects a different path, adjust .rihal/config.yaml and re-run.'));
1294
+ }
1295
+
1264
1296
  // Validate requested modules exist
1265
1297
  if (opts.modules.length > 0) {
1266
1298
  const available = listAvailableModules();
@@ -1667,16 +1699,19 @@ async function install(opts) {
1667
1699
  console.log('');
1668
1700
  }
1669
1701
 
1670
- // Count installed agents + commands dynamically (#190).
1671
- const agentsDir = path.join(opts.target, '.claude', 'agents');
1672
- const commandsDir = path.join(opts.target, '.claude', 'commands', 'rihal');
1702
+ // Count installed agents + commands dynamically (#190). Reads from the
1703
+ // IDE-specific install paths so cursor/gemini/vscode/antigravity don't
1704
+ // false-fail the health check.
1705
+ const idePaths = getPathsForIde(opts.ide, opts.target);
1706
+ const agentsDir = idePaths.agentsDir;
1707
+ const commandsDir = idePaths.commandsDir;
1673
1708
  let agentCount = 0, commandCount = 0;
1674
1709
  try {
1675
1710
  if (fs.existsSync(agentsDir)) {
1676
- agentCount = fs.readdirSync(agentsDir).filter(f => f.startsWith('rihal-') && f.endsWith('.md')).length;
1711
+ agentCount = fs.readdirSync(agentsDir).filter(f => (f.startsWith('rihal-') || f.startsWith('rcode-')) && (f.endsWith('.md') || f.endsWith('.mdc'))).length;
1677
1712
  }
1678
1713
  if (fs.existsSync(commandsDir)) {
1679
- commandCount = fs.readdirSync(commandsDir).filter(f => f.endsWith('.md')).length;
1714
+ commandCount = fs.readdirSync(commandsDir).filter(f => f.endsWith('.md') || f.endsWith('.mdc')).length;
1680
1715
  }
1681
1716
  } catch {}
1682
1717
 
@@ -1688,9 +1723,12 @@ async function install(opts) {
1688
1723
  console.log(` ${bold('Mode:')} ${opts.mode} ${dim('(guided=confirm at gates, yolo=autonomous)')}`);
1689
1724
  console.log(` ${bold('Planning:')} ${opts.commitPlanning !== false ? 'committed' : 'gitignored'} ${dim('(flip: rihal-tools gitignore refresh)')}`);
1690
1725
  console.log('');
1691
- console.log(` ${bold('Agents:')} ${pc.green(String(agentCount))} in .claude/agents/`);
1692
- console.log(` ${bold('Commands:')} ${pc.green(String(commandCount))} slash commands in .claude/commands/rihal/`);
1693
- if (skillsInstalled > 0) console.log(` ${bold('Skills:')} ${pc.green(String(skillsInstalled))} phrase-activated in .claude/skills/`);
1726
+ // Show the actual install paths so cursor/gemini/antigravity output is accurate
1727
+ const relAgents = path.relative(opts.target, idePaths.agentsDir) || idePaths.agentsDir;
1728
+ const relCommands = path.relative(opts.target, idePaths.commandsDir) || idePaths.commandsDir;
1729
+ console.log(` ${bold('Agents:')} ${pc.green(String(agentCount))} in ${relAgents}/`);
1730
+ console.log(` ${bold('Commands:')} ${pc.green(String(commandCount))} slash commands in ${relCommands}/`);
1731
+ if (skillsInstalled > 0) console.log(` ${bold('Skills:')} ${pc.green(String(skillsInstalled))} phrase-activated`);
1694
1732
  console.log('');
1695
1733
  if (starterSeeded) {
1696
1734
  console.log(' ' + ok('Starter planning scaffolded in .planning/ (ROADMAP, STATE, PROJECT)'));
package/dist/rcode.js CHANGED
@@ -16065,8 +16065,25 @@ Installs (IDE-specific):
16065
16065
  referencesDir: path2.join(target, ".rihal", "references"),
16066
16066
  binDir: path2.join(target, ".rihal", "bin")
16067
16067
  };
16068
+ case "vscode":
16069
+ return {
16070
+ agentsDir: path2.join(target, ".claude", "agents"),
16071
+ commandsDir: path2.join(target, ".claude", "commands", "rihal"),
16072
+ workflowsDir: path2.join(target, ".rihal", "workflows"),
16073
+ referencesDir: path2.join(target, ".rihal", "references"),
16074
+ binDir: path2.join(target, ".rihal", "bin"),
16075
+ markerDir: path2.join(target, ".vscode", "rihal")
16076
+ };
16077
+ case "antigravity":
16078
+ return {
16079
+ agentsDir: path2.join(target, ".antigravity", "rihal", "agents"),
16080
+ commandsDir: path2.join(target, ".antigravity", "rihal", "commands"),
16081
+ workflowsDir: path2.join(target, ".rihal", "workflows"),
16082
+ referencesDir: path2.join(target, ".rihal", "references"),
16083
+ binDir: path2.join(target, ".rihal", "bin")
16084
+ };
16068
16085
  default:
16069
- throw new Error(`Unknown IDE: ${ide}. Supported: claude, cursor, gemini`);
16086
+ throw new Error(`Unknown IDE: ${ide}. Supported: claude, cursor, gemini, vscode, antigravity`);
16070
16087
  }
16071
16088
  }
16072
16089
  function walkFiles(dir, extraIgnore = []) {
@@ -16700,26 +16717,25 @@ Say "plan a sprint" or run \`/rihal:sprint-planning\` to break Phase 01 into sto
16700
16717
  console.error(`\u2716 Source tree not found at ${SOURCE_ROOT}. Running from wrong dir?`);
16701
16718
  return 1;
16702
16719
  }
16703
- if (!["claude", "cursor", "gemini"].includes(opts.ide)) {
16720
+ if (!["claude", "cursor", "gemini", "vscode", "antigravity"].includes(opts.ide)) {
16704
16721
  console.error(`\u2716 --ide ${opts.ide} is not supported in v${readPackageVersion()}.`);
16705
16722
  console.error("");
16706
16723
  console.error(" Currently supported:");
16707
- console.error(" claude \u2014 Claude Code native (recommended)");
16708
- console.error(" cursor \u2014 Cursor IDE");
16709
- console.error(" gemini \u2014 Gemini CLI");
16724
+ console.error(" claude \u2014 Claude Code native (recommended)");
16725
+ console.error(" cursor \u2014 Cursor IDE");
16726
+ console.error(" gemini \u2014 Gemini CLI");
16727
+ console.error(" vscode \u2014 VS Code (with Claude Code / Continue / Copilot extension)");
16728
+ console.error(" antigravity \u2014 Antigravity (experimental)");
16710
16729
  console.error("");
16711
- console.error(" Tracked for v3.0 (see issue #182):");
16712
- console.error(" vscode \u2014 VS Code native extension");
16713
- console.error(" jetbrains \u2014 IntelliJ / PyCharm");
16714
- console.error(" zed \u2014 Zed editor");
16730
+ console.error(" Tracked for future:");
16731
+ console.error(" jetbrains \u2014 IntelliJ / PyCharm");
16732
+ console.error(" zed \u2014 Zed editor");
16715
16733
  console.error("");
16716
- if (/^(vscode|vs-code|code)$/i.test(opts.ide)) {
16717
- console.error(" Workaround: if you use VS Code WITH the Claude Code extension,");
16718
- console.error(" run `--ide claude` \u2014 the extension reads from .claude/ too.");
16719
- console.error("");
16720
- }
16721
16734
  return 1;
16722
16735
  }
16736
+ if (opts.ide === "vscode") {
16737
+ console.log(" " + dim("VS Code \u2192 installing to .claude/ paths (read by Claude Code / Continue / Copilot extensions)."));
16738
+ }
16723
16739
  if (opts.ide === "gemini") {
16724
16740
  console.log(`
16725
16741
  \u26A0\uFE0F Gemini CLI install not yet implemented
@@ -16731,6 +16747,10 @@ Say "plan a sprint" or run \`/rihal:sprint-planning\` to break Phase 01 into sto
16731
16747
  `);
16732
16748
  return 1;
16733
16749
  }
16750
+ if (opts.ide === "antigravity") {
16751
+ console.log(" " + warn("Antigravity install is experimental. Files land at .antigravity/rihal/{agents,commands}/."));
16752
+ console.log(" " + dim("If Antigravity expects a different path, adjust .rihal/config.yaml and re-run."));
16753
+ }
16734
16754
  if (opts.modules.length > 0) {
16735
16755
  const available = listAvailableModules();
16736
16756
  const unknownModules = opts.modules.filter((m) => !available.includes(m));
@@ -17059,15 +17079,16 @@ Say "plan a sprint" or run \`/rihal:sprint-planning\` to break Phase 01 into sto
17059
17079
  console.log(dim(" To overwrite: re-run with --force-overwrite | To see full diffs: --show-diff"));
17060
17080
  console.log("");
17061
17081
  }
17062
- const agentsDir = path2.join(opts.target, ".claude", "agents");
17063
- const commandsDir = path2.join(opts.target, ".claude", "commands", "rihal");
17082
+ const idePaths = getPathsForIde(opts.ide, opts.target);
17083
+ const agentsDir = idePaths.agentsDir;
17084
+ const commandsDir = idePaths.commandsDir;
17064
17085
  let agentCount = 0, commandCount = 0;
17065
17086
  try {
17066
17087
  if (fs2.existsSync(agentsDir)) {
17067
- agentCount = fs2.readdirSync(agentsDir).filter((f) => f.startsWith("rihal-") && f.endsWith(".md")).length;
17088
+ agentCount = fs2.readdirSync(agentsDir).filter((f) => (f.startsWith("rihal-") || f.startsWith("rcode-")) && (f.endsWith(".md") || f.endsWith(".mdc"))).length;
17068
17089
  }
17069
17090
  if (fs2.existsSync(commandsDir)) {
17070
- commandCount = fs2.readdirSync(commandsDir).filter((f) => f.endsWith(".md")).length;
17091
+ commandCount = fs2.readdirSync(commandsDir).filter((f) => f.endsWith(".md") || f.endsWith(".mdc")).length;
17071
17092
  }
17072
17093
  } catch {
17073
17094
  }
@@ -17079,9 +17100,11 @@ Say "plan a sprint" or run \`/rihal:sprint-planning\` to break Phase 01 into sto
17079
17100
  console.log(` ${bold("Mode:")} ${opts.mode} ${dim("(guided=confirm at gates, yolo=autonomous)")}`);
17080
17101
  console.log(` ${bold("Planning:")} ${opts.commitPlanning !== false ? "committed" : "gitignored"} ${dim("(flip: rihal-tools gitignore refresh)")}`);
17081
17102
  console.log("");
17082
- console.log(` ${bold("Agents:")} ${pc.green(String(agentCount))} in .claude/agents/`);
17083
- console.log(` ${bold("Commands:")} ${pc.green(String(commandCount))} slash commands in .claude/commands/rihal/`);
17084
- if (skillsInstalled > 0) console.log(` ${bold("Skills:")} ${pc.green(String(skillsInstalled))} phrase-activated in .claude/skills/`);
17103
+ const relAgents = path2.relative(opts.target, idePaths.agentsDir) || idePaths.agentsDir;
17104
+ const relCommands = path2.relative(opts.target, idePaths.commandsDir) || idePaths.commandsDir;
17105
+ console.log(` ${bold("Agents:")} ${pc.green(String(agentCount))} in ${relAgents}/`);
17106
+ console.log(` ${bold("Commands:")} ${pc.green(String(commandCount))} slash commands in ${relCommands}/`);
17107
+ if (skillsInstalled > 0) console.log(` ${bold("Skills:")} ${pc.green(String(skillsInstalled))} phrase-activated`);
17085
17108
  console.log("");
17086
17109
  if (starterSeeded) {
17087
17110
  console.log(" " + ok("Starter planning scaffolded in .planning/ (ROADMAP, STATE, PROJECT)"));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hanzlaa/rcode",
3
- "version": "3.2.0",
3
+ "version": "3.2.1",
4
4
  "description": "rcode — the memory bank for AI-driven SaaS teams. Persistent project context, distinctive engineering personas, and phase-based workflows. Built by Rihal. Works in Claude Code, Cursor, Gemini, VS Code, and Antigravity.",
5
5
  "main": "cli/index.js",
6
6
  "bin": {