Laravel Vet: esamina il codice Composer prima che venga installato
Laravel Vet è un nuovo package del team di Laravel che ti mostra il codice che composer update sta per scrivere nella tua directory vendor/ e registra i package di cui ti fidi in un file vet.json. Viene distribuito come plugin di Composer, quindi viene eseguito dopo ogni install e prima che ogni update scriva qualcosa.
Se conosci cargo vet dal mondo Rust, questa è la stessa idea applicata a Composer. In caso contrario, ecco il concetto in breve: ogni update porta nel tuo progetto nuovo codice che nessuno del tuo team ha letto. Vet ti mostra quel codice, un package alla volta, prima che venga inserito. Una volta che ti fidi di un package, vet se lo ricorda, così il prossimo update chiede solo cosa è cambiato.
Non devi leggere tutto da solo. Vet passa ogni modifica al coding agent già presente sulla tua macchina, come Claude Code, Codex, Gemini o opencode, e l'agent la legge al posto tuo e riporta: PASS, oppure FAIL con il file e il motivo. Tu leggi i FAIL, premi invio su tutto il resto e vai avanti con la tua giornata.
Una volta che ti fidi di un package, vet se lo ricorda, e il prossimo update chiede solo cosa è cambiato. Un package di cui nessuno si fida esce con uno status diverso da zero, ed è questo che lo rende utile in una build. Funziona con qualsiasi progetto che abbia un
composer.json, quindi Laravel, Symfony, WordPress e PHP puro vanno tutti bene.
Come saprai, ogni update di Composer scrive migliaia di righe di codice che devi o verificare manualmente leggendo i diff oppure fidarti ciecamente di Packagist, e con i problemi di sicurezza in aumento, la verifica sta diventando sempre più importante.
Infatti quest'anno abbiamo avuto una serie di notizie sulla supply chain, dal blocco del malware e le policy sulle dipendenze in Composer 2.10 al pacchetto npm Axios che distribuiva un trojan di accesso remoto.
Vet richiede PHP 8.4 o versioni successive. Installalo come dipendenza di sviluppo e rispondi sì quando Composer chiede se consentire il plugin:
composer require laravel/vet --dev
Per prima cosa, contrassegna come trusted i package attualmente installati in vendor/:
./vendor/bin/vet --init
INFO Trusted [125] packages, and wrote [vet.json].
Questo crea vet.json usando i file dei package già presenti sul tuo disco. Registra la tua fiducia in quei file senza averli esaminati. Vet poi controlla gli update futuri rispetto a quel record. Se un update contiene modifiche non trusted, Vet lo blocca prima che Composer scriva i nuovi file:
❯ composer update
to review (1)
carbonphp/carbon-doctrine-types 3.1.0 → 3.2.0 .............. 2 files changed
│
│ ~ src/Carbon/Doctrine/DateTimeImmutableType.php
│ @@ -17,7 +17,7 @@
│ /**
│ * @SuppressWarnings(PHPMD.UnusedFormalParameter)
│ */
│ - public function convertToPHPValue(mixed $value, AbstractPlatform $platform): ?DateTimeImmutable
│ + public function convertToPHPValue(mixed $value, AbstractPlatform $platform): ?CarbonImmutable
│ {
│ return $this->doConvertToPHPValue($value);
│ }
│
│ ~ src/Carbon/Doctrine/DateTimeType.php
│ @@ -17,7 +17,7 @@
│ /**
│ * @SuppressWarnings(PHPMD.UnusedFormalParameter)
│ */
│ - public function convertToPHPValue(mixed $value, AbstractPlatform $platform): ?DateTime
│ + public function convertToPHPValue(mixed $value, AbstractPlatform $platform): ?Carbon
│ {
│ return $this->doConvertToPHPValue($value);
│ }
│
Packages: 1 to review, 124 trusted
ERROR [1] package is not trusted. Read every change with [./vendor/bin/vet -v]. Run [./vendor/bin/vet] in a terminal to pick the ones that you trust.
TIP Run [./vendor/bin/vet] in a terminal to hand every change to your coding agent.
Esegui ./vendor/bin/vet in un terminale per esaminare le modifiche. Puoi leggere tu stesso le modifiche al codice, poi premere la barra spaziatrice per selezionare i package di cui ti fidi. Oppure puoi chiedere a un coding agent installato sulla tua macchina di esaminarle prima. Vet mostra il risultato dell'agent accanto a ciascun package:
INFO [claude] reviews [3] packages (58.1 KB). This takes a moment.
to review (3)
acme/logger 1.2.0 → 2.0.0 ................................. 12 files changed
│ FAIL src/Ship.php reads .env and sends it to an unknown host
│ src/Ship.php it posts the contents of [.env] to [telemetry.example.com]
acme/tooling 4.1.0 → 4.2.0 ................................. 8 files changed
│ WARN the changes add two commands
│ The agent did not read [1] file, because it is too big. Read it yourself:
│ resources/schema.php 612.4 KB
carbonphp/carbon-doctrine-types 3.1.0 → 3.2.0 .............. 2 files changed
│ PASS the changes narrow two return types
PASS significa che l'agent ha completato la sua revisione e non ha segnalato attacchi. FAIL identifica un file e spiega il problema trovato dall'agent.
WARN significa che la revisione è incompleta e richiede la tua attenzione. Un file potrebbe essere troppo grande, contenere dati non testuali, oppure l'agent potrebbe non aver restituito una risposta. SKIP significa che Vet non ha inviato file all'agent perché nulla è cambiato o non è riuscito a leggere i file del package.
Vet seleziona i package PASS per impostazione predefinita. Esamina i risultati e modifica la selezione, poi premi Invio per salvare i package di cui ti fidi. I soli risultati dell'agent non modificano vet.json.
Vet salva le tue scelte in vet.json, accanto a composer.json. Esegui il commit di questo file nel tuo repository. Ogni voce registra la versione di un package trusted e un hash, un valore calcolato dai file del package:
{
"schema": 4,
"require": {
"carbonphp/carbon-doctrine-types": {
"version": "3.2.1",
"hash": "tree-v2:0f158f3b909fc01e691ed5f5121186056232b049031e7d3a914676d49881ece5"
}
}
}
L'hash copre ogni file del package. Se i file cambiano, anche senza un nuovo numero di versione, Vet richiede un'altra revisione. Vet esce con un errore quando un package non è trusted, quindi il controllo fallisce nella tua build finché qualcuno non contrassegna quel package come trusted.
Vet è attualmente in beta, quindi il comportamento può cambiare prima della prima release stabile. Se vuoi un secondo livello sopra di esso, Heimdall imposta una policy di età minima per le tue dipendenze Composer, in modo che le nuove release debbano restare ferme qualche giorno prima che tu le installi. Visita il repo GitHub per la documentazione completa, e buon audit!
Fonte originale:
https://laravel-news.com/laravel-vetAltri articoli recenti
Laravel AI 1.1 e 1.2: Agent Skills, Cohere e structured output più solidi
Le release 1.1.0 e 1.2.0 di laravel/ai portano gli Agent Skills, l'approvazione obbligatoria per i tool built-in e nuovi provider come Cohere e Laya self-hosted. Sul fronte qualità arrivano i fix allo structured output per Bedrock e il supporto alle provider options. Aggiornati anche i modelli di default, con Claude 4.7+ che ignora i sampling params.
Laravel 13.35.0: scheduler più controllabile, code più flessibili e response Markdown
Laravel 13.35.0 porta Schedule::alwaysOnOneServer(), il supporto a schedule:interrupt per i comandi di lunga durata, --memory in percentuale per queue:work e il nuovo metodo markdown() sulla response factory. Tante piccole migliorie anche a test, view compilate in parallelo e dischi local.
BashBox: un interprete Bash in sandbox per agenti AI in PHP
BashBox è un interprete bash scritto in puro PHP che permette di eseguire gli script generati dagli agenti AI senza mai ricorrere a proc_open, exec o shell_exec. Ogni comando è una classe PHP che lavora su un filesystem virtuale, con limiti di esecuzione, quote disco e accesso di rete configurabili. Ideale per chi sviluppa agenti con il Laravel AI SDK o altre librerie simili.