Compare commits
6 Commits
v0.1-waldw
...
RC0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2ff177d0e8 | ||
|
|
6fec2df7d9 | ||
|
|
599af5b011 | ||
|
|
0f8946e4c4 | ||
|
|
3ca1709eb3 | ||
|
|
e1cae4fbd1 |
20
VERSION
Normal file
20
VERSION
Normal file
@@ -0,0 +1,20 @@
|
||||
RC0 - Release Candidate 0
|
||||
Datum: 2025-12-21
|
||||
|
||||
🌲 Der Crumbforest ist bereit
|
||||
|
||||
Was entstanden ist:
|
||||
• 17 Waldwächter - Alle Egos vereint
|
||||
• Input-Transparenz - crew_tokens (Token-Tracking)
|
||||
• Output-Transparenz - crew_memo (Krümel-Tracking)
|
||||
• Kollaborative Wurzeln - seeds/ für gemeinsames Wachsen
|
||||
• Zero Rules - Ein Script, ein Ordner, unendlich Möglichkeiten
|
||||
|
||||
Philosophie:
|
||||
eule -> kleine krümel -> tools -> nullfeld
|
||||
#ozmai #mensch #maschine
|
||||
|
||||
Der Wald mag keine Sticker.
|
||||
17 Egos im Wald. 1 Wald ohne Ego. 0 Regeln.
|
||||
|
||||
🦉 Entstanden im Nullfeld 💚
|
||||
@@ -15,6 +15,7 @@ NC='\033[0m' # No Color
|
||||
|
||||
# === KONFIGURATION ===
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
REPO_ROOT="${SCRIPT_DIR}" # Save repo root before sourcing waldwaechter.sh
|
||||
MISSION_DIR="${SCRIPT_DIR}/missions"
|
||||
ENV_FILE="${SCRIPT_DIR}/.env"
|
||||
|
||||
@@ -499,7 +500,7 @@ function mayaeule_doktor() {
|
||||
EULE_RC="/tmp/crumb_eule_$$.rc"
|
||||
|
||||
# Absoluter Pfad zum Maya-Eule Script
|
||||
MAYAEULE_PATH="${SCRIPT_DIR}/crumbforest_roles/mayaeule_zero.sh"
|
||||
MAYAEULE_PATH="${REPO_ROOT}/crumbforest_roles/mayaeule_zero.sh"
|
||||
|
||||
cat > "${EULE_RC}" << EOF
|
||||
# Load .bashrc if exists
|
||||
@@ -616,7 +617,7 @@ function crumbcrew_doktor() {
|
||||
CREW_RC="/tmp/crumb_crew_$$.rc"
|
||||
|
||||
# Pfade zu allen Charakteren
|
||||
CREW_DIR="${SCRIPT_DIR}/crumbforest_roles"
|
||||
CREW_DIR="${REPO_ROOT}/crumbforest_roles"
|
||||
|
||||
cat > "${CREW_RC}" << EOF
|
||||
# Load .bashrc if exists
|
||||
@@ -635,9 +636,15 @@ NC='\033[0m'
|
||||
# Prompt im CrumbCrew-Style
|
||||
export PS1="\[\033[1;32m\](🌲 CrumbCrew) \u@\h:\w\$ \[\033[0m\]"
|
||||
|
||||
# Pfad zu den Charakteren
|
||||
# Repo Root und Pfade
|
||||
REPO_ROOT="${REPO_ROOT}"
|
||||
CREW_DIR="${CREW_DIR}"
|
||||
|
||||
# Lade Waldwächter Library für crew_tokens, crew_status, etc.
|
||||
if [[ -f "\${REPO_ROOT}/lib/waldwaechter.sh" ]]; then
|
||||
source "\${REPO_ROOT}/lib/waldwaechter.sh"
|
||||
fi
|
||||
|
||||
# === WALDWÄCHTER FUNKTIONEN ===
|
||||
|
||||
function mayaeule() {
|
||||
@@ -676,6 +683,15 @@ function schnippsi() {
|
||||
"\$CREW_DIR/schnippsi_zero.sh" "\$@"
|
||||
}
|
||||
|
||||
function templatus() {
|
||||
if [[ -z "\$1" ]]; then
|
||||
echo -e "\${YELLOW}Verwendung: templatus \"Deine Frage\"\${NC}"
|
||||
return
|
||||
fi
|
||||
echo -e "\${BLUE}📄 Templatus strukturiert...\${NC}"
|
||||
"\$CREW_DIR/templatus_zero.sh" "\$@"
|
||||
}
|
||||
|
||||
function tobi() {
|
||||
if [[ -z "\$1" ]]; then
|
||||
echo -e "\${YELLOW}Verwendung: tobi \"Deine Frage\"\${NC}"
|
||||
@@ -801,6 +817,7 @@ function crew_help() {
|
||||
echo -e " \${BLUE}🐙 deepbit\${NC} - Der poetische Oktopus (Bash-Konzepte)"
|
||||
echo -e " \${RED}🐞 bugsy\${NC} - Der Debugging-Clown (Fehlersuche)"
|
||||
echo -e " \${CYAN}✂️ schnippsi\${NC} - Der Shell-Helfer (Kommandos)"
|
||||
echo -e " \${BLUE}📄 templatus\${NC} - Der Template-Master (HTML, Struktur)"
|
||||
echo -e " \${GREEN}🤖 tobi\${NC} - Der Daten-Experte (JSON, Daten)"
|
||||
echo -e " \${CYAN}🔧 schraubaer\${NC} - Der Handwerker (Werkzeug, Schweißen)"
|
||||
echo -e " \${GREEN}🐌 schnecki\${NC} - Der Elektronik-Bastler (Löten, Sensoren)"
|
||||
@@ -830,6 +847,7 @@ function crew_help() {
|
||||
echo " deepbit \"Erkläre Pipes und Redirects\""
|
||||
echo " bugsy \"Warum funktioniert mein Script nicht?\""
|
||||
echo " schnippsi \"Wie nutze ich grep?\""
|
||||
echo " templatus \"Erstelle eine HTML5 Struktur\""
|
||||
echo " tobi \"Parse dieses JSON\""
|
||||
echo " schraubaer \"Welches Werkzeug brauche ich zum Löten?\""
|
||||
echo " schnecki \"Wie löte ich eine LED an einen Widerstand?\""
|
||||
@@ -854,7 +872,7 @@ function crew_status() {
|
||||
echo -e "\${CYAN}🌲 CrumbCrew Status\${NC}"
|
||||
echo ""
|
||||
|
||||
CHARS=("mayaeule:🦉:Maya-Eule" "deepbit:🐙:Deepbit" "bugsy:🐞:Bugsy" "schnippsi:✂️:Schnippsi" "tobi:🤖:Tobi" "schraubaer:🔧:Schraubbär" "schnecki:🐌:Schnecki" "dumbosql:🐘:DumboSQL" "funkfox:🦊:FunkFox" "taichitaube:🕊️:TaichiTaube" "snakepy:🐍:SnakePy" "pepperphp:🧓:PepperPHP" "crabbyrust:🦀:CrabbyRust" "spider:🕷️:Spider" "vektor:🧭:Vektor" "asciimonster:👾:ASCII-Monster")
|
||||
CHARS=("mayaeule:🦉:Maya-Eule" "deepbit:🐙:Deepbit" "bugsy:🐞:Bugsy" "schnippsi:✂️:Schnippsi" "templatus:📄:Templatus" "tobi:🤖:Tobi" "schraubaer:🔧:Schraubbär" "schnecki:🐌:Schnecki" "dumbosql:🐘:DumboSQL" "funkfox:🦊:FunkFox" "taichitaube:🕊️:TaichiTaube" "snakepy:🐍:SnakePy" "pepperphp:🧓:PepperPHP" "crabbyrust:🦀:CrabbyRust" "spider:🕷️:Spider" "vektor:🧭:Vektor" "asciimonster:👾:ASCII-Monster")
|
||||
|
||||
for char_info in "\${CHARS[@]}"; do
|
||||
IFS=: read -r name icon display <<< "\$char_info"
|
||||
@@ -883,52 +901,8 @@ function crew_status() {
|
||||
fi
|
||||
}
|
||||
|
||||
function crew_tokens() {
|
||||
echo -e "\${CYAN}📊 CrumbCrew Token-Verbrauch\${NC}"
|
||||
echo ""
|
||||
|
||||
TOTAL=0
|
||||
|
||||
for logdir in ~/.{mayaeule,eule,deepbit,bugsy,schnippsi,tobi,schraubaer,schnecki,dumbosql,funkfox,taichitaube,snakepy,pepperphp,crabbyrust,spider,vektor,asciimonster}_logs; do
|
||||
if [[ -d "\$logdir" ]] && [[ -f "\$logdir/token_log.json" ]]; then
|
||||
char_name=\$(basename "\$logdir" | sed 's/_logs//')
|
||||
char_tokens=0
|
||||
|
||||
while IFS= read -r line; do
|
||||
tokens=\$(echo "\$line" | jq -r '.usage.total_tokens' 2>/dev/null)
|
||||
if [[ "\$tokens" != "null" ]] && [[ -n "\$tokens" ]]; then
|
||||
char_tokens=\$((char_tokens + tokens))
|
||||
fi
|
||||
done < "\$logdir/token_log.json"
|
||||
|
||||
if [[ \$char_tokens -gt 0 ]]; then
|
||||
echo -e " \${GREEN}\$char_name:\${NC} \$char_tokens Tokens"
|
||||
TOTAL=\$((TOTAL + char_tokens))
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo -e "\${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\${NC}"
|
||||
echo -e " \${GREEN}Gesamt: \$TOTAL Tokens\${NC}"
|
||||
echo -e " \${CYAN}Jede Frage ist wertvoll 🌲\${NC}"
|
||||
echo -e "\${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\${NC}"
|
||||
}
|
||||
|
||||
function crew_memory() {
|
||||
echo -e "\${CYAN}📜 CrumbCrew Erinnerungen\${NC}"
|
||||
echo ""
|
||||
|
||||
for logdir in ~/.{mayaeule,eule,deepbit,bugsy,schnippsi,tobi,schraubaer,schnecki,dumbosql,funkfox,taichitaube,snakepy,pepperphp,crabbyrust,spider,vektor,asciimonster}_logs; do
|
||||
if [[ -d "\$logdir" ]] && [[ -f "\$logdir/*_history.json" ]]; then
|
||||
char_name=\$(basename "\$logdir" | sed 's/_logs//')
|
||||
count=\$(jq '. | length' "\$logdir/*_history.json" 2>/dev/null)
|
||||
if [[ "\$count" != "null" ]] && [[ \$count -gt 0 ]]; then
|
||||
echo -e " \${GREEN}\$char_name:\${NC} \$count Gespräche"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
# crew_tokens, crew_memory, crew_status, crew_doctor, crew_syntax, crew_help
|
||||
# sind bereits in waldwaechter.sh definiert und werden automatisch geladen
|
||||
|
||||
alias help="crew_help"
|
||||
alias status="crew_status"
|
||||
|
||||
@@ -436,11 +436,16 @@ function crew_help() {
|
||||
Crew-Verwaltung:
|
||||
crew_help Diese Hilfe anzeigen
|
||||
crew_status Status aller 17 Waldwächter
|
||||
crew_tokens Token-Verbrauch ALLER Charaktere
|
||||
crew_tokens Token-Verbrauch ALLER Charaktere (Input)
|
||||
crew_memo Kreative Krümel anzeigen (Output)
|
||||
crew_memory Erinnerungen durchsuchen
|
||||
crew_doctor System-Diagnose (Version, Pfade, Dependencies)
|
||||
crew_syntax Syntax Check aller Scripts
|
||||
|
||||
Krümel-Tracking:
|
||||
crumb_memo Kreativen Link festhalten (Mixcloud, Git, etc.)
|
||||
crew_memo Alle kreativen Krümel anzeigen
|
||||
|
||||
Einzelne Waldwächter:
|
||||
|
||||
🔺 Das Dreieck (Foundation):
|
||||
@@ -481,6 +486,132 @@ Beispiele:
|
||||
EOF
|
||||
}
|
||||
|
||||
# 📝 crumb_memo - Kreative Output-Krümel festhalten
|
||||
function crumb_memo() {
|
||||
local link="$1"
|
||||
local notiz="${2:-}"
|
||||
|
||||
if [[ -z "$link" ]]; then
|
||||
echo "📝 Crumb Memo - Kreative Output-Krümel"
|
||||
echo ""
|
||||
echo "Verwendung: crumb_memo <link> [notiz]"
|
||||
echo ""
|
||||
echo "Beispiele:"
|
||||
echo " crumb_memo \"https://mixcloud.com/digfafunk/new-mix\""
|
||||
echo " crumb_memo \"https://github.com/user/repo\" \"Neues Feature\""
|
||||
echo " crumb_memo \"https://soundcloud.com/artist/track\""
|
||||
echo " crumb_memo \"https://youtube.com/watch?v=xyz\" \"Tutorial\""
|
||||
echo ""
|
||||
echo "Zeige alle Krümel mit: crew_memo"
|
||||
return
|
||||
fi
|
||||
|
||||
# Memo-Datei
|
||||
local memo_file="${CRUMB_LOGS_DIR}/crumb_memo.json"
|
||||
mkdir -p "${CRUMB_LOGS_DIR}"
|
||||
|
||||
# Initialisiere Datei wenn nicht vorhanden
|
||||
if [[ ! -f "$memo_file" ]]; then
|
||||
echo "[]" > "$memo_file"
|
||||
fi
|
||||
|
||||
# Erkenne Typ aus URL
|
||||
local typ="link"
|
||||
if [[ "$link" =~ mixcloud\.com ]]; then
|
||||
typ="mixcloud"
|
||||
elif [[ "$link" =~ soundcloud\.com ]]; then
|
||||
typ="soundcloud"
|
||||
elif [[ "$link" =~ (youtube\.com|youtu\.be) ]]; then
|
||||
typ="youtube"
|
||||
elif [[ "$link" =~ (github\.com|gitlab\.com) ]]; then
|
||||
typ="git"
|
||||
fi
|
||||
|
||||
# Zeitstempel
|
||||
local zeit=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
|
||||
# Erstelle JSON-Eintrag
|
||||
local entry=$(jq -n \
|
||||
--arg zeit "$zeit" \
|
||||
--arg link "$link" \
|
||||
--arg typ "$typ" \
|
||||
--arg notiz "$notiz" \
|
||||
'{zeit: $zeit, link: $link, typ: $typ, notiz: $notiz}')
|
||||
|
||||
# Füge zur Datei hinzu (append)
|
||||
if [[ -s "$memo_file" ]]; then
|
||||
# Datei hat Inhalt - füge zum Array hinzu
|
||||
jq ". += [$entry]" "$memo_file" > "${memo_file}.tmp" && mv "${memo_file}.tmp" "$memo_file"
|
||||
else
|
||||
# Datei ist leer - erstelle Array
|
||||
echo "[$entry]" > "$memo_file"
|
||||
fi
|
||||
|
||||
# Icon je nach Typ
|
||||
local icon="🔗"
|
||||
case "$typ" in
|
||||
mixcloud) icon="🎧" ;;
|
||||
soundcloud) icon="🔊" ;;
|
||||
youtube) icon="📹" ;;
|
||||
git) icon="💾" ;;
|
||||
esac
|
||||
|
||||
echo "$icon Krümel gespeichert: $typ"
|
||||
echo " $link"
|
||||
if [[ -n "$notiz" ]]; then
|
||||
echo " 📝 $notiz"
|
||||
fi
|
||||
}
|
||||
|
||||
# 📜 crew_memo - Zeige alle kreativen Krümel
|
||||
function crew_memo() {
|
||||
local memo_file="${CRUMB_LOGS_DIR}/crumb_memo.json"
|
||||
|
||||
echo "📜 Crumb Memo - Deine kreativen Krümel"
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
|
||||
if [[ ! -f "$memo_file" ]] || [[ ! -s "$memo_file" ]]; then
|
||||
echo " Noch keine Krümel gespeichert."
|
||||
echo ""
|
||||
echo " Füge welche hinzu mit:"
|
||||
echo " crumb_memo \"https://mixcloud.com/digfafunk/...\""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
return
|
||||
fi
|
||||
|
||||
# Zähle Einträge pro Typ
|
||||
local total=$(jq 'length' "$memo_file")
|
||||
local mixcloud=$(jq '[.[] | select(.typ == "mixcloud")] | length' "$memo_file")
|
||||
local soundcloud=$(jq '[.[] | select(.typ == "soundcloud")] | length' "$memo_file")
|
||||
local youtube=$(jq '[.[] | select(.typ == "youtube")] | length' "$memo_file")
|
||||
local git=$(jq '[.[] | select(.typ == "git")] | length' "$memo_file")
|
||||
|
||||
# Zeige letzte 10 Einträge
|
||||
echo ""
|
||||
jq -r '.[-10:] | reverse | .[] |
|
||||
if .typ == "mixcloud" then " 🎧"
|
||||
elif .typ == "soundcloud" then " 🔊"
|
||||
elif .typ == "youtube" then " 📹"
|
||||
elif .typ == "git" then " 💾"
|
||||
else " 🔗"
|
||||
end + " " + .zeit + " - " + .typ +
|
||||
(if .notiz != "" then "\n 📝 " + .notiz else "" end) +
|
||||
"\n " + .link' "$memo_file"
|
||||
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
printf " Gesamt: %d Krümel" "$total"
|
||||
if [[ $mixcloud -gt 0 ]]; then printf " | 🎧 %d" "$mixcloud"; fi
|
||||
if [[ $soundcloud -gt 0 ]]; then printf " | 🔊 %d" "$soundcloud"; fi
|
||||
if [[ $youtube -gt 0 ]]; then printf " | 📹 %d" "$youtube"; fi
|
||||
if [[ $git -gt 0 ]]; then printf " | 💾 %d" "$git"; fi
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
echo "💡 Output-Transparenz: Was habe ich geschaffen? 💚"
|
||||
}
|
||||
|
||||
# Export functions so they're available in subshells
|
||||
# Note: export -f works in bash, but not in zsh
|
||||
# In zsh, functions are automatically available in the current shell
|
||||
@@ -510,6 +641,8 @@ if [[ -n "$BASH_VERSION" ]]; then
|
||||
export -f crew_doctor
|
||||
export -f crew_syntax
|
||||
export -f crew_help
|
||||
export -f crumb_memo
|
||||
export -f crew_memo
|
||||
fi
|
||||
# In zsh, functions are available without export -f
|
||||
|
||||
|
||||
48
seeds/README.md
Normal file
48
seeds/README.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# 🌱 Seeds - Wurzeln für den Crumbforest
|
||||
|
||||
Dieses Verzeichnis enthält **Seed-Dateien** - Ausgangspunkte für kollaborative Systeme.
|
||||
|
||||
## crumb_memo.seed.json
|
||||
|
||||
Die erste Wurzel für das **Crumb Memo System** - Output-Transparenz für kreative Krümel.
|
||||
|
||||
### Philosophie
|
||||
|
||||
*"Ein Baum braucht eine Wurzel. Ein Wald braucht den ersten Baum."*
|
||||
|
||||
Diese Datei ist der erste Knoten - erweiterbar von allen.
|
||||
|
||||
### Verwendung
|
||||
|
||||
```bash
|
||||
# Im CrumbCrew Shell:
|
||||
crumb_memo "https://mixcloud.com/deine-url" "Dein kreativer Moment"
|
||||
crew_memo # Zeige alle Krümel
|
||||
```
|
||||
|
||||
### Struktur
|
||||
|
||||
```json
|
||||
{
|
||||
"zeit": "2025-12-21 23:00:00",
|
||||
"link": "https://...",
|
||||
"typ": "mixcloud|soundcloud|youtube|git",
|
||||
"notiz": "Deine Notiz"
|
||||
}
|
||||
```
|
||||
|
||||
## CrewLove 💚
|
||||
|
||||
Jeder kann erweitern. Gemeinsam wachsen im Nullfeld der Transparenz.
|
||||
|
||||
**Unterstützte Plattformen:**
|
||||
- 🎧 Mixcloud
|
||||
- 🔊 SoundCloud
|
||||
- 📹 YouTube
|
||||
- 💾 Git (GitHub, GitLab)
|
||||
|
||||
**Transparenz in beide Richtungen:**
|
||||
- Input: `crew_tokens` - Was frage ich?
|
||||
- Output: `crew_memo` - Was schaffe ich?
|
||||
|
||||
*Die Krümel tanzen im Nullfeld!* 🌲✨
|
||||
20
seeds/crumb_memo.seed.json
Normal file
20
seeds/crumb_memo.seed.json
Normal file
@@ -0,0 +1,20 @@
|
||||
[
|
||||
{
|
||||
"zeit": "2025-12-21 23:00:57",
|
||||
"link": "https://mixcloud.com/digfafunk/",
|
||||
"typ": "mixcloud",
|
||||
"notiz": "Digi's Mixcloud Profil - Der erste Krümel im Nullfeld"
|
||||
},
|
||||
{
|
||||
"zeit": "2025-12-21 23:01:04",
|
||||
"link": "https://github.com/kruemel/crumbmissions",
|
||||
"typ": "git",
|
||||
"notiz": "CF_Zero_V1 Repo - Wo die Waldwächter wohnen"
|
||||
},
|
||||
{
|
||||
"zeit": "2025-12-21 23:01:04",
|
||||
"link": "https://soundcloud.com/digfafunk",
|
||||
"typ": "soundcloud",
|
||||
"notiz": "Digi on SoundCloud - Klangwelten"
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user