mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-04-09 19:03:28 +08:00
fix: restore agent yaml command export
This commit is contained in:
@@ -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.
|
||||||
|
|||||||
80
agent.yaml
80
agent.yaml
@@ -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
|
||||||
|
|||||||
79
tests/ci/agent-yaml-surface.test.js
Normal file
79
tests/ci/agent-yaml-surface.test.js
Normal 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();
|
||||||
Reference in New Issue
Block a user