@hanzlaa/rcode 4.15.0 → 4.15.2
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 +32 -1
- package/dist/rcode.js +91 -91
- package/package.json +1 -1
- package/rcode/agents/rcode-orchestrator.md +3 -0
- package/rcode/agents/rules/orchestrator/contract.md +18 -0
- package/rcode/agents/rules/roadmapper/detailed-guide.md +4 -2
- package/rcode/agents/rules/sprint-checker/dimensions.md +20 -0
- package/rcode/agents/rules/sprint-checker/plan-quality-rubric.md +110 -0
- package/rcode/references/agent-shared-rules.md +8 -0
- package/rcode/references/planner-playbook.md +17 -1
- package/rcode/references/sprint-checker-playbook.md +11 -0
- package/rcode/skills/actions/4-implementation/rcode-code-review/SKILL.md +12 -5
- package/rcode/skills/actions/4-implementation/rcode-code-review/steps/step-02-review.md +61 -10
- package/rcode/skills/actions/4-implementation/rcode-code-review/steps/step-03-triage.md +28 -3
- package/rcode/skills/actions/4-implementation/rcode-code-review/workflow.md +8 -1
- package/rcode/skills/agents/haitham-frontend/SKILL.md +1 -1
- package/rcode/skills/agents/hanzla-engineer/SKILL.md +1 -1
- package/rcode/skills/agents/hussain-pm/SKILL.md +1 -1
- package/rcode/skills/agents/noor-writer/SKILL.md +2 -2
- package/rcode/skills/agents/orchestrator/SKILL.md +35 -5
- package/rcode/skills/agents/yousef-backend/SKILL.md +2 -2
- package/rcode/skills/agents/zayd-ml/SKILL.md +1 -1
- package/rcode/skills/core/rcode-help/SKILL.md +2 -1
- package/rcode/workflows/execute-sprint.md +1 -1
- package/rcode/workflows/plan.md +19 -0
- package/rcode/workflows/secure-phase.md +3 -1
- package/rcode/skills/rcode-init/SKILL.md +0 -134
package/cli/install.js
CHANGED
|
@@ -1373,12 +1373,29 @@ function installSkills(packageRoot, target, options = {}) {
|
|
|
1373
1373
|
let skippedGlobal = 0;
|
|
1374
1374
|
|
|
1375
1375
|
const _internalSkillCache = new Map();
|
|
1376
|
+
// `user-invocable: true` WINS over `internal: true`.
|
|
1377
|
+
//
|
|
1378
|
+
// These two flags contradict each other and 36 of the 38 internal skills
|
|
1379
|
+
// declared both. The installer read only `internal`, so every one of those
|
|
1380
|
+
// skills went to .rcode/skills/ instead of .claude/skills/ — which means the
|
|
1381
|
+
// model never saw their descriptions and they could never auto-activate. They
|
|
1382
|
+
// worked only if the user typed the exact slash command.
|
|
1383
|
+
//
|
|
1384
|
+
// That is how "review this PR <url>" reached the built-in code-review skill
|
|
1385
|
+
// instead of rcode's: rcode's reviewer was invisible, not out-competed.
|
|
1386
|
+
//
|
|
1387
|
+
// A skill that declares user-invocable, writes its description for activation
|
|
1388
|
+
// ("Activates when the user says..."), and lists trigger phrases is user-facing
|
|
1389
|
+
// by every signal it gives. `internal` is for genuine utility libraries that
|
|
1390
|
+
// other skills call — and those do not claim to be user-invocable.
|
|
1376
1391
|
function isInternalSkill(skillDir) {
|
|
1377
1392
|
if (_internalSkillCache.has(skillDir)) return _internalSkillCache.get(skillDir);
|
|
1378
1393
|
const skillMd = path.join(skillDir, 'SKILL.md');
|
|
1379
1394
|
if (!fs.existsSync(skillMd)) { _internalSkillCache.set(skillDir, false); return false; }
|
|
1380
1395
|
const text = fs.readFileSync(skillMd, 'utf8');
|
|
1381
|
-
const
|
|
1396
|
+
const internal = /^internal:\s*true\s*$/m.test(text);
|
|
1397
|
+
const userInvocable = /^user-invocable:\s*true\s*$/m.test(text);
|
|
1398
|
+
const result = internal && !userInvocable;
|
|
1382
1399
|
_internalSkillCache.set(skillDir, result);
|
|
1383
1400
|
return result;
|
|
1384
1401
|
}
|
|
@@ -1570,6 +1587,20 @@ function buildInstallPlan(ide = 'claude', target = process.cwd()) {
|
|
|
1570
1587
|
plan.push({ src: f, rel: path.join('.rcode', 'data', rel) });
|
|
1571
1588
|
}
|
|
1572
1589
|
|
|
1590
|
+
// .rcode/templates/ — every template, not just the starter projects.
|
|
1591
|
+
//
|
|
1592
|
+
// Only `templates/projects/` was ever copied, so a fresh install had NO
|
|
1593
|
+
// .md templates at all while workflows went on reading them:
|
|
1594
|
+
// plan-research-validation.md and validate-phase.md both read
|
|
1595
|
+
// `.rcode/templates/VALIDATION.md`, which never existed. Any templates found
|
|
1596
|
+
// in an older project were leftovers from a version that did copy them, which
|
|
1597
|
+
// is why this stayed invisible — it only broke on FRESH installs.
|
|
1598
|
+
for (const f of walkFiles(path.join(SOURCE_ROOT, 'templates'))) {
|
|
1599
|
+
const rel = path.relative(path.join(SOURCE_ROOT, 'templates'), f);
|
|
1600
|
+
if (rel.startsWith('projects' + path.sep) || rel === 'projects') continue; // handled below
|
|
1601
|
+
plan.push({ src: f, rel: path.join('.rcode', 'templates', rel) });
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1573
1604
|
// .rcode/templates/projects/ — starter templates consumed by /rcode-from-template
|
|
1574
1605
|
const projectTemplatesSrc = path.join(SOURCE_ROOT, 'templates', 'projects');
|
|
1575
1606
|
const relProjectTemplates = path.relative(target, path.join(target, '.rcode', 'templates', 'projects'));
|