This commit is contained in:
team3
2026-06-29 17:11:23 +02:00
parent 87fc9b209a
commit 12f97031e8
7 changed files with 330 additions and 38 deletions

View File

@@ -1,6 +1,6 @@
<script setup>
import { ref, computed, watch, onMounted } from 'vue'
import { fetchGuides, fetchTopics, createTopic as apiCreateTopic, deleteTopic as apiDeleteTopic, createGuide as apiCreate, deleteGuide, cancelGuide as apiCancel, fetchBausteineStatus, fetchActiveBausteine, createBausteine as apiCreateBausteine, cancelBausteine as apiCancelBausteine, deleteBausteine as apiDeleteBausteine, fetchProviders, fetchStats, fetchTopicFortschritt, fetchGuideLocks, fetchGuideSteps, fetchFolders, updateQuelle as apiUpdateQuelle } from './api.js'
import { fetchGuides, fetchTopics, createTopic as apiCreateTopic, deleteTopic as apiDeleteTopic, createGuide as apiCreate, deleteGuide, cancelGuide as apiCancel, fetchBausteineStatus, fetchActiveBausteine, createBausteine as apiCreateBausteine, resetBausteineAbStep as apiResetBausteineAbStep, cancelBausteine as apiCancelBausteine, deleteBausteine as apiDeleteBausteine, fetchProviders, fetchStats, fetchTopicFortschritt, fetchGuideLocks, fetchGuideSteps, fetchFolders, updateQuelle as apiUpdateQuelle } from './api.js'
import { usePolling } from './composables/usePolling.js'
import TopicSidebar from './components/TopicSidebar.vue'
import TopicDetail from './components/TopicDetail.vue'
@@ -21,7 +21,7 @@ const darkMode = ref(
? window.matchMedia('(prefers-color-scheme: dark)').matches
: localStorage.getItem('darkMode') === 'true',
)
const EMPTY_BAUSTEINE = { ready: false, generating: false, progress: null, error: null, partial: false, steps: [] }
const EMPTY_BAUSTEINE = { ready: false, generating: false, progress: null, error: null, partial: false, steps: [], feine_steps: [] }
const bausteine = ref({ ...EMPTY_BAUSTEINE })
const activeBausteine = ref([])
const provider = ref(localStorage.getItem('provider') || 'claude')
@@ -227,12 +227,24 @@ async function handleResetBausteine() {
await loadBausteine()
}
async function handleBausteineClick({ instructions, abPhase = null }) {
async function handleResetAbStep(step) {
if (!selectedTopic.value) return
uiError.value = null
try {
// Quelle ist hier schon festgeschrieben; nur abPhase steuert den Re-Run-Umfang.
await apiCreateBausteine(selectedTopic.value, instructions, provider.value, undefined, undefined, abPhase)
await apiResetBausteineAbStep(selectedTopic.value, step) // nur zurücksetzen, kein Neu-Generieren
} catch (e) {
uiError.value = e.message
return
}
await loadBausteine()
}
async function handleBausteineClick({ instructions, abPhase = null, abStep = null }) {
if (!selectedTopic.value) return
uiError.value = null
try {
// Quelle ist hier schon festgeschrieben; abPhase/abStep steuern den Re-Run-Umfang.
await apiCreateBausteine(selectedTopic.value, instructions, provider.value, undefined, undefined, abPhase, abStep)
} catch (e) {
uiError.value = e.message
return
@@ -428,7 +440,17 @@ onMounted(async () => {
<BausteineUebersicht
v-if="selectedTopic && bausteineView"
:topic="selectedTopic"
:steps="bausteine.feine_steps || []"
:generating="bausteine.generating"
:progress="bausteine.progress"
:ready="bausteine.ready"
:partial="bausteine.partial"
@close="bausteineView = false"
@restartFrom="(i) => handleBausteineClick({ instructions: '', abStep: i })"
@resetFrom="handleResetAbStep"
@restartAll="() => handleBausteineClick({ abPhase: bausteine.ready ? 1 : null })"
@removeAll="handleResetBausteine"
@cancel="handleCancelBausteine"
/>
<ElementsOverview
v-else-if="selectedTopic && elementsView"