Architettura - diShine-digital-agency/ai-prompt-library GitHub Wiki

Architettura

Architettura tecnica, riferimento dei moduli, formati dei dati e struttura del progetto della AI Prompt Library.


Indice


Panoramica dell'Architettura

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   Interfaccia Utente                      β”‚
β”‚                                                         β”‚
β”‚   CLI (bin/prompt-lib.js)    HTML (viewer.html)          β”‚
β”‚   β”œβ”€β”€ list, search, show     β”œβ”€β”€ Scheda Sfoglia          β”‚
β”‚   β”œβ”€β”€ use, copy              β”œβ”€β”€ Scheda Compose           β”‚
β”‚   β”œβ”€β”€ compose                β”œβ”€β”€ Scheda Create            β”‚
β”‚   β”œβ”€β”€ create                 β”œβ”€β”€ Scheda Generate          β”‚
β”‚   β”œβ”€β”€ generate               β”œβ”€β”€ Scheda Strumenti         β”‚
β”‚   β”œβ”€β”€ lint                   β”‚   β”œβ”€β”€ Linter              β”‚
β”‚   β”œβ”€β”€ optimize               β”‚   β”œβ”€β”€ Optimizer           β”‚
β”‚   β”œβ”€β”€ recommend              β”‚   └── Recommender         β”‚
β”‚   β”œβ”€β”€ saved                  β”œβ”€β”€ Scheda Playground        β”‚
β”‚   └── viewer                 └── Scheda La Mia Libreria   β”‚
β”‚                                                         β”‚
β”‚   App desktop (desktop/)                                 β”‚
β”‚   β”œβ”€β”€ macOS nativo (Swift + WebKit)                      β”‚
β”‚   β”œβ”€β”€ Linux nativo (Python + GTK + WebKitGTK)            β”‚
β”‚   └── Windows (modalitΓ  app Edge/Chrome)                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                    Moduli Principali                      β”‚
β”‚                                                         β”‚
β”‚   src/index.js     β€” Caricatore di prompt, persistenza    β”‚
β”‚   src/search.js    β€” Algoritmo di ricerca con punteggio  β”‚
β”‚   src/formatter.js β€” Formattazione ANSI per il terminale β”‚
β”‚   src/generator.js β€” Generazione dinamica di prompt      β”‚
β”‚   src/linter.js    β€” Valutatore di qualitΓ  a 14 regole   β”‚
β”‚   src/optimizer.js β€” Ottimizzatore consapevole del cont. β”‚
β”‚   src/recommender.js β€” Matcher di prompt basato su intentoβ”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                    Livello Dati                           β”‚
β”‚                                                         β”‚
β”‚   prompts/**/*.md           β€” File di prompt integrati    β”‚
β”‚   ~/.prompt-library/        β€” Directory dati utente       β”‚
β”‚     custom-prompts.json     β€” Prompt creati dall'utente   β”‚
β”‚     saved-prompts.json      β€” Composizioni salvate        β”‚
β”‚   localStorage (browser)    β€” Persistenza app HTML        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Riferimento Moduli

src/index.js β€” Caricatore di Prompt e Persistenza

Il modulo principale che carica i prompt dal filesystem e gestisce i dati utente.

Esportazioni:

Funzione Firma Descrizione
loadPrompts() () β†’ Array<Prompt> Carica tutti i prompt dalla directory prompts/ + prompt personalizzati da ~/.prompt-library/custom-prompts.json
loadCustomPrompts() () β†’ Array<Prompt> Carica solo i prompt personalizzati creati dall'utente
saveCustomPrompt(prompt) (Prompt) β†’ Prompt Salva un prompt personalizzato. Sovrascrive se lo slug esiste, altrimenti aggiunge
loadSavedCompositions() () β†’ Array<Composition> Carica le composizioni salvate da ~/.prompt-library/saved-prompts.json
saveComposition(composition) (Object) β†’ Composition Aggiunge una composizione con id auto-generato (timestamp) e date (stringa ISO)
findPlaceholders(text) (string) β†’ Array<string> Estrae i token {{segnaposto}} univoci dal testo usando la regex /\{\{[\w_\-\s/]+\}\}/g
extractTemplate(content) (string) β†’ string|null Estrae il contenuto tra i delimitatori di codice nella sezione ## Template

