From 7f3d84b27e40b8ac3e4176190f2bdf233617b090 Mon Sep 17 00:00:00 2001 From: Pushpak Chhajed Date: Mon, 15 Sep 2025 18:59:06 +0530 Subject: [PATCH] Add Codex Guideline Support --- src/Install/CodeEnvironment/Codex.php | 46 +++++++++++++++++++ src/Install/CodeEnvironmentsDetector.php | 2 + .../Install/CodeEnvironmentsDetectorTest.php | 30 +++++++++++- 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 src/Install/CodeEnvironment/Codex.php diff --git a/src/Install/CodeEnvironment/Codex.php b/src/Install/CodeEnvironment/Codex.php new file mode 100644 index 00000000..f94a8751 --- /dev/null +++ b/src/Install/CodeEnvironment/Codex.php @@ -0,0 +1,46 @@ + [ + 'command' => 'which codex', + ], + Platform::Windows => [ + 'command' => 'where codex 2>nul', + ], + }; + } + + public function projectDetectionConfig(): array + { + return [ + 'paths' => ['.codex'], + 'files' => ['AGENTS.md'], + ]; + } + + public function guidelinesPath(): string + { + return 'AGENTS.md'; + } +} diff --git a/src/Install/CodeEnvironmentsDetector.php b/src/Install/CodeEnvironmentsDetector.php index 530c0ee8..258c86ad 100644 --- a/src/Install/CodeEnvironmentsDetector.php +++ b/src/Install/CodeEnvironmentsDetector.php @@ -8,6 +8,7 @@ use Illuminate\Support\Collection; use Laravel\Boost\Install\CodeEnvironment\ClaudeCode; use Laravel\Boost\Install\CodeEnvironment\CodeEnvironment; +use Laravel\Boost\Install\CodeEnvironment\Codex; use Laravel\Boost\Install\CodeEnvironment\Copilot; use Laravel\Boost\Install\CodeEnvironment\Cursor; use Laravel\Boost\Install\CodeEnvironment\PhpStorm; @@ -22,6 +23,7 @@ class CodeEnvironmentsDetector 'vscode' => VSCode::class, 'cursor' => Cursor::class, 'claudecode' => ClaudeCode::class, + 'codex' => Codex::class, 'copilot' => Copilot::class, ]; diff --git a/tests/Unit/Install/CodeEnvironmentsDetectorTest.php b/tests/Unit/Install/CodeEnvironmentsDetectorTest.php index 5ec57c38..0e99a6cc 100644 --- a/tests/Unit/Install/CodeEnvironmentsDetectorTest.php +++ b/tests/Unit/Install/CodeEnvironmentsDetectorTest.php @@ -40,6 +40,7 @@ $container->bind(\Laravel\Boost\Install\CodeEnvironment\VSCode::class, fn () => $program2); $container->bind(\Laravel\Boost\Install\CodeEnvironment\Cursor::class, fn () => $program3); $container->bind(\Laravel\Boost\Install\CodeEnvironment\ClaudeCode::class, fn () => $otherProgram); + $container->bind(\Laravel\Boost\Install\CodeEnvironment\Codex::class, fn () => $otherProgram); $container->bind(\Laravel\Boost\Install\CodeEnvironment\Copilot::class, fn () => $otherProgram); $detector = new CodeEnvironmentsDetector($container); @@ -64,6 +65,7 @@ $container->bind(\Laravel\Boost\Install\CodeEnvironment\VSCode::class, fn () => $otherProgram); $container->bind(\Laravel\Boost\Install\CodeEnvironment\Cursor::class, fn () => $otherProgram); $container->bind(\Laravel\Boost\Install\CodeEnvironment\ClaudeCode::class, fn () => $otherProgram); + $container->bind(\Laravel\Boost\Install\CodeEnvironment\Codex::class, fn () => $otherProgram); $container->bind(\Laravel\Boost\Install\CodeEnvironment\Copilot::class, fn () => $otherProgram); $detector = new CodeEnvironmentsDetector($container); @@ -139,7 +141,6 @@ expect($detected)->toContain('claudecode'); - // Cleanup unlink($tempDir.'/CLAUDE.md'); rmdir($tempDir); }); @@ -169,7 +170,6 @@ expect($detected)->toContain('claudecode'); - // Cleanup rmdir($tempDir.'/.claude'); rmdir($tempDir); }); @@ -216,6 +216,32 @@ rmdir($tempDir); }); +test('discoverProjectInstalledCodeEnvironments detects codex with codex directory', function () { + $tempDir = sys_get_temp_dir().'/boost_test_'.uniqid(); + mkdir($tempDir); + mkdir($tempDir.'/.codex'); + + $detected = $this->detector->discoverProjectInstalledCodeEnvironments($tempDir); + + expect($detected)->toContain('codex'); + + rmdir($tempDir.'/.codex'); + rmdir($tempDir); +}); + +test('discoverProjectInstalledCodeEnvironments detects codex with AGENTS.md file', function () { + $tempDir = sys_get_temp_dir().'/boost_test_'.uniqid(); + mkdir($tempDir); + file_put_contents($tempDir.'/AGENTS.md', 'test'); + + $detected = $this->detector->discoverProjectInstalledCodeEnvironments($tempDir); + + expect($detected)->toContain('codex'); + + unlink($tempDir.'/AGENTS.md'); + rmdir($tempDir); +}); + test('discoverProjectInstalledCodeEnvironments handles multiple detections', function () { $tempDir = sys_get_temp_dir().'/boost_test_'.uniqid(); mkdir($tempDir);