@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 +60 -22
- package/dist/rcode.js +44 -21
- package/package.json +1 -1
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
|
|
1239
|
-
console.error(' cursor
|
|
1240
|
-
console.error(' gemini
|
|
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
|
|
1243
|
-
console.error('
|
|
1244
|
-
console.error('
|
|
1245
|
-
console.error(' zed — Zed editor');
|
|
1269
|
+
console.error(' Tracked for future:');
|
|
1270
|
+
console.error(' jetbrains — IntelliJ / 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
|
-
|
|
1672
|
-
|
|
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
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
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
|
|
16708
|
-
console.error(" cursor
|
|
16709
|
-
console.error(" gemini
|
|
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
|
|
16712
|
-
console.error("
|
|
16713
|
-
console.error("
|
|
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
|
|
17063
|
-
const
|
|
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
|
-
|
|
17083
|
-
|
|
17084
|
-
|
|
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.
|
|
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": {
|