{
"event": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Application\/PipelineStepService.php"
}
}
{
"tool_response": {
"type": "text",
"file": {
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Application\/PipelineStepService.php",
"content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Application;\n\n\/\/ @responsibility: Service für Pipeline-Step-Operationen (Toggle, Konfiguration)\n\nuse Infrastructure\\AI\\ModelRegistry;\nuse Infrastructure\\Config\\PipelineStepConfig;\nuse Infrastructure\\Persistence\\PipelineRepository;\n\nfinal class PipelineStepService\n{\n public function __construct(\n private PipelineRepository $repository,\n private ModelRegistry $modelRegistry\n ) {\n }\n\n \/**\n * Toggle a step's enabled status.\n *\n * @return bool True if toggled successfully\n *\/\n public function toggleStep(int $pipelineId, int $stepId): bool\n {\n $pipeline = $this->repository->findById($pipelineId);\n\n if ($pipeline === null) {\n return false;\n }\n\n foreach ($pipeline['steps'] as $step) {\n if ((int) $step['id'] === $stepId) {\n $this->repository->updateStep($stepId, [\n 'enabled' => $step['enabled'] ? 0 : 1,\n ]);\n\n return true;\n }\n }\n\n return false;\n }\n\n \/**\n * Update the model for a step.\n *\n * @return array{success: bool, error?: string, model?: string, label?: string}\n *\/\n public function updateModel(int $pipelineId, int $stepId, string $model): array\n {\n $pipeline = $this->repository->findById($pipelineId);\n\n if ($pipeline === null) {\n return ['success' => false, 'error' => 'Pipeline nicht gefunden'];\n }\n\n $model = trim($model);\n\n if ($model === '' || !$this->modelRegistry->isValid($model)) {\n return ['success' => false, 'error' => 'Ungültiges Modell'];\n }\n\n foreach ($pipeline['steps'] as $step) {\n if ((int) $step['id'] === $stepId) {\n $config = $step['config'] ?? [];\n\n \/\/ Determine provider from model\n $provider = $this->modelRegistry->isLocal($model) ? 'ollama' : 'anthropic';\n\n \/\/ Update config with new model\n $config['model'] = $this->modelRegistry->isLocal($model)\n ? substr($model, 7) \/\/ Remove 'ollama:' prefix\n : $model;\n $config['provider'] = $provider;\n\n $this->repository->updateStep($stepId, [\n 'config' => $config,\n ]);\n\n return [\n 'success' => true,\n 'model' => $model,\n 'label' => $this->modelRegistry->getLabel($model),\n ];\n }\n }\n\n return ['success' => false, 'error' => 'Schritt nicht gefunden'];\n }\n\n \/**\n * Update the collection for a step.\n *\n * @return array{success: bool, error?: string, collection?: string, label?: string}\n *\/\n public function updateCollection(int $pipelineId, int $stepId, string $collection): array\n {\n $pipeline = $this->repository->findById($pipelineId);\n\n if ($pipeline === null) {\n return ['success' => false, 'error' => 'Pipeline nicht gefunden'];\n }\n\n $collection = trim($collection);\n $validCollections = array_keys(PipelineStepConfig::getCollections());\n\n if ($collection === '' || !in_array($collection, $validCollections, true)) {\n return ['success' => false, 'error' => 'Ungültige Collection'];\n }\n\n foreach ($pipeline['steps'] as $step) {\n if ((int) $step['id'] === $stepId) {\n $config = $step['config'] ?? [];\n $config['collection'] = $collection;\n\n $this->repository->updateStep($stepId, [\n 'config' => $config,\n ]);\n\n $collections = PipelineStepConfig::getCollections();\n\n return [\n 'success' => true,\n 'collection' => $collection,\n 'label' => $collections[$collection] ?? $collection,\n ];\n }\n }\n\n return ['success' => false, 'error' => 'Schritt nicht gefunden'];\n }\n\n \/**\n * Create default steps for a new pipeline.\n *\/\n public function createDefaultSteps(int $pipelineId): void\n {\n foreach (PipelineStepConfig::getDefaultSteps() as $step) {\n $this->repository->addStep($pipelineId, $step);\n }\n }\n}\n",
"numLines": 146,
"startLine": 1,
"totalLines": 146
}
}
}