fix: restore agent yaml command export

This commit is contained in:
Affaan Mustafa
2026-04-08 12:58:02 -07:00
parent 1bc9b9c585
commit 0ff58108e4
3 changed files with 163 additions and 2 deletions

View File

@@ -1,6 +1,6 @@
# Working Context # Working Context
Last updated: 2026-04-05 Last updated: 2026-04-08
## Purpose ## Purpose
@@ -10,7 +10,7 @@ Public ECC plugin repo for agents, skills, commands, hooks, rules, install surfa
- Default branch: `main` - Default branch: `main`
- Public release surface is aligned at `v1.10.0` - Public release surface is aligned at `v1.10.0`
- Public catalog truth is `39` agents, `73` commands, and `179` skills - Public catalog truth is `47` agents, `79` commands, and `181` skills
- Public plugin slug is now `ecc`; legacy `everything-claude-code` install paths remain supported for compatibility - Public plugin slug is now `ecc`; legacy `everything-claude-code` install paths remain supported for compatibility
- Release discussion: `#1272` - Release discussion: `#1272`
- ECC 2.0 exists in-tree and builds, but it is still alpha rather than GA - ECC 2.0 exists in-tree and builds, but it is still alpha rather than GA
@@ -36,6 +36,7 @@ Public ECC plugin repo for agents, skills, commands, hooks, rules, install surfa
- control plane primitives - control plane primitives
- operator surface - operator surface
- self-improving skills - self-improving skills
- keep `agent.yaml` export parity with the shipped `commands/` and `skills/` directories so modern install surfaces do not silently lose command registration
- Skill quality: - Skill quality:
- rewrite content-facing skills to use source-backed voice modeling - rewrite content-facing skills to use source-backed voice modeling
- remove generic LLM rhetoric, canned CTA patterns, and forced platform stereotypes - remove generic LLM rhetoric, canned CTA patterns, and forced platform stereotypes
@@ -175,3 +176,4 @@ Keep this file detailed for only the current sprint, blockers, and next actions.
- `skills/oura-health` and `skills/pmx-guidelines` are user- or project-specific, not canonical ECC surfaces - `skills/oura-health` and `skills/pmx-guidelines` are user- or project-specific, not canonical ECC surfaces
- `docs/releases/2.0.0-preview/*` is premature collateral and should be rebuilt from current product truth later - `docs/releases/2.0.0-preview/*` is premature collateral and should be rebuilt from current product truth later
- nested `skills/hermes-generated/*` is superseded by the top-level ECC-native operator skills already ported to `main` - nested `skills/hermes-generated/*` is superseded by the top-level ECC-native operator skills already ported to `main`
- 2026-04-08: Fixed the command-export regression reported in `#1327` by restoring a canonical `commands:` section in `agent.yaml` and adding `tests/ci/agent-yaml-surface.test.js` to enforce exact parity between the YAML export surface and the real `commands/` directory. Verified with the full repo test sweep: `1764/1764` passing.

View File

@@ -143,6 +143,86 @@ skills:
- videodb - videodb
- visa-doc-translate - visa-doc-translate
- x-api - x-api
commands:
- agent-sort
- aside
- build-fix
- checkpoint
- claw
- code-review
- context-budget
- cpp-build
- cpp-review
- cpp-test
- devfleet
- docs
- e2e
- eval
- evolve
- feature-dev
- flutter-build
- flutter-review
- flutter-test
- gan-build
- gan-design
- go-build
- go-review
- go-test
- gradle-build
- harness-audit
- hookify
- hookify-configure
- hookify-help
- hookify-list
- instinct-export
- instinct-import
- instinct-status
- jira
- kotlin-build
- kotlin-review
- kotlin-test
- learn
- learn-eval
- loop-start
- loop-status
- model-route
- multi-backend
- multi-execute
- multi-frontend
- multi-plan
- multi-workflow
- orchestrate
- plan
- pm2
- projects
- promote
- prompt-optimize
- prp-commit
- prp-implement
- prp-plan
- prp-pr
- prp-prd
- prune
- python-review
- quality-gate
- refactor-clean
- resume-session
- review-pr
- rules-distill
- rust-build
- rust-review
- rust-test
- santa-loop
- save-session
- sessions
- setup-pm
- skill-create
- skill-health
- tdd
- test-coverage
- update-codemaps
- update-docs
- verify
tags: tags:
- agent-harness - agent-harness
- developer-tools - developer-tools

View File

@@ -0,0 +1,79 @@
#!/usr/bin/env node
/**
* Validate agent.yaml exports the legacy command shim surface.
*/
const assert = require('assert');
const fs = require('fs');
const path = require('path');
const REPO_ROOT = path.join(__dirname, '..', '..');
const AGENT_YAML_PATH = path.join(REPO_ROOT, 'agent.yaml');
const COMMANDS_DIR = path.join(REPO_ROOT, 'commands');
function extractTopLevelList(yamlSource, key) {
const lines = yamlSource.replace(/^\uFEFF/, '').split(/\r?\n/);
const results = [];
let collecting = false;
for (const line of lines) {
if (!collecting) {
if (line.trim() === `${key}:`) {
collecting = true;
}
continue;
}
if (/^[A-Za-z0-9_-]+:\s*/.test(line)) {
break;
}
const match = line.match(/^\s*-\s+(.+?)\s*$/);
if (match) {
results.push(match[1]);
}
}
return results;
}
function test(name, fn) {
try {
fn();
console.log(`${name}`);
return true;
} catch (error) {
console.log(`${name}`);
console.log(` Error: ${error.message}`);
return false;
}
}
function run() {
console.log('\n=== Testing agent.yaml export surface ===\n');
let passed = 0;
let failed = 0;
const yamlSource = fs.readFileSync(AGENT_YAML_PATH, 'utf8');
const declaredCommands = extractTopLevelList(yamlSource, 'commands').sort();
const actualCommands = fs.readdirSync(COMMANDS_DIR)
.filter(file => file.endsWith('.md'))
.map(file => path.basename(file, '.md'))
.sort();
if (test('agent.yaml declares commands export surface', () => {
assert.ok(declaredCommands.length > 0, 'Expected non-empty commands list in agent.yaml');
})) passed++; else failed++;
if (test('agent.yaml commands stay in sync with commands/ directory', () => {
assert.deepStrictEqual(declaredCommands, actualCommands);
})) passed++; else failed++;
console.log(`\nPassed: ${passed}`);
console.log(`Failed: ${failed}`);
process.exit(failed > 0 ? 1 : 0);
}
run();