refactor: move namespace from Core\Uptelligence to Core\Mod\Uptelligence
Aligns module namespace with Core PHP Framework conventions where
modules live under the Core\Mod\ namespace hierarchy. This follows
the monorepo separation work started in 40d893a.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
40d893af44
commit
e0d2325a20
45 changed files with 281 additions and 137 deletions
20
Boot.php
20
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);
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
<flux:heading size="lg" class="mb-4">Frequency</flux:heading>
|
||||
|
||||
<flux:radio.group wire:model.live="frequency" class="space-y-3">
|
||||
@foreach(\Core\Uptelligence\Models\UptelligenceDigest::getFrequencyOptions() as $value => $label)
|
||||
@foreach(\Core\Mod\Uptelligence\Models\UptelligenceDigest::getFrequencyOptions() as $value => $label)
|
||||
<flux:radio
|
||||
value="{{ $value }}"
|
||||
label="{{ $label }}"
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Core\Uptelligence\View\Modal\Admin;
|
||||
namespace Core\Mod\Uptelligence\View\Modal\Admin;
|
||||
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Livewire\Attributes\Computed;
|
||||
|
|
@ -10,7 +10,7 @@ use Livewire\Attributes\Title;
|
|||
use Livewire\Attributes\Url;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
use Core\Uptelligence\Models\Asset;
|
||||
use Core\Mod\Uptelligence\Models\Asset;
|
||||
|
||||
#[Title('Asset Manager')]
|
||||
class AssetManager extends Component
|
||||
|
|
|
|||
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Core\Uptelligence\View\Modal\Admin;
|
||||
namespace Core\Mod\Uptelligence\View\Modal\Admin;
|
||||
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Livewire\Attributes\Computed;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Component;
|
||||
use Core\Uptelligence\Models\Asset;
|
||||
use Core\Uptelligence\Models\UpstreamTodo;
|
||||
use Core\Uptelligence\Models\Vendor;
|
||||
use Core\Uptelligence\Models\VersionRelease;
|
||||
use Core\Mod\Uptelligence\Models\Asset;
|
||||
use Core\Mod\Uptelligence\Models\UpstreamTodo;
|
||||
use Core\Mod\Uptelligence\Models\Vendor;
|
||||
use Core\Mod\Uptelligence\Models\VersionRelease;
|
||||
|
||||
#[Title('Uptelligence Dashboard')]
|
||||
class Dashboard extends Component
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Core\Uptelligence\View\Modal\Admin;
|
||||
namespace Core\Mod\Uptelligence\View\Modal\Admin;
|
||||
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Livewire\Attributes\Computed;
|
||||
|
|
@ -10,9 +10,9 @@ use Livewire\Attributes\Title;
|
|||
use Livewire\Attributes\Url;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
use Core\Uptelligence\Models\DiffCache;
|
||||
use Core\Uptelligence\Models\Vendor;
|
||||
use Core\Uptelligence\Models\VersionRelease;
|
||||
use Core\Mod\Uptelligence\Models\DiffCache;
|
||||
use Core\Mod\Uptelligence\Models\Vendor;
|
||||
use Core\Mod\Uptelligence\Models\VersionRelease;
|
||||
|
||||
#[Title('Diff Viewer')]
|
||||
class DiffViewer extends Component
|
||||
|
|
|
|||
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Core\Uptelligence\View\Modal\Admin;
|
||||
namespace Core\Mod\Uptelligence\View\Modal\Admin;
|
||||
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Livewire\Attributes\Computed;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Component;
|
||||
use Core\Uptelligence\Models\UptelligenceDigest;
|
||||
use Core\Uptelligence\Models\Vendor;
|
||||
use Core\Uptelligence\Services\UptelligenceDigestService;
|
||||
use Core\Mod\Uptelligence\Models\UptelligenceDigest;
|
||||
use Core\Mod\Uptelligence\Models\Vendor;
|
||||
use Core\Mod\Uptelligence\Services\UptelligenceDigestService;
|
||||
|
||||
#[Title('Digest Preferences')]
|
||||
class DigestPreferences extends Component
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Core\Uptelligence\View\Modal\Admin;
|
||||
namespace Core\Mod\Uptelligence\View\Modal\Admin;
|
||||
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Livewire\Attributes\Computed;
|
||||
|
|
@ -10,8 +10,8 @@ use Livewire\Attributes\Title;
|
|||
use Livewire\Attributes\Url;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
use Core\Uptelligence\Models\UpstreamTodo;
|
||||
use Core\Uptelligence\Models\Vendor;
|
||||
use Core\Mod\Uptelligence\Models\UpstreamTodo;
|
||||
use Core\Mod\Uptelligence\Models\Vendor;
|
||||
|
||||
#[Title('Upstream Todos')]
|
||||
class TodoList extends Component
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Core\Uptelligence\View\Modal\Admin;
|
||||
namespace Core\Mod\Uptelligence\View\Modal\Admin;
|
||||
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Livewire\Attributes\Computed;
|
||||
|
|
@ -10,8 +10,8 @@ use Livewire\Attributes\Title;
|
|||
use Livewire\Attributes\Url;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
use Core\Uptelligence\Models\Vendor;
|
||||
use Core\Uptelligence\Models\VersionRelease;
|
||||
use Core\Mod\Uptelligence\Models\Vendor;
|
||||
use Core\Mod\Uptelligence\Models\VersionRelease;
|
||||
|
||||
#[Title('Vendor Manager')]
|
||||
class VendorManager extends Component
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Core\Uptelligence\View\Modal\Admin;
|
||||
namespace Core\Mod\Uptelligence\View\Modal\Admin;
|
||||
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Livewire\Attributes\Computed;
|
||||
|
|
@ -10,9 +10,9 @@ use Livewire\Attributes\Title;
|
|||
use Livewire\Attributes\Url;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
use Core\Uptelligence\Models\UptelligenceWebhook;
|
||||
use Core\Uptelligence\Models\UptelligenceWebhookDelivery;
|
||||
use Core\Uptelligence\Models\Vendor;
|
||||
use Core\Mod\Uptelligence\Models\UptelligenceWebhook;
|
||||
use Core\Mod\Uptelligence\Models\UptelligenceWebhookDelivery;
|
||||
use Core\Mod\Uptelligence\Models\Vendor;
|
||||
|
||||
#[Title('Webhook Manager')]
|
||||
class WebhookManager extends Component
|
||||
|
|
@ -208,7 +208,7 @@ class WebhookManager extends Component
|
|||
|
||||
if ($delivery->canRetry()) {
|
||||
$delivery->scheduleRetry();
|
||||
\Core\Uptelligence\Jobs\ProcessUptelligenceWebhook::dispatch($delivery);
|
||||
\Core\Mod\Uptelligence\Jobs\ProcessUptelligenceWebhook::dispatch($delivery);
|
||||
}
|
||||
|
||||
unset($this->selectedWebhookDeliveries);
|
||||
|
|
|
|||
144
changelog/2026/jan/code-review.md
Normal file
144
changelog/2026/jan/code-review.md
Normal file
|
|
@ -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
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Core\Uptelligence\View\Modal\Admin\AssetManager;
|
||||
use Core\Uptelligence\View\Modal\Admin\Dashboard;
|
||||
use Core\Uptelligence\View\Modal\Admin\DiffViewer;
|
||||
use Core\Uptelligence\View\Modal\Admin\DigestPreferences;
|
||||
use Core\Uptelligence\View\Modal\Admin\TodoList;
|
||||
use Core\Uptelligence\View\Modal\Admin\VendorManager;
|
||||
use Core\Uptelligence\View\Modal\Admin\WebhookManager;
|
||||
use Core\Mod\Uptelligence\View\Modal\Admin\AssetManager;
|
||||
use Core\Mod\Uptelligence\View\Modal\Admin\Dashboard;
|
||||
use Core\Mod\Uptelligence\View\Modal\Admin\DiffViewer;
|
||||
use Core\Mod\Uptelligence\View\Modal\Admin\DigestPreferences;
|
||||
use Core\Mod\Uptelligence\View\Modal\Admin\TodoList;
|
||||
use Core\Mod\Uptelligence\View\Modal\Admin\VendorManager;
|
||||
use Core\Mod\Uptelligence\View\Modal\Admin\WebhookManager;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ declare(strict_types=1);
|
|||
*/
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Core\Uptelligence\Controllers\Api\WebhookController;
|
||||
use Core\Mod\Uptelligence\Controllers\Api\WebhookController;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue