Installation
composer require eslam-reda-div/filament-copilot
php artisan filament-copilot:install
First Integration
User resource with soft deletes enabled."Key Files to Review
config/filament-copilot.php: Core settings (provider, rate limits, token budget).app/Providers/FilamentCopilotServiceProvider.php: Customization entry point.resources/views/vendor/filament-copilot/...: Override UI templates if needed.Resource-Specific Queries
Post records with published_at in the last 30 days, sorted by views descending."Tool Execution
// Register a custom tool (e.g., in ServiceProvider)
FilamentCopilot::registerTool(
new FilamentCopilotTool(
'generate:resource',
'Generates a Filament resource for a given model.',
fn (string $model) => $this->generateResource($model)
)
);
Panel-Level Integration
use EslamRedaDiv\FilamentCopilot\Widgets\CopilotWidget;
public function getWidgets(): array
{
return [
CopilotWidget::make(),
// ... other widgets
];
}
FilamentCopilot::configureUsing(function (FilamentCopilot $copilot) {
$copilot->visibleInPanels(['admin']);
});
Conversation Management
filament-copilot/audit-logs (default route).config/filament-copilot.php:
'rate_limits' => [
'max_requests' => 50,
'period' => 'month',
],
config/services.php.$remainingTokens = FilamentCopilot::getRemainingTokenBudget();
FilamentCopilot class to add domain-specific logic:
namespace App\Services;
use EslamRedaDiv\FilamentCopilot\FilamentCopilot;
class CustomCopilot extends FilamentCopilot
{
public function generateMarketingCopy(string $productName): string
{
// Custom logic
}
}
Register it in ServiceProvider:
FilamentCopilot::swap(new CustomCopilot());
Token Budget Overruns
debug mode in config and log warnings:
'debug' => env('COPILOT_DEBUG', false),
Tool Execution Security
FilamentCopilot::registerTool(
new FilamentCopilotTool(
'safe:query',
'Runs a safe database query.',
fn (string $query) => $this->validateAndRunQuery($query)
)
);
Str::of($input)->trim()->lower() for string sanitization.Rate Limiting Conflicts
FilamentCopilot::registerTool(
new FilamentCopilotTool(
'async:task',
'Processes tasks in the background.',
fn ($payload) => Task::dispatch($payload)
)
);
Context Drift
agentMemory to persist key data:
FilamentCopilot::configureUsing(function (FilamentCopilot $copilot) {
$copilot->agentMemory()->useDatabase(); // or 'redis'
});
filament-copilot.log in config/logging.php.filament-copilot/audit-logs for tool execution errors.Custom UI Components
resources/views/vendor/filament-copilot/.<x-filament-copilot::input>
<x-slot name="after">
<button wire:click="showQuickActions">Quick Actions</button>
</x-slot>
</x-filament-copilot::input>
Dynamic Tool Registration
FilamentCopilot::registerToolIf(
fn () => auth()->user()->isAdmin(),
new FilamentCopilotTool('admin:tool', '...')
);
Provider Fallbacks
FilamentCopilot::configureUsing(function (FilamentCopilot $copilot) {
$copilot->onProviderFailure(function ($exception) {
// Fallback to cached response or notify user
});
});
Local Testing
mockai for offline testing:
FilamentCopilot::shouldMockResponses(true);
FilamentCopilot::mockResponse('Generate a resource', 'Here is your resource code: ...');
How can I help you explore Laravel packages today?