diff --git a/AGENTS.md b/AGENTS.md index 3412f269..fd7b24cf 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -25,8 +25,8 @@ This is a **production-ready AI coding plugin** providing 47 specialized agents, | e2e-runner | End-to-end Playwright testing | Critical user flows | | refactor-cleaner | Dead code cleanup | Code maintenance | | doc-updater | Documentation and codemaps | Updating docs | -| cpp-reviewer | C++ code review | C++ projects | -| cpp-build-resolver | C++ build errors | C++ build failures | +| cpp-reviewer | C/C++ code review | C and C++ projects | +| cpp-build-resolver | C/C++ build errors | C and C++ build failures | | docs-lookup | Documentation lookup via Context7 | API/docs questions | | go-reviewer | Go code review | Go projects | | go-build-resolver | Go build errors | Go build failures | diff --git a/manifests/install-components.json b/manifests/install-components.json index 675aa78f..045d8e62 100644 --- a/manifests/install-components.json +++ b/manifests/install-components.json @@ -193,6 +193,14 @@ "framework-language" ] }, + { + "id": "lang:c", + "family": "language", + "description": "C engineering guidance using the shared C/C++ standards and testing stack. Currently resolves through the shared framework-language module.", + "modules": [ + "framework-language" + ] + }, { "id": "lang:kotlin", "family": "language", diff --git a/scripts/lib/install-manifests.js b/scripts/lib/install-manifests.js index cd6541d6..3121f7b1 100644 --- a/scripts/lib/install-manifests.js +++ b/scripts/lib/install-manifests.js @@ -37,6 +37,7 @@ const LEGACY_COMPAT_BASE_MODULE_IDS_BY_TARGET = Object.freeze({ ], }); const LEGACY_LANGUAGE_ALIAS_TO_CANONICAL = Object.freeze({ + c: 'c', cpp: 'cpp', csharp: 'csharp', go: 'go', @@ -52,6 +53,7 @@ const LEGACY_LANGUAGE_ALIAS_TO_CANONICAL = Object.freeze({ typescript: 'typescript', }); const LEGACY_LANGUAGE_EXTRA_MODULE_IDS = Object.freeze({ + c: ['framework-language'], cpp: ['framework-language'], csharp: ['framework-language'], go: ['framework-language'], diff --git a/scripts/lib/project-detect.js b/scripts/lib/project-detect.js index cac0f060..dafd9b34 100644 --- a/scripts/lib/project-detect.js +++ b/scripts/lib/project-detect.js @@ -50,6 +50,11 @@ const LANGUAGE_RULES = [ markers: ['pom.xml', 'build.gradle', 'build.gradle.kts'], extensions: ['.java'] }, + { + type: 'c', + markers: [], + extensions: ['.c'] + }, { type: 'csharp', markers: [], diff --git a/tests/lib/install-manifests.test.js b/tests/lib/install-manifests.test.js index 4e64ea56..662a1270 100644 --- a/tests/lib/install-manifests.test.js +++ b/tests/lib/install-manifests.test.js @@ -74,6 +74,8 @@ function runTests() { const components = listInstallComponents(); assert.ok(components.some(component => component.id === 'lang:typescript'), 'Should include lang:typescript'); + assert.ok(components.some(component => component.id === 'lang:c'), + 'Should include lang:c'); assert.ok(components.some(component => component.id === 'capability:security'), 'Should include capability:security'); })) passed++; else failed++; @@ -87,6 +89,7 @@ function runTests() { assert.ok(languages.includes('kotlin')); assert.ok(languages.includes('rust')); assert.ok(languages.includes('cpp')); + assert.ok(languages.includes('c')); assert.ok(languages.includes('csharp')); })) passed++; else failed++; @@ -183,6 +186,17 @@ function runTests() { 'cpp should resolve to framework-language module'); })) passed++; else failed++; + if (test('resolves c legacy compatibility into framework-language module', () => { + const selection = resolveLegacyCompatibilitySelection({ + target: 'cursor', + legacyLanguages: ['c'], + }); + + assert.ok(selection.moduleIds.includes('rules-core')); + assert.ok(selection.moduleIds.includes('framework-language'), + 'c should resolve to framework-language module'); + })) passed++; else failed++; + if (test('resolves csharp legacy compatibility into framework-language module', () => { const selection = resolveLegacyCompatibilitySelection({ target: 'cursor', diff --git a/tests/lib/project-detect.test.js b/tests/lib/project-detect.test.js index 12294060..0d7aec8d 100644 --- a/tests/lib/project-detect.test.js +++ b/tests/lib/project-detect.test.js @@ -220,6 +220,20 @@ function runTests() { } })) passed++; else failed++; + console.log('\nC Detection:'); + + if (test('detects c from top-level .c files', () => { + const dir = createTempDir(); + try { + writeTestFile(dir, 'main.c', 'int main(void) { return 0; }\n'); + const result = detectProjectType(dir); + assert.ok(result.languages.includes('c')); + assert.strictEqual(result.primary, 'c'); + } finally { + cleanupDir(dir); + } + })) passed++; else failed++; + // Go detection console.log('\nGo Detection:');