diff --git a/.gitignore b/.gitignore index 7cfd02b..6cfd8ed 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .DS_Store *.log node_modules/ +dist/ diff --git a/plugins/machine-design/CHANGELOG.md b/plugins/machine-design/CHANGELOG.md index f5620f3..2fad66a 100644 --- a/plugins/machine-design/CHANGELOG.md +++ b/plugins/machine-design/CHANGELOG.md @@ -8,3 +8,4 @@ Il formato si basa su [Keep a Changelog](https://keepachangelog.com/it/1.1.0/). ### Aggiunto - Struttura iniziale del plugin. +- Skill `o-ring`: scelta dell'O-ring e dimensionamento della cava (larghezza e diametro di fondo cava) per tenute su albero o su foro, con tabella dimensioni ([references/tabella-dimensioni-cava.md](skills/o-ring/references/tabella-dimensioni-cava.md)) e schema quotato mostrato insieme al risultato numerico ([assets/schema-cava.png](skills/o-ring/assets/schema-cava.png)). diff --git a/plugins/machine-design/README.md b/plugins/machine-design/README.md index 4b4e3f7..2025c7c 100644 --- a/plugins/machine-design/README.md +++ b/plugins/machine-design/README.md @@ -6,7 +6,7 @@ Le skill di questo plugin si installano tutte insieme aggiungendo questo reposit ## Skill disponibili -_Nessuna skill ancora presente._ +- **o-ring**: scelta dell'O-ring e dimensionamento della cava (larghezza e diametro di fondo cava) per tenute su albero o su foro. ## Convenzioni diff --git a/plugins/machine-design/skills/o-ring/SKILL.md b/plugins/machine-design/skills/o-ring/SKILL.md new file mode 100644 index 0000000..ce8a66f --- /dev/null +++ b/plugins/machine-design/skills/o-ring/SKILL.md @@ -0,0 +1,37 @@ +--- +name: o-ring +description: Sceglie l'O-ring più adatto e calcola le dimensioni della cava (larghezza e diametro di fondo cava) a partire dal diametro nominale di albero o foro, per cava ricavata sull'albero o nel foro. Usa questa skill ogni volta che l'utente chiede di dimensionare una cava per O-ring, scegliere un O-ring per una tenuta statica/dinamica su albero o foro, verificare le quote di una cava esistente, o anche solo menziona un diametro d'albero/foro insieme a "O-ring", "cava", "tenuta" o "guarnizione" — anche se non usa termini tecnici precisi. +--- + +# Scelta O-ring e dimensionamento cava + +Questa skill guida la scelta dell'O-ring e il calcolo delle quote della cava (sede) in cui alloggiarlo, per tenute radiali su albero o su foro. Le quote derivano da un manuale tecnico fornito dall'utente (non una norma UNI/ISO citabile), riportato in [references/tabella-dimensioni-cava.md](references/tabella-dimensioni-cava.md). + +## Dati necessari all'utente + +Prima di procedere, verificare di avere **entrambe** queste informazioni. Se manca anche una sola, chiederla esplicitamente prima di fare qualunque calcolo: + +1. **Diametro nominale di accoppiamento** (mm): il diametro dell'albero o del foro nella zona di tenuta. È sufficiente che l'utente fornisca uno dei due (albero o foro), dato che nell'accoppiamento sono all'incirca coincidenti (accoppiamento scorrevole). +2. **Dove va ricavata la cava**: sull'**albero** o nel **foro**. Cambia la quota di fondo cava da restituire (`C` per il foro, `N` per l'albero) e con essa la riga giusta in tabella — quindi se l'utente fornisce solo un diametro senza specificarlo, chiedere quale dei due componenti deve ospitare la cava prima di cercare in tabella. + +## Riferimento dati + +- Tabella completa dimensioni O-ring/cava: [references/tabella-dimensioni-cava.md](references/tabella-dimensioni-cava.md) — usarla per la ricerca del valore. +- Schema quotato (tre viste: O-ring isolato, cava nel foro, cava sull'albero), spiegato in [references/schema-cava.md](references/schema-cava.md): l'immagine vera e propria è in [assets/schema-cava.png](assets/schema-cava.png) e va **mostrata all'utente insieme al risultato finale** (vedi Procedura, punto 4) — le sigle A, B, C, D, H, M, N, d hanno senso solo se l'utente può vederle sul disegno mentre legge i numeri corrispondenti. + +## Procedura + +1. Nella tabella di riferimento, cercare la riga (o le righe) il cui diametro di accoppiamento è più vicino al valore richiesto dall'utente: + - se la cava va **nel foro**, confrontare il diametro richiesto con la colonna **D**; + - se la cava va **sull'albero**, confrontare il diametro richiesto con la colonna **M**. +2. Se il valore richiesto coincide esattamente (o quasi) con più righe della tabella (capita per alcune sigle duplicate nella fonte, es. "OR 3075", "OR 3150" — vedi nota nella tabella), riportare **tutte** le opzioni trovate, con le rispettive dimensioni complete, lasciando all'utente la scelta finale (es. in base allo spazio radiale disponibile: sezione `A` maggiore = tenuta più robusta ma cava più profonda). +3. Se il diametro richiesto dall'utente cade tra due righe della tabella senza corrispondenza vicina, segnalarlo e proporre le due righe più vicine (per difetto e per eccesso) invece di interpolare: la tabella riporta O-ring di serie normalizzata, non è corretto interpolare i valori. +4. Presentare il risultato **in un'unica risposta che includa sia la tabella numerica sia l'immagine dello schema**, così l'utente può leggere le quote e vederne subito il significato geometrico: + - copiare `assets/schema-cava.png` in `/mnt/user-data/outputs/` e mostrarlo con `present_files`, nella stessa risposta in cui si riportano i numeri (non in una risposta separata precedente); + - accanto o subito dopo l'immagine, la tabella con: sigla/e O-ring (`Riferimento`), diametro interno O-ring (`d`) e sezione (`A`); larghezza cava (`B`); diametro di fondo cava (`C` se nel foro, `N` se sull'albero); la quota `H` di catalogo, precisando che il suo significato geometrico non è confermato dal disegno disponibile; il diametro di accoppiamento nominale usato per la ricerca (`D` o `M`). + +## Ipotesi e limiti di validità + +- I valori sono presi da un manuale tecnico fornito dall'utente, non da una norma UNI/ISO citabile: se in futuro si dispone del riferimento normativo o del catalogo originale, aggiornare la nota in [references/tabella-dimensioni-cava.md](references/tabella-dimensioni-cava.md). +- La tabella non specifica se le quote sono pensate per tenuta statica o dinamica (con strisciamento): non fare assunzioni sull'applicazione, chiedere all'utente se rilevante per il caso d'uso (es. velocità di scorrimento, pressione, fluido) prima di validare la scelta per un'applicazione dinamica. +- Non estrapolare né interpolare dimensioni per diametri fuori dal range della tabella (12,37–101,00 mm circa per `d`): segnalarlo come fuori tabella. diff --git a/plugins/machine-design/skills/o-ring/assets/schema-cava.png b/plugins/machine-design/skills/o-ring/assets/schema-cava.png new file mode 100644 index 0000000..9b0672b Binary files /dev/null and b/plugins/machine-design/skills/o-ring/assets/schema-cava.png differ diff --git a/plugins/machine-design/skills/o-ring/references/schema-cava.md b/plugins/machine-design/skills/o-ring/references/schema-cava.md new file mode 100644 index 0000000..d38eb4c --- /dev/null +++ b/plugins/machine-design/skills/o-ring/references/schema-cava.md @@ -0,0 +1,16 @@ +# Schema di riferimento cava O-ring + +Immagine di riferimento: [../assets/schema-cava.png](../assets/schema-cava.png). Questa immagine va mostrata all'utente insieme al risultato finale (vedi "Procedura" in SKILL.md), non solo consultata internamente. + +Il disegno tecnico fornito dall'utente è composto da tre viste: + +1. **Sezione dell'O-ring isolato**: mostra `A` (diametro di sezione del cordolo) e `d` (diametro interno dell'O-ring a riposo). +2. **Sezione della cava ricavata nel FORO**: mostra `B` (larghezza assiale della cava), `C` (diametro di fondo cava nel foro) e `D` (diametro nominale dell'albero che passa nel foro, quota di accoppiamento). +3. **Sezione della cava ricavata sull'ALBERO**: mostra `B` (larghezza assiale della cava, stessa quota della vista 2), `M` (diametro nominale del foro che circonda l'albero, quota di accoppiamento) e `N` (diametro di fondo cava sull'albero). + +Regola pratica per la selezione: + +- Cava **nel foro** → la cava allarga il diametro rispetto al foro nominale: `C > D`. +- Cava **sull'albero** → la cava riduce il diametro rispetto all'albero nominale: `N < M`. +- `B` è la larghezza assiale della cava in entrambi i casi. +- `H` è una quota riportata dalla tabella sorgente ma il suo ruolo geometrico non è stato confermato: va comunicata all'utente come dato di catalogo, senza attribuirle un significato preciso. diff --git a/plugins/machine-design/skills/o-ring/references/tabella-dimensioni-cava.md b/plugins/machine-design/skills/o-ring/references/tabella-dimensioni-cava.md new file mode 100644 index 0000000..b0b8875 --- /dev/null +++ b/plugins/machine-design/skills/o-ring/references/tabella-dimensioni-cava.md @@ -0,0 +1,80 @@ +# Tabella dimensioni O-ring e cava + +Fonte: manuale tecnico fornito dall'utente (nessun riferimento normativo/catalogo specifico indicato). Dimensioni in mm. + +Significato colonne (vedi schema in [schema-cava.md](schema-cava.md)): + +- **Riferimento**: sigla commerciale dell'O-ring. +- **d**: diametro interno dell'O-ring a riposo. +- **A**: diametro di sezione (spessore) del cordolo dell'O-ring. +- **B**: larghezza assiale della cava (uguale sia per cava su albero sia per cava nel foro). +- **C**: diametro di fondo cava quando la cava è ricavata **nel foro** (quota da usare per il dimensionamento della cava lato foro). +- **D**: diametro nominale di accoppiamento dell'**albero** che passa nel foro sede della cava (quota di riferimento, non è una quota di cava). +- **H**: quota di catalogo riportata dalla fonte; ruolo geometrico non confermato, riportata per completezza. +- **M**: diametro nominale di accoppiamento del **foro** che circonda l'albero sede della cava (quota di riferimento, non è una quota di cava). +- **N**: diametro di fondo cava quando la cava è ricavata **sull'albero** (quota da usare per il dimensionamento della cava lato albero). + +| Riferimento | d | A | B | C | D | H | M | N | +|---|---|---|---|---|---|---|---|---| +| OR 3050 | 12,37 | 2,62 | 3,5 | 17,3 | 12,5 | 2,2 | 18 | 13,7 | +| OR 2050 | 12,42 | 1,78 | 2,5 | 16,2 | 13 | 1,4 | 16 | 12,8 | +| OR 117 | 13,10 | 2,62 | 3,5 | 17,8 | 13 | 2,2 | 18 | 13,4 | +| OR 3056 | 13,95 | 2,62 | 3,5 | 18,8 | 14 | 2,2 | 19 | 14,4 | +| OR 2056 | 14,00 | 1,78 | 2,5 | 17,2 | 14 | 1,4 | 18 | 14,9 | +| OR 119 | 15,08 | 2,62 | 3,5 | 19,8 | 15 | 2,2 | 20 | 15,4 | +| OR 3062 | 15,54 | 2,62 | 3,5 | 20 | 15,5 | 2,2 | 19 | 16,6 | +| OR 2062 | 15,60 | 1,78 | 2,5 | 19,2 | 16 | 1,4 | 19 | 15,8 | +| OR 3068 | 15,88 | 2,62 | 3,5 | 20,8 | 16 | 2,2 | 21 | 16,4 | +| OR 123 | 17,13 | 2,62 | 3,5 | 21,8 | 17 | 2,2 | 22 | 17,3 | +| OR 3075 | 17,86 | 2,62 | 3,5 | 22,8 | 18 | 2,2 | 23 | 18,4 | +| OR 4075 | 18,64 | 3,53 | 4,5 | 25,3 | 19 | 2,9 | 26 | 19,9 | +| OR 3075 | 18,72 | 2,62 | 3,5 | 23,8 | 19 | 2,2 | 24 | 19,5 | +| OR 4081 | 20,22 | 3,53 | 4,5 | 26,3 | 20 | 2,9 | 28 | 22,0 | +| OR 3081 | 20,24 | 2,62 | 3,5 | 24,8 | 20 | 2,2 | 25 | 20,3 | +| OR 128 | 20,63 | 2,62 | 3,5 | 25,8 | 21 | 2,2 | 26 | 21,5 | +| OR 4087 | 21,82 | 3,53 | 4,5 | 28,3 | 22 | 2,9 | 29 | 22,8 | +| OR 3087 | 22,22 | 2,62 | 3,5 | 26,8 | 22 | 2,2 | 27 | 22,3 | +| OR 4093 | 23,40 | 3,53 | 4,5 | 29,3 | 23 | 2,9 | 30 | 23,7 | +| OR 3093 | 23,81 | 2,62 | 3,5 | 28,8 | 24 | 2,2 | 29 | 24,4 | +| OR 4100 | 24,99 | 3,53 | 4,5 | 31,3 | 25 | 2,9 | 32 | 25,8 | +| OR 3100 | 25,07 | 2,62 | 3,5 | 29,7 | 25 | 2,2 | 30 | 25,3 | +| OR 134 | 25,80 | 3,53 | 4,5 | 32,3 | 26 | 2,9 | 33 | 26,8 | +| OR 4106 | 26,58 | 3,53 | 4,5 | 33,3 | 27 | 2,9 | 34 | 27,8 | +| OR 3106 | 26,65 | 2,62 | 3,5 | 31,7 | 27 | 2,2 | 32 | 27,2 | +| OR 4112 | 28,17 | 3,53 | 4,5 | 34,3 | 28 | 2,9 | 35 | 28,7 | +| OR 3112 | 28,25 | 2,62 | 3,5 | 32,7 | 28 | 2,2 | 33 | 28,3 | +| OR 4118 | 29,75 | 3,53 | 4,5 | 36,3 | 30 | 2,9 | 37 | 30,8 | +| OR 3118 | 29,82 | 2,62 | 3,5 | 34,7 | 30 | 2,2 | 35 | 30,2 | +| OR 4125 | 31,34 | 3,53 | 4,5 | 37,3 | 31 | 2,9 | 38 | 31,7 | +| OR 3125 | 31,41 | 2,62 | 3,5 | 36,7 | 32 | 2,2 | 32 | 32,3 | +| OR 4131 | 32,93 | 2,62 | 3,5 | 39,3 | 33 | 2,9 | 40 | 33,7 | +| OR 3131 | 32,99 | 2,62 | 3,5 | 37,7 | 33 | 2,2 | 33 | 33,2 | +| OR 4137 | 34,52 | 3,53 | 4,5 | 41,3 | 35 | 2,9 | 42 | 35,8 | +| OR 3137 | 34,60 | 2,62 | 3,5 | 39,7 | 35 | 2,2 | 40 | 35,2 | +| OR 4143 | 36,14 | 3,53 | 4,5 | 42,3 | 36 | 2,9 | 43 | 36,7 | +| OR 3143 | 36,14 | 2,62 | 3,5 | 40,7 | 36 | 2,2 | 41 | 36,2 | +| OR 3150 | 37,47 | 5,34 | 7,0 | 47,5 | 38 | 4,5 | 48 | 37,4 | +| OR 4150 | 37,69 | 3,53 | 4,5 | 44,3 | 38 | 2,9 | 45 | 38,7 | +| OR 3150 | 37,77 | 2,62 | 3,5 | 42,7 | 38 | 2,2 | 40 | 38,3 | +| OR 3156 | 39,34 | 2,62 | 3,5 | 44,7 | 40 | 2,2 | 40 | 39,6 | +| OR 144 | 39,69 | 3,53 | 4,5 | 46,3 | 40 | 2,9 | 46 | 39,6 | +| OR 6162 | 40,65 | 5,34 | 7,0 | 50,5 | 41 | 4,5 | 52 | 42,7 | +| OR 4162 | 40,95 | 2,62 | 3,5 | 45,7 | 41 | 2,2 | 46 | 41,3 | +| OR 146 | 41,28 | 3,53 | 4,5 | 48,3 | 42 | 2,9 | 48 | 41,7 | +| OR 3168 | 42,52 | 2,62 | 3,5 | 47,7 | 43 | 2,2 | 48 | 43,2 | +| OR 147 | 42,86 | 3,53 | 4,5 | 49,3 | 43 | 2,9 | 50 | 43,7 | +| OR 6175 | 43,82 | 5,34 | 7,0 | 53,5 | 44 | 4,5 | 55 | 45,6 | +| OR 4187 | 47,22 | 3,53 | 4,5 | 54,3 | 47 | 2,9 | 53 | 47,5 | +| OR 6200 | 50,16 | 5,34 | 6 | 60,4 | 50 | 4,5 | 61 | 50,5 | +| OR 6225 | 56,52 | 5,34 | 6 | 67,4 | 55 | 4,5 | 68 | 57,7 | +| OR 6250 | 62,87 | 5,34 | 6 | 73,4 | 60 | 4,5 | 74 | 66,6 | +| OR 6262 | 66,04 | 5,34 | 6 | 76,4 | 65 | 4,5 | 77 | 66,6 | +| OR 6287 | 72,39 | 5,34 | 6 | 83,4 | 70 | 4,5 | 85 | 74,5 | +| OR 6312 | 78,74 | 5,34 | 6 | 90,4 | 75 | 4,5 | 90 | 79,5 | +| OR 6325 | 81,92 | 5,34 | 6 | 92,4 | 80 | 4,5 | 92 | 81,5 | +| OR 6350 | 91,44 | 5,34 | 6 | 100,4 | 85 | 4,5 | 100 | 89,5 | +| OR 6362 | 97,79 | 5,34 | 6 | 102,4 | 95 | 4,5 | 92 | 91,5 | +| OR 6387 | 97,79 | 5,34 | 6 | 108,4 | 95 | 4,5 | 108 | 97,5 | +| OR 6400 | 101,00 | 5,34 | 6 | 110,4 | 100 | 4,5 | 111 | 100,6 | + +Nota: alcune sigle di riferimento (es. "OR 3075", "OR 3150") compaiono due volte nella tabella sorgente con dimensioni diverse; è probabile un refuso nella fonte (sigla duplicata per due grandezze distinte). In assenza del catalogo originale non è possibile correggere le sigle: usare la riga con il diametro `d` più vicino a quello richiesto e segnalare all'utente l'ambiguità quando capita. diff --git a/scripts/export-skills.ps1 b/scripts/export-skills.ps1 new file mode 100644 index 0000000..8c90093 --- /dev/null +++ b/scripts/export-skills.ps1 @@ -0,0 +1,65 @@ +<# +Esporta ogni skill (plugins/*/skills//) in uno zip separato in dist/, +pronto per essere caricato come skill singola su Claude (Settings -> Capabilities -> Skills) +per test rapidi senza passare dall'installazione dell'intero plugin/marketplace. + +Uso: + powershell -File scripts/export-skills.ps1 + powershell -File scripts/export-skills.ps1 -Skill o-ring # esporta solo una skill + +Ogni zip contiene i file della skill alla radice dell'archivio (SKILL.md in cima), +non dentro una sottocartella, come richiesto dal caricamento manuale su Claude. +#> +param( + [string]$Skill +) + +$ErrorActionPreference = "Stop" +$root = Split-Path -Parent $PSScriptRoot +$distDir = Join-Path $root "dist" + +if (-not (Test-Path $distDir)) { + New-Item -ItemType Directory -Path $distDir | Out-Null +} + +$skillDirs = Get-ChildItem -Path (Join-Path $root "plugins") -Directory | + ForEach-Object { Join-Path $_.FullName "skills" } | + Where-Object { Test-Path $_ } | + ForEach-Object { Get-ChildItem -Path $_ -Directory } + +if ($Skill) { + $skillDirs = $skillDirs | Where-Object { $_.Name -eq $Skill } + if (-not $skillDirs) { + throw "Skill '$Skill' non trovata sotto plugins/*/skills/" + } +} + +foreach ($dir in $skillDirs) { + $skillMd = Join-Path $dir.FullName "SKILL.md" + if (-not (Test-Path $skillMd)) { + Write-Warning "Salto $($dir.Name): manca SKILL.md" + continue + } + + $zipPath = Join-Path $distDir "$($dir.Name).zip" + if (Test-Path $zipPath) { + Remove-Item $zipPath -Force + } + + Add-Type -AssemblyName System.IO.Compression + Add-Type -AssemblyName System.IO.Compression.FileSystem + + $zip = [System.IO.Compression.ZipFile]::Open($zipPath, [System.IO.Compression.ZipArchiveMode]::Create) + try { + $files = Get-ChildItem -Path $dir.FullName -Recurse -File + foreach ($file in $files) { + $relativePath = $file.FullName.Substring($dir.FullName.Length + 1) -replace '\\', '/' + [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zip, $file.FullName, $relativePath) | Out-Null + } + } + finally { + $zip.Dispose() + } + + Write-Host "Creato $zipPath" +}