Costanti Esportate:

Nome Valore Descrizione
PROMPTS_DIR <project>/prompts/ Percorso assoluto ai prompt integrati
USER_DATA_DIR ~/.prompt-library/ Directory dati utente
USER_PROMPTS_FILE ~/.prompt-library/custom-prompts.json File prompt personalizzati
USER_SAVED_FILE ~/.prompt-library/saved-prompts.json File composizioni salvate

Funzioni Interne:

  • parseFrontmatter(content) β€” analizza il frontmatter YAML (tra marcatori ---) in un oggetto {meta, body}. Gestisce array con parentesi ([tag1, tag2]).
  • walkDir(dir) β€” trova ricorsivamente tutti i file .md in un albero di directory.
  • ensureUserDir() β€” crea ~/.prompt-library/ se non esiste.

src/search.js β€” Algoritmo di Ricerca

Esportazioni:

Funzione Firma Descrizione
searchPrompts(prompts, query) (Array, string) β†’ Array Assegna un punteggio e ordina i prompt per pertinenza alla query

Punteggio:

Posizione della Corrispondenza Punti per Termine
Titolo 100
Tag 50
Categoria 30
Contenuto 10

Algoritmo:

  1. Suddivide la query in termini minuscoli
  2. Per ogni prompt, assegna un punteggio a ogni termine rispetto a titolo, tag, categoria e contenuto
  3. Somma tutti i punti
  4. Filtra i prompt con punteggio zero
  5. Ordina per punteggio decrescente

src/formatter.js β€” Formattazione Terminale

Fornisce formattazione con colori ANSI per l'output della CLI. Rispetta la variabile d'ambiente NO_COLOR (quando impostata, tutti i codici colore sono stringhe vuote).

Esportazioni:

Funzione Descrizione
formatPromptList(prompts) Formatta tutti i prompt raggruppati per categoria
formatPromptDetail(prompt) Formatta un singolo prompt con tutti i metadati
formatCategories(prompts) Formatta l'elenco delle categorie con i conteggi
formatStats(prompts) Formatta le statistiche della libreria (totali, distribuzione difficoltΓ , tag principali)
formatSearchResults(results, query) Formatta i risultati di ricerca con i punteggi

Schema dei colori:

  • Ciano: titoli, slug, intestazioni di sezione
  • Magenta: nomi delle categorie
  • Giallo: etichette dei metadati, difficoltΓ  intermedia
  • Verde: difficoltΓ  principiante, tag
  • Rosso: difficoltΓ  avanzata
  • Grigio tenue: separatori, informazioni secondarie

src/generator.js β€” Generazione Dinamica di Prompt

Esportazioni:

Funzione Firma Descrizione
getFrameworks() () β†’ Array<FrameworkInfo> Restituisce tutti i framework con metadati e domande
getFramework(key) (string) β†’ Framework|null Restituisce un singolo framework per chiave
generatePrompt(key, answers) (string, Object) β†’ string Genera un prompt completo. Valida i campi obbligatori e applica i valori predefiniti.

Framework Disponibili:

Chiave Nome Domande
expert-role Expert Role-Based 8
chain-of-thought Chain-of-Thought 5
structured-output Structured Output 5
task-decomposition Task Decomposition 4
guardrails Guardrails & Safety 6

Ogni framework definisce una funzione generate(answers) che produce la stringa finale del prompt dalle risposte dell'utente.


src/linter.js β€” Valutatore di QualitΓ  dei Prompt

Esportazioni:

