mirror of
https://github.com/affaan-m/ECC.git
synced 2026-09-29 04:55:12 +02:00
feat(profiles): add opt-in Lean/Full and hybrid Auto selection
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env node
|
||||
'use strict';
|
||||
|
||||
const { loadContextRegistry, loadSkillTriggers } = require('../lib/context-pack-registry');
|
||||
const { compileContextProfile } = require('../lib/context-profiles');
|
||||
const { digestObject } = require('../lib/context-profile-support');
|
||||
|
||||
function validate(repoRoot) {
|
||||
const registry = loadContextRegistry({ repoRoot });
|
||||
const { triggers, manifest } = loadSkillTriggers({ repoRoot });
|
||||
const known = new Set(registry.entries.map(entry => entry.id));
|
||||
const unknown = Object.keys(triggers).filter(id => !known.has(id));
|
||||
if (unknown.length) throw new Error(`Skill triggers reference unknown skills: ${unknown.slice(0, 3).join(', ')}`);
|
||||
if (manifest && manifest.registryDigest && manifest.registryDigest !== registry.registryDigest) {
|
||||
throw new Error('Skill triggers manifest is stale: regenerate with scripts/dev/generate-skill-triggers.js');
|
||||
}
|
||||
if (manifest && manifest.triggersDigest && digestObject(triggers) !== manifest.triggersDigest) {
|
||||
throw new Error('Skill triggers digest mismatch: manifest was edited without updating triggersDigest');
|
||||
}
|
||||
for (const list of Object.values(triggers)) {
|
||||
for (const phrase of list) {
|
||||
if (phrase.length > 80) throw new Error(`Skill trigger exceeds 80 characters: ${phrase.slice(0, 40)}`);
|
||||
}
|
||||
}
|
||||
const profiles = ['lean@1', 'full@1'];
|
||||
for (const profileId of profiles) {
|
||||
for (const target of registry.targets) {
|
||||
compileContextProfile({ repoRoot, profileId, target });
|
||||
}
|
||||
}
|
||||
return {
|
||||
status: 'success', skillCount: registry.entries.length,
|
||||
profileCount: profiles.length, targetCount: registry.targets.length,
|
||||
projectionCount: profiles.length * registry.targets.length,
|
||||
registryDigest: registry.registryDigest, nativeCertification: 'unobserved',
|
||||
triggerCoverage: { skills: manifest ? manifest.coverage.skills : 0, withTriggers: Object.keys(triggers).length },
|
||||
};
|
||||
}
|
||||
|
||||
function main(args = process.argv.slice(2)) {
|
||||
try {
|
||||
for (const arg of args) {
|
||||
if (arg !== '--json') throw new Error(`Unknown argument: ${arg}`);
|
||||
}
|
||||
const result = validate();
|
||||
console.log(args.includes('--json') ? JSON.stringify(result, null, 2)
|
||||
: `Context profiles valid: ${result.skillCount} skills, ${result.projectionCount} profile/target projections, triggers ${result.triggerCoverage.withTriggers}/${result.triggerCoverage.skills || result.skillCount}. Native certification: unobserved.`);
|
||||
return 0;
|
||||
} catch (error) {
|
||||
console.error(`Context profile validation failed: ${error.message}`);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (require.main === module) process.exitCode = main();
|
||||
module.exports = { main, validate };
|
||||
Reference in New Issue
Block a user