@hanzlaa/rcode 4.4.2 โ†’ 4.4.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.
Files changed (37) hide show
  1. package/AGENTS.md +1 -1
  2. package/CONTRIBUTING.md +6 -0
  3. package/README.md +3 -3
  4. package/cli/install.js +13 -1
  5. package/cli/postinstall.js +12 -0
  6. package/dist/rcode.js +24 -24
  7. package/package.json +1 -1
  8. package/rcode/bin/rcode-tools.cjs +113 -15
  9. package/rcode/brain/sources.yaml +10 -0
  10. package/rcode/command-aliases.yaml +16 -0
  11. package/rcode/commands/lazy.md +1 -6
  12. package/rcode/internal-workflows.yaml +26 -0
  13. package/rcode/skills/seo/on-page-seo-auditor/SKILL.md +8 -155
  14. package/rcode/skills/seo/on-page-seo-auditor/references.md +108 -0
  15. package/rcode/skills/seo/rank-and-rent-local-seo/SKILL.md +1 -1
  16. package/rcode/skills/seo/seo-audit/SKILL.md +6 -255
  17. package/rcode/skills/seo/seo-audit/references.md +257 -0
  18. package/rcode/skills/seo/seo-content-factory/SKILL.md +1 -1
  19. package/rcode/skills/seo/seo-content-writer/SKILL.md +7 -94
  20. package/rcode/skills/seo/seo-content-writer/references.md +48 -0
  21. package/rcode/skills/seo/seo-growth-orchestrator/SKILL.md +1 -1
  22. package/rcode/skills/seo/seo-site-builder/SKILL.md +1 -1
  23. package/rcode/skills/seo/technical-seo-checker/SKILL.md +8 -157
  24. package/rcode/skills/seo/technical-seo-checker/references.md +100 -0
  25. package/rcode/workflows/execute.md +10 -1
  26. package/rcode/workflows/help.md +1 -0
  27. package/rcode/workflows/insert-phase.md +8 -0
  28. package/rcode/workflows/lazy.md +30 -0
  29. package/rcode/workflows/plan.md +17 -0
  30. package/server/dashboard.js +39 -38
  31. package/server/lib/html/client/components/App.js +2 -0
  32. package/server/lib/html/client/components/CommandPalette.js +5 -0
  33. package/server/lib/html/client/components/RunConfirmDialog.js +60 -0
  34. package/server/lib/html/client/orchestrator.js +51 -3
  35. package/server/lib/html/client/store.js +4 -0
  36. package/server/lib/html/css.js +21 -0
  37. package/server/orchestrator.js +43 -2
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`, `build`, `council`, `doctor`, `postinstall`, `progress`, `security`, `tools`, `uninstall`, `update`, `test`, `changelog`, `scopes`, `phases`, `references`, `kanban`, `orchestrator`, `orchpanel`, `status`, `bin`, `brain`, `dogfeed`, `new-project`, `package`, `rcode-tools`, `rihal-tools`, `team`, `usp`, `v4`, `observability`, `audit`, `agent-rules`, `cursor`, `i18n`, `phase`, `scaffold`, `campaign`, `ship`, `getting-started`, 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`, `update`, `test`, `changelog`, `scopes`, `phases`, `references`, `kanban`, `orchestrator`, `orchpanel`, `status`, `bin`, `brain`, `dogfeed`, `new-project`, `package`, `rcode-tools`, `rihal-tools`, `team`, `usp`, `v4`, `observability`, `audit`, `agent-rules`, `cursor`, `i18n`, `phase`, `scaffold`, `campaign`, `ship`, `getting-started`, `do-router`, `milestone-health`, `modules`, `project-types`, `roadmapper`, `token`, 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
@@ -353,6 +353,12 @@ We use [Conventional Commits](https://www.conventionalcommits.org/) format. The
353
353
  - `scaffold` โ€” scaffold-project workflow changes
354
354
  - `campaign` โ€” fix-campaign orchestration tracking files
355
355
  - `ship` โ€” ship workflow changes
356
+ - `do-router` โ€” `/rcode-do` intent-router table and dispatch logic
357
+ - `milestone-health` โ€” milestone-health scoring in rcode-tools
358
+ - `modules` โ€” installable capability bundles under `rcode/skills/<module>/`
359
+ - `project-types` โ€” project-type templates and detection
360
+ - `roadmapper` โ€” roadmap generation agent/workflow
361
+ - `token` โ€” token-budget and cost-tracking logic
356
362
  - `<phase-id>` โ€” numeric phase scope when committing inside a phase (e.g. `docs(15)`, `feat(8.3)`)
357
363
  - `<sprint-id>` โ€” numeric sprint scope inside a phase (e.g. `feat(15.1)`)
358
364
 
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  ### An engineering org in a folder โ€” and you can watch it work.
8
8
 
9
- *A roster of specialist agents, phase-driven delivery, and a persistent Memory Bank โ€” running as plain files your IDE reads. **45 agents ยท 116 commands ยท 1 runtime dependency** โ€” test count and CI status tracked by the badge above.*
9
+ *A roster of specialist agents, phase-driven delivery, and a persistent Memory Bank โ€” running as plain files your IDE reads. **45 agents ยท 117 commands ยท 1 runtime dependency** โ€” test count and CI status tracked by the badge above.*
10
10
 
11
11
  <p align="center"><img src="brand/dashboard-team.png" alt="rcode agent roster grouped by function โ€” Leadership (Sadiq / strategy, Waleed / CTO, Ahmed / delivery, Nasser / eng manager), Engineering (Omar, Haitham / frontend, Yousef / backend, Zayd / ML, Khalid / DevOps), Product (Hussain / PM, Mariam / marketing), each card showing its role and tools" width="860"></p>
12
12
 
@@ -23,7 +23,7 @@ pnpm dlx @hanzlaa/rcode install
23
23
  [![CI](https://github.com/hanzlahabib/rcode/actions/workflows/test.yml/badge.svg)](https://github.com/hanzlahabib/rcode/actions/workflows/test.yml)
24
24
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
25
25
 
26
- Status: `@hanzlaa/rcode` v4.4.2 on npm. 45 agents ยท 116 commands ยท 129 workflows ยท **1 runtime dependency**. Test status tracked by CI badge above. Actively dogfooded on real projects every week.
26
+ Status: `@hanzlaa/rcode` v4.4.4 on npm. 45 agents ยท 117 commands ยท 129 workflows ยท **1 runtime dependency**. Test status tracked by CI badge above. Actively dogfooded on real projects every week.
27
27
 
28
28
  ---
29
29
 
@@ -54,7 +54,7 @@ Three layers, specialised for software delivery:
54
54
  | Layer | What lives here | Example |
55
55
  |-------|-----------------|---------|
56
56
  | **Memory** | `.rcode/memory/` โ€” git-tracked markdown, lossless distillates | "We chose Postgres over Mongo because of JSON-B + RLS โ€” see ADR-007" |
57
- | **Skills** | `rcode/skills/` โ€” 88 phrase-activated playbooks | `rcode-sprint-checker` validates file/symbol refs before execute |
57
+ | **Skills** | `rcode/skills/` โ€” 96 phrase-activated playbooks | `rcode-sprint-checker` validates file/symbol refs before execute |
58
58
  | **Workflows** | `rcode/workflows/` โ€” orchestrated multi-step paths | `/rcode-plan` runs research โ†’ planner โ†’ checker โ†’ confirm |
59
59
 
60
60
  Single agent navigates the structure. No LangChain, no AutoGen, no orchestrator process. Just folders the model can read.
package/cli/install.js CHANGED
@@ -205,6 +205,9 @@ function parseArgs(argv) {
205
205
  silent: false,
206
206
  // noPrompt โ€” skip all interactive prompts (used by postinstall auto-run)
207
207
  noPrompt: false,
208
+ // localOnly (#938) โ€” force a self-contained project install: write all
209
+ // skills locally instead of deferring to global ~/.claude/skills.
210
+ localOnly: false,
208
211
  // dry-run / list-files โ€” preview paths that would be written, then exit
209
212
  dryRun: false,
210
213
  listFiles: false,
@@ -240,6 +243,7 @@ function parseArgs(argv) {
240
243
  else if (arg === '--no-git-hooks') opts.gitHooks = false; // #199
241
244
  else if (arg === '--git-hooks') opts.gitHooks = true; // #199
242
245
  else if (arg === '--global') opts.global = true;
246
+ else if (arg === '--local-only') opts.localOnly = true; // #938 โ€” force self-contained install (don't defer to global skills)
243
247
  else if (arg === '--silent') opts.silent = true;
244
248
  else if (arg === '--no-prompt') opts.noPrompt = true;
245
249
  else if (arg === '--dry-run') opts.dryRun = true;
@@ -2474,7 +2478,9 @@ async function installInner(opts) {
2474
2478
  // of identical files โ€” Claude Code shows both as duplicate slash commands.
2475
2479
  const globalClaudeCommands = path.join(homedir(), '.claude', 'commands');
2476
2480
  const projectClaudeCommands = path.join(opts.target, '.claude', 'commands');
2477
- const isProjectInstall = opts.target !== homedir();
2481
+ // #938 โ€” --local-only forces a self-contained install: treat it as NOT a
2482
+ // global-deferring project install so all skills/commands are written locally.
2483
+ const isProjectInstall = opts.target !== homedir() && !opts.localOnly;
2478
2484
  // Run dedup even when force:true โ€” only forceOverwrite skips it.
2479
2485
  if (isProjectInstall && !opts.forceOverwrite) {
2480
2486
  try {
@@ -2677,6 +2683,12 @@ async function installInner(opts) {
2677
2683
  let skillsInstalled = skillsResult.count;
2678
2684
  if (skillsResult.skippedGlobal > 0) {
2679
2685
  console.log(' ' + dim(`Skipped ${skillsResult.skippedGlobal} project-level rcode skills (global ones in ~/.claude/skills/ take precedence) โ€” closes #679.`));
2686
+ // #938 โ€” make the global dependency explicit. When local skills are skipped
2687
+ // the project relies on whatever rcode version is installed globally; a
2688
+ // collaborator without a global install (or on a different version) gets
2689
+ // different behavior. Tell the user how to force a self-contained install.
2690
+ console.log(' ' + dim(' โ†ณ This project now depends on your GLOBAL rcode install for those skills.'));
2691
+ console.log(' ' + dim(' For a self-contained project (e.g. for collaborators/CI), reinstall with --local-only.'));
2680
2692
  }
2681
2693
 
2682
2694
  // Generate install-time skill stubs that mirror sidebar-worthy slash commands.
@@ -57,10 +57,22 @@ function isGlobalInstall(env, dirname, cwd) {
57
57
 
58
58
  // Skip in CI or test environments. Tests that import this module bypass
59
59
  // the top-level effect by checking require.main !== module.
60
+ //
61
+ // #924 โ€” opt-out for users who install the package globally but do NOT want
62
+ // their ~/.claude mutated (e.g. inspecting the package, or managing the global
63
+ // install themselves). Setting RCODE_NO_POSTINSTALL=1 (or the npm-config
64
+ // equivalent `npm install -g @hanzlaa/rcode --rcode-no-postinstall`) skips the
65
+ // auto-install entirely; the user can run `rcode install --global` later. Note:
66
+ // `npm install --ignore-scripts` already prevents this script from running at all.
60
67
  if (require.main === module) {
61
68
  if (process.env.CI || process.env.NODE_ENV === 'test') {
62
69
  process.exit(0);
63
70
  }
71
+ if (process.env.RCODE_NO_POSTINSTALL === '1' || process.env.npm_config_rcode_no_postinstall) {
72
+ process.stderr.write('\nrcode: skipping global auto-install (RCODE_NO_POSTINSTALL set).\n');
73
+ process.stderr.write(" Run 'rcode install --global' when you want /rcode-* commands.\n\n");
74
+ process.exit(0);
75
+ }
64
76
  runPostInstall();
65
77
  }
66
78