@hanzlaa/rcode 4.4.1 โ 4.4.3
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 +1 -1
- package/CONTRIBUTING.md +6 -0
- package/README.md +13 -13
- package/cli/install.js +20 -3
- package/cli/postinstall.js +12 -0
- package/dist/rcode.js +25 -25
- package/package.json +1 -1
- package/rcode/bin/rcode-tools.cjs +63 -8
- package/rcode/brain/sources.yaml +10 -0
- package/rcode/command-aliases.yaml +16 -0
- package/rcode/commands/lazy.md +2 -1
- package/rcode/internal-workflows.yaml +26 -0
- package/rcode/skills/seo/on-page-seo-auditor/SKILL.md +8 -155
- package/rcode/skills/seo/on-page-seo-auditor/references.md +108 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/SKILL.md +1 -1
- package/rcode/skills/seo/seo-audit/SKILL.md +6 -255
- package/rcode/skills/seo/seo-audit/references.md +257 -0
- package/rcode/skills/seo/seo-content-factory/SKILL.md +1 -1
- package/rcode/skills/seo/seo-content-writer/SKILL.md +7 -94
- package/rcode/skills/seo/seo-content-writer/references.md +48 -0
- package/rcode/skills/seo/seo-growth-orchestrator/SKILL.md +1 -1
- package/rcode/skills/seo/seo-site-builder/SKILL.md +1 -1
- package/rcode/skills/seo/technical-seo-checker/SKILL.md +8 -157
- package/rcode/skills/seo/technical-seo-checker/references.md +100 -0
- package/rcode/workflows/help.md +1 -0
- package/rcode/workflows/lazy.md +30 -0
- package/server/dashboard.js +39 -38
- package/server/lib/html/client/components/App.js +2 -0
- package/server/lib/html/client/components/CommandPalette.js +5 -0
- package/server/lib/html/client/components/RunConfirmDialog.js +60 -0
- package/server/lib/html/client/orchestrator.js +51 -3
- package/server/lib/html/client/store.js +4 -0
- package/server/lib/html/css.js +21 -0
- 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 ยท
|
|
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
|
[](https://github.com/hanzlahabib/rcode/actions/workflows/test.yml)
|
|
24
24
|
[](LICENSE)
|
|
25
25
|
|
|
26
|
-
Status: `@hanzlaa/rcode` v4.4.
|
|
26
|
+
Status: `@hanzlaa/rcode` v4.4.3 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/` โ
|
|
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.
|
|
@@ -127,18 +127,18 @@ The point isn't "I beat LangChain." The point is **you don't need LangChain for
|
|
|
127
127
|
> node benchmarks/facts.cjs
|
|
128
128
|
> ```
|
|
129
129
|
|
|
130
|
-
<p align="center"><img src="brand/hero-receipt.png" alt="benchmarks/facts.cjs output โ 497 tests, 0 failing ยท 45 agents ยท 116 commands ยท 1 runtime dependency, computed from files on disk" width="720"></p>
|
|
131
|
-
|
|
132
130
|
| Metric | Value | Why it's not a vanity number |
|
|
133
131
|
|---|---|---|
|
|
134
|
-
| **Portable methodology corpus** |
|
|
135
|
-
| **Automated tests** | **
|
|
136
|
-
| **Tested CLI engine** |
|
|
137
|
-
| **Runtime dependencies** | **1** (`ws`, for the dashboard socket) | The
|
|
138
|
-
| **Specialist agents / commands / workflows / skills** | **45 /
|
|
139
|
-
| **Core-op latency** | **~
|
|
140
|
-
|
|
141
|
-
|
|
132
|
+
| **Portable methodology corpus** | **~105,000 lines** of markdown | A 10-person eng org's playbooks (agents + commands + workflows + skills + references) โ as files you own and grep, not a SaaS you rent. |
|
|
133
|
+
| **Automated tests** | **495** across 62 files | The methodology is *guarded*, not vibes. Live pass/fail status is on the CI badge above; `node --test` (or `node benchmarks/facts.cjs`) reproduces locally in seconds. |
|
|
134
|
+
| **Tested CLI engine** | **~9,700 lines** (`rcode-tools.cjs` + `lib/`) | The deterministic brain โ routing, state, planning math โ is real code under test, not prompt soup. |
|
|
135
|
+
| **Runtime dependencies** | **1** (`ws`, for the dashboard socket) | The dashboard is otherwise pure Node stdlib. Almost nothing to audit, nothing to CVE-scan, nothing to break on `npm install`. |
|
|
136
|
+
| **Specialist agents / commands / workflows / skills** | **45 / 117 / 129 / 96** | An entire engineering org, phrase-activated, that travels with you across Claude Code, Cursor, Codex, VS Code, Antigravity, Windsurf. |
|
|
137
|
+
| **Core-op latency** | **~60 ms**, **0 LLM tokens** (best-of-7) | Intent routing, state reads, and milestone-health are deterministic *local* compute โ a few ms over Node's own cold-start floor. The orchestration layer doesn't burn API tokens on bookkeeping the way pure-LLM agent frameworks do. |
|
|
138
|
+
|
|
139
|
+
> Counts above are produced by `node benchmarks/facts.cjs` and may drift slightly between releases โ run it for the exact current figures.
|
|
140
|
+
|
|
141
|
+
**The headline:** an entire software-delivery methodology โ ~105k lines of it โ guarded by a real test suite, riding on a single runtime dependency, with an orchestration brain that costs **zero tokens** to think. Not a viral prompt. A system you can verify line by line.
|
|
142
142
|
|
|
143
143
|
---
|
|
144
144
|
|
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;
|
|
@@ -825,15 +829,20 @@ function seedStarterPlanning(target, projectName) {
|
|
|
825
829
|
|
|
826
830
|
const state = {
|
|
827
831
|
version: '1',
|
|
828
|
-
|
|
832
|
+
// #940 โ match the canonical schema (cli/lib/schemas.cjs stateSchema):
|
|
833
|
+
// schema_version is required, milestones is a plural array. Without these
|
|
834
|
+
// a freshly-installed state.json failed `rcode-tools validate` until the
|
|
835
|
+
// first migrateState() read. Write conformant state up front.
|
|
836
|
+
schema_version: 2,
|
|
837
|
+
project: resolvedProject || path.basename(target),
|
|
829
838
|
...(isStubProject ? { _seeded_stub: true } : {}),
|
|
830
839
|
created: now,
|
|
831
840
|
updated: now,
|
|
832
841
|
current_phase: resolvedPhase,
|
|
833
842
|
current_plan: 0,
|
|
834
843
|
current_sprint: null,
|
|
835
|
-
milestone: null,
|
|
836
844
|
phases: [],
|
|
845
|
+
milestones: [],
|
|
837
846
|
executions: [],
|
|
838
847
|
decisions: [],
|
|
839
848
|
blockers: [],
|
|
@@ -2469,7 +2478,9 @@ async function installInner(opts) {
|
|
|
2469
2478
|
// of identical files โ Claude Code shows both as duplicate slash commands.
|
|
2470
2479
|
const globalClaudeCommands = path.join(homedir(), '.claude', 'commands');
|
|
2471
2480
|
const projectClaudeCommands = path.join(opts.target, '.claude', 'commands');
|
|
2472
|
-
|
|
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;
|
|
2473
2484
|
// Run dedup even when force:true โ only forceOverwrite skips it.
|
|
2474
2485
|
if (isProjectInstall && !opts.forceOverwrite) {
|
|
2475
2486
|
try {
|
|
@@ -2672,6 +2683,12 @@ async function installInner(opts) {
|
|
|
2672
2683
|
let skillsInstalled = skillsResult.count;
|
|
2673
2684
|
if (skillsResult.skippedGlobal > 0) {
|
|
2674
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.'));
|
|
2675
2692
|
}
|
|
2676
2693
|
|
|
2677
2694
|
// Generate install-time skill stubs that mirror sidebar-worthy slash commands.
|
package/cli/postinstall.js
CHANGED
|
@@ -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
|
|