Skip to content

Commit 4600729

Browse files
committed
add application info
1 parent 04de9ef commit 4600729

File tree

2 files changed

+107
-0
lines changed

2 files changed

+107
-0
lines changed

src/Mcp/AiAssistant.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Laravel\AiAssistant\Mcp;
44

5+
use Laravel\AiAssistant\Mcp\Resources\ApplicationInfo;
56
use Laravel\AiAssistant\Mcp\Resources\LaravelBestPractices;
67
use Laravel\AiAssistant\Mcp\Resources\ListResources;
78
use Laravel\AiAssistant\Mcp\Resources\ReadResource;
@@ -41,6 +42,7 @@ class AiAssistant extends Server
4142
*/
4243
public array $resources = [
4344
LaravelBestPractices::class,
45+
ApplicationInfo::class,
4446
];
4547

4648
public function boot()
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
<?php
2+
3+
namespace Laravel\AiAssistant\Mcp\Resources;
4+
5+
use Illuminate\Support\Facades\File;
6+
7+
class ApplicationInfo extends Resource
8+
{
9+
public function name(): string
10+
{
11+
return 'Application Info';
12+
}
13+
14+
public function description(): string
15+
{
16+
return 'Learn about the technical details of the application.';
17+
}
18+
19+
public function uri(): string
20+
{
21+
return 'file://instructions/application-info.md';
22+
}
23+
24+
public function mimeType(): string
25+
{
26+
return 'text/markdown';
27+
}
28+
29+
public function read(): string
30+
{
31+
$laravelVersion = app()->version();
32+
$phpVersion = PHP_VERSION;
33+
34+
$frontendFramework = $this->guessFrontendFramework();
35+
$cssFramework = $this->guessCssFramework();
36+
$testingFramework = $this->guessTestingFramework();
37+
38+
return <<<EOT
39+
Laravel Version: {$laravelVersion}
40+
PHP Version: {$phpVersion}
41+
42+
Frontend Framework: {$frontendFramework}
43+
CSS Framework: {$cssFramework}
44+
45+
Testing Framework: {$testingFramework}
46+
47+
EOT;
48+
}
49+
50+
private function guessFrontendFramework(): string
51+
{
52+
$composerJson = File::json(base_path('composer.json'));
53+
$packageJson = File::json(base_path('package.json'));
54+
55+
if (isset($composerJson['require']['livewire/livewire'])) {
56+
$version = $composerJson['require']['livewire/livewire'];
57+
58+
return "Livewire ({$version})";
59+
}
60+
61+
$version = $packageJson['dependencies']['vue'] ?? $packageJson['devDependencies']['vue'] ?? null;
62+
63+
if ($version) {
64+
return "Vue ({$version})";
65+
}
66+
67+
$version = $packageJson['dependencies']['react'] ?? $packageJson['devDependencies']['react'] ?? null;
68+
69+
if ($version) {
70+
return "React ({$version})";
71+
}
72+
73+
return 'Blade';
74+
}
75+
76+
private function guessCssFramework(): string
77+
{
78+
$packageJson = File::json(base_path('package.json'));
79+
80+
$version = $packageJson['dependencies']['tailwindcss'] ?? $packageJson['devDependencies']['tailwindcss'] ?? null;
81+
82+
if ($version) {
83+
return "Tailwind ({$version})";
84+
}
85+
86+
$version = $packageJson['dependencies']['bootstrap'] ?? $packageJson['devDependencies']['bootstrap'] ?? null;
87+
88+
if ($version) {
89+
return "Bootstrap ({$version})";
90+
}
91+
92+
return 'None';
93+
}
94+
95+
private function guessTestingFramework(): string
96+
{
97+
$composerJson = File::json(base_path('composer.json'));
98+
99+
if (isset($composerJson['require-dev']['pestphp/pest'])) {
100+
return 'Pest';
101+
}
102+
103+
return 'PHPUnit';
104+
}
105+
}

0 commit comments

Comments
 (0)