Commit Graph
48 Commits
Author SHA1 Message Date
enne2 4a88084b2b refactor: remove direct Gemini API integrations
Route F12 and audio transcription exclusively through Antigravity OAuth, and preserve cross-model history without reusing incompatible signatures.\n\nRemove direct Gemini API keys, web grounding, internal TTS, verified image generation, obsolete commands and configuration. Update documentation and restore the local voice workflow helpers required at runtime.
2026-09-03 12:52:13 +02:00
enne2 cde5aaa9b7 feat: add verified image programmatic edits 2026-08-28 18:51:37 +02:00
Matteo Benedetto ace461ff59 feat: abilita di default la pipeline multimodale diretta Gemini per l'audio indipendentemente dal modello attivo in sessione 2026-08-21 21:51:57 +02:00
Matteo Benedetto 49e6269626 feat: pipeline multimodale diretta per F12 con modelli Gemini 2026-08-21 18:24:34 +02:00
Matteo Benedetto c9290e9329 fix(provider): robust validation of Gemini thought_signature rejecting reasoning_content and ASCII strings 2026-08-21 17:14:33 +02:00
Matteo Benedetto 99a7ff4b1a fix(provider): validate Base64 thought signatures and strip foreign reasoning JSON (DeepSeek/OpenAI) 2026-08-21 17:10:49 +02:00
Matteo Benedetto d42fa69e1a fix(provider): handle Gemini thought_signature in multi-turn tool calling and cross-model history 2026-08-21 17:06:40 +02:00
Matteo Benedetto e3362606fd Fix keybinding annulla registrazione: ctrl+escape → ctrl+alt+c (in legacy ctrl+escape invia lo stesso byte di Esc, non distinguibile) 2026-08-13 16:41:25 +02:00
Matteo Benedetto e1acad4a27 fix: rimappa shortcut annulla registrazione da Esc a Ctrl+Esc
Esc è riservato alla built-in app.interrupt di pi: la shortcut veniva
scartata con warning 'conflicts with built-in shortcut'. Rimossa anche
la registrazione ridondante 'esc' (stesso tasto fisico). Aggiornati
messaggi di stato e documentazione.
2026-08-11 22:33:07 +02:00
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
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 0807660212 Template AGENTS.md per feedback vocale a ogni step 2026-08-09 23:06:35 +02:00
dev 139124a76f README: documentato /agy:config 2026-08-09 23:02:54 +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 a1edd73079 README: documentato backend trascrizione enne2 2026-08-09 22:58:05 +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 f48e1c2f67 README: documentata registrazione F12 con Gemini API 2026-08-09 22:28:47 +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 ef499126df Aggiunto logo e aggiornato README 2026-08-09 20:14:41 +02:00
dev 909651924e Aggiornato README con elenco tool 2026-08-09 20:07:10 +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