Skip to content

Commit 463013b

Browse files
authored
Merge pull request #258 from laravel/codex-guideline-support
Add Codex Guideline Support
2 parents 6f4b689 + 7f3d84b commit 463013b

File tree

3 files changed

+76
-2
lines changed

3 files changed

+76
-2
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Laravel\Boost\Install\CodeEnvironment;
6+
7+
use Laravel\Boost\Contracts\Agent;
8+
use Laravel\Boost\Install\Enums\Platform;
9+
10+
class Codex extends CodeEnvironment implements Agent
11+
{
12+
public function name(): string
13+
{
14+
return 'codex';
15+
}
16+
17+
public function displayName(): string
18+
{
19+
return 'Codex';
20+
}
21+
22+
public function systemDetectionConfig(Platform $platform): array
23+
{
24+
return match ($platform) {
25+
Platform::Darwin, Platform::Linux => [
26+
'command' => 'which codex',
27+
],
28+
Platform::Windows => [
29+
'command' => 'where codex 2>nul',
30+
],
31+
};
32+
}
33+
34+
public function projectDetectionConfig(): array
35+
{
36+
return [
37+
'paths' => ['.codex'],
38+
'files' => ['AGENTS.md'],
39+
];
40+
}
41+
42+
public function guidelinesPath(): string
43+
{
44+
return 'AGENTS.md';
45+
}
46+
}

src/Install/CodeEnvironmentsDetector.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Illuminate\Support\Collection;
99
use Laravel\Boost\Install\CodeEnvironment\ClaudeCode;
1010
use Laravel\Boost\Install\CodeEnvironment\CodeEnvironment;
11+
use Laravel\Boost\Install\CodeEnvironment\Codex;
1112
use Laravel\Boost\Install\CodeEnvironment\Copilot;
1213
use Laravel\Boost\Install\CodeEnvironment\Cursor;
1314
use Laravel\Boost\Install\CodeEnvironment\PhpStorm;
@@ -22,6 +23,7 @@ class CodeEnvironmentsDetector
2223
'vscode' => VSCode::class,
2324
'cursor' => Cursor::class,
2425
'claudecode' => ClaudeCode::class,
26+
'codex' => Codex::class,
2527
'copilot' => Copilot::class,
2628
];
2729

tests/Unit/Install/CodeEnvironmentsDetectorTest.php

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
$container->bind(\Laravel\Boost\Install\CodeEnvironment\VSCode::class, fn () => $program2);
4141
$container->bind(\Laravel\Boost\Install\CodeEnvironment\Cursor::class, fn () => $program3);
4242
$container->bind(\Laravel\Boost\Install\CodeEnvironment\ClaudeCode::class, fn () => $otherProgram);
43+
$container->bind(\Laravel\Boost\Install\CodeEnvironment\Codex::class, fn () => $otherProgram);
4344
$container->bind(\Laravel\Boost\Install\CodeEnvironment\Copilot::class, fn () => $otherProgram);
4445

4546
$detector = new CodeEnvironmentsDetector($container);
@@ -64,6 +65,7 @@
6465
$container->bind(\Laravel\Boost\Install\CodeEnvironment\VSCode::class, fn () => $otherProgram);
6566
$container->bind(\Laravel\Boost\Install\CodeEnvironment\Cursor::class, fn () => $otherProgram);
6667
$container->bind(\Laravel\Boost\Install\CodeEnvironment\ClaudeCode::class, fn () => $otherProgram);
68+
$container->bind(\Laravel\Boost\Install\CodeEnvironment\Codex::class, fn () => $otherProgram);
6769
$container->bind(\Laravel\Boost\Install\CodeEnvironment\Copilot::class, fn () => $otherProgram);
6870

6971
$detector = new CodeEnvironmentsDetector($container);
@@ -139,7 +141,6 @@
139141

140142
expect($detected)->toContain('claudecode');
141143

142-
// Cleanup
143144
unlink($tempDir.'/CLAUDE.md');
144145
rmdir($tempDir);
145146
});
@@ -169,7 +170,6 @@
169170

170171
expect($detected)->toContain('claudecode');
171172

172-
// Cleanup
173173
rmdir($tempDir.'/.claude');
174174
rmdir($tempDir);
175175
});
@@ -216,6 +216,32 @@
216216
rmdir($tempDir);
217217
});
218218

219+
test('discoverProjectInstalledCodeEnvironments detects codex with codex directory', function () {
220+
$tempDir = sys_get_temp_dir().'/boost_test_'.uniqid();
221+
mkdir($tempDir);
222+
mkdir($tempDir.'/.codex');
223+
224+
$detected = $this->detector->discoverProjectInstalledCodeEnvironments($tempDir);
225+
226+
expect($detected)->toContain('codex');
227+
228+
rmdir($tempDir.'/.codex');
229+
rmdir($tempDir);
230+
});
231+
232+
test('discoverProjectInstalledCodeEnvironments detects codex with AGENTS.md file', function () {
233+
$tempDir = sys_get_temp_dir().'/boost_test_'.uniqid();
234+
mkdir($tempDir);
235+
file_put_contents($tempDir.'/AGENTS.md', 'test');
236+
237+
$detected = $this->detector->discoverProjectInstalledCodeEnvironments($tempDir);
238+
239+
expect($detected)->toContain('codex');
240+
241+
unlink($tempDir.'/AGENTS.md');
242+
rmdir($tempDir);
243+
});
244+
219245
test('discoverProjectInstalledCodeEnvironments handles multiple detections', function () {
220246
$tempDir = sys_get_temp_dir().'/boost_test_'.uniqid();
221247
mkdir($tempDir);

0 commit comments

Comments
 (0)