Architettura - diShine-digital-agency/ai-prompt-library GitHub Wiki
Architettura tecnica, riferimento dei moduli, formati dei dati e struttura del progetto della AI Prompt Library.
- Panoramica dell'Architettura
- Riferimento Moduli
- Formati dei Dati
- Chiavi localStorage
- Struttura dei File del Progetto
- Moduli Integrati di Node.js Utilizzati
- Come Funziona viewer.html
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
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.mdin un albero di directory. -
ensureUserDir()β crea~/.prompt-library/se non esiste.
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:
- Suddivide la query in termini minuscoli
- Per ogni prompt, assegna un punteggio a ogni termine rispetto a titolo, tag, categoria e contenuto
- Somma tutti i punti
- Filtra i prompt con punteggio zero
- Ordina per punteggio decrescente
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
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.
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.
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.
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.
{
"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
}{
"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"
}---
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]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 |
- 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 30sAbortController - 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
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
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) |
Il file viewer.html Γ¨ un'applicazione a pagina singola autonoma:
- Nessuna dipendenza esterna β puro HTML, CSS e JavaScript vanilla in un singolo file
-
Dati prompt incorporati β tutti gli 82+ prompt sono serializzati come JSON in un tag
<script> - localStorage per la persistenza β prompt personalizzati, composizioni salvate, preferiti, chiavi API e preferenze dell'interfaccia
- Design responsivo β funziona su desktop, tablet e mobile
- ModalitΓ scura/chiara β commutabile con preferenza salvata nel localStorage
Quando lanciato tramite prompt-lib viewer, la CLI:
- Legge
viewer.html - Carica tutti i prompt (inclusi quelli personalizzati)
- Inserisce i dati dei prompt come JSON nell'HTML
- Scrive l'HTML modificato in un file temporaneo
- 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 β