MCPcopy Create free account
hub / github.com/SethGammon/Citadel / main

Function main

scripts/skill-bench.js:808–1041  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

806// ── Main ──────────────────────────────────────────────────────────────────────
807
808function main() {
809 const allScenarios = discoverScenarios();
810
811 if (allScenarios.length === 0) {
812 console.log('\nNo benchmark scenarios found.');
813 console.log('Add scenario files at skills/{skill-name}/__benchmarks__/{scenario}.md');
814 console.log('\nSee skills/dashboard/__benchmarks__/ for examples.');
815 process.exit(0);
816 }
817
818 // Apply filters
819 let scenarios = allScenarios;
820 if (skillFilter) {
821 scenarios = scenarios.filter(s => s.skill === skillFilter || s.skill.includes(skillFilter));
822 if (scenarios.length === 0) {
823 console.error(`No scenarios found for skill "${skillFilter}".`);
824 console.error(`Available skills with scenarios: ${[...new Set(allScenarios.map(s => s.skill))].join(', ')}`);
825 process.exit(1);
826 }
827 }
828 if (scenarioFilter) {
829 scenarios = scenarios.filter(s => s.name === scenarioFilter || s.name.includes(scenarioFilter));
830 if (scenarios.length === 0) {
831 console.error(`No scenarios found for scenario "${scenarioFilter}".`);
832 process.exit(1);
833 }
834 }
835 if (tagFilter) {
836 scenarios = scenarios.filter(s => s.tags.includes(tagFilter));
837 if (scenarios.length === 0) {
838 console.error(`No scenarios found with tag "${tagFilter}".`);
839 process.exit(1);
840 }
841 }
842 if (INVARIANT_ONLY) {
843 scenarios = scenarios.filter(s => s.behavior === 'invariant');
844 if (scenarios.length === 0) {
845 console.error('No invariant-behavior scenarios found.');
846 process.exit(1);
847 }
848 }
849
850 // List mode
851 if (LIST_MODE) {
852 console.log(`\nBenchmark scenarios (${scenarios.length}):\n`);
853 const bySkill = {};
854 for (const s of scenarios) {
855 bySkill[s.skill] = bySkill[s.skill] || [];
856 bySkill[s.skill].push(s);
857 }
858 for (const [skill, skillScenarios] of Object.entries(bySkill)) {
859 console.log(` ${skill}/`);
860 for (const s of skillScenarios) {
861 const tags = s.tags.length ? ` [${s.tags.join(', ')}]` : '';
862 const bTag = s.behavior === 'implementation' ? ' (impl)' : '';
863 const skipTag = s.skipExecute
864 ? ` [SKIP${s.skipReason ? ': ' + s.skipReason : ''}]`
865 : '';

Callers 1

skill-bench.jsFile · 0.70

Calls 13

discoverScenariosFunction · 0.85
findCodexCLIFunction · 0.85
setupProjectStateFunction · 0.85
setupCodexProjectRuntimeFunction · 0.85
snapshotTelemetryFunction · 0.85
executeCodexScenarioFunction · 0.85
executeClaudeScenarioFunction · 0.85
runAssertionsFunction · 0.85
assertHooksFiredFunction · 0.85
validateScenarioFunction · 0.85
printScenarioResultFunction · 0.85
writeResultsFunction · 0.85

Tested by

no test coverage detected