diff --git a/Boot.php b/Boot.php index 7ba3490..9f39249 100644 --- a/Boot.php +++ b/Boot.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Core\Uptelligence; +namespace Core\Mod\Uptelligence; use Core\Events\AdminPanelBooting; use Core\Events\ApiRoutesRegistering; @@ -48,15 +48,15 @@ class Boot extends ServiceProvider 'upstream' ); - $this->app->singleton(\Core\Uptelligence\Services\IssueGeneratorService::class); - $this->app->singleton(\Core\Uptelligence\Services\UpstreamPlanGeneratorService::class); - $this->app->singleton(\Core\Uptelligence\Services\VendorStorageService::class); - $this->app->singleton(\Core\Uptelligence\Services\DiffAnalyzerService::class); - $this->app->singleton(\Core\Uptelligence\Services\AssetTrackerService::class); - $this->app->singleton(\Core\Uptelligence\Services\AIAnalyzerService::class); - $this->app->singleton(\Core\Uptelligence\Services\VendorUpdateCheckerService::class); - $this->app->singleton(\Core\Uptelligence\Services\UptelligenceDigestService::class); - $this->app->singleton(\Core\Uptelligence\Services\WebhookReceiverService::class); + $this->app->singleton(\Core\Mod\Uptelligence\Services\IssueGeneratorService::class); + $this->app->singleton(\Core\Mod\Uptelligence\Services\UpstreamPlanGeneratorService::class); + $this->app->singleton(\Core\Mod\Uptelligence\Services\VendorStorageService::class); + $this->app->singleton(\Core\Mod\Uptelligence\Services\DiffAnalyzerService::class); + $this->app->singleton(\Core\Mod\Uptelligence\Services\AssetTrackerService::class); + $this->app->singleton(\Core\Mod\Uptelligence\Services\AIAnalyzerService::class); + $this->app->singleton(\Core\Mod\Uptelligence\Services\VendorUpdateCheckerService::class); + $this->app->singleton(\Core\Mod\Uptelligence\Services\UptelligenceDigestService::class); + $this->app->singleton(\Core\Mod\Uptelligence\Services\WebhookReceiverService::class); } // ------------------------------------------------------------------------- diff --git a/Console/AnalyzeCommand.php b/Console/AnalyzeCommand.php index cdbb130..496623e 100644 --- a/Console/AnalyzeCommand.php +++ b/Console/AnalyzeCommand.php @@ -2,13 +2,13 @@ declare(strict_types=1); -namespace Core\Uptelligence\Console; +namespace Core\Mod\Uptelligence\Console; use Illuminate\Console\Command; -use Core\Uptelligence\Models\Vendor; -use Core\Uptelligence\Models\VersionRelease; -use Core\Uptelligence\Services\DiffAnalyzerService; -use Core\Uptelligence\Services\VendorStorageService; +use Core\Mod\Uptelligence\Models\Vendor; +use Core\Mod\Uptelligence\Models\VersionRelease; +use Core\Mod\Uptelligence\Services\DiffAnalyzerService; +use Core\Mod\Uptelligence\Services\VendorStorageService; class AnalyzeCommand extends Command { diff --git a/Console/CheckCommand.php b/Console/CheckCommand.php index 292dcc2..0b1093b 100644 --- a/Console/CheckCommand.php +++ b/Console/CheckCommand.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace Core\Uptelligence\Console; +namespace Core\Mod\Uptelligence\Console; use Illuminate\Console\Command; -use Core\Uptelligence\Models\Vendor; -use Core\Uptelligence\Services\AssetTrackerService; -use Core\Uptelligence\Services\VendorStorageService; +use Core\Mod\Uptelligence\Models\Vendor; +use Core\Mod\Uptelligence\Services\AssetTrackerService; +use Core\Mod\Uptelligence\Services\VendorStorageService; class CheckCommand extends Command { diff --git a/Console/CheckUpdatesCommand.php b/Console/CheckUpdatesCommand.php index a72b5be..1fd89a0 100644 --- a/Console/CheckUpdatesCommand.php +++ b/Console/CheckUpdatesCommand.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace Core\Uptelligence\Console; +namespace Core\Mod\Uptelligence\Console; use Illuminate\Console\Command; -use Core\Uptelligence\Models\Vendor; -use Core\Uptelligence\Services\AssetTrackerService; -use Core\Uptelligence\Services\VendorUpdateCheckerService; +use Core\Mod\Uptelligence\Models\Vendor; +use Core\Mod\Uptelligence\Services\AssetTrackerService; +use Core\Mod\Uptelligence\Services\VendorUpdateCheckerService; /** * Artisan command to check vendors and assets for upstream updates. diff --git a/Console/IssuesCommand.php b/Console/IssuesCommand.php index 158c86e..da7c4f9 100644 --- a/Console/IssuesCommand.php +++ b/Console/IssuesCommand.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace Core\Uptelligence\Console; +namespace Core\Mod\Uptelligence\Console; use Illuminate\Console\Command; -use Core\Uptelligence\Models\UpstreamTodo; -use Core\Uptelligence\Models\Vendor; +use Core\Mod\Uptelligence\Models\UpstreamTodo; +use Core\Mod\Uptelligence\Models\Vendor; class IssuesCommand extends Command { diff --git a/Console/SendDigestsCommand.php b/Console/SendDigestsCommand.php index 6fed385..c7905da 100644 --- a/Console/SendDigestsCommand.php +++ b/Console/SendDigestsCommand.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace Core\Uptelligence\Console; +namespace Core\Mod\Uptelligence\Console; use Illuminate\Console\Command; -use Core\Uptelligence\Models\UptelligenceDigest; -use Core\Uptelligence\Services\UptelligenceDigestService; +use Core\Mod\Uptelligence\Models\UptelligenceDigest; +use Core\Mod\Uptelligence\Services\UptelligenceDigestService; /** * Send Uptelligence digest emails to subscribed users. diff --git a/Controllers/Api/WebhookController.php b/Controllers/Api/WebhookController.php index a1cf114..57bb97e 100644 --- a/Controllers/Api/WebhookController.php +++ b/Controllers/Api/WebhookController.php @@ -2,16 +2,16 @@ declare(strict_types=1); -namespace Core\Uptelligence\Controllers\Api; +namespace Core\Mod\Uptelligence\Controllers\Api; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Routing\Controller; use Illuminate\Support\Facades\Log; -use Core\Uptelligence\Jobs\ProcessUptelligenceWebhook; -use Core\Uptelligence\Models\UptelligenceWebhook; -use Core\Uptelligence\Models\UptelligenceWebhookDelivery; -use Core\Uptelligence\Services\WebhookReceiverService; +use Core\Mod\Uptelligence\Jobs\ProcessUptelligenceWebhook; +use Core\Mod\Uptelligence\Models\UptelligenceWebhook; +use Core\Mod\Uptelligence\Models\UptelligenceWebhookDelivery; +use Core\Mod\Uptelligence\Services\WebhookReceiverService; /** * WebhookController - receives incoming vendor release webhooks. diff --git a/Jobs/CheckVendorUpdatesJob.php b/Jobs/CheckVendorUpdatesJob.php index 8287f6a..f3d3b8e 100644 --- a/Jobs/CheckVendorUpdatesJob.php +++ b/Jobs/CheckVendorUpdatesJob.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Core\Uptelligence\Jobs; +namespace Core\Mod\Uptelligence\Jobs; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; @@ -10,9 +10,9 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Log; -use Core\Uptelligence\Models\Vendor; -use Core\Uptelligence\Services\AssetTrackerService; -use Core\Uptelligence\Services\VendorUpdateCheckerService; +use Core\Mod\Uptelligence\Models\Vendor; +use Core\Mod\Uptelligence\Services\AssetTrackerService; +use Core\Mod\Uptelligence\Services\VendorUpdateCheckerService; /** * Job to check vendors and assets for upstream updates. diff --git a/Jobs/ProcessUptelligenceWebhook.php b/Jobs/ProcessUptelligenceWebhook.php index c028c16..b47efa2 100644 --- a/Jobs/ProcessUptelligenceWebhook.php +++ b/Jobs/ProcessUptelligenceWebhook.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Core\Uptelligence\Jobs; +namespace Core\Mod\Uptelligence\Jobs; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; @@ -10,9 +10,9 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Log; -use Core\Uptelligence\Models\UptelligenceWebhookDelivery; -use Core\Uptelligence\Notifications\NewReleaseDetected; -use Core\Uptelligence\Services\WebhookReceiverService; +use Core\Mod\Uptelligence\Models\UptelligenceWebhookDelivery; +use Core\Mod\Uptelligence\Notifications\NewReleaseDetected; +use Core\Mod\Uptelligence\Services\WebhookReceiverService; /** * ProcessUptelligenceWebhook - async processing of incoming vendor webhooks. @@ -129,13 +129,13 @@ class ProcessUptelligenceWebhook implements ShouldQueue * Send notification when a new release is detected. */ protected function sendReleaseNotification( - \Core\Uptelligence\Models\Vendor $vendor, + \Core\Mod\Uptelligence\Models\Vendor $vendor, array $parsedData, array $result ): void { try { // Get users subscribed to digest notifications for this vendor - $digests = \Core\Uptelligence\Models\UptelligenceDigest::where('is_enabled', true) + $digests = \Core\Mod\Uptelligence\Models\UptelligenceDigest::where('is_enabled', true) ->with('user') ->get(); diff --git a/Models/AnalysisLog.php b/Models/AnalysisLog.php index de677eb..4b426e8 100644 --- a/Models/AnalysisLog.php +++ b/Models/AnalysisLog.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Core\Uptelligence\Models; +namespace Core\Mod\Uptelligence\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; diff --git a/Models/Asset.php b/Models/Asset.php index f2bb037..0c93d78 100644 --- a/Models/Asset.php +++ b/Models/Asset.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Core\Uptelligence\Models; +namespace Core\Mod\Uptelligence\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; diff --git a/Models/AssetVersion.php b/Models/AssetVersion.php index 104c12a..923a81b 100644 --- a/Models/AssetVersion.php +++ b/Models/AssetVersion.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Core\Uptelligence\Models; +namespace Core\Mod\Uptelligence\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; diff --git a/Models/DiffCache.php b/Models/DiffCache.php index 877b2ad..0714e19 100644 --- a/Models/DiffCache.php +++ b/Models/DiffCache.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Core\Uptelligence\Models; +namespace Core\Mod\Uptelligence\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; diff --git a/Models/Pattern.php b/Models/Pattern.php index 70af7c2..3c4980e 100644 --- a/Models/Pattern.php +++ b/Models/Pattern.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Core\Uptelligence\Models; +namespace Core\Mod\Uptelligence\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; diff --git a/Models/PatternCollection.php b/Models/PatternCollection.php index 259aa07..ebba51d 100644 --- a/Models/PatternCollection.php +++ b/Models/PatternCollection.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Core\Uptelligence\Models; +namespace Core\Mod\Uptelligence\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; diff --git a/Models/PatternVariant.php b/Models/PatternVariant.php index 667c86f..3781426 100644 --- a/Models/PatternVariant.php +++ b/Models/PatternVariant.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Core\Uptelligence\Models; +namespace Core\Mod\Uptelligence\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; diff --git a/Models/UpstreamTodo.php b/Models/UpstreamTodo.php index e73ac7d..2457e81 100644 --- a/Models/UpstreamTodo.php +++ b/Models/UpstreamTodo.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Core\Uptelligence\Models; +namespace Core\Mod\Uptelligence\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; diff --git a/Models/UptelligenceDigest.php b/Models/UptelligenceDigest.php index 72cb959..c7ef72d 100644 --- a/Models/UptelligenceDigest.php +++ b/Models/UptelligenceDigest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Core\Uptelligence\Models; +namespace Core\Mod\Uptelligence\Models; use Core\Mod\Tenant\Concerns\BelongsToWorkspace; use Core\Mod\Tenant\Models\User; diff --git a/Models/UptelligenceWebhook.php b/Models/UptelligenceWebhook.php index 77e75fd..1273e55 100644 --- a/Models/UptelligenceWebhook.php +++ b/Models/UptelligenceWebhook.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Core\Uptelligence\Models; +namespace Core\Mod\Uptelligence\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; diff --git a/Models/UptelligenceWebhookDelivery.php b/Models/UptelligenceWebhookDelivery.php index 8785957..36bcf8f 100644 --- a/Models/UptelligenceWebhookDelivery.php +++ b/Models/UptelligenceWebhookDelivery.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Core\Uptelligence\Models; +namespace Core\Mod\Uptelligence\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; diff --git a/Models/Vendor.php b/Models/Vendor.php index 4205085..3b21f85 100644 --- a/Models/Vendor.php +++ b/Models/Vendor.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Core\Uptelligence\Models; +namespace Core\Mod\Uptelligence\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; diff --git a/Models/VersionRelease.php b/Models/VersionRelease.php index 2ae284c..67ff3ac 100644 --- a/Models/VersionRelease.php +++ b/Models/VersionRelease.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Core\Uptelligence\Models; +namespace Core\Mod\Uptelligence\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; diff --git a/Notifications/NewReleaseDetected.php b/Notifications/NewReleaseDetected.php index a49ce22..48b30ab 100644 --- a/Notifications/NewReleaseDetected.php +++ b/Notifications/NewReleaseDetected.php @@ -2,13 +2,13 @@ declare(strict_types=1); -namespace Core\Uptelligence\Notifications; +namespace Core\Mod\Uptelligence\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; -use Core\Uptelligence\Models\Vendor; +use Core\Mod\Uptelligence\Models\Vendor; /** * NewReleaseDetected - notification when a vendor releases a new version. diff --git a/Notifications/SendUptelligenceDigest.php b/Notifications/SendUptelligenceDigest.php index d6d2bba..49c2324 100644 --- a/Notifications/SendUptelligenceDigest.php +++ b/Notifications/SendUptelligenceDigest.php @@ -2,14 +2,14 @@ declare(strict_types=1); -namespace Core\Uptelligence\Notifications; +namespace Core\Mod\Uptelligence\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; use Illuminate\Support\Collection; -use Core\Uptelligence\Models\UptelligenceDigest; +use Core\Mod\Uptelligence\Models\UptelligenceDigest; /** * SendUptelligenceDigest - email notification for vendor update summaries. diff --git a/Services/AIAnalyzerService.php b/Services/AIAnalyzerService.php index b6b3f6e..957af52 100644 --- a/Services/AIAnalyzerService.php +++ b/Services/AIAnalyzerService.php @@ -2,16 +2,16 @@ declare(strict_types=1); -namespace Core\Uptelligence\Services; +namespace Core\Mod\Uptelligence\Services; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\RateLimiter; -use Core\Uptelligence\Models\AnalysisLog; -use Core\Uptelligence\Models\DiffCache; -use Core\Uptelligence\Models\UpstreamTodo; -use Core\Uptelligence\Models\VersionRelease; +use Core\Mod\Uptelligence\Models\AnalysisLog; +use Core\Mod\Uptelligence\Models\DiffCache; +use Core\Mod\Uptelligence\Models\UpstreamTodo; +use Core\Mod\Uptelligence\Models\VersionRelease; /** * AI Analyzer Service - uses AI to analyse version releases and create todos. diff --git a/Services/AssetTrackerService.php b/Services/AssetTrackerService.php index 1d21ea2..5204fd4 100644 --- a/Services/AssetTrackerService.php +++ b/Services/AssetTrackerService.php @@ -2,15 +2,15 @@ declare(strict_types=1); -namespace Core\Uptelligence\Services; +namespace Core\Mod\Uptelligence\Services; use Carbon\Carbon; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Process; use Illuminate\Support\Facades\RateLimiter; -use Core\Uptelligence\Models\Asset; -use Core\Uptelligence\Models\AssetVersion; +use Core\Mod\Uptelligence\Models\Asset; +use Core\Mod\Uptelligence\Models\AssetVersion; /** * Asset Tracker Service - monitors and updates package dependencies. diff --git a/Services/DiffAnalyzerService.php b/Services/DiffAnalyzerService.php index 87ffa04..e638784 100644 --- a/Services/DiffAnalyzerService.php +++ b/Services/DiffAnalyzerService.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Core\Uptelligence\Services; +namespace Core\Mod\Uptelligence\Services; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; @@ -10,10 +10,10 @@ use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Process; use InvalidArgumentException; -use Core\Uptelligence\Models\AnalysisLog; -use Core\Uptelligence\Models\DiffCache; -use Core\Uptelligence\Models\Vendor; -use Core\Uptelligence\Models\VersionRelease; +use Core\Mod\Uptelligence\Models\AnalysisLog; +use Core\Mod\Uptelligence\Models\DiffCache; +use Core\Mod\Uptelligence\Models\Vendor; +use Core\Mod\Uptelligence\Models\VersionRelease; /** * Diff Analyzer Service - analyses differences between vendor versions. diff --git a/Services/IssueGeneratorService.php b/Services/IssueGeneratorService.php index 7cc47e1..319727a 100644 --- a/Services/IssueGeneratorService.php +++ b/Services/IssueGeneratorService.php @@ -2,16 +2,16 @@ declare(strict_types=1); -namespace Core\Uptelligence\Services; +namespace Core\Mod\Uptelligence\Services; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\RateLimiter; use InvalidArgumentException; -use Core\Uptelligence\Models\AnalysisLog; -use Core\Uptelligence\Models\UpstreamTodo; -use Core\Uptelligence\Models\Vendor; +use Core\Mod\Uptelligence\Models\AnalysisLog; +use Core\Mod\Uptelligence\Models\UpstreamTodo; +use Core\Mod\Uptelligence\Models\Vendor; /** * Issue Generator Service - creates GitHub/Gitea issues from upstream todos. diff --git a/Services/UpstreamPlanGeneratorService.php b/Services/UpstreamPlanGeneratorService.php index dbdff19..eb1ee44 100644 --- a/Services/UpstreamPlanGeneratorService.php +++ b/Services/UpstreamPlanGeneratorService.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace Core\Uptelligence\Services; +namespace Core\Mod\Uptelligence\Services; use Illuminate\Support\Collection; -use Core\Uptelligence\Models\UpstreamTodo; -use Core\Uptelligence\Models\Vendor; -use Core\Uptelligence\Models\VersionRelease; +use Core\Mod\Uptelligence\Models\UpstreamTodo; +use Core\Mod\Uptelligence\Models\Vendor; +use Core\Mod\Uptelligence\Models\VersionRelease; /** * Upstream Plan Generator Service - creates agent plans from version release analysis. diff --git a/Services/UptelligenceDigestService.php b/Services/UptelligenceDigestService.php index 64c0459..69188c4 100644 --- a/Services/UptelligenceDigestService.php +++ b/Services/UptelligenceDigestService.php @@ -2,15 +2,15 @@ declare(strict_types=1); -namespace Core\Uptelligence\Services; +namespace Core\Mod\Uptelligence\Services; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; -use Core\Uptelligence\Models\UpstreamTodo; -use Core\Uptelligence\Models\UptelligenceDigest; -use Core\Uptelligence\Models\Vendor; -use Core\Uptelligence\Models\VersionRelease; -use Core\Uptelligence\Notifications\SendUptelligenceDigest; +use Core\Mod\Uptelligence\Models\UpstreamTodo; +use Core\Mod\Uptelligence\Models\UptelligenceDigest; +use Core\Mod\Uptelligence\Models\Vendor; +use Core\Mod\Uptelligence\Models\VersionRelease; +use Core\Mod\Uptelligence\Notifications\SendUptelligenceDigest; /** * UptelligenceDigestService - generates and sends digest email notifications. diff --git a/Services/VendorStorageService.php b/Services/VendorStorageService.php index 2911d8a..1766c76 100644 --- a/Services/VendorStorageService.php +++ b/Services/VendorStorageService.php @@ -2,14 +2,14 @@ declare(strict_types=1); -namespace Core\Uptelligence\Services; +namespace Core\Mod\Uptelligence\Services; use Illuminate\Contracts\Filesystem\Filesystem; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; -use Core\Uptelligence\Models\Vendor; -use Core\Uptelligence\Models\VersionRelease; +use Core\Mod\Uptelligence\Models\Vendor; +use Core\Mod\Uptelligence\Models\VersionRelease; use RuntimeException; use Symfony\Component\Process\Process; diff --git a/Services/VendorUpdateCheckerService.php b/Services/VendorUpdateCheckerService.php index 3c45814..8cf5d76 100644 --- a/Services/VendorUpdateCheckerService.php +++ b/Services/VendorUpdateCheckerService.php @@ -2,13 +2,13 @@ declare(strict_types=1); -namespace Core\Uptelligence\Services; +namespace Core\Mod\Uptelligence\Services; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\RateLimiter; -use Core\Uptelligence\Models\UpstreamTodo; -use Core\Uptelligence\Models\Vendor; +use Core\Mod\Uptelligence\Models\UpstreamTodo; +use Core\Mod\Uptelligence\Models\Vendor; /** * Vendor Update Checker Service - checks upstream sources for new releases. diff --git a/Services/WebhookReceiverService.php b/Services/WebhookReceiverService.php index b41158a..f8aff71 100644 --- a/Services/WebhookReceiverService.php +++ b/Services/WebhookReceiverService.php @@ -2,13 +2,13 @@ declare(strict_types=1); -namespace Core\Uptelligence\Services; +namespace Core\Mod\Uptelligence\Services; use Illuminate\Support\Facades\Log; -use Core\Uptelligence\Models\UptelligenceWebhook; -use Core\Uptelligence\Models\UptelligenceWebhookDelivery; -use Core\Uptelligence\Models\Vendor; -use Core\Uptelligence\Models\VersionRelease; +use Core\Mod\Uptelligence\Models\UptelligenceWebhook; +use Core\Mod\Uptelligence\Models\UptelligenceWebhookDelivery; +use Core\Mod\Uptelligence\Models\Vendor; +use Core\Mod\Uptelligence\Models\VersionRelease; /** * WebhookReceiverService - processes incoming vendor release webhooks. diff --git a/View/Blade/admin/digest-preferences.blade.php b/View/Blade/admin/digest-preferences.blade.php index 071990c..e1d8df1 100644 --- a/View/Blade/admin/digest-preferences.blade.php +++ b/View/Blade/admin/digest-preferences.blade.php @@ -30,7 +30,7 @@ Frequency - @foreach(\Core\Uptelligence\Models\UptelligenceDigest::getFrequencyOptions() as $value => $label) + @foreach(\Core\Mod\Uptelligence\Models\UptelligenceDigest::getFrequencyOptions() as $value => $label) canRetry()) { $delivery->scheduleRetry(); - \Core\Uptelligence\Jobs\ProcessUptelligenceWebhook::dispatch($delivery); + \Core\Mod\Uptelligence\Jobs\ProcessUptelligenceWebhook::dispatch($delivery); } unset($this->selectedWebhookDeliveries); diff --git a/changelog/2026/jan/code-review.md b/changelog/2026/jan/code-review.md new file mode 100644 index 0000000..dcac74a --- /dev/null +++ b/changelog/2026/jan/code-review.md @@ -0,0 +1,144 @@ +# Uptelligence Module Review + +**Updated:** 2026-01-21 - All recommended improvements implemented + +## Overview + +The Uptelligence module is an internal tooling system for tracking and managing upstream vendor software updates. It provides: + +1. **Vendor Tracking** - Monitor licensed software (66biolinks, Mixpost Pro/Enterprise), OSS projects, and plugins for version changes +2. **Diff Analysis** - Compare versions, cache diffs, and auto-categorise changes by type (security, controller, model, view, etc.) +3. **AI Analysis** - Use Claude or OpenAI to analyse diffs and generate prioritised porting todos +4. **Asset Tracking** - Monitor Composer/NPM packages, fonts, and CDN resources for updates +5. **Pattern Library** - Store reusable code patterns with variants for MCP context +6. **Issue Generation** - Auto-create GitHub/Gitea issues from todos +7. **Agent Plan Integration** - Generate structured porting plans for the Agentic module +8. **Cold Storage** - Archive vendor versions to S3 with on-demand retrieval + +## Production Readiness Score: 72/100 (was 60/100 - All recommended improvements implemented 2026-01-21) + +This module is well-designed architecturally. P1 critical issues fixed in Wave 1. All recommended improvements now implemented. + +## Critical Issues (Must Fix) + +- [x] **No database migrations** - FIXED: Created `2026_01_21_100000_create_uptelligence_tables.php` with all 10 tables +- [ ] **No Controllers/Routes** - No way to interact with the system via HTTP. No UI, no API endpoints +- [ ] **No Commands** - No artisan commands to run analyses, check for updates, or generate issues +- [ ] **No Tests** - Zero test coverage. No unit tests, feature tests, or factories +- [ ] **No Seeders** - No way to seed default vendors defined in config +- [x] **Dependency on Agentic module** - FIXED: `UpstreamPlanGeneratorService` now checks `agenticModuleAvailable()` before using Agentic models +- [ ] **API keys required** - AI analysis and GitHub/Gitea integration require API keys but no validation or graceful degradation +- [x] **DiffAnalyzerService shell injection risk** - FIXED: Now uses `Process::run(['diff', '-u', $prevPath, $currPath])` array syntax + +## Recommended Improvements + +- [x] **Add input validation on file paths in `DiffAnalyzerService::generateDiff()`** - FIXED: Path traversal validation added to prevent directory traversal attacks. +- [x] **Add rate limiting for AI API calls in `AIAnalyzerService`** - FIXED: Rate limiting implemented for AI analysis calls. +- [x] **Add retry logic with exponential backoff for external API calls** - FIXED: Retry logic with exponential backoff added for Packagist, NPM, GitHub, Gitea, Anthropic, and OpenAI calls. +- [x] **Add logging for all external API failures** - FIXED: Enhanced logging for API failures beyond just `report($e)`. +- [x] **Add database transactions in `DiffAnalyzerService::cacheDiffs()`** - FIXED: Database transactions added with rollback on failure. +- [x] **Add soft deletes to models for audit trail** - FIXED: Soft deletes added to relevant models. +- [x] **Add index on `diff_cache.version_release_id` and `upstream_todos.vendor_id`** - FIXED: Database performance indexes added. +- [x] **Add validation that vendor `target_repo` format is valid** - FIXED: Validation added before using `explode('/', ...)` in IssueGeneratorService. +- [x] **VendorStorageService uses both Laravel `Storage` facade and direct `file_exists()` calls** - FIXED: Standardised to use Storage facade throughout. +- [x] **Add config validation on boot to warn about missing API keys** - FIXED: Config validation added on boot. +- [ ] AssetTrackerService processes packages sequentially - could benefit from parallel processing for large checks +- [ ] Add webhook support for vendor notifications (currently only outbound notifications to Slack/Discord) +- [ ] Pattern model stores code as text - consider blob storage for large patterns +- [x] **Add timestamps validation for `released_at` in AssetVersion** - FIXED: Proper validation added instead of using fragile `now()->parse()`. + +## Missing Features (Future) + +- [ ] Livewire/Flux UI for managing vendors, viewing diffs, and tracking todos +- [ ] Scheduled job to auto-check vendors/assets for updates +- [ ] Webhook endpoint for receiving vendor release notifications +- [ ] CLI commands: `upstream:check`, `upstream:analyze`, `upstream:issues`, `upstream:sync-assets` +- [ ] Dashboard with metrics (pending todos, quick wins, security updates) +- [ ] Email digest notifications for new upstream releases +- [ ] Git submodule sync for OSS vendors (referenced in config but not implemented) +- [ ] Diff viewer UI with syntax highlighting +- [ ] Batch AI analysis with cost tracking +- [ ] Export/import of todos for external tracking systems +- [ ] Integration with project management tools (Linear, Jira) +- [ ] Automated PR creation for simple porting tasks +- [ ] Version comparison UI showing what's changed +- [ ] Pattern search and preview UI + +## Test Coverage Assessment + +**Current Coverage: 0%** + +No tests exist. The module needs: + +- Unit tests for all Models (scopes, helpers, relationships) +- Unit tests for DiffCache::detectCategory() +- Unit tests for Vendor path matching methods +- Feature tests for DiffAnalyzerService +- Feature tests for AIAnalyzerService (with mocked API responses) +- Feature tests for IssueGeneratorService (with mocked GitHub/Gitea APIs) +- Feature tests for VendorStorageService (local and S3 modes) +- Feature tests for AssetTrackerService +- Integration test for full analysis workflow +- Factories for all models + +## Security Concerns + +1. **Shell injection in DiffAnalyzerService** - FIXED: Now uses array syntax for Process::run(). + +2. **No authentication/authorisation** - When routes are added, they need proper guards. This is internal tooling and should be admin-only. + +3. **API tokens in config** - GitHub, Gitea, Anthropic, OpenAI tokens are stored in config. Ensure these are properly protected via `.env` and not logged. + +4. **S3 bucket access** - Vendor archives in S3 should use private ACL. Code doesn't explicitly set ACL. + +5. **Path traversal** - FIXED: Validation added to ensure slug contains no `../` sequences. + +6. **Arbitrary code patterns** - Pattern model stores code that could be surfaced via MCP. Ensure patterns are vetted before use. + +7. **SQL injection via search** - `Pattern::scopeSearch()` uses LIKE with user input. Currently safe due to Eloquent but worth noting. + +## Notes + +### Architecture + +The module follows good separation of concerns: +- Models are clean with well-defined scopes and helpers +- Services handle specific domains (diff analysis, AI, issues, storage) +- Config is comprehensive and uses env vars appropriately + +### Dependencies + +- Requires `Mod\Agentic` module for plan generation (soft dependency - now checks availability) +- External: Anthropic API, OpenAI API, GitHub API, Gitea API, Packagist, NPM registry, AWS S3 + +### Config Observations + +The config includes 3 pre-defined vendors (66biolinks, Mixpost Pro, Mixpost Enterprise) but no seeder to create them. + +The AI model defaults to `claude-sonnet-4-20250514` which is appropriate. + +S3 config supports dual endpoints (Hetzner Object Store pattern) which is good for the infrastructure. + +### Code Quality + +- Consistent use of `declare(strict_types=1)` +- Good PHPDoc on classes +- Constants defined for all magic strings +- Proper type hints throughout +- UK English spelling in documentation (colour, analyse, etc.) matching brand guidelines + +### Missing from Boot.php + +- Routes not registered (no routes file) +- No commands registered +- No event listeners +- No scheduled tasks +- DiffAnalyzerService and AssetTrackerService not registered as singletons (only Issue, Plan, and Storage services are) + +### Potential Quick Wins + +1. Create migrations from model definitions - DONE +2. Add basic artisan commands +3. Register DiffAnalyzerService and AssetTrackerService as singletons +4. Add a simple seeder for default vendors +5. Fix the shell injection in DiffAnalyzerService - DONE diff --git a/composer.json b/composer.json index d90ad6a..17bd0f5 100644 --- a/composer.json +++ b/composer.json @@ -14,18 +14,18 @@ }, "autoload": { "psr-4": { - "Core\\Uptelligence\\": "" + "Core\\Mod\\Uptelligence\\": "" } }, "autoload-dev": { "psr-4": { - "Core\\Uptelligence\\Tests\\": "tests/" + "Core\\Mod\\Uptelligence\\Tests\\": "tests/" } }, "extra": { "laravel": { "providers": [ - "Core\\Uptelligence\\Boot" + "Core\\Mod\\Uptelligence\\Boot" ] } }, diff --git a/routes/admin.php b/routes/admin.php index d3c82e5..0d9a582 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -1,13 +1,13 @@