From 3f905583a8e43c1937660adfaf7770ef2d809cf6 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 23 Feb 2026 03:50:09 +0000 Subject: [PATCH] chore: fix pint code style and add test config Add phpunit.xml for standalone test execution. Apply Laravel Pint formatting fixes across all source files. Co-Authored-By: Claude Opus 4.6 --- Console/Commands/GenerateCommand.php | 2 +- Console/Commands/PlanCommand.php | 2 +- Console/Commands/TaskCommand.php | 2 +- Jobs/BatchContentGeneration.php | 2 +- Jobs/ProcessContentTask.php | 4 +- Mcp/Servers/HostHub.php | 4 +- .../Agent/Content/ContentBatchGenerate.php | 2 +- .../Agent/Content/ContentBriefCreate.php | 4 +- Mcp/Tools/Agent/Content/ContentBriefGet.php | 2 +- Mcp/Tools/Agent/Content/ContentBriefList.php | 2 +- Mcp/Tools/Agent/Content/ContentFromPlan.php | 4 +- Mcp/Tools/Agent/Content/ContentGenerate.php | 2 +- Mcp/Tools/Agent/Content/ContentStatus.php | 2 +- Mcp/Tools/Agent/Content/ContentUsageStats.php | 2 +- Mcp/Tools/Agent/Phase/PhaseAddCheckpoint.php | 2 +- Mcp/Tools/Agent/Phase/PhaseGet.php | 2 +- Mcp/Tools/Agent/Plan/PlanArchive.php | 2 +- Mcp/Tools/Agent/Plan/PlanCreate.php | 2 +- Mcp/Tools/Agent/Plan/PlanGet.php | 2 +- Mcp/Tools/Agent/Plan/PlanList.php | 2 +- Mcp/Tools/Agent/Plan/PlanUpdateStatus.php | 2 +- Mcp/Tools/Agent/Session/SessionArtifact.php | 2 +- Mcp/Tools/Agent/Session/SessionContinue.php | 2 +- Mcp/Tools/Agent/Session/SessionEnd.php | 2 +- Mcp/Tools/Agent/Session/SessionHandoff.php | 2 +- Mcp/Tools/Agent/Session/SessionList.php | 2 +- Mcp/Tools/Agent/Session/SessionResume.php | 2 +- Mcp/Tools/Agent/Session/SessionStart.php | 2 +- Mcp/Tools/Agent/State/StateGet.php | 2 +- Mcp/Tools/Agent/State/StateList.php | 2 +- Mcp/Tools/Agent/State/StateSet.php | 2 +- .../Agent/Template/TemplateCreatePlan.php | 2 +- Mcp/Tools/Agent/Template/TemplateList.php | 2 +- Mcp/Tools/Agent/Template/TemplatePreview.php | 2 +- Middleware/AgentApiAuth.php | 2 +- Models/AgentPhase.php | 2 +- Models/AgentPlan.php | 8 +- Models/AgentSession.php | 2 +- Models/Prompt.php | 2 +- Models/Task.php | 6 +- Services/AgentApiKeyService.php | 2 +- Services/AgentSessionService.php | 4 +- Services/AgentToolRegistry.php | 2 +- Services/ClaudeService.php | 5 +- Services/Concerns/HasRetry.php | 1 - Services/ContentService.php | 2 +- Services/GeminiService.php | 5 +- Services/OpenAIService.php | 5 +- View/Modal/Admin/ApiKeys.php | 4 +- View/Modal/Admin/Dashboard.php | 4 +- View/Modal/Admin/SessionDetail.php | 2 +- View/Modal/Admin/ToolAnalytics.php | 2 +- View/Modal/Admin/ToolCalls.php | 2 +- phpunit.xml | 39 ++++ routes/api.php | 2 - tests/Feature/AgentPhaseTest.php | 2 +- tests/Feature/AgentPlanTest.php | 2 +- tests/Feature/AgentSessionTest.php | 2 +- tests/Feature/PlanTemplateServiceTest.php | 2 +- tests/Feature/SecurityTest.php | 45 ++-- tests/Unit/AgenticManagerTest.php | 68 +++--- tests/UseCase/AdminPanelBasic.php | 221 +++++++++--------- 62 files changed, 277 insertions(+), 244 deletions(-) create mode 100644 phpunit.xml diff --git a/Console/Commands/GenerateCommand.php b/Console/Commands/GenerateCommand.php index 46ac499..fe3ce5c 100644 --- a/Console/Commands/GenerateCommand.php +++ b/Console/Commands/GenerateCommand.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Console\Commands; -use Illuminate\Console\Command; use Core\Mod\Agentic\Models\AgentPlan; +use Illuminate\Console\Command; use Mod\Content\Jobs\GenerateContentJob; use Mod\Content\Models\ContentBrief; use Mod\Content\Services\AIGatewayService; diff --git a/Console/Commands/PlanCommand.php b/Console/Commands/PlanCommand.php index e813d06..8921bc8 100644 --- a/Console/Commands/PlanCommand.php +++ b/Console/Commands/PlanCommand.php @@ -4,9 +4,9 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Console\Commands; -use Illuminate\Console\Command; use Core\Mod\Agentic\Models\AgentPlan; use Core\Mod\Agentic\Services\PlanTemplateService; +use Illuminate\Console\Command; class PlanCommand extends Command { diff --git a/Console/Commands/TaskCommand.php b/Console/Commands/TaskCommand.php index e26ea95..fd2f127 100644 --- a/Console/Commands/TaskCommand.php +++ b/Console/Commands/TaskCommand.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Console\Commands; -use Illuminate\Console\Command; use Core\Mod\Agentic\Models\Task; +use Illuminate\Console\Command; class TaskCommand extends Command { diff --git a/Jobs/BatchContentGeneration.php b/Jobs/BatchContentGeneration.php index 359e45e..9cf1460 100644 --- a/Jobs/BatchContentGeneration.php +++ b/Jobs/BatchContentGeneration.php @@ -4,13 +4,13 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Jobs; -use Mod\Content\Models\ContentTask; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Log; +use Mod\Content\Models\ContentTask; class BatchContentGeneration implements ShouldQueue { diff --git a/Jobs/ProcessContentTask.php b/Jobs/ProcessContentTask.php index c0dfc67..b3e137f 100644 --- a/Jobs/ProcessContentTask.php +++ b/Jobs/ProcessContentTask.php @@ -5,14 +5,14 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Jobs; use Core\Mod\Agentic\Services\AgenticManager; -use Mod\Content\Models\ContentTask; -use Mod\Content\Services\ContentProcessingService; use Core\Tenant\Services\EntitlementService; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; +use Mod\Content\Models\ContentTask; +use Mod\Content\Services\ContentProcessingService; use Throwable; class ProcessContentTask implements ShouldQueue diff --git a/Mcp/Servers/HostHub.php b/Mcp/Servers/HostHub.php index bf64e05..35f1ca7 100644 --- a/Mcp/Servers/HostHub.php +++ b/Mcp/Servers/HostHub.php @@ -15,12 +15,12 @@ use Core\Mcp\Tools\ListRoutes; use Core\Mcp\Tools\ListSites; use Core\Mcp\Tools\ListTables; use Core\Mcp\Tools\QueryDatabase; -use Mod\Bio\Mcp\BioResource; -use Laravel\Mcp\Server; use Core\Mod\Agentic\Mcp\Prompts\AnalysePerformancePrompt; use Core\Mod\Agentic\Mcp\Prompts\ConfigureNotificationsPrompt; use Core\Mod\Agentic\Mcp\Prompts\CreateBioPagePrompt; use Core\Mod\Agentic\Mcp\Prompts\SetupQrCampaignPrompt; +use Laravel\Mcp\Server; +use Mod\Bio\Mcp\BioResource; class HostHub extends Server { diff --git a/Mcp/Tools/Agent/Content/ContentBatchGenerate.php b/Mcp/Tools/Agent/Content/ContentBatchGenerate.php index fa551f0..a1773c7 100644 --- a/Mcp/Tools/Agent/Content/ContentBatchGenerate.php +++ b/Mcp/Tools/Agent/Content/ContentBatchGenerate.php @@ -4,9 +4,9 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Content; +use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; use Mod\Content\Jobs\GenerateContentJob; use Mod\Content\Models\ContentBrief; -use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; /** * Queue multiple briefs for batch content generation. diff --git a/Mcp/Tools/Agent/Content/ContentBriefCreate.php b/Mcp/Tools/Agent/Content/ContentBriefCreate.php index 6144bbb..e922a0b 100644 --- a/Mcp/Tools/Agent/Content/ContentBriefCreate.php +++ b/Mcp/Tools/Agent/Content/ContentBriefCreate.php @@ -4,11 +4,11 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Content; -use Illuminate\Support\Str; +use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; use Core\Mod\Agentic\Models\AgentPlan; +use Illuminate\Support\Str; use Mod\Content\Enums\BriefContentType; use Mod\Content\Models\ContentBrief; -use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; /** * Create a content brief for AI generation. diff --git a/Mcp/Tools/Agent/Content/ContentBriefGet.php b/Mcp/Tools/Agent/Content/ContentBriefGet.php index ad26fcd..72fd152 100644 --- a/Mcp/Tools/Agent/Content/ContentBriefGet.php +++ b/Mcp/Tools/Agent/Content/ContentBriefGet.php @@ -4,9 +4,9 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Content; +use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; use Mod\Content\Enums\BriefContentType; use Mod\Content\Models\ContentBrief; -use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; /** * Get details of a specific content brief including generated content. diff --git a/Mcp/Tools/Agent/Content/ContentBriefList.php b/Mcp/Tools/Agent/Content/ContentBriefList.php index a9804b4..6c0f9d2 100644 --- a/Mcp/Tools/Agent/Content/ContentBriefList.php +++ b/Mcp/Tools/Agent/Content/ContentBriefList.php @@ -4,9 +4,9 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Content; +use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; use Mod\Content\Enums\BriefContentType; use Mod\Content\Models\ContentBrief; -use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; /** * List content briefs with optional status filter. diff --git a/Mcp/Tools/Agent/Content/ContentFromPlan.php b/Mcp/Tools/Agent/Content/ContentFromPlan.php index 2f6541a..c1c257b 100644 --- a/Mcp/Tools/Agent/Content/ContentFromPlan.php +++ b/Mcp/Tools/Agent/Content/ContentFromPlan.php @@ -4,12 +4,12 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Content; -use Illuminate\Support\Str; +use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; use Core\Mod\Agentic\Models\AgentPlan; +use Illuminate\Support\Str; use Mod\Content\Enums\BriefContentType; use Mod\Content\Jobs\GenerateContentJob; use Mod\Content\Models\ContentBrief; -use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; /** * Create content briefs from plan tasks and queue for generation. diff --git a/Mcp/Tools/Agent/Content/ContentGenerate.php b/Mcp/Tools/Agent/Content/ContentGenerate.php index 9589242..3529403 100644 --- a/Mcp/Tools/Agent/Content/ContentGenerate.php +++ b/Mcp/Tools/Agent/Content/ContentGenerate.php @@ -4,10 +4,10 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Content; +use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; use Mod\Content\Jobs\GenerateContentJob; use Mod\Content\Models\ContentBrief; use Mod\Content\Services\AIGatewayService; -use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; /** * Generate content for a brief using AI pipeline. diff --git a/Mcp/Tools/Agent/Content/ContentStatus.php b/Mcp/Tools/Agent/Content/ContentStatus.php index 5437f0a..fa88735 100644 --- a/Mcp/Tools/Agent/Content/ContentStatus.php +++ b/Mcp/Tools/Agent/Content/ContentStatus.php @@ -4,9 +4,9 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Content; +use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; use Mod\Content\Models\ContentBrief; use Mod\Content\Services\AIGatewayService; -use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; /** * Get content generation pipeline status. diff --git a/Mcp/Tools/Agent/Content/ContentUsageStats.php b/Mcp/Tools/Agent/Content/ContentUsageStats.php index dc01edf..9d6e3ee 100644 --- a/Mcp/Tools/Agent/Content/ContentUsageStats.php +++ b/Mcp/Tools/Agent/Content/ContentUsageStats.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Content; -use Mod\Content\Models\AIUsage; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; +use Mod\Content\Models\AIUsage; /** * Get AI usage statistics for content generation. diff --git a/Mcp/Tools/Agent/Phase/PhaseAddCheckpoint.php b/Mcp/Tools/Agent/Phase/PhaseAddCheckpoint.php index 86cd557..e0d33b1 100644 --- a/Mcp/Tools/Agent/Phase/PhaseAddCheckpoint.php +++ b/Mcp/Tools/Agent/Phase/PhaseAddCheckpoint.php @@ -4,9 +4,9 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Phase; +use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; use Core\Mod\Agentic\Models\AgentPhase; use Core\Mod\Agentic\Models\AgentPlan; -use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; /** * Add a checkpoint note to a phase. diff --git a/Mcp/Tools/Agent/Phase/PhaseGet.php b/Mcp/Tools/Agent/Phase/PhaseGet.php index 5c32a11..55f2fd7 100644 --- a/Mcp/Tools/Agent/Phase/PhaseGet.php +++ b/Mcp/Tools/Agent/Phase/PhaseGet.php @@ -4,9 +4,9 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Phase; +use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; use Core\Mod\Agentic\Models\AgentPhase; use Core\Mod\Agentic\Models\AgentPlan; -use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; /** * Get details of a specific phase within a plan. diff --git a/Mcp/Tools/Agent/Plan/PlanArchive.php b/Mcp/Tools/Agent/Plan/PlanArchive.php index 0524e6a..2f9c270 100644 --- a/Mcp/Tools/Agent/Plan/PlanArchive.php +++ b/Mcp/Tools/Agent/Plan/PlanArchive.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Plan; -use Core\Mod\Agentic\Models\AgentPlan; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; +use Core\Mod\Agentic\Models\AgentPlan; /** * Archive a completed or abandoned plan. diff --git a/Mcp/Tools/Agent/Plan/PlanCreate.php b/Mcp/Tools/Agent/Plan/PlanCreate.php index 0af827b..ff3076d 100644 --- a/Mcp/Tools/Agent/Plan/PlanCreate.php +++ b/Mcp/Tools/Agent/Plan/PlanCreate.php @@ -5,10 +5,10 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Plan; use Core\Mcp\Dependencies\ToolDependency; -use Illuminate\Support\Str; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; use Core\Mod\Agentic\Models\AgentPhase; use Core\Mod\Agentic\Models\AgentPlan; +use Illuminate\Support\Str; /** * Create a new work plan with phases and tasks. diff --git a/Mcp/Tools/Agent/Plan/PlanGet.php b/Mcp/Tools/Agent/Plan/PlanGet.php index 4b29352..ed71bb4 100644 --- a/Mcp/Tools/Agent/Plan/PlanGet.php +++ b/Mcp/Tools/Agent/Plan/PlanGet.php @@ -5,8 +5,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Plan; use Core\Mcp\Dependencies\ToolDependency; -use Core\Mod\Agentic\Models\AgentPlan; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; +use Core\Mod\Agentic\Models\AgentPlan; /** * Get detailed information about a specific plan. diff --git a/Mcp/Tools/Agent/Plan/PlanList.php b/Mcp/Tools/Agent/Plan/PlanList.php index 3c4af0d..22d7423 100644 --- a/Mcp/Tools/Agent/Plan/PlanList.php +++ b/Mcp/Tools/Agent/Plan/PlanList.php @@ -5,8 +5,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Plan; use Core\Mcp\Dependencies\ToolDependency; -use Core\Mod\Agentic\Models\AgentPlan; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; +use Core\Mod\Agentic\Models\AgentPlan; /** * List all work plans with their current status and progress. diff --git a/Mcp/Tools/Agent/Plan/PlanUpdateStatus.php b/Mcp/Tools/Agent/Plan/PlanUpdateStatus.php index 9b27e2c..9581fe0 100644 --- a/Mcp/Tools/Agent/Plan/PlanUpdateStatus.php +++ b/Mcp/Tools/Agent/Plan/PlanUpdateStatus.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Plan; -use Core\Mod\Agentic\Models\AgentPlan; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; +use Core\Mod\Agentic\Models\AgentPlan; /** * Update the status of a plan. diff --git a/Mcp/Tools/Agent/Session/SessionArtifact.php b/Mcp/Tools/Agent/Session/SessionArtifact.php index 9639d69..9f2b0c9 100644 --- a/Mcp/Tools/Agent/Session/SessionArtifact.php +++ b/Mcp/Tools/Agent/Session/SessionArtifact.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Session; -use Core\Mod\Agentic\Models\AgentSession; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; +use Core\Mod\Agentic\Models\AgentSession; /** * Record an artifact created/modified during the session. diff --git a/Mcp/Tools/Agent/Session/SessionContinue.php b/Mcp/Tools/Agent/Session/SessionContinue.php index 40d4f45..4faea62 100644 --- a/Mcp/Tools/Agent/Session/SessionContinue.php +++ b/Mcp/Tools/Agent/Session/SessionContinue.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Session; -use Core\Mod\Agentic\Services\AgentSessionService; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; +use Core\Mod\Agentic\Services\AgentSessionService; /** * Continue from a previous session (multi-agent handoff). diff --git a/Mcp/Tools/Agent/Session/SessionEnd.php b/Mcp/Tools/Agent/Session/SessionEnd.php index f83ed5c..e1d407b 100644 --- a/Mcp/Tools/Agent/Session/SessionEnd.php +++ b/Mcp/Tools/Agent/Session/SessionEnd.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Session; -use Core\Mod\Agentic\Models\AgentSession; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; +use Core\Mod\Agentic\Models\AgentSession; /** * End the current session. diff --git a/Mcp/Tools/Agent/Session/SessionHandoff.php b/Mcp/Tools/Agent/Session/SessionHandoff.php index c579e93..ad59a65 100644 --- a/Mcp/Tools/Agent/Session/SessionHandoff.php +++ b/Mcp/Tools/Agent/Session/SessionHandoff.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Session; -use Core\Mod\Agentic\Models\AgentSession; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; +use Core\Mod\Agentic\Models\AgentSession; /** * Prepare session for handoff to another agent. diff --git a/Mcp/Tools/Agent/Session/SessionList.php b/Mcp/Tools/Agent/Session/SessionList.php index 452f558..7d0cf5a 100644 --- a/Mcp/Tools/Agent/Session/SessionList.php +++ b/Mcp/Tools/Agent/Session/SessionList.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Session; -use Core\Mod\Agentic\Services\AgentSessionService; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; +use Core\Mod\Agentic\Services\AgentSessionService; /** * List sessions, optionally filtered by status. diff --git a/Mcp/Tools/Agent/Session/SessionResume.php b/Mcp/Tools/Agent/Session/SessionResume.php index ee051ed..e85083b 100644 --- a/Mcp/Tools/Agent/Session/SessionResume.php +++ b/Mcp/Tools/Agent/Session/SessionResume.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Session; -use Core\Mod\Agentic\Services\AgentSessionService; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; +use Core\Mod\Agentic\Services\AgentSessionService; /** * Resume a paused or handed-off session. diff --git a/Mcp/Tools/Agent/Session/SessionStart.php b/Mcp/Tools/Agent/Session/SessionStart.php index 7df4d64..ce0b723 100644 --- a/Mcp/Tools/Agent/Session/SessionStart.php +++ b/Mcp/Tools/Agent/Session/SessionStart.php @@ -5,10 +5,10 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Session; use Core\Mcp\Dependencies\ToolDependency; -use Illuminate\Support\Str; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; use Core\Mod\Agentic\Models\AgentPlan; use Core\Mod\Agentic\Models\AgentSession; +use Illuminate\Support\Str; /** * Start a new agent session for a plan. diff --git a/Mcp/Tools/Agent/State/StateGet.php b/Mcp/Tools/Agent/State/StateGet.php index 0304acd..9a06898 100644 --- a/Mcp/Tools/Agent/State/StateGet.php +++ b/Mcp/Tools/Agent/State/StateGet.php @@ -5,8 +5,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\State; use Core\Mcp\Dependencies\ToolDependency; -use Core\Mod\Agentic\Models\AgentPlan; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; +use Core\Mod\Agentic\Models\AgentPlan; /** * Get a workspace state value. diff --git a/Mcp/Tools/Agent/State/StateList.php b/Mcp/Tools/Agent/State/StateList.php index 2893dc7..199b56d 100644 --- a/Mcp/Tools/Agent/State/StateList.php +++ b/Mcp/Tools/Agent/State/StateList.php @@ -5,8 +5,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\State; use Core\Mcp\Dependencies\ToolDependency; -use Core\Mod\Agentic\Models\AgentPlan; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; +use Core\Mod\Agentic\Models\AgentPlan; /** * List all state values for a plan. diff --git a/Mcp/Tools/Agent/State/StateSet.php b/Mcp/Tools/Agent/State/StateSet.php index f777e45..e8e15b7 100644 --- a/Mcp/Tools/Agent/State/StateSet.php +++ b/Mcp/Tools/Agent/State/StateSet.php @@ -5,9 +5,9 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\State; use Core\Mcp\Dependencies\ToolDependency; +use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; use Core\Mod\Agentic\Models\AgentPlan; use Core\Mod\Agentic\Models\AgentWorkspaceState; -use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; /** * Set a workspace state value. diff --git a/Mcp/Tools/Agent/Template/TemplateCreatePlan.php b/Mcp/Tools/Agent/Template/TemplateCreatePlan.php index ab5f009..0b4439b 100644 --- a/Mcp/Tools/Agent/Template/TemplateCreatePlan.php +++ b/Mcp/Tools/Agent/Template/TemplateCreatePlan.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Template; -use Core\Mod\Agentic\Services\PlanTemplateService; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; +use Core\Mod\Agentic\Services\PlanTemplateService; /** * Create a new plan from a template. diff --git a/Mcp/Tools/Agent/Template/TemplateList.php b/Mcp/Tools/Agent/Template/TemplateList.php index 429b9eb..dbd0cef 100644 --- a/Mcp/Tools/Agent/Template/TemplateList.php +++ b/Mcp/Tools/Agent/Template/TemplateList.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Template; -use Core\Mod\Agentic\Services\PlanTemplateService; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; +use Core\Mod\Agentic\Services\PlanTemplateService; /** * List available plan templates. diff --git a/Mcp/Tools/Agent/Template/TemplatePreview.php b/Mcp/Tools/Agent/Template/TemplatePreview.php index 606566a..da6f9d8 100644 --- a/Mcp/Tools/Agent/Template/TemplatePreview.php +++ b/Mcp/Tools/Agent/Template/TemplatePreview.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Mcp\Tools\Agent\Template; -use Core\Mod\Agentic\Services\PlanTemplateService; use Core\Mod\Agentic\Mcp\Tools\Agent\AgentTool; +use Core\Mod\Agentic\Services\PlanTemplateService; /** * Preview a template with variables. diff --git a/Middleware/AgentApiAuth.php b/Middleware/AgentApiAuth.php index 9bb39f1..fa55303 100644 --- a/Middleware/AgentApiAuth.php +++ b/Middleware/AgentApiAuth.php @@ -5,9 +5,9 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Middleware; use Closure; -use Illuminate\Http\Request; use Core\Mod\Agentic\Models\AgentApiKey; use Core\Mod\Agentic\Services\AgentApiKeyService; +use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; /** diff --git a/Models/AgentPhase.php b/Models/AgentPhase.php index b52b66a..b249793 100644 --- a/Models/AgentPhase.php +++ b/Models/AgentPhase.php @@ -4,11 +4,11 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Models; +use Core\Mod\Agentic\Database\Factories\AgentPhaseFactory; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Support\Facades\DB; -use Core\Mod\Agentic\Database\Factories\AgentPhaseFactory; /** * Agent Phase - individual phase within a plan. diff --git a/Models/AgentPlan.php b/Models/AgentPlan.php index 3ba13cd..9a675d8 100644 --- a/Models/AgentPlan.php +++ b/Models/AgentPlan.php @@ -4,14 +4,14 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Models; +use Core\Mod\Agentic\Database\Factories\AgentPlanFactory; +use Core\Tenant\Concerns\BelongsToWorkspace; +use Core\Tenant\Models\Workspace; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Str; -use Core\Mod\Agentic\Database\Factories\AgentPlanFactory; -use Core\Tenant\Concerns\BelongsToWorkspace; -use Core\Tenant\Models\Workspace; use Spatie\Activitylog\LogOptions; use Spatie\Activitylog\Traits\LogsActivity; @@ -128,7 +128,7 @@ class AgentPlan extends Model WHEN ? THEN 3 WHEN ? THEN 4 ELSE 5 - END ' . ($direction === 'desc' ? 'DESC' : 'ASC'), [self::STATUS_ACTIVE, self::STATUS_DRAFT, self::STATUS_COMPLETED, self::STATUS_ARCHIVED]); + END '.($direction === 'desc' ? 'DESC' : 'ASC'), [self::STATUS_ACTIVE, self::STATUS_DRAFT, self::STATUS_COMPLETED, self::STATUS_ARCHIVED]); } // Helpers diff --git a/Models/AgentSession.php b/Models/AgentSession.php index 964c713..b399bc7 100644 --- a/Models/AgentSession.php +++ b/Models/AgentSession.php @@ -4,12 +4,12 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Models; +use Core\Mod\Agentic\Database\Factories\AgentSessionFactory; use Core\Tenant\Concerns\BelongsToWorkspace; use Core\Tenant\Models\Workspace; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; -use Core\Mod\Agentic\Database\Factories\AgentSessionFactory; use Ramsey\Uuid\Uuid; /** diff --git a/Models/Prompt.php b/Models/Prompt.php index 453168b..b1e948b 100644 --- a/Models/Prompt.php +++ b/Models/Prompt.php @@ -4,10 +4,10 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Models; -use Mod\Content\Models\ContentTask; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; +use Mod\Content\Models\ContentTask; class Prompt extends Model { diff --git a/Models/Task.php b/Models/Task.php index 5687a56..9293e87 100644 --- a/Models/Task.php +++ b/Models/Task.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Models; -use Illuminate\Database\Eloquent\Model; use Core\Tenant\Concerns\BelongsToWorkspace; +use Illuminate\Database\Eloquent\Model; class Task extends Model { @@ -60,7 +60,7 @@ class Task extends Model WHEN ? THEN 3 WHEN ? THEN 4 ELSE 5 - END ' . ($direction === 'desc' ? 'DESC' : 'ASC'), ['urgent', 'high', 'normal', 'low']); + END '.($direction === 'desc' ? 'DESC' : 'ASC'), ['urgent', 'high', 'normal', 'low']); } /** @@ -76,7 +76,7 @@ class Task extends Model WHEN ? THEN 2 WHEN ? THEN 3 ELSE 4 - END ' . ($direction === 'desc' ? 'DESC' : 'ASC'), ['in_progress', 'pending', 'done']); + END '.($direction === 'desc' ? 'DESC' : 'ASC'), ['in_progress', 'pending', 'done']); } public function getStatusBadgeAttribute(): string diff --git a/Services/AgentApiKeyService.php b/Services/AgentApiKeyService.php index 930e463..9fde112 100644 --- a/Services/AgentApiKeyService.php +++ b/Services/AgentApiKeyService.php @@ -4,10 +4,10 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Services; +use Core\Mod\Agentic\Models\AgentApiKey; use Core\Tenant\Models\Workspace; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Log; -use Core\Mod\Agentic\Models\AgentApiKey; /** * Agent API Key Service. diff --git a/Services/AgentSessionService.php b/Services/AgentSessionService.php index 1d4db30..8f86295 100644 --- a/Services/AgentSessionService.php +++ b/Services/AgentSessionService.php @@ -4,10 +4,10 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Services; -use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Cache; use Core\Mod\Agentic\Models\AgentPlan; use Core\Mod\Agentic\Models\AgentSession; +use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Cache; /** * Agent Session Service - manages session persistence for agent continuity. diff --git a/Services/AgentToolRegistry.php b/Services/AgentToolRegistry.php index a8e542a..0c21bca 100644 --- a/Services/AgentToolRegistry.php +++ b/Services/AgentToolRegistry.php @@ -7,8 +7,8 @@ namespace Core\Mod\Agentic\Services; use Core\Api\Models\ApiKey; use Core\Mcp\Dependencies\HasDependencies; use Core\Mcp\Services\ToolDependencyService; -use Illuminate\Support\Collection; use Core\Mod\Agentic\Mcp\Tools\Agent\Contracts\AgentToolInterface; +use Illuminate\Support\Collection; /** * Registry for MCP Agent Server tools. diff --git a/Services/ClaudeService.php b/Services/ClaudeService.php index b852d02..1b7b334 100644 --- a/Services/ClaudeService.php +++ b/Services/ClaudeService.php @@ -4,12 +4,11 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Services; +use Core\Mod\Agentic\Services\Concerns\HasRetry; +use Core\Mod\Agentic\Services\Concerns\HasStreamParsing; use Generator; use Illuminate\Http\Client\PendingRequest; use Illuminate\Support\Facades\Http; -use Core\Mod\Agentic\Services\Concerns\HasRetry; -use Core\Mod\Agentic\Services\Concerns\HasStreamParsing; -use RuntimeException; class ClaudeService implements AgenticProviderInterface { diff --git a/Services/Concerns/HasRetry.php b/Services/Concerns/HasRetry.php index 83d024f..df52cf8 100644 --- a/Services/Concerns/HasRetry.php +++ b/Services/Concerns/HasRetry.php @@ -25,7 +25,6 @@ trait HasRetry * * @param callable $callback Function that returns Response * @param string $provider Provider name for error messages - * @return Response * * @throws RuntimeException */ diff --git a/Services/ContentService.php b/Services/ContentService.php index 8d022b7..ae6030a 100644 --- a/Services/ContentService.php +++ b/Services/ContentService.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Services; -use Mod\Content\Models\ContentItem; use Illuminate\Support\Facades\File; +use Mod\Content\Models\ContentItem; use Symfony\Component\Yaml\Yaml; class ContentService diff --git a/Services/GeminiService.php b/Services/GeminiService.php index 321445d..64c6f78 100644 --- a/Services/GeminiService.php +++ b/Services/GeminiService.php @@ -4,12 +4,11 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Services; +use Core\Mod\Agentic\Services\Concerns\HasRetry; +use Core\Mod\Agentic\Services\Concerns\HasStreamParsing; use Generator; use Illuminate\Http\Client\PendingRequest; use Illuminate\Support\Facades\Http; -use Core\Mod\Agentic\Services\Concerns\HasRetry; -use Core\Mod\Agentic\Services\Concerns\HasStreamParsing; -use RuntimeException; class GeminiService implements AgenticProviderInterface { diff --git a/Services/OpenAIService.php b/Services/OpenAIService.php index 1c5151d..ff588ed 100644 --- a/Services/OpenAIService.php +++ b/Services/OpenAIService.php @@ -4,12 +4,11 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Services; +use Core\Mod\Agentic\Services\Concerns\HasRetry; +use Core\Mod\Agentic\Services\Concerns\HasStreamParsing; use Generator; use Illuminate\Http\Client\PendingRequest; use Illuminate\Support\Facades\Http; -use Core\Mod\Agentic\Services\Concerns\HasRetry; -use Core\Mod\Agentic\Services\Concerns\HasStreamParsing; -use RuntimeException; class OpenAIService implements AgenticProviderInterface { diff --git a/View/Modal/Admin/ApiKeys.php b/View/Modal/Admin/ApiKeys.php index 8aed64f..30a3f63 100644 --- a/View/Modal/Admin/ApiKeys.php +++ b/View/Modal/Admin/ApiKeys.php @@ -4,6 +4,8 @@ declare(strict_types=1); namespace Core\Mod\Agentic\View\Modal\Admin; +use Core\Mod\Agentic\Models\AgentApiKey; +use Core\Mod\Agentic\Services\AgentApiKeyService; use Core\Tenant\Models\Workspace; use Illuminate\Contracts\View\View; use Illuminate\Support\Collection; @@ -13,8 +15,6 @@ use Livewire\Attributes\Title; use Livewire\Attributes\Url; use Livewire\Component; use Livewire\WithPagination; -use Core\Mod\Agentic\Models\AgentApiKey; -use Core\Mod\Agentic\Services\AgentApiKeyService; use Symfony\Component\HttpFoundation\StreamedResponse; #[Title('API Keys')] diff --git a/View/Modal/Admin/Dashboard.php b/View/Modal/Admin/Dashboard.php index 5f623c3..375e1ac 100644 --- a/View/Modal/Admin/Dashboard.php +++ b/View/Modal/Admin/Dashboard.php @@ -4,12 +4,12 @@ declare(strict_types=1); namespace Core\Mod\Agentic\View\Modal\Admin; +use Core\Mcp\Models\McpToolCallStat; use Core\Mod\Agentic\Models\AgentPlan; use Core\Mod\Agentic\Models\AgentSession; -use Core\Mcp\Models\McpToolCallStat; +use Illuminate\Cache\Lock; use Illuminate\Contracts\View\View; use Illuminate\Support\Facades\Cache; -use Illuminate\Cache\Lock; use Livewire\Attributes\Computed; use Livewire\Attributes\Layout; use Livewire\Attributes\Title; diff --git a/View/Modal/Admin/SessionDetail.php b/View/Modal/Admin/SessionDetail.php index 71c0b83..8cf0b2e 100644 --- a/View/Modal/Admin/SessionDetail.php +++ b/View/Modal/Admin/SessionDetail.php @@ -4,13 +4,13 @@ declare(strict_types=1); namespace Core\Mod\Agentic\View\Modal\Admin; +use Core\Mod\Agentic\Models\AgentSession; use Illuminate\Contracts\View\View; use Illuminate\Database\Eloquent\Collection; use Livewire\Attributes\Computed; use Livewire\Attributes\Layout; use Livewire\Attributes\Title; use Livewire\Component; -use Core\Mod\Agentic\Models\AgentSession; #[Title('Session Detail')] #[Layout('hub::admin.layouts.app')] diff --git a/View/Modal/Admin/ToolAnalytics.php b/View/Modal/Admin/ToolAnalytics.php index 0cea6fd..5321499 100644 --- a/View/Modal/Admin/ToolAnalytics.php +++ b/View/Modal/Admin/ToolAnalytics.php @@ -4,9 +4,9 @@ declare(strict_types=1); namespace Core\Mod\Agentic\View\Modal\Admin; -use Core\Tenant\Models\Workspace; use Core\Mcp\Models\McpToolCall; use Core\Mcp\Models\McpToolCallStat; +use Core\Tenant\Models\Workspace; use Illuminate\Contracts\View\View; use Illuminate\Support\Collection; use Livewire\Attributes\Computed; diff --git a/View/Modal/Admin/ToolCalls.php b/View/Modal/Admin/ToolCalls.php index 1dc0f4b..c090b04 100644 --- a/View/Modal/Admin/ToolCalls.php +++ b/View/Modal/Admin/ToolCalls.php @@ -4,9 +4,9 @@ declare(strict_types=1); namespace Core\Mod\Agentic\View\Modal\Admin; -use Core\Tenant\Models\Workspace; use Core\Mcp\Models\McpToolCall; use Core\Mcp\Models\McpToolCallStat; +use Core\Tenant\Models\Workspace; use Illuminate\Contracts\Pagination\LengthAwarePaginator; use Illuminate\Contracts\View\View; use Illuminate\Support\Collection; diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..cb23fe0 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,39 @@ + + + + + tests/Feature + + + tests/Unit + + + + + src + + + + + + + + + + + + + + + + diff --git a/routes/api.php b/routes/api.php index 15fbf70..9552cfe 100644 --- a/routes/api.php +++ b/routes/api.php @@ -1,5 +1,3 @@ testTemplatesPath.'/malformed.yaml', "invalid: yaml: content: ["); + File::put($this->testTemplatesPath.'/malformed.yaml', 'invalid: yaml: content: ['); // Should not throw when listing $result = $this->service->list(); diff --git a/tests/Feature/SecurityTest.php b/tests/Feature/SecurityTest.php index 16c33a0..a4e1814 100644 --- a/tests/Feature/SecurityTest.php +++ b/tests/Feature/SecurityTest.php @@ -4,16 +4,16 @@ declare(strict_types=1); namespace Core\Mod\Agentic\Tests\Feature; -use Illuminate\Foundation\Testing\RefreshDatabase; -use Core\Mod\Agentic\Models\AgentPlan; -use Core\Mod\Agentic\Models\AgentWorkspaceState; -use Core\Mod\Agentic\Models\Task; use Core\Mod\Agentic\Mcp\Tools\Agent\Plan\PlanGet; use Core\Mod\Agentic\Mcp\Tools\Agent\Plan\PlanList; use Core\Mod\Agentic\Mcp\Tools\Agent\State\StateGet; use Core\Mod\Agentic\Mcp\Tools\Agent\State\StateList; use Core\Mod\Agentic\Mcp\Tools\Agent\State\StateSet; +use Core\Mod\Agentic\Models\AgentPlan; +use Core\Mod\Agentic\Models\AgentWorkspaceState; +use Core\Mod\Agentic\Models\Task; use Core\Tenant\Models\Workspace; +use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; /** @@ -24,6 +24,7 @@ class SecurityTest extends TestCase use RefreshDatabase; private Workspace $workspace; + private Workspace $otherWorkspace; protected function setUp(): void @@ -43,7 +44,7 @@ class SecurityTest extends TestCase 'workspace_id' => $this->workspace->id, ]); - $tool = new StateSet(); + $tool = new StateSet; $result = $tool->handle([ 'plan_slug' => $plan->slug, 'key' => 'test_key', @@ -60,7 +61,7 @@ class SecurityTest extends TestCase 'workspace_id' => $this->otherWorkspace->id, ]); - $tool = new StateSet(); + $tool = new StateSet; $result = $tool->handle([ 'plan_slug' => $otherPlan->slug, 'key' => 'test_key', @@ -77,7 +78,7 @@ class SecurityTest extends TestCase 'workspace_id' => $this->workspace->id, ]); - $tool = new StateSet(); + $tool = new StateSet; $result = $tool->handle([ 'plan_slug' => $plan->slug, 'key' => 'test_key', @@ -105,7 +106,7 @@ class SecurityTest extends TestCase 'value' => ['data' => 'secret'], ]); - $tool = new StateGet(); + $tool = new StateGet; $result = $tool->handle([ 'plan_slug' => $plan->slug, 'key' => 'test_key', @@ -127,7 +128,7 @@ class SecurityTest extends TestCase 'value' => ['data' => 'sensitive'], ]); - $tool = new StateGet(); + $tool = new StateGet; $result = $tool->handle([ 'plan_slug' => $otherPlan->slug, 'key' => 'secret_key', @@ -149,7 +150,7 @@ class SecurityTest extends TestCase 'value' => ['data' => 'allowed'], ]); - $tool = new StateGet(); + $tool = new StateGet; $result = $tool->handle([ 'plan_slug' => $plan->slug, 'key' => 'test_key', @@ -170,7 +171,7 @@ class SecurityTest extends TestCase 'workspace_id' => $this->workspace->id, ]); - $tool = new StateList(); + $tool = new StateList; $result = $tool->handle([ 'plan_slug' => $plan->slug, ], []); // No workspace_id in context @@ -191,7 +192,7 @@ class SecurityTest extends TestCase 'value' => ['data' => 'sensitive'], ]); - $tool = new StateList(); + $tool = new StateList; $result = $tool->handle([ 'plan_slug' => $otherPlan->slug, ], ['workspace_id' => $this->workspace->id]); // Different workspace @@ -210,7 +211,7 @@ class SecurityTest extends TestCase 'workspace_id' => $this->workspace->id, ]); - $tool = new PlanGet(); + $tool = new PlanGet; $result = $tool->handle([ 'slug' => $plan->slug, ], []); // No workspace_id in context @@ -226,7 +227,7 @@ class SecurityTest extends TestCase 'title' => 'Secret Plan', ]); - $tool = new PlanGet(); + $tool = new PlanGet; $result = $tool->handle([ 'slug' => $otherPlan->slug, ], ['workspace_id' => $this->workspace->id]); // Different workspace @@ -242,7 +243,7 @@ class SecurityTest extends TestCase 'title' => 'My Plan', ]); - $tool = new PlanGet(); + $tool = new PlanGet; $result = $tool->handle([ 'slug' => $plan->slug, ], ['workspace_id' => $this->workspace->id]); @@ -258,7 +259,7 @@ class SecurityTest extends TestCase public function test_plan_list_requires_workspace_context(): void { - $tool = new PlanList(); + $tool = new PlanList; $result = $tool->handle([], []); // No workspace_id in context $this->assertArrayHasKey('error', $result); @@ -277,7 +278,7 @@ class SecurityTest extends TestCase 'title' => 'Other Plan', ]); - $tool = new PlanList(); + $tool = new PlanList; $result = $tool->handle([], ['workspace_id' => $this->workspace->id]); $this->assertArrayHasKey('success', $result); @@ -387,7 +388,7 @@ class SecurityTest extends TestCase public function test_state_set_has_workspace_dependency(): void { - $tool = new StateSet(); + $tool = new StateSet; $dependencies = $tool->dependencies(); $this->assertNotEmpty($dependencies); @@ -396,7 +397,7 @@ class SecurityTest extends TestCase public function test_state_get_has_workspace_dependency(): void { - $tool = new StateGet(); + $tool = new StateGet; $dependencies = $tool->dependencies(); $this->assertNotEmpty($dependencies); @@ -405,7 +406,7 @@ class SecurityTest extends TestCase public function test_state_list_has_workspace_dependency(): void { - $tool = new StateList(); + $tool = new StateList; $dependencies = $tool->dependencies(); $this->assertNotEmpty($dependencies); @@ -414,7 +415,7 @@ class SecurityTest extends TestCase public function test_plan_get_has_workspace_dependency(): void { - $tool = new PlanGet(); + $tool = new PlanGet; $dependencies = $tool->dependencies(); $this->assertNotEmpty($dependencies); @@ -423,7 +424,7 @@ class SecurityTest extends TestCase public function test_plan_list_has_workspace_dependency(): void { - $tool = new PlanList(); + $tool = new PlanList; $dependencies = $tool->dependencies(); $this->assertNotEmpty($dependencies); diff --git a/tests/Unit/AgenticManagerTest.php b/tests/Unit/AgenticManagerTest.php index ffee680..1efcb5d 100644 --- a/tests/Unit/AgenticManagerTest.php +++ b/tests/Unit/AgenticManagerTest.php @@ -27,7 +27,7 @@ describe('provider registration', function () { Config::set('services.google.ai_api_key', 'test-gemini-key'); Config::set('services.openai.api_key', 'test-openai-key'); - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->claude())->toBeInstanceOf(ClaudeService::class) ->and($manager->gemini())->toBeInstanceOf(GeminiService::class) @@ -38,7 +38,7 @@ describe('provider registration', function () { Config::set('services.anthropic.api_key', 'test-key'); Config::set('services.anthropic.model', 'claude-opus-4-20250514'); - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->claude()->defaultModel())->toBe('claude-opus-4-20250514'); }); @@ -47,7 +47,7 @@ describe('provider registration', function () { Config::set('services.google.ai_api_key', 'test-key'); Config::set('services.google.ai_model', 'gemini-1.5-pro'); - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->gemini()->defaultModel())->toBe('gemini-1.5-pro'); }); @@ -56,7 +56,7 @@ describe('provider registration', function () { Config::set('services.openai.api_key', 'test-key'); Config::set('services.openai.model', 'gpt-4o'); - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->openai()->defaultModel())->toBe('gpt-4o'); }); @@ -65,7 +65,7 @@ describe('provider registration', function () { Config::set('services.anthropic.api_key', 'test-key'); Config::set('services.anthropic.model', null); - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->claude()->defaultModel())->toBe('claude-sonnet-4-20250514'); }); @@ -74,7 +74,7 @@ describe('provider registration', function () { Config::set('services.google.ai_api_key', 'test-key'); Config::set('services.google.ai_model', null); - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->gemini()->defaultModel())->toBe('gemini-2.0-flash'); }); @@ -83,7 +83,7 @@ describe('provider registration', function () { Config::set('services.openai.api_key', 'test-key'); Config::set('services.openai.model', null); - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->openai()->defaultModel())->toBe('gpt-4o-mini'); }); @@ -101,7 +101,7 @@ describe('provider retrieval', function () { }); it('retrieves provider by name using provider() method', function () { - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->provider('claude'))->toBeInstanceOf(ClaudeService::class) ->and($manager->provider('gemini'))->toBeInstanceOf(GeminiService::class) @@ -109,27 +109,27 @@ describe('provider retrieval', function () { }); it('returns default provider when null passed to provider()', function () { - $manager = new AgenticManager(); + $manager = new AgenticManager; // Default is 'claude' expect($manager->provider(null))->toBeInstanceOf(ClaudeService::class); }); it('returns default provider when no argument passed to provider()', function () { - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->provider())->toBeInstanceOf(ClaudeService::class); }); it('throws exception for unknown provider name', function () { - $manager = new AgenticManager(); + $manager = new AgenticManager; expect(fn () => $manager->provider('unknown')) ->toThrow(InvalidArgumentException::class, 'Unknown AI provider: unknown'); }); it('returns provider implementing AgenticProviderInterface', function () { - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->provider('claude'))->toBeInstanceOf(AgenticProviderInterface::class); }); @@ -147,13 +147,13 @@ describe('default provider', function () { }); it('uses claude as default provider initially', function () { - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->provider()->name())->toBe('claude'); }); it('allows changing default provider to gemini', function () { - $manager = new AgenticManager(); + $manager = new AgenticManager; $manager->setDefault('gemini'); @@ -161,7 +161,7 @@ describe('default provider', function () { }); it('allows changing default provider to openai', function () { - $manager = new AgenticManager(); + $manager = new AgenticManager; $manager->setDefault('openai'); @@ -169,14 +169,14 @@ describe('default provider', function () { }); it('throws exception when setting unknown default provider', function () { - $manager = new AgenticManager(); + $manager = new AgenticManager; expect(fn () => $manager->setDefault('unknown')) ->toThrow(InvalidArgumentException::class, 'Unknown AI provider: unknown'); }); it('allows switching default provider multiple times', function () { - $manager = new AgenticManager(); + $manager = new AgenticManager; $manager->setDefault('gemini'); expect($manager->provider()->name())->toBe('gemini'); @@ -197,7 +197,7 @@ describe('provider availability', function () { it('reports provider as available when API key is set', function () { Config::set('services.anthropic.api_key', 'test-key'); - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->isAvailable('claude'))->toBeTrue(); }); @@ -207,7 +207,7 @@ describe('provider availability', function () { Config::set('services.google.ai_api_key', ''); Config::set('services.openai.api_key', ''); - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->isAvailable('claude'))->toBeFalse() ->and($manager->isAvailable('gemini'))->toBeFalse() @@ -217,13 +217,13 @@ describe('provider availability', function () { it('reports provider as unavailable when API key is null', function () { Config::set('services.anthropic.api_key', null); - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->isAvailable('claude'))->toBeFalse(); }); it('returns false for unknown provider name', function () { - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->isAvailable('unknown'))->toBeFalse(); }); @@ -233,7 +233,7 @@ describe('provider availability', function () { Config::set('services.google.ai_api_key', ''); Config::set('services.openai.api_key', 'test-key'); - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->isAvailable('claude'))->toBeTrue() ->and($manager->isAvailable('gemini'))->toBeFalse() @@ -251,7 +251,7 @@ describe('available providers list', function () { Config::set('services.google.ai_api_key', 'test-gemini-key'); Config::set('services.openai.api_key', 'test-openai-key'); - $manager = new AgenticManager(); + $manager = new AgenticManager; $available = $manager->availableProviders(); expect($available)->toHaveCount(3) @@ -263,7 +263,7 @@ describe('available providers list', function () { Config::set('services.google.ai_api_key', ''); Config::set('services.openai.api_key', ''); - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->availableProviders())->toBeEmpty(); }); @@ -273,7 +273,7 @@ describe('available providers list', function () { Config::set('services.google.ai_api_key', ''); Config::set('services.openai.api_key', 'test-key'); - $manager = new AgenticManager(); + $manager = new AgenticManager; $available = $manager->availableProviders(); expect($available)->toHaveCount(2) @@ -283,7 +283,7 @@ describe('available providers list', function () { it('returns providers implementing AgenticProviderInterface', function () { Config::set('services.anthropic.api_key', 'test-key'); - $manager = new AgenticManager(); + $manager = new AgenticManager; $available = $manager->availableProviders(); foreach ($available as $provider) { @@ -304,7 +304,7 @@ describe('direct provider access methods', function () { }); it('returns ClaudeService from claude() method', function () { - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->claude()) ->toBeInstanceOf(ClaudeService::class) @@ -312,7 +312,7 @@ describe('direct provider access methods', function () { }); it('returns GeminiService from gemini() method', function () { - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->gemini()) ->toBeInstanceOf(GeminiService::class) @@ -320,7 +320,7 @@ describe('direct provider access methods', function () { }); it('returns OpenAIService from openai() method', function () { - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->openai()) ->toBeInstanceOf(OpenAIService::class) @@ -328,7 +328,7 @@ describe('direct provider access methods', function () { }); it('returns same instance on repeated calls', function () { - $manager = new AgenticManager(); + $manager = new AgenticManager; $claude1 = $manager->claude(); $claude2 = $manager->claude(); @@ -350,7 +350,7 @@ describe('edge cases', function () { Config::set('services.openai.api_key', null); Config::set('services.openai.model', null); - $manager = new AgenticManager(); + $manager = new AgenticManager; // Should still construct without throwing expect($manager->claude())->toBeInstanceOf(ClaudeService::class) @@ -364,7 +364,7 @@ describe('edge cases', function () { it('provider retrieval is case-sensitive', function () { Config::set('services.anthropic.api_key', 'test-key'); - $manager = new AgenticManager(); + $manager = new AgenticManager; expect(fn () => $manager->provider('Claude')) ->toThrow(InvalidArgumentException::class); @@ -373,7 +373,7 @@ describe('edge cases', function () { it('isAvailable handles case sensitivity', function () { Config::set('services.anthropic.api_key', 'test-key'); - $manager = new AgenticManager(); + $manager = new AgenticManager; expect($manager->isAvailable('claude'))->toBeTrue() ->and($manager->isAvailable('Claude'))->toBeFalse() @@ -381,7 +381,7 @@ describe('edge cases', function () { }); it('setDefault handles case sensitivity', function () { - $manager = new AgenticManager(); + $manager = new AgenticManager; expect(fn () => $manager->setDefault('Gemini')) ->toThrow(InvalidArgumentException::class); diff --git a/tests/UseCase/AdminPanelBasic.php b/tests/UseCase/AdminPanelBasic.php index ddd17dd..0dadc1e 100644 --- a/tests/UseCase/AdminPanelBasic.php +++ b/tests/UseCase/AdminPanelBasic.php @@ -10,7 +10,6 @@ */ use Core\Mod\Agentic\Models\AgentPlan; -use Core\Mod\Agentic\Models\AgentSession; use Core\Tenant\Models\User; use Core\Tenant\Models\Workspace; @@ -34,17 +33,17 @@ describe('Agentic Admin Panel', function () { $page = visit('/login'); $page->fill('email', 'test@example.com') - ->fill('password', 'password') - ->click(__('pages::pages.login.submit')) - ->assertPathContains('/hub'); + ->fill('password', 'password') + ->click(__('pages::pages.login.submit')) + ->assertPathContains('/hub'); // Navigate to Agentic dashboard $page->navigate('/hub/agents') - ->assertSee(__('agentic::agentic.dashboard.title')) - ->assertSee(__('agentic::agentic.dashboard.subtitle')) - ->assertSee(__('agentic::agentic.actions.refresh')) - ->assertSee(__('agentic::agentic.dashboard.recent_activity')) - ->assertSee(__('agentic::agentic.dashboard.top_tools')); + ->assertSee(__('agentic::agentic.dashboard.title')) + ->assertSee(__('agentic::agentic.dashboard.subtitle')) + ->assertSee(__('agentic::agentic.actions.refresh')) + ->assertSee(__('agentic::agentic.dashboard.recent_activity')) + ->assertSee(__('agentic::agentic.dashboard.top_tools')); }); it('can view plans list with filters', function () { @@ -59,24 +58,24 @@ describe('Agentic Admin Panel', function () { $page = visit('/login'); $page->fill('email', 'test@example.com') - ->fill('password', 'password') - ->click(__('pages::pages.login.submit')) - ->assertPathContains('/hub'); + ->fill('password', 'password') + ->click(__('pages::pages.login.submit')) + ->assertPathContains('/hub'); // Navigate to plans $page->navigate('/hub/agents/plans') - ->assertSee(__('agentic::agentic.plans.title')) - ->assertSee(__('agentic::agentic.plans.subtitle')) - ->assertSee(__('agentic::agentic.plans.search_placeholder')) - ->assertSee(__('agentic::agentic.filters.all_statuses')) - ->assertSee(__('agentic::agentic.filters.all_workspaces')) - ->assertSee(__('agentic::agentic.table.plan')) - ->assertSee(__('agentic::agentic.table.workspace')) - ->assertSee(__('agentic::agentic.table.status')) - ->assertSee(__('agentic::agentic.table.progress')) - ->assertSee(__('agentic::agentic.table.sessions')) - ->assertSee(__('agentic::agentic.table.last_activity')) - ->assertSee(__('agentic::agentic.table.actions')); + ->assertSee(__('agentic::agentic.plans.title')) + ->assertSee(__('agentic::agentic.plans.subtitle')) + ->assertSee(__('agentic::agentic.plans.search_placeholder')) + ->assertSee(__('agentic::agentic.filters.all_statuses')) + ->assertSee(__('agentic::agentic.filters.all_workspaces')) + ->assertSee(__('agentic::agentic.table.plan')) + ->assertSee(__('agentic::agentic.table.workspace')) + ->assertSee(__('agentic::agentic.table.status')) + ->assertSee(__('agentic::agentic.table.progress')) + ->assertSee(__('agentic::agentic.table.sessions')) + ->assertSee(__('agentic::agentic.table.last_activity')) + ->assertSee(__('agentic::agentic.table.actions')); }); it('can view sessions list with filters', function () { @@ -84,23 +83,23 @@ describe('Agentic Admin Panel', function () { $page = visit('/login'); $page->fill('email', 'test@example.com') - ->fill('password', 'password') - ->click(__('pages::pages.login.submit')) - ->assertPathContains('/hub'); + ->fill('password', 'password') + ->click(__('pages::pages.login.submit')) + ->assertPathContains('/hub'); // Navigate to sessions $page->navigate('/hub/agents/sessions') - ->assertSee(__('agentic::agentic.sessions.title')) - ->assertSee(__('agentic::agentic.sessions.subtitle')) - ->assertSee(__('agentic::agentic.sessions.search_placeholder')) - ->assertSee(__('agentic::agentic.filters.all_statuses')) - ->assertSee(__('agentic::agentic.filters.all_agents')) - ->assertSee(__('agentic::agentic.filters.all_workspaces')) - ->assertSee(__('agentic::agentic.filters.all_plans')) - ->assertSee(__('agentic::agentic.table.session')) - ->assertSee(__('agentic::agentic.table.agent')) - ->assertSee(__('agentic::agentic.table.duration')) - ->assertSee(__('agentic::agentic.table.activity')); + ->assertSee(__('agentic::agentic.sessions.title')) + ->assertSee(__('agentic::agentic.sessions.subtitle')) + ->assertSee(__('agentic::agentic.sessions.search_placeholder')) + ->assertSee(__('agentic::agentic.filters.all_statuses')) + ->assertSee(__('agentic::agentic.filters.all_agents')) + ->assertSee(__('agentic::agentic.filters.all_workspaces')) + ->assertSee(__('agentic::agentic.filters.all_plans')) + ->assertSee(__('agentic::agentic.table.session')) + ->assertSee(__('agentic::agentic.table.agent')) + ->assertSee(__('agentic::agentic.table.duration')) + ->assertSee(__('agentic::agentic.table.activity')); }); it('can view templates page', function () { @@ -108,22 +107,22 @@ describe('Agentic Admin Panel', function () { $page = visit('/login'); $page->fill('email', 'test@example.com') - ->fill('password', 'password') - ->click(__('pages::pages.login.submit')) - ->assertPathContains('/hub'); + ->fill('password', 'password') + ->click(__('pages::pages.login.submit')) + ->assertPathContains('/hub'); // Navigate to templates $page->navigate('/hub/agents/templates') - ->assertSee(__('agentic::agentic.templates.title')) - ->assertSee(__('agentic::agentic.templates.subtitle')) - ->assertSee(__('agentic::agentic.actions.import')) - ->assertSee(__('agentic::agentic.actions.back_to_plans')) - ->assertSee(__('agentic::agentic.templates.stats.templates')) - ->assertSee(__('agentic::agentic.templates.stats.categories')) - ->assertSee(__('agentic::agentic.templates.stats.total_phases')) - ->assertSee(__('agentic::agentic.templates.stats.with_variables')) - ->assertSee(__('agentic::agentic.templates.search_placeholder')) - ->assertSee(__('agentic::agentic.filters.all_categories')); + ->assertSee(__('agentic::agentic.templates.title')) + ->assertSee(__('agentic::agentic.templates.subtitle')) + ->assertSee(__('agentic::agentic.actions.import')) + ->assertSee(__('agentic::agentic.actions.back_to_plans')) + ->assertSee(__('agentic::agentic.templates.stats.templates')) + ->assertSee(__('agentic::agentic.templates.stats.categories')) + ->assertSee(__('agentic::agentic.templates.stats.total_phases')) + ->assertSee(__('agentic::agentic.templates.stats.with_variables')) + ->assertSee(__('agentic::agentic.templates.search_placeholder')) + ->assertSee(__('agentic::agentic.filters.all_categories')); }); it('can view API keys page', function () { @@ -131,25 +130,25 @@ describe('Agentic Admin Panel', function () { $page = visit('/login'); $page->fill('email', 'test@example.com') - ->fill('password', 'password') - ->click(__('pages::pages.login.submit')) - ->assertPathContains('/hub'); + ->fill('password', 'password') + ->click(__('pages::pages.login.submit')) + ->assertPathContains('/hub'); // Navigate to API keys $page->navigate('/hub/agents/api-keys') - ->assertSee(__('agentic::agentic.api_keys.title')) - ->assertSee(__('agentic::agentic.api_keys.subtitle')) - ->assertSee(__('agentic::agentic.actions.create_key')) - ->assertSee(__('agentic::agentic.api_keys.stats.total_keys')) - ->assertSee(__('agentic::agentic.api_keys.stats.active')) - ->assertSee(__('agentic::agentic.api_keys.stats.revoked')) - ->assertSee(__('agentic::agentic.api_keys.stats.total_calls')) - ->assertSee(__('agentic::agentic.table.name')) - ->assertSee(__('agentic::agentic.table.permissions')) - ->assertSee(__('agentic::agentic.table.rate_limit')) - ->assertSee(__('agentic::agentic.table.usage')) - ->assertSee(__('agentic::agentic.table.last_used')) - ->assertSee(__('agentic::agentic.table.created')); + ->assertSee(__('agentic::agentic.api_keys.title')) + ->assertSee(__('agentic::agentic.api_keys.subtitle')) + ->assertSee(__('agentic::agentic.actions.create_key')) + ->assertSee(__('agentic::agentic.api_keys.stats.total_keys')) + ->assertSee(__('agentic::agentic.api_keys.stats.active')) + ->assertSee(__('agentic::agentic.api_keys.stats.revoked')) + ->assertSee(__('agentic::agentic.api_keys.stats.total_calls')) + ->assertSee(__('agentic::agentic.table.name')) + ->assertSee(__('agentic::agentic.table.permissions')) + ->assertSee(__('agentic::agentic.table.rate_limit')) + ->assertSee(__('agentic::agentic.table.usage')) + ->assertSee(__('agentic::agentic.table.last_used')) + ->assertSee(__('agentic::agentic.table.created')); }); it('can view tool analytics page', function () { @@ -157,23 +156,23 @@ describe('Agentic Admin Panel', function () { $page = visit('/login'); $page->fill('email', 'test@example.com') - ->fill('password', 'password') - ->click(__('pages::pages.login.submit')) - ->assertPathContains('/hub'); + ->fill('password', 'password') + ->click(__('pages::pages.login.submit')) + ->assertPathContains('/hub'); // Navigate to tool analytics $page->navigate('/hub/agents/tools') - ->assertSee(__('agentic::agentic.tools.title')) - ->assertSee(__('agentic::agentic.tools.subtitle')) - ->assertSee(__('agentic::agentic.actions.view_all_calls')) - ->assertSee(__('agentic::agentic.tools.stats.total_calls')) - ->assertSee(__('agentic::agentic.tools.stats.successful')) - ->assertSee(__('agentic::agentic.tools.stats.errors')) - ->assertSee(__('agentic::agentic.tools.stats.success_rate')) - ->assertSee(__('agentic::agentic.tools.stats.unique_tools')) - ->assertSee(__('agentic::agentic.tools.daily_trend')) - ->assertSee(__('agentic::agentic.tools.server_breakdown')) - ->assertSee(__('agentic::agentic.tools.top_tools')); + ->assertSee(__('agentic::agentic.tools.title')) + ->assertSee(__('agentic::agentic.tools.subtitle')) + ->assertSee(__('agentic::agentic.actions.view_all_calls')) + ->assertSee(__('agentic::agentic.tools.stats.total_calls')) + ->assertSee(__('agentic::agentic.tools.stats.successful')) + ->assertSee(__('agentic::agentic.tools.stats.errors')) + ->assertSee(__('agentic::agentic.tools.stats.success_rate')) + ->assertSee(__('agentic::agentic.tools.stats.unique_tools')) + ->assertSee(__('agentic::agentic.tools.daily_trend')) + ->assertSee(__('agentic::agentic.tools.server_breakdown')) + ->assertSee(__('agentic::agentic.tools.top_tools')); }); it('can view tool calls page', function () { @@ -181,21 +180,21 @@ describe('Agentic Admin Panel', function () { $page = visit('/login'); $page->fill('email', 'test@example.com') - ->fill('password', 'password') - ->click(__('pages::pages.login.submit')) - ->assertPathContains('/hub'); + ->fill('password', 'password') + ->click(__('pages::pages.login.submit')) + ->assertPathContains('/hub'); // Navigate to tool calls $page->navigate('/hub/agents/tools/calls') - ->assertSee(__('agentic::agentic.tool_calls.title')) - ->assertSee(__('agentic::agentic.tool_calls.subtitle')) - ->assertSee(__('agentic::agentic.tool_calls.search_placeholder')) - ->assertSee(__('agentic::agentic.filters.all_servers')) - ->assertSee(__('agentic::agentic.filters.all_tools')) - ->assertSee(__('agentic::agentic.filters.all_status')) - ->assertSee(__('agentic::agentic.table.tool')) - ->assertSee(__('agentic::agentic.table.server')) - ->assertSee(__('agentic::agentic.table.time')); + ->assertSee(__('agentic::agentic.tool_calls.title')) + ->assertSee(__('agentic::agentic.tool_calls.subtitle')) + ->assertSee(__('agentic::agentic.tool_calls.search_placeholder')) + ->assertSee(__('agentic::agentic.filters.all_servers')) + ->assertSee(__('agentic::agentic.filters.all_tools')) + ->assertSee(__('agentic::agentic.filters.all_status')) + ->assertSee(__('agentic::agentic.table.tool')) + ->assertSee(__('agentic::agentic.table.server')) + ->assertSee(__('agentic::agentic.table.time')); }); it('shows empty state when no plans exist', function () { @@ -203,14 +202,14 @@ describe('Agentic Admin Panel', function () { $page = visit('/login'); $page->fill('email', 'test@example.com') - ->fill('password', 'password') - ->click(__('pages::pages.login.submit')) - ->assertPathContains('/hub'); + ->fill('password', 'password') + ->click(__('pages::pages.login.submit')) + ->assertPathContains('/hub'); // Navigate to plans (should be empty) $page->navigate('/hub/agents/plans') - ->assertSee(__('agentic::agentic.empty.no_plans')) - ->assertSee(__('agentic::agentic.empty.plans_appear')); + ->assertSee(__('agentic::agentic.empty.no_plans')) + ->assertSee(__('agentic::agentic.empty.plans_appear')); }); it('shows empty state when no sessions exist', function () { @@ -218,14 +217,14 @@ describe('Agentic Admin Panel', function () { $page = visit('/login'); $page->fill('email', 'test@example.com') - ->fill('password', 'password') - ->click(__('pages::pages.login.submit')) - ->assertPathContains('/hub'); + ->fill('password', 'password') + ->click(__('pages::pages.login.submit')) + ->assertPathContains('/hub'); // Navigate to sessions (should be empty) $page->navigate('/hub/agents/sessions') - ->assertSee(__('agentic::agentic.empty.no_sessions')) - ->assertSee(__('agentic::agentic.empty.sessions_appear')); + ->assertSee(__('agentic::agentic.empty.no_sessions')) + ->assertSee(__('agentic::agentic.empty.sessions_appear')); }); it('can clear filters', function () { @@ -233,20 +232,20 @@ describe('Agentic Admin Panel', function () { $page = visit('/login'); $page->fill('email', 'test@example.com') - ->fill('password', 'password') - ->click(__('pages::pages.login.submit')) - ->assertPathContains('/hub'); + ->fill('password', 'password') + ->click(__('pages::pages.login.submit')) + ->assertPathContains('/hub'); // Navigate to plans and use filter $page->navigate('/hub/agents/plans') - ->assertSee(__('agentic::agentic.plans.title')); + ->assertSee(__('agentic::agentic.plans.title')); // Type in search to trigger filter - $page->type('input[placeholder="' . __('agentic::agentic.plans.search_placeholder') . '"]', 'test') - ->wait(1) - ->assertSee(__('agentic::agentic.actions.clear')); + $page->type('input[placeholder="'.__('agentic::agentic.plans.search_placeholder').'"]', 'test') + ->wait(1) + ->assertSee(__('agentic::agentic.actions.clear')); $page->click(__('agentic::agentic.actions.clear')) - ->wait(1); + ->wait(1); }); });