Funzione Firma Descrizione
lintPrompt(text) (string) β†’ LintResult Analizza il prompt rispetto a 14 regole. Restituisce punteggio, voto, regole superate/non superate, suggerimenti, conteggio parole
formatLintResult(result) (LintResult) β†’ string Formatta il risultato dell'analisi come stringa leggibile
LINT_RULES Array<Rule> Array di tutti i 14 oggetti regola

Struttura LintResult:

{
  score: 72,              // 0-100
  grade: 'C',             // A, B, C, D, F
  totalRules: 14,
  passedCount: 10,
  failedCount: 4,
  passed: [...],           // Array of passed rules
  failed: [...],           // Array of failed rules
  suggestions: [...],      // Array of suggestion strings (sorted by weight)
  wordCount: 89
}

Punteggio: score = Math.round((earnedWeight / totalWeight) Γ— 100) dove totalWeight = 100.

Consulta Strumenti: Linter, Optimizer, Recommender per l'elenco completo delle regole.


src/optimizer.js β€” Ottimizzatore di Prompt Consapevole del Contenuto

Esportazioni:

Funzione Firma Descrizione
optimizePrompt(text) (string) β†’ OptimizeResult Ottimizzazione offline basata su regole
optimizeWithAI(text, provider, apiKey, model) (string, string, string, string?) β†’ Promise<string> Riscrittura tramite IA
sendToAI(prompt, systemPrompt, provider, apiKey, model) (string, string?, string, string, string?) β†’ Promise<AIResponse> Invio prompt al modello AI (Playground)

Struttura OptimizeResult:

{
  original: "...",         // Original prompt text
  optimized: "...",        // Optimized prompt text
  changes: [...],          // Array of change descriptions
  scoreBefore: 35,
  scoreAfter: 88,
  improvement: 53,
  lint: { ... },           // Full lint result of optimized prompt
  domain: "coding",        // Detected domain
  audience: "developers"   // Detected audience (or null)
}

Pipeline di ottimizzazione: rilevamento dominio β†’ rimozione riempitivo β†’ riduzione cortesia β†’ rafforzamento verbi deboli β†’ sostituzione linguaggio vago β†’ decomposizione compiti composti β†’ inserimento ruolo β†’ rilevamento pubblico/tono β†’ vincoli β†’ formato output β†’ esempi β†’ controllo qualitΓ .

7 Domini Rilevati: programmazione, scrittura, marketing, dati, business, formazione, immagini.


src/recommender.js β€” Matcher di Prompt Basato sull'Intento

Esportazioni:

Funzione Firma Descrizione
recommendPrompts(prompts, description) (Array, string) β†’ Array Assegna un punteggio a tutti i prompt per pertinenza
buildRecommendation(prompts, description) (Array, string) β†’ Recommendation Costruisce una raccomandazione completa con combinazione

Struttura Recommendation:

{
  description: "...",
  topPrompts: [...],          // Top 8 matches
  suggestedCombo: {
    systemPrompt: { ... },    // Best matching system prompt
    framework: { ... },       // Best matching framework
    template: { ... }         // Best matching domain template
  },
  systemPrompts: [...],       // Top 3 system prompts
  frameworks: [...],          // Top 3 frameworks
  templates: [...]            // Top 5 templates
}

8 Categorie di Intento: programmazione, scrittura, marketing, dati, business, immagini, ricerca, didattica.


Formati dei Dati

Oggetto Prompt

{
  "slug": "code-review",
  "title": "Code Review Checklist",
  "category": "development",
  "tags": ["code-review", "quality", "checklist"],
  "difficulty": "intermediate",
  "models": ["claude", "gpt-4", "gemini"],
  "content": "# Code Review Checklist\n\n## Template\n\n```\n...\n```",
  "path": "development/code-review.md"
}

I prompt personalizzati aggiungono:

{
  "fields": [
    { "name": "language", "description": "Programming language" }
  ],
  "custom": true
}

