Commit Graph

30 Commits

Author SHA1 Message Date
Matteo Benedetto 7fa1f028d9 fix: workaround accesso agy a file esterni al workspace
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.
2026-08-11 00:54:14 +02:00
Matteo Benedetto a81000912a feat: verifica OpenCV DINAMICA — script generato dall'LLM per ogni requisito
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)
2026-08-11 00:30:56 +02:00
Matteo Benedetto b2f3cbafb6 feat: agy_create_verified — generazione immagine iterativa con verifica
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.
2026-08-11 00:24:13 +02:00
Matteo Benedetto db36e78555 feat(Opzione4): workflow vocale a 2 fasi con overlay TUI + vocalPlanningMode
- 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.
2026-08-11 00:08:09 +02:00
Matteo Benedetto d357bc58f5 feat: combina il testo del campo editor con la trascrizione audio (F12)
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.
2026-08-10 16:27:40 +02:00
Matteo Benedetto 2cf9079ac8 feat(Fase2): euristica webSearch=auto rifinita — filtri, trigger e anti-ridondanza
- webSearch=auto: euristica robusta con filtri negativi (immagini, analisi
  locale, task di codice, comandi) e trigger positivi (recency, versioni,
  confronti, definizioni, news).
- webSearch non si attiva per mode image/analyze.
- Cache anti-ridondanza: evita ricerche ripetute dello stesso topic entro 60s.
- Test: 10/10 casi passano.
2026-08-10 15:31:19 +02:00
Matteo Benedetto 854b3d8a47 feat(Fase2): context injection pi→agy — environment, session_state, durable_memory, web_context
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.
2026-08-10 15:21:21 +02:00
Matteo Benedetto 28b2cceefa feat: /agy:status — diagnostica estensione in overlay TUI
- 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.
2026-08-10 15:01:34 +02:00
Matteo Benedetto f7cc237294 feat: /agy:key — dialog overlay TUI mascherato per la chiave API Gemini
- 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.
2026-08-10 14:37:07 +02:00
dev 9878689cfa Effetti sonori sci-fi: sweep, modulazione, beacon e arpeggi via aevalsrc 2026-08-10 13:33:23 +02:00
dev 25395f4713 Feedback sonori (bip): avvio, stop, annullamento, timeout, completamento 2026-08-10 13:29:38 +02:00
Matteo Benedetto c7388dc91d feat: timer registrazione, tasto Esc per annullare e nascondi output ffmpeg 2026-08-10 13:25:18 +02:00
dev f0f1719a65 Gemini STT: compressione audio in Opus/OGG (audio/ogg) -60% payload vs MP3 2026-08-10 13:14:48 +02:00
dev 2dca098481 Backend enne2: compressione MP3 per evitare HTTP 413 + sttBackend default gemini 2026-08-10 13:10:48 +02:00
dev cb726a498e Rilevamento silenzio (evita allucinazioni su audio vuoto) + gestione risposte vuote/malformate 2026-08-10 13:04:27 +02:00
dev c2924fee63 Gestione errori trascrizione esplicita: timeout 120s, retry su 429/500, report errori reali 2026-08-10 00:57:35 +02:00
dev 4d0ecdc7e9 Fix HTTP 413: compressione MP3 prima dell'invio alla Gemini API + max_tokens 2000 per enne2 2026-08-09 23:53:34 +02:00
dev 5c0dea538d Fix crash: onUpdate deve passare un oggetto con content, non una stringa 2026-08-09 23:28:41 +02:00
dev 1c1a175512 Comando /agy:vocal per toggle feedback vocale + template aggiornato 2026-08-09 23:20:22 +02:00
dev f36194afa1 Sistema di configurazione persistente: /agy:config con get/set/reset, 12 opzioni configurabili 2026-08-09 23:01:15 +02:00
dev 507d186d3b Backend trascrizione alternativo: server locale ai.enne2.net (gemma4:E4B) via AGY_STT_BACKEND 2026-08-09 22:56:55 +02:00
dev 8eece4506a Aggiunto TTS via Gemini API: tool agy_tts, comando /agy:speak, notifiche vocali nel flusso F12 2026-08-09 22:43:19 +02:00
dev a575fb6ca6 Fix: yolo nella chiamata di interpretazione (permesso read_file negato in headless) 2026-08-09 22:36:07 +02:00
dev c27f499b67 Fix: rimosso --effort dalla chiamata di interpretazione (non supportato dal modello Flash) 2026-08-09 22:32:37 +02:00
dev 910263d7d7 Trascrizione audio via Gemini API diretta (gemini-3.5-flash): veloce e affidabile 2026-08-09 22:27:19 +02:00
dev 674819f843 Fix: aggiunto yolo ai tool di editing immagini (evita hang in headless) 2026-08-09 22:20:53 +02:00
dev 971212aa6c Fix output vuoto: usa --output-format json per catturare la risposta quando piped (bug #76) 2026-08-09 21:04:15 +02:00
dev ef7071cea5 Aggiunta registrazione microfono (F12) con trascrizione Gemini e inserimento come prompt su pi 2026-08-09 20:43:39 +02:00
dev 491f67b99f Aggiunti 10 tool specializzati: generate, edit, inpaint, style_transfer, compose, character, analyze, transcribe, video, models 2026-08-09 20:07:01 +02:00
dev f12199fd2e agy-pi: estensione pi per Antigravity CLI (agy) subagent multimodale 2026-08-09 19:57:02 +02:00