Commit graph

3557 commits

Author SHA1 Message Date
Daulet Amirkhanov
3e23c96595 route server tools calls through cognee_client 2025-10-08 18:36:44 +01:00
Daulet Amirkhanov
806298d508 create cognee_client for handling api calls 2025-10-08 18:36:08 +01:00
Daulet Amirkhanov
c54c3546fc chore: add Docker image pull for MCP in start_ui function 2025-10-08 18:18:43 +01:00
Daulet Amirkhanov
583923903c
chore: update cognee-cli to use MCP Docker image from main. Bring back deprecation warnings (#1491)
<!-- .github/pull_request_template.md -->

## Description
<!--
Please provide a clear, human-generated description of the changes in
this PR.
DO NOT use AI-generated descriptions. We want to understand your thought
process and reasoning.
-->

## Type of Change
<!-- Please check the relevant option -->
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Screenshots/Videos (if applicable)
<!-- Add screenshots or videos to help explain your changes -->

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-10-07 22:22:12 +01:00
Daulet Amirkhanov
4b14bd7566
Feat/improve exception raising for better debugging (#1512)
<!-- .github/pull_request_template.md -->

## Description

When raising exceptions, in some places we lose the stack trace, or in
some cases when we raise custom exceptions - we also lose any metadata
from original exception that could help pinpoint the issue.

This PR updates exception throwing to use [`raise ...
from`](https://docs.python.org/3/reference/simple_stmts.html#raise),
which:
1. preserves stack trace
2. when we throw custom exception, indicates that our exception was
caused by XYZ exception

_this is a scoped down version for upcoming release, rest of the changes
are in #1518_

<!--
Please provide a clear, human-generated description of the changes in
this PR.
DO NOT use AI-generated descriptions. We want to understand your thought
process and reasoning.
-->

## Type of Change
<!-- Please check the relevant option -->
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Screenshots/Videos (if applicable)
<!-- Add screenshots or videos to help explain your changes -->

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-10-07 22:19:22 +01:00
Daulet Amirkhanov
4190a7a232
Fix/fix broken health check endpoint (#1516)
<!-- .github/pull_request_template.md -->

## Description
<!--
Please provide a clear, human-generated description of the changes in
this PR.
DO NOT use AI-generated descriptions. We want to understand your thought
process and reasoning.
-->

Cognee health check endpoint, specifically `llm_provider` is broken.

To reproduce: `cognee-cli -ui`:

```
[BACKEND] 2025-10-07T20:05:51.751303 [info     ] JSON extension already loaded or unavailable: Binder exception: Extension: JSON is already loaded. You can check loaded extensions by `CALL SHOW_LOADED_EXTENSIONS() RETURN *`. [cognee.shared.logging_utils]
[BACKEND] 2025-10-07T20:05:51.763217 [error    ] LLM provider health check failed: type object 'LLMGateway' has no attribute 'show_prompt' [cognee.shared.logging_utils] exception_message="type object 'LLMGateway' has no attribute 'show_prompt'" traceback=True
[BACKEND] ╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
[BACKEND] │ /Users/daulet/Desktop/dev/cognee-claude/cognee/api/health.py:197 in check_llm_provider           │
[BACKEND] │                                                                                                  │
[BACKEND] │   194 │   │   │   config = get_llm_config()                                                      │
[BACKEND] │   195 │   │   │                                                                                  │
[BACKEND] │   196 │   │   │   # Test actual API connection with minimal request                              │
[BACKEND] │ ❱ 197 │   │   │   LLMGateway.show_prompt("test", "test.txt")                                     │
[BACKEND] │   198 │   │   │                                                                                  │
[BACKEND] │   199 │   │   │   response_time = int((time.time() - start_time) * 1000)                         │
[BACKEND] │   200 │   │   │   return ComponentHealth(                                                        │
[BACKEND] │                                                                                                  │
[BACKEND] │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
[BACKEND] │ │         config = LLMConfig(                                                                  │ │
[BACKEND] │ │                  │   structured_output_framework='instructor',                               │ │
[BACKEND] │ │                  │   llm_provider='openai',                                                  │ │
[BACKEND] │ │                  │   llm_model='openai/gpt-4o-mini',                                         │ │
[BACKEND] │ │                  │   llm_endpoint='',                                                        │ │
[BACKEND] │ │                  │                                                                           │ │
[BACKEND] │ │                  llm_api_key='sk-proj-UIN_gS06M_6Zy-j4ABRZ6xrr0XR6tV5HyeaRvX4Aq5R3aJ1NNT0XP… │ │
[BACKEND] │ │                  │   llm_api_version=None,                                                   │ │
[BACKEND] │ │                  │   llm_temperature=0.0,                                                    │ │
[BACKEND] │ │                  │   llm_streaming=False,                                                    │ │
[BACKEND] │ │                  │   llm_max_completion_tokens=16384,                                        │ │
[BACKEND] │ │                  │   baml_llm_provider='openai',                                             │ │
[BACKEND] │ │                  │   baml_llm_model='gpt-5-mini',                                            │ │
[BACKEND] │ │                  │   baml_llm_endpoint='',                                                   │ │
[BACKEND] │ │                  │   baml_llm_api_key=None,                                                  │ │
[BACKEND] │ │                  │   baml_llm_temperature=0.0,                                               │ │
[BACKEND] │ │                  │   baml_llm_api_version='',                                                │ │
[BACKEND] │ │                  │   transcription_model='whisper-1',                                        │ │
[BACKEND] │ │                  │   graph_prompt_path='generate_graph_prompt.txt',                          │ │
[BACKEND] │ │                  │   temporal_graph_prompt_path='generate_event_graph_prompt.txt',           │ │
[BACKEND] │ │                  │   event_entity_prompt_path='generate_event_entity_prompt.txt',            │ │
[BACKEND] │ │                  │   llm_rate_limit_enabled=False,                                           │ │
[BACKEND] │ │                  │   llm_rate_limit_requests=60,                                             │ │
[BACKEND] │ │                  │   llm_rate_limit_interval=60,                                             │ │
[BACKEND] │ │                  │   embedding_rate_limit_enabled=False,                                     │ │
[BACKEND] │ │                  │   embedding_rate_limit_requests=60,                                       │ │
[BACKEND] │ │                  │   embedding_rate_limit_interval=60,                                       │ │
[BACKEND] │ │                  │   fallback_api_key='',                                                    │ │
[BACKEND] │ │                  │   fallback_endpoint='',                                                   │ │
[BACKEND] │ │                  │   fallback_model='',                                                      │ │
[BACKEND] │ │                  │   baml_registry=None,                                                     │ │
[BACKEND] │ │                  │                                                                           │ │
[BACKEND] │ │                  cognee_cloud_auth_token='9611fd02214a51f0930ca0d6d445daea63bc5392d85746fb'  │ │
[BACKEND] │ │                  )                                                                           │ │
[BACKEND] │ │              e = AttributeError("type object 'LLMGateway' has no attribute 'show_prompt'")   │ │
[BACKEND] │ │ get_llm_config = <functools._lru_cache_wrapper object at 0x123954f60>                        │ │
[BACKEND] │ │  response_time = 0                                                                           │ │
[BACKEND] │ │           self = <cognee.api.health.HealthChecker object at 0x33f442980>                     │ │
[BACKEND] │ │     start_time = 1759867551.7631629                                                          │ │
[BACKEND] │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
[BACKEND] ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
[BACKEND] AttributeError: type object 'LLMGateway' has no attribute 'show_prompt'
[BACKEND] EmbeddingRateLimiter initialized: enabled=False, requests_limit=60, interval_seconds=60
```

This is due to deprecated LLMGateway method that is no longer there,
which was used in healthcheck.

## Type of Change
<!-- Please check the relevant option -->
- [x] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Screenshots/Videos (if applicable)
<!-- Add screenshots or videos to help explain your changes -->

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-10-07 22:19:09 +01:00
Daulet Amirkhanov
978549106c chore: use dev env in test_s3 CI 2025-10-07 22:04:26 +01:00
Daulet Amirkhanov
ee079604f4 chore: keep exception handling changes to instructor adapters 2025-10-07 22:03:16 +01:00
Daulet Amirkhanov
405b65f857 refactor: Simplify health check methods by using utility functions for LLM and embedding connections 2025-10-07 21:26:25 +01:00
Daulet Amirkhanov
c1e467209f
Merge branch 'dev' into fix/fix-broken-health-check-endpoint 2025-10-07 21:21:54 +01:00
Daulet Amirkhanov
ada3753534 fix: fix broken check_llm_provider healthcheck method 2025-10-07 21:18:00 +01:00
Igor Ilic
c81315d177
chore: Update release version (#1514)
<!-- .github/pull_request_template.md -->

## Description
<!--
Please provide a clear, human-generated description of the changes in
this PR.
DO NOT use AI-generated descriptions. We want to understand your thought
process and reasoning.
-->

## Type of Change
<!-- Please check the relevant option -->
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Screenshots/Videos (if applicable)
<!-- Add screenshots or videos to help explain your changes -->

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-10-07 22:07:11 +02:00
Igor Ilic
c9c5406aca
fix: Remove cognee endpoint from cognee core to allow MCP users to us… (#1513)
…e cognee endpoint

<!-- .github/pull_request_template.md -->

## Description
Remove cognee endpoint from core as it clashes with cognee endpoint from
cognee-mcp

## Type of Change
<!-- Please check the relevant option -->
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Screenshots/Videos (if applicable)
<!-- Add screenshots or videos to help explain your changes -->

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-10-07 21:59:57 +02:00
Igor Ilic
2b04a35309
chore: Update lock files (#1511)
<!-- .github/pull_request_template.md -->

## Description
update lock files

## Type of Change
<!-- Please check the relevant option -->
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Screenshots/Videos (if applicable)
<!-- Add screenshots or videos to help explain your changes -->

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-10-07 21:16:43 +02:00
Daulet Amirkhanov
6aeaa6877a
Merge branch 'dev' into chore/update-cognee-ui-cli-mcp-docker-image 2025-10-07 19:52:17 +01:00
Igor Ilic
840991c36f
refactor: Don't use async lock if not needed (#1510)
<!-- .github/pull_request_template.md -->

## Description
Reduce time PGVector is using async lock, by checking if collection
exists before taking async lock

## Type of Change
<!-- Please check the relevant option -->
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Screenshots/Videos (if applicable)
<!-- Add screenshots or videos to help explain your changes -->

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-10-07 20:44:10 +02:00
Igor Ilic
e7709f7bd0
fix: Resolve issue with Kuzu graph database persistence on our local … (#1490)
…Docker

<!-- .github/pull_request_template.md -->

## Description
Resolves issue with kuzu graph data persistence for Cognee backend
docker

## Type of Change
<!-- Please check the relevant option -->
- [x] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.

---------

Co-authored-by: Boris <boris@topoteretes.com>
2025-10-07 20:38:43 +02:00
Daulet Amirkhanov
dda44b0a4b chore: change cognee-mcp deprecation message 2025-10-07 19:30:25 +01:00
Igor Ilic
f81d427466
Main merge vol7 (#1509)
<!-- .github/pull_request_template.md -->

## Description
Merge main to dev

## Type of Change
<!-- Please check the relevant option -->
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Screenshots/Videos (if applicable)
<!-- Add screenshots or videos to help explain your changes -->

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-10-07 20:17:30 +02:00
Igor Ilic
0ef2623ac6
refactor: use gpt-5-mini by default (#1505)
<!-- .github/pull_request_template.md -->

## Description
Set gpt-5-mini back to default LLM as issues with it have been resolved

## Type of Change
<!-- Please check the relevant option -->
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-10-07 20:17:10 +02:00
Igor Ilic
b4eaea2133 Merge branch 'main' into main-merge-vol7 2025-10-07 19:56:38 +02:00
Igor Ilic
3b8b839057
fix: Resolve pydantic issue regarding deprecation (#1508)
<!-- .github/pull_request_template.md -->

## Description
Fix latest pydantic version issues

## Type of Change
<!-- Please check the relevant option -->
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Screenshots/Videos (if applicable)
<!-- Add screenshots or videos to help explain your changes -->

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-10-07 19:54:59 +02:00
Boris
b01cf4e6bd
Merge branch 'dev' into chore/update-cognee-ui-cli-mcp-docker-image 2025-10-07 19:33:33 +02:00
Igor Ilic
7b5bba2b18
refactor: Unify dataset resolution (#1488)
<!-- .github/pull_request_template.md -->

## Description
Unified dataset resolution mechanisms across cognee

## Type of Change
<!-- Please check the relevant option -->
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [x] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-10-07 19:14:46 +02:00
Boris
c2698094c6
fix: frontend process output streaming stuck due to incorrect output (#1503)
<!-- .github/pull_request_template.md -->

## Description
<!--
Please provide a clear, human-generated description of the changes in
this PR.
DO NOT use AI-generated descriptions. We want to understand your thought
process and reasoning.
-->

`cognee-cli -ui` has accidentally added - when opening frontend
subprocess - an output decoding into text.

## What happens exactly

On the surface - frontend ui will be stuck loading.

Frontend process hangs as it's output is not being processed (we're
expecting bytes).

## This change

This change removes the `text=True` added to frontend subprocess

## Type of Change
<!-- Please check the relevant option -->
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Screenshots/Videos (if applicable)
<!-- Add screenshots or videos to help explain your changes -->

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-10-07 18:13:40 +02:00
Igor Ilic
38cdacbcb6
fix: Resolve issue with Gemini adapter (#1494)
<!-- .github/pull_request_template.md -->

## Description
Resolve Gemini Adapter issues:
 1. resolve embedding batch issue,
2. Resolve slowness because gemini tokenizer was sending word per word
to Googles API to count tokens (using OpenAI's local tokenizer to count
tokens for Gemini now)
 3. Update deprecated library and move to instructor

## Type of Change
<!-- Please check the relevant option -->
- [x] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-10-07 18:04:18 +02:00
Daulet Amirkhanov
263a8f4376 fix: frontend process output streaming stuck due to incorrect output 2025-10-06 14:18:39 +01:00
Daulet Amirkhanov
24d0bec025
Merge branch 'dev' into chore/update-cognee-ui-cli-mcp-docker-image 2025-10-06 14:13:03 +01:00
Daulet Amirkhanov
ee45afed42
Fix test_cli_edge_cases, test_delete_all_with_user_id unit test (#1493)
<!-- .github/pull_request_template.md -->
## Description

Github Actions job:


https://github.com/topoteretes/cognee/actions/runs/18199627173/job/51815009426?pr=1493


<!--
Please provide a clear, human-generated description of the changes in
this PR.
DO NOT use AI-generated descriptions. We want to understand your thought
process and reasoning.
-->

## Type of Change
<!-- Please check the relevant option -->
- [x] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Screenshots/Videos (if applicable)
<!-- Add screenshots or videos to help explain your changes -->

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-10-02 18:00:00 +01:00
Daulet Amirkhanov
38070c489b fix test_cli_edge_cases.py, test_delete_all_with_user_id unit test 2025-10-02 17:44:01 +01:00
Daulet Amirkhanov
2efce6949b
Feature/delete preview (#1385)
## Description

This pull request introduces a preview step to the `cognee delete`
command, fulfilling the requirements of issue #1366

When a user runs the delete command, it now first queries the database
to calculate the scope of the deletion and presents a summary (number of
datasets, data entries, users) before asking for final confirmation.
This improves the safety and usability of the command, preventing
accidental data loss.

This PR also adds the `--force` flag to bypass the preview, which is
useful for scripting and automation.

## Type of Change

- [x] New feature (non-breaking change that adds functionality)
- [ ] Bug fix (non-breaking change that fixes an issue)

## Changes Made

- **`cognee/cli/commands/delete_command.py`**: Modified to include the
preview logic. It now calls the counting function, displays the results,
and proceeds with deletion only after confirmation.
- **`cognee/modules/data/methods/get_deletion_counts.py`**: Added this
new file to contain the logic for querying the database and calculating
the deletion counts for datasets, data entries, and users.

## Testing

I have tested the changes through **Manual CLI Testing**: I ran the
`cognee delete` command with the `--dataset-name`, `--user-id`, and
`--all` flags to manually verify that the preview output is correct.

### Terminal Output
Here are screenshots of the command working with the all possible flags:
<img width="1898" height="1087" alt="cognee1"
src="https://github.com/user-attachments/assets/939aa4d0-748c-45e4-a2a6-f5e7982c1fc0"
/>
<img width="1788" height="748" alt="cognee2"
src="https://github.com/user-attachments/assets/213884be-cce1-4007-90f9-5e6d3a302ced"
/>

## Pre-submission Checklist

- [x] **I have tested my changes thoroughly before submitting this PR**
- [x] **This PR contains minimal changes necessary to address the
issue/feature**
- [x] My code follows the project's coding standards and style
guidelines
- [x] I have added tests that prove my feature works
- [ ] I have not added or changed documentation (as it was not required
for this CLI change)
- [x] I have searched existing PRs to ensure this change has been
submitted already
- [x] I have linked the relevant issue in the description

## Related Issues

Fixes #1366 

## DCO Affirmation

I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-10-02 15:21:57 +01:00
Daulet Amirkhanov
a92f4bdf3f fix: update failing tests and refactor delete_preview implementation 2025-10-02 15:05:39 +01:00
Daulet Amirkhanov
d5dd6c2fc2
Merge branch 'dev' into feature/delete-preview 2025-10-02 12:02:16 +01:00
shehab-badawy
9c87a10848 feat: Add delete preview for --dataset-name and --all flags
This commit introduces the preview functionality for the  command. The preview displays a summary of what will be deleted before asking for user confirmation.

The feature is fully functional for the following flags:
-  / : Correctly counts the number of data entries within the specified dataset.
- : Correctly counts the total number of datasets, data entries, and users in the system.

The logic for the  flag is a work in progress. The current implementation uses a placeholder and needs a method to query a user directly by their ID to be completed.
2025-10-02 01:44:11 -04:00
Igor Ilic
95fdbab406
refactor: Remove macos13 from ci/cd and support (#1489)
<!-- .github/pull_request_template.md -->

## Description
Remove MacOS13 support and CI/CD tests

## Type of Change
<!-- Please check the relevant option -->
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [x] Other (please specify): Remove MacOS13 support

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-10-01 18:01:04 +02:00
Daulet Amirkhanov
0bf3490d63 chore: update cognee-cli to use MCP Docker image from main. Bring back deprecation warnings 2025-10-01 16:16:06 +01:00
Igor Ilic
3dba072c49
fix: resolve formatting issue (#1486)
<!-- .github/pull_request_template.md -->

## Description
ruff formatting

## Type of Change
<!-- Please check the relevant option -->
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Screenshots/Videos (if applicable)
<!-- Add screenshots or videos to help explain your changes -->

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-09-30 18:12:57 +02:00
Vasilije
2ee5a3ca7a
feat: Enhance PDF parsing (#1445)
<!-- .github/pull_request_template.md -->

## Description
<!-- 
Please provide a clear, human-generated description of the changes in
this PR.
DO NOT use AI-generated descriptions. We want to understand your thought
process and reasoning.
-->
I've just added a new PDF parser, AdvancedPdfLoader. It uses the
unstructured library and does a much better job of handling PDFs,
especially with its layout-aware parsing, table preservation, and image
handling.

I also built in a safeguard: if unstructured isn't installed or throws
an error, it'll automatically fall back to the old PyPdfLoader so it
won't just crash. All the related unit tests and project dependencies
are taken care of, too.

https://github.com/topoteretes/cognee/issues/1342

## Type of Change
<!-- Please check the relevant option -->
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [x] Performance improvement
- [ ] Other (please specify):

## Changes Made
<!-- List the specific changes made in this PR -->
- Added AdvancedPdfLoader class for enhanced PDF processing using the
unstructured library.
- Integrated fallback mechanism to PyPdfLoader in case of unstructured
library import failure or exceptions.
- Updated supported loaders to include AdvancedPdfLoader.
- Added unit tests for AdvancedPdfLoader to ensure functionality and
error handling.
- Updated poetry.lock and pyproject.toml to include new dependencies and
versions.

## Testing
<!-- Describe how you tested your changes -->
pytest -v ./cognee/tests/test_advanced_pdf_loader.py
## Screenshots/Videos (if applicable)
<!-- Add screenshots or videos to help explain your changes -->

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [x] **I have tested my changes thoroughly before submitting this PR**
- [x] **This PR contains minimal changes necessary to address the
issue/feature**
- [x] My code follows the project's coding standards and style
guidelines
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] I have added necessary documentation (if applicable)
- [x] All new and existing tests pass
- [x] I have searched existing PRs to ensure this change hasn't been
submitted already
- [x] I have linked any relevant issues in the description
- [x] My commits have clear and descriptive messages

## Related Issues
<!-- Link any related issues using "Fixes #issue_number" or "Relates to
#issue_number" -->

## Additional Notes
<!-- Add any additional notes, concerns, or context for reviewers -->

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-09-30 17:46:53 +02:00
EricXiao
d868912df5
Merge branch 'dev' into feat/add-pdfproloader 2025-09-30 23:24:14 +08:00
Vasilije
24abceffa9
fix: Resolve issue with processing for gpt4 series models (#1485)
<!-- .github/pull_request_template.md -->

## Description
Use JSON_SCHEMA mode only for GPT-5 series models, it's a new mode from
OpenAI for structured output processing that they didn't properly handle
for older models

## Type of Change
<!-- Please check the relevant option -->
- [x] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [ ] **I have tested my changes thoroughly before submitting this PR**
- [ ] **This PR contains minimal changes necessary to address the
issue/feature**
- [ ] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [ ] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-09-30 14:14:46 +02:00
Igor Ilic
f88289c425 fix: Resolve issue with processing for gpt4 series models 2025-09-30 14:05:12 +02:00
EricXiao
4938ad9fe9 Merge branch 'dev' into feat/add-pdfproloader
Signed-off-by: EricXiao <taoiaox@gmail.com>
2025-09-30 17:08:28 +08:00
Vasilije
7850c56ca8
Feature/windows compatibility fixes (#1464)
# **Pull Request: Windows Compatibility and Error Handling
Improvements**

## Description
This PR addresses multiple Windows compatibility issues and improves
error handling across the cognee CLI and frontend, making the
application fully functional on Windows systems. The changes include:

- **Windows Process Termination**: Fixed crashes when terminating
spawned processes by using `taskkill` instead of Unix-specific `killpg`
functions
- **npm Detection**: Resolved npm command failures on Windows by adding
`shell=True` for PowerShell script execution
- **Frontend SSR**: Fixed "window is not defined" errors by implementing
dynamic imports for the graph visualization component
- **Cloud API**: Improved error handling for local installations by
returning graceful responses instead of raising exceptions
- **Connection Retry**: Added retry mechanism for frontend health checks
with better error messages
- **String Formatting**: Fixed mixed f-string formatting that caused
placeholder issues
- **CLI Entry Point**: Added `cognee` command alongside `cognee-cli` for
better user experience

These changes ensure cognee works seamlessly on Windows while
maintaining backward compatibility and improving overall robustness.

## Type of Change
- [x] Bug fix (non-breaking change that fixes an issue)
- [x] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Screenshots/Videos (if applicable)
<!-- Add screenshots or videos to help explain your changes -->

## Pre-submission Checklist
- [x] **I have tested my changes thoroughly before submitting this PR**
- [x] **This PR contains minimal changes necessary to address the
issue/feature**
- [x] My code follows the project's coding standards and style
guidelines
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] I have added necessary documentation (if applicable)
- [x] All new and existing tests pass
- [x] I have searched existing PRs to ensure this change hasn't been
submitted already
- [x] I have linked any relevant issues in the description
- [x] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.

---

## 🔧 **Technical Details**

### **Files Modified:**
-  **Windows Process Termination**: `cognee/cli/_cognee.py`,
`cognee/tests/test_cognee_server_start.py`
-  **npm Detection**: `cognee/api/v1/ui/ui.py`
-  **Frontend SSR**:
`cognee-frontend/src/app/(graph)/GraphVisualization.tsx`
-  **Cloud API**: `cognee/api/v1/cloud/routers/get_checks_router.py`
-  **Connection Retry**: `cognee-frontend/src/utils/fetch.ts`
-  **String Formatting**:
`cognee/infrastructure/llm/prompts/read_query_prompt.py`
-  **CLI Entry Point**: `pyproject.toml`

### **Key Changes:**
1. **Process Termination**: Added Windows-compatible `taskkill` commands
alongside Unix `killpg`
2. **npm Commands**: Added `shell=True` for Windows PowerShell script
execution
3. **Dynamic Imports**: Implemented `ssr: false` for graph visualization
component
4. **Graceful Errors**: Return JSON responses instead of raising
exceptions for local mode
5. **Retry Logic**: Added 5-retry mechanism with 1-second delays for
health checks
6. **String Formatting**: Fixed mixed f-string and old-style formatting
issues
7. **CLI Commands**: Added `cognee` entry point alongside `cognee-cli`

### **Testing Results:**
-  All existing tests pass
-  Windows process termination works correctly
-  npm detection and commands work on Windows
-  Frontend loads without SSR errors
-  Cloud API returns graceful responses for local mode
-  Frontend connection retries work properly
-  Code formatting and linting checks pass

This PR makes cognee fully functional on Windows while improving error
handling and user experience across all platforms.
2025-09-29 20:51:27 +02:00
Vasilije
52265a67f2
Merge branch 'dev' into feature/windows-compatibility-fixes 2025-09-29 20:51:17 +02:00
Vasilije
92d183aedb
feat: Add update endpoint to Cognee [COG-3016] (#1475)
<!-- .github/pull_request_template.md -->

## Description
Add update method end endpoint for Cognee

## Type of Change
<!-- Please check the relevant option -->
- [ ] Bug fix (non-breaking change that fixes an issue)
- [x] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [x] **I have tested my changes thoroughly before submitting this PR**
- [x] **This PR contains minimal changes necessary to address the
issue/feature**
- [x] My code follows the project's coding standards and style
guidelines
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added necessary documentation (if applicable)
- [ ] All new and existing tests pass
- [x] I have searched existing PRs to ensure this change hasn't been
submitted already
- [ ] I have linked any relevant issues in the description
- [ ] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> <sup>[Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) is
generating a summary for commit
9524109029. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-09-29 20:50:11 +02:00
Igor Ilic
9524109029 Merge branch 'dev' into update-endpoint 2025-09-29 20:44:44 +02:00
Igor Ilic
3c7cc597e3 Merge branch 'update-endpoint' of github.com:topoteretes/cognee into update-endpoint 2025-09-29 20:42:42 +02:00
Igor Ilic
e333a860ba refactor: Add documentation for update endpoint 2025-09-29 20:42:25 +02:00
Igor Ilic
52c978faeb
docs: Multi user authorization example (#1466)
<!-- .github/pull_request_template.md -->

## Description
Add return value of creating role and tenant, add detailed permissions
example to Cognee

## Type of Change
<!-- Please check the relevant option -->
- [ ] Bug fix (non-breaking change that fixes an issue)
- [x] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [x] **I have tested my changes thoroughly before submitting this PR**
- [x] **This PR contains minimal changes necessary to address the
issue/feature**
- [x] My code follows the project's coding standards and style
guidelines
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] I have added necessary documentation (if applicable)
- [x] All new and existing tests pass
- [x] I have searched existing PRs to ensure this change hasn't been
submitted already
- [x] I have linked any relevant issues in the description
- [x] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.

---------

Co-authored-by: Boris <boris@topoteretes.com>
Co-authored-by: Hande <159312713+hande-k@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2025-09-29 20:15:50 +02:00
Vasilije
1986ccff0a
fix: Resolve issues with GPT5 models (#1483)
<!-- .github/pull_request_template.md -->

## Description
Resolve issues with gpt 5 models for structured outputs by forcing JSON
mode in instructor

## Type of Change
<!-- Please check the relevant option -->
- [x] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Code refactoring
- [ ] Performance improvement
- [ ] Other (please specify):

## Screenshots/Videos (if applicable)
<!-- Add screenshots or videos to help explain your changes -->

## Pre-submission Checklist
<!-- Please check all boxes that apply before submitting your PR -->
- [x] **I have tested my changes thoroughly before submitting this PR**
- [x] **This PR contains minimal changes necessary to address the
issue/feature**
- [x] My code follows the project's coding standards and style
guidelines
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] I have added necessary documentation (if applicable)
- [x] All new and existing tests pass
- [x] I have searched existing PRs to ensure this change hasn't been
submitted already
- [x] I have linked any relevant issues in the description
- [x] My commits have clear and descriptive messages

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin.
2025-09-29 19:25:25 +02:00