function tiffy # --- KONFIGURATION --- set -l SOURCE_NAME "sources/github/Baerspektivo/projectTiffy" set -l SESSION_STORE "$HOME/.config/fish/tiffy_session" # Hilfsfunktion zum Auflisten der verfuegbaren Repos if test "$argv[1]" = "--list-sources" echo "Suche verfuegbare Jules-Quellen..." curl -s "https://jules.googleapis.com/v1alpha/sources" -H "X-Goog-Api-Key: $JULES_API_KEY" | jq . return end # Befehl zum Abholen der letzten Session (tiffy fetch oder tiffy gib) if test "$argv[1]" = "fetch"; or test "$argv[1]" = "gib" if test -f "$SESSION_STORE" read -l S_ID TARGET_FILE < "$SESSION_STORE" echo "Pruefe letzte Session $S_ID fuer Datei $TARGET_FILE..." set -l ACT (curl -s "https://jules.googleapis.com/v1alpha/sessions/$S_ID/activities" -H "X-Goog-Api-Key: $JULES_API_KEY") set -l RES (echo $ACT | jq -r '.activities[]? | (.progressUpdated?.description // .agentMessaged?.agentMessage // empty)' | grep "```" | tail -n 1) if test -n "$RES" set -l DETECTED_LANG (echo "$RES" | string match -r '```(\w+)' | head -n 2 | tail -n 1) set -l EXT "ts" switch "$DETECTED_LANG" case "go"; set EXT "go" case "typescript" "ts"; set EXT "ts" case "javascript" "js"; set EXT "js" case "python" "py"; set EXT "py" case "html"; set EXT "html" case "json"; set EXT "json" end set -l FINAL_TARGET (string replace -r '\.[^.]+$' ".$EXT" "$TARGET_FILE") echo "$RES" | sed -n '/^```/,/^```/ p' | sed '1d;$d' > "$FINAL_TARGET" if test ! -s "$FINAL_TARGET"; echo "$RES" > "$FINAL_TARGET"; end echo "Code erfolgreich nachgeholt und gespeichert: $FINAL_TARGET" else echo "Noch kein Code in Session $S_ID gefunden." end return else echo "Keine gespeicherte Session gefunden." return 1 end end # Befehl um eine Folgefrage mit optionalen neuen Dateien zu senden if test "$argv[1]" = "ask" if test -f "$SESSION_STORE" read -l S_ID TARGET_FILE < "$SESSION_STORE" set -l ASSET_FILES set -l MSG_PARTS # Argumente ab dem zweiten (nach "ask") auf Dateien pruefen for arg in $argv[2..-1] if test -f "$arg" set -a ASSET_FILES "$arg" else set -a MSG_PARTS "$arg" end end set -l USER_MSG (string join " " $MSG_PARTS) set -l ADD_CONTEXT "" for f in $ASSET_FILES echo "Lese zusaetzliche Datei: $f" set ADD_CONTEXT "$ADD_CONTEXT\n\n--- FILE: $f ---\n"(cat "$f") end set -l FOLLOW_UP (string join "\n" "$USER_MSG" "$ADD_CONTEXT") if test -z (string trim "$FOLLOW_UP") echo "Fehler: Keine Nachricht oder Datei angegeben." return 1 end echo "Sende Nachricht und Kontext an bestehende Session $S_ID..." set -l ESCAPED_FOLLOW_UP (printf "%s" "$FOLLOW_UP" | python3 -c 'import json, sys; print(json.dumps(sys.stdin.read()), end="")') curl -s "https://jules.googleapis.com/v1alpha/sessions/$S_ID:sendMessage" \ -X POST -H "Content-Type: application/json" -H "X-Goog-Api-Key: $JULES_API_KEY" \ -d "{ \"prompt\": $ESCAPED_FOLLOW_UP }" > /dev/null # Polling set -l RESULT "" echo "Warte auf Antwort..." for i in (seq 1 36) sleep 5 set -l ACT_RES (curl -s "https://jules.googleapis.com/v1alpha/sessions/$S_ID/activities" -H "X-Goog-Api-Key: $JULES_API_KEY") set RESULT (echo $ACT_RES | jq -r '.activities[]? | (.progressUpdated?.description // .agentMessaged?.agentMessage // empty)' | grep "```" | tail -n 1) if test -n "$RESULT"; break; end echo -n "." end if test -n "$RESULT" echo -e "\nAntwort erhalten. Speichere..." set -l FINAL_TARGET (string replace -r '\.[^.]+$' ".ts" "$TARGET_FILE") echo "$RESULT" | sed -n '/^```/,/^```/ p' | sed '1d;$d' > "$FINAL_TARGET" echo "Code aktualisiert: $FINAL_TARGET" else echo -e "\nKeine schnelle Antwort. Nutze 'tiffy fetch' spaeter." end return else echo "Keine aktive Session zum Fortfuehren gefunden." return 1 end end # Resume-Modus fuer manuelle ID-Eingabe if test (count $argv) -eq 1; and string match -r '^\d+$' "$argv[1]" > /dev/null set -l S_ID "$argv[1]" set -l ACT (curl -s "[https://jules.googleapis.com/v1alpha/sessions/$S_ID/activities](https://jules.googleapis.com/v1alpha/sessions/$S_ID/activities)" -H "X-Goog-Api-Key: $JULES_API_KEY") set -l RES (echo $ACT | jq -r '.activities[]? | (.progressUpdated?.description // .agentMessaged?.agentMessage // empty)' | grep "```" | tail -n 1) echo "$RES" return end # Normaler Session-Start (mehrere Dateien moeglich) set -l FILES set -l MSG_PARTS for arg in $argv if test -f "$arg"; set -a FILES "$arg"; else; set -a MSG_PARTS "$arg"; end end if test (count $FILES) -eq 0; echo "Fehler: Datei nicht gefunden!"; return 1; end set -l USER_MESSAGE (string join " " $MSG_PARTS) set -l CONTEXT "" for f in $FILES echo "Lese Datei: $f" set CONTEXT "$CONTEXT\n\n--- FILE: $f ---\n"(cat "$f") end set -l ESCAPED_PROMPT (printf "%s" "$USER_MESSAGE\n$CONTEXT" | python3 -c 'import json, sys; print(json.dumps(sys.stdin.read()), end="")') echo "Session-Start fuer $SOURCE_NAME..." set -l PAYLOAD "{ \"prompt\": $ESCAPED_PROMPT, \"sourceContext\": { \"source\": \"$SOURCE_NAME\", \"githubRepoContext\": { \"startingBranch\": \"main\" } } }" set -l SESSION_RESPONSE (curl -s "https://jules.googleapis.com/v1alpha/sessions" \ -X POST -H "Content-Type: application/json" -H "X-Goog-Api-Key: $JULES_API_KEY" -d "$PAYLOAD") set -l SESSION_ID (echo $SESSION_RESPONSE | jq -r '.id // empty') if test -z "$SESSION_ID"; echo "API Fehler."; echo $SESSION_RESPONSE | jq .; return 1; end # Speichert die erste Datei als Referenz fuer den Zielnamen echo "$SESSION_ID $FILES[1]" > "$SESSION_STORE" echo "Jules arbeitet... (Session: $SESSION_ID)" set -l RESULT "" for i in (seq 1 36) sleep 5 set -l ACT_RES (curl -s "https://jules.googleapis.com/v1alpha/sessions/$SESSION_ID/activities" -H "X-Goog-Api-Key: $JULES_API_KEY") set RESULT (echo $ACT_RES | jq -r '.activities[]? | (.progressUpdated?.description // .agentMessaged?.agentMessage // empty)' | grep "```" | tail -n 1) if test -n "$RESULT"; break; end echo -n "." end if test -z "$RESULT"; echo -e "\nNutze 'tiffy fetch' zum Abrufen."; return 0; end set -l DETECTED_LANG (echo "$RESULT" | string match -r '```(\w+)' | head -n 2 | tail -n 1) set -l EXT "ts" switch "$DETECTED_LANG" case "go"; set EXT "go" case "typescript" "ts"; set EXT "ts" case "javascript" "js"; set EXT "js" case "python" "py"; set EXT "py" end set -l TARGET_FILE (string replace -r '\.[^.]+$' ".$EXT" "$FILES[1]") echo "$RESULT" | sed -n '/^```/,/^```/ p' | sed '1d;$d' > "$TARGET_FILE" echo -e "\nCode lokal gespeichert: $TARGET_FILE" end