Initial commit: framework-translator skill (LLM-native approach)
- SKILL.md: Istruzioni complete per LLM (Fasi 1-5) - references/mapping_patterns.md: 13 pattern di trasformazione - references/skill_template.md: Template standardizzato SKILL.md - scripts/: 3 script meccanici bash (scan, structure, packaging) - PIANO_SVILUPPO.md: Piano di sviluppo originale (documentazione) Approccio: LLM-native con script minimali per operazioni meccaniche. Token usage stimato: ~35-65K per framework. Vantaggi: comprensione semantica, adattabilità, manutenzione semplice.
This commit is contained in:
commit
c40ddf4b59
9 changed files with 3344 additions and 0 deletions
54
scripts/01_scan_files.sh
Executable file
54
scripts/01_scan_files.sh
Executable file
|
|
@ -0,0 +1,54 @@
|
|||
#!/bin/bash
|
||||
# 01_scan_files.sh — Scansione file framework
|
||||
# Solo meccanico: lista file markdown e struttura directory
|
||||
|
||||
set -e
|
||||
|
||||
FRAMEWORK_PATH="$1"
|
||||
|
||||
if [ -z "$FRAMEWORK_PATH" ]; then
|
||||
echo "❌ Usage: $0 <framework-path>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "$FRAMEWORK_PATH" ]; then
|
||||
echo "❌ Error: Directory not found: $FRAMEWORK_PATH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "📂 Scansione framework: $FRAMEWORK_PATH"
|
||||
echo "=============================================="
|
||||
|
||||
# Struttura directory
|
||||
echo ""
|
||||
echo "### STRUTTURA DIRECTORY"
|
||||
echo ""
|
||||
find "$FRAMEWORK_PATH" -type d | grep -v "/\." | sort | head -50
|
||||
|
||||
# File markdown
|
||||
echo ""
|
||||
echo "### FILE MARKDOWN ($(find "$FRAMEWORK_PATH" -name "*.md" | wc -l | tr -d ' ') totali)"
|
||||
echo ""
|
||||
find "$FRAMEWORK_PATH" -type f -name "*.md" | grep -v "/\." | sort
|
||||
|
||||
# Script
|
||||
echo ""
|
||||
echo "### SCRIPT ($(find "$FRAMEWORK_PATH" -type f \( -name "*.py" -o -name "*.sh" \) | wc -l | tr -d ' ') totali)"
|
||||
echo ""
|
||||
find "$FRAMEWORK_PATH" -type f \( -name "*.py" -o -name "*.sh" \) | grep -v "/\." | sort
|
||||
|
||||
# Cartelle chiave
|
||||
echo ""
|
||||
echo "### CARTELLE CHIAVE IDENTIFICATE"
|
||||
echo ""
|
||||
|
||||
for pattern in agents agenti actors roles workflows flussi processes knowledge docs scripts tools prompts; do
|
||||
found=$(find "$FRAMEWORK_PATH" -type d -iname "*$pattern*" | grep -v "/\." | head -3)
|
||||
if [ -n "$found" ]; then
|
||||
echo "✓ $pattern: $found"
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo "✅ Scansione completata"
|
||||
69
scripts/02_create_structure.sh
Executable file
69
scripts/02_create_structure.sh
Executable file
|
|
@ -0,0 +1,69 @@
|
|||
#!/bin/bash
|
||||
# 02_create_structure.sh — Crea struttura distribuzione
|
||||
# Solo meccanico: mkdir, mv, organizzazione file
|
||||
|
||||
set -e
|
||||
|
||||
FRAMEWORK_NAME="$1"
|
||||
SOURCE_DIR="$2"
|
||||
|
||||
if [ -z "$FRAMEWORK_NAME" ] || [ -z "$SOURCE_DIR" ]; then
|
||||
echo "❌ Usage: $0 <framework-name> <source-dir>"
|
||||
echo " framework-name: nome per la suite (es. orto-skills)"
|
||||
echo " source-dir: directory con skills e references generate"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "$SOURCE_DIR" ]; then
|
||||
echo "❌ Error: Directory not found: $SOURCE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DIST_DIR="${FRAMEWORK_NAME}-suite"
|
||||
|
||||
echo "📦 Creazione struttura distribuzione: $DIST_DIR"
|
||||
echo "=============================================="
|
||||
|
||||
# Crea directory distribuzione
|
||||
mkdir -p "$DIST_DIR"
|
||||
|
||||
# Sposta/maintieni skills
|
||||
echo ""
|
||||
echo "### Spostamento skills..."
|
||||
for skill_dir in "$SOURCE_DIR"/*/; do
|
||||
if [ -d "$skill_dir" ]; then
|
||||
skill_name=$(basename "$skill_dir")
|
||||
if [ "$skill_name" != "references" ]; then
|
||||
mv "$skill_dir" "$DIST_DIR/"
|
||||
echo " ✓ Skill: $skill_name"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# Sposta/maintieni references
|
||||
echo ""
|
||||
echo "### Spostamento references..."
|
||||
if [ -d "$SOURCE_DIR/references" ]; then
|
||||
mv "$SOURCE_DIR/references" "$DIST_DIR/"
|
||||
echo " ✓ References directory"
|
||||
fi
|
||||
|
||||
# Crea symlink in ogni skill
|
||||
echo ""
|
||||
echo "### Creazione symlink references..."
|
||||
for skill_dir in "$DIST_DIR"/*/; do
|
||||
if [ -d "$skill_dir" ] && [ "$(basename "$skill_dir")" != "references" ]; then
|
||||
ln -sf ../references "$skill_dir/references" 2>/dev/null || {
|
||||
echo " ⚠️ Symlink fallito per $(basename "$skill_dir")"
|
||||
continue
|
||||
}
|
||||
echo " ✓ Symlink: $(basename "$skill_dir")/references → ../references"
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo "✅ Struttura creata: $DIST_DIR"
|
||||
echo ""
|
||||
echo "Contenuto:"
|
||||
ls -la "$DIST_DIR"
|
||||
140
scripts/03_generate_packaging.sh
Executable file
140
scripts/03_generate_packaging.sh
Executable file
|
|
@ -0,0 +1,140 @@
|
|||
#!/bin/bash
|
||||
# 03_generate_packaging.sh — Genera INSTALL.sh e README.md
|
||||
# Solo meccanico: generazione file packaging
|
||||
|
||||
set -e
|
||||
|
||||
DIST_DIR="$1"
|
||||
FRAMEWORK_NAME="$(basename "$DIST_DIR" | sed 's/-suite$//')"
|
||||
|
||||
if [ -z "$DIST_DIR" ] || [ ! -d "$DIST_DIR" ]; then
|
||||
echo "❌ Usage: $0 <dist-dir>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "📦 Generazione packaging per: $DIST_DIR"
|
||||
echo "=============================================="
|
||||
|
||||
# Conta skills e references
|
||||
SKILLS_COUNT=$(find "$DIST_DIR" -mindepth 1 -maxdepth 1 -type d ! -name "references" 2>/dev/null | wc -l | tr -d ' ')
|
||||
REFS_COUNT=$(find "$DIST_DIR/references" -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
|
||||
|
||||
# Genera INSTALL.sh
|
||||
echo ""
|
||||
echo "### Generazione INSTALL.sh..."
|
||||
|
||||
cat > "$DIST_DIR/INSTALL.sh" << EOF
|
||||
#!/bin/bash
|
||||
# Installazione ${FRAMEWORK_NAME}-skills
|
||||
|
||||
SOURCE="\$(cd "\$(dirname "\${BASH_SOURCE[0]}")" && pwd)"
|
||||
TARGET="\$HOME/.openclaw/skills/${FRAMEWORK_NAME}-skills"
|
||||
|
||||
echo "📦 Installing ${FRAMEWORK_NAME}-skills..."
|
||||
echo ""
|
||||
|
||||
# Verifica destinazione
|
||||
if [ -d "\$TARGET" ]; then
|
||||
echo "⚠️ Directory esistente: \$TARGET"
|
||||
read -p "Sovrascrivere? (y/N) " confirm
|
||||
if [ "\$confirm" != "y" ]; then
|
||||
echo "❌ Installazione annullata"
|
||||
exit 1
|
||||
fi
|
||||
rm -rf "\$TARGET"
|
||||
fi
|
||||
|
||||
# Crea directory parent
|
||||
mkdir -p "\$(dirname "\$TARGET")"
|
||||
|
||||
# Copia skills
|
||||
cp -r "\$SOURCE" "\$TARGET"
|
||||
|
||||
echo "✅ Installation complete!"
|
||||
echo ""
|
||||
echo "Skills installate in: \$TARGET"
|
||||
echo ""
|
||||
echo "Skills incluse (${SKILLS_COUNT}):"
|
||||
for skill in "\$TARGET"/*/; do
|
||||
if [ -d "\$skill" ] && [ "\$(basename "\$skill")" != "references" ]; then
|
||||
echo " - \$(basename "\$skill")"
|
||||
fi
|
||||
done
|
||||
EOF
|
||||
|
||||
chmod +x "$DIST_DIR/INSTALL.sh"
|
||||
echo " ✓ INSTALL.sh generato"
|
||||
|
||||
# Genera README.md
|
||||
echo ""
|
||||
echo "### Generazione README.md..."
|
||||
|
||||
cat > "$DIST_DIR/README.md" << EOF
|
||||
# ${FRAMEWORK_NAME}-skills
|
||||
|
||||
Suite di AgentSkills generate da framework-translator.
|
||||
|
||||
## Panoramica
|
||||
|
||||
- **Skills:** ${SKILLS_COUNT}
|
||||
- **References:** ${REFS_COUNT}
|
||||
- **Lingua:** Da rilevare
|
||||
- **Dominio:** Da rilevare
|
||||
|
||||
## Installazione
|
||||
|
||||
### Metodo 1: Script Automatico
|
||||
|
||||
\`\`\`bash
|
||||
./INSTALL.sh
|
||||
\`\`\`
|
||||
|
||||
### Metodo 2: Copia Manuale
|
||||
|
||||
\`\`\`bash
|
||||
cp -r . ~/.openclaw/skills/${FRAMEWORK_NAME}-skills
|
||||
\`\`\`
|
||||
|
||||
## Skills Incluse
|
||||
|
||||
EOF
|
||||
|
||||
# Lista skills
|
||||
for skill_dir in "$DIST_DIR"/*/; do
|
||||
if [ -d "$skill_dir" ] && [ "$(basename "$skill_dir")" != "references" ]; then
|
||||
skill_name=$(basename "$skill_dir")
|
||||
echo "- **$skill_name**" >> "$DIST_DIR/README.md"
|
||||
fi
|
||||
done
|
||||
|
||||
cat >> "$DIST_DIR/README.md" << EOF
|
||||
|
||||
## References
|
||||
|
||||
EOF
|
||||
|
||||
# Lista references
|
||||
if [ -d "$DIST_DIR/references" ]; then
|
||||
for ref_file in "$DIST_DIR/references"/*.md; do
|
||||
if [ -f "$ref_file" ]; then
|
||||
ref_name=$(basename "$ref_file")
|
||||
echo "- \`$ref_name\`" >> "$DIST_DIR/README.md"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
cat >> "$DIST_DIR/README.md" << EOF
|
||||
|
||||
---
|
||||
|
||||
_Generato da framework-translator il $(date +%Y-%m-%d)_
|
||||
EOF
|
||||
|
||||
echo " ✓ README.md generato"
|
||||
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo "✅ Packaging completato"
|
||||
echo ""
|
||||
echo "File generati:"
|
||||
ls -la "$DIST_DIR"/*.sh "$DIST_DIR"/*.md 2>/dev/null || true
|
||||
229
scripts/README.md
Normal file
229
scripts/README.md
Normal file
|
|
@ -0,0 +1,229 @@
|
|||
# Scripts — Framework Translator (LLM-Native)
|
||||
|
||||
Script **meccanici** per supporto operativo al processo LLM.
|
||||
|
||||
## Panoramica
|
||||
|
||||
Questi script **NON fanno analisi semantica** — solo operazioni meccaniche:
|
||||
- Listare file
|
||||
- Creare directory
|
||||
- Creare symlink
|
||||
- Generare file template (INSTALL.sh, README.md)
|
||||
|
||||
**Tutta l'analisi e generazione è fatta da LLM** leggendo `SKILL.md`.
|
||||
|
||||
---
|
||||
|
||||
## Script Disponibili
|
||||
|
||||
### `01_scan_files.sh` — Scansione Framework
|
||||
|
||||
**Scopo:** Lista file markdown e struttura directory del framework.
|
||||
|
||||
**Input:**
|
||||
- Percorso framework
|
||||
|
||||
**Output:**
|
||||
- Lista directory
|
||||
- Lista file markdown
|
||||
- Lista script
|
||||
- Cartelle chiave identificate
|
||||
|
||||
**Utilizzo:**
|
||||
```bash
|
||||
./scripts/01_scan_files.sh /path/to/framework
|
||||
```
|
||||
|
||||
**Output esempio:**
|
||||
```
|
||||
📂 Scansione framework: /path/to/orto_v1
|
||||
==============================================
|
||||
|
||||
### STRUTTURA DIRECTORY
|
||||
|
||||
/path/to/orto_v1
|
||||
/path/to/orto_v1/docs
|
||||
/path/to/orto_v1/docs/agents
|
||||
/path/to/orto_v1/docs/workflows
|
||||
...
|
||||
|
||||
### FILE MARKDOWN (47 totali)
|
||||
|
||||
/path/to/orto_v1/README.md
|
||||
/path/to/orto_v1/docs/agents/00_agent_index.md
|
||||
/path/to/orto_v1/docs/agents/01_orchestratore.md
|
||||
...
|
||||
|
||||
### CARTELLE CHIAVE IDENTIFICATE
|
||||
|
||||
✓ agents: /path/to/orto_v1/docs/agents
|
||||
✓ workflows: /path/to/orto_v1/docs/workflows
|
||||
✓ knowledge: /path/to/orto_v1/docs/knowledge
|
||||
✓ scripts: /path/to/orto_v1/scripts
|
||||
```
|
||||
|
||||
**Per LLM:** Usa questo output come contesto per Fase 1 (analisi framework).
|
||||
|
||||
---
|
||||
|
||||
### `02_create_structure.sh` — Crea Struttura Distribuzione
|
||||
|
||||
**Scopo:** Organizza skills e references in struttura finale, crea symlink.
|
||||
|
||||
**Input:**
|
||||
- Nome framework (es. `orto-skills`)
|
||||
- Directory sorgente (con skills e references generate)
|
||||
|
||||
**Output:**
|
||||
- Directory `<framework>-suite/` organizzata
|
||||
- Symlink `references/` in ogni skill
|
||||
|
||||
**Utilizzo:**
|
||||
```bash
|
||||
./scripts/02_create_structure.sh orto-skills ./output/
|
||||
```
|
||||
|
||||
**Output esempio:**
|
||||
```
|
||||
📦 Creazione struttura distribuzione: orto-skills-suite
|
||||
==============================================
|
||||
|
||||
### Spostamento skills...
|
||||
✓ Skill: orto-init
|
||||
✓ Skill: orto-agronomo
|
||||
✓ Skill: orto-calendario
|
||||
|
||||
### Spostamento references...
|
||||
✓ References directory
|
||||
|
||||
### Creazione symlink references...
|
||||
✓ Symlink: orto-init/references → ../references
|
||||
✓ Symlink: orto-agronomo/references → ../references
|
||||
✓ Symlink: orto-calendario/references → ../references
|
||||
|
||||
✅ Struttura creata: orto-skills-suite
|
||||
```
|
||||
|
||||
**Per LLM:** Esegui dopo Fase 4 (generazione skills completata).
|
||||
|
||||
---
|
||||
|
||||
### `03_generate_packaging.sh` — Genera Packaging
|
||||
|
||||
**Scopo:** Genera `INSTALL.sh` e `README.md` per distribuzione.
|
||||
|
||||
**Input:**
|
||||
- Directory distribuzione (`<framework>-suite/`)
|
||||
|
||||
**Output:**
|
||||
- `INSTALL.sh` (script installazione automatica)
|
||||
- `README.md` (documentazione con lista skills)
|
||||
|
||||
**Utilizzo:**
|
||||
```bash
|
||||
./scripts/03_generate_packaging.sh ./orto-skills-suite
|
||||
```
|
||||
|
||||
**Output esempio:**
|
||||
```
|
||||
📦 Generazione packaging per: ./orto-skills-suite
|
||||
==============================================
|
||||
|
||||
### Generazione INSTALL.sh...
|
||||
✓ INSTALL.sh generato
|
||||
|
||||
### Generazione README.md...
|
||||
✓ README.md generato
|
||||
|
||||
✅ Packaging completato
|
||||
|
||||
File generati:
|
||||
-rwxr-xr-x INSTALL.sh
|
||||
-rw-r--r-- README.md
|
||||
```
|
||||
|
||||
**Per LLM:** Esegui come ultimo step (Fase 5).
|
||||
|
||||
---
|
||||
|
||||
## Workflow Completo (LLM + Script)
|
||||
|
||||
```bash
|
||||
# FASE 1-4: LLM (leggi SKILL.md, esegui analisi e generazione)
|
||||
# ... LLM lavora su analysis_report.md, mapping_plan.md, references/, skills/ ...
|
||||
|
||||
# FASE 5: Script meccanici
|
||||
|
||||
# 1. Scansione iniziale (opzionale, per contesto)
|
||||
./scripts/01_scan_files.sh /path/to/framework > ./output/scan_results.txt
|
||||
|
||||
# 2. Crea struttura distribuzione (dopo Fase 4)
|
||||
./scripts/02_create_structure.sh orto-skills ./output/
|
||||
|
||||
# 3. Genera packaging (dopo step 2)
|
||||
./scripts/03_generate_packaging.sh ./orto-skills-suite
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Differenze vs. Approccio Python (Archiviato)
|
||||
|
||||
| Aspetto | Script Python (archiviati) | Script Bash (attuali) |
|
||||
|---------|---------------------------|----------------------|
|
||||
| **Analisi semantica** | Sì (regex, euristico) | No (solo meccanico) |
|
||||
| **Generazione contenuto** | Sì (template rigido) | No (fatto da LLM) |
|
||||
| **Linee di codice** | ~2,000 | ~150 |
|
||||
| **Manutenzione** | Complessa (test, debug) | Semplice (solo I/O) |
|
||||
| **Flessibilità** | Bassa (formati fissi) | Alta (LLM si adatta) |
|
||||
| **Token usage** | 0 | ~35-65K per framework |
|
||||
|
||||
---
|
||||
|
||||
## Script Archiviati (Python)
|
||||
|
||||
Gli script Python originali sono archiviati in:
|
||||
```
|
||||
scripts-archive/
|
||||
├── analyze_framework.py # Fase 1 (parsing automatico)
|
||||
├── map_entities.py # Fase 2 (mappatura euristica)
|
||||
├── extract_knowledge.py # Fase 3 (estrazione keyword)
|
||||
└── generate_skill.py # Fase 4 (template rigido)
|
||||
```
|
||||
|
||||
**Perché archiviati:** Troppo complessi, fragili, output generico. L'approccio LLM-native è più flessibile e produce output di qualità superiore.
|
||||
|
||||
**Quando usarli:** Solo come riferimento o se vuoi sperimentare approccio ibrido.
|
||||
|
||||
---
|
||||
|
||||
## Note Tecniche
|
||||
|
||||
### Bash vs. Python
|
||||
|
||||
**Bash scelto perché:**
|
||||
- Script <100 linee (semplici)
|
||||
- Solo I/O e operazioni file
|
||||
- Nessuna logica complessa
|
||||
- Ubiquo (tutti i sistemi Unix)
|
||||
|
||||
**Python non necessario perché:**
|
||||
- LLM fa analisi/generazione
|
||||
- Script sono solo "colla" meccanica
|
||||
|
||||
### Compatibilità
|
||||
|
||||
Testato su:
|
||||
- Linux (Ubuntu/Debian)
|
||||
- macOS
|
||||
- Windows (WSL, Git Bash)
|
||||
|
||||
### Permessi
|
||||
|
||||
Assicura che gli script siano eseguibili:
|
||||
```bash
|
||||
chmod +x scripts/*.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
_Aggiornato: 2026-03-07 | Versione: 2.0 (LLM-Native)_
|
||||
Loading…
Add table
Add a link
Reference in a new issue