From 294740b78034ab201f1dccf5e51e228fc894c0c6 Mon Sep 17 00:00:00 2001 From: Lars Date: Fri, 22 May 2026 19:24:36 +0200 Subject: [PATCH] Increment application version to 0.8.166 and update changelog for new features in AI exercise creation - Updated APP_VERSION to 0.8.166 and modified BUILD_DATE to reflect recent changes. - Enhanced AI exercise creation process with a new quick create feature, allowing users to generate exercises based on search input. - Introduced a rich text editor for editing AI-generated drafts, improving user experience in exercise creation. - Updated ExercisePickerModal and related components to support the new quick create functionality, including error handling and input validation. - Added new utility functions for parsing search queries and building exercise payloads from drafts. --- backend/version.py | 14 +- docs/HANDOVER.md | 7 +- .../components/ExerciseAiQuickCreateOffer.jsx | 118 ++++++++ .../ExerciseAiSuggestPreviewModal.jsx | 283 +++++++----------- .../src/components/ExercisePickerModal.jsx | 271 ++++------------- .../exercises/ExerciseListSearchBar.jsx | 22 ++ .../exercises/ExercisesListPageRoot.jsx | 163 +++++++++- frontend/src/utils/exerciseAiQuickCreate.js | 111 ++++++- 8 files changed, 592 insertions(+), 397 deletions(-) create mode 100644 frontend/src/components/ExerciseAiQuickCreateOffer.jsx diff --git a/backend/version.py b/backend/version.py index 2dfe63c..9a1a661 100644 --- a/backend/version.py +++ b/backend/version.py @@ -1,7 +1,7 @@ # Shinkan Jinkendo Version Information -APP_VERSION = "0.8.165" -BUILD_DATE = "2026-05-31" +APP_VERSION = "0.8.166" +BUILD_DATE = "2026-05-22" DB_SCHEMA_VERSION = "20260531071" MODULE_VERSIONS = { @@ -27,7 +27,7 @@ MODULE_VERSIONS = { "skills": "0.1.1", # DB 065 karate_relevance + relevance_level; CRUD unterstützt Felder "skill_profiles": "1.0.0", # Phase 3: gewichtetes Fähigkeiten-Profil + skill-discovery/suggestions "methods": "0.1.0", - "exercises": "2.32.0", # KI Anleitung: exercise_instruction_rewrite, include_instructions API + UI + "exercises": "2.33.0", # KI Schnellanlage: Suche+Anlage kombiniert; Rich-Text-Editor; Übungsliste KI-Schalter "training_units": "0.4.0", # POST .../publish-to-framework: Ablauf aus geplanter Einheit → Rahmen-Slot-Blueprint "training_programs": "0.1.0", "planning": "0.15.0", # Vorlagen: Strukturvorschau, Bearbeiten inkl. Split-Sessions + Beschreibung @@ -42,6 +42,14 @@ MODULE_VERSIONS = { } CHANGELOG = [ + { + "version": "0.8.166", + "date": "2026-05-22", + "changes": [ + "KI Schnellanlage: Suche und Anlage kombiniert (Picker + Übungsliste); Suchstring → Titel/Skizze; Rich-Text-Entwurf bearbeitbar vor Speichern.", + "Übungsliste: Schalter „KI-Anlage“ für direkten Einstieg ohne leere Trefferliste.", + ], + }, { "version": "0.8.165", "date": "2026-05-31", diff --git a/docs/HANDOVER.md b/docs/HANDOVER.md index 8d31294..38485c8 100644 --- a/docs/HANDOVER.md +++ b/docs/HANDOVER.md @@ -1,7 +1,7 @@ # Shinkan Jinkendo – Entwicklungsstand & Handover **Stand:** 2026-05-31 -**App-Version / DB-Schema:** App **`0.8.163`** (KI Anleitung `exercise_instruction_rewrite`); DB **`20260531071`** — maßgeblich **`backend/version.py`**. +**App-Version / DB-Schema:** App **`0.8.166`** (KI Schnellanlage Suche+Anlage); DB **`20260531071`** — maßgeblich **`backend/version.py`**. Diese Datei ist die **Einstiegs-Doku für neue Chat-Sessions**: Anforderungen im Detail stehen in `.claude/docs/` (siehe unten); hier der **implementierte Stand**, **Medien-Meilenstein** und **sinnvolle nächste Schritte**. @@ -89,7 +89,7 @@ Das Schema ist gegenüber dem Code zurück: Migration **`022_skills_schema_compl - **Varianten:** Speichern in der **Aktionsleiste** persistiert zuerst geänderte Varianten (`persistPendingVariantChanges`), dann Übungs-Stammdaten; „Variante anlegen“ als `type="button"` ohne verschachteltes Formular (`createVariantFromDraft`) - **Governance (Übungen):** Owner = `created_by`; Bearbeiten = Ersteller, Plattform-Admin oder `can_plan_in_club` bei `visibility=club`; Löschen `club` = nur `club_admin`; Details **`FEATURES_DELIVERED_2026-Q2.md`** §16, **`EXERCISES_API_SPEC.md`** Permissions -### 2.8 KI Assistenz Übungen & Skill-Katalog-Retrieval (Stand **0.8.163**) +### 2.8 KI Assistenz Übungen & Skill-Katalog-Retrieval (Stand **0.8.166**) - **Zielarchitektur (Pflicht fuer Erweiterungen):** `.claude/docs/technical/AI_PROMPT_TARGET_ARCHITECTURE.md` — Kontext-Arten, Composition, Einbindung Planung/Rahmen; Phasenplan P0–P4. - **Doku:** Umsetzung `.claude/docs/working/AI_EXERCISE_IMPLEMENTATION_PLAN.md`; Profil-/JSON-Konzept `.claude/docs/working/AI_SKILL_RETRIEVAL_PROFILES_SPEC.md`; Ist-Prompt/UI **`AI_PROMPT_SYSTEM_SPEC.md`**; API-Felder **`KI_FEATURES_SPEC.md`** §5.2 @@ -99,7 +99,8 @@ Das Schema ist gegenüber dem Code zurück: Migration **`022_skills_schema_compl - **API:** `POST /api/exercises/ai/suggest` — **`include_instructions`**, Body **`preparation`**, **`trainer_notes`**; Response **`instructions.fields`**; **`POST …/ai/regenerate`** mit **`instructions`** in `regenerate` - **Pflege:** Superadmin **`/admin/ai-prompts`**, **`/admin/ai-skill-retrieval`** - **Diagnose:** **`SHINKAN_AI_DEBUG=1`** — Logs `shinkan.exercise_ai`, `shinkan.openrouter` -- **Frontend:** Tab **Anleitung** — **„KI: Anleitung überarbeiten“**; Vorschau-Dialog pro Feld; Kurzfassung/Fähigkeiten unverändert (**`ExerciseFormPageRoot.jsx`**) +- **Frontend Formular:** Tab **Anleitung** — **„KI: Anleitung überarbeiten“**; Vorschau-Dialog pro Feld (**`ExerciseFormPageRoot.jsx`**) +- **Frontend Schnellanlage:** **`ExercisePickerModal`** (Planung/Rahmen) — Volltextsuche; bei keinem Treffer **„Mit KI anlegen“** (Suchstring → Titel/Skizze); Entwurf im **Rich-Text-Dialog** bearbeiten, dann speichern & übernehmen. **`ExercisesListPageRoot`** — gleiches Muster + Schalter **„KI-Anlage“** in der Suchleiste. --- diff --git a/frontend/src/components/ExerciseAiQuickCreateOffer.jsx b/frontend/src/components/ExerciseAiQuickCreateOffer.jsx new file mode 100644 index 0000000..ed03333 --- /dev/null +++ b/frontend/src/components/ExerciseAiQuickCreateOffer.jsx @@ -0,0 +1,118 @@ +import React from 'react' + +/** + * Inline-Angebot: aus Suchstring neue Übung per KI anlegen (Fokusbereich + optional Titel/Skizze). + */ +export default function ExerciseAiQuickCreateOffer({ + searchLabel, + title, + onTitleChange, + sketch, + onSketchChange, + focusAreaId, + onFocusAreaChange, + focusAreas = [], + catalogsReady = true, + busy = false, + error = '', + onRunAi, + showSketchField = false, + hint, +}) { + const canRun = + !busy && + (title || '').trim().length >= 3 && + (sketch || '').trim().length > 0 && + focusAreaId + + return ( +
+ + Keine passende Übung gefunden + +

+ {hint || + (searchLabel + ? `Für „${searchLabel}“ lässt sich eine neue Übung mit KI vorschlagen — Texte danach bearbeiten und speichern.` + : 'Neue Übung mit KI vorschlagen — Texte danach bearbeiten und speichern.')} +

+ +
+
+ + onTitleChange(e.target.value)} + autoComplete="off" + maxLength={300} + placeholder="Titel der neuen Übung" + /> +
+ +
+ + +
+ + {showSketchField ? ( +
+ +