Commit Graph
13 Commits
Author SHA1 Message Date
Matteo Benedetto aa888fe9cc feat(vocale): interpretazione come analista inter-agent in JSON + guida Perplexity
L'interpretazione del prompt vocale ora usa un framing inter-agent: Gemini è un
analista tecnico/middleware che scrive un briefing per l'orchestratore (NON
risponde all'utente), in JSON strutturato.
- Nuovo prompt: ruolo analista, destinatario = solo l'agente orchestratore,
  nessun testo rivolto all'utente, plan-first (nessuna esecuzione).
- Contratto JSON: {trascrizione_corretta, intent_analisi, note_per_agent,
  azioni_raccomandate, prompt_utente_pulito, ricerca_necessaria, suggerimenti_ricerca}.
- extractVoiceBriefing(): estrae prompt_utente_pulito (-> finalText) e se
  ricerca_necessaria=true aggiunge al prompt finale la nota di usare la ricerca
  web (Perplexity) per best practices/versioni/documentazione.
- Testato: parser JSON (valido, con markdown attorno, fallback su testo grezzo).
- docs/vocal-workflow.md aggiornato.
2026-08-11 20:26:59 +02:00
Matteo Benedetto f9a8648c86 fix: stage file esterni in /tmp con nome univoco (niente --add-dir)
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.
2026-08-11 01:00:01 +02:00
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 2137150da3 docs: documentazione MkDocs completa + fix build + verifica OpenCV dinamica
- Aggiunti docs/ (9 pagine MkDocs, tema Material) + mkdocs.yml
- Fix mkdocs.yml: repo_url -> git.enne2.net, tasklist (era taskbuttons),
  fence Mermaid via helper locale mermaid_fence.py (def_fence_mermaid
  rimosso da pymdown-extensions moderne)
- Documentate le nuove funzionalità: agy_create_verified (generazione
  verificata con verifica OpenCV DINAMICA generata dall'LLM), workflow
  vocale a 2 fasi (vocalPlanningMode), chiavi config context/webSearch
- tools.md ora documenta 14 tool; vocal-workflow.md include l'overlay di
  conferma piano; configuration.md include vocalPlanningMode
- .gitignore: esclusi site/ e __pycache__/
- Build MkDocs verificata (site/ generato correttamente)
2026-08-11 00:47:23 +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
Matteo Benedetto c7388dc91d feat: timer registrazione, tasto Esc per annullare e nascondi output ffmpeg 2026-08-10 13:25:18 +02:00