Baida07 commited on
Commit
f54e0bf
·
1 Parent(s): 815dc38

sync: 190 file da Baida98/AI@5e779bf0 (2026-08-26 16:26 UTC) [deploy-all] (#120)

Browse files

- sync: 190 file da Baida98/AI@5e779bf0 (2026-08-26 16:26 UTC) [deploy-all] (e5e1ab2b55df8f215e4d2b3390f83d9dc4ae3a47)

Files changed (1) hide show
  1. api/agent.py +18 -0
api/agent.py CHANGED
@@ -1046,6 +1046,24 @@ async def stream_agent_task(task_id: str, request: Request, resume: int = 0, rol
1046
  "Il frontend mostrerà automaticamente un pulsante 'Connetti' all'utente."
1047
  )
1048
  context_str = f"{context_str}\n\n{_connector_hint}".strip() if context_str else _connector_hint
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1049
  # GAP-SYNC-FIX: inject _resume_context (set da stream_agent_task su reconnect con checkpoint)
1050
  # Bug: _resume_context era settato su task{} ma mai letto qui → context perduto su resume.
1051
  _resume_ctx = task.get('_resume_context', '')
 
1046
  "Il frontend mostrerà automaticamente un pulsante 'Connetti' all'utente."
1047
  )
1048
  context_str = f"{context_str}\n\n{_connector_hint}".strip() if context_str else _connector_hint
1049
+ # ARTIFACT-CONTRACT: le richieste di pagina/app richiedono un
1050
+ # artifact reale, non una risposta narrativa. Il frontend committa
1051
+ # solo file_written + vfs_sync_complete, quindi l'agente deve
1052
+ # scrivere e rileggere almeno un file prima di dichiarare successo.
1053
+ _artifact_goal = bool(re.search(
1054
+ r"\b(?:pagina|sito|website|webapp|app|mini[- ]app|ui|interfaccia)\b",
1055
+ task.get('goal', ''), re.IGNORECASE,
1056
+ ))
1057
+ if _artifact_goal:
1058
+ _artifact_hint = (
1059
+ "[CONTRATTO ARTIFACT UI]\n"
1060
+ "Per questa richiesta devi creare davvero i file nel workspace usando write_file "
1061
+ "(non limitarti a proporre codice in chat). Dopo la scrittura, usa read_file o "
1062
+ "un controllo equivalente per verificare il contenuto. Dichiara completamento "
1063
+ "solo se la scrittura è riuscita; in caso contrario segnala l'errore senza inventare "
1064
+ "un link o un'anteprima."
1065
+ )
1066
+ context_str = f"{_artifact_hint}\n\n{context_str}".strip()
1067
  # GAP-SYNC-FIX: inject _resume_context (set da stream_agent_task su reconnect con checkpoint)
1068
  # Bug: _resume_context era settato su task{} ma mai letto qui → context perduto su resume.
1069
  _resume_ctx = task.get('_resume_context', '')