Protokoll #15814

ID15814
Zeitstempel2025-12-25 16:57:02.944109
Clientroot
IP145.224.72.140
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens9,939 (Input: 2,474, Output: 7,465)
Dauer151 ms
Request-Zeit2025-12-25 16:57:02.944109
Response-Zeit2025-12-25 16:57:03.094710

Request

{
    "event": "PreToolUse",
    "tool_name": "Edit",
    "tool_input": {
        "file_path": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Domain\/Entity\/TaskResult.php",
        "old_string": "    \/\/ Getters\n    public function getId(): ?int\n    {\n        return $this->id;\n    }\n\n    public function getTaskId(): int\n    {\n        return $this->taskId;\n    }\n\n    public function getAssignmentId(): ?int\n    {\n        return $this->assignmentId;\n    }\n\n    public function getExecutor(): string\n    {\n        return $this->executor;\n    }\n\n    public function getExecutorType(): AssigneeType\n    {\n        return $this->executorType;\n    }\n\n    public function getModelName(): ?string\n    {\n        return $this->modelName;\n    }\n\n    public function getRequest(): ?string\n    {\n        return $this->request;\n    }\n\n    public function getResponse(): ?string\n    {\n        return $this->response;\n    }\n\n    public function getRequestTimestamp(): \\DateTimeImmutable\n    {\n        return $this->requestTimestamp;\n    }\n\n    public function getResponseTimestamp(): ?\\DateTimeImmutable\n    {\n        return $this->responseTimestamp;\n    }\n\n    public function getDurationMs(): ?int\n    {\n        return $this->durationMs;\n    }\n\n    public function getTokensInput(): ?int\n    {\n        return $this->tokensInput;\n    }\n\n    public function getTokensOutput(): ?int\n    {\n        return $this->tokensOutput;\n    }\n\n    public function getTokensTotal(): ?int\n    {\n        return $this->tokensTotal;\n    }\n\n    public function getCostUsd(): ?float\n    {\n        return $this->costUsd;\n    }\n\n    public function getStatus(): string\n    {\n        return $this->status;\n    }\n\n    public function getErrorMessage(): ?string\n    {\n        return $this->errorMessage;\n    }\n\n    public function getCreatedAt(): \\DateTimeImmutable\n    {\n        return $this->createdAt;\n    }\n\n    \/\/ Setters\n    public function setId(int $id): self\n    {\n        $this->id = $id;\n\n        return $this;\n    }\n\n    public function setTaskId(int $taskId): self\n    {\n        $this->taskId = $taskId;\n\n        return $this;\n    }\n\n    public function setAssignmentId(?int $assignmentId): self\n    {\n        $this->assignmentId = $assignmentId;\n\n        return $this;\n    }\n\n    public function setExecutor(string $executor): self\n    {\n        $this->executor = $executor;\n\n        return $this;\n    }\n\n    public function setExecutorType(AssigneeType $executorType): self\n    {\n        $this->executorType = $executorType;\n\n        return $this;\n    }\n\n    public function setModelName(?string $modelName): self\n    {\n        $this->modelName = $modelName;\n\n        return $this;\n    }\n\n    public function setRequest(?string $request): self\n    {\n        $this->request = $request;\n\n        return $this;\n    }\n\n    public function setResponse(?string $response): self\n    {\n        $this->response = $response;\n        $this->responseTimestamp = new \\DateTimeImmutable();\n        $this->calculateDuration();\n\n        return $this;\n    }\n\n    public function setRequestTimestamp(\\DateTimeImmutable $requestTimestamp): self\n    {\n        $this->requestTimestamp = $requestTimestamp;\n\n        return $this;\n    }\n\n    public function setResponseTimestamp(?\\DateTimeImmutable $responseTimestamp): self\n    {\n        $this->responseTimestamp = $responseTimestamp;\n        $this->calculateDuration();\n\n        return $this;\n    }\n\n    public function setDurationMs(?int $durationMs): self\n    {\n        $this->durationMs = $durationMs;\n\n        return $this;\n    }\n\n    public function setTokensInput(?int $tokensInput): self\n    {\n        $this->tokensInput = $tokensInput;\n        $this->calculateTotalTokens();\n\n        return $this;\n    }\n\n    public function setTokensOutput(?int $tokensOutput): self\n    {\n        $this->tokensOutput = $tokensOutput;\n        $this->calculateTotalTokens();\n\n        return $this;\n    }\n\n    public function setTokensTotal(?int $tokensTotal): self\n    {\n        $this->tokensTotal = $tokensTotal;\n\n        return $this;\n    }\n\n    public function setCostUsd(?float $costUsd): self\n    {\n        $this->costUsd = $costUsd;\n\n        return $this;\n    }\n\n    public function setStatus(string $status): self\n    {\n        $this->status = $status;\n\n        return $this;\n    }\n\n    public function setErrorMessage(?string $errorMessage): self\n    {\n        $this->errorMessage = $errorMessage;\n        if ($errorMessage !== null) {\n            $this->status = 'error';\n        }\n\n        return $this;\n    }\n\n    public function setCreatedAt(\\DateTimeImmutable $createdAt): self\n    {\n        $this->createdAt = $createdAt;\n\n        return $this;\n    }\n\n    private function calculateDuration(): void\n    {\n        if ($this->responseTimestamp !== null) {\n            $diff = $this->responseTimestamp->getTimestamp() - $this->requestTimestamp->getTimestamp();\n            $this->durationMs = $diff * 1000;\n        }\n    }\n\n    private function calculateTotalTokens(): void\n    {\n        if ($this->tokensInput !== null && $this->tokensOutput !== null) {\n            $this->tokensTotal = $this->tokensInput + $this->tokensOutput;\n        }\n    }\n\n    public function estimateTokens(): void\n    {\n        if ($this->request !== null) {\n            $this->tokensInput = max(1, (int) (strlen($this->request) \/ 4));\n        }\n        if ($this->response !== null) {\n            $this->tokensOutput = max(1, (int) (strlen($this->response) \/ 4));\n        }\n        $this->calculateTotalTokens();\n    }",
        "new_string": "    \/\/ Factory Methods\n    public static function builder(int $taskId, string $executor, AssigneeType $executorType): TaskResultBuilder\n    {\n        return new TaskResultBuilder($taskId, $executor, $executorType);\n    }\n\n    \/\/ Getters - Only for necessary access\n    public function id(): ?int\n    {\n        return $this->id;\n    }\n\n    public function taskId(): int\n    {\n        return $this->taskId;\n    }\n\n    public function assignmentId(): ?int\n    {\n        return $this->assignmentId;\n    }\n\n    public function executor(): string\n    {\n        return $this->executor;\n    }\n\n    public function executorType(): AssigneeType\n    {\n        return $this->executorType;\n    }\n\n    public function modelName(): ?string\n    {\n        return $this->modelName;\n    }\n\n    public function request(): ?string\n    {\n        return $this->request;\n    }\n\n    public function response(): ?string\n    {\n        return $this->response;\n    }\n\n    public function duration(): ExecutionDuration\n    {\n        return $this->duration;\n    }\n\n    public function metrics(): ExecutionMetrics\n    {\n        return $this->metrics;\n    }\n\n    public function status(): ResultStatus\n    {\n        return $this->status;\n    }\n\n    public function errorMessage(): ?string\n    {\n        return $this->errorMessage;\n    }\n\n    public function createdAt(): \\DateTimeImmutable\n    {\n        return $this->createdAt;\n    }\n\n    \/\/ Setter only for infrastructure (persistence)\n    public function setId(int $id): void\n    {\n        $this->id = $id;\n    }\n\n    \/\/ Domain Logic\n    public function isSuccess(): bool\n    {\n        return $this->status === ResultStatus::SUCCESS;\n    }\n\n    public function hasError(): bool\n    {\n        return $this->status === ResultStatus::ERROR;\n    }\n\n    public function hasModel(): bool\n    {\n        return $this->modelName !== null;\n    }\n\n    public function summary(): string\n    {\n        $parts = [\n            $this->executor,\n            $this->status->label(),\n        ];\n\n        if ($this->modelName !== null) {\n            $parts[] = \"({$this->modelName})\";\n        }\n\n        return implode(' - ', $parts);\n    }\n\n    \/\/ Legacy getters for backward compatibility (deprecated)\n    public function getId(): ?int\n    {\n        return $this->id;\n    }\n\n    public function getTaskId(): int\n    {\n        return $this->taskId;\n    }\n\n    public function getAssignmentId(): ?int\n    {\n        return $this->assignmentId;\n    }\n\n    public function getExecutor(): string\n    {\n        return $this->executor;\n    }\n\n    public function getExecutorType(): AssigneeType\n    {\n        return $this->executorType;\n    }\n\n    public function getModelName(): ?string\n    {\n        return $this->modelName;\n    }\n\n    public function getRequest(): ?string\n    {\n        return $this->request;\n    }\n\n    public function getResponse(): ?string\n    {\n        return $this->response;\n    }\n\n    public function getRequestTimestamp(): \\DateTimeImmutable\n    {\n        return $this->duration->requestedAt();\n    }\n\n    public function getResponseTimestamp(): ?\\DateTimeImmutable\n    {\n        return $this->duration->respondedAt();\n    }\n\n    public function getDurationMs(): ?int\n    {\n        return $this->duration->durationMs();\n    }\n\n    public function getTokensInput(): ?int\n    {\n        return $this->metrics->tokens()->input();\n    }\n\n    public function getTokensOutput(): ?int\n    {\n        return $this->metrics->tokens()->output();\n    }\n\n    public function getTokensTotal(): ?int\n    {\n        return $this->metrics->tokens()->total();\n    }\n\n    public function getCostUsd(): ?float\n    {\n        return $this->metrics->costUsd();\n    }\n\n    public function getStatus(): string\n    {\n        return $this->status->value;\n    }\n\n    public function getErrorMessage(): ?string\n    {\n        return $this->errorMessage;\n    }\n\n    public function getCreatedAt(): \\DateTimeImmutable\n    {\n        return $this->createdAt;\n    }"
    }
}

