@hanzlaa/rcode 3.4.27 → 3.4.28

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/AGENTS.md CHANGED
@@ -24,7 +24,7 @@ If a user says "just keep going" or "don't stop until done", that authorization
24
24
 
25
25
  - Follow [Conventional Commits](https://www.conventionalcommits.org/) format: `type(scope): subject`
26
26
  - Types allowed: `feat`, `fix`, `docs`, `style`, `refactor`, `test`, `chore`, `perf`, `revert`
27
- - Scopes allowed: `agents`, `skills`, `workflows`, `templates`, `dashboard`, `docs`, `config`, `github`, `commands`, `memory`, `brand`, `cli`, `ci`, `release`, `meta`, `tasks`, `migrations`, `refs`, `state`, `hooks`, `install`, `parity`, `triggers`, `dogfood`, `namespace`, `planning`, `insights`, `help`, `roadmap`, `session`, `audits`, `execute`, `executor`, `plan`, `planner`, `readme`, `sync`, `sprint`, `agent-exp`, `extensibility`, `lens-audit`, `tiers`, plus numeric phase/sprint scopes (e.g. `docs(15)`, `feat(8.3)`)
27
+ - Scopes allowed: `agents`, `skills`, `workflows`, `templates`, `dashboard`, `docs`, `config`, `github`, `commands`, `memory`, `brand`, `cli`, `ci`, `release`, `meta`, `tasks`, `migrations`, `refs`, `state`, `hooks`, `install`, `parity`, `triggers`, `dogfood`, `namespace`, `planning`, `insights`, `help`, `roadmap`, `session`, `audits`, `execute`, `executor`, `plan`, `planner`, `readme`, `sync`, `sprint`, `agent-exp`, `extensibility`, `lens-audit`, `tiers`, `build`, `council`, `doctor`, `postinstall`, `progress`, `security`, `tools`, `uninstall`, `test`, plus numeric phase/sprint scopes (e.g. `docs(15)`, `feat(8.3)`)
28
28
  - Subject: lowercase first letter, imperative mood, no trailing period, under 72 chars
29
29
  - **NEVER add Claude/AI attribution to commit messages.** No "Generated with Claude Code", no "Co-Authored-By: Claude", no "🤖 Generated". The user does not want this.
30
30
  - **NEVER use `--no-verify`** to bypass hooks. If hooks fail, fix the underlying issue.
package/CONTRIBUTING.md CHANGED
@@ -298,6 +298,15 @@ We use [Conventional Commits](https://www.conventionalcommits.org/) format. The
298
298
  - `extensibility` — extensibility and plugin hooks
299
299
  - `lens-audit` — 15-lens audit system and lenses
300
300
  - `tiers` — TIERS.md and tier-related documentation
301
+ - `build` — `scripts/build.cjs`, esbuild config, bundle artifacts
302
+ - `council` — `/rihal-council` workflow + spawning logic
303
+ - `doctor` — `cli/doctor.js` health checks
304
+ - `postinstall` — `cli/postinstall.js` lifecycle hook
305
+ - `progress` — `/rihal-progress` workflow
306
+ - `security` — security guardrails (symlink guards, integrity checks)
307
+ - `test` — test files under `test/` (test-only changes)
308
+ - `tools` — `rihal/bin/rihal-tools.cjs` subcommands
309
+ - `uninstall` — `cli/uninstall.js` flow
301
310
  - `<phase-id>` — numeric phase scope when committing inside a phase (e.g. `docs(15)`, `feat(8.3)`)
302
311
  - `<sprint-id>` — numeric sprint scope inside a phase (e.g. `feat(15.1)`)
303
312
 
@@ -109,7 +109,12 @@ function diffSet(editor, kind, expected, installed) {
109
109
  * makes doctor report drift like "agents 119/23" when nothing is wrong.
110
110
  * That's why the agent count comes from .claude/agents/, not .claude/skills/.
111
111
  */
112
- function verifyClaudeInstall(cwd, packageRoot) {
112
+ function verifyClaudeInstall(cwd, packageRoot, options = {}) {
113
+ // Issue #698: tests assert against an isolated tempdir cwd. The global
114
+ // fallback (#664) makes that impossible because it reads the contributor's
115
+ // real ~/.claude/. Tests can pass { globalFallback: false } to disable it.
116
+ // Default remains true to preserve the runtime behavior introduced in #664.
117
+ const globalFallback = options.globalFallback !== false;
113
118
  const pkg = readPackageManifest(packageRoot);
114
119
  const agentsDir = path.join(cwd, '.claude/agents');
115
120
  const skillsDir = path.join(cwd, '.claude/skills');
@@ -129,7 +134,7 @@ function verifyClaudeInstall(cwd, packageRoot) {
129
134
  // level .claude/agents/rihal-*.md when the user's ~/.claude/ already has
130
135
  // them, to avoid duplicate commands. Without this fallback the verifier
131
136
  // reports 0 agents on every successful install in that scenario.
132
- if (installedAgents.size === 0) {
137
+ if (installedAgents.size === 0 && globalFallback) {
133
138
  try {
134
139
  const os = require('os');
135
140
  const globalAgentsDir = path.join(os.homedir(), '.claude/agents');
@@ -143,12 +148,13 @@ function verifyClaudeInstall(cwd, packageRoot) {
143
148
  } catch { /* non-fatal — permission errors etc. */ }
144
149
  }
145
150
 
146
- // Actions: .claude/skills/<bare-name>/ exclude rihal-* dirs (those are
147
- // either agent stubs or command stubs, never action skills).
151
+ // Actions: .claude/skills/rihal-<name>/. installSkills (cli/install.js)
152
+ // prefixes every action with rihal-, and readPackageManifest does the
153
+ // same — so both sides are normalized. The previous version filtered OUT
154
+ // rihal-* dirs which excluded ALL real actions and made the diff always
155
+ // report "everything missing." Compare directly against the prefixed set.
148
156
  const allInstalled = readInstalledDirs(skillsDir);
149
- const actionsInstalled = new Set(
150
- [...allInstalled].filter((n) => !n.startsWith('rihal-'))
151
- );
157
+ const actionsInstalled = new Set([...allInstalled].filter((n) => pkg.actions.has(n)));
152
158
 
153
159
  return [
154
160
  diffSet('claude', 'agents', pkg.agents, installedAgents),
package/dist/rcode.js CHANGED
@@ -15073,7 +15073,8 @@ var require_manifest = __commonJS({
15073
15073
  extra
15074
15074
  };
15075
15075
  }
15076
- function verifyClaudeInstall(cwd, packageRoot) {
15076
+ function verifyClaudeInstall(cwd, packageRoot, options = {}) {
15077
+ const globalFallback = options.globalFallback !== false;
15077
15078
  const pkg = readPackageManifest(packageRoot);
15078
15079
  const agentsDir = path2.join(cwd, ".claude/agents");
15079
15080
  const skillsDir = path2.join(cwd, ".claude/skills");
@@ -15085,7 +15086,7 @@ var require_manifest = __commonJS({
15085
15086
  }
15086
15087
  }
15087
15088
  }
15088
- if (installedAgents.size === 0) {
15089
+ if (installedAgents.size === 0 && globalFallback) {
15089
15090
  try {
15090
15091
  const os = require("os");
15091
15092
  const globalAgentsDir = path2.join(os.homedir(), ".claude/agents");
@@ -15100,9 +15101,7 @@ var require_manifest = __commonJS({
15100
15101
  }
15101
15102
  }
15102
15103
  const allInstalled = readInstalledDirs(skillsDir);
15103
- const actionsInstalled = new Set(
15104
- [...allInstalled].filter((n) => !n.startsWith("rihal-"))
15105
- );
15104
+ const actionsInstalled = new Set([...allInstalled].filter((n) => pkg.actions.has(n)));
15106
15105
  return [
15107
15106
  diffSet("claude", "agents", pkg.agents, installedAgents),
15108
15107
  diffSet("claude", "actions", pkg.actions, actionsInstalled)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hanzlaa/rcode",
3
- "version": "3.4.27",
3
+ "version": "3.4.28",
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": {