File size: 9,770 Bytes
95eb75a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
// ─── Web & network tools — web_search, read_page, weather, currency, github, fetch, wikipedia, news, translate, npm, stock, browser ───────────────────────────────────────────────────────────
  // P3-4 split da toolDefinitions.ts — DO NOT edit toolDefinitions.ts directly
  // Tools (14): web_search, read_page, get_weather, get_currency, search_github, fetch_url, search_wikipedia, get_news, translate, search_npm, get_stock, clone_url_to_vfs, browser_session_open, browser_session_act

  import type { ChatCompletionTool } from "openai/resources/chat/completions";

  export const WEB_TOOLS: (ChatCompletionTool | undefined)[] = [
      {
      type: "function",
      function: {
        name: "web_search",
        description: "Ricerca web (Brave → Tavily → DDG → HackerNews → StackOverflow). USA SOLO per: notizie di OGGI, eventi live, prezzi/quote in tempo reale, versioni software uscite dopo il 2024. NON USARE MAI per: costanti fisiche (velocità luce, gravità, Planck), matematica, formule, logica, definizioni, storia, geografia, persone famose, fatti stabili che non cambiano — rispondi DIRETTAMENTE da training. REGOLA: se la domanda aveva la stessa risposta 5 anni fa, NON cercare.",
        parameters: { type: "object", properties: { query: { type: "string", description: "Query concisa di massimo 8 parole" }, focus: { type: "string", enum: ["general","technical","code","news"], description: "Opzionale: technical=SO/GitHub, news=notizie recenti" } }, required: ["query"] }
      }
    },
    {
      type: "function",
      function: {
        name: "read_page",
        description: "Leggi il contenuto completo di una pagina web o URL (usa proxy CORS automaticamente). Ottimo per leggere documentazione, articoli, README.",
        parameters: { type: "object", properties: { url: { type: "string", description: "URL completo da leggere" } }, required: ["url"] }
      }
    },
    {
      type: "function",
      function: {
        name: "get_weather",
        description: "Meteo attuale e previsioni 4 giorni (Open-Meteo). Usa solo se l'utente chiede esplicitamente meteo/previsioni di una citta' specifica.",
        parameters: { type: "object", properties: { city: { type: "string", description: "Nome città (es. 'Milano', 'New York')" } }, required: ["city"] }
      }
    },
    {
      type: "function",
      function: {
        name: "get_currency",
        description: "Tasso di cambio e conversione valute in tempo reale (exchangerate-api, nessuna API key).",
        parameters: { type: "object", properties: { from: { type: "string", description: "Valuta sorgente (es. EUR)" }, to: { type: "string", description: "Valuta destinazione (es. USD)" }, amount: { type: "number", description: "Importo da convertire (default 1)" } }, required: ["from","to"] }
      }
    },
    {
      type: "function",
      function: {
        name: "search_github",
        description: "Cerca repository GitHub per linguaggio, topic o keyword. Restituisce nome, descrizione, stelle, URL.",
        parameters: { type: "object", properties: { query: { type: "string", description: "Query di ricerca (es. 'react state management')" }, lang: { type: "string", description: "Linguaggio di programmazione (opzionale)" } }, required: ["query"] }
      }
    },
    {
      type: "function",
      function: {
        name: "fetch_url",
        description: "Fetch HTTP di qualsiasi URL o API pubblica (con fallback CORS proxy automatico). Usa per API REST, webhook, dati JSON.",
        parameters: { type: "object", properties: { url: { type: "string", description: "URL da chiamare" }, method: { type: "string", enum: ["GET","POST","PUT","DELETE","PATCH"], description: "Metodo HTTP (default GET)" }, body: { type: "string", description: "Body JSON per POST/PUT" } }, required: ["url"] }
      }
    },
    {
      type: "function",
      function: {
        name: "search_wikipedia",
        description: "Articolo Wikipedia. Usa solo se servono dati enciclopedici precisi (date esatte, numeri, biografia dettagliata) che potresti confondere a memoria.",
        parameters: { type: "object", properties: { query: { type: "string", description: "Termine di ricerca" } }, required: ["query"] }
      }
    },
    {
      type: "function",
      function: {
        name: "get_news",
        description: "Ultime notizie italiane in tempo reale da ANSA, Corriere, Sole24Ore. Usa per eventi recenti, notizie del giorno.",
        parameters: { type: "object", properties: { query: { type: "string", description: "Argomento di interesse (opzionale)" } } }
      }
    },
    {
      type: "function",
      function: {
        name: "translate",
        description: "Traduci testo in qualsiasi lingua via MyMemory (gratis). Usa per traduzioni singole o di paragrafi.",
        parameters: {
          type: "object",
          properties: {
            text: { type: "string", description: "Testo da tradurre (max 500 chars)" },
            to:   { type: "string", description: "Codice lingua destinazione (es. en, it, fr, de, es, pt, ja, zh, ar, ru, ko)" },
            from: { type: "string", description: "Codice lingua sorgente (default: auto-detect)" }
          },
          required: ["text", "to"]
        }
      }
    },
    {
      type: "function",
      function: {
        name: "search_npm",
        description: "Cerca pacchetti nel registro npm. Usa per trovare librerie JavaScript/TypeScript, confrontare alternative, verificare versioni.",
        parameters: { type: "object", properties: { query: { type: "string", description: "Termine di ricerca (es. 'state management react', 'csv parser')" } }, required: ["query"] }
      }
    },
    {
      type: "function",
      function: {
        name: "get_stock",
        description: "Quotazione borsa in tempo reale via Yahoo Finance (gratis). Prezzo attuale, variazione, ultime 5 sedute.",
        parameters: { type: "object", properties: { symbol: { type: "string", description: "Simbolo ticker (es. AAPL, TSLA, MSFT, NVDA, BTC-EUR, ETH-EUR, ENI.MI, UCG.MI)" } }, required: ["symbol"] }
      }
    },
    {
      type: "function",
      function: {
        name: "clone_url_to_vfs",
        description: "Scarica qualsiasi file/risorsa da un URL e lo salva nel VFS. Supporta testo, JSON, immagini, binari. Usa CORS proxy automaticamente.",
        parameters: { type: "object", properties: { url: { type: "string", description: "URL da scaricare" }, save_path: { type: "string", description: "Percorso di destinazione nel VFS (es. /downloads/data.json)" }, format: { type: "string", enum: ["auto","text","binary"], description: "Formato: auto (default), text (forza testo), binary (forza base64)" } }, required: ["url","save_path"] }
      }
    },
  {
    type: "function",
    function: {
      name: "browser_session_open",
      description: "Apre una sessione browser Playwright con stato persistente (cookie, localStorage, autenticazione). La sessione rimane aperta per azioni sequenziali. Usa quando devi navigare siti con login o scraping multi-step.",
      parameters: {
        type: "object",
        properties: {
          url:        { type: "string",  description: "URL iniziale da aprire" },
          session_id: { type: "string",  description: "ID sessione (default: auto-generato — usalo in browser_session_act)" },
          headless:   { type: "boolean", description: "Modalità headless (default: true)" },
          viewport:   { type: "object",  description: "Dimensioni viewport {width, height} (default: 1280x720)" },
        },
        required: ["url"],
      },
    },
  },
  {
    type: "function",
    function: {
      name: "browser_session_act",
      description: "Esegue un'azione in una sessione Playwright aperta con browser_session_open. Azioni: click, type, navigate, screenshot, get_text, select, hover, wait, scroll, evaluate.",
      parameters: {
        type: "object",
        properties: {
          session_id: { type: "string", description: "ID sessione da browser_session_open" },
          action:     { type: "string", enum: ["click","type","navigate","screenshot","get_text","select","hover","wait","scroll","evaluate"], description: "Azione da eseguire" },
          selector:   { type: "string", description: "Selettore CSS o XPath dell'elemento target" },
          value:      { type: "string", description: "Valore per type/select/navigate/evaluate" },
          timeout:    { type: "number", description: "Timeout ms (default: 5000)" },
        },
        required: ["session_id", "action"],
      },
    },
  },
  {
    type: "function",
    function: {
      name: "deep_research",
      description: "Ricerca multi-round approfondita su argomenti complessi (ARL). " +
        "USA per: analisi comparative, report multi-fonte, argomenti tecnici che richiedono " +
        "confronto tra più fonti, ricerche dove web_search singolo è insufficiente. " +
        "Esegue fino a 3 round con raffinamento automatico della query (zero LLM aggiuntivo) " +
        "e navigazione dei link rilevanti. Budget fisso: ≤12 fetch · timeout 22s · safe su iPhone. " +
        "NON usare per domande rapide — usa web_search per query semplici.",
      parameters: {
        type: "object",
        properties: {
          goal: {
            type: "string",
            description: "Obiettivo di ricerca in linguaggio naturale, preciso e dettagliato " +
              "(es. 'Analisi delle prestazioni dei principali LLM open-source nel 2025: " +
              "benchmark, costi, limitazioni free tier')"
          }
        },
        required: ["goal"]
      }
    }
  },

  ];