Composizione Salvata

{
  "id": 1712430000000,
  "title": "Composed: Coding Assistant + Chain-of-Thought + Code Review",
  "result": "# SYSTEM PROMPT\n\n...\n\n# REASONING FRAMEWORK\n\n...",
  "layers": ["Coding Assistant", "Chain-of-Thought", "Code Review"],
  "type": "composed",
  "date": "2026-04-06T12:00:00.000Z"
}

Formato dei File Prompt (Frontmatter YAML)

---
title: My Prompt Title
category: frameworks
tags: [tag1, tag2, tag3]
difficulty: intermediate
models: [claude, gpt-4, gemini]
---

# My Prompt Title

## When to Use
[description]

## Template

\```
Your prompt template with {{placeholders}} here
\```

## Tips
[expert tips]

## Common Mistakes
[pitfalls to avoid]

Chiavi localStorage

Queste chiavi sono usate dal Prompt Workshop (viewer.html):

Chiave Tipo Descrizione
pl_dark boolean Preferenza modalitΓ  scura (true/false)
pl_saved JSON array Tutti i prompt salvati, template compilati, prompt composti, prompt personalizzati. Gli elementi dal database sono contrassegnati con source: 'database'
pl_sidebar_width number Larghezza barra laterale in pixel (260–600). Persiste tra le sessioni
api_settings JSON object Chiavi API e preferenze modello per Playground e AI Optimizer. Contiene provider, chiavi per OpenAI/Anthropic/Google e modelli selezionati
pg_prefill string Dati temporanei di pre-compilazione del playground. Cancellati dopo l'uso

Aggiornamenti Architettura v2.4.0

  • Linter β€” rilevamento del tipo di prompt (immagine/codice/sistema/generale) con pesi delle regole adeguati β€” vedi INFRASTRUCTURE.md
  • Optimizer β€” motore diff per confronto colorato prima/dopo
  • Playground β€” confronto multi-modello tramite Promise.allSettled() con timeout 30s AbortController
  • Create β€” 6 template iniziali che pre-compilano titolo, tag, corpo e campi dinamici
  • La Mia Libreria β€” ricerca, filtro per tipo, ordinamento
  • AccessibilitΓ  β€” ARIA landmarks, role="tablist", link salta al contenuto, focus-visible, navigazione tra schede con frecce

Struttura dei File del Progetto

ai-prompt-library/
β”œβ”€β”€ bin/
β”‚   └── prompt-lib.js            # Punto di ingresso CLI (ESM, #!/usr/bin/env node)
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ index.js                 # Caricatore prompt, persistenza, segnaposto
β”‚   β”œβ”€β”€ search.js                # Algoritmo di ricerca con punteggio
β”‚   β”œβ”€β”€ formatter.js             # Formattazione ANSI per il terminale
β”‚   β”œβ”€β”€ generator.js             # 5 framework, generazione dinamica prompt
β”‚   β”œβ”€β”€ linter.js                # Valutatore di qualitΓ  a 14 regole
β”‚   β”œβ”€β”€ optimizer.js             # Ottimizzatore consapevole del contenuto + API AI
β”‚   └── recommender.js           # Matcher di prompt basato sull'intento
β”œβ”€β”€ prompts/
β”‚   β”œβ”€β”€ business/                # 12 template business
β”‚   β”œβ”€β”€ data/                    # 10 template analisi dati
β”‚   β”œβ”€β”€ development/             # 13 template sviluppo
β”‚   β”œβ”€β”€ frameworks/              # 12 guide framework di prompting
β”‚   β”œβ”€β”€ image-generation/        # 8 template generazione immagini
β”‚   β”œβ”€β”€ marketing/               # 11 template marketing
β”‚   β”œβ”€β”€ model-specific/          # 6 guide specifiche per modello
β”‚   └── system-prompts/          # 10 prompt di sistema
β”œβ”€β”€ desktop/
β”‚   β”œβ”€β”€ build-all.sh             # Compilazione tutte le piattaforme
β”‚   β”œβ”€β”€ build-macos.sh           # Script compilazione macOS
β”‚   β”œβ”€β”€ build-linux.sh           # Script compilazione Linux
β”‚   β”œβ”€β”€ build-windows.bat        # Script compilazione Windows
β”‚   β”œβ”€β”€ macos-native/            # Sorgente Swift per app nativa macOS
β”‚   β”œβ”€β”€ linux-native/            # Sorgente Python + GTK per app nativa Linux
β”‚   β”œβ”€β”€ icons/                   # Icone app per tutte le piattaforme
β”‚   └── images/                  # Screenshot e immagini documentazione
β”œβ”€β”€ test/
β”‚   └── run.js                   # Suite di test (46 test, zero dipendenze)
β”œβ”€β”€ wiki/
β”‚   β”œβ”€β”€ en/                      # Pagine wiki in inglese
β”‚   β”œβ”€β”€ fr/                      # Pagine wiki in francese
β”‚   └── it/                      # Pagine wiki in italiano
β”œβ”€β”€ viewer.html                  # Prompt Workshop (SPA autonoma)
β”œβ”€β”€ package.json                 # Configurazione pacchetto (zero dipendenze)
β”œβ”€β”€ README.md                    # Panoramica del progetto
β”œβ”€β”€ GUIDE.md                     # Guida utente
β”œβ”€β”€ TECHNICAL.md                 # Documentazione tecnica
β”œβ”€β”€ FUNCTIONS.md                 # Riferimento funzioni
β”œβ”€β”€ CONTRIBUTING.md              # Linee guida per contribuire
β”œβ”€β”€ CHANGELOG.md                 # Cronologia versioni
β”œβ”€β”€ CODE_OF_CONDUCT.md           # Codice di condotta
β”œβ”€β”€ SECURITY.md                  # Politica di sicurezza
└── LICENSE                      # Licenza MIT

Moduli Integrati di Node.js Utilizzati

Il progetto usa zero dipendenze npm. Solo moduli integrati di Node.js:

Modulo Utilizzo
fs Lettura file (readFileSync), scrittura (writeFileSync), attraversamento directory (readdirSync, statSync), controllo esistenza (existsSync), creazione directory (mkdirSync)
path Manipolazione percorsi (join, dirname, relative, basename)
url fileURLToPath per __dirname compatibile con ESM
readline Input interattivo CLI (domande e inserimento prompt multi-riga)
child_process Copia negli appunti tramite execSync (pbcopy, clip, xclip, xsel), apertura browser (open, xdg-open, start)
os Directory home (homedir), directory temporanea (tmpdir)

Come Funziona viewer.html

Il file viewer.html Γ¨ un'applicazione a pagina singola autonoma:

  1. Nessuna dipendenza esterna β€” puro HTML, CSS e JavaScript vanilla in un singolo file
  2. Dati prompt incorporati β€” tutti gli 82+ prompt sono serializzati come JSON in un tag <script>
  3. localStorage per la persistenza β€” prompt personalizzati, composizioni salvate, preferiti, chiavi API e preferenze dell'interfaccia
  4. Design responsivo β€” funziona su desktop, tablet e mobile
  5. ModalitΓ  scura/chiara β€” commutabile con preferenza salvata nel localStorage

Quando lanciato tramite prompt-lib viewer, la CLI:

  1. Legge viewer.html
  2. Carica tutti i prompt (inclusi quelli personalizzati)
  3. Inserisce i dati dei prompt come JSON nell'HTML
  4. Scrive l'HTML modificato in un file temporaneo
  5. Apre il file temporaneo nel browser predefinito

Quando aperto direttamente, vengono usati i dati prompt incorporati (generati al momento del rilascio).


Navigazione: ← API e Playground  |  App Desktop β†’

⚠️ **GitHub.com Fallback** ⚠️