Response

{
    "tool_response": {
        "filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Domain\/Entity\/TaskResult.php",
        "oldString": "    \/\/ Getters\n    public function getId(): ?int\n    {\n        return $this->id;\n    }\n\n    public function getTaskId(): int\n    {\n        return $this->taskId;\n    }\n\n    public function getAssignmentId(): ?int\n    {\n        return $this->assignmentId;\n    }\n\n    public function getExecutor(): string\n    {\n        return $this->executor;\n    }\n\n    public function getExecutorType(): AssigneeType\n    {\n        return $this->executorType;\n    }\n\n    public function getModelName(): ?string\n    {\n        return $this->modelName;\n    }\n\n    public function getRequest(): ?string\n    {\n        return $this->request;\n    }\n\n    public function getResponse(): ?string\n    {\n        return $this->response;\n    }\n\n    public function getRequestTimestamp(): \\DateTimeImmutable\n    {\n        return $this->requestTimestamp;\n    }\n\n    public function getResponseTimestamp(): ?\\DateTimeImmutable\n    {\n        return $this->responseTimestamp;\n    }\n\n    public function getDurationMs(): ?int\n    {\n        return $this->durationMs;\n    }\n\n    public function getTokensInput(): ?int\n    {\n        return $this->tokensInput;\n    }\n\n    public function getTokensOutput(): ?int\n    {\n        return $this->tokensOutput;\n    }\n\n    public function getTokensTotal(): ?int\n    {\n        return $this->tokensTotal;\n    }\n\n    public function getCostUsd(): ?float\n    {\n        return $this->costUsd;\n    }\n\n    public function getStatus(): string\n    {\n        return $this->status;\n    }\n\n    public function getErrorMessage(): ?string\n    {\n        return $this->errorMessage;\n    }\n\n    public function getCreatedAt(): \\DateTimeImmutable\n    {\n        return $this->createdAt;\n    }\n\n    \/\/ Setters\n    public function setId(int $id): self\n    {\n        $this->id = $id;\n\n        return $this;\n    }\n\n    public function setTaskId(int $taskId): self\n    {\n        $this->taskId = $taskId;\n\n        return $this;\n    }\n\n    public function setAssignmentId(?int $assignmentId): self\n    {\n        $this->assignmentId = $assignmentId;\n\n        return $this;\n    }\n\n    public function setExecutor(string $executor): self\n    {\n        $this->executor = $executor;\n\n        return $this;\n    }\n\n    public function setExecutorType(AssigneeType $executorType): self\n    {\n        $this->executorType = $executorType;\n\n        return $this;\n    }\n\n    public function setModelName(?string $modelName): self\n    {\n        $this->modelName = $modelName;\n\n        return $this;\n    }\n\n    public function setRequest(?string $request): self\n    {\n        $this->request = $request;\n\n        return $this;\n    }\n\n    public function setResponse(?string $response): self\n    {\n        $this->response = $response;\n        $this->responseTimestamp = new \\DateTimeImmutable();\n        $this->calculateDuration();\n\n        return $this;\n    }\n\n    public function setRequestTimestamp(\\DateTimeImmutable $requestTimestamp): self\n    {\n        $this->requestTimestamp = $requestTimestamp;\n\n        return $this;\n    }\n\n    public function setResponseTimestamp(?\\DateTimeImmutable $responseTimestamp): self\n    {\n        $this->responseTimestamp = $responseTimestamp;\n        $this->calculateDuration();\n\n        return $this;\n    }\n\n    public function setDurationMs(?int $durationMs): self\n    {\n        $this->durationMs = $durationMs;\n\n        return $this;\n    }\n\n    public function setTokensInput(?int $tokensInput): self\n    {\n        $this->tokensInput = $tokensInput;\n        $this->calculateTotalTokens();\n\n        return $this;\n    }\n\n    public function setTokensOutput(?int $tokensOutput): self\n    {\n        $this->tokensOutput = $tokensOutput;\n        $this->calculateTotalTokens();\n\n        return $this;\n    }\n\n    public function setTokensTotal(?int $tokensTotal): self\n    {\n        $this->tokensTotal = $tokensTotal;\n\n        return $this;\n    }\n\n    public function setCostUsd(?float $costUsd): self\n    {\n        $this->costUsd = $costUsd;\n\n        return $this;\n    }\n\n    public function setStatus(string $status): self\n    {\n        $this->status = $status;\n\n        return $this;\n    }\n\n    public function setErrorMessage(?string $errorMessage): self\n    {\n        $this->errorMessage = $errorMessage;\n        if ($errorMessage !== null) {\n            $this->status = 'error';\n        }\n\n        return $this;\n    }\n\n    public function setCreatedAt(\\DateTimeImmutable $createdAt): self\n    {\n        $this->createdAt = $createdAt;\n\n        return $this;\n    }\n\n    private function calculateDuration(): void\n    {\n        if ($this->responseTimestamp !== null) {\n            $diff = $this->responseTimestamp->getTimestamp() - $this->requestTimestamp->getTimestamp();\n            $this->durationMs = $diff * 1000;\n        }\n    }\n\n    private function calculateTotalTokens(): void\n    {\n        if ($this->tokensInput !== null && $this->tokensOutput !== null) {\n            $this->tokensTotal = $this->tokensInput + $this->tokensOutput;\n        }\n    }\n\n    public function estimateTokens(): void\n    {\n        if ($this->request !== null) {\n            $this->tokensInput = max(1, (int) (strlen($this->request) \/ 4));\n        }\n        if ($this->response !== null) {\n            $this->tokensOutput = max(1, (int) (strlen($this->response) \/ 4));\n        }\n        $this->calculateTotalTokens();\n    }",
        "newString": "    \/\/ Factory Methods\n    public static function builder(int $taskId, string $executor, AssigneeType $executorType): TaskResultBuilder\n    {\n        return new TaskResultBuilder($taskId, $executor, $executorType);\n    }\n\n    \/\/ Getters - Only for necessary access\n    public function id(): ?int\n    {\n        return $this->id;\n    }\n\n    public function taskId(): int\n    {\n        return $this->taskId;\n    }\n\n    public function assignmentId(): ?int\n    {\n        return $this->assignmentId;\n    }\n\n    public function executor(): string\n    {\n        return $this->executor;\n    }\n\n    public function executorType(): AssigneeType\n    {\n        return $this->executorType;\n    }\n\n    public function modelName(): ?string\n    {\n        return $this->modelName;\n    }\n\n    public function request(): ?string\n    {\n        return $this->request;\n    }\n\n    public function response(): ?string\n    {\n        return $this->response;\n    }\n\n    public function duration(): ExecutionDuration\n    {\n        return $this->duration;\n    }\n\n    public function metrics(): ExecutionMetrics\n    {\n        return $this->metrics;\n    }\n\n    public function status(): ResultStatus\n    {\n        return $this->status;\n    }\n\n    public function errorMessage(): ?string\n    {\n        return $this->errorMessage;\n    }\n\n    public function createdAt(): \\DateTimeImmutable\n    {\n        return $this->createdAt;\n    }\n\n    \/\/ Setter only for infrastructure (persistence)\n    public function setId(int $id): void\n    {\n        $this->id = $id;\n    }\n\n    \/\/ Domain Logic\n    public function isSuccess(): bool\n    {\n        return $this->status === ResultStatus::SUCCESS;\n    }\n\n    public function hasError(): bool\n    {\n        return $this->status === ResultStatus::ERROR;\n    }\n\n    public function hasModel(): bool\n    {\n        return $this->modelName !== null;\n    }\n\n    public function summary(): string\n    {\n        $parts = [\n            $this->executor,\n            $this->status->label(),\n        ];\n\n        if ($this->modelName !== null) {\n            $parts[] = \"({$this->modelName})\";\n        }\n\n        return implode(' - ', $parts);\n    }\n\n    \/\/ Legacy getters for backward compatibility (deprecated)\n    public function getId(): ?int\n    {\n        return $this->id;\n    }\n\n    public function getTaskId(): int\n    {\n        return $this->taskId;\n    }\n\n    public function getAssignmentId(): ?int\n    {\n        return $this->assignmentId;\n    }\n\n    public function getExecutor(): string\n    {\n        return $this->executor;\n    }\n\n    public function getExecutorType(): AssigneeType\n    {\n        return $this->executorType;\n    }\n\n    public function getModelName(): ?string\n    {\n        return $this->modelName;\n    }\n\n    public function getRequest(): ?string\n    {\n        return $this->request;\n    }\n\n    public function getResponse(): ?string\n    {\n        return $this->response;\n    }\n\n    public function getRequestTimestamp(): \\DateTimeImmutable\n    {\n        return $this->duration->requestedAt();\n    }\n\n    public function getResponseTimestamp(): ?\\DateTimeImmutable\n    {\n        return $this->duration->respondedAt();\n    }\n\n    public function getDurationMs(): ?int\n    {\n        return $this->duration->durationMs();\n    }\n\n    public function getTokensInput(): ?int\n    {\n        return $this->metrics->tokens()->input();\n    }\n\n    public function getTokensOutput(): ?int\n    {\n        return $this->metrics->tokens()->output();\n    }\n\n    public function getTokensTotal(): ?int\n    {\n        return $this->metrics->tokens()->total();\n    }\n\n    public function getCostUsd(): ?float\n    {\n        return $this->metrics->costUsd();\n    }\n\n    public function getStatus(): string\n    {\n        return $this->status->value;\n    }\n\n    public function getErrorMessage(): ?string\n    {\n        return $this->errorMessage;\n    }\n\n    public function getCreatedAt(): \\DateTimeImmutable\n    {\n        return $this->createdAt;\n    }",
        "originalFile": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Domain\\Entity;\n\n\/\/ @responsibility: Task-Ergebnis-Entität mit Rich Domain Logic\n\nuse Domain\\ValueObject\\AssigneeType;\nuse Domain\\ValueObject\\ExecutionDuration;\nuse Domain\\ValueObject\\ExecutionMetrics;\nuse Domain\\ValueObject\\ResultStatus;\n\nclass TaskResult\n{\n    private ?int $id = null;\n    private \\DateTimeImmutable $createdAt;\n\n    public function __construct(\n        private int $taskId,\n        private ?int $assignmentId,\n        private string $executor,\n        private AssigneeType $executorType,\n        private ?string $modelName,\n        private ?string $request,\n        private ?string $response,\n        private ExecutionDuration $duration,\n        private ExecutionMetrics $metrics,\n        private ResultStatus $status,\n        private ?string $errorMessage\n    ) {\n        $this->createdAt = new \\DateTimeImmutable();\n    }\n\n    \/\/ Getters\n    public function getId(): ?int\n    {\n        return $this->id;\n    }\n\n    public function getTaskId(): int\n    {\n        return $this->taskId;\n    }\n\n    public function getAssignmentId(): ?int\n    {\n        return $this->assignmentId;\n    }\n\n    public function getExecutor(): string\n    {\n        return $this->executor;\n    }\n\n    public function getExecutorType(): AssigneeType\n    {\n        return $this->executorType;\n    }\n\n    public function getModelName(): ?string\n    {\n        return $this->modelName;\n    }\n\n    public function getRequest(): ?string\n    {\n        return $this->request;\n    }\n\n    public function getResponse(): ?string\n    {\n        return $this->response;\n    }\n\n    public function getRequestTimestamp(): \\DateTimeImmutable\n    {\n        return $this->requestTimestamp;\n    }\n\n    public function getResponseTimestamp(): ?\\DateTimeImmutable\n    {\n        return $this->responseTimestamp;\n    }\n\n    public function getDurationMs(): ?int\n    {\n        return $this->durationMs;\n    }\n\n    public function getTokensInput(): ?int\n    {\n        return $this->tokensInput;\n    }\n\n    public function getTokensOutput(): ?int\n    {\n        return $this->tokensOutput;\n    }\n\n    public function getTokensTotal(): ?int\n    {\n        return $this->tokensTotal;\n    }\n\n    public function getCostUsd(): ?float\n    {\n        return $this->costUsd;\n    }\n\n    public function getStatus(): string\n    {\n        return $this->status;\n    }\n\n    public function getErrorMessage(): ?string\n    {\n        return $this->errorMessage;\n    }\n\n    public function getCreatedAt(): \\DateTimeImmutable\n    {\n        return $this->createdAt;\n    }\n\n    \/\/ Setters\n    public function setId(int $id): self\n    {\n        $this->id = $id;\n\n        return $this;\n    }\n\n    public function setTaskId(int $taskId): self\n    {\n        $this->taskId = $taskId;\n\n        return $this;\n    }\n\n    public function setAssignmentId(?int $assignmentId): self\n    {\n        $this->assignmentId = $assignmentId;\n\n        return $this;\n    }\n\n    public function setExecutor(string $executor): self\n    {\n        $this->executor = $executor;\n\n        return $this;\n    }\n\n    public function setExecutorType(AssigneeType $executorType): self\n    {\n        $this->executorType = $executorType;\n\n        return $this;\n    }\n\n    public function setModelName(?string $modelName): self\n    {\n        $this->modelName = $modelName;\n\n        return $this;\n    }\n\n    public function setRequest(?string $request): self\n    {\n        $this->request = $request;\n\n        return $this;\n    }\n\n    public function setResponse(?string $response): self\n    {\n        $this->response = $response;\n        $this->responseTimestamp = new \\DateTimeImmutable();\n        $this->calculateDuration();\n\n        return $this;\n    }\n\n    public function setRequestTimestamp(\\DateTimeImmutable $requestTimestamp): self\n    {\n        $this->requestTimestamp = $requestTimestamp;\n\n        return $this;\n    }\n\n    public function setResponseTimestamp(?\\DateTimeImmutable $responseTimestamp): self\n    {\n        $this->responseTimestamp = $responseTimestamp;\n        $this->calculateDuration();\n\n        return $this;\n    }\n\n    public function setDurationMs(?int $durationMs): self\n    {\n        $this->durationMs = $durationMs;\n\n        return $this;\n    }\n\n    public function setTokensInput(?int $tokensInput): self\n    {\n        $this->tokensInput = $tokensInput;\n        $this->calculateTotalTokens();\n\n        return $this;\n    }\n\n    public function setTokensOutput(?int $tokensOutput): self\n    {\n        $this->tokensOutput = $tokensOutput;\n        $this->calculateTotalTokens();\n\n        return $this;\n    }\n\n    public function setTokensTotal(?int $tokensTotal): self\n    {\n        $this->tokensTotal = $tokensTotal;\n\n        return $this;\n    }\n\n    public function setCostUsd(?float $costUsd): self\n    {\n        $this->costUsd = $costUsd;\n\n        return $this;\n    }\n\n    public function setStatus(string $status): self\n    {\n        $this->status = $status;\n\n        return $this;\n    }\n\n    public function setErrorMessage(?string $errorMessage): self\n    {\n        $this->errorMessage = $errorMessage;\n        if ($errorMessage !== null) {\n            $this->status = 'error';\n        }\n\n        return $this;\n    }\n\n    public function setCreatedAt(\\DateTimeImmutable $createdAt): self\n    {\n        $this->createdAt = $createdAt;\n\n        return $this;\n    }\n\n    private function calculateDuration(): void\n    {\n        if ($this->responseTimestamp !== null) {\n            $diff = $this->responseTimestamp->getTimestamp() - $this->requestTimestamp->getTimestamp();\n            $this->durationMs = $diff * 1000;\n        }\n    }\n\n    private function calculateTotalTokens(): void\n    {\n        if ($this->tokensInput !== null && $this->tokensOutput !== null) {\n            $this->tokensTotal = $this->tokensInput + $this->tokensOutput;\n        }\n    }\n\n    public function estimateTokens(): void\n    {\n        if ($this->request !== null) {\n            $this->tokensInput = max(1, (int) (strlen($this->request) \/ 4));\n        }\n        if ($this->response !== null) {\n            $this->tokensOutput = max(1, (int) (strlen($this->response) \/ 4));\n        }\n        $this->calculateTotalTokens();\n    }\n\n    public function toArray(): array\n    {\n        return [\n            'id' => $this->id,\n            'task_id' => $this->taskId,\n            'assignment_id' => $this->assignmentId,\n            'executor' => $this->executor,\n            'executor_type' => $this->executorType->value,\n            'model_name' => $this->modelName,\n            'request' => $this->request,\n            'response' => $this->response,\n            'request_timestamp' => $this->requestTimestamp->format('Y-m-d H:i:s.u'),\n            'response_timestamp' => $this->responseTimestamp?->format('Y-m-d H:i:s.u'),\n            'duration_ms' => $this->durationMs,\n            'tokens_input' => $this->tokensInput,\n            'tokens_output' => $this->tokensOutput,\n            'tokens_total' => $this->tokensTotal,\n            'cost_usd' => $this->costUsd,\n            'status' => $this->status,\n            'error_message' => $this->errorMessage,\n            'created_at' => $this->createdAt->format('Y-m-d H:i:s.u'),\n        ];\n    }\n\n    public static function fromArray(array $data): self\n    {\n        $result = new self();\n\n        if (isset($data['id'])) {\n            $result->setId((int) $data['id']);\n        }\n        if (isset($data['task_id'])) {\n            $result->setTaskId((int) $data['task_id']);\n        }\n        if (isset($data['assignment_id'])) {\n            $result->setAssignmentId((int) $data['assignment_id']);\n        }\n        if (isset($data['executor'])) {\n            $result->setExecutor($data['executor']);\n        }\n        if (isset($data['executor_type'])) {\n            $result->executorType = AssigneeType::from($data['executor_type']);\n        }\n        if (isset($data['model_name'])) {\n            $result->setModelName($data['model_name']);\n        }\n        if (isset($data['request'])) {\n            $result->request = $data['request'];\n        }\n        if (isset($data['response'])) {\n            $result->response = $data['response'];\n        }\n        if (isset($data['request_timestamp'])) {\n            $result->setRequestTimestamp(new \\DateTimeImmutable($data['request_timestamp']));\n        }\n        if (isset($data['response_timestamp'])) {\n            $result->setResponseTimestamp(new \\DateTimeImmutable($data['response_timestamp']));\n        }\n        if (isset($data['duration_ms'])) {\n            $result->setDurationMs((int) $data['duration_ms']);\n        }\n        if (isset($data['tokens_input'])) {\n            $result->tokensInput = (int) $data['tokens_input'];\n        }\n        if (isset($data['tokens_output'])) {\n            $result->tokensOutput = (int) $data['tokens_output'];\n        }\n        if (isset($data['tokens_total'])) {\n            $result->tokensTotal = (int) $data['tokens_total'];\n        }\n        if (isset($data['cost_usd'])) {\n            $result->setCostUsd((float) $data['cost_usd']);\n        }\n        if (isset($data['status'])) {\n            $result->status = $data['status'];\n        }\n        if (isset($data['error_message'])) {\n            $result->errorMessage = $data['error_message'];\n        }\n        if (isset($data['created_at'])) {\n            $result->setCreatedAt(new \\DateTimeImmutable($data['created_at']));\n        }\n\n        return $result;\n    }\n}\n",
        "structuredPatch": [
            {
                "oldStart": 32,
                "oldLines": 258,
                "newStart": 32,
                "newLines": 205,
                "lines": [
                    "         $this->createdAt = new \\DateTimeImmutable();",
                    "     }",
                    " ",
                    "-    \/\/ Getters",
                    "-    public function getId(): ?int",
                    "+    \/\/ Factory Methods",
                    "+    public static function builder(int $taskId, string $executor, AssigneeType $executorType): TaskResultBuilder",
                    "     {",
                    "+        return new TaskResultBuilder($taskId, $executor, $executorType);",
                    "+    }",
                    "+",
                    "+    \/\/ Getters - Only for necessary access",
                    "+    public function id(): ?int",
                    "+    {",
                    "         return $this->id;",
                    "     }",
                    " ",
                    "-    public function getTaskId(): int",
                    "+    public function taskId(): int",
                    "     {",
                    "         return $this->taskId;",
                    "     }",
                    " ",
                    "-    public function getAssignmentId(): ?int",
                    "+    public function assignmentId(): ?int",
                    "     {",
                    "         return $this->assignmentId;",
                    "     }",
                    " ",
                    "-    public function getExecutor(): string",
                    "+    public function executor(): string",
                    "     {",
                    "         return $this->executor;",
                    "     }",
                    " ",
                    "-    public function getExecutorType(): AssigneeType",
                    "+    public function executorType(): AssigneeType",
                    "     {",
                    "         return $this->executorType;",
                    "     }",
                    " ",
                    "-    public function getModelName(): ?string",
                    "+    public function modelName(): ?string",
                    "     {",
                    "         return $this->modelName;",
                    "     }",
                    " ",
                    "-    public function getRequest(): ?string",
                    "+    public function request(): ?string",
                    "     {",
                    "         return $this->request;",
                    "     }",
                    " ",
                    "-    public function getResponse(): ?string",
                    "+    public function response(): ?string",
                    "     {",
                    "         return $this->response;",
                    "     }",
                    " ",
                    "-    public function getRequestTimestamp(): \\DateTimeImmutable",
                    "+    public function duration(): ExecutionDuration",
                    "     {",
                    "-        return $this->requestTimestamp;",
                    "+        return $this->duration;",
                    "     }",
                    " ",
                    "-    public function getResponseTimestamp(): ?\\DateTimeImmutable",
                    "+    public function metrics(): ExecutionMetrics",
                    "     {",
                    "-        return $this->responseTimestamp;",
                    "+        return $this->metrics;",
                    "     }",
                    " ",
                    "-    public function getDurationMs(): ?int",
                    "+    public function status(): ResultStatus",
                    "     {",
                    "-        return $this->durationMs;",
                    "+        return $this->status;",
                    "     }",
                    " ",
                    "-    public function getTokensInput(): ?int",
                    "+    public function errorMessage(): ?string",
                    "     {",
                    "-        return $this->tokensInput;",
                    "+        return $this->errorMessage;",
                    "     }",
                    " ",
                    "-    public function getTokensOutput(): ?int",
                    "+    public function createdAt(): \\DateTimeImmutable",
                    "     {",
                    "-        return $this->tokensOutput;",
                    "+        return $this->createdAt;",
                    "     }",
                    " ",
                    "-    public function getTokensTotal(): ?int",
                    "+    \/\/ Setter only for infrastructure (persistence)",
                    "+    public function setId(int $id): void",
                    "     {",
                    "-        return $this->tokensTotal;",
                    "+        $this->id = $id;",
                    "     }",
                    " ",
                    "-    public function getCostUsd(): ?float",
                    "+    \/\/ Domain Logic",
                    "+    public function isSuccess(): bool",
                    "     {",
                    "-        return $this->costUsd;",
                    "+        return $this->status === ResultStatus::SUCCESS;",
                    "     }",
                    " ",
                    "-    public function getStatus(): string",
                    "+    public function hasError(): bool",
                    "     {",
                    "-        return $this->status;",
                    "+        return $this->status === ResultStatus::ERROR;",
                    "     }",
                    " ",
                    "-    public function getErrorMessage(): ?string",
                    "+    public function hasModel(): bool",
                    "     {",
                    "-        return $this->errorMessage;",
                    "+        return $this->modelName !== null;",
                    "     }",
                    " ",
                    "-    public function getCreatedAt(): \\DateTimeImmutable",
                    "+    public function summary(): string",
                    "     {",
                    "-        return $this->createdAt;",
                    "-    }",
                    "+        $parts = [",
                    "+            $this->executor,",
                    "+            $this->status->label(),",
                    "+        ];",
                    " ",
                    "-    \/\/ Setters",
                    "-    public function setId(int $id): self",
                    "-    {",
                    "-        $this->id = $id;",
                    "+        if ($this->modelName !== null) {",
                    "+            $parts[] = \"({$this->modelName})\";",
                    "+        }",
                    " ",
                    "-        return $this;",
                    "+        return implode(' - ', $parts);",
                    "     }",
                    " ",
                    "-    public function setTaskId(int $taskId): self",
                    "+    \/\/ Legacy getters for backward compatibility (deprecated)",
                    "+    public function getId(): ?int",
                    "     {",
                    "-        $this->taskId = $taskId;",
                    "-",
                    "-        return $this;",
                    "+        return $this->id;",
                    "     }",
                    " ",
                    "-    public function setAssignmentId(?int $assignmentId): self",
                    "+    public function getTaskId(): int",
                    "     {",
                    "-        $this->assignmentId = $assignmentId;",
                    "-",
                    "-        return $this;",
                    "+        return $this->taskId;",
                    "     }",
                    " ",
                    "-    public function setExecutor(string $executor): self",
                    "+    public function getAssignmentId(): ?int",
                    "     {",
                    "-        $this->executor = $executor;",
                    "-",
                    "-        return $this;",
                    "+        return $this->assignmentId;",
                    "     }",
                    " ",
                    "-    public function setExecutorType(AssigneeType $executorType): self",
                    "+    public function getExecutor(): string",
                    "     {",
                    "-        $this->executorType = $executorType;",
                    "-",
                    "-        return $this;",
                    "+        return $this->executor;",
                    "     }",
                    " ",
                    "-    public function setModelName(?string $modelName): self",
                    "+    public function getExecutorType(): AssigneeType",
                    "     {",
                    "-        $this->modelName = $modelName;",
                    "-",
                    "-        return $this;",
                    "+        return $this->executorType;",
                    "     }",
                    " ",
                    "-    public function setRequest(?string $request): self",
                    "+    public function getModelName(): ?string",
                    "     {",
                    "-        $this->request = $request;",
                    "-",
                    "-        return $this;",
                    "+        return $this->modelName;",
                    "     }",
                    " ",
                    "-    public function setResponse(?string $response): self",
                    "+    public function getRequest(): ?string",
                    "     {",
                    "-        $this->response = $response;",
                    "-        $this->responseTimestamp = new \\DateTimeImmutable();",
                    "-        $this->calculateDuration();",
                    "-",
                    "-        return $this;",
                    "+        return $this->request;",
                    "     }",
                    " ",
                    "-    public function setRequestTimestamp(\\DateTimeImmutable $requestTimestamp): self",
                    "+    public function getResponse(): ?string",
                    "     {",
                    "-        $this->requestTimestamp = $requestTimestamp;",
                    "-",
                    "-        return $this;",
                    "+        return $this->response;",
                    "     }",
                    " ",
                    "-    public function setResponseTimestamp(?\\DateTimeImmutable $responseTimestamp): self",
                    "+    public function getRequestTimestamp(): \\DateTimeImmutable",
                    "     {",
                    "-        $this->responseTimestamp = $responseTimestamp;",
                    "-        $this->calculateDuration();",
                    "-",
                    "-        return $this;",
                    "+        return $this->duration->requestedAt();",
                    "     }",
                    " ",
                    "-    public function setDurationMs(?int $durationMs): self",
                    "+    public function getResponseTimestamp(): ?\\DateTimeImmutable",
                    "     {",
                    "-        $this->durationMs = $durationMs;",
                    "-",
                    "-        return $this;",
                    "+        return $this->duration->respondedAt();",
                    "     }",
                    " ",
                    "-    public function setTokensInput(?int $tokensInput): self",
                    "+    public function getDurationMs(): ?int",
                    "     {",
                    "-        $this->tokensInput = $tokensInput;",
                    "-        $this->calculateTotalTokens();",
                    "-",
                    "-        return $this;",
                    "+        return $this->duration->durationMs();",
                    "     }",
                    " ",
                    "-    public function setTokensOutput(?int $tokensOutput): self",
                    "+    public function getTokensInput(): ?int",
                    "     {",
                    "-        $this->tokensOutput = $tokensOutput;",
                    "-        $this->calculateTotalTokens();",
                    "-",
                    "-        return $this;",
                    "+        return $this->metrics->tokens()->input();",
                    "     }",
                    " ",
                    "-    public function setTokensTotal(?int $tokensTotal): self",
                    "+    public function getTokensOutput(): ?int",
                    "     {",
                    "-        $this->tokensTotal = $tokensTotal;",
                    "-",
                    "-        return $this;",
                    "+        return $this->metrics->tokens()->output();",
                    "     }",
                    " ",
                    "-    public function setCostUsd(?float $costUsd): self",
                    "+    public function getTokensTotal(): ?int",
                    "     {",
                    "-        $this->costUsd = $costUsd;",
                    "-",
                    "-        return $this;",
                    "+        return $this->metrics->tokens()->total();",
                    "     }",
                    " ",
                    "-    public function setStatus(string $status): self",
                    "+    public function getCostUsd(): ?float",
                    "     {",
                    "-        $this->status = $status;",
                    "-",
                    "-        return $this;",
                    "+        return $this->metrics->costUsd();",
                    "     }",
                    " ",
                    "-    public function setErrorMessage(?string $errorMessage): self",
                    "+    public function getStatus(): string",
                    "     {",
                    "-        $this->errorMessage = $errorMessage;",
                    "-        if ($errorMessage !== null) {",
                    "-            $this->status = 'error';",
                    "-        }",
                    "-",
                    "-        return $this;",
                    "+        return $this->status->value;",
                    "     }",
                    " ",
                    "-    public function setCreatedAt(\\DateTimeImmutable $createdAt): self",
                    "+    public function getErrorMessage(): ?string",
                    "     {",
                    "-        $this->createdAt = $createdAt;",
                    "-",
                    "-        return $this;",
                    "+        return $this->errorMessage;",
                    "     }",
                    " ",
                    "-    private function calculateDuration(): void",
                    "+    public function getCreatedAt(): \\DateTimeImmutable",
                    "     {",
                    "-        if ($this->responseTimestamp !== null) {",
                    "-            $diff = $this->responseTimestamp->getTimestamp() - $this->requestTimestamp->getTimestamp();",
                    "-            $this->durationMs = $diff * 1000;",
                    "-        }",
                    "+        return $this->createdAt;",
                    "     }",
                    " ",
                    "-    private function calculateTotalTokens(): void",
                    "-    {",
                    "-        if ($this->tokensInput !== null && $this->tokensOutput !== null) {",
                    "-            $this->tokensTotal = $this->tokensInput + $this->tokensOutput;",
                    "-        }",
                    "-    }",
                    "-",
                    "-    public function estimateTokens(): void",
                    "-    {",
                    "-        if ($this->request !== null) {",
                    "-            $this->tokensInput = max(1, (int) (strlen($this->request) \/ 4));",
                    "-        }",
                    "-        if ($this->response !== null) {",
                    "-            $this->tokensOutput = max(1, (int) (strlen($this->response) \/ 4));",
                    "-        }",
                    "-        $this->calculateTotalTokens();",
                    "-    }",
                    "-",
                    "     public function toArray(): array",
                    "     {",
                    "         return ["
                ]
            }
        ],
        "userModified": false,
        "replaceAll": false
    }
}
← Vorheriger Zur Liste Nächster →