Su richiesta: invece di copiare i file esterni in ~/.agy-scratch con --add-dir,
ora vengono copiati in /tmp (cartella nativamente accessibile da agy, verificato)
con nome univoco casuale (agy_stage_<timestamp>_<random><ext>) per evitare
sovrascritture. Rimosso --add-dir in executeAgy: /tmp è già accessibile.
Testato: file /tmp analizzato da agy senza --add-dir.
Quando un file da analizzare è FUORI dalla cartella di lavoro corrente, agy può
fallire a leggerlo per mancanza di competenze/permessi sul workspace. Workaround:
- stageExternalFiles(): copia automaticamente i file esterni in ~/.agy-scratch/
e riscrive i riferimenti del prompt con il nuovo percorso accessibile.
- executeAgy: applica lo staging prima di costruire gli argomenti, aggiunge
~/.agy-scratch via --add-dir.
- I file già sotto la cwd non vengono toccati (nessun overhead).
- Testato: immagine in /tmp copiata in scratch e analizzata correttamente da agy.
La verifica OpenCV in agy_create_verified non è più hardcodata: l'LLM genera a
runtime uno script Python/OpenCV specifico per i requisiti dell'immagine.
- geminiText: chiamata Gemini generica (solo testo, no tool)
- generateOpenCVScript: genera lo script OpenCV ad hoc dai requisiti
- runOpenCVScript: esegue lo script e restituisce il JSON su stdout
- Contratto JSON: {pass, score, findings, errors}
- Il tool genera lo script UNA volta (i requisiti sono fissi) e lo riusa nel loop
- La decisione di conformità combina visione PASS + OpenCV PASS; se OpenCV rileva
non conformità, le aggiunge alle issue per guidare la rigenerazione
- Testato: script generato per 'quadrato rosso' ha rilevato correttamente
forma/4 vertici/simmetria/riempimento/sfondo bianco (pass=true, score=1.0)
Loop self-contained per la generazione di immagini conformi a requisiti:
1. Genera immagine con agy (mode image)
2. Analizza con visione testuale (giudice PASS/FAIL vs requisiti)
3. Verifica oggettiva con script Python/OpenCV (dimensioni, aspect ratio,
luminosità, densità bordi, colori dominanti)
4. Rigenera con prompt di correzione (ri-attaccando l'immagine base) se FAIL
Ripete fino al soddisfacimento o al limite maxIterations (default 3, max 5).
Restituisce immagine finale + report di verifica (verdetto + metriche per
iterazione). Ideale quando l'orchestratore pi non ha visione.
Aggiunto helper runOpenCV. README aggiornato.
- Dopo la trascrizione F12, agy genera un PIANO (direttiva plan-first: 'produci
solo il piano, NON eseguire nulla, attendi conferma') invece di avviare un
loop agentico autonomo.
- Con vocalPlanningMode=true (default) un overlay TUI (ctx.ui.custom) mostra
trascrizione + piano proposto e attende la conferma dell'utente:
Enter esegui | Esc annulla | E modifica | F12 registra di nuovo
- E entra in modalità modifica del testo del piano; F12 ri-avvia la registrazione.
- vocalPlanningMode=false ripristina l'esecuzione diretta (autonomia piena).
- Nuova chiave config vocalPlanningMode (bool).
- README aggiornato.
Quando l'utente scrive testo nel campo input prima di avviare la registrazione,
il flusso /agy:record ora legge il testo via ctx.ui.getEditorText() e lo include
nel prompt di interpretazione inviato a Gemini, insieme alla trascrizione audio.
Il testo viene svuotato dopo (setEditorText('')) per evitare reinvii duplicati.
Nessun testo nel campo = comportamento invariato.
Best practice context engineering (Lost in the Middle, TACL 2024; tag XML Gemini):
- Tool agy inietta automaticamente un blocco di contesto prima della richiesta
utente (che resta SEMPRE per ultima, anti lost-in-the-middle).
- <environment_snapshot>: cwd, OS, data/ora, git branch + file modificati.
- <session_state>: ultimi messaggi utente pi compatti (non il transcript grezzo).
- <durable_memory>: archivio memory.json auto-aggiornato oltre una soglia di turni.
- <web_context>: ricerca web Strada A via Gemini API (googleSearch grounding)
con webSearch=auto|on.
- Token cap ~1500 (contextTokens), configurabile.
- Nuovi parametri tool agy: injectContext (default true), webSearch (override).
- Nuove chiavi config: contextInject, contextTokens, webSearch.
- README aggiornato.
- Overlay TUI (ctx.ui.custom) che mostra: binario agy + versione, chiave
Gemini (valida/mancante, mascherata), modello attivo, backend STT,
notifiche TTS e ultimo errore significativo dal log di agy.
- Parsing log migliorato: filtra il rumore di glog e cattura errori reali
(permission denied, quota, 404, timeout).
- Chiusura con Enter o Esc. README aggiornato.
- Comando /agy:key che apre un overlay TUI (ctx.ui.custom overlay) con campo
mascherato per inserire la chiave API Gemini senza digitarla in chiaro.
- Enter conferma: salva in config.json e ~/.agy-chat/gemini-key + suona chime.
- Esc annulla, Backspace cancella, filtra caratteri consentiti per chiave API.
- Import dinamico dei componenti pi-tui (Container, Text, DynamicBorder) per non
rompere il load dell'estensione se pi-tui non fosse disponibile.
- Aggiunto tsconfig.json per il typecheck con mapping ai moduli pi.
- README: documentato il nuovo comando.