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 @@