From 040cb0c43523273e42886a1028bb74212315a129 Mon Sep 17 00:00:00 2001 From: xprilion Date: Mon, 27 Apr 2026 15:02:43 +0530 Subject: [PATCH 1/2] fix qodana issues --- .qodana-reports/report-1.json | 30465 ++++++++++++++++++ backend/openmlr/db/operations.py | 4 +- backend/openmlr/services/session_manager.py | 5 +- backend/openmlr/tools/compute_tools.py | 4 +- backend/tests/test_agent_loop.py | 2 - qodana.yaml | 4 + 6 files changed, 30477 insertions(+), 7 deletions(-) create mode 100644 .qodana-reports/report-1.json diff --git a/.qodana-reports/report-1.json b/.qodana-reports/report-1.json new file mode 100644 index 0000000..316b6df --- /dev/null +++ b/.qodana-reports/report-1.json @@ -0,0 +1,30465 @@ +{ + "$schema": "https://raw.githubusercontent.com/schemastore/schemastore/master/src/schemas/json/sarif-2.1.0-rtm.5.json", + "version": "2.1.0", + "runs": [ + { + "tool": { + "driver": { + "name": "QDPY", + "fullName": "Qodana for Python", + "version": "253.31833", + "rules": [], + "taxa": [ + { + "id": "Pandas", + "name": "Pandas" + }, + { + "id": "EditorConfig", + "name": "EditorConfig" + }, + { + "id": "Python", + "name": "Python" + }, + { + "id": "Shell script", + "name": "Shell script" + }, + { + "id": "XML", + "name": "XML" + }, + { + "id": "YAML", + "name": "YAML" + }, + { + "id": "Proofreading", + "name": "Proofreading" + }, + { + "id": "JSON and JSON5", + "name": "JSON and JSON5" + }, + { + "id": "RegExp", + "name": "RegExp" + }, + { + "id": "Properties files", + "name": "Properties files" + }, + { + "id": "Requirements", + "name": "Requirements" + }, + { + "id": "Markdown", + "name": "Markdown" + }, + { + "id": "HTML", + "name": "HTML" + }, + { + "id": "General", + "name": "General" + }, + { + "id": "Structural search", + "name": "Structural search" + }, + { + "id": "Ini files", + "name": "Ini files" + }, + { + "id": "RELAX NG", + "name": "RELAX NG" + }, + { + "id": "Internationalization", + "name": "Internationalization" + }, + { + "id": "TOML", + "name": "TOML" + }, + { + "id": "Version control", + "name": "Version control" + }, + { + "id": "Qodana", + "name": "Qodana" + } + ], + "language": "en-US", + "contents": ["localizedData", "nonLocalizedData"], + "isComprehensive": false + }, + "extensions": [ + { + "name": "PythonCore", + "version": "253.31833.0", + "rules": [ + { + "id": "PyPandasSeriesToListInspection", + "shortDescription": { + "text": "Method Series.to_list() is recommended" + }, + "fullDescription": { + "text": "Reports redundant 'list' in 'list(Series.values)' statement for pandas and polars libraries. Such 'Series' values extraction can be replaced with the 'to_list()' function call. Example: list(df['column'].values)\n When the quick-fix is applied, the code changes to: df['column'].to_list()\n Inspection ID: PyPandasSeriesToListInspection", + "markdown": "Reports redundant `list` in `list(Series.values)` statement for pandas and polars libraries.\nSuch `Series` values extraction can be replaced with the `to_list()` function call.\n\n**Example:**\n\n```\nlist(df['column'].values)\n```\n\nWhen the quick-fix is applied, the code changes to:\n\n```\ndf['column'].to_list()\n```\n\nInspection ID: PyPandasSeriesToListInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PyPackages", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "Pandas", + "index": 0, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PySetFunctionToLiteralInspection", + "shortDescription": { + "text": "Function call can be replaced with set literal" + }, + "fullDescription": { + "text": "Reports calls to the 'set' function that can be replaced with the 'set' literal. Example: 'def do_mult(a, b):\n c = a * b\n return set([c, a, b])' When the quick-fix is applied, the code changes to: 'def do_mult(a, b):\n c = a * b\n return {c, a, b}' Inspection ID: PySetFunctionToLiteralInspection", + "markdown": "Reports calls to the `set` function that can be replaced with\nthe `set` literal.\n\n**Example:**\n\n\n def do_mult(a, b):\n c = a * b\n return set([c, a, b])\n\nWhen the quick-fix is applied, the code changes to:\n\n\n def do_mult(a, b):\n c = a * b\n return {c, a, b}\n\nInspection ID: PySetFunctionToLiteralInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PySetFunctionToLiteral", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyStatementEffectInspection", + "shortDescription": { + "text": "Statement has no effect" + }, + "fullDescription": { + "text": "Reports statements that have no effect. Example: 'class Car:\n def __init__(self, speed=0):\n self.speed = speed\n self.time # has no effect\n\n2 + 3 # has no effect' In this example, you can either add a field 'time' to the 'Car' class or introduce variables for the problematic statements. Inspection ID: PyStatementEffectInspection", + "markdown": "Reports statements that have no effect.\n\n**Example:**\n\n\n class Car:\n def __init__(self, speed=0):\n self.speed = speed\n self.time # has no effect\n\n 2 + 3 # has no effect\n\nIn this example, you can either add a field `time` to the `Car` class or\nintroduce variables for the problematic statements.\n\nInspection ID: PyStatementEffectInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyStatementEffect", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyMandatoryEncodingInspection", + "shortDescription": { + "text": "No encoding specified for file" + }, + "fullDescription": { + "text": "Reports a missing encoding comment in Python 2. Example: 'class Book(object):\n def __init__(self):\n pass' When the quick-fix is applied, the missing comment is added: '# coding=utf-8\nclass Book(object):\n def __init__(self):\n pass' Inspection ID: PyMandatoryEncodingInspection", + "markdown": "Reports a missing encoding comment in Python 2.\n\n**Example:**\n\n\n class Book(object):\n def __init__(self):\n pass\n\nWhen the quick-fix is applied, the missing comment is added:\n\n\n # coding=utf-8\n class Book(object):\n def __init__(self):\n pass\n\nInspection ID: PyMandatoryEncodingInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PyMandatoryEncoding", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyOverridesInspection", + "shortDescription": { + "text": "Invalid usages of @override decorator" + }, + "fullDescription": { + "text": "Reports when a method decorated with @override doesn't have a matching method in its ancestor classes Example: 'from typing import override\n\nclass Parent:\n def foo(self) -> int:\n return 1\n\n def bar(self, x: str) -> str:\n return x\n\nclass Child(Parent):\n @override\n def foo(self) -> int:\n return 2\n\n @override # Missing super method for override function\n def baz(self) -> int:\n return 1' Inspection ID: PyOverridesInspection", + "markdown": "Reports when a method decorated with @override doesn't have a matching method in its ancestor classes\n\n**Example:**\n\n\n from typing import override\n\n class Parent:\n def foo(self) -> int:\n return 1\n\n def bar(self, x: str) -> str:\n return x\n\n class Child(Parent):\n @override\n def foo(self) -> int:\n return 2\n\n @override # Missing super method for override function\n def baz(self) -> int:\n return 1\n\nInspection ID: PyOverridesInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyOverrides", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyInconsistentIndentationInspection", + "shortDescription": { + "text": "Inconsistent indentation" + }, + "fullDescription": { + "text": "Reports inconsistent indentation in Python source files when, for example, you use a mixture of tabs and spaces in your code. Inspection ID: PyInconsistentIndentationInspection", + "markdown": "Reports inconsistent indentation in Python source files when, for example,\nyou use a mixture of tabs and spaces in your code.\n\nInspection ID: PyInconsistentIndentationInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyInconsistentIndentation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyAttributeOutsideInitInspection", + "shortDescription": { + "text": "An instance attribute is defined outside `__init__`" + }, + "fullDescription": { + "text": "Reports a problem when instance attribute definition is outside '__init__' method. Example: 'class Book:\n def __init__(self):\n self.author = 'Mark Twain'\n\n def release(self):\n self.year = '1889'' When the quick-fix is applied, the code sample changes to: 'class Book:\n def __init__(self):\n self.year = '1889'\n self.author = 'Mark Twain'\n\n def release(self):\n pass' Inspection ID: PyAttributeOutsideInitInspection", + "markdown": "Reports a problem when instance attribute definition is outside `__init__` method.\n\n**Example:**\n\n\n class Book:\n def __init__(self):\n self.author = 'Mark Twain'\n\n def release(self):\n self.year = '1889'\n\n\nWhen the quick-fix is applied, the code sample changes to:\n\n\n class Book:\n def __init__(self):\n self.year = '1889'\n self.author = 'Mark Twain'\n\n def release(self):\n pass\n\nInspection ID: PyAttributeOutsideInitInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyAttributeOutsideInit", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyTypedDictInspection", + "shortDescription": { + "text": "Invalid TypedDict definition and usages" + }, + "fullDescription": { + "text": "Reports invalid definition and usage of TypedDict. Example: 'from typing import TypedDict\n\n\nclass Movie(TypedDict):\n name: str\n year: int\n rate: int = 10 # Right-hand side values are not supported\n\n def method(self): # Invalid statement in TypedDict\n pass\n\n\nm = Movie(name=\"name\", year=1000, rate=9)\nprint(m[\"director\"]) # There is no the 'director' key in 'Movie'\ndel m[\"name\"] # The 'name' key cannot be deleted\nm[\"year\"] = \"1001\" # Expected 'int', got 'str'' Inspection ID: PyTypedDictInspection", + "markdown": "Reports invalid definition and usage of\n[TypedDict](https://www.python.org/dev/peps/pep-0589/).\n\n**Example:**\n\n\n from typing import TypedDict\n\n\n class Movie(TypedDict):\n name: str\n year: int\n rate: int = 10 # Right-hand side values are not supported\n\n def method(self): # Invalid statement in TypedDict\n pass\n\n\n m = Movie(name=\"name\", year=1000, rate=9)\n print(m[\"director\"]) # There is no the 'director' key in 'Movie'\n del m[\"name\"] # The 'name' key cannot be deleted\n m[\"year\"] = \"1001\" # Expected 'int', got 'str'\n\nInspection ID: PyTypedDictInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyTypedDict", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyPep8Inspection", + "shortDescription": { + "text": "PEP 8 coding style violation" + }, + "fullDescription": { + "text": "Reports violations of the PEP 8 coding style guide by running the bundled pycodestyle.py tool. Inspection ID: PyPep8Inspection", + "markdown": "Reports violations of the [PEP 8 coding style guide](https://www.python.org/dev/peps/pep-0008/) by running the bundled [pycodestyle.py](https://github.com/PyCQA/pycodestyle) tool.\n\nInspection ID: PyPep8Inspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyPep8", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyMissingTypeHintsInspection", + "shortDescription": { + "text": "Missing type hinting for function definition" + }, + "fullDescription": { + "text": "Reports missing type hints for function declaration in one of the two formats: parameter annotations or a type comment. Select the Only when types are known checkbox if you want the inspection check the types collected from runtime or inferred. Inspection ID: PyMissingTypeHintsInspection", + "markdown": "Reports missing type hints for function declaration in\none of the two formats: parameter annotations or a type comment.\n\nSelect the **Only when types are known** checkbox if you want the inspection check\nthe types collected from runtime or inferred.\n\nInspection ID: PyMissingTypeHintsInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "PyMissingTypeHints", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyTupleItemAssignmentInspection", + "shortDescription": { + "text": "Tuple item assignment is prohibited" + }, + "fullDescription": { + "text": "Reports assignments to a tuple item. Example: 't = ('red', 'blue', 'green', 'white')\nt[3] = 'black'' A quick-fix offers to replace the tuple with a list. Inspection ID: PyTupleItemAssignmentInspection", + "markdown": "Reports assignments to a tuple item.\n\n**Example:**\n\n\n t = ('red', 'blue', 'green', 'white')\n t[3] = 'black'\n\nA quick-fix offers to replace the tuple with a list.\n\nInspection ID: PyTupleItemAssignmentInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyTupleItemAssignment", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "OutdatedRequirementInspection", + "shortDescription": { + "text": "Requirement is outdated" + }, + "fullDescription": { + "text": "Reports packages mentioned in requirements files (for example, 'requirements.txt', or 'dependencies' section in 'pyproject.toml' files) which are outdated Inspection ID: OutdatedRequirementInspection", + "markdown": "Reports packages mentioned in requirements files (for example, `requirements.txt`,\nor `dependencies` section in `pyproject.toml` files) which are outdated\n\nInspection ID: OutdatedRequirementInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "OutdatedRequirement", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "Requirements", + "index": 10, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyInitNewSignatureInspection", + "shortDescription": { + "text": "Incompatible signatures of __new__ and __init__" + }, + "fullDescription": { + "text": "Reports incompatible signatures of the '__new__' and '__init__' methods. Example: 'class MyClass(object):\n def __new__(cls, arg1):\n return super().__new__(cls)\n\n def __init__(self):\n pass' If the '__new__' and '__init__' have different arguments, then the 'MyClass' cannot be instantiated. As a fix, the IDE offers to apply the Change Signature refactoring. Inspection ID: PyInitNewSignatureInspection", + "markdown": "Reports incompatible signatures of the `__new__` and `__init__` methods.\n\n**Example:**\n\n\n class MyClass(object):\n def __new__(cls, arg1):\n return super().__new__(cls)\n\n def __init__(self):\n pass\n\nIf the `__new__` and `__init__` have different arguments, then the `MyClass`\ncannot be instantiated.\n\nAs a fix, the IDE offers to apply the Change Signature refactoring.\n\nInspection ID: PyInitNewSignatureInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyInitNewSignature", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyDunderSlotsInspection", + "shortDescription": { + "text": "Invalid usages of classes with '__slots__' definitions" + }, + "fullDescription": { + "text": "Reports invalid usages of a class with '__slots__' definitions. Example when accessing undefined attributes: 'class Foo:\n __slots__ = ['foo', 'bar']\n\n def __init__(self):\n self.x = 3 # error: 'x' is not defined in __slots__' Example of conflicting attributes: 'class A:\n __slots__ = (\"x\",)\n x = 42 # error: conflict with \"x\" listed in __slots__' Example 'slots=True': 'from dataclasses import dataclass\n\n@dataclass(slots=True) # error: __slots__ is also defined in Foo\nclass Foo:\n __slots__ = ['a']' Inspection ID: PyDunderSlotsInspection", + "markdown": "Reports invalid usages of a class with `__slots__` definitions.\n\n**Example when accessing undefined attributes:**\n\n\n class Foo:\n __slots__ = ['foo', 'bar']\n\n def __init__(self):\n self.x = 3 # error: 'x' is not defined in __slots__\n\n**Example of conflicting attributes:**\n\n\n class A:\n __slots__ = (\"x\",)\n x = 42 # error: conflict with \"x\" listed in __slots__\n\n**Example `slots=True`:**\n\n\n from dataclasses import dataclass\n\n @dataclass(slots=True) # error: __slots__ is also defined in Foo\n class Foo:\n __slots__ = ['a']\n\nInspection ID: PyDunderSlotsInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyDunderSlots", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyMissingConstructorInspection", + "shortDescription": { + "text": "Missed call to '__init__' of the super class" + }, + "fullDescription": { + "text": "Reports cases when a call to the 'super' constructor in a class is missed. Example: 'class Fruit:\n def __init__(self):\n pass\n\n\nclass Pear(Fruit):\n def __init__(self):\n pass' The 'Pear' class should have a 'super' call in the '__init__' method. When the quick-fix is applied, the code changes to: 'class Fruit:\n def __init__(self):\n pass\n\n\nclass Pear(Fruit):\n def __init__(self):\n super().__init__()' Inspection ID: PyMissingConstructorInspection", + "markdown": "Reports cases when a call to the `super` constructor in a class is missed.\n\n**Example:**\n\n\n class Fruit:\n def __init__(self):\n pass\n\n\n class Pear(Fruit):\n def __init__(self):\n pass\n\nThe `Pear` class should have a `super` call in the `__init__`\nmethod.\n\nWhen the quick-fix is applied, the code changes to:\n\n\n class Fruit:\n def __init__(self):\n pass\n\n\n class Pear(Fruit):\n def __init__(self):\n super().__init__()\n\nInspection ID: PyMissingConstructorInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyMissingConstructor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyDefaultArgumentInspection", + "shortDescription": { + "text": "The default argument is mutable" + }, + "fullDescription": { + "text": "Reports a problem when a mutable value as a list or dictionary is detected in a default value for an argument. Default argument values are evaluated only once at function definition time, which means that modifying the default value of the argument will affect all subsequent calls of that function. Example: 'def func(s, cache={}):\n cache[s] = None' When the quick-fix is applied, the code changes to: 'def func(s, cache=None):\n if cache is None:\n cache = {}\n cache[s] = None' Inspection ID: PyDefaultArgumentInspection", + "markdown": "Reports a problem when a mutable value as a list or dictionary is detected in a default value for\nan argument. \n\nDefault argument values are evaluated only once at function definition time,\nwhich means that modifying the\ndefault value of the argument will affect all subsequent calls of that function.\n\n**Example:**\n\n\n def func(s, cache={}):\n cache[s] = None\n\nWhen the quick-fix is applied, the code changes to:\n\n\n def func(s, cache=None):\n if cache is None:\n cache = {}\n cache[s] = None\n\nInspection ID: PyDefaultArgumentInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyDefaultArgument", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyTestUnpassedFixtureInspection", + "shortDescription": { + "text": "Fixture is not requested by test functions" + }, + "fullDescription": { + "text": "Reports if a fixture is used without being passed to test function parameters or to '@pytest.mark.usefixtures' decorator Inspection ID: PyTestUnpassedFixtureInspection", + "markdown": "Reports if a fixture is used without being passed to test function parameters or to `@pytest.mark.usefixtures` decorator\n\nInspection ID: PyTestUnpassedFixtureInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyTestUnpassedFixture", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyTypeAliasRedeclarationInspection", + "shortDescription": { + "text": "Redeclared type alias" + }, + "fullDescription": { + "text": "Reports redeclarations of type aliases. Example: 'type A = int\ntype A = str' Inspection ID: PyTypeAliasRedeclarationInspection", + "markdown": "Reports redeclarations of type aliases.\n\n**Example:**\n\n\n type A = int\n type A = str\n\nInspection ID: PyTypeAliasRedeclarationInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyTypeAliasRedeclaration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyShadowingBuiltinsInspection", + "shortDescription": { + "text": "Shadowing built-in names" + }, + "fullDescription": { + "text": "No description available", + "markdown": "No description available" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyShadowingBuiltins", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PySimplifyBooleanCheckInspection", + "shortDescription": { + "text": "Redundant boolean variable check" + }, + "fullDescription": { + "text": "Reports equality comparison with a boolean literal. Example: 'def func(s):\n if s.isdigit() == True:\n return int(s)' With the quick-fix applied, the code fragment will be simplified to: 'def func(s):\n if s.isdigit():\n return int(s)' Inspection ID: PySimplifyBooleanCheckInspection", + "markdown": "Reports equality comparison with a boolean literal.\n\n**Example:**\n\n\n def func(s):\n if s.isdigit() == True:\n return int(s)\n\nWith the quick-fix applied, the code fragment will be simplified to:\n\n\n def func(s):\n if s.isdigit():\n return int(s)\n\nInspection ID: PySimplifyBooleanCheckInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PySimplifyBooleanCheck", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyMethodOverridingInspection", + "shortDescription": { + "text": "Method signature does not match signature of overridden method" + }, + "fullDescription": { + "text": "Reports inconsistencies in overriding method signatures. Example: 'class Book:\n def add_title(self):\n pass\n\n\nclass Novel(Book):\n def add_title(self, text):\n pass' Parameters of the 'add_title' method in the 'Novel' class do not match the method signature specified in the 'Book' class. As a fix, the IDE offers to apply the Change Signature refactoring. Inspection ID: PyMethodOverridingInspection", + "markdown": "Reports inconsistencies in overriding method signatures.\n\n**Example:**\n\n\n class Book:\n def add_title(self):\n pass\n\n\n class Novel(Book):\n def add_title(self, text):\n pass\n\nParameters of the `add_title` method in the `Novel` class do not match the method\nsignature specified in the `Book` class. As a fix, the IDE offers to apply the Change Signature\nrefactoring.\n\nInspection ID: PyMethodOverridingInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyMethodOverriding", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PoetryPackageVersionsInspection", + "shortDescription": { + "text": "Outdated Poetry package versions" + }, + "fullDescription": { + "text": "Reports outdated versions of packages in '[tool.poetry.dependencies]' and '[tool.poetry.dev-dependencies]' sections of 'pyproject.toml'. Inspection ID: PoetryPackageVersionsInspection", + "markdown": "Reports outdated versions of packages in `[tool.poetry.dependencies]` and `[tool.poetry.dev-dependencies]`\nsections of `pyproject.toml`.\n\nInspection ID: PoetryPackageVersionsInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PoetryPackageVersions", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyTestParametrizedInspection", + "shortDescription": { + "text": "Incorrect arguments in @pytest.mark.parametrize" + }, + "fullDescription": { + "text": "Reports functions that are decorated with @pytest.mark.parametrize but do not have arguments to accept parameters of the decorator. Inspection ID: PyTestParametrizedInspection", + "markdown": "Reports functions that are decorated with [@pytest.mark.parametrize](https://docs.pytest.org/en/stable/parametrize.html) but do not have arguments to accept\nparameters of the decorator.\n\nInspection ID: PyTestParametrizedInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyTestParametrized", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyDecoratorInspection", + "shortDescription": { + "text": "Class-specific decorator is used outside the class" + }, + "fullDescription": { + "text": "Reports usages of '@classmethod' or '@staticmethod' decorators in methods outside a class. Example: 'class State(object):\n\n @classmethod\n def my_state(cls, name):\n cls.name = name\n\n\n@classmethod\ndef change_state(self):\n pass' The 'change_state' method should not use the '@classmethod' decorator or it should be moved to the 'State' class declaration. If you apply the 'Remove decorator' action, the code changes to: 'class State(object):\n\n @classmethod\n def my_state(cls, name):\n cls.name = name\n\n\ndef change_state(self):\n pass' Inspection ID: PyDecoratorInspection", + "markdown": "Reports usages of `@classmethod` or `@staticmethod` decorators\nin methods outside a class.\n\n**Example:**\n\n\n class State(object):\n\n @classmethod\n def my_state(cls, name):\n cls.name = name\n\n\n @classmethod\n def change_state(self):\n pass\n\nThe `change_state` method should not use the `@classmethod` decorator or it should be\nmoved to the `State` class declaration.\n\nIf you apply the `Remove decorator` action, the code changes to:\n\n\n class State(object):\n\n @classmethod\n def my_state(cls, name):\n cls.name = name\n\n\n def change_state(self):\n pass\n\nInspection ID: PyDecoratorInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyDecorator", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyAsyncCallInspection", + "shortDescription": { + "text": "Missing `await` syntax in coroutine calls" + }, + "fullDescription": { + "text": "Reports coroutines that were called without using the 'await' syntax. Example: 'async def bar():\n pass\n\n\nasync def foo():\n bar()' After the quick-fix is applied, the code changes to: 'async def bar():\n pass\n\n\nasync def foo():\n await bar()' Inspection ID: PyAsyncCallInspection", + "markdown": "Reports coroutines that were called\nwithout using the `await` syntax.\n\n**Example:**\n\n\n async def bar():\n pass\n\n\n async def foo():\n bar()\n\nAfter the quick-fix is applied, the code changes to:\n\n\n async def bar():\n pass\n\n\n async def foo():\n await bar()\n\nInspection ID: PyAsyncCallInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyAsyncCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyComparisonWithNoneInspection", + "shortDescription": { + "text": "Using equality operators to compare with None" + }, + "fullDescription": { + "text": "Reports comparisons with 'None'. That type of comparisons should always be done with 'is' or 'is not', never the equality operators. Example: 'a = 2\n\n\nif a == None:\n print(\"Success\")' Once the quick-fix is applied, the code changes to: 'a = 2\n\n\nif a is None:\n print(\"Success\")' Inspection ID: PyComparisonWithNoneInspection", + "markdown": "Reports comparisons with `None`. That type of comparisons\nshould always be done with `is` or `is not`, never\nthe equality operators.\n\n**Example:**\n\n\n a = 2\n\n\n if a == None:\n print(\"Success\")\n\nOnce the quick-fix is applied, the code changes to:\n\n\n a = 2\n\n\n if a is None:\n print(\"Success\")\n\nInspection ID: PyComparisonWithNoneInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyComparisonWithNone", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "CommandLineInspection", + "shortDescription": { + "text": "Incorrect CLI syntax" + }, + "fullDescription": { + "text": "Reports the problems if the arguments of the command you type in the console are not in the proper order. The inspection also verifies that option names and arguments are correct. Do not disable the inspection if you are going to use command-line interfaces like manage.py in Django. Inspection ID: CommandLineInspection", + "markdown": "Reports the problems if the arguments of the command you type in the console are not in the proper order. The inspection also verifies\nthat option names and arguments are correct.\n\nDo not disable the inspection if you are going to use command-line interfaces like [manage.py in Django](https://www.jetbrains.com/help/pycharm/running-manage-py.html).\n\nInspection ID: CommandLineInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CommandLineInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyCallingNonCallableInspection", + "shortDescription": { + "text": "Attempt to call a non-callable object" + }, + "fullDescription": { + "text": "Reports a problem when you are trying to call objects that are not callable, like, for example, properties: Example: 'class Record:\n @property\n def as_json(self):\n\njson = Record().as_json()' Inspection ID: PyCallingNonCallableInspection", + "markdown": "Reports a problem when you are trying\nto call objects that are not callable, like, for example, properties:\n\n**Example:**\n\n\n class Record:\n @property\n def as_json(self):\n\n json = Record().as_json()\n\nInspection ID: PyCallingNonCallableInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyCallingNonCallable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyUnreachableCodeInspection", + "shortDescription": { + "text": "Unreachable code" + }, + "fullDescription": { + "text": "Reports code fragments that cannot be normally reached. Example: 'if True:\n print('Yes')\nelse:\n print('No')' As a fix, you might want to check and modify the algorithm to ensure it implements the expected logic. Inspection ID: PyUnreachableCodeInspection", + "markdown": "Reports code fragments that cannot be normally reached.\n\n**Example:**\n\n\n if True:\n print('Yes')\n else:\n print('No')\n\nAs a fix, you might want to check and modify the algorithm to ensure it implements\nthe expected logic.\n\nInspection ID: PyUnreachableCodeInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyUnreachableCode", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyAssertTypeInspection", + "shortDescription": { + "text": "typing.assert_type" + }, + "fullDescription": { + "text": "Checks 'typing.assert_type(val, typ, /)' calls and reports cases when 'val''s inferred type is not 'typ'. Example: 'def greet(name: str) -> None:\n assert_type(name, str) # OK\n assert_type(name, int) # Expected type 'int', got 'str' instead' Inspection ID: PyAssertTypeInspection", + "markdown": "Checks `typing.assert_type(val, typ, /)` calls and reports cases when `val`'s inferred type is not\n`typ`.\n\n**Example:**\n\n\n def greet(name: str) -> None:\n assert_type(name, str) # OK\n assert_type(name, int) # Expected type 'int', got 'str' instead\n\nInspection ID: PyAssertTypeInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyAssertType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyChainedComparisonsInspection", + "shortDescription": { + "text": "Too complex chained comparisons" + }, + "fullDescription": { + "text": "Reports chained comparisons that can be simplified. Example: 'def do_comparison(x):\n xmin = 10\n xmax = 100\n if x >= xmin and x <= xmax:\n pass' The IDE offers to simplify 'if x >= xmin and x <= xmax'. When the quick-fix is applied, the code changes to: 'def do_comparison(x):\n xmin = 10\n xmax = 100\n if xmin <= x <= xmax:\n pass' Inspection ID: PyChainedComparisonsInspection", + "markdown": "Reports chained comparisons that can be simplified.\n\n**Example:**\n\n\n def do_comparison(x):\n xmin = 10\n xmax = 100\n if x >= xmin and x <= xmax:\n pass\n\nThe IDE offers to simplify `if x >= xmin and x <= xmax`.\nWhen the quick-fix is applied, the code changes to:\n\n\n def do_comparison(x):\n xmin = 10\n xmax = 100\n if xmin <= x <= xmax:\n pass\n\nInspection ID: PyChainedComparisonsInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyChainedComparisons", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyMethodParametersInspection", + "shortDescription": { + "text": "Improper first parameter" + }, + "fullDescription": { + "text": "Reports methods that lack the first parameter that is usually named 'self'. Example: 'class Movie:\n\n def show():\n pass' When the quick-fix is applied, the code changes to: 'class Movie:\n\n def show(self):\n pass' The inspection also reports naming issues in class methods. Example: 'class Movie:\n @classmethod\n def show(abc):\n pass' Since the first parameter of a class method should be 'cls', the IDE provides a quick-fix to rename it. Inspection ID: PyMethodParametersInspection", + "markdown": "Reports methods that lack the first parameter that is usually\nnamed `self`.\n\n**Example:**\n\n\n class Movie:\n\n def show():\n pass\n\nWhen the quick-fix is applied, the code changes to:\n\n\n class Movie:\n\n def show(self):\n pass\n\nThe inspection also reports naming issues in class methods.\n\n**Example:**\n\n\n class Movie:\n @classmethod\n def show(abc):\n pass\n\nSince the first parameter of a class method should be `cls`, the IDE provides a quick-fix\nto rename it.\n\nInspection ID: PyMethodParametersInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyMethodParameters", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyDocstringTypesInspection", + "shortDescription": { + "text": "Type in docstring does not match inferred type" + }, + "fullDescription": { + "text": "Reports types in docstring that do not match dynamically inferred types. Inspection ID: PyDocstringTypesInspection", + "markdown": "Reports types in docstring that do not match dynamically inferred types.\n\nInspection ID: PyDocstringTypesInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyDocstringTypes", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyCompatibilityInspection", + "shortDescription": { + "text": "Code is incompatible with specific Python versions" + }, + "fullDescription": { + "text": "Reports incompatibility with the specified versions of Python. Enable this inspection if you need your code to be compatible with a range of Python versions, for example, if you are building a library. To define the range of the inspected Python versions, select the corresponding checkboxes in the Options section. For more information about the Python versions supported by the IDE, see the web help. Inspection ID: PyCompatibilityInspection", + "markdown": "Reports incompatibility with the specified versions of Python.\nEnable this inspection if you need your code to be compatible with a range of Python versions, for example,\nif you are building a library.\n\nTo define the range of the inspected Python versions, select the corresponding checkboxes in the **Options**\nsection.\n\nFor more information about the Python versions supported by the IDE, see the\n[web help](https://www.jetbrains.com/help/pycharm/python.html#support).\n\nInspection ID: PyCompatibilityInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PyCompatibility", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyGlobalUndefinedInspection", + "shortDescription": { + "text": "Global variable is not defined at the module level" + }, + "fullDescription": { + "text": "Reports problems when a variable defined through the 'global' statement is not defined in the module scope. Example: 'def foo():\n global bar\n print(bar)\n\nfoo()' As a fix, you can move the global variable declaration: 'global bar\n\n\ndef foo():\n print(bar)' Inspection ID: PyGlobalUndefinedInspection", + "markdown": "Reports problems when a variable defined through the `global`\nstatement is not defined in the module scope.\n\n**Example:**\n\n\n def foo():\n global bar\n print(bar)\n\n foo()\n\nAs a fix, you can move the global variable declaration:\n\n\n global bar\n\n\n def foo():\n print(bar)\n\nInspection ID: PyGlobalUndefinedInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyGlobalUndefined", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "UnsatisfiedRequirementInspection", + "shortDescription": { + "text": "Requirement is not satisfied" + }, + "fullDescription": { + "text": "Reports packages mentioned in requirements files (for example, 'requirements.txt', or 'dependencies' section in 'pyproject.toml' files) but not installed, or imported but not mentioned in requirements files. Inspection ID: UnsatisfiedRequirementInspection", + "markdown": "Reports packages mentioned in requirements files (for example, `requirements.txt`, or `dependencies` section in `pyproject.toml` files) but not installed,\nor imported but not mentioned in requirements files.\n\nInspection ID: UnsatisfiedRequirementInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnsatisfiedRequirement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Requirements", + "index": 10, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyMethodFirstArgAssignmentInspection", + "shortDescription": { + "text": "First argument of the method is reassigned" + }, + "fullDescription": { + "text": "Reports cases when the first parameter, such as 'self' or 'cls', is reassigned in a method. Because in most cases, there are no objectives in such reassignment, the IDE indicates an error. Example: 'class Account:\n def calc(self, balance):\n if balance == 0:\n self = balance\n return self' As a fix, you might want to check and modify the algorithm to ensure that reassignment is needed. If everything is correct, you can invoke intention actions for this code and opt to ignore the warning. Inspection ID: PyMethodFirstArgAssignmentInspection", + "markdown": "Reports cases when the first parameter,\nsuch as `self` or `cls`, is reassigned in a method.\nBecause in most cases, there are no objectives in such reassignment, the\nIDE indicates an error.\n\n**Example:**\n\n\n class Account:\n def calc(self, balance):\n if balance == 0:\n self = balance\n return self\n\nAs a fix, you might want to check and modify the algorithm to ensure that reassignment is needed. If everything is correct,\nyou can invoke intention actions for this code and opt to ignore the warning.\n\nInspection ID: PyMethodFirstArgAssignmentInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyMethodFirstArgAssignment", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyNewStyleGenericSyntaxInspection", + "shortDescription": { + "text": "Invalid usage of new-style type parameters and type aliases" + }, + "fullDescription": { + "text": "Reports invalid usage of PEP 695 type parameter syntax Finds the following problems in function and class definitions and new-style type alias statements: Extending typing.Generic in new-style generic classes Extending parameterized typing.Protocol in new-style generic classes Using generic upper bounds and constraints with type parameters for ParamSpec and TypeVarTuple Mixing traditional and new-style type variables Using traditional type variables in new-style type aliases Examples: 'from typing import Generic\n\n class Example[T](Generic[T]): ... # Classes with type parameter list should not extend 'Generic'' 'class Example[T: (list[S], str)]: ... # Generic types are not allowed inside constraints and bounds of type parameters' 'from typing import TypeVar\n\n K = TypeVar(\"K\")\n\n class ClassC[V]:\n def method2[M](self, a: M, b: K) -> M | K: ... # Mixing traditional and new-style TypeVars is not allowed' Inspection ID: PyNewStyleGenericSyntaxInspection", + "markdown": "Reports invalid usage of [PEP 695](https://www.python.org/dev/peps/pep-0695/) type parameter syntax\n\n\nFinds the following problems in function and class definitions and new-style type alias statements:\n\n* Extending typing.Generic in new-style generic classes\n* Extending parameterized typing.Protocol in new-style generic classes\n* Using generic upper bounds and constraints with type parameters for ParamSpec and TypeVarTuple\n* Mixing traditional and new-style type variables\n* Using traditional type variables in new-style type aliases\n\n\nExamples:\n\n\n from typing import Generic\n\n class Example[T](Generic[T]): ... # Classes with type parameter list should not extend 'Generic'\n\n\n class Example[T: (list[S], str)]: ... # Generic types are not allowed inside constraints and bounds of type parameters\n\n\n from typing import TypeVar\n\n K = TypeVar(\"K\")\n\n class ClassC[V]:\n def method2[M](self, a: M, b: K) -> M | K: ... # Mixing traditional and new-style TypeVars is not allowed\n\nInspection ID: PyNewStyleGenericSyntaxInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyNewStyleGenericSyntax", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyProtocolInspection", + "shortDescription": { + "text": "Invalid protocol definitions and usages" + }, + "fullDescription": { + "text": "Reports invalid definitions and usages of protocols introduced in PEP-544. Example: 'from typing import Protocol\n\n\nclass MyProtocol(Protocol):\n def method(self, p: int) -> str:\n pass\n\n\nclass MyClass(MyProtocol):\n def method(self, p: str) -> int: # Type of 'method' is not compatible with 'MyProtocol'\n pass\n\n\nclass MyAnotherProtocol(MyClass, Protocol): # All bases of a protocol must be protocols\n pass' Inspection ID: PyProtocolInspection", + "markdown": "Reports invalid definitions and usages of protocols introduced in\n[PEP-544](https://www.python.org/dev/peps/pep-0544/).\n\n**Example:**\n\n\n from typing import Protocol\n\n\n class MyProtocol(Protocol):\n def method(self, p: int) -> str:\n pass\n\n\n class MyClass(MyProtocol):\n def method(self, p: str) -> int: # Type of 'method' is not compatible with 'MyProtocol'\n pass\n\n\n class MyAnotherProtocol(MyClass, Protocol): # All bases of a protocol must be protocols\n pass\n\nInspection ID: PyProtocolInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyProtocol", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyTypeHintsInspection", + "shortDescription": { + "text": "Invalid type hints definitions and usages" + }, + "fullDescription": { + "text": "Reports invalid usages of type hints. Example: 'from typing import TypeVar\n\nT0 = TypeVar('T1') # Argument of 'TypeVar' must be 'T0'\n\n\ndef b(p: int) -> int: # Type specified both in a comment and annotation\n # type: (int) -> int\n pass\n\n\ndef c(p1, p2): # Type signature has too many arguments\n # type: (int) -> int\n pass' Available quick-fixes offer various actions. You can rename, remove, or move problematic elements. You can also manually modify type declarations to ensure no warning is shown. Inspection ID: PyTypeHintsInspection", + "markdown": "Reports invalid usages of type hints.\n\n**Example:**\n\n\n from typing import TypeVar\n\n T0 = TypeVar('T1') # Argument of 'TypeVar' must be 'T0'\n\n\n def b(p: int) -> int: # Type specified both in a comment and annotation\n # type: (int) -> int\n pass\n\n\n def c(p1, p2): # Type signature has too many arguments\n # type: (int) -> int\n pass\n\nAvailable quick-fixes offer various actions. You can rename, remove, or move problematic elements. You can also manually modify type declarations to ensure no warning is shown.\n\nInspection ID: PyTypeHintsInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyTypeHints", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyMethodMayBeStaticInspection", + "shortDescription": { + "text": "Method is not declared static" + }, + "fullDescription": { + "text": "Reports any methods that do not require a class instance creation and can be made static. Example: 'class MyClass(object):\n def my_method(self, x):\n print(x)' If a Make function from method quick-fix is applied, the code changes to: 'def my_method(x):\n print(x)\n\n\nclass MyClass(object):\n pass' If you select the Make method static quick-fix, the '@staticmethod' decorator is added: 'class MyClass(object):\n @staticmethod\n def my_method(x):\n print(x)' Inspection ID: PyMethodMayBeStaticInspection", + "markdown": "Reports any methods that do not require a class instance creation and can be\nmade static.\n\n**Example:**\n\n\n class MyClass(object):\n def my_method(self, x):\n print(x)\n\nIf a **Make function from method** quick-fix is applied, the code changes to:\n\n\n def my_method(x):\n print(x)\n\n\n class MyClass(object):\n pass\n\nIf you select the **Make method static** quick-fix, the `@staticmethod` decorator is added:\n\n\n class MyClass(object):\n @staticmethod\n def my_method(x):\n print(x)\n\nInspection ID: PyMethodMayBeStaticInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyMethodMayBeStatic", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyTupleAssignmentBalanceInspection", + "shortDescription": { + "text": "Tuple assignment balance is incorrect" + }, + "fullDescription": { + "text": "Reports cases when the number of expressions on the right-hand side and targets on the left-hand side are not the same. Example: 't = ('red', 'blue', 'green', 'white')\n(c1, c2, c3) = t' As a quick-fix, you can modify the highlighted code fragment to restore the tuple balance. Inspection ID: PyTupleAssignmentBalanceInspection", + "markdown": "Reports cases when the number of expressions on the right-hand side\nand targets on the left-hand side are not the same.\n\n**Example:**\n\n\n t = ('red', 'blue', 'green', 'white')\n (c1, c2, c3) = t\n\nAs a quick-fix, you can modify the highlighted code fragment to restore the tuple\nbalance.\n\nInspection ID: PyTupleAssignmentBalanceInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyTupleAssignmentBalance", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyClassHasNoInitInspection", + "shortDescription": { + "text": "Class has no `__init__` method" + }, + "fullDescription": { + "text": "Reports cases in Python 2 when a class has no '__init__' method, neither its parent classes. Example: 'class Book():\n pass' The quick-fix adds the '__init__' method: 'class Book():\n def __init__(self):\n pass' Inspection ID: PyClassHasNoInitInspection", + "markdown": "Reports cases in Python 2 when a class has no `__init__` method, neither its parent\nclasses.\n\n**Example:**\n\n\n class Book():\n pass\n\nThe quick-fix adds the `__init__` method:\n\n\n class Book():\n def __init__(self):\n pass\n\nInspection ID: PyClassHasNoInitInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyClassHasNoInit", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyArgumentEqualDefaultInspection", + "shortDescription": { + "text": "The function argument is equal to the default parameter value" + }, + "fullDescription": { + "text": "Reports a problem when an argument passed to the function is equal to the default parameter value. This inspection is disabled by default to avoid performance degradation. Example: 'def my_function(a: int = 2):\n print(a)\n\n\nmy_function(2)' Inspection ID: PyArgumentEqualDefaultInspection", + "markdown": "Reports a problem when an argument\npassed to the function is equal to the default parameter value.\n\nThis inspection is disabled by default to avoid performance degradation.\n\n**Example:**\n\n\n def my_function(a: int = 2):\n print(a)\n\n\n my_function(2)\n\nInspection ID: PyArgumentEqualDefaultInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "PyArgumentEqualDefault", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyClassVarInspection", + "shortDescription": { + "text": "Invalid usage of ClassVar variables" + }, + "fullDescription": { + "text": "Reports invalid usages of ClassVar annotations. Example: 'from typing import ClassVar\n\n\nclass Cat:\n color: ClassVar[str] = \"white\"\n weight: int\n\n def __init__(self, weight: int):\n self.weight = weight\n\n\nCat.color = \"black\" # OK\nmy_cat = Cat(5)\nmy_cat.color = \"gray\" # Error, setting class variable on instance' Inspection ID: PyClassVarInspection", + "markdown": "Reports invalid usages of [ClassVar](https://docs.python.org/3/library/typing.html#typing.ClassVar) annotations.\n\n**Example:**\n\n\n from typing import ClassVar\n\n\n class Cat:\n color: ClassVar[str] = \"white\"\n weight: int\n\n def __init__(self, weight: int):\n self.weight = weight\n\n\n Cat.color = \"black\" # OK\n my_cat = Cat(5)\n my_cat.color = \"gray\" # Error, setting class variable on instance\n\nInspection ID: PyClassVarInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyClassVar", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyDictCreationInspection", + "shortDescription": { + "text": "Dictionary creation can be rewritten by dictionary literal" + }, + "fullDescription": { + "text": "Reports situations when you can rewrite dictionary creation by using a dictionary literal. This approach brings performance improvements. Example: 'dic = {}\ndic['var'] = 1' When the quick-fix is applied, the code changes to: 'dic = {'var': 1}' Inspection ID: PyDictCreationInspection", + "markdown": "Reports situations when you can rewrite dictionary creation\nby using a dictionary literal.\n\nThis approach brings performance improvements.\n\n**Example:**\n\n\n dic = {}\n dic['var'] = 1\n\nWhen the quick-fix is applied, the code changes to:\n\n\n dic = {'var': 1}\n\nInspection ID: PyDictCreationInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyDictCreation", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyStringFormatInspection", + "shortDescription": { + "text": "Errors in string formatting operations" + }, + "fullDescription": { + "text": "Reports errors in string formatting operations. Example 1: '\"Hello {1}\".format(\"people\")' Example 2: 'def bar():\n return 1\n\n\n\"%s %s\" % bar()' As a fix, you need to rewrite string formatting fragments to adhere to the formatting syntax. Inspection ID: PyStringFormatInspection", + "markdown": "Reports errors in string formatting operations.\n\n**Example 1:**\n\n\n \"Hello {1}\".format(\"people\")\n\n**Example 2:**\n\n\n def bar():\n return 1\n\n\n \"%s %s\" % bar()\n\nAs a fix, you need to rewrite string formatting fragments to\nadhere to the [formatting syntax](https://docs.python.org/3/library/string.html#format-string-syntax).\n\nInspection ID: PyStringFormatInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyStringFormat", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyExceptionInheritInspection", + "shortDescription": { + "text": "Exceptions do not inherit from standard 'Exception' class" + }, + "fullDescription": { + "text": "Reports cases when a custom exception class is raised but does not inherit from the builtin Exception class. Example: 'class A:\n pass\n\n\ndef me_exception():\n raise A()' The proposed quick-fix changes the code to: 'class A(Exception):\n pass\n\n\ndef me_exception():\n raise A()' Inspection ID: PyExceptionInheritInspection", + "markdown": "Reports cases when a custom exception class is\nraised but does not inherit from the\n[builtin Exception class](https://docs.python.org/3/library/exceptions.html).\n\n**Example:**\n\n\n class A:\n pass\n\n\n def me_exception():\n raise A()\n\nThe proposed quick-fix changes the code to:\n\n\n class A(Exception):\n pass\n\n\n def me_exception():\n raise A()\n\nInspection ID: PyExceptionInheritInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyExceptionInherit", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyAssignmentToLoopOrWithParameterInspection", + "shortDescription": { + "text": "Assignments to 'for' loop or 'with' statement parameter" + }, + "fullDescription": { + "text": "Reports the cases when you rewrite a loop variable with an inner loop. Example: 'for i in range(5):\n for i in range(20, 25):\n print(\"Inner\", i)\n print(\"Outer\", i)' It also warns you if a variable declared in the 'with' statement is redeclared inside the statement body: 'with open(\"file\") as f:\n f.read()\n with open(\"file\") as f:' Inspection ID: PyAssignmentToLoopOrWithParameterInspection", + "markdown": "Reports the cases when you rewrite a loop variable with an inner loop.\n\n**Example:**\n\n\n for i in range(5):\n for i in range(20, 25):\n print(\"Inner\", i)\n print(\"Outer\", i)\n \nIt also warns you if a variable declared in the `with` statement is redeclared inside the statement body:\n\n\n with open(\"file\") as f:\n f.read()\n with open(\"file\") as f:\n \nInspection ID: PyAssignmentToLoopOrWithParameterInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyAssignmentToLoopOrWithParameter", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyInconsistentReturnsInspection", + "shortDescription": { + "text": "Inconsistent return statements" + }, + "fullDescription": { + "text": "Highlights inconsistent return statements in functions. According to PEP8, either all return statements in a function should return an expression, or none of them should. PEP8's recommendation: Either all return statements in a function should return an expression, or none of them should. If any return statement returns an expression, any return statements where no value is returned should explicitly state this as return None, and an explicit return statement should be present at the end of the function (if reachable): '# Correct:\n\ndef foo(x):\n if x >= 0:\n return math.sqrt(x)\n else:\n return None\n\ndef bar(x):\n if x < 0:\n return None\n return math.sqrt(x)' '# Wrong:\n\ndef foo(x):\n if x >= 0:\n return math.sqrt(x)\n\ndef bar(x):\n if x < 0:\n return\n return math.sqrt(x)' Inspection ID: PyInconsistentReturnsInspection", + "markdown": "Highlights inconsistent return statements in functions. According to PEP8, either all return statements in a function should return an expression, or none of them should.\n\n\nPEP8's recommendation:\nEither all return statements in a function should return an expression, or none of them should.\nIf any return statement returns an expression, any return statements where no value is returned\nshould explicitly state this as return None, and an explicit return statement should be present\nat the end of the function (if reachable):\n\n\n # Correct:\n\n def foo(x):\n if x >= 0:\n return math.sqrt(x)\n else:\n return None\n\n def bar(x):\n if x < 0:\n return None\n return math.sqrt(x)\n\n\n # Wrong:\n\n def foo(x):\n if x >= 0:\n return math.sqrt(x)\n\n def bar(x):\n if x < 0:\n return\n return math.sqrt(x)\n\nInspection ID: PyInconsistentReturnsInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyInconsistentReturns", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyFromFutureImportInspection", + "shortDescription": { + "text": "Improper position of from __future__ import" + }, + "fullDescription": { + "text": "Reports 'from __future__ import' statements that are used not at the beginning of a file. Example: 'a = 1\nfrom __future__ import print_function\nprint()' When the quick-fix is applied, the code changes to: 'from __future__ import print_function\n\na = 1\nprint()' Inspection ID: PyFromFutureImportInspection", + "markdown": "Reports `from __future__ import`\nstatements that are used not at\nthe beginning of a file.\n\n**Example:**\n\n\n a = 1\n from __future__ import print_function\n print()\n\nWhen the quick-fix is applied, the code changes to:\n\n\n from __future__ import print_function\n\n a = 1\n print()\n\nInspection ID: PyFromFutureImportInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyFromFutureImport", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyUnresolvedReferencesInspection", + "shortDescription": { + "text": "Unresolved references" + }, + "fullDescription": { + "text": "Reports references in your code that cannot be resolved. In a dynamically typed language, this is possible in a limited number of cases. If a reference type is unknown, then its attributes are not highlighted as unresolved even if you know that they should be: 'def print_string(s):\n print(s.abc())' In this code fragment 's' is always a string and 'abc' should be highlighted as unresolved. However, 's' type is inferred as 'Any' and no warning is reported. The IDE provides quick-fix actions to add missing references on-the-fly. Inspection ID: PyUnresolvedReferencesInspection", + "markdown": "Reports references in your code that cannot be resolved.\n\nIn a dynamically typed language, this is possible in a limited number of cases.\n\nIf a reference type is unknown, then its attributes are not highlighted as unresolved even if you know that they should be:\n\n\n def print_string(s):\n print(s.abc())\n\nIn this code fragment `s` is always a string and `abc` should be highlighted as unresolved. However, `s`\ntype is inferred as `Any` and no warning is reported.\n\nThe IDE provides quick-fix actions to add missing references on-the-fly.\n\nInspection ID: PyUnresolvedReferencesInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PyUnresolvedReferences", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PySuperArgumentsInspection", + "shortDescription": { + "text": "Wrong arguments to call super" + }, + "fullDescription": { + "text": "Reports cases when any call to 'super(A, B)' does not meet the following requirements: 'B' is an instance of 'A' 'B' a subclass of 'A' Example: 'class Figure:\n def color(self):\n pass\n\n\nclass Rectangle(Figure):\n def color(self):\n pass\n\n\nclass Square(Figure):\n def color(self):\n return super(Rectangle, self).color() # Square is not an instance or subclass of Rectangle' As a fix, you can make the 'Square' an instance of the 'Rectangle' class. Inspection ID: PySuperArgumentsInspection", + "markdown": "Reports cases when any call to `super(A, B)` does not meet the\nfollowing requirements:\n\n* `B` is an instance of `A`\n* `B` a subclass of `A`\n\n**Example:**\n\n\n class Figure:\n def color(self):\n pass\n\n\n class Rectangle(Figure):\n def color(self):\n pass\n\n\n class Square(Figure):\n def color(self):\n return super(Rectangle, self).color() # Square is not an instance or subclass of Rectangle\n\nAs a fix, you can make the `Square` an instance of the `Rectangle` class.\n\nInspection ID: PySuperArgumentsInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PySuperArguments", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyPackageRequirementsInspection", + "shortDescription": { + "text": "Unsatisfied package requirements" + }, + "fullDescription": { + "text": "Reports packages mentioned in requirements files (for example, 'requirements.txt' or 'Pipfile') but not installed, or imported but not mentioned in requirements files. The IDE shows a quick-fix banner so that you can install the missing packages in one click. Inspection ID: PyPackageRequirementsInspection", + "markdown": "Reports packages mentioned in requirements files (for example, `requirements.txt` or `Pipfile`) but not installed,\nor imported but not mentioned in requirements files.\n\n\nThe IDE shows a quick-fix banner so that you can install the missing packages in one click.\n\nInspection ID: PyPackageRequirementsInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyPackageRequirements", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyNonAsciiCharInspection", + "shortDescription": { + "text": "File contains non-ASCII character" + }, + "fullDescription": { + "text": "Reports cases in Python 2 when a file contains non-ASCII characters and does not have an encoding declaration at the top. Example: 'class A(object):\n# №5\n def __init__(self):\n pass' In this example, the IDE reports a non-ASCII symbol in a comment and a lack of encoding declaration. Apply the proposed quick-fix to add a missing encoding declaration: '# coding=utf-8\nclass A(object)\n# №5\n def __init__(self):\n pass' Inspection ID: PyNonAsciiCharInspection", + "markdown": "Reports cases in Python 2 when a file contains non-ASCII characters and does not\nhave an encoding declaration at the top.\n\n**Example:**\n\n\n class A(object):\n # №5\n def __init__(self):\n pass\n\nIn this example, the IDE reports a non-ASCII symbol in a comment and a lack of encoding\ndeclaration. Apply the proposed quick-fix to add a missing encoding declaration:\n\n\n # coding=utf-8\n class A(object)\n # №5\n def __init__(self):\n pass\n\nInspection ID: PyNonAsciiCharInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyNonAsciiChar", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyTrailingSemicolonInspection", + "shortDescription": { + "text": "Prohibited trailing semicolon in a statement" + }, + "fullDescription": { + "text": "Reports trailing semicolons in statements. Example: 'def my_func(a):\n c = a ** 2;\n return c' IDE provides a quick-fix that removes a trailing semicolon. When you apply it, the code changes to: 'def my_func(a):\n c = a ** 2\n return c' Inspection ID: PyTrailingSemicolonInspection", + "markdown": "Reports trailing semicolons in statements.\n\n**Example:**\n\n\n def my_func(a):\n c = a ** 2;\n return c\n\nIDE provides a quick-fix that removes a trailing semicolon. When you\napply it, the code changes to:\n\n\n def my_func(a):\n c = a ** 2\n return c\n\nInspection ID: PyTrailingSemicolonInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyTrailingSemicolon", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyRedundantParenthesesInspection", + "shortDescription": { + "text": "Redundant parentheses" + }, + "fullDescription": { + "text": "Reports about redundant parentheses in expressions. The IDE provides the quick-fix action to remove the redundant parentheses. Inspection ID: PyRedundantParenthesesInspection", + "markdown": "Reports about redundant parentheses in expressions.\n\nThe IDE provides the quick-fix action to remove the redundant parentheses.\n\nInspection ID: PyRedundantParenthesesInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyRedundantParentheses", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyAbstractClassInspection", + "shortDescription": { + "text": "Invalid abstract class definition and usages" + }, + "fullDescription": { + "text": "Reports invalid definition and usages of abstract classes. Example: 'from abc import abstractmethod, ABC\n\n\nclass Figure(ABC):\n\n @abstractmethod\n def do_figure(self):\n pass\n\n\nclass Triangle(Figure): # Not all abstract methods are defined in 'Triangle' class\n def do_triangle(self):\n pass\n\n\nTriangle() # Cannot instantiate abstract class 'Triangle'' When the quick-fix is applied, the IDE implements an abstract method for the 'Triangle' class: 'from abc import abstractmethod, ABC\n\n\nclass Figure(ABC):\n\n @abstractmethod\n def do_figure(self):\n pass\n\n\nclass Triangle(Figure):\n def do_figure(self):\n pass\n\n def do_triangle(self):\n pass\n\n\nTriangle()' It also warns you if 'abc.abstractmethod' is used in a class whose metaclass is not 'abc.ABCMeta': '' 'from abc import abstractmethod\n\n\nclass MyClass:\n @abstractmethod # 'MyClass' is not abstract\n def foo(self):\n ...' Inspection ID: PyAbstractClassInspection", + "markdown": "Reports invalid definition and usages of abstract classes.\n\n**Example:**\n\n\n from abc import abstractmethod, ABC\n\n\n class Figure(ABC):\n\n @abstractmethod\n def do_figure(self):\n pass\n\n\n class Triangle(Figure): # Not all abstract methods are defined in 'Triangle' class\n def do_triangle(self):\n pass\n\n\n Triangle() # Cannot instantiate abstract class 'Triangle'\n\nWhen the quick-fix is applied, the IDE implements an abstract method for the `Triangle` class:\n\n\n from abc import abstractmethod, ABC\n\n\n class Figure(ABC):\n\n @abstractmethod\n def do_figure(self):\n pass\n\n\n class Triangle(Figure):\n def do_figure(self):\n pass\n\n def do_triangle(self):\n pass\n\n\n Triangle()\n\nIt also warns you if `abc.abstractmethod` is used in a class whose metaclass is not `abc.ABCMeta`:\n\n from abc import abstractmethod\n\n\n class MyClass:\n @abstractmethod # 'MyClass' is not abstract\n def foo(self):\n ...\n\nInspection ID: PyAbstractClassInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyAbstractClass", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyOldStyleClassesInspection", + "shortDescription": { + "text": "Old-style class contains new-style class features" + }, + "fullDescription": { + "text": "Reports occurrences of new-style class features in old-style classes. The inspection highlights '__slots__', '__getattribute__', and 'super()' inside old-style classes. Inspection ID: PyOldStyleClassesInspection", + "markdown": "Reports occurrences of\n[new-style class features](https://www.python.org/doc/newstyle/)\nin old-style classes. The inspection highlights\n`__slots__`, `__getattribute__`, and `super()`\ninside old-style classes.\n\nInspection ID: PyOldStyleClassesInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyOldStyleClasses", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyUnnecessaryCastInspection", + "shortDescription": { + "text": "Unnecessary type cast" + }, + "fullDescription": { + "text": "Reports unnecessary calls to typing.cast when the expression already has the specified target type. Example: 'from typing import cast\n\na: int\nb = cast(int, a) # Unnecessary, a is already int' Inspection ID: PyUnnecessaryCastInspection", + "markdown": "Reports unnecessary calls to typing.cast when the expression already has the specified target type.\n\n**Example:**\n\n\n from typing import cast\n\n a: int\n b = cast(int, a) # Unnecessary, a is already int\n\nInspection ID: PyUnnecessaryCastInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyUnnecessaryCast", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyArgumentListInspection", + "shortDescription": { + "text": "Incorrect call arguments" + }, + "fullDescription": { + "text": "Reports discrepancies between declared parameters and actual arguments, as well as incorrect arguments, for example, duplicate named arguments, and incorrect argument order. Example: 'class Foo:\n def __call__(self, p1: int, *, p2: str = \"%\"):\n return p2 * p1\n\n\nbar = Foo()\nbar.__call__() # unfilled parameter\nbar(5, \"#\") # unexpected argument' The correct code fragment looks at follows: 'class Foo:\n def __call__(self, p1: int, *, p2: str = \"%\"):\n return p2 * p1\n\n\nbar = Foo()\nbar.__call__(5)\nbar(5, p2=\"#\")' Inspection ID: PyArgumentListInspection", + "markdown": "Reports discrepancies between declared parameters and actual arguments, as well as\nincorrect arguments, for example, duplicate named arguments, and incorrect argument order.\n\n**Example:**\n\n\n class Foo:\n def __call__(self, p1: int, *, p2: str = \"%\"):\n return p2 * p1\n\n\n bar = Foo()\n bar.__call__() # unfilled parameter\n bar(5, \"#\") # unexpected argument\n\nThe correct code fragment looks at follows:\n\n\n class Foo:\n def __call__(self, p1: int, *, p2: str = \"%\"):\n return p2 * p1\n\n\n bar = Foo()\n bar.__call__(5)\n bar(5, p2=\"#\")\n\nInspection ID: PyArgumentListInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PyArgumentList", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyInterpreterInspection", + "shortDescription": { + "text": "An invalid interpreter" + }, + "fullDescription": { + "text": "Reports problems if there is no Python interpreter configured for the project or if the interpreter is invalid. Without a properly configured interpreter, you cannot execute your Python scripts and benefit from some Python code insight features. The IDE provides quick access to the interpreter settings. Inspection ID: PyInterpreterInspection", + "markdown": "Reports problems if there is no Python interpreter configured for the project or if the interpreter is invalid. Without a properly\nconfigured interpreter, you cannot execute your Python scripts and benefit from some Python code insight features.\n\nThe IDE provides quick access to the interpreter settings.\n\nInspection ID: PyInterpreterInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PyInterpreter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyBroadExceptionInspection", + "shortDescription": { + "text": "Unclear exception clauses" + }, + "fullDescription": { + "text": "Reports exception clauses that do not provide specific information about the problem. Example: Clauses that do not specify an exception class Clauses that are specified as 'Exception' Inspection ID: PyBroadExceptionInspection", + "markdown": "Reports exception clauses that do not provide specific information\nabout the problem.\n\n**Example:**\n\n* Clauses that do not specify an exception class\n* Clauses that are specified as `Exception`\n\nInspection ID: PyBroadExceptionInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyBroadException", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyTypeCheckerInspection", + "shortDescription": { + "text": "Incorrect type" + }, + "fullDescription": { + "text": "Reports type errors in function call expressions, targets, and return values. In a dynamically typed language, this is possible in a limited number of cases. Types of function parameters can be specified in docstrings or in Python 3 function annotations. Example: 'def foo() -> int:\n return \"abc\" # Expected int, got str\n\n\na: str\na = foo() # Expected str, got int' With the quick-fix, you can modify the problematic types: 'def foo() -> str:\n return \"abc\"\n\n\na: str\na = foo()' Inspection ID: PyTypeCheckerInspection", + "markdown": "Reports type errors in function call expressions, targets, and return values. In a dynamically typed language, this is possible in a limited number of cases.\n\nTypes of function parameters can be specified in\ndocstrings or in Python 3 function annotations.\n\n**Example:**\n\n\n def foo() -> int:\n return \"abc\" # Expected int, got str\n\n\n a: str\n a = foo() # Expected str, got int\n\nWith the quick-fix, you can modify the problematic types:\n\n\n def foo() -> str:\n return \"abc\"\n\n\n a: str\n a = foo()\n\nInspection ID: PyTypeCheckerInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PyTypeChecker", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyPropertyAccessInspection", + "shortDescription": { + "text": "Inappropriate access to properties" + }, + "fullDescription": { + "text": "Reports cases when properties are accessed inappropriately: Read-only properties are set Write-only properties are read Non-deletable properties are deleted Example: 'class MyClass:\n @property\n def read_only(self): return None\n\n def __write_only_setter(self, value): pass\n\n write_only = property(None, __write_only_setter)\n\n\na = MyClass()\na.read_only = 10 # property cannot be set\ndel a.read_only # property cannot be deleted\nprint(a.write_only) # property cannot be read' Inspection ID: PyPropertyAccessInspection", + "markdown": "Reports cases when properties are accessed inappropriately:\n\n* Read-only properties are set\n* Write-only properties are read\n* Non-deletable properties are deleted\n\n**Example:**\n\n\n class MyClass:\n @property\n def read_only(self): return None\n\n def __write_only_setter(self, value): pass\n\n write_only = property(None, __write_only_setter)\n\n\n a = MyClass()\n a.read_only = 10 # property cannot be set\n del a.read_only # property cannot be deleted\n print(a.write_only) # property cannot be read\n\nInspection ID: PyPropertyAccessInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyPropertyAccess", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyStubPackagesAdvertiser", + "shortDescription": { + "text": "Stub packages advertiser" + }, + "fullDescription": { + "text": "Reports availability of stub packages. Stub package is a package that contains type information for the corresponding runtime package. Using stub packages ensures better coding assistance for the corresponding python package. Inspection ID: PyStubPackagesAdvertiser", + "markdown": "Reports availability of stub packages.\n\n\n[Stub package](https://www.python.org/dev/peps/pep-0561/) is a package that contains type information for the corresponding\nruntime package.\n\nUsing stub packages ensures better coding assistance for the corresponding python package.\n\nInspection ID: PyStubPackagesAdvertiser" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyStubPackagesAdvertiser", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyByteLiteralInspection", + "shortDescription": { + "text": "A byte literal contains a non-ASCII character" + }, + "fullDescription": { + "text": "Reports characters in byte literals that are outside ASCII range. Example: 's = b'№5'' Inspection ID: PyByteLiteralInspection", + "markdown": "Reports characters in byte literals that are outside ASCII range.\n\n**Example:**\n\n\n s = b'№5'\n\nInspection ID: PyByteLiteralInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyByteLiteral", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyRelativeImportInspection", + "shortDescription": { + "text": "Suspicious relative imports" + }, + "fullDescription": { + "text": "Reports usages of relative imports inside plain directories, for example, directories neither containing '__init__.py' nor explicitly marked as namespace packages. Inspection ID: PyRelativeImportInspection", + "markdown": "Reports usages of relative imports inside plain directories, for example, directories neither containing `__init__.py` nor\nexplicitly marked as namespace packages.\n\nInspection ID: PyRelativeImportInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyPackages", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyAugmentAssignmentInspection", + "shortDescription": { + "text": "Assignment can be replaced with augmented assignment" + }, + "fullDescription": { + "text": "Reports assignments that can be replaced with augmented assignments. Example: 'a = 23\nb = 3\na = a + b' After the quick-fix is applied, the code changes to: 'a = 23\nb = 3\na += b' Inspection ID: PyAugmentAssignmentInspection", + "markdown": "Reports assignments that can be replaced with augmented assignments.\n\n**Example:**\n\n\n a = 23\n b = 3\n a = a + b\n\nAfter the quick-fix is applied, the code changes to:\n\n\n a = 23\n b = 3\n a += b\n\nInspection ID: PyAugmentAssignmentInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "PyAugmentAssignment", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyDeprecationInspection", + "shortDescription": { + "text": "Deprecated function, class, or module" + }, + "fullDescription": { + "text": "Reports usages of Python functions, or methods that are marked as deprecated and raise the 'DeprecationWarning' or 'PendingDeprecationWarning' warning. Also, this inspection highlights usages of 'abc.abstractstaticmethod', 'abc.abstractproperty', and 'abc.abstractclassmethod' decorators. Example: 'class Foo:\n @property\n def bar(self):\n import warnings\n warnings.warn(\"this is deprecated\", DeprecationWarning, 2)\n return 5\n\n\nfoo = Foo()\nprint(foo.bar)' Inspection ID: PyDeprecationInspection", + "markdown": "Reports usages of Python functions, or methods that are marked as\ndeprecated and raise the `DeprecationWarning` or `PendingDeprecationWarning` warning.\n\nAlso, this inspection highlights usages of `abc.abstractstaticmethod`, `abc.abstractproperty`, and `abc.abstractclassmethod`\ndecorators.\n\n**Example:**\n\n\n class Foo:\n @property\n def bar(self):\n import warnings\n warnings.warn(\"this is deprecated\", DeprecationWarning, 2)\n return 5\n\n\n foo = Foo()\n print(foo.bar)\n\nInspection ID: PyDeprecationInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyDeprecation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyUnnecessaryBackslashInspection", + "shortDescription": { + "text": "Unnecessary backslash" + }, + "fullDescription": { + "text": "Reports backslashes in places where line continuation is implicit inside '()', '[]', and '{}'. Example: 'a = ('first', \\\n 'second', 'third')' When the quick-fix is applied, the redundant backslash is deleted. Inspection ID: PyUnnecessaryBackslashInspection", + "markdown": "Reports backslashes in places where line continuation is implicit inside `()`,\n`[]`, and `{}`.\n\n**Example:**\n\n\n a = ('first', \\\n 'second', 'third')\n\nWhen the quick-fix is applied, the redundant backslash is deleted.\n\nInspection ID: PyUnnecessaryBackslashInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyUnnecessaryBackslash", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyRedeclarationInspection", + "shortDescription": { + "text": "Redeclared names without usages" + }, + "fullDescription": { + "text": "Reports unconditional redeclarations of names without being used in between. Example: 'def x(): pass\n\n\nx = 2' It applies to function and class declarations, and top-level assignments. When the warning is shown, you can try a recommended action, for example, you might be prompted to rename the variable. Inspection ID: PyRedeclarationInspection", + "markdown": "Reports unconditional redeclarations of names without being used in between.\n\n**Example:**\n\n\n def x(): pass\n\n\n x = 2\n\nIt applies to function and class declarations, and top-level assignments.\n\nWhen the warning is shown, you can try a recommended action, for example, you might be prompted to\nrename the variable.\n\nInspection ID: PyRedeclarationInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyRedeclaration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyShadowingNamesInspection", + "shortDescription": { + "text": "Shadowing names from outer scopes" + }, + "fullDescription": { + "text": "Reports shadowing names defined in outer scopes. Example: 'def outer(p):\n def inner(p):\n pass' As a quick-fix, the IDE offers to remove a parameter or rename it. Inspection ID: PyShadowingNamesInspection", + "markdown": "Reports shadowing names defined in outer scopes.\n\n**Example:**\n\n\n def outer(p):\n def inner(p):\n pass\n\nAs a quick-fix, the IDE offers to remove a parameter or rename it.\n\nInspection ID: PyShadowingNamesInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyShadowingNames", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyFinalInspection", + "shortDescription": { + "text": "Invalid usages of final classes, methods, and variables" + }, + "fullDescription": { + "text": "Reports invalid usages of final classes, methods and variables. Example: 'from typing import final\n\n\n@final\nclass A:\n def a_method(self):\n pass\n\n\nclass B(A):\n def a_method(self):\n pass' Inspection ID: PyFinalInspection", + "markdown": "Reports invalid usages of final classes,\nmethods and variables.\n\n**Example:**\n\n\n from typing import final\n\n\n @final\n class A:\n def a_method(self):\n pass\n\n\n class B(A):\n def a_method(self):\n pass\n\nInspection ID: PyFinalInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyFinal", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyProtectedMemberInspection", + "shortDescription": { + "text": "Accessing a protected member of a class or a module" + }, + "fullDescription": { + "text": "Reports cases when a protected member is accessed outside the class, a descendant of the class where it is defined, or a module. Example: 'class Foo:\n def _protected_method(self):\n pass\n\n\nclass Bar(Foo):\n def public_method(self):\n self._protected_method()\n\n\nfoo = Foo()\nfoo._protected_method() # Access to a protected method' Inspection ID: PyProtectedMemberInspection", + "markdown": "Reports cases when a protected member is accessed outside the class,\na descendant of the class where it is defined, or a module.\n\n**Example:**\n\n\n class Foo:\n def _protected_method(self):\n pass\n\n\n class Bar(Foo):\n def public_method(self):\n self._protected_method()\n\n\n foo = Foo()\n foo._protected_method() # Access to a protected method\n\nInspection ID: PyProtectedMemberInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyProtectedMember", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyStubPackagesCompatibilityInspection", + "shortDescription": { + "text": "Incompatible stub packages" + }, + "fullDescription": { + "text": "Reports stub packages that do not support the version of the corresponding runtime package. A stub package contains type information for some runtime package. Inspection ID: PyStubPackagesCompatibilityInspection", + "markdown": "Reports stub packages that do not support the version of the corresponding runtime package.\n\nA [stub package](https://www.python.org/dev/peps/pep-0561/) contains type information for some runtime package.\n\nInspection ID: PyStubPackagesCompatibilityInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyStubPackagesCompatibility", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyInvalidCastInspection", + "shortDescription": { + "text": "Type cast between unrelated types" + }, + "fullDescription": { + "text": "Reports 'typing.cast' calls where the source and target types are unrelated. An error is reported when neither the source type is a subtype of the target, nor the target type is a subtype of the source. Such casts often indicate a logical error, as an instance of one type cannot be assumed to be an instance of the other, and 'typing.cast' does not dynamically validate the type. This check applies even to types that could theoretically have a common descendant. For example, it will flag a cast between two sibling classes 'Left' and 'Right' that both inherit from 'Top', because there is no direct inheritance relationship between them. Example: 'from typing import cast\n\n# Non-overlapping types — likely a mistake\ncast(int, \"a\") # 'str' -> 'int'\ncast(list[int], [\"a\"]) # 'list[str]' -> 'list[int]'\n\n# Recommended explicit escape hatch is to use a \"double cast\"\ncast(int, cast(object, \"a\")) # ok\n\n# Legitimate overlapping cases\ncast(int, object()) # a valid down cast\ncast(object, 1) # a valid up cast\n\n# While the following is an invalid cast, as list is invariant. It's not currently supported by this inspection\nint_list = [1, 2, 3]\ncast(list[object], int_list)' The inspection relies on static type information; when a type is unknown, no warning is reported. Variance of generic types is not yet considered. Inspection ID: PyInvalidCastInspection", + "markdown": "Reports `typing.cast` calls where the source and target types are unrelated.\n\nAn error is reported when neither the source type is a subtype of the target, nor the target type is a subtype of the source.\nSuch casts often indicate a logical error, as an instance of one type cannot be assumed to be an instance of the other,\nand `typing.cast` does not dynamically validate the type.\n\nThis check applies even to types that could theoretically have a common descendant.\nFor example, it will flag a cast between two sibling classes `Left` and `Right` that both inherit from `Top`,\nbecause there is no direct inheritance relationship between them.\n\n**Example:**\n\n\n from typing import cast\n\n # Non-overlapping types --- likely a mistake\n cast(int, \"a\") # 'str' -> 'int'\n cast(list[int], [\"a\"]) # 'list[str]' -> 'list[int]'\n\n # Recommended explicit escape hatch is to use a \"double cast\"\n cast(int, cast(object, \"a\")) # ok\n\n # Legitimate overlapping cases\n cast(int, object()) # a valid down cast\n cast(object, 1) # a valid up cast\n\n # While the following is an invalid cast, as `list` is invariant. It's not currently supported by this inspection\n int_list = [1, 2, 3]\n cast(list[object], int_list)\n\nThe inspection relies on static type information; when a type is unknown, no warning is reported.\n\nVariance of generic types is not yet considered.\n\nInspection ID: PyInvalidCastInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyInvalidCast", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyUnboundLocalVariableInspection", + "shortDescription": { + "text": "Unbound local variables" + }, + "fullDescription": { + "text": "Reports local variables referenced before assignment. Example: 'x = 0\nif x > 10:\n b = 3\nprint(b)' The IDE reports a problem for 'print(b)'. A possible fix is: 'x = 0\nif x > 10:\n b = 3\n print(b)' Inspection ID: PyUnboundLocalVariableInspection", + "markdown": "Reports local variables referenced before assignment.\n\n**Example:**\n\n\n x = 0\n if x > 10:\n b = 3\n print(b)\n\nThe IDE reports a problem for `print(b)`. A possible fix is:\n\n\n x = 0\n if x > 10:\n b = 3\n print(b)\n\nInspection ID: PyUnboundLocalVariableInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyUnboundLocalVariable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyNamedTupleInspection", + "shortDescription": { + "text": "Invalid definition of 'typing.NamedTuple'" + }, + "fullDescription": { + "text": "Reports invalid definition of a typing.NamedTuple. Example: 'import typing\n\n\nclass FullName(typing.NamedTuple):\n first: str\n last: str = \"\"\n middle: str' As a fix, place the field with the default value after the fields without default values: 'import typing\n\n\nclass FullName(typing.NamedTuple):\n first: str\n middle: str\n last: str = \"\"' Inspection ID: PyNamedTupleInspection", + "markdown": "Reports invalid definition of a\n[typing.NamedTuple](https://docs.python.org/3/library/typing.html#typing.NamedTuple).\n\n**Example:**\n\n\n import typing\n\n\n class FullName(typing.NamedTuple):\n first: str\n last: str = \"\"\n middle: str\n\nAs a fix, place the field with the default value after the fields without default values:\n\n\n import typing\n\n\n class FullName(typing.NamedTuple):\n first: str\n middle: str\n last: str = \"\"\n\nInspection ID: PyNamedTupleInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyNamedTuple", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyNewTypeInspection", + "shortDescription": { + "text": "Invalid usage of NewType" + }, + "fullDescription": { + "text": "Reports invalid usages of NewType. Examples: 'from typing import NewType\n\n InvalidName = NewType(\"Name\", int) # Variable name 'InvalidName' does not match NewType name 'Name'' 'from typing import Literal\n\n InvalidType = NewType(\"InvalidType\", Literal[1]) # NewType cannot be used with 'Literal[1]'' 'Base = NewType(\"Base\", str)\n\n class Derived(Base): # 'Base' cannot be subclassed\n pass' Inspection ID: PyNewTypeInspection", + "markdown": "Reports invalid usages of [NewType](https://docs.python.org/3/library/typing.html#typing.NewType).\n\n\n**Examples:**\n\n\n from typing import NewType\n\n InvalidName = NewType(\"Name\", int) # Variable name 'InvalidName' does not match NewType name 'Name'\n\n\n from typing import Literal\n\n InvalidType = NewType(\"InvalidType\", Literal[1]) # NewType cannot be used with 'Literal[1]'\n\n\n Base = NewType(\"Base\", str)\n\n class Derived(Base): # 'Base' cannot be subclassed\n pass\n\nInspection ID: PyNewTypeInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyNewType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PySingleQuotedDocstringInspection", + "shortDescription": { + "text": "Single quoted docstring" + }, + "fullDescription": { + "text": "Reports docstrings that do not adhere to the triple double-quoted string format. Example: 'def calc(self, balance=0):\n 'param: balance'\n self.balance = balance' When the quick-fix is applied, the code changes to: 'def calc(self, balance=0):\n \"\"\"param: balance\"\"\"\n self.balance = balance' Inspection ID: PySingleQuotedDocstringInspection", + "markdown": "Reports docstrings that do not adhere to the triple double-quoted string format.\n\n**Example:**\n\n\n def calc(self, balance=0):\n 'param: balance'\n self.balance = balance\n\nWhen the quick-fix is applied, the code changes to:\n\n\n def calc(self, balance=0):\n \"\"\"param: balance\"\"\"\n self.balance = balance\n\nInspection ID: PySingleQuotedDocstringInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PySingleQuotedDocstring", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyUnusedLocalInspection", + "shortDescription": { + "text": "Unused local symbols" + }, + "fullDescription": { + "text": "Reports local variables, parameters, and functions that are locally defined, but not used name in a function. Inspection ID: PyUnusedLocalInspection", + "markdown": "Reports local variables, parameters, and functions that are locally defined, but not used name in a function.\n\nInspection ID: PyUnusedLocalInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyUnusedLocal", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyReturnFromInitInspection", + "shortDescription": { + "text": "__init__ method that returns a value" + }, + "fullDescription": { + "text": "Reports occurrences of 'return' statements with a return value inside '__init__' methods of classes. Example: 'class Sum:\n def __init__(self, a, b):\n self.a = a\n self.b = b\n self.sum = a + b\n return self.sum' A constructor should not return any value. The '__init__' method should only initialize the values of instance members for news objects. As a quick-fix, the IDE offers to remove the 'return' statement. Inspection ID: PyReturnFromInitInspection", + "markdown": "Reports occurrences of `return` statements with a return value inside\n`__init__` methods of classes.\n\n**Example:**\n\n\n class Sum:\n def __init__(self, a, b):\n self.a = a\n self.b = b\n self.sum = a + b\n return self.sum\n\nA constructor should not return any value. The `__init__` method should\nonly initialize the values of instance members for news objects.\n\nAs a quick-fix, the IDE offers to remove the `return` statement.\n\nInspection ID: PyReturnFromInitInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyReturnFromInit", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyNestedDecoratorsInspection", + "shortDescription": { + "text": "Problematic nesting of decorators" + }, + "fullDescription": { + "text": "Reports problems with nesting decorators. The inspection highlights the cases when 'classmethod' or 'staticmethod' is applied before another decorator. Example: 'def innocent(f):\n return f\n\n\nclass A:\n @innocent # Decorator will not receive a callable it may expect\n @classmethod\n def f2(cls):\n pass\n\n @innocent # Decorator will not receive a callable it may expect\n @staticmethod\n def f1():\n pass' As a quick-fix, the IDE offers to remove the decorator. Inspection ID: PyNestedDecoratorsInspection", + "markdown": "Reports problems with nesting decorators. The inspection highlights the cases when `classmethod` or `staticmethod`\nis applied before another decorator.\n\n**Example:**\n\n\n def innocent(f):\n return f\n\n\n class A:\n @innocent # Decorator will not receive a callable it may expect\n @classmethod\n def f2(cls):\n pass\n\n @innocent # Decorator will not receive a callable it may expect\n @staticmethod\n def f1():\n pass\n\nAs a quick-fix, the IDE offers to remove the decorator.\n\nInspection ID: PyNestedDecoratorsInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyNestedDecorators", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyPandasTruthValueIsAmbiguousInspection", + "shortDescription": { + "text": "The truth value of a DataFrame is ambiguous" + }, + "fullDescription": { + "text": "Reports ambiguous usage of a pandas 'DataFrame' or 'Series' in a boolean context, such as 'if', 'while', or logical expressions. This typically leads to the runtime error: 'ValueError: The truth value of a DataFrame is ambiguous'. In pandas, expressions like 'df' or 'df == other' do not return a single boolean value, but rather a DataFrame or Series of booleans. Using these in control flow without explicit reduction (e.g., '.any()', '.all()', or '.empty') is ambiguous and will raise an exception. Example: if df: # ❌ Raises ValueError: The truth value of a DataFrame is ambiguous\n print(\"DataFrame exists\")\n\nif not df.empty: # ✅ Checks if DataFrame has any rows\n print(\"DataFrame exists\")\n When the quick-fix is applied, the condition is replaced with an appropriate reducer like '.any()', '.all()', or '.empty' depending on the context. Inspection ID: PyPandasTruthValueIsAmbiguousInspection", + "markdown": "Reports ambiguous usage of a pandas `DataFrame` or `Series` in a boolean context,\nsuch as `if`, `while`, or logical expressions.\nThis typically leads to the runtime error:\n`ValueError: The truth value of a DataFrame is ambiguous`.\n\n\nIn pandas, expressions like `df` or `df == other` do not return a single boolean value,\nbut rather a DataFrame or Series of booleans. Using these in control flow without explicit reduction\n(e.g., `.any()`, `.all()`, or `.empty`) is ambiguous and will raise an exception.\n\n**Example:**\n\n```\nif df: # ❌ Raises ValueError: The truth value of a DataFrame is ambiguous\n print(\"DataFrame exists\")\n\nif not df.empty: # ✅ Checks if DataFrame has any rows\n print(\"DataFrame exists\")\n```\n\n\nWhen the quick-fix is applied, the condition is replaced with an appropriate reducer\nlike `.any()`, `.all()`, or `.empty` depending on the context.\n\nInspection ID: PyPandasTruthValueIsAmbiguousInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PyPackages", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "Pandas", + "index": 0, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyMissingOrEmptyDocstringInspection", + "shortDescription": { + "text": "Missing or empty docstring" + }, + "fullDescription": { + "text": "Reports missing and empty docstrings. Example of a missing docstring 'def demo(a):\n c = a ** 2' Example of an empty docstring 'def demo(a):\n \"\"\"\n \"\"\"\n c = a ** 2' When the quick-fix is applied, the code fragments change to: 'def demo(a):\n \"\"\"\n\n :param a:\n \"\"\"\n c = a ** 2' You need to provide some details about the parameter in the generated template. Inspection ID: PyMissingOrEmptyDocstringInspection", + "markdown": "Reports missing and empty docstrings.\n\n**Example of a missing docstring**\n\n\n def demo(a):\n c = a ** 2\n\n**Example of an empty docstring**\n\n\n def demo(a):\n \"\"\"\n \"\"\"\n c = a ** 2\n\nWhen the quick-fix is applied, the code fragments change to:\n\n\n def demo(a):\n \"\"\"\n\n :param a:\n \"\"\"\n c = a ** 2\n\nYou need to provide some details about the parameter in the generated template.\n\nInspection ID: PyMissingOrEmptyDocstringInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "PyMissingOrEmptyDocstring", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyOverloadsInspection", + "shortDescription": { + "text": "Overloads in regular Python files" + }, + "fullDescription": { + "text": "Reports cases when overloads in regular Python files are placed after the implementation or when their signatures are not compatible with the implementation. Example: 'from typing import overload\n\n\n@overload\ndef foo(p1, p2): # Overload signature is not compatible with the implementation\n pass\n\n\n@overload\ndef foo(p1): # Overload signature is not compatible with the implementation\n pass\n\n\ndef foo(p1, p2, p3):\n print(p1, p2, p3)' Inspection ID: PyOverloadsInspection", + "markdown": "Reports cases when overloads in regular Python files are placed after the implementation or when their signatures are\nnot compatible with the implementation.\n\n**Example:**\n\n\n from typing import overload\n\n\n @overload\n def foo(p1, p2): # Overload signature is not compatible with the implementation\n pass\n\n\n @overload\n def foo(p1): # Overload signature is not compatible with the implementation\n pass\n\n\n def foo(p1, p2, p3):\n print(p1, p2, p3)\n\nInspection ID: PyOverloadsInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyOverloads", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyPep8NamingInspection", + "shortDescription": { + "text": "PEP 8 naming convention violation" + }, + "fullDescription": { + "text": "No description available", + "markdown": "No description available" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyPep8Naming", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyDictDuplicateKeysInspection", + "shortDescription": { + "text": "Dictionary contains duplicate keys" + }, + "fullDescription": { + "text": "Reports using the same value as the dictionary key twice. Example: 'dic = {\"a\": [1, 2], \"a\": [3, 4]}' Inspection ID: PyDictDuplicateKeysInspection", + "markdown": "Reports using the same value as the dictionary key twice.\n\n**Example:**\n\n\n dic = {\"a\": [1, 2], \"a\": [3, 4]}\n\nInspection ID: PyDictDuplicateKeysInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyDictDuplicateKeys", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyExceptClausesOrderInspection", + "shortDescription": { + "text": "Wrong order of 'except' clauses" + }, + "fullDescription": { + "text": "Reports cases when 'except' clauses are not in the proper order, from the more specific to the more generic, or one exception class is caught twice. If you do not fix the order, some exceptions may not be caught by the most specific handler. Example: 'try:\n call()\nexcept ValueError:\n pass\nexcept UnicodeError:\n pass' The IDE recommends moving the clause up. When the quick-fix is applied, the code changes to: 'try:\n call()\nexcept UnicodeError:\n pass\nexcept ValueError:\n pass' Inspection ID: PyExceptClausesOrderInspection", + "markdown": "Reports cases when `except` clauses are not in the proper order,\nfrom the more specific to the more generic, or one exception class is caught twice.\n\n\nIf you do not fix the order, some exceptions may not be caught by the most specific handler.\n\n**Example:**\n\n\n try:\n call()\n except ValueError:\n pass\n except UnicodeError:\n pass\n\nThe IDE recommends moving the clause up. When the quick-fix is applied, the code changes to:\n\n\n try:\n call()\n except UnicodeError:\n pass\n except ValueError:\n pass\n\nInspection ID: PyExceptClausesOrderInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyExceptClausesOrder", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyDataclassInspection", + "shortDescription": { + "text": "Invalid definition and usage of Data Classes" + }, + "fullDescription": { + "text": "Reports invalid definitions and usages of classes created with 'dataclasses' or 'attr' modules. Example: 'import dataclasses\n\n\n@dataclasses.dataclass\nclass FullName:\n first: str\n middle: str = \"\"\n last: str' Inspection ID: PyDataclassInspection", + "markdown": "Reports invalid definitions and usages of classes created with\n`dataclasses` or `attr` modules.\n\n**Example:**\n\n\n import dataclasses\n\n\n @dataclasses.dataclass\n class FullName:\n first: str\n middle: str = \"\"\n last: str\n\nInspection ID: PyDataclassInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PyDataclass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyClassicStyleClassInspection", + "shortDescription": { + "text": "Classic style class usage" + }, + "fullDescription": { + "text": "Reports classic style classes usage. This inspection applies only to Python 2. Example: 'class A:\n pass' With quick-fixes provided by the IDE, this code fragment changes to: 'class A(object):\n def __init__(self):\n pass' Inspection ID: PyClassicStyleClassInspection", + "markdown": "Reports [classic style classes](https://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes) usage. This inspection applies only to Python 2.\n\n**Example:**\n\n\n class A:\n pass\n\nWith quick-fixes provided by the IDE, this code fragment changes to:\n\n\n class A(object):\n def __init__(self):\n pass\n\nInspection ID: PyClassicStyleClassInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PyClassicStyleClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyNoneFunctionAssignmentInspection", + "shortDescription": { + "text": "Assigning function calls that don't return anything" + }, + "fullDescription": { + "text": "Reports cases when an assignment is done on a function that does not return anything. This inspection is similar to pylint inspection E1111. Example: 'def just_print():\n print(\"Hello!\")\n\n\naction = just_print()' As a quick-fix, the IDE offers to remove the assignment. Inspection ID: PyNoneFunctionAssignmentInspection", + "markdown": "Reports cases when an assignment is done on a function that does not return anything.\nThis inspection is similar to [pylint inspection E1111](https://docs.pylint.org/en/1.6.0/features.html#id6).\n\n**Example:**\n\n\n def just_print():\n print(\"Hello!\")\n\n\n action = just_print()\n\nAs a quick-fix, the IDE offers to remove the assignment.\n\nInspection ID: PyNoneFunctionAssignmentInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyNoneFunctionAssignment", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyPropertyDefinitionInspection", + "shortDescription": { + "text": "Incorrect property definition" + }, + "fullDescription": { + "text": "Reports problems with the arguments of 'property()' and functions annotated with '@property'. 'class C:\n @property\n def abc(self): # Getter should return or yield something\n pass\n\n @abc.setter\n def foo(self, value): # Names of function and decorator don't match\n pass\n\n @abc.setter\n def abc(self, v1, v2): # Setter signature should be (self, value)\n pass\n\n @abc.deleter\n def abc(self, v1): # Delete signature should be (self)\n pass' A quick-fix offers to update parameters. Inspection ID: PyPropertyDefinitionInspection", + "markdown": "Reports problems with the arguments of `property()` and functions\nannotated with `@property`.\n\n\n class C:\n @property\n def abc(self): # Getter should return or yield something\n pass\n\n @abc.setter\n def foo(self, value): # Names of function and decorator don't match\n pass\n\n @abc.setter\n def abc(self, v1, v2): # Setter signature should be (self, value)\n pass\n\n @abc.deleter\n def abc(self, v1): # Delete signature should be (self)\n pass\n\nA quick-fix offers to update parameters.\n\nInspection ID: PyPropertyDefinitionInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyPropertyDefinition", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyIncorrectDocstringInspection", + "shortDescription": { + "text": "Incorrect docstring" + }, + "fullDescription": { + "text": "Reports mismatched parameters in a docstring. For example, 'b' is highlighted, because there is no such a parameter in the 'add' function. 'def add(a, c):\n \"\"\"\n @param a:\n @param b:\n @return:\n \"\"\"\n pass' The inspection does not warn you of missing parameters if none of them is mentioned in a docstring: 'def mult(a, c):\n \"\"\"\n @return:\n \"\"\"\n pass' Inspection ID: PyIncorrectDocstringInspection", + "markdown": "Reports mismatched parameters in a docstring. For example, `b` is highlighted, because there is no\nsuch a parameter in the `add` function.\n\n\n def add(a, c):\n \"\"\"\n @param a:\n @param b:\n @return:\n \"\"\"\n pass\n\nThe inspection does not warn you of missing parameters if none of them is mentioned in a docstring:\n\n\n def mult(a, c):\n \"\"\"\n @return:\n \"\"\"\n pass\n\nInspection ID: PyIncorrectDocstringInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyIncorrectDocstring", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyEnumInspection", + "shortDescription": { + "text": "Invalid Enum definition and usages" + }, + "fullDescription": { + "text": "Reports invalid definition and usage of Enum. Example: 'from enum import Enum\n\n\nclass Shape(Enum):\n SQUARE = 1\n CIRCLE = 2\n\n\nclass ExtendedShape(Shape): # Enum class 'Shape' is final and cannot be subclassed\n TRIANGLE = 3' 'from enum import Enum\n\n\n class Color(Enum):\n _value_: int\n RED = 1\n GREEN = \"green\" # Type 'str' is not assignable to declared type 'int'' 'from enum import Enum\n\n\n class Pet(Enum):\n CAT = 1\n DOG: int = 2 # Type annotations are not allowed for enum members' Inspection ID: PyEnumInspection", + "markdown": "Reports invalid definition and usage of [Enum](https://peps.python.org/pep-0435/).\n\n\n**Example:**\n\n\n from enum import Enum\n\n\n class Shape(Enum):\n SQUARE = 1\n CIRCLE = 2\n\n\n class ExtendedShape(Shape): # Enum class 'Shape' is final and cannot be subclassed\n TRIANGLE = 3\n\n\n from enum import Enum\n\n\n class Color(Enum):\n _value_: int\n RED = 1\n GREEN = \"green\" # Type 'str' is not assignable to declared type 'int'\n\n\n from enum import Enum\n\n\n class Pet(Enum):\n CAT = 1\n DOG: int = 2 # Type annotations are not allowed for enum members\n\nInspection ID: PyEnumInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyEnum", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyListCreationInspection", + "shortDescription": { + "text": "Non-optimal list declaration" + }, + "fullDescription": { + "text": "Reports cases when a list declaration can be rewritten with a list literal. This ensures better performance of your application. Example: 'l = [1]\nl.append(2)' When the quick-fix is applied, the code changes to: 'l = [1, 2]' Inspection ID: PyListCreationInspection", + "markdown": "Reports cases when a list declaration\ncan be rewritten with a list literal.\n\nThis ensures better performance of your application.\n\n**Example:**\n\n\n l = [1]\n l.append(2)\n\nWhen the quick-fix is applied, the code changes to:\n\n\n l = [1, 2]\n\nInspection ID: PyListCreationInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PyListCreation", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "PyUnusedImportsInspection", + "shortDescription": { + "text": "Unused imports" + }, + "fullDescription": { + "text": "Reports unused import statements in Python code. This inspection detects import statements that are not used in the code and can be safely removed. Removing unused imports helps to keep the code clean and reduces the risk of name conflicts. Example: 'import os # Unused import\nimport sys # Used import\nfrom math import pi # Unused import\n\nprint(sys.version)' The inspection provides a quick fix to optimize imports, which removes all unused import statements. Note that some imports might be used indirectly (e.g., for side effects) and should not be removed. You can suppress this inspection for specific imports if they are needed for side effects. Inspection ID: PyUnusedImportsInspection", + "markdown": "Reports unused import statements in Python code.\n\n\nThis inspection detects import statements that are not used in the code and can be safely removed.\nRemoving unused imports helps to keep the code clean and reduces the risk of name conflicts.\n\n**Example:**\n\n\n import os # Unused import\n import sys # Used import\n from math import pi # Unused import\n\n print(sys.version)\n\n\nThe inspection provides a quick fix to optimize imports, which removes all unused import statements.\n\n\nNote that some imports might be used indirectly (e.g., for side effects) and should not be removed.\nYou can suppress this inspection for specific imports if they are needed for side effects.\n\nInspection ID: PyUnusedImportsInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PyUnusedImports", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "Python", + "index": 2, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + } + ], + "language": "en-US", + "contents": ["localizedData", "nonLocalizedData"], + "isComprehensive": false + }, + { + "name": "org.editorconfig.editorconfigjetbrains", + "version": "253.31833.0", + "rules": [ + { + "id": "EditorConfigCharClassRedundancy", + "shortDescription": { + "text": "Unnecessary character class" + }, + "fullDescription": { + "text": "Reports character classes that consist of a single character. Such classes can be simplified to a character, for example '[a]'→'a'. Inspection ID: EditorConfigCharClassRedundancy", + "markdown": "Reports character classes that consist of a single character. Such classes can be simplified to a character, for example `[a]`→`a`.\n\nInspection ID: EditorConfigCharClassRedundancy" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigCharClassRedundancy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigDeprecatedDescriptor", + "shortDescription": { + "text": "Deprecated property" + }, + "fullDescription": { + "text": "Reports EditorConfig properties that are no longer supported. Inspection ID: EditorConfigDeprecatedDescriptor", + "markdown": "Reports EditorConfig properties that are no longer supported.\n\nInspection ID: EditorConfigDeprecatedDescriptor" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigDeprecatedDescriptor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigRootDeclarationUniqueness", + "shortDescription": { + "text": "Extra top-level declaration" + }, + "fullDescription": { + "text": "Reports multiple top-level declarations. There can be only one optional “root=true” top-level declaration in the EditorConfig file. Using multiple top-level declarations is not allowed. Inspection ID: EditorConfigRootDeclarationUniqueness", + "markdown": "Reports multiple top-level declarations. There can be only one optional \"root=true\" top-level declaration in the EditorConfig file. Using multiple top-level declarations is not allowed.\n\nInspection ID: EditorConfigRootDeclarationUniqueness" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigRootDeclarationUniqueness", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigNumerousWildcards", + "shortDescription": { + "text": "Too many wildcards" + }, + "fullDescription": { + "text": "Reports sections that contain too many wildcards. Using a lot of wildcards may lead to performance issues. Inspection ID: EditorConfigNumerousWildcards", + "markdown": "Reports sections that contain too many wildcards. Using a lot of wildcards may lead to performance issues.\n\nInspection ID: EditorConfigNumerousWildcards" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "EditorConfigNumerousWildcards", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigWildcardRedundancy", + "shortDescription": { + "text": "Redundant wildcard" + }, + "fullDescription": { + "text": "Reports wildcards that become redundant when the “**” wildcard is used in the same section. The “**” wildcard defines a broader set of files than any other wildcard. That is why, any other wildcard used in the same section has no affect and can be removed. Inspection ID: EditorConfigWildcardRedundancy", + "markdown": "Reports wildcards that become redundant when the \"\\*\\*\" wildcard is used in the same section.\n\n\nThe \"\\*\\*\" wildcard defines a broader set of files than any other wildcard.\nThat is why, any other wildcard used in the same section has no affect and can be removed.\n\nInspection ID: EditorConfigWildcardRedundancy" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigWildcardRedundancy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigPartialOverride", + "shortDescription": { + "text": "Overlapping sections" + }, + "fullDescription": { + "text": "Reports subsets of files specified in the current section that overlap with other subsets in other sections. For example: '[{foo,bar}]' and '[{foo,bas}]' both contain “foo”. Inspection ID: EditorConfigPartialOverride", + "markdown": "Reports subsets of files specified in the current section that overlap with other subsets in other sections. For example: `[{foo,bar}]` and `[{foo,bas}]` both contain \"foo\".\n\nInspection ID: EditorConfigPartialOverride" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "EditorConfigPartialOverride", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigEmptySection", + "shortDescription": { + "text": "Empty section" + }, + "fullDescription": { + "text": "Reports sections that do not contain any EditorConfig properties. Inspection ID: EditorConfigEmptySection", + "markdown": "Reports sections that do not contain any EditorConfig properties.\n\nInspection ID: EditorConfigEmptySection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigEmptySection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigHeaderUniqueness", + "shortDescription": { + "text": "EditorConfig section is not unique" + }, + "fullDescription": { + "text": "Reports sections that define the same file pattern as other sections. Inspection ID: EditorConfigHeaderUniqueness", + "markdown": "Reports sections that define the same file pattern as other sections.\n\nInspection ID: EditorConfigHeaderUniqueness" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigHeaderUniqueness", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigShadowingOption", + "shortDescription": { + "text": "Overriding property" + }, + "fullDescription": { + "text": "Reports properties that override the same properties defined earlier in the file. For example: '[*.java]\nindent_size=4\n[{*.java,*.js}]\nindent_size=2' The second section includes the same files as '[*.java]' but also sets indent_size to value 2. Thus the first declaration 'indent_size=4'will be ignored. Inspection ID: EditorConfigShadowingOption", + "markdown": "Reports properties that override the same properties defined earlier in the file.\n\nFor example:\n\n\n [*.java]\n indent_size=4\n [{*.java,*.js}]\n indent_size=2\n\nThe second section includes the same files as `[*.java]` but also sets indent_size to value 2. Thus the first declaration `indent_size=4`will be ignored.\n\nInspection ID: EditorConfigShadowingOption" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigShadowingOption", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigListAcceptability", + "shortDescription": { + "text": "Unexpected value list" + }, + "fullDescription": { + "text": "Reports lists of values that are used in properties in which lists are not supported. In this case, only a single value can be specified. Inspection ID: EditorConfigListAcceptability", + "markdown": "Reports lists of values that are used in properties in which lists are not supported. In this case, only a single value can be specified.\n\nInspection ID: EditorConfigListAcceptability" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigListAcceptability", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigShadowedOption", + "shortDescription": { + "text": "Overridden property" + }, + "fullDescription": { + "text": "Reports properties that are already defined in other sections. For example: '[*.java]\nindent_size=4\n[{*.java,*.js}]\nindent_size=2' The second section includes all '*.java' files too but it also redefines indent_size. As a result the value 2 will be used for files matching '*.java'. Inspection ID: EditorConfigShadowedOption", + "markdown": "Reports properties that are already defined in other sections.\n\nFor example:\n\n\n [*.java]\n indent_size=4\n [{*.java,*.js}]\n indent_size=2\n\nThe second section includes all `*.java` files too but it also redefines indent_size. As a result the value 2 will be used for files matching `*.java`.\n\nInspection ID: EditorConfigShadowedOption" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigShadowedOption", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigEmptyHeader", + "shortDescription": { + "text": "Empty header" + }, + "fullDescription": { + "text": "Reports sections with an empty header. Section header must contain file path globs in the format similar to one supported by 'gitignore'. Inspection ID: EditorConfigEmptyHeader", + "markdown": "Reports sections with an empty header. Section header must contain file path globs in the format similar to one supported by `gitignore`.\n\nInspection ID: EditorConfigEmptyHeader" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigEmptyHeader", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigValueCorrectness", + "shortDescription": { + "text": "Invalid property value" + }, + "fullDescription": { + "text": "Reports property values that do not meet value restrictions. For example, some properties may be only “true” or “false”, others contain only integer numbers etc. If a value has a limited set of variants, use code completion to see all of them. Inspection ID: EditorConfigValueCorrectness", + "markdown": "Reports property values that do not meet value restrictions. For example, some properties may be only \"true\" or \"false\", others contain only integer numbers etc. If a value has a limited set of variants, use code completion to see all of them.\n\nInspection ID: EditorConfigValueCorrectness" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigValueCorrectness", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigVerifyByCore", + "shortDescription": { + "text": "Invalid .editorconfig file" + }, + "fullDescription": { + "text": "Verifies the whole file using the backing EditorConfig core library and reports any failures. Any such failure would prevent EditorConfig properties from being correctly applied. Inspection ID: EditorConfigVerifyByCore", + "markdown": "Verifies the whole file using the backing EditorConfig core library and reports any failures. Any such failure would prevent EditorConfig properties from being correctly applied.\n\nInspection ID: EditorConfigVerifyByCore" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigVerifyByCore", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigValueUniqueness", + "shortDescription": { + "text": "Non-unique list value" + }, + "fullDescription": { + "text": "Reports duplicates in lists of values. Inspection ID: EditorConfigValueUniqueness", + "markdown": "Reports duplicates in lists of values.\n\nInspection ID: EditorConfigValueUniqueness" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigValueUniqueness", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigMissingRequiredDeclaration", + "shortDescription": { + "text": "Required declarations are missing" + }, + "fullDescription": { + "text": "Reports properties that miss the required declarations. Refer to the documentation for more information. Inspection ID: EditorConfigMissingRequiredDeclaration", + "markdown": "Reports properties that miss the required declarations. Refer to the documentation for more information.\n\nInspection ID: EditorConfigMissingRequiredDeclaration" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigMissingRequiredDeclaration", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigCharClassLetterRedundancy", + "shortDescription": { + "text": "Duplicate character class letter" + }, + "fullDescription": { + "text": "Reports wildcard patterns in the EditorConfig section that contain a duplicate character in the character class, for example '[aa]'. Inspection ID: EditorConfigCharClassLetterRedundancy", + "markdown": "Reports wildcard patterns in the EditorConfig section that contain a duplicate character in the character class, for example `[aa]`.\n\nInspection ID: EditorConfigCharClassLetterRedundancy" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigCharClassLetterRedundancy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigKeyCorrectness", + "shortDescription": { + "text": "Unknown property" + }, + "fullDescription": { + "text": "Reports properties that are not supported by the IDE. Note: some “ij” domain properties may require specific language plugins. Inspection ID: EditorConfigKeyCorrectness", + "markdown": "Reports properties that are not supported by the IDE. Note: some \"ij\" domain properties may require specific language plugins.\n\nInspection ID: EditorConfigKeyCorrectness" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigKeyCorrectness", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigPatternEnumerationRedundancy", + "shortDescription": { + "text": "Unnecessary braces" + }, + "fullDescription": { + "text": "Reports pattern lists that are either empty '{}' or contain just one pattern, for example '{foo}' in contrast to a list containing multiple patterns, for example '{foo,bar}'. In this case braces are handled as a part of the name. For example, the pattern '*.{a}' will match the file 'my.{a}' but not 'my.a'. Inspection ID: EditorConfigPatternEnumerationRedundancy", + "markdown": "Reports pattern lists that are either empty `{}` or contain just one pattern, for example `{foo}` in contrast to a list containing multiple patterns, for example `{foo,bar}`. In this case braces are handled as a part of the name. For example, the pattern `*.{a}` will match the file `my.{a}` but not `my.a`.\n\nInspection ID: EditorConfigPatternEnumerationRedundancy" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigPatternEnumerationRedundancy", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigEncoding", + "shortDescription": { + "text": "File encoding doesn't match EditorConfig charset" + }, + "fullDescription": { + "text": "Checks that current file encoding matches the encoding defined in \"charset\" property of .editorconfig file. Inspection ID: EditorConfigEncoding", + "markdown": "Checks that current file encoding matches the encoding defined in \"charset\" property of .editorconfig file.\n\nInspection ID: EditorConfigEncoding" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigEncoding", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigSpaceInHeader", + "shortDescription": { + "text": "Space in file pattern" + }, + "fullDescription": { + "text": "Reports space characters in wildcard patterns that affect pattern matching. If these characters are not intentional, they should be removed. Inspection ID: EditorConfigSpaceInHeader", + "markdown": "Reports space characters in wildcard patterns that affect pattern matching. If these characters are not intentional, they should be removed.\n\nInspection ID: EditorConfigSpaceInHeader" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "EditorConfigSpaceInHeader", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigOptionRedundancy", + "shortDescription": { + "text": "Redundant property" + }, + "fullDescription": { + "text": "Reports properties that are redundant when another applicable section already contains the same property and value. For example: '[*]\nindent_size=4\n[*.java]\nindent_size=4' are both applicable to '*.java' files and define the same 'indent_size' value. Inspection ID: EditorConfigOptionRedundancy", + "markdown": "Reports properties that are redundant when another applicable section already contains the same property and value.\n\n\nFor example:\n\n\n [*]\n indent_size=4\n [*.java]\n indent_size=4\n\nare both applicable to `*.java` files and define the same `indent_size` value.\n\nInspection ID: EditorConfigOptionRedundancy" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigOptionRedundancy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigRootDeclarationCorrectness", + "shortDescription": { + "text": "Unexpected top-level declaration" + }, + "fullDescription": { + "text": "Reports unexpected top-level declarations. Top-level declarations other than “root=true” are not allowed in the EditorConfig file. Inspection ID: EditorConfigRootDeclarationCorrectness", + "markdown": "Reports unexpected top-level declarations. Top-level declarations other than \"root=true\" are not allowed in the EditorConfig file.\n\nInspection ID: EditorConfigRootDeclarationCorrectness" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigRootDeclarationCorrectness", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigReferenceCorrectness", + "shortDescription": { + "text": "Invalid reference" + }, + "fullDescription": { + "text": "Reports identifiers that are either unknown or have a wrong type. Inspection ID: EditorConfigReferenceCorrectness", + "markdown": "Reports identifiers that are either unknown or have a wrong type.\n\nInspection ID: EditorConfigReferenceCorrectness" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigReferenceCorrectness", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigUnusedDeclaration", + "shortDescription": { + "text": "Unused declaration" + }, + "fullDescription": { + "text": "Reports unused declarations. Such declarations can be removed. Inspection ID: EditorConfigUnusedDeclaration", + "markdown": "Reports unused declarations. Such declarations can be removed.\n\nInspection ID: EditorConfigUnusedDeclaration" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigUnusedDeclaration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigPairAcceptability", + "shortDescription": { + "text": "Unexpected key-value pair" + }, + "fullDescription": { + "text": "Reports key-value pairs that are not allowed in the current context. Inspection ID: EditorConfigPairAcceptability", + "markdown": "Reports key-value pairs that are not allowed in the current context.\n\nInspection ID: EditorConfigPairAcceptability" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigPairAcceptability", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigPatternRedundancy", + "shortDescription": { + "text": "Duplicate or redundant pattern" + }, + "fullDescription": { + "text": "Reports file patterns that are redundant as there already are other patterns that define the same scope of files or even a broader one. For example, in '[{*.java,*}]' the first '*.java' pattern defines a narrower scope compared to '*'. That is why it is redundant and can be removed. Inspection ID: EditorConfigPatternRedundancy", + "markdown": "Reports file patterns that are redundant as there already are other patterns that define the same scope of files or even a broader one. For example, in `[{*.java,*}]` the first `*.java` pattern defines a narrower scope compared to `*`. That is why it is redundant and can be removed.\n\nInspection ID: EditorConfigPatternRedundancy" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigPatternRedundancy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigNoMatchingFiles", + "shortDescription": { + "text": "No matching files" + }, + "fullDescription": { + "text": "Reports sections with wildcard patterns that do not match any files under the directory in which the '.editorconfig' file is located. Inspection ID: EditorConfigNoMatchingFiles", + "markdown": "Reports sections with wildcard patterns that do not match any files under the directory in which the `.editorconfig` file is located.\n\nInspection ID: EditorConfigNoMatchingFiles" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigNoMatchingFiles", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EditorConfigUnexpectedComma", + "shortDescription": { + "text": "Unexpected comma" + }, + "fullDescription": { + "text": "Reports commas that cannot be used in the current context. Commas are allowed only as separators for values in lists. Inspection ID: EditorConfigUnexpectedComma", + "markdown": "Reports commas that cannot be used in the current context. Commas are allowed only as separators for values in lists.\n\nInspection ID: EditorConfigUnexpectedComma" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigUnexpectedComma", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 1, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + } + ], + "language": "en-US", + "contents": ["localizedData", "nonLocalizedData"], + "isComprehensive": false + }, + { + "name": "com.jetbrains.sh", + "version": "253.31833.0", + "rules": [ + { + "id": "ShellCheck", + "shortDescription": { + "text": "ShellCheck" + }, + "fullDescription": { + "text": "Reports shell script bugs detected by the integrated ShellCheck static analysis tool. Inspection ID: ShellCheck", + "markdown": "Reports shell script bugs detected by the integrated [ShellCheck](https://github.com/koalaman/shellcheck) static analysis tool.\n\nInspection ID: ShellCheck" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ShellCheck", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "Shell script", + "index": 3, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + } + ], + "language": "en-US", + "contents": ["localizedData", "nonLocalizedData"], + "isComprehensive": false + }, + { + "name": "com.intellij", + "version": "253.31833", + "rules": [ + { + "id": "XmlHighlighting", + "shortDescription": { + "text": "XML highlighting" + }, + "fullDescription": { + "text": "Reports XML validation problems in the results of a batch code inspection. Inspection ID: XmlHighlighting", + "markdown": "Reports XML validation problems in the results of a batch code inspection.\n\nInspection ID: XmlHighlighting" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlHighlighting", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 4, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "XmlDuplicatedId", + "shortDescription": { + "text": "Duplicate 'id' attribute" + }, + "fullDescription": { + "text": "Reports a duplicate values of the 'id' attribute in XML and HTML. Inspection ID: XmlDuplicatedId", + "markdown": "Reports a duplicate values of the `id` attribute in XML and HTML.\n\nInspection ID: XmlDuplicatedId" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlDuplicatedId", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 4, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "RegExpDuplicateCharacterInClass", + "shortDescription": { + "text": "Duplicate character in character class" + }, + "fullDescription": { + "text": "Reports duplicate characters inside a RegExp character class. Duplicate characters are unnecessary and can be removed without changing the semantics of the regex. Example: '[aabc]' After the quick-fix is applied: '[abc]' Inspection ID: RegExpDuplicateCharacterInClass", + "markdown": "Reports duplicate characters inside a RegExp character class. Duplicate characters are unnecessary and can be removed without changing the semantics of the regex.\n\n**Example:**\n\n\n [aabc]\n\nAfter the quick-fix is applied:\n\n\n [abc]\n\nInspection ID: RegExpDuplicateCharacterInClass" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpDuplicateCharacterInClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 8, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "HtmlUnknownBooleanAttribute", + "shortDescription": { + "text": "Incorrect boolean attribute" + }, + "fullDescription": { + "text": "Reports an HTML non-boolean attribute without a value. Suggests configuring attributes that should not be reported. Inspection ID: HtmlUnknownBooleanAttribute", + "markdown": "Reports an HTML non-boolean attribute without a value. Suggests configuring attributes that should not be reported.\n\nInspection ID: HtmlUnknownBooleanAttribute" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlUnknownBooleanAttribute", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 12, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "XmlInvalidId", + "shortDescription": { + "text": "Unresolved 'id' reference" + }, + "fullDescription": { + "text": "Reports the use of the 'id' that is not defined anywhere in XML and HTML. Inspection ID: XmlInvalidId", + "markdown": "Reports the use of the `id` that is not defined anywhere in XML and HTML.\n\nInspection ID: XmlInvalidId" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlInvalidId", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 4, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "XmlUnboundNsPrefix", + "shortDescription": { + "text": "Unbound namespace prefix" + }, + "fullDescription": { + "text": "Reports an unbound namespace prefix in XML. Inspection ID: XmlUnboundNsPrefix", + "markdown": "Reports an unbound namespace prefix in XML.\n\nInspection ID: XmlUnboundNsPrefix" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "XmlUnboundNsPrefix", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 4, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "RequiredAttributes", + "shortDescription": { + "text": "Missing required attribute" + }, + "fullDescription": { + "text": "Reports a missing mandatory attribute in an XML/HTML tag. Suggests configuring attributes that should not be reported. Inspection ID: RequiredAttributes", + "markdown": "Reports a missing mandatory attribute in an XML/HTML tag. Suggests configuring attributes that should not be reported.\n\nInspection ID: RequiredAttributes" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RequiredAttributes", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 12, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "DuplicatedCode", + "shortDescription": { + "text": "Duplicated code fragment" + }, + "fullDescription": { + "text": "Reports duplicated blocks of code from the selected scope: the same file or the entire project. The inspection features quick-fixes that help you to set the size of detected duplicates, navigate to repetitive code fragments, and compare them in a tool window. The inspection options allow you to select the scope of the reported duplicated fragments and set the initial size for the duplicated language constructs.", + "markdown": "Reports duplicated blocks of code from the selected scope: the same file or the entire project.\n\nThe inspection features quick-fixes that help you to set the size of detected duplicates, navigate to repetitive code fragments, and compare them in a tool window.\n\nThe inspection options allow you to select the scope of the reported duplicated fragments and set the initial size for the duplicated language constructs." + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "DuplicatedCode", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 13, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "InconsistentLineSeparators", + "shortDescription": { + "text": "Inconsistent line separators" + }, + "fullDescription": { + "text": "Reports files with line separators different from the ones that are specified in the project's settings. For example, the inspection will be triggered if you set the line separator to '\\n' in Settings | Editor | Code Style | Line separator, while the file you are editing uses '\\r\\n' as a line separator. The inspection also warns you about mixed line separators within a file. Inspection ID: InconsistentLineSeparators", + "markdown": "Reports files with line separators different from the ones that are specified in the project's settings.\n\nFor example, the inspection will be triggered if you set the line separator to `\\n` in\n[Settings \\| Editor \\| Code Style \\| Line separator](settings://preferences.sourceCode?Line%20separator),\nwhile the file you are editing uses `\\r\\n` as a line separator.\n\nThe inspection also warns you about mixed line separators within a file.\n\nInspection ID: InconsistentLineSeparators" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InconsistentLineSeparators", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 13, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "ReassignedToPlainText", + "shortDescription": { + "text": "Reassigned to plain text" + }, + "fullDescription": { + "text": "Reports files that were explicitly re-assigned to Plain Text File Type. This association is unnecessary because the platform auto-detects text files by content automatically. You can dismiss this warning by removing the file type association in Settings | Editor | File Types | Text. Inspection ID: ReassignedToPlainText", + "markdown": "Reports files that were explicitly re-assigned to Plain Text File Type. This association is unnecessary because the platform auto-detects text files by content automatically.\n\nYou can dismiss this warning by removing the file type association\nin **Settings \\| Editor \\| File Types \\| Text**.\n\nInspection ID: ReassignedToPlainText" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ReassignedToPlainText", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 13, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "RedundantSuppression", + "shortDescription": { + "text": "Redundant suppression" + }, + "fullDescription": { + "text": "Reports usages of the following elements that can be safely removed because the inspection they affect is no longer applicable in this context: '@SuppressWarning' annotation, or '// noinspection' line comment, or '/** noinspection */' JavaDoc comment Example: 'public class C {\n // symbol is already private,\n // but annotation is still around\n @SuppressWarnings({\"WeakerAccess\"})\n private boolean CONST = true;\n void f() {\n CONST = false;\n }\n}' Inspection ID: RedundantSuppression", + "markdown": "Reports usages of the following elements that can be safely removed because the inspection they affect is no longer applicable in this context:\n\n* `@SuppressWarning` annotation, or\n* `// noinspection` line comment, or\n* `/** noinspection */` JavaDoc comment\n\nExample:\n\n\n public class C {\n // symbol is already private,\n // but annotation is still around\n @SuppressWarnings({\"WeakerAccess\"})\n private boolean CONST = true;\n void f() {\n CONST = false;\n }\n }\n\nInspection ID: RedundantSuppression" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantSuppression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 13, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "ProblematicWhitespace", + "shortDescription": { + "text": "Problematic whitespace" + }, + "fullDescription": { + "text": "Reports the following problems: Tabs used for indentation when the code style is configured to use only spaces. Spaces used for indentation when the code style is configured to use only tabs. Spaces used for indentation and tabs used for alignment when the code style is configured to use smart tabs. Inspection ID: ProblematicWhitespace", + "markdown": "Reports the following problems:\n\n* Tabs used for indentation when the code style is configured to use only spaces.\n* Spaces used for indentation when the code style is configured to use only tabs.\n* Spaces used for indentation and tabs used for alignment when the code style is configured to use smart tabs.\n\n\nInspection ID: ProblematicWhitespace" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ProblematicWhitespace", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 13, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "HtmlUnknownTarget", + "shortDescription": { + "text": "Unresolved file in a link" + }, + "fullDescription": { + "text": "Reports an unresolved file in a link. Inspection ID: HtmlUnknownTarget", + "markdown": "Reports an unresolved file in a link.\n\nInspection ID: HtmlUnknownTarget" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlUnknownTarget", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 12, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "SSBasedInspection", + "shortDescription": { + "text": "Structural search inspection" + }, + "fullDescription": { + "text": "Allows configuring Structural Search/Structural Replace templates that you can apply to the file you are editing. All matches will be highlighted and marked with the template name that you have configured. If you configure the Structural Replace pattern as well, the corresponding replace option will be available as a quick-fix. Inspection ID: SSBasedInspection", + "markdown": "Allows configuring **Structural Search/Structural Replace** templates that you can apply to the file you are editing.\n\nAll matches will be highlighted and marked with the template name that you have configured.\nIf you configure the **Structural Replace** pattern as well, the corresponding replace option will be available as a quick-fix.\n\nInspection ID: SSBasedInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SSBasedInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Structural search", + "index": 14, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "LongLine", + "shortDescription": { + "text": "Line is longer than allowed by code style" + }, + "fullDescription": { + "text": "Reports lines that are longer than the Hard wrap at parameter specified in Settings | Editor | Code Style | General. Inspection ID: LongLine", + "markdown": "Reports lines that are longer than the **Hard wrap at** parameter specified in [Settings \\| Editor \\| Code Style \\| General](settings://preferences.sourceCode?Hard%20wrap%20at).\n\nInspection ID: LongLine" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LongLine", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 13, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "XmlUnusedNamespaceDeclaration", + "shortDescription": { + "text": "Unused schema declaration" + }, + "fullDescription": { + "text": "Reports an unused namespace declaration or location hint in XML. Inspection ID: XmlUnusedNamespaceDeclaration", + "markdown": "Reports an unused namespace declaration or location hint in XML.\n\nInspection ID: XmlUnusedNamespaceDeclaration" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "XmlUnusedNamespaceDeclaration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 4, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "RegExpRedundantClassElement", + "shortDescription": { + "text": "Redundant '\\d', '[:digit:]', or '\\D' class elements" + }, + "fullDescription": { + "text": "Reports redundant '\\d' or '[:digit:]' that are used in one class with '\\w' or '[:word:]' ('\\D' with '\\W') and can be removed. Example: '[\\w\\d]' After the quick-fix is applied: '[\\w]' New in 2022.2 Inspection ID: RegExpRedundantClassElement", + "markdown": "Reports redundant `\\d` or `[:digit:]` that are used in one class with `\\w` or `[:word:]` (`\\D` with `\\W`) and can be removed.\n\n**Example:**\n\n\n [\\w\\d]\n\nAfter the quick-fix is applied:\n\n\n [\\w]\n\nNew in 2022.2\n\nInspection ID: RegExpRedundantClassElement" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RegExpRedundantClassElement", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 8, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "RegExpSimplifiable", + "shortDescription": { + "text": "Regular expression can be simplified" + }, + "fullDescription": { + "text": "Reports regular expressions that can be simplified. Example: '[a] xx* [ah-hz]' After the quick-fix is applied: 'a x+ [ahz]' New in 2022.1 Inspection ID: RegExpSimplifiable", + "markdown": "Reports regular expressions that can be simplified.\n\n**Example:**\n\n\n [a] xx* [ah-hz]\n\nAfter the quick-fix is applied:\n\n\n a x+ [ahz]\n\nNew in 2022.1\n\nInspection ID: RegExpSimplifiable" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RegExpSimplifiable", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 8, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "XmlWrongRootElement", + "shortDescription": { + "text": "Wrong root element" + }, + "fullDescription": { + "text": "Reports a root tag name different from the name specified in the '' tag. Inspection ID: XmlWrongRootElement", + "markdown": "Reports a root tag name different from the name specified in the `` tag.\n\nInspection ID: XmlWrongRootElement" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlWrongRootElement", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 4, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "RegExpEmptyAlternationBranch", + "shortDescription": { + "text": "Empty branch in alternation" + }, + "fullDescription": { + "text": "Reports empty branches in a RegExp alternation. An empty branch will only match the empty string, and in most cases that is not what is desired. This inspection will not report a single empty branch at the start or the end of an alternation. Example: '(alpha||bravo)' After the quick-fix is applied: '(alpha|bravo)' New in 2017.2 Inspection ID: RegExpEmptyAlternationBranch", + "markdown": "Reports empty branches in a RegExp alternation. An empty branch will only match the empty string, and in most cases that is not what is desired. This inspection will not report a single empty branch at the start or the end of an alternation.\n\n**Example:**\n\n\n (alpha||bravo)\n\nAfter the quick-fix is applied:\n\n\n (alpha|bravo)\n\nNew in 2017.2\n\nInspection ID: RegExpEmptyAlternationBranch" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpEmptyAlternationBranch", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 8, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "CheckValidXmlInScriptTagBody", + "shortDescription": { + "text": "Malformed content of 'script' tag" + }, + "fullDescription": { + "text": "Reports contents of 'script' tags that are invalid XML. Example: '' After the quick-fix is applied: '' Inspection ID: CheckValidXmlInScriptTagBody", + "markdown": "Reports contents of `script` tags that are invalid XML. \n\n**Example:**\n\n\n \n\nAfter the quick-fix is applied:\n\n\n \n\nInspection ID: CheckValidXmlInScriptTagBody" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CheckValidXmlInScriptTagBody", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 12, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "Annotator", + "shortDescription": { + "text": "Annotator" + }, + "fullDescription": { + "text": "Reports issues essential to this file (e.g., syntax errors) in the result of a batch code inspection run. These issues are usually always highlighted in the editor and can't be configured, unlike inspections. These options control the scope of checks performed by this inspection: Option \"Report syntax errors\": report parser-related issues. Option \"Report issues from language-specific annotators\": report issues found by annotators configured for the relevant language. See Custom Language Support: Annotators for details. Option \"Report other highlighting problems\": report issues specific to the language of the current file (e.g., type mismatches or unreported exceptions). See Custom Language Support: Highlighting for details. Inspection ID: Annotator", + "markdown": "Reports issues essential to this file (e.g., syntax errors) in the result of a batch code inspection run. These issues are usually always highlighted in the editor and can't be configured, unlike inspections. These options control the scope of checks performed by this inspection:\n\n* Option \"**Report syntax errors**\": report parser-related issues.\n* Option \"**Report issues from language-specific annotators** \": report issues found by annotators configured for the relevant language. See [Custom Language Support: Annotators](https://plugins.jetbrains.com/docs/intellij/annotator.html) for details.\n* Option \"**Report other highlighting problems** \": report issues specific to the language of the current file (e.g., type mismatches or unreported exceptions). See [Custom Language Support: Highlighting](https://plugins.jetbrains.com/docs/intellij/syntax-highlighting-and-error-highlighting.html#semantic-highlighting) for details.\n\nInspection ID: Annotator" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "Annotator", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 13, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "InjectedReferences", + "shortDescription": { + "text": "Injected references" + }, + "fullDescription": { + "text": "Reports unresolved references injected by Language Injections. Example: '@Language(\"file-reference\")\n String fileName = \"/home/user/nonexistent.file\"; // highlighted if file doesn't exist' Inspection ID: InjectedReferences", + "markdown": "Reports unresolved references injected by [Language Injections](https://www.jetbrains.com/help/idea/using-language-injections.html).\n\nExample:\n\n\n @Language(\"file-reference\")\n String fileName = \"/home/user/nonexistent.file\"; // highlighted if file doesn't exist\n\nInspection ID: InjectedReferences" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "InjectedReferences", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 13, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "RegExpSuspiciousBackref", + "shortDescription": { + "text": "Suspicious back reference" + }, + "fullDescription": { + "text": "Reports back references that will not be resolvable at runtime. This means that the back reference can never match anything. A back reference will not be resolvable when the group is defined after the back reference, or if the group is defined in a different branch of an alternation. Example of a group defined after its back reference: '\\1(abc)' Example of a group and a back reference in different branches: 'a(b)c|(xy)\\1z' New in 2022.1 Inspection ID: RegExpSuspiciousBackref", + "markdown": "Reports back references that will not be resolvable at runtime. This means that the back reference can never match anything. A back reference will not be resolvable when the group is defined after the back reference, or if the group is defined in a different branch of an alternation.\n\n**Example of a group defined after its back reference:**\n\n\n \\1(abc)\n\n**Example of a group and a back reference in different branches:**\n\n\n a(b)c|(xy)\\1z\n\nNew in 2022.1\n\nInspection ID: RegExpSuspiciousBackref" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpSuspiciousBackref", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 8, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "XmlPathReference", + "shortDescription": { + "text": "Unresolved file reference" + }, + "fullDescription": { + "text": "Reports an unresolved file reference in XML. Inspection ID: XmlPathReference", + "markdown": "Reports an unresolved file reference in XML.\n\nInspection ID: XmlPathReference" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlPathReference", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 4, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "RegExpSingleCharAlternation", + "shortDescription": { + "text": "Single character alternation" + }, + "fullDescription": { + "text": "Reports single char alternation in a RegExp. It is simpler to use a character class instead. This may also provide better matching performance. Example: 'a|b|c|d' After the quick-fix is applied: '[abcd]' New in 2017.1 Inspection ID: RegExpSingleCharAlternation", + "markdown": "Reports single char alternation in a RegExp. It is simpler to use a character class instead. This may also provide better matching performance.\n\n**Example:**\n\n\n a|b|c|d\n\nAfter the quick-fix is applied:\n\n\n [abcd]\n\n\nNew in 2017.1\n\nInspection ID: RegExpSingleCharAlternation" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpSingleCharAlternation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 8, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "RegExpUnnecessaryNonCapturingGroup", + "shortDescription": { + "text": "Unnecessary non-capturing group" + }, + "fullDescription": { + "text": "Reports unnecessary non-capturing groups, which have no influence on the match result. Example: 'Everybody be cool, (?:this) is a robbery!' After the quick-fix is applied: 'Everybody be cool, this is a robbery!' New in 2021.1 Inspection ID: RegExpUnnecessaryNonCapturingGroup", + "markdown": "Reports unnecessary non-capturing groups, which have no influence on the match result.\n\n**Example:**\n\n\n Everybody be cool, (?:this) is a robbery!\n\nAfter the quick-fix is applied:\n\n\n Everybody be cool, this is a robbery!\n\nNew in 2021.1\n\nInspection ID: RegExpUnnecessaryNonCapturingGroup" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpUnnecessaryNonCapturingGroup", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 8, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "TodoComment", + "shortDescription": { + "text": "TODO comment" + }, + "fullDescription": { + "text": "Reports TODO comments in your code. You can configure the format for TODO comments in Settings | Editor | TODO. Enable the Only warn on TODO comments without any details option to only warn on empty TODO comments, that don't provide any description on the task that should be done. Disable to report all TODO comments. Inspection ID: TodoComment", + "markdown": "Reports **TODO** comments in your code.\n\nYou can configure the format for **TODO** comments in [Settings \\| Editor \\| TODO](settings://preferences.toDoOptions).\n\nEnable the **Only warn on TODO comments without any details** option to only warn on empty TODO comments, that\ndon't provide any description on the task that should be done. Disable to report all TODO comments.\n\nInspection ID: TodoComment" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TodoComment", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 13, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "HtmlUnknownAttribute", + "shortDescription": { + "text": "Unknown attribute" + }, + "fullDescription": { + "text": "Reports an unknown HTML attribute. Suggests configuring attributes that should not be reported. Inspection ID: HtmlUnknownAttribute", + "markdown": "Reports an unknown HTML attribute. Suggests configuring attributes that should not be reported.\n\nInspection ID: HtmlUnknownAttribute" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlUnknownAttribute", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 12, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "CheckTagEmptyBody", + "shortDescription": { + "text": "Empty element content" + }, + "fullDescription": { + "text": "Reports XML elements without contents. Example: '\n \n ' After the quick-fix is applied: '\n \n ' Inspection ID: CheckTagEmptyBody", + "markdown": "Reports XML elements without contents.\n\n**Example:**\n\n\n \n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n \n\nInspection ID: CheckTagEmptyBody" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CheckTagEmptyBody", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 4, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "RegExpRedundantEscape", + "shortDescription": { + "text": "Redundant character escape" + }, + "fullDescription": { + "text": "Reports redundant character escape sequences that can be replaced with unescaped characters preserving the meaning. Many escape sequences that are necessary outside of a character class are redundant inside square brackets '[]' of a character class. Although unescaped opening curly braces '{' outside of character classes are allowed in some dialects (JavaScript, Python, and so on), it can cause confusion and make the pattern less portable, because there are dialects that require escaping curly braces as characters. For this reason the inspection does not report escaped opening curly braces. Example: '\\-\\;[\\.]' After the quick-fix is applied: '-;[.]' The Ignore escaped closing brackets '}' and ']' option specifies whether to report '\\}' and '\\]' outside of a character class when they are allowed to be unescaped by the RegExp dialect. Similarly, the Ignore escaped forward-slashes '/' option specifies whether to report '\\/' when they are allowed to be unescaped by the RegExp dialect. New in 2017.3 Inspection ID: RegExpRedundantEscape", + "markdown": "Reports redundant character escape sequences that can be replaced with unescaped characters preserving the meaning. Many escape sequences that are necessary outside of a character class are redundant inside square brackets `[]` of a character class.\n\n\nAlthough unescaped opening curly braces `{` outside of character classes are allowed in some dialects (JavaScript, Python, and so on),\nit can cause confusion and make the pattern less portable, because there are dialects that require escaping curly braces as characters.\nFor this reason the inspection does not report escaped opening curly braces.\n\n**Example:**\n\n\n \\-\\;[\\.]\n\nAfter the quick-fix is applied:\n\n\n -;[.]\n\n\nThe **Ignore escaped closing brackets '}' and '\\]'** option specifies whether to report `\\}` and `\\]` outside of a character class\nwhen they are allowed to be unescaped by the RegExp dialect.\n\n\nSimilarly, the **Ignore escaped forward-slashes '/'** option specifies whether to report `\\/` when\nthey are allowed to be unescaped by the RegExp dialect.\n\nNew in 2017.3\n\nInspection ID: RegExpRedundantEscape" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpRedundantEscape", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 8, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "UnresolvedReference", + "shortDescription": { + "text": "Unresolved reference" + }, + "fullDescription": { + "text": "Reports an unresolved reference to a named pattern ('define') in RELAX-NG files that use XML syntax. Suggests creating the referenced 'define' element. Inspection ID: UnresolvedReference", + "markdown": "Reports an unresolved reference to a named pattern (`define`) in RELAX-NG files that use XML syntax. Suggests creating the referenced `define` element.\n\nInspection ID: UnresolvedReference" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "UnresolvedReference", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "RELAX NG", + "index": 16, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "HtmlMissingClosingTag", + "shortDescription": { + "text": "Missing closing tag" + }, + "fullDescription": { + "text": "Reports an HTML element without a closing tag. Some coding styles require that HTML elements have closing tags even where this is optional. Example: '\n \n

Behold!\n \n ' After the quick-fix is applied: '\n \n

Behold!

\n \n ' Inspection ID: HtmlMissingClosingTag", + "markdown": "Reports an HTML element without a closing tag. Some coding styles require that HTML elements have closing tags even where this is optional.\n\n**Example:**\n\n\n \n \n

Behold!\n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n

Behold!

\n \n \n\nInspection ID: HtmlMissingClosingTag" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "HtmlMissingClosingTag", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 12, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "RegExpRedundantNestedCharacterClass", + "shortDescription": { + "text": "Redundant nested character class" + }, + "fullDescription": { + "text": "Reports unnecessary nested character classes. Example: '[a-c[x-z]]' After the quick-fix is applied: '[a-cx-z]' New in 2020.2 Inspection ID: RegExpRedundantNestedCharacterClass", + "markdown": "Reports unnecessary nested character classes.\n\n**Example:**\n\n\n [a-c[x-z]]\n\nAfter the quick-fix is applied:\n\n\n [a-cx-z]\n\nNew in 2020.2\n\nInspection ID: RegExpRedundantNestedCharacterClass" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpRedundantNestedCharacterClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 8, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "XmlDeprecatedElement", + "shortDescription": { + "text": "Deprecated symbol" + }, + "fullDescription": { + "text": "Reports a deprecated XML element or attribute. Symbols can be marked by XML comment or documentation tag with text 'deprecated'. Inspection ID: XmlDeprecatedElement", + "markdown": "Reports a deprecated XML element or attribute.\n\nSymbols can be marked by XML comment or documentation tag with text 'deprecated'.\n\nInspection ID: XmlDeprecatedElement" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "XmlDeprecatedElement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 4, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "CustomRegExpInspection", + "shortDescription": { + "text": "Custom RegExp inspection" + }, + "fullDescription": { + "text": "Custom Regex Inspection Inspection ID: CustomRegExpInspection", + "markdown": "Custom Regex Inspection\n\nInspection ID: CustomRegExpInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CustomRegExpInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 8, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "IncorrectFormatting", + "shortDescription": { + "text": "Incorrect formatting" + }, + "fullDescription": { + "text": "Reports formatting issues that appear if your code doesn't follow your project's code style settings. This inspection is not compatible with languages that require third-party formatters for code formatting, for example, Go or C with CLangFormat enabled. Inspection ID: IncorrectFormatting", + "markdown": "Reports formatting issues that appear if your code doesn't\nfollow your project's code style settings.\n\n\nThis inspection is not compatible with languages that require\nthird-party formatters for code formatting, for example, Go or\nC with CLangFormat enabled.\n\nInspection ID: IncorrectFormatting" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "IncorrectFormatting", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 13, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "HtmlWrongAttributeValue", + "shortDescription": { + "text": "Wrong attribute value" + }, + "fullDescription": { + "text": "Reports an incorrect HTML attribute value. Inspection ID: HtmlWrongAttributeValue", + "markdown": "Reports an incorrect HTML attribute value.\n\nInspection ID: HtmlWrongAttributeValue" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlWrongAttributeValue", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 12, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "XmlDefaultAttributeValue", + "shortDescription": { + "text": "Redundant attribute with default value" + }, + "fullDescription": { + "text": "Reports a redundant assignment of the default value to an XML attribute. Inspection ID: XmlDefaultAttributeValue", + "markdown": "Reports a redundant assignment of the default value to an XML attribute.\n\nInspection ID: XmlDefaultAttributeValue" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "XmlDefaultAttributeValue", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 4, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "HtmlExtraClosingTag", + "shortDescription": { + "text": "Redundant closing tag" + }, + "fullDescription": { + "text": "Reports redundant closing tags on empty elements, for example, 'img' or 'br'. Example: '\n \n

\n \n ' After the quick-fix is applied: '\n \n
\n \n ' Inspection ID: HtmlExtraClosingTag", + "markdown": "Reports redundant closing tags on empty elements, for example, `img` or `br`.\n\n**Example:**\n\n\n \n \n

\n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n
\n \n \n\nInspection ID: HtmlExtraClosingTag" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlExtraClosingTag", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 12, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "RegExpOctalEscape", + "shortDescription": { + "text": "Octal escape" + }, + "fullDescription": { + "text": "Reports octal escapes, which are easily confused with back references. Use hexadecimal escapes to avoid confusion. Example: '\\07' After the quick-fix is applied: '\\x07' New in 2017.1 Inspection ID: RegExpOctalEscape", + "markdown": "Reports octal escapes, which are easily confused with back references. Use hexadecimal escapes to avoid confusion.\n\n**Example:**\n\n\n \\07\n\nAfter the quick-fix is applied:\n\n\n \\x07\n\nNew in 2017.1\n\nInspection ID: RegExpOctalEscape" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RegExpOctalEscape", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 8, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "HtmlUnknownAnchorTarget", + "shortDescription": { + "text": "Unresolved fragment in a link" + }, + "fullDescription": { + "text": "Reports an unresolved last part of an URL after the '#' sign. Inspection ID: HtmlUnknownAnchorTarget", + "markdown": "Reports an unresolved last part of an URL after the `#` sign.\n\nInspection ID: HtmlUnknownAnchorTarget" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlUnknownAnchorTarget", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 12, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "UnusedDefine", + "shortDescription": { + "text": "Unused define" + }, + "fullDescription": { + "text": "Reports an unused named pattern ('define') in a RELAX-NG file (XML or Compact Syntax). 'define' elements that are used through an include in another file are ignored. Inspection ID: UnusedDefine", + "markdown": "Reports an unused named pattern (`define`) in a RELAX-NG file (XML or Compact Syntax). `define` elements that are used through an include in another file are ignored.\n\nInspection ID: UnusedDefine" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedDefine", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "RELAX NG", + "index": 16, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "RegExpUnexpectedAnchor", + "shortDescription": { + "text": "Begin or end anchor in unexpected position" + }, + "fullDescription": { + "text": "Reports '^' or '\\A' anchors not at the beginning of the pattern and '$', '\\Z' or '\\z' anchors not at the end of the pattern. In the wrong position these RegExp anchors prevent the pattern from matching anything. In case of the '^' and '$' anchors, most likely the literal character was meant and the escape forgotten. Example: '(Price $10)' New in 2018.1 Inspection ID: RegExpUnexpectedAnchor", + "markdown": "Reports `^` or `\\A` anchors not at the beginning of the pattern and `$`, `\\Z` or `\\z` anchors not at the end of the pattern. In the wrong position these RegExp anchors prevent the pattern from matching anything. In case of the `^` and `$` anchors, most likely the literal character was meant and the escape forgotten.\n\n**Example:**\n\n\n (Price $10)\n\n\nNew in 2018.1\n\nInspection ID: RegExpUnexpectedAnchor" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpUnexpectedAnchor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 8, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "EmptyDirectory", + "shortDescription": { + "text": "Empty directory" + }, + "fullDescription": { + "text": "Reports empty directories. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor. Use the Only report empty directories located under a source folder option to have only directories under source roots reported. Inspection ID: EmptyDirectory", + "markdown": "Reports empty directories.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Only report empty directories located under a source folder** option to have only directories under source\nroots reported.\n\n\nInspection ID: EmptyDirectory" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EmptyDirectory", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 13, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "RegExpAnonymousGroup", + "shortDescription": { + "text": "Anonymous capturing group or numeric back reference" + }, + "fullDescription": { + "text": "Reports anonymous capturing groups and numeric back references in a RegExp. These are only reported when the RegExp dialect supports named group and named group references. Named groups and named back references improve code readability and are recommended to use instead. When a capture is not needed, matching can be more performant and use less memory by using a non-capturing group, i.e. '(?:xxx)' instead of '(xxx)'. Example: '(\\d\\d\\d\\d)\\1' A better regex pattern could look like this: '(?\\d\\d\\d\\d)\\k' New in 2017.2 Inspection ID: RegExpAnonymousGroup", + "markdown": "Reports anonymous capturing groups and numeric back references in a RegExp. These are only reported when the RegExp dialect supports named group and named group references. Named groups and named back references improve code readability and are recommended to use instead. When a capture is not needed, matching can be more performant and use less memory by using a non-capturing group, i.e. `(?:xxx)` instead of `(xxx)`.\n\n**Example:**\n\n\n (\\d\\d\\d\\d)\\1\n\nA better regex pattern could look like this:\n\n\n (?\\d\\d\\d\\d)\\k\n\nNew in 2017.2\n\nInspection ID: RegExpAnonymousGroup" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpAnonymousGroup", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 8, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "CheckDtdRefs", + "shortDescription": { + "text": "Unresolved DTD reference" + }, + "fullDescription": { + "text": "Reports inconsistency in a DTD-specific reference, for example, in a reference to an XML entity or to a DTD element declaration. Works in DTD an XML files. Inspection ID: CheckDtdRefs", + "markdown": "Reports inconsistency in a DTD-specific reference, for example, in a reference to an XML entity or to a DTD element declaration. Works in DTD an XML files.\n\nInspection ID: CheckDtdRefs" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CheckDtdRefs", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 4, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "CheckXmlFileWithXercesValidator", + "shortDescription": { + "text": "Failed external validation" + }, + "fullDescription": { + "text": "Reports a discrepancy in an XML file with the specified DTD or schema detected by the Xerces validator. Inspection ID: CheckXmlFileWithXercesValidator", + "markdown": "Reports a discrepancy in an XML file with the specified DTD or schema detected by the Xerces validator.\n\nInspection ID: CheckXmlFileWithXercesValidator" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CheckXmlFileWithXercesValidator", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 4, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "NonAsciiCharacters", + "shortDescription": { + "text": "Non-ASCII characters" + }, + "fullDescription": { + "text": "Reports code elements that use non-ASCII symbols in an unusual context. Example: Non-ASCII characters used in identifiers, strings, or comments. Identifiers written in different languages, such as 'myСollection' with the letter 'C' written in Cyrillic. Comments or strings containing Unicode symbols, such as long dashes and arrows. Inspection ID: NonAsciiCharacters", + "markdown": "Reports code elements that use non-ASCII symbols in an unusual context.\n\nExample:\n\n* Non-ASCII characters used in identifiers, strings, or comments.\n* Identifiers written in different languages, such as `my`**С**`ollection` with the letter **C** written in Cyrillic.\n* Comments or strings containing Unicode symbols, such as long dashes and arrows.\n\nInspection ID: NonAsciiCharacters" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonAsciiCharacters", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Internationalization", + "index": 17, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "XmlUnresolvedReference", + "shortDescription": { + "text": "Unresolved references" + }, + "fullDescription": { + "text": "Reports an unresolved references in XML. Inspection ID: XmlUnresolvedReference", + "markdown": "Reports an unresolved references in XML.\n\nInspection ID: XmlUnresolvedReference" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlUnresolvedReference", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 4, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "HtmlUnknownTag", + "shortDescription": { + "text": "Unknown tag" + }, + "fullDescription": { + "text": "Reports an unknown HTML tag. Suggests configuring tags that should not be reported. Inspection ID: HtmlUnknownTag", + "markdown": "Reports an unknown HTML tag. Suggests configuring tags that should not be reported.\n\nInspection ID: HtmlUnknownTag" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlUnknownTag", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 12, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "RegExpEscapedMetaCharacter", + "shortDescription": { + "text": "Escaped meta character" + }, + "fullDescription": { + "text": "Reports escaped meta characters. Some RegExp coding styles specify that meta characters should be placed inside a character class, to make the regular expression easier to understand. This inspection does not warn about the meta character '[', ']' and '^', because those would need additional escaping inside a character class. Example: '\\d+\\.\\d+' After the quick-fix is applied: '\\d+[.]\\d+' New in 2017.1 Inspection ID: RegExpEscapedMetaCharacter", + "markdown": "Reports escaped meta characters. Some RegExp coding styles specify that meta characters should be placed inside a character class, to make the regular expression easier to understand. This inspection does not warn about the meta character `[`, `]` and `^`, because those would need additional escaping inside a character class.\n\n**Example:**\n\n\n \\d+\\.\\d+\n\nAfter the quick-fix is applied:\n\n\n \\d+[.]\\d+\n\nNew in 2017.1\n\nInspection ID: RegExpEscapedMetaCharacter" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RegExpEscapedMetaCharacter", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 8, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "LossyEncoding", + "shortDescription": { + "text": "Lossy encoding" + }, + "fullDescription": { + "text": "Reports characters that cannot be displayed because of the current document encoding. Examples: If you type international characters in a document with the US-ASCII charset, some characters will be lost on save. If you load a UTF-8-encoded file using the ISO-8859-1 one-byte charset, some characters will be displayed incorrectly. You can fix this by changing the file encoding either by specifying the encoding directly in the file, e.g. by editing 'encoding=' attribute in the XML prolog of XML file, or by changing the corresponding options in Settings | Editor | File Encodings. Inspection ID: LossyEncoding", + "markdown": "Reports characters that cannot be displayed because of the current document encoding.\n\nExamples:\n\n* If you type international characters in a document with the **US-ASCII** charset, some characters will be lost on save.\n* If you load a **UTF-8** -encoded file using the **ISO-8859-1** one-byte charset, some characters will be displayed incorrectly.\n\nYou can fix this by changing the file encoding\neither by specifying the encoding directly in the file, e.g. by editing `encoding=` attribute in the XML prolog of XML file,\nor by changing the corresponding options in **Settings \\| Editor \\| File Encodings**.\n\nInspection ID: LossyEncoding" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LossyEncoding", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Internationalization", + "index": 17, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "RegExpDuplicateAlternationBranch", + "shortDescription": { + "text": "Duplicate branch in alternation" + }, + "fullDescription": { + "text": "Reports duplicate branches in a RegExp alternation. Duplicate branches slow down matching and obscure the intent of the expression. Example: '(alpha|bravo|charlie|alpha)' After the quick-fix is applied: '(alpha|bravo|charlie)' New in 2017.1 Inspection ID: RegExpDuplicateAlternationBranch", + "markdown": "Reports duplicate branches in a RegExp alternation. Duplicate branches slow down matching and obscure the intent of the expression.\n\n**Example:**\n\n\n (alpha|bravo|charlie|alpha)\n\nAfter the quick-fix is applied:\n\n\n (alpha|bravo|charlie)\n\nNew in 2017.1\n\nInspection ID: RegExpDuplicateAlternationBranch" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpDuplicateAlternationBranch", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 8, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "RegExpRepeatedSpace", + "shortDescription": { + "text": "Consecutive spaces" + }, + "fullDescription": { + "text": "Reports multiple consecutive spaces in a RegExp. Because spaces are not visible by default, it can be hard to see how many spaces are required. The RegExp can be made more clear by replacing the consecutive spaces with a single space and a counted quantifier. Example: '( )' After the quick-fix is applied: '( {5})' New in 2017.1 Inspection ID: RegExpRepeatedSpace", + "markdown": "Reports multiple consecutive spaces in a RegExp. Because spaces are not visible by default, it can be hard to see how many spaces are required. The RegExp can be made more clear by replacing the consecutive spaces with a single space and a counted quantifier.\n\n**Example:**\n\n\n ( )\n\nAfter the quick-fix is applied:\n\n\n ( {5})\n\n\nNew in 2017.1\n\nInspection ID: RegExpRepeatedSpace" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpRepeatedSpace", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 8, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "IgnoreFileDuplicateEntry", + "shortDescription": { + "text": "Ignore file duplicates" + }, + "fullDescription": { + "text": "Reports duplicate entries (patterns) in the ignore file (e.g. .gitignore, .hgignore). Duplicate entries in these files are redundant and can be removed. Example: '# Output directories\n /out/\n /target/\n /out/' Inspection ID: IgnoreFileDuplicateEntry", + "markdown": "Reports duplicate entries (patterns) in the ignore file (e.g. .gitignore, .hgignore). Duplicate entries in these files are redundant and can be removed.\n\nExample:\n\n\n # Output directories\n /out/\n /target/\n /out/\n\nInspection ID: IgnoreFileDuplicateEntry" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IgnoreFileDuplicateEntry", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Version control", + "index": 19, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "CheckEmptyScriptTag", + "shortDescription": { + "text": "Empty tag" + }, + "fullDescription": { + "text": "Reports empty tags that do not work in some browsers. Example: '\n \n ' Inspection ID: CheckEmptyScriptTag", + "markdown": "Reports empty tags that do not work in some browsers.\n\n**Example:**\n\n\n \n \n \n\nInspection ID: CheckEmptyScriptTag" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CheckEmptyScriptTag", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 12, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + } + ], + "language": "en-US", + "contents": ["localizedData", "nonLocalizedData"], + "isComprehensive": false + }, + { + "name": "org.jetbrains.plugins.yaml", + "version": "253.31833.0", + "rules": [ + { + "id": "YAMLRecursiveAlias", + "shortDescription": { + "text": "Recursive alias" + }, + "fullDescription": { + "text": "Reports recursion in YAML aliases. Alias can't be recursive and be used inside the data referenced by a corresponding anchor. Example: 'some_key: &some_anchor\n sub_key1: value1\n sub_key2: *some_anchor' Inspection ID: YAMLRecursiveAlias", + "markdown": "Reports recursion in YAML aliases.\n\nAlias can't be recursive and be used inside the data referenced by a corresponding anchor.\n\n**Example:**\n\n\n some_key: &some_anchor\n sub_key1: value1\n sub_key2: *some_anchor\n\nInspection ID: YAMLRecursiveAlias" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "YAMLRecursiveAlias", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 5, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "YAMLSchemaValidation", + "shortDescription": { + "text": "Validation by JSON Schema" + }, + "fullDescription": { + "text": "Reports inconsistencies between a YAML file and a JSON Schema if the schema is specified. Scheme example: '{\n \"properties\": {\n \"SomeNumberProperty\": {\n \"type\": \"number\"\n }\n }\n }' The following is an example with the corresponding warning: 'SomeNumberProperty: hello world' Inspection ID: YAMLSchemaValidation", + "markdown": "Reports inconsistencies between a YAML file and a JSON Schema if the schema is specified.\n\n**Scheme example:**\n\n\n {\n \"properties\": {\n \"SomeNumberProperty\": {\n \"type\": \"number\"\n }\n }\n }\n\n**The following is an example with the corresponding warning:**\n\n\n SomeNumberProperty: hello world\n\nInspection ID: YAMLSchemaValidation" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "YAMLSchemaValidation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 5, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "YAMLIncompatibleTypes", + "shortDescription": { + "text": "Suspicious type mismatch" + }, + "fullDescription": { + "text": "Reports a mismatch between a scalar value type in YAML file and types of the values in the similar positions. Example: 'myElements:\n - value1\n - value2\n - false # <- reported, because it is a boolean value, while other values are strings' Inspection ID: YAMLIncompatibleTypes", + "markdown": "Reports a mismatch between a scalar value type in YAML file and types of the values in the similar positions.\n\n**Example:**\n\n\n myElements:\n - value1\n - value2\n - false # <- reported, because it is a boolean value, while other values are strings\n\nInspection ID: YAMLIncompatibleTypes" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "YAMLIncompatibleTypes", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 5, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "YAMLDuplicatedKeys", + "shortDescription": { + "text": "Duplicated YAML keys" + }, + "fullDescription": { + "text": "Reports duplicated keys in YAML files. Example: 'same_key: some value\n same_key: another value' Inspection ID: YAMLDuplicatedKeys", + "markdown": "Reports duplicated keys in YAML files.\n\n**Example:**\n\n\n same_key: some value\n same_key: another value\n\nInspection ID: YAMLDuplicatedKeys" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "YAMLDuplicatedKeys", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 5, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "YAMLUnusedAnchor", + "shortDescription": { + "text": "Unused anchor" + }, + "fullDescription": { + "text": "Reports unused anchors. Example: 'some_key: &some_anchor\n key1: value1' Inspection ID: YAMLUnusedAnchor", + "markdown": "Reports unused anchors.\n\n**Example:**\n\n\n some_key: &some_anchor\n key1: value1\n\nInspection ID: YAMLUnusedAnchor" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "YAMLUnusedAnchor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 5, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "YAMLUnresolvedAlias", + "shortDescription": { + "text": "Unresolved alias" + }, + "fullDescription": { + "text": "Reports unresolved aliases in YAML files. Example: 'some_key: *unknown_alias' Inspection ID: YAMLUnresolvedAlias", + "markdown": "Reports unresolved aliases in YAML files.\n\n**Example:**\n\n\n some_key: *unknown_alias\n\nInspection ID: YAMLUnresolvedAlias" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "YAMLUnresolvedAlias", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 5, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "YAMLSchemaDeprecation", + "shortDescription": { + "text": "Deprecated YAML key" + }, + "fullDescription": { + "text": "Reports deprecated keys in YAML files. Deprecation is checked only if there exists a JSON schema associated with the corresponding YAML file. Note that the deprecation mechanism is not defined in the JSON Schema specification yet, and this inspection uses a non-standard 'deprecationMessage' extension. Scheme deprecation example: '{\n \"properties\": {\n \"SomeDeprecatedProperty\": {\n \"deprecationMessage\": \"Baz\",\n \"description\": \"Foo bar\"\n }\n }\n }' The following is an example with the corresponding warning: 'SomeDeprecatedProperty: some value' Inspection ID: YAMLSchemaDeprecation", + "markdown": "Reports deprecated keys in YAML files.\n\nDeprecation is checked only if there exists a JSON schema associated with the corresponding YAML file.\n\nNote that the deprecation mechanism is not defined in the JSON Schema specification yet,\nand this inspection uses a non-standard `deprecationMessage` extension.\n\n**Scheme deprecation example:**\n\n\n {\n \"properties\": {\n \"SomeDeprecatedProperty\": {\n \"deprecationMessage\": \"Baz\",\n \"description\": \"Foo bar\"\n }\n }\n }\n\n**The following is an example with the corresponding warning:**\n\n\n SomeDeprecatedProperty: some value\n\nInspection ID: YAMLSchemaDeprecation" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "YAMLSchemaDeprecation", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 5, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + } + ], + "language": "en-US", + "contents": ["localizedData", "nonLocalizedData"], + "isComprehensive": false + }, + { + "name": "tanvd.grazi", + "version": "253.31833.0", + "rules": [ + { + "id": "GrazieStyle", + "shortDescription": { + "text": "Style" + }, + "fullDescription": { + "text": "Check the writing style defined in: Grazie rule files (e.g. '.grazie.en.yaml' for English) for this project or its specific subdirectories. To create such a file, invoke New menu on any (e.g. root) directory of the project. Style rules in Editor | Natural languages | Rules settings This inspection only returns results via Code | Analyze Code | Run Inspection By Name... or in offline analysis. Editor highlighting of style issues is performed independently of this inspection's settings. Inspection ID: GrazieStyle", + "markdown": "Check the writing style defined in:\n\n* Grazie rule files (e.g. `.grazie.en.yaml` for English) for this project or its specific subdirectories. To create such a file, invoke **New** menu on any (e.g. root) directory of the project.\n* *Style* rules in *Editor \\| Natural languages \\| Rules* settings\n\nThis inspection only returns results via **Code \\| Analyze Code \\| Run Inspection By Name...** or in offline analysis. Editor highlighting of style issues is performed independently of this inspection's settings.\n\nInspection ID: GrazieStyle" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "GrazieStyle", + "ideaSeverity": "STYLE_SUGGESTION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "Proofreading", + "index": 6, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "LanguageDetectionInspection", + "shortDescription": { + "text": "Natural language detection" + }, + "fullDescription": { + "text": "Detects natural languages and suggests enabling corresponding grammar and spelling checks. Inspection ID: LanguageDetectionInspection", + "markdown": "Detects natural languages and suggests enabling corresponding grammar and spelling checks.\n\nInspection ID: LanguageDetectionInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "LanguageDetectionInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Proofreading", + "index": 6, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "SpellCheckingInspection", + "shortDescription": { + "text": "Spelling" + }, + "fullDescription": { + "text": "Reports typos and misspellings in your code, comments, and literals and fixes them with one click. Inspection ID: SpellCheckingInspection", + "markdown": "Reports typos and misspellings in your code, comments, and literals and fixes them with one click.\n\nInspection ID: SpellCheckingInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SpellCheckingInspection", + "ideaSeverity": "TYPO", + "qodanaSeverity": "Low", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Proofreading", + "index": 6, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "GrazieInspection", + "shortDescription": { + "text": "Grammar" + }, + "fullDescription": { + "text": "Reports grammar mistakes in your text. You can configure the inspection in Settings | Editor | Natural Languages | Grammar and Style. Inspection ID: GrazieInspection", + "markdown": "Reports grammar mistakes in your text. You can configure the inspection in [Settings \\| Editor \\| Natural Languages \\| Grammar and Style](settings://reference.settingsdialog.project.grazie).\n\nInspection ID: GrazieInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "GrazieInspection", + "ideaSeverity": "GRAMMAR_ERROR", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Proofreading", + "index": 6, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "GrazieInspectionRunner", + "shortDescription": { + "text": "Grammar" + }, + "fullDescription": { + "text": "Write your description here. Start the description with a verb in 3rd person singular, like reports, detects, highlights. In the first sentence, briefly explain what exactly the inspection helps you detect. Make sure the sentence is not very long and complicated. The first sentence must be in a dedicated paragraph separated from the rest of the text. This will make the description easier to read. Make sure the description doesn’t just repeat the inspection title. See https://plugins.jetbrains.com/docs/intellij/inspections.html#descriptions for more information. Embed code snippets: '// automatically highlighted according to inspection registration 'language' attribute' Text after this comment will only be shown in the settings of the inspection. To open related settings directly from the description, add a link with `settings://$` optionally followed by `?$` to pre-select a UI element. Inspection ID: GrazieInspectionRunner", + "markdown": "Write your description here. Start the description with a verb in 3rd person singular, like reports, detects, highlights. In the first sentence, briefly explain what exactly the inspection helps you detect. Make sure the sentence is not very long and complicated.\n\n\nThe first sentence must be in a dedicated paragraph separated from the rest of the text. This will make the description easier to read.\nMake sure the description doesn't just repeat the inspection title.\n\n\nSee https://plugins.jetbrains.com/docs/intellij/inspections.html#descriptions for more information.\n\n\nEmbed code snippets:\n\n\n // automatically highlighted according to inspection registration 'language' attribute\n\nText after this comment will only be shown in the settings of the inspection.\n\nTo open related settings directly from the description, add a link with \\`settings://$\\` optionally followed by \\`?$\\` to pre-select a UI\nelement.\n\nInspection ID: GrazieInspectionRunner" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GrazieInspectionRunner", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "Proofreading", + "index": 6, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + } + ], + "language": "en-US", + "contents": ["localizedData", "nonLocalizedData"], + "isComprehensive": false + }, + { + "name": "com.intellij.modules.json", + "version": "253.31833.0", + "rules": [ + { + "id": "JsonSchemaDeprecation", + "shortDescription": { + "text": "Deprecated JSON property" + }, + "fullDescription": { + "text": "Reports a deprecated property in a JSON file. Note that deprecation mechanism is not defined in the JSON Schema specification yet, and this inspection uses a non-standard extension 'deprecationMessage'. Inspection ID: JsonSchemaDeprecation", + "markdown": "Reports a deprecated property in a JSON file. \nNote that deprecation mechanism is not defined in the JSON Schema specification yet, and this inspection uses a non-standard extension 'deprecationMessage'.\n\nInspection ID: JsonSchemaDeprecation" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JsonSchemaDeprecation", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 7, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "JsonSchemaRefReference", + "shortDescription": { + "text": "Unresolved '$ref' and '$schema' references" + }, + "fullDescription": { + "text": "Reports an unresolved '$ref' or '$schema' path in a JSON schema. Inspection ID: JsonSchemaRefReference", + "markdown": "Reports an unresolved `$ref` or `$schema` path in a JSON schema. \n\nInspection ID: JsonSchemaRefReference" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JsonSchemaRefReference", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 7, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "Json5StandardCompliance", + "shortDescription": { + "text": "Compliance with JSON5 standard" + }, + "fullDescription": { + "text": "Reports inconsistency with the language specification in a JSON5 file. Inspection ID: Json5StandardCompliance", + "markdown": "Reports inconsistency with [the language specification](http://json5.org) in a JSON5 file.\n\nInspection ID: Json5StandardCompliance" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "Json5StandardCompliance", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 7, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "JsonDuplicatePropertyKeys", + "shortDescription": { + "text": "Duplicate keys in object literals" + }, + "fullDescription": { + "text": "Reports a duplicate key in an object literal. Inspection ID: JsonDuplicatePropertyKeys", + "markdown": "Reports a duplicate key in an object literal.\n\nInspection ID: JsonDuplicatePropertyKeys" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JsonDuplicatePropertyKeys", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 7, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "JsonSchemaCompliance", + "shortDescription": { + "text": "Compliance with JSON schema" + }, + "fullDescription": { + "text": "Reports inconsistence between a JSON file and the JSON schema that is assigned to it. Inspection ID: JsonSchemaCompliance", + "markdown": "Reports inconsistence between a JSON file and the [JSON schema](https://json-schema.org) that is assigned to it. \n\nInspection ID: JsonSchemaCompliance" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JsonSchemaCompliance", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 7, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "JsonStandardCompliance", + "shortDescription": { + "text": "Compliance with JSON standard" + }, + "fullDescription": { + "text": "Reports the following discrepancies of a JSON file with the language specification: A line or block comment (configurable). Multiple top-level values (expect for JSON Lines files, configurable for others). A trailing comma in an object or array (configurable). A single quoted string. A property key is a not a double quoted strings. A NaN or Infinity/-Infinity numeric value as a floating point literal (configurable). Inspection ID: JsonStandardCompliance", + "markdown": "Reports the following discrepancies of a JSON file with [the language specification](https://tools.ietf.org/html/rfc7159):\n\n* A line or block comment (configurable).\n* Multiple top-level values (expect for JSON Lines files, configurable for others).\n* A trailing comma in an object or array (configurable).\n* A single quoted string.\n* A property key is a not a double quoted strings.\n* A NaN or Infinity/-Infinity numeric value as a floating point literal (configurable).\n\nInspection ID: JsonStandardCompliance" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JsonStandardCompliance", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 7, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + } + ], + "language": "en-US", + "contents": ["localizedData", "nonLocalizedData"], + "isComprehensive": false + }, + { + "name": "com.intellij.properties", + "version": "253.31833.0", + "rules": [ + { + "id": "DuplicatePropertyInspection", + "shortDescription": { + "text": "Duplicate property" + }, + "fullDescription": { + "text": "Reports duplicate property keys with different values, duplicate keys, or duplicate property values. Example: 'property1=value;\nproperty2=value;' The Options list allows selecting the area in which the inspection should search for duplicates. Inspection ID: DuplicatePropertyInspection", + "markdown": "Reports duplicate property keys with different values, duplicate keys, or duplicate property values.\n\nExample:\n\n\n property1=value;\n property2=value;\n\nThe **Options** list allows selecting the area in which the inspection should search for duplicates.\n\nInspection ID: DuplicatePropertyInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DuplicatePropertyInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 9, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "UseEllipsisInPropertyInspection", + "shortDescription": { + "text": "Three dot characters instead of the ellipsis" + }, + "fullDescription": { + "text": "Reports three \"dot\" characters which are used instead of the ellipsis character for UTF-8 properties files. Inspection ID: UseEllipsisInPropertyInspection", + "markdown": "Reports three \"dot\" characters which are used instead of the ellipsis character for UTF-8 properties files.\n\nInspection ID: UseEllipsisInPropertyInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseEllipsisInPropertyInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 9, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "AlphaUnsortedPropertiesFile", + "shortDescription": { + "text": "Properties file or resource bundle is alphabetically unsorted" + }, + "fullDescription": { + "text": "Reports alphabetically unsorted resource bundles or .properties files. Inspection ID: AlphaUnsortedPropertiesFile", + "markdown": "Reports alphabetically unsorted resource bundles or .properties files.\n\nInspection ID: AlphaUnsortedPropertiesFile" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "AlphaUnsortedPropertiesFile", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 9, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "TrailingSpacesInProperty", + "shortDescription": { + "text": "Trailing spaces in property" + }, + "fullDescription": { + "text": "Reports properties whose keys or values end with a whitespace. Inspection ID: TrailingSpacesInProperty", + "markdown": "Reports properties whose keys or values end with a whitespace.\n\nInspection ID: TrailingSpacesInProperty" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TrailingSpacesInProperty", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 9, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "UnusedProperty", + "shortDescription": { + "text": "Unused property" + }, + "fullDescription": { + "text": "Reports properties that are not referenced outside of the .properties file they are contained in. Inspection ID: UnusedProperty", + "markdown": "Reports properties that are not referenced outside of the .properties file they are contained in.\n\nInspection ID: UnusedProperty" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedProperty", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 9, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "WrongPropertyKeyValueDelimiter", + "shortDescription": { + "text": "Property key/value delimiter doesn't match code style settings" + }, + "fullDescription": { + "text": "Reports properties in which key or value delimiters do not match code style settings. Inspection ID: WrongPropertyKeyValueDelimiter", + "markdown": "Reports properties in which key or value delimiters do not match code style settings.\n\nInspection ID: WrongPropertyKeyValueDelimiter" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "WrongPropertyKeyValueDelimiter", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 9, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + } + ], + "language": "en-US", + "contents": ["localizedData", "nonLocalizedData"], + "isComprehensive": false + }, + { + "name": "org.intellij.plugins.markdown", + "version": "253.31833.0", + "rules": [ + { + "id": "MarkdownOutdatedTableOfContents", + "shortDescription": { + "text": "Outdated table of contents section" + }, + "fullDescription": { + "text": "Checks if a particular table of contents section corresponds to the actual structure of the document. Inspection ID: MarkdownOutdatedTableOfContents", + "markdown": "Checks if a particular table of contents section corresponds to the actual structure of the document.\n\nInspection ID: MarkdownOutdatedTableOfContents" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MarkdownOutdatedTableOfContents", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Markdown", + "index": 11, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "MarkdownNoTableBorders", + "shortDescription": { + "text": "Table doesn't have side borders" + }, + "fullDescription": { + "text": "Checks if table has correct side borders. For compatibility reasons all table rows should have borders (pipe symbols) at the start and at the end. Inspection ID: MarkdownNoTableBorders", + "markdown": "Checks if table has correct side borders. For compatibility reasons all table rows should have borders (pipe symbols) at the start and at the end.\n\nInspection ID: MarkdownNoTableBorders" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MarkdownNoTableBorders", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Markdown", + "index": 11, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "MarkdownUnresolvedLinkLabel", + "shortDescription": { + "text": "Unresolved link label" + }, + "fullDescription": { + "text": "Reports unresolved link labels in Markdown files. Inspection ID: MarkdownUnresolvedLinkLabel", + "markdown": "Reports unresolved link labels in Markdown files.\n\nInspection ID: MarkdownUnresolvedLinkLabel" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MarkdownUnresolvedLinkLabel", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Markdown", + "index": 11, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "MarkdownUnresolvedFileReference", + "shortDescription": { + "text": "Unresolved file references" + }, + "fullDescription": { + "text": "Reports unresolved file references in Markdown files. Inspection ID: MarkdownUnresolvedFileReference", + "markdown": "Reports unresolved file references in Markdown files.\n\nInspection ID: MarkdownUnresolvedFileReference" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MarkdownUnresolvedFileReference", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Markdown", + "index": 11, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "MarkdownIncorrectTableFormatting", + "shortDescription": { + "text": "Incorrect table formatting" + }, + "fullDescription": { + "text": "Checks if table is correctly formatted. Inspection ID: MarkdownIncorrectTableFormatting", + "markdown": "Checks if table is correctly formatted.\n\nInspection ID: MarkdownIncorrectTableFormatting" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "MarkdownIncorrectTableFormatting", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Markdown", + "index": 11, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "MarkdownIncorrectlyNumberedListItem", + "shortDescription": { + "text": "Incorrectly numbered list item" + }, + "fullDescription": { + "text": "Ordered list items are expected to have straight numeration starting from 1. The motivation behind this is that most of Markdown processors are ignoring the numbering of ordered lists. A processor will generate an '
    ' element for such list, that will number items continuously from 1. Inspection ID: MarkdownIncorrectlyNumberedListItem", + "markdown": "Ordered list items are expected to have straight numeration starting from 1.\n\nThe motivation behind this is that most of Markdown processors are ignoring the numbering of ordered lists. A processor will generate an `
      ` element for such list, that will number items continuously from 1.\n\nInspection ID: MarkdownIncorrectlyNumberedListItem" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MarkdownIncorrectlyNumberedListItem", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Markdown", + "index": 11, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "MarkdownLinkDestinationWithSpaces", + "shortDescription": { + "text": "Links should not contain spaces" + }, + "fullDescription": { + "text": "To ensure consistency between different tools, file links should not contain spaces. Example: '[Some file link](some file.md)' A quick-fix replaces spaces with their url-encoded equivalent: '[Some file link](some%20file.md)' Inspection ID: MarkdownLinkDestinationWithSpaces", + "markdown": "To ensure consistency between different tools, file links should not contain spaces.\n\n**Example:**\n\n\n [Some file link](some file.md)\n\nA quick-fix replaces spaces with their url-encoded equivalent:\n\n\n [Some file link](some%20file.md)\n\nInspection ID: MarkdownLinkDestinationWithSpaces" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MarkdownLinkDestinationWithSpaces", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Markdown", + "index": 11, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "MarkdownUnresolvedHeaderReference", + "shortDescription": { + "text": "Unresolved header reference" + }, + "fullDescription": { + "text": "Reports unresolved header references in Markdown files. Inspection ID: MarkdownUnresolvedHeaderReference", + "markdown": "Reports unresolved header references in Markdown files.\n\nInspection ID: MarkdownUnresolvedHeaderReference" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MarkdownUnresolvedHeaderReference", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Markdown", + "index": 11, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + } + ], + "language": "en-US", + "contents": ["localizedData", "nonLocalizedData"], + "isComprehensive": false + }, + { + "name": "com.jetbrains.plugins.ini4idea", + "version": "253.31833.0", + "rules": [ + { + "id": "DuplicateKeyInSection", + "shortDescription": { + "text": "Duplicate directive in section" + }, + "fullDescription": { + "text": "Reports duplicate properties in the 'ini' file section. Inspection ID: DuplicateKeyInSection", + "markdown": "Reports duplicate properties in the `ini` file section.\n\nInspection ID: DuplicateKeyInSection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DuplicateKeyInSection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Ini files", + "index": 15, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + }, + { + "id": "DuplicateSectionInFile", + "shortDescription": { + "text": "Duplicate section in file" + }, + "fullDescription": { + "text": "Reports duplicate sections in the 'ini' file. Inspection ID: DuplicateSectionInFile", + "markdown": "Reports duplicate sections in the `ini` file.\n\nInspection ID: DuplicateSectionInFile" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DuplicateSectionInFile", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Ini files", + "index": 15, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + } + ], + "language": "en-US", + "contents": ["localizedData", "nonLocalizedData"], + "isComprehensive": false + }, + { + "name": "org.toml.lang", + "version": "253.31833.0", + "rules": [ + { + "id": "TomlUnresolvedReference", + "shortDescription": { + "text": "Unresolved reference" + }, + "fullDescription": { + "text": "Reports unresolved references in TOML files. Inspection ID: TomlUnresolvedReference", + "markdown": "Reports unresolved references in TOML files.\n\nInspection ID: TomlUnresolvedReference" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "TomlUnresolvedReference", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "TOML", + "index": 18, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + } + ], + "language": "en-US", + "contents": ["localizedData", "nonLocalizedData"], + "isComprehensive": false + }, + { + "name": "org.intellij.qodana", + "version": "253.31833.0", + "rules": [ + { + "id": "CyclomaticComplexityInspection", + "shortDescription": { + "text": "Code metrics" + }, + "fullDescription": { + "text": "Calculates cyclomatic complexity. Inspection ID: CyclomaticComplexityInspection", + "markdown": "Calculates cyclomatic complexity.\n\nInspection ID: CyclomaticComplexityInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CyclomaticComplexityInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "Qodana", + "index": 20, + "toolComponent": { + "name": "QDPY" + } + }, + "kinds": ["superset"] + } + ] + } + ], + "language": "en-US", + "contents": ["localizedData", "nonLocalizedData"], + "isComprehensive": false + } + ] + }, + "invocations": [ + { + "startTimeUtc": "2026-04-27T07:25:55.944699976Z", + "exitCode": 0, + "toolExecutionNotifications": [ + { + "message": { + "text": "Analysis by sanity inspection \"An invalid interpreter\" was suspended due to high number of problems." + }, + "level": "error", + "timeUtc": "2026-04-27T07:26:14.738618141Z", + "properties": { + "qodanaKind": "sanityFailure" + } + } + ], + "executionSuccessful": true + } + ], + "language": "en-US", + "versionControlProvenance": [ + { + "repositoryUri": "https://github.com/xprilion/OpenMLR.git", + "revisionId": "eb2cd746e7d52b6e9f3b07215378278683602020", + "branch": "main", + "properties": { + "repoUrl": "https://github.com/xprilion/OpenMLR.git", + "lastAuthorName": "Anubhav Singh", + "vcsType": "Git", + "lastAuthorEmail": "xprilion@gmail.com" + } + } + ], + "originalUriBaseIds": { + "SRCROOT": { + "description": { + "text": "The subdirectory within the project that was analyzed (--project-dir qodana CLI parameter)" + } + } + }, + "results": [ + { + "ruleId": "PyAttributeOutsideInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Instance attribute _conversation_uuid defined outside __init__", + "markdown": "Instance attribute _conversation_uuid defined outside __init__" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/sandbox/ssh.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 134, + "startColumn": 9, + "charOffset": 4646, + "charLength": 23, + "snippet": { + "text": "self._conversation_uuid" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 132, + "startColumn": 1, + "charOffset": 4517, + "charLength": 217, + "snippet": { + "text": " self.workdir = config.get(\"workdir\", \"~\")\n self.host_key_fingerprint = config.get(\"host_key_fingerprint\")\n self._conversation_uuid = config.get(\"conversation_uuid\")\n\n if self.key_filename:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "5fa33ed5822d5961", + "equalIndicator/v1": "f48c45ce40e2d1a151817f21ada63b175dff5367ebadb83025cd63b33a91f4b1" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_local.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 214, + "startColumn": 7, + "charOffset": 7856, + "charLength": 19, + "snippet": { + "text": "TestModuleConstants" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 212, + "startColumn": 1, + "charOffset": 7848, + "charLength": 119, + "snippet": { + "text": "\n\nclass TestModuleConstants:\n def test_docker_image_default(self):\n assert DOCKER_IMAGE == \"python:3.12-slim\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "14048f09192b8560", + "equalIndicator/v1": "04f1a19657f9df7a1cff59578956e3d294608fd19cf4f21654f8ef9054ad6b8f" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_compute.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 432, + "startColumn": 7, + "charOffset": 16320, + "charLength": 21, + "snippet": { + "text": "TestToolRouterContext" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 430, + "startColumn": 1, + "charOffset": 16235, + "charLength": 169, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestToolRouterContext:\n def test_set_context(self):\n router = ToolRouter()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "b75764acc1a76ba0", + "equalIndicator/v1": "06bace1f1418b2290f90ca05415ab0abf46f0b0f32c25b011f6c8413c9265780" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 85, + "startColumn": 7, + "charOffset": 2526, + "charLength": 16, + "snippet": { + "text": "TestWriteSection" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 83, + "startColumn": 1, + "charOffset": 2518, + "charLength": 114, + "snippet": { + "text": "\n\nclass TestWriteSection:\n async def test_no_project(self):\n from openmlr.tools.writing import _projects" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "cb674c64ddf6630b", + "equalIndicator/v1": "0722547d23fd5f4672f3c901373f6b563cd1fb3e83f0d9f3f033e29b9c4317b0" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 28, + "startColumn": 7, + "charOffset": 655, + "charLength": 12, + "snippet": { + "text": "TestToolSpec" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 26, + "startColumn": 1, + "charOffset": 647, + "charLength": 165, + "snippet": { + "text": "\n\nclass TestToolSpec:\n def test_creation_without_optional(self):\n ts = ToolSpec(name=\"test_tool\", description=\"A test tool\", parameters={\"type\": \"object\"})" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "58b74f842f9f35c2", + "equalIndicator/v1": "0901db0f877572b4f3d794aae1669af41664849e660fe3596bc7b5f703f1402c" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_local.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 228, + "startColumn": 7, + "charOffset": 8317, + "charLength": 22, + "snippet": { + "text": "TestRunningInContainer" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 226, + "startColumn": 1, + "charOffset": 8309, + "charLength": 149, + "snippet": { + "text": "\n\nclass TestRunningInContainer:\n def test_returns_bool(self):\n # Just verify it returns a boolean (actual detection depends on environment)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "706de7e140137608", + "equalIndicator/v1": "090fde1b226a9c0bec71ad93629230c207f94a6a8398f3053ad161380f062272" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_routes_health.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 9, + "startColumn": 7, + "charOffset": 131, + "charLength": 19, + "snippet": { + "text": "TestHealthEndpoints" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 7, + "startColumn": 1, + "charOffset": 123, + "charLength": 144, + "snippet": { + "text": "\n\nclass TestHealthEndpoints:\n async def test_api_health_returns_ok(self, client: AsyncClient):\n resp = await client.get(\"/api/health\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "7d89435d95252348", + "equalIndicator/v1": "0987637930507d3185e71d72263562685d22ae7afb5c0da7afb5297b671426c5" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_compute.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 135, + "startColumn": 7, + "charOffset": 5007, + "charLength": 20, + "snippet": { + "text": "TestWorkspaceManager" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 133, + "startColumn": 1, + "charOffset": 4922, + "charLength": 229, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestWorkspaceManager:\n def test_create_workspace(self, workspace_manager):\n path = workspace_manager.create_workspace(\"test-uuid-123\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "0c62efe818de26dc", + "equalIndicator/v1": "09dceee9e4223abf45e9f6c12f9dc79930e19a4bb2ed253fce047552a29134a3" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 18, + "startColumn": 7, + "charOffset": 316, + "charLength": 20, + "snippet": { + "text": "TestCreatePapersTool" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 16, + "startColumn": 1, + "charOffset": 308, + "charLength": 104, + "snippet": { + "text": "\n\nclass TestCreatePapersTool:\n async def test_creates_tool(self):\n tool = create_papers_tool()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "87bc80a1b0d6c5d9", + "equalIndicator/v1": "0ad69604f1ef4946daeb9a80df713d3775ba008a852f8d57a28b11c471c75367" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_prompts.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 74, + "startColumn": 7, + "charOffset": 3292, + "charLength": 17, + "snippet": { + "text": "TestCompactPrompt" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 72, + "startColumn": 1, + "charOffset": 3284, + "charLength": 103, + "snippet": { + "text": "\n\nclass TestCompactPrompt:\n def test_is_string(self):\n assert isinstance(COMPACT_PROMPT, str)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4ee0901054afa2aa", + "equalIndicator/v1": "0b412ac2372f4914c4cbcae64dd129b84a78602e1c73d0ee61151de0f363fbbf" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 377, + "startColumn": 7, + "charOffset": 14523, + "charLength": 18, + "snippet": { + "text": "TestCompactLLMCall" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 375, + "startColumn": 1, + "charOffset": 14454, + "charLength": 192, + "snippet": { + "text": "# ── Compact LLM Call ───────────────────────────────────────\n\nclass TestCompactLLMCall:\n async def test_returns_content(self):\n messages = [{\"role\": \"user\", \"content\": \"summarize\"}]" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "58d6c3266c7d996a", + "equalIndicator/v1": "0c9becf55a42ecc090d8e55a30b292c9e7b91984ad68f9ec919ad011bf65f327" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 153, + "startColumn": 7, + "charOffset": 5067, + "charLength": 13, + "snippet": { + "text": "TestLLMResult" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 151, + "startColumn": 1, + "charOffset": 5059, + "charLength": 144, + "snippet": { + "text": "\n\nclass TestLLMResult:\n def test_basic_result(self):\n result = LLMResult(content=\"Hello, world!\", tool_calls=[], finish_reason=\"stop\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "99fe5060312cf2af", + "equalIndicator/v1": "0d6e4f0ced7b52b82ec3ceba1dcab2ac673c13c2e4ec304ba97dace1b894e504" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 12, + "startColumn": 7, + "charOffset": 251, + "charLength": 11, + "snippet": { + "text": "LLMProvider" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 10, + "startColumn": 1, + "charOffset": 243, + "charLength": 101, + "snippet": { + "text": "\n\nclass LLMProvider:\n \"\"\"Handles LLM calls across multiple providers with streaming and retry.\"\"\"\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "b499fc9b0809a8bc", + "equalIndicator/v1": "0ffc5ae25384f3c045e1f7205a860b01d669bbf6a7dc2a6c3f9e7bf8cb69b780" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_db_operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 12, + "startColumn": 7, + "charOffset": 211, + "charLength": 26, + "snippet": { + "text": "TestConversationOperations" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 10, + "startColumn": 1, + "charOffset": 203, + "charLength": 208, + "snippet": { + "text": "\n\nclass TestConversationOperations:\n async def test_create_conversation(self, db_session: AsyncSession, test_user):\n conv = await ops.create_conversation(db_session, test_user.id, title=\"Test Conv\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "0165b4c463a53634", + "equalIndicator/v1": "1038ab8b04c228c63c2f49070659c1d608daf47330c146f29cdc32a47b18b00a" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_redis_pubsub.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 9, + "startColumn": 7, + "charOffset": 173, + "charLength": 16, + "snippet": { + "text": "TestPublishEvent" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 7, + "startColumn": 1, + "charOffset": 145, + "charLength": 146, + "snippet": { + "text": "\n@pytest.mark.asyncio\nclass TestPublishEvent:\n async def test_publishes_json_to_redis(self):\n from openmlr.agent.types import AgentEvent" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ab9cc59dc6f43899", + "equalIndicator/v1": "11182262e1b8758b2b3ea27b37ba1ae64d8422074a5568f952a6a9a000e9418d" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 106, + "startColumn": 7, + "charOffset": 3395, + "charLength": 18, + "snippet": { + "text": "TestHandleApproval" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 104, + "startColumn": 1, + "charOffset": 3326, + "charLength": 234, + "snippet": { + "text": "# ── Approval Handling ──────────────────────────────────────\n\nclass TestHandleApproval:\n async def test_approves_tool_calls(self, mock_session, mock_router):\n tcs = [ToolCall(id=\"tc1\", name=\"bash\", arguments={\"cmd\": \"ls\"})]" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "8b9f17f8a5b1e554", + "equalIndicator/v1": "131d47632e716e219a4f666433968c1686c12eeca8c85c112ab35cb039330875" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_auth.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 41, + "startColumn": 7, + "charOffset": 1097, + "charLength": 18, + "snippet": { + "text": "TestVerifyPassword" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 39, + "startColumn": 1, + "charOffset": 1012, + "charLength": 202, + "snippet": { + "text": "# ── verify_password ────────────────────────────────────────────────────────\n\nclass TestVerifyPassword:\n def test_correct_password_returns_true(self):\n hashed = hash_password(\"correct_horse\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "747682c3d87e5e3f", + "equalIndicator/v1": "1479e7f97a7952460e350a41f622557cefb3b0b961e6cc081f2f061f0d6a84ff" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_local.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 59, + "startColumn": 7, + "charOffset": 1797, + "charLength": 16, + "snippet": { + "text": "TestValidatePath" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 57, + "startColumn": 1, + "charOffset": 1789, + "charLength": 94, + "snippet": { + "text": "\n\nclass TestValidatePath:\n def test_resolves_relative_path(self):\n cwd = os.getcwd()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "1732768871b6ac0a", + "equalIndicator/v1": "14cf83fe3a64b6f0438b15b72bd798ab851b4c6dab62f51b8be8c1d398534eb8" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tool_registry.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 220, + "startColumn": 7, + "charOffset": 7128, + "charLength": 26, + "snippet": { + "text": "TestModeRestrictionsConfig" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 218, + "startColumn": 1, + "charOffset": 7120, + "charLength": 142, + "snippet": { + "text": "\n\nclass TestModeRestrictionsConfig:\n async def test_plan_has_allowed_list(self):\n assert \"allowed\" in MODE_TOOL_RESTRICTIONS[\"plan\"]" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "8af23b655f5a0a22", + "equalIndicator/v1": "16476c2363d74aa362a57bd207966d4932f00d26e0ca303d9e9a2a5d798d2955" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 133, + "startColumn": 7, + "charOffset": 4461, + "charLength": 20, + "snippet": { + "text": "TestGetDraftFromProj" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 131, + "startColumn": 1, + "charOffset": 4453, + "charLength": 93, + "snippet": { + "text": "\n\nclass TestGetDraftFromProj:\n async def test_generates_full_draft(self):\n proj = {" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "c2b63889c619917a", + "equalIndicator/v1": "173ed3709e1d068a9d1099262e3c1ef89a3b0220dca81e2ed87c11b39620a9b5" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 16, + "startColumn": 7, + "charOffset": 265, + "charLength": 12, + "snippet": { + "text": "TestToolCall" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 14, + "startColumn": 1, + "charOffset": 257, + "charLength": 136, + "snippet": { + "text": "\n\nclass TestToolCall:\n def test_creation(self):\n tc = ToolCall(id=\"call_1\", name=\"read_file\", arguments={\"path\": \"/tmp/test\"})" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "3616ec874b566175", + "equalIndicator/v1": "17b2d4020f0784c0bb7ddb560ce97a1794f3b21cf1dd9bffb20207c44e355e18" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_routes_settings.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 78, + "startColumn": 7, + "charOffset": 3036, + "charLength": 13, + "snippet": { + "text": "TestProviders" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 76, + "startColumn": 1, + "charOffset": 3028, + "charLength": 144, + "snippet": { + "text": "\n\nclass TestProviders:\n async def test_list_providers(self, auth_client: AsyncClient):\n resp = await auth_client.get(\"/api/providers\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "92729e7f27326008", + "equalIndicator/v1": "1abbfeed6ba6fddb839af981e9387048867a54b1206dfd578a89ea643f161ec7" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_research.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 53, + "startColumn": 7, + "charOffset": 1625, + "charLength": 23, + "snippet": { + "text": "TestExecuteResearchTool" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 51, + "startColumn": 1, + "charOffset": 1617, + "charLength": 96, + "snippet": { + "text": "\n\nclass TestExecuteResearchTool:\n @pytest.mark.asyncio\n async def test_unknown_tool(self):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "edc495daa503ad80", + "equalIndicator/v1": "22cbb95f4b8e6410f0da9c260b30b8a1f877cd8b593d0a6cdfe97a30fa6692c4" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_config.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 107, + "startColumn": 7, + "charOffset": 3875, + "charLength": 28, + "snippet": { + "text": "TestGetModelMaxTokensUnknown" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 105, + "startColumn": 1, + "charOffset": 3790, + "charLength": 230, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestGetModelMaxTokensUnknown:\n def test_unknown_model_returns_default(self):\n assert get_model_max_tokens(\"my-custom-model\") == 200_000" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "b9ec3c4e7152d421", + "equalIndicator/v1": "23167eed71b9faea0d0f475f5a38d4de5c062c83c10c1084d1d2ae7fa48b26e0" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_dependencies.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 9, + "startColumn": 7, + "charOffset": 156, + "charLength": 13, + "snippet": { + "text": "TestGetConfig" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 7, + "startColumn": 1, + "charOffset": 148, + "charLength": 132, + "snippet": { + "text": "\n\nclass TestGetConfig:\n async def test_get_config_returns_agent_config(self):\n from openmlr.dependencies import get_config" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "10f99365bd5ba775", + "equalIndicator/v1": "232b6f2aecc4f637e998e37ca31aa5f8af523c00f42178a53da9706a5a93b33a" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_event_bus.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 90, + "startColumn": 7, + "charOffset": 2821, + "charLength": 13, + "snippet": { + "text": "TestBroadcast" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 88, + "startColumn": 1, + "charOffset": 2736, + "charLength": 186, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestBroadcast:\n @pytest.mark.asyncio\n async def test_broadcast_dict_event(self, bus: EventBus):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "37f6bf75e192b597", + "equalIndicator/v1": "24c22bfd0b6fc2220dd6cbe6e7355e9373dac02380ac674ffdc39221405eb2b0" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models_orm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 56, + "startColumn": 7, + "charOffset": 1580, + "charLength": 21, + "snippet": { + "text": "TestConversationModel" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 54, + "startColumn": 1, + "charOffset": 1572, + "charLength": 142, + "snippet": { + "text": "\n\nclass TestConversationModel:\n async def test_create_conversation(self, db_session: AsyncSession, test_user):\n conv = Conversation(" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "30d7a02412cbb454", + "equalIndicator/v1": "25b05703bc6904e07f7a4d81323bf0ffc478d8d4efac9d8aac83fe6bb8ee3b38" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_app.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 10, + "startColumn": 7, + "charOffset": 134, + "charLength": 15, + "snippet": { + "text": "TestAppCreation" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 8, + "startColumn": 1, + "charOffset": 126, + "charLength": 98, + "snippet": { + "text": "\n\nclass TestAppCreation:\n async def test_app_title(self):\n assert app.title == \"OpenMLR\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "71563321abe846e7", + "equalIndicator/v1": "25b548c0e865de0cf250bf19b6752dda28c745baba1b65bc3dd2c245b4195863" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models_orm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 226, + "startColumn": 7, + "charOffset": 7320, + "charLength": 15, + "snippet": { + "text": "TestUserSetting" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 224, + "startColumn": 1, + "charOffset": 7312, + "charLength": 133, + "snippet": { + "text": "\n\nclass TestUserSetting:\n async def test_create_setting(self, db_session: AsyncSession, test_user):\n setting = UserSetting(" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "7f1e1ff41a07c4cd", + "equalIndicator/v1": "27f82d53aec078985f63e354259bacc12c3dcf3bd71d23ebddf97846f74efa0c" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_compute.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 481, + "startColumn": 7, + "charOffset": 18187, + "charLength": 19, + "snippet": { + "text": "TestConfigRedaction" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 479, + "startColumn": 1, + "charOffset": 18102, + "charLength": 199, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestConfigRedaction:\n def test_redact_password(self):\n from openmlr.routes.compute import _redact_config" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a0119625af0b4835", + "equalIndicator/v1": "2a6fb4f2021a53fa28795bcaac8b845e35caf49ee9e0173a753abdbc0bd6a583" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 53, + "startColumn": 7, + "charOffset": 1462, + "charLength": 13, + "snippet": { + "text": "TestUserLogin" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 51, + "startColumn": 1, + "charOffset": 1454, + "charLength": 110, + "snippet": { + "text": "\n\nclass TestUserLogin:\n def test_valid(self):\n u = UserLogin(username=\"testuser\", password=\"secret\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "527a2a92ca971c63", + "equalIndicator/v1": "2a9689b29b1c3c8d59dd0a77e05522c95cbd3d09f379d12c690aaa7ee57be39c" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 147, + "startColumn": 7, + "charOffset": 4526, + "charLength": 17, + "snippet": { + "text": "TestSettingUpdate" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 145, + "startColumn": 1, + "charOffset": 4518, + "charLength": 97, + "snippet": { + "text": "\n\nclass TestSettingUpdate:\n def test_str_value(self):\n s = SettingUpdate(value=\"hello\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "d409c390679e56e9", + "equalIndicator/v1": "2be8b677a36ad62a6c1e1f9bb44a70c4a97db45bff1dde76f54552185a584d22" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 69, + "startColumn": 7, + "charOffset": 1879, + "charLength": 15, + "snippet": { + "text": "TestExecuteTool" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 67, + "startColumn": 1, + "charOffset": 1810, + "charLength": 241, + "snippet": { + "text": "# ── Tool Execution ─────────────────────────────────────────\n\nclass TestExecuteTool:\n async def test_executes_tool_and_returns_output(self, mock_session, mock_router):\n tc = ToolCall(id=\"tc1\", name=\"bash\", arguments={\"cmd\": \"ls\"})" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "646fcb78ac1f201b", + "equalIndicator/v1": "2e60e8b548e6a8f4980a5763f9dee9c3dbb3865ba4cb3b4d1ec9292940f9a1c9" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 137, + "startColumn": 7, + "charOffset": 4232, + "charLength": 19, + "snippet": { + "text": "TestApprovalRequest" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 135, + "startColumn": 1, + "charOffset": 4224, + "charLength": 127, + "snippet": { + "text": "\n\nclass TestApprovalRequest:\n def test_valid(self):\n a = ApprovalRequest(approvals={\"call_1\": True, \"call_2\": False})" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ab2c0e5b47d8c252", + "equalIndicator/v1": "2e741eb45b08f14611d4bc0d04ad5c87fc0d8f2845f65e82c46ae6ee3e184331" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_redis_pubsub.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 59, + "startColumn": 7, + "charOffset": 2184, + "charLength": 20, + "snippet": { + "text": "TestPublishInterrupt" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 57, + "startColumn": 1, + "charOffset": 2156, + "charLength": 162, + "snippet": { + "text": "\n@pytest.mark.asyncio\nclass TestPublishInterrupt:\n async def test_sets_interrupt_key(self):\n from openmlr.services.redis_pubsub import publish_interrupt" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ff8c8f6746650cf1", + "equalIndicator/v1": "32ada3b0b09c14594080d86c3cf30cd1f65d8cd9060a4ca5f5c3b03e70a3ee66" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 35, + "startColumn": 7, + "charOffset": 892, + "charLength": 18, + "snippet": { + "text": "TestExtractArxivId" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 33, + "startColumn": 1, + "charOffset": 884, + "charLength": 132, + "snippet": { + "text": "\n\nclass TestExtractArxivId:\n async def test_standard_format(self):\n assert _extract_arxiv_id(\"2301.12345\") == \"2301.12345\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "e7dac0b0c8239c93", + "equalIndicator/v1": "34fe7dd842894612d12fa29202c4952a15763f72c24d1def8e0ae0fdae68c8ab" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_sandbox_types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 64, + "startColumn": 7, + "charOffset": 2179, + "charLength": 20, + "snippet": { + "text": "TestSandboxInterface" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 62, + "startColumn": 1, + "charOffset": 2171, + "charLength": 100, + "snippet": { + "text": "\n\nclass TestSandboxInterface:\n def test_is_abstract(self):\n with pytest.raises(TypeError):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "7d25b437a5ea5668", + "equalIndicator/v1": "3661da02ffa13e94148b6ecdd71d1cabb71643d6bf460c1979b4a7d69db27834" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models_orm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 25, + "startColumn": 7, + "charOffset": 497, + "charLength": 13, + "snippet": { + "text": "TestUserModel" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 23, + "startColumn": 1, + "charOffset": 489, + "charLength": 107, + "snippet": { + "text": "\n\nclass TestUserModel:\n async def test_create_user(self, db_session: AsyncSession):\n user = User(" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "9ec7a7fa3b78d98c", + "equalIndicator/v1": "37164808a4db45903454eff7502b8c6c382c64d8faf454f603fffc27220c6c6d" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_doom_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 60, + "startColumn": 7, + "charOffset": 1942, + "charLength": 24, + "snippet": { + "text": "TestIdenticalConsecutive" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 58, + "startColumn": 1, + "charOffset": 1857, + "charLength": 173, + "snippet": { + "text": "# ── Pattern 1: identical consecutive calls ─────────────────────────────────\n\nclass TestIdenticalConsecutive:\n def test_detects_3_identical_calls(self):\n msgs = [" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4add51a7bccf2e1b", + "equalIndicator/v1": "3933cc25febdbfeadd531a4b4b9780f509e691567dd1110bddd0f9921e79f496" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_sandbox_types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 44, + "startColumn": 7, + "charOffset": 1481, + "charLength": 19, + "snippet": { + "text": "TestExecutionResult" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 42, + "startColumn": 1, + "charOffset": 1473, + "charLength": 114, + "snippet": { + "text": "\n\nclass TestExecutionResult:\n def test_defaults(self):\n r = ExecutionResult(output=\"done\", success=True)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "cb4f392bbbaf33f8", + "equalIndicator/v1": "3a79f24f9a436330c2ab86bf59e706321b69fd0285eac342aef570f51e7ae50c" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_local.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 173, + "startColumn": 7, + "charOffset": 6151, + "charLength": 14, + "snippet": { + "text": "TestHandleEdit" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 171, + "startColumn": 1, + "charOffset": 6123, + "charLength": 144, + "snippet": { + "text": "\n@pytest.mark.asyncio\nclass TestHandleEdit:\n async def test_replaces_string(self, monkeypatch, tmp_path):\n monkeypatch.chdir(tmp_path)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "85d99bc04bb2000b", + "equalIndicator/v1": "3b8821d818f547923a46600facee40f7abb3aeb069ae815a3284efe0325e6d21" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_compute.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 333, + "startColumn": 7, + "charOffset": 12735, + "charLength": 21, + "snippet": { + "text": "TestSSHConnectionPool" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 331, + "startColumn": 1, + "charOffset": 12650, + "charLength": 182, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestSSHConnectionPool:\n def test_singleton(self):\n pool1 = SSHConnectionPool.get_pool()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "fe75aa15e353ed4c", + "equalIndicator/v1": "3bd6a369d3ac3ef4f205bc0b84f20a4dd87d2f58365a8fed0b81f6afa475bbe2" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 236, + "startColumn": 7, + "charOffset": 8987, + "charLength": 18, + "snippet": { + "text": "TestSubmissionLoop" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 234, + "startColumn": 1, + "charOffset": 8918, + "charLength": 230, + "snippet": { + "text": "# ── Submissions ────────────────────────────────────────────\n\nclass TestSubmissionLoop:\n async def test_processes_user_input(self, mock_session, mock_router):\n mock_session.submission_queue.get = AsyncMock(side_effect=[" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "d07604099d7e0174", + "equalIndicator/v1": "3ed188ef1e64c67fc1ed29cee8aedb79851d0fe7d622a25d8e7722bc7f3a9479" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_session_manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 32, + "startColumn": 7, + "charOffset": 637, + "charLength": 18, + "snippet": { + "text": "TestSessionManager" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 30, + "startColumn": 1, + "charOffset": 629, + "charLength": 147, + "snippet": { + "text": "\n\nclass TestSessionManager:\n async def test_initial_state(self, session_manager):\n assert session_manager.current_conversation_id is None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "96301ca52b312173", + "equalIndicator/v1": "3efd090c4c76c56c554fea68d63afae3321fb411daaaa8668a933eafba1adf6c" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_redis_pubsub.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 36, + "startColumn": 7, + "charOffset": 1273, + "charLength": 18, + "snippet": { + "text": "TestPublishAnswers" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 34, + "startColumn": 1, + "charOffset": 1245, + "charLength": 165, + "snippet": { + "text": "\n@pytest.mark.asyncio\nclass TestPublishAnswers:\n async def test_sets_answers_key_in_redis(self):\n from openmlr.services.redis_pubsub import publish_answers" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "bed85f3b1dc8e032", + "equalIndicator/v1": "3f4f57e2f47e17c506717b3a2fbccc0221efed9d7d1fd330558918769bb98584" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_sandbox.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 11, + "startColumn": 7, + "charOffset": 251, + "charLength": 22, + "snippet": { + "text": "TestCreateSandboxTools" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 9, + "startColumn": 1, + "charOffset": 243, + "charLength": 106, + "snippet": { + "text": "\n\nclass TestCreateSandboxTools:\n async def test_creates_all_tools(self):\n mgr = SandboxManager()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "d7c58322107397e0", + "equalIndicator/v1": "3f6aa174e10098d7ba193f3658aec7318cd3f140406a47d412c097b0254811c0" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_research.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 28, + "startColumn": 7, + "charOffset": 759, + "charLength": 24, + "snippet": { + "text": "TestGetResearchToolSpecs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 26, + "startColumn": 1, + "charOffset": 751, + "charLength": 120, + "snippet": { + "text": "\n\nclass TestGetResearchToolSpecs:\n def test_returns_formatted_tools(self):\n specs = _get_research_tool_specs()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "32971a8a6d1b6157", + "equalIndicator/v1": "3f994fdd22d786879fa2f33f55f48b27d8be83156a77965898998769802c7a34" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 60, + "startColumn": 7, + "charOffset": 1651, + "charLength": 17, + "snippet": { + "text": "TestTokenResponse" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 58, + "startColumn": 1, + "charOffset": 1643, + "charLength": 140, + "snippet": { + "text": "\n\nclass TestTokenResponse:\n def test_defaults(self):\n t = TokenResponse(access_token=\"abc123\", user={\"id\": 1, \"username\": \"test\"})" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "adce06a01ef25342", + "equalIndicator/v1": "424ae4a19f9e1f1fd8ffdfeb1afd60d86856c76da9779d5032d37d345155a3ef" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tool_registry.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 131, + "startColumn": 7, + "charOffset": 3710, + "charLength": 19, + "snippet": { + "text": "TestToolSpecsForLLM" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 129, + "startColumn": 1, + "charOffset": 3702, + "charLength": 148, + "snippet": { + "text": "\n\nclass TestToolSpecsForLLM:\n async def test_get_specs_in_openai_format(self, router, dummy_tool, read_tool):\n router.register(dummy_tool)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "7d4c94c59e676100", + "equalIndicator/v1": "432547f55f56e247ab64ecd440d218121a0440d5f875e0134560cc90e5de5970" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_session.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 150, + "startColumn": 7, + "charOffset": 4943, + "charLength": 11, + "snippet": { + "text": "TestOnEvent" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 148, + "startColumn": 1, + "charOffset": 4858, + "charLength": 198, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestOnEvent:\n def test_registers_listener(self, session: Session):\n assert len(session._listeners) == 0" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "7ba9eef3d8274196", + "equalIndicator/v1": "4346181f2eee20acc76b77740c84c2fecfd464730931fb322e4c25790fa7d00d" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 126, + "startColumn": 7, + "charOffset": 3929, + "charLength": 15, + "snippet": { + "text": "TestMessageSend" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 124, + "startColumn": 1, + "charOffset": 3921, + "charLength": 97, + "snippet": { + "text": "\n\nclass TestMessageSend:\n def test_basic(self):\n m = MessageSend(message=\"Hello world\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "6c255e21a5f53686", + "equalIndicator/v1": "44ebb26f18a84fdedf8972c9d443b87c7246b61627b03307ea9a967f53907f30" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 71, + "startColumn": 7, + "charOffset": 2136, + "charLength": 23, + "snippet": { + "text": "TestReconstructAbstract" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 69, + "startColumn": 1, + "charOffset": 2128, + "charLength": 108, + "snippet": { + "text": "\n\nclass TestReconstructAbstract:\n async def test_simple(self):\n inv = {\"hello\": [0], \"world\": [1]}" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "d72bec750b9e17fb", + "equalIndicator/v1": "44f017b7d5d3210aacfd2f1216821ab3b98409626b10e5a6caf1507fb1e5578e" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_event_bus.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 44, + "startColumn": 7, + "charOffset": 1296, + "charLength": 15, + "snippet": { + "text": "TestUnsubscribe" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 42, + "startColumn": 1, + "charOffset": 1211, + "charLength": 190, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestUnsubscribe:\n def test_unsubscribe_removes_queue(self, bus: EventBus):\n q = bus.subscribe()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "1dcf599a326e65af", + "equalIndicator/v1": "47a698246421ab11461f6ec6865073a8ce80ad3986a7e5e351d009690bf27139" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 165, + "startColumn": 7, + "charOffset": 4976, + "charLength": 18, + "snippet": { + "text": "TestProviderConfig" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 163, + "startColumn": 1, + "charOffset": 4968, + "charLength": 82, + "snippet": { + "text": "\n\nclass TestProviderConfig:\n def test_empty(self):\n p = ProviderConfig()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "8d36ce0caefadd6f", + "equalIndicator/v1": "4879434b5dac6efb5c5ac69f3ddbd7dd42d12c8e45b4fc45f94d193555fd516a" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_routes_settings.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 102, + "startColumn": 7, + "charOffset": 3907, + "charLength": 13, + "snippet": { + "text": "TestAppStatus" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 100, + "startColumn": 1, + "charOffset": 3899, + "charLength": 137, + "snippet": { + "text": "\n\nclass TestAppStatus:\n async def test_get_status(self, auth_client: AsyncClient):\n resp = await auth_client.get(\"/api/status\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "69c42153e3ca3822", + "equalIndicator/v1": "4d6da843c968d5999ca2fa5adba780476421a530e03b12e7b7beb95f2f028534" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 33, + "startColumn": 7, + "charOffset": 794, + "charLength": 17, + "snippet": { + "text": "TestCreateProject" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 31, + "startColumn": 1, + "charOffset": 786, + "charLength": 120, + "snippet": { + "text": "\n\nclass TestCreateProject:\n async def test_creates_project(self):\n from openmlr.tools.writing import _projects" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "c8cc099ccede6b8b", + "equalIndicator/v1": "500bb1ea011ce5853377835c24cf3d9ae5de7129db5abb2ede2a23cd080b32b6" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 59, + "startColumn": 7, + "charOffset": 1429, + "charLength": 10, + "snippet": { + "text": "Submission" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 57, + "startColumn": 1, + "charOffset": 1411, + "charLength": 86, + "snippet": { + "text": "\n@dataclass\nclass Submission:\n \"\"\"A submission to the agent loop.\"\"\"\n op: OpType" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "3bcb35761a56ac29", + "equalIndicator/v1": "50b94ecfbdb5276dbaa46111472def6693dbb7d87517186da1998017d5bda815" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/context.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 15, + "startColumn": 7, + "charOffset": 372, + "charLength": 14, + "snippet": { + "text": "ContextManager" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 13, + "startColumn": 1, + "charOffset": 354, + "charLength": 115, + "snippet": { + "text": "\n@dataclass\nclass ContextManager:\n config: AgentConfig\n messages: list[Message] = field(default_factory=list)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "dd7492d01f0d8f65", + "equalIndicator/v1": "522c74ef70706d9e866053b4ae824ee6ba22d7079591dbfb862857f5b0c9145a" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_redis_pubsub.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 84, + "startColumn": 7, + "charOffset": 3061, + "charLength": 18, + "snippet": { + "text": "TestCheckInterrupt" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 82, + "startColumn": 1, + "charOffset": 3033, + "charLength": 168, + "snippet": { + "text": "\n@pytest.mark.asyncio\nclass TestCheckInterrupt:\n async def test_returns_true_when_key_exists(self):\n from openmlr.services.redis_pubsub import check_interrupt" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "e657307c11bc0e63", + "equalIndicator/v1": "53ac34601dc566e7d1e2fe9d9b1c04d9837d500eb9441b6a14bda486fe05451e" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_sandbox_types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 10, + "startColumn": 7, + "charOffset": 271, + "charLength": 23, + "snippet": { + "text": "TestComputeCapabilities" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 8, + "startColumn": 1, + "charOffset": 263, + "charLength": 98, + "snippet": { + "text": "\n\nclass TestComputeCapabilities:\n def test_defaults(self):\n caps = ComputeCapabilities()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "45f0ac0aaffddb0c", + "equalIndicator/v1": "555c813b25a19a4d843eba77252158cc6f6276a19e935da03d63a93d184e2e93" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 88, + "startColumn": 7, + "charOffset": 2795, + "charLength": 14, + "snippet": { + "text": "TestAgentEvent" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 86, + "startColumn": 1, + "charOffset": 2787, + "charLength": 111, + "snippet": { + "text": "\n\nclass TestAgentEvent:\n def test_creation_without_data(self):\n evt = AgentEvent(event_type=\"status\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "1acf491985818ef4", + "equalIndicator/v1": "575bfb354cda4a3696d9005db988d31ba332a519c2889387070583363ed08127" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_sandbox_manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 15, + "startColumn": 7, + "charOffset": 248, + "charLength": 18, + "snippet": { + "text": "TestSandboxManager" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 13, + "startColumn": 1, + "charOffset": 240, + "charLength": 120, + "snippet": { + "text": "\n\nclass TestSandboxManager:\n async def test_initial_state(self, manager):\n assert manager.get_active() is None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "844a2d51303db122", + "equalIndicator/v1": "583d1f0eb7ba5be7ac9ae8a59d18fa4c9a6edebf1a63e34004e6ede827d3c13f" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 182, + "startColumn": 7, + "charOffset": 5535, + "charLength": 15, + "snippet": { + "text": "TestModelSwitch" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 180, + "startColumn": 1, + "charOffset": 5527, + "charLength": 90, + "snippet": { + "text": "\n\nclass TestModelSwitch:\n def test_valid(self):\n m = ModelSwitch(model=\"gpt-4o\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "5c633078f1cd496f", + "equalIndicator/v1": "587861f792fec3bb0830abe548b7c9151198b861a011c1e1630a58285f4c3476" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_db_operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 200, + "startColumn": 7, + "charOffset": 10007, + "charLength": 18, + "snippet": { + "text": "TestTaskOperations" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 198, + "startColumn": 1, + "charOffset": 9999, + "charLength": 133, + "snippet": { + "text": "\n\nclass TestTaskOperations:\n @pytest_asyncio.fixture(autouse=True)\n async def _conv(self, db_session: AsyncSession, test_user):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "c923d98bec82c27a", + "equalIndicator/v1": "58c3d497a99c4d10aa6a13dca1f38352e37f9f50844c18e76d4ba77b36887028" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 60, + "startColumn": 7, + "charOffset": 1775, + "charLength": 11, + "snippet": { + "text": "TestMessage" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 58, + "startColumn": 1, + "charOffset": 1767, + "charLength": 105, + "snippet": { + "text": "\n\nclass TestMessage:\n def test_user_message(self):\n msg = Message(role=\"user\", content=\"Hello\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "938762c347ba38e7", + "equalIndicator/v1": "58ed4d2e5173f01a6cae7830ee4377aa5f2d48c6eacfac6621d568e2185b874d" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_app.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 34, + "startColumn": 7, + "charOffset": 958, + "charLength": 14, + "snippet": { + "text": "TestMainModule" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 32, + "startColumn": 1, + "charOffset": 950, + "charLength": 104, + "snippet": { + "text": "\n\nclass TestMainModule:\n async def test_main_is_callable(self):\n from openmlr.main import main" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "0b2833d8a76fa5b7", + "equalIndicator/v1": "5a2e378739b2f5c6a57cf52d7517a83448564b2c8968ef0596347832212705a5" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_session.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 55, + "startColumn": 7, + "charOffset": 1778, + "charLength": 8, + "snippet": { + "text": "TestEmit" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 53, + "startColumn": 1, + "charOffset": 1693, + "charLength": 188, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestEmit:\n @pytest.mark.asyncio\n async def test_emit_puts_event_in_queue(self, session: Session):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "d8bc8c83d96bd061", + "equalIndicator/v1": "5afa7ecfe83b2ccf86d7fcae370a160183348ff1b4d8495bac366aca45830a07" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_research.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 15, + "startColumn": 7, + "charOffset": 328, + "charLength": 22, + "snippet": { + "text": "TestCreateResearchTool" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 13, + "startColumn": 1, + "charOffset": 320, + "charLength": 102, + "snippet": { + "text": "\n\nclass TestCreateResearchTool:\n def test_creates_tool(self):\n tool = create_research_tool()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "02be4901467e7a78", + "equalIndicator/v1": "5e4a5e582bef6593260629443a91b00a5effad3db74d3ea1731fe478bc047782" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_auth.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 79, + "startColumn": 7, + "charOffset": 2501, + "charLength": 21, + "snippet": { + "text": "TestDecodeAccessToken" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 77, + "startColumn": 1, + "charOffset": 2416, + "charLength": 211, + "snippet": { + "text": "# ── decode_access_token ────────────────────────────────────────────────────\n\nclass TestDecodeAccessToken:\n def test_decodes_valid_token(self):\n token = create_access_token(user_id=7, username=\"dave\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ecd65dbcc44a3c88", + "equalIndicator/v1": "5e9aec2cd056173254baf79a900229669749097750fe72be449706820b69974d" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 96, + "startColumn": 7, + "charOffset": 2799, + "charLength": 19, + "snippet": { + "text": "TestMessageResponse" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 94, + "startColumn": 1, + "charOffset": 2791, + "charLength": 95, + "snippet": { + "text": "\n\nclass TestMessageResponse:\n def test_creation(self):\n from datetime import datetime" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "17e058a729fe1ed0", + "equalIndicator/v1": "5ffd504aa4cf552ef4aa1f58e5f0b9fd17a45ab2ac0ba8cf1ec7686ee4206106" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 82, + "startColumn": 7, + "charOffset": 2358, + "charLength": 24, + "snippet": { + "text": "TestConversationResponse" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 80, + "startColumn": 1, + "charOffset": 2350, + "charLength": 100, + "snippet": { + "text": "\n\nclass TestConversationResponse:\n def test_creation(self):\n from datetime import datetime" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "07437f36ecdbb4c6", + "equalIndicator/v1": "60977c803fb9b0232b6b44f2ce2837559d08ea087b3569eb273f42683848499b" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/config.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 14, + "startColumn": 7, + "charOffset": 244, + "charLength": 11, + "snippet": { + "text": "AgentConfig" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 12, + "startColumn": 1, + "charOffset": 226, + "charLength": 133, + "snippet": { + "text": "\n@dataclass\nclass AgentConfig:\n model_name: str = \"\" # empty = auto-detect from available providers\n max_iterations: int = 300" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "514330a5f268e54e", + "equalIndicator/v1": "60d151e7b66296efca1b73ca0682e956ad7a254bc959d58a308fedb8333db0a8" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_redis_pubsub.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 163, + "startColumn": 7, + "charOffset": 6050, + "charLength": 19, + "snippet": { + "text": "TestModuleConstants" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 161, + "startColumn": 1, + "charOffset": 6042, + "charLength": 124, + "snippet": { + "text": "\n\nclass TestModuleConstants:\n def test_channel_name(self):\n from openmlr.services.redis_pubsub import CHANNEL_NAME" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "c5e7d4947b6b2e89", + "equalIndicator/v1": "61d7d8908b55b85254bfaefccc99bf16fb5ad286f7e10d9bea0983572cc642e1" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_github.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 10, + "startColumn": 7, + "charOffset": 185, + "charLength": 21, + "snippet": { + "text": "TestCreateGithubTools" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 8, + "startColumn": 1, + "charOffset": 177, + "charLength": 112, + "snippet": { + "text": "\n\nclass TestCreateGithubTools:\n async def test_creates_all_tools(self):\n tools = create_github_tools()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "35a27cdb87f6328f", + "equalIndicator/v1": "622268ae5882d80a92483a4d15c21e6e035d0b207e9931ebc5498de699de043d" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_context.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 47, + "startColumn": 7, + "charOffset": 1326, + "charLength": 14, + "snippet": { + "text": "TestAddMessage" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 45, + "startColumn": 1, + "charOffset": 1241, + "charLength": 191, + "snippet": { + "text": "# ── ContextManager.add_message ─────────────────────────────────────────────\n\nclass TestAddMessage:\n def test_adds_message_object(self):\n cm = ContextManager(config=_make_config())" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "1abf4d04551b3afe", + "equalIndicator/v1": "62d62e481ef223b25ee5ed31f76d6609b54873c9251e0b98d0fc865ae572d628" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_event_bus.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 69, + "startColumn": 7, + "charOffset": 2177, + "charLength": 19, + "snippet": { + "text": "TestSubscriberCount" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 67, + "startColumn": 1, + "charOffset": 2092, + "charLength": 196, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestSubscriberCount:\n def test_starts_at_zero(self, bus: EventBus):\n assert bus.subscriber_count == 0" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "1c6d79998a58c210", + "equalIndicator/v1": "6354620ea19cdc4f3da85c0eb80e9bd26fd089fd0d6d781b9123aec1cdc042bf" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 186, + "startColumn": 7, + "charOffset": 6349, + "charLength": 15, + "snippet": { + "text": "TestAddCitation" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 184, + "startColumn": 1, + "charOffset": 6341, + "charLength": 116, + "snippet": { + "text": "\n\nclass TestAddCitation:\n async def test_adds_citation(self):\n from openmlr.tools.writing import _projects" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "f8883fa8120ddbff", + "equalIndicator/v1": "668c414a1232334c30c99f94ef60768166974f0dd94e4b71447ee543dff8a2a3" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_search.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 10, + "startColumn": 7, + "charOffset": 167, + "charLength": 21, + "snippet": { + "text": "TestCreateSearchTools" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 8, + "startColumn": 1, + "charOffset": 159, + "charLength": 107, + "snippet": { + "text": "\n\nclass TestCreateSearchTools:\n async def test_creates_tool(self):\n tools = create_search_tools()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "739b9158eb0f9ccb", + "equalIndicator/v1": "66fe059ae79518141d3fb2e3ff2cfa1c496a5a46224de136b16877d73551e127" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_dependencies.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 24, + "startColumn": 7, + "charOffset": 643, + "charLength": 18, + "snippet": { + "text": "TestGetCurrentUser" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 22, + "startColumn": 1, + "charOffset": 635, + "charLength": 157, + "snippet": { + "text": "\n\nclass TestGetCurrentUser:\n async def test_valid_token_returns_user(self, auth_client: AsyncClient):\n resp = await auth_client.get(\"/api/auth/me\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "88737266818fbbb6", + "equalIndicator/v1": "69a9f771bcc9114c055b620eb22799546b83c06e8815d88af56c94a1d496ebdf" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_routes_settings.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 132, + "startColumn": 7, + "charOffset": 4888, + "charLength": 18, + "snippet": { + "text": "TestConfigEndpoint" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 130, + "startColumn": 1, + "charOffset": 4880, + "charLength": 130, + "snippet": { + "text": "\n\nclass TestConfigEndpoint:\n async def test_save_config(self, auth_client: AsyncClient):\n resp = await auth_client.post(" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4e5bb7709711e120", + "equalIndicator/v1": "6cf1d8a283c42ffb55140a4311f0dac7b4e64bbff0733ac65fef07879c6755d1" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_context.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 29, + "startColumn": 7, + "charOffset": 801, + "charLength": 18, + "snippet": { + "text": "TestEstimateTokens" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 27, + "startColumn": 1, + "charOffset": 716, + "charLength": 176, + "snippet": { + "text": "# ── estimate_tokens ────────────────────────────────────────────────────────\n\nclass TestEstimateTokens:\n def test_returns_roughly_len_over_4(self):\n text = \"a\" * 100" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "d24e54ca73416e2f", + "equalIndicator/v1": "6f262792bf54aafbd4adc6057765072429cb48719d7ad7644959faaafbb65f69" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 68, + "startColumn": 7, + "charOffset": 1929, + "charLength": 22, + "snippet": { + "text": "TestConversationCreate" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 66, + "startColumn": 1, + "charOffset": 1921, + "charLength": 93, + "snippet": { + "text": "\n\nclass TestConversationCreate:\n def test_defaults(self):\n c = ConversationCreate()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "842524d41546fbc5", + "equalIndicator/v1": "6fabb227b29f95059f4fd3f04571a7c7819003b22ccd01bda0cc4b0578bf3ada" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 151, + "startColumn": 7, + "charOffset": 5320, + "charLength": 11, + "snippet": { + "text": "TestCompact" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 149, + "startColumn": 1, + "charOffset": 5251, + "charLength": 248, + "snippet": { + "text": "# ── Compaction ─────────────────────────────────────────────\n\nclass TestCompact:\n async def test_compact_calls_context_manager(self, mock_session):\n mock_session.context_manager.compact = AsyncMock(return_value=\"Summary of conversation\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "5844f70f62e0282f", + "equalIndicator/v1": "7549a697526aacbb7ffb49032dfde1403a62f54eab5d637a172be956b3dfd111" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models_orm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 154, + "startColumn": 7, + "charOffset": 4936, + "charLength": 24, + "snippet": { + "text": "TestConversationResource" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 152, + "startColumn": 1, + "charOffset": 4928, + "charLength": 139, + "snippet": { + "text": "\n\nclass TestConversationResource:\n @pytest_asyncio.fixture(autouse=True)\n async def _conv(self, db_session: AsyncSession, test_user):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ba373ea329a489e8", + "equalIndicator/v1": "7ae051d2505e41975d02b741dfb79fab99fa83082bf19cbc98486cbc11a42d17" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_redis_pubsub.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 117, + "startColumn": 7, + "charOffset": 4272, + "charLength": 18, + "snippet": { + "text": "TestClearInterrupt" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 115, + "startColumn": 1, + "charOffset": 4244, + "charLength": 151, + "snippet": { + "text": "\n@pytest.mark.asyncio\nclass TestClearInterrupt:\n async def test_deletes_key(self):\n from openmlr.services.redis_pubsub import clear_interrupt" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "54d43644e8cb5c17", + "equalIndicator/v1": "7af638a84503589ec81bdbf83b0237abc392015ec631e24d9c24882b6d482abf" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_local.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 145, + "startColumn": 7, + "charOffset": 5027, + "charLength": 15, + "snippet": { + "text": "TestHandleWrite" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 143, + "startColumn": 1, + "charOffset": 4999, + "charLength": 141, + "snippet": { + "text": "\n@pytest.mark.asyncio\nclass TestHandleWrite:\n async def test_writes_file(self, monkeypatch, tmp_path):\n monkeypatch.chdir(tmp_path)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "681705e5408f93d7", + "equalIndicator/v1": "7af8d809c06c518742feb1ccfed2ac46bf68db152173d100b8f2995f803af42b" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_local.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 105, + "startColumn": 7, + "charOffset": 3523, + "charLength": 14, + "snippet": { + "text": "TestHandleRead" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 103, + "startColumn": 1, + "charOffset": 3495, + "charLength": 157, + "snippet": { + "text": "\n@pytest.mark.asyncio\nclass TestHandleRead:\n async def test_reads_file_with_line_numbers(self, monkeypatch, tmp_path):\n monkeypatch.chdir(tmp_path)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "19281328efac15ad", + "equalIndicator/v1": "7e0c0253560f0e3f0631dab620c3774026bbed3be8c7bf705e00af92c5c7591d" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_prompts.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 8, + "startColumn": 7, + "charOffset": 160, + "charLength": 21, + "snippet": { + "text": "TestBuildSystemPrompt" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 6, + "startColumn": 1, + "charOffset": 152, + "charLength": 87, + "snippet": { + "text": "\n\nclass TestBuildSystemPrompt:\n def test_renders_with_tools(self):\n tools = [" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "23a426bb559e7763", + "equalIndicator/v1": "7ec33dd12292b571020513873a4c0f1cf794159fb71f96cc8ba5f9960af96712" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_doom_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 28, + "startColumn": 7, + "charOffset": 745, + "charLength": 15, + "snippet": { + "text": "TestNoDetection" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 26, + "startColumn": 1, + "charOffset": 660, + "charLength": 193, + "snippet": { + "text": "# ── Edge cases / no detection ──────────────────────────────────────────────\n\nclass TestNoDetection:\n def test_returns_none_for_empty_list(self):\n assert detect_doom_loop([]) is None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "6e5a65ce8368445e", + "equalIndicator/v1": "7efdfdaa0877118b3863bb03e1b59c411df06be3e62b5aee55cb32bb5c65ac38" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_compute.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 279, + "startColumn": 7, + "charOffset": 10717, + "charLength": 18, + "snippet": { + "text": "TestComputeManager" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 277, + "startColumn": 1, + "charOffset": 10632, + "charLength": 204, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestComputeManager:\n def test_validate_ssh_missing_host(self, key_manager):\n cm = ComputeManager(key_manager)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "598960df70094bf3", + "equalIndicator/v1": "80821a7e327a8256fca7c16d5e40dc689bad397ffd84fdb70f84fd366f7ca9ea" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tool_registry.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 73, + "startColumn": 7, + "charOffset": 1604, + "charLength": 20, + "snippet": { + "text": "TestToolRegistration" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 71, + "startColumn": 1, + "charOffset": 1596, + "charLength": 127, + "snippet": { + "text": "\n\nclass TestToolRegistration:\n async def test_register_single(self, router, dummy_tool):\n router.register(dummy_tool)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "61ebad463cc14aa6", + "equalIndicator/v1": "812dab98e0c40ab107e415c073df23e450020909bf283b4e7b7bcbb19b94585f" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 10, + "startColumn": 7, + "charOffset": 213, + "charLength": 8, + "snippet": { + "text": "ToolCall" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 8, + "startColumn": 1, + "charOffset": 195, + "charLength": 83, + "snippet": { + "text": "\n@dataclass\nclass ToolCall:\n \"\"\"A tool call requested by the LLM.\"\"\"\n id: str" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a8204d8c3f8d843f", + "equalIndicator/v1": "81d6aa2b581f385dbfb02b565756d4219c02a828a2dcead921f1caf609fb077e" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_db_operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 257, + "startColumn": 7, + "charOffset": 12452, + "charLength": 22, + "snippet": { + "text": "TestResourceOperations" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 255, + "startColumn": 1, + "charOffset": 12444, + "charLength": 137, + "snippet": { + "text": "\n\nclass TestResourceOperations:\n @pytest_asyncio.fixture(autouse=True)\n async def _conv(self, db_session: AsyncSession, test_user):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "136d14b8d3898251", + "equalIndicator/v1": "824394a48b55b5ad55d609ed943e75139e87537fed0ede28f1b6bb31d0469fef" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 86, + "startColumn": 7, + "charOffset": 2640, + "charLength": 19, + "snippet": { + "text": "TestBudgetFunctions" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 84, + "startColumn": 1, + "charOffset": 2632, + "charLength": 119, + "snippet": { + "text": "\n\nclass TestBudgetFunctions:\n async def test_check_budget_allows_first_call(self):\n ok, msg = _check_budget()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "f37ea4ae8741e176", + "equalIndicator/v1": "843fb2950e3d46639d679ed429e651f18bb7c3d24b6fde10ab2eddbd57a9e44f" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_config.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 12, + "startColumn": 7, + "charOffset": 402, + "charLength": 23, + "snippet": { + "text": "TestAgentConfigDefaults" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 10, + "startColumn": 1, + "charOffset": 317, + "charLength": 182, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestAgentConfigDefaults:\n def test_model_name_default_empty(self):\n cfg = AgentConfig()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "80540ed5ae7d3d1f", + "equalIndicator/v1": "84655aea434dcf4fe80257c0bfe8b1a0b5ace719a473e9368c2617e62838040a" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 139, + "startColumn": 7, + "charOffset": 4952, + "charLength": 8, + "snippet": { + "text": "TestUndo" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 137, + "startColumn": 1, + "charOffset": 4883, + "charLength": 214, + "snippet": { + "text": "# ── Undo ───────────────────────────────────────────────────\n\nclass TestUndo:\n async def test_undo_calls_context_manager(self, mock_session):\n mock_session.context_manager.undo_last_turn.return_value = 3" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4f2f7a58a3b307e0", + "equalIndicator/v1": "84a7a494c68cb10bf16e433441dff379dcb761eba7dd1b93b1766e99df1a0992" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_compute.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 505, + "startColumn": 7, + "charOffset": 19163, + "charLength": 13, + "snippet": { + "text": "TestKeyRoutes" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 503, + "startColumn": 1, + "charOffset": 19078, + "charLength": 204, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestKeyRoutes:\n async def test_list_keys_empty(self, auth_client):\n resp = await auth_client.get(\"/api/keys\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "065854e5e5945636", + "equalIndicator/v1": "856e6f07f9c34629dce0bf51f4e135549b77d704eba61915cc7e7d46688c85f3" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_celery_app.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 6, + "startColumn": 7, + "charOffset": 77, + "charLength": 13, + "snippet": { + "text": "TestCeleryApp" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 4, + "startColumn": 1, + "charOffset": 69, + "charLength": 111, + "snippet": { + "text": "\n\nclass TestCeleryApp:\n def test_is_celery_instance(self):\n from openmlr.celery_app import celery_app" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ac4d84c95b18d39b", + "equalIndicator/v1": "85777d1b2686ee41a99ce9deff46605b8b838167b4cbcb77eb52ff5d7e6a2daa" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_compute.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 560, + "startColumn": 7, + "charOffset": 21308, + "charLength": 21, + "snippet": { + "text": "TestComputeNodeRoutes" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 558, + "startColumn": 1, + "charOffset": 21300, + "charLength": 139, + "snippet": { + "text": "\n\nclass TestComputeNodeRoutes:\n async def test_list_empty(self, auth_client):\n resp = await auth_client.get(\"/api/compute/nodes\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "fbf6a2acc3ab93d7", + "equalIndicator/v1": "862930e7f8d00ad4afe1345202e4a1587cbfb6d3b12897fb21119545de54a684" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_db_engine.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 28, + "startColumn": 7, + "charOffset": 746, + "charLength": 20, + "snippet": { + "text": "TestGetWorkerSession" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 26, + "startColumn": 1, + "charOffset": 718, + "charLength": 153, + "snippet": { + "text": "\n@pytest.mark.asyncio\nclass TestGetWorkerSession:\n async def test_returns_sessionmaker(self):\n from openmlr.db.engine import get_worker_session" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "8b3579d4c22a1d1a", + "equalIndicator/v1": "86391a3cf4d2639dd9bf3f32f9910ae1b0aded0d3a1b24ec617004e845da9bf2" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models_orm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 292, + "startColumn": 7, + "charOffset": 9547, + "charLength": 17, + "snippet": { + "text": "TestSandboxConfig" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 290, + "startColumn": 1, + "charOffset": 9539, + "charLength": 135, + "snippet": { + "text": "\n\nclass TestSandboxConfig:\n async def test_create_config(self, db_session: AsyncSession, test_user):\n config = SandboxConfig(" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "46fa7678ba033db0", + "equalIndicator/v1": "868dd1a15ce81ec7e6d27d4f536eb140d4424695f82b91984f2d6dcf5a0608be" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_db_operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 335, + "startColumn": 7, + "charOffset": 15979, + "charLength": 22, + "snippet": { + "text": "TestAgentJobOperations" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 333, + "startColumn": 1, + "charOffset": 15971, + "charLength": 137, + "snippet": { + "text": "\n\nclass TestAgentJobOperations:\n @pytest_asyncio.fixture(autouse=True)\n async def _conv(self, db_session: AsyncSession, test_user):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "b63c229cb405d88a", + "equalIndicator/v1": "8a36d09a3a50523ca381ba7bec6743f0935dc0cda26af5c2eb1e6613df6406e3" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 66, + "startColumn": 7, + "charOffset": 1538, + "charLength": 9, + "snippet": { + "text": "LLMResult" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 64, + "startColumn": 1, + "charOffset": 1520, + "charLength": 78, + "snippet": { + "text": "\n@dataclass\nclass LLMResult:\n \"\"\"Result of an LLM call.\"\"\"\n content: str" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "e4f952926de667a2", + "equalIndicator/v1": "8a5fc36f1a4b34d12c0805cf9e7e99373af9b66579aef549f354bbf1c6286ee1" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_compute.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 48, + "startColumn": 7, + "charOffset": 1389, + "charLength": 14, + "snippet": { + "text": "TestKeyManager" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 46, + "startColumn": 1, + "charOffset": 1304, + "charLength": 201, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestKeyManager:\n def test_init_creates_dir(self, tmp_keys_dir, key_manager):\n assert tmp_keys_dir.exists()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4ab4d5aafe7c2ec4", + "equalIndicator/v1": "8aed7cae54fdac61ac371b57265a6216a9d3b8a1ea58c43f6057a84b459dcc41" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 203, + "startColumn": 7, + "charOffset": 7513, + "charLength": 16, + "snippet": { + "text": "TestRunAgentTurn" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 201, + "startColumn": 1, + "charOffset": 7505, + "charLength": 169, + "snippet": { + "text": "\n\nclass TestRunAgentTurn:\n async def test_delegates_to_run_agent(self, mock_session, mock_router):\n mock_session.context_manager.get_messages.return_value = []" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "72498b3e44d92060", + "equalIndicator/v1": "8b6e3c3835d2e8f678bf8f14634620257fc42150d5bb6ec80fac47c7faed016d" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_context.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 219, + "startColumn": 7, + "charOffset": 8534, + "charLength": 9, + "snippet": { + "text": "TestClear" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 217, + "startColumn": 1, + "charOffset": 8449, + "charLength": 183, + "snippet": { + "text": "# ── ContextManager.clear ───────────────────────────────────────────────────\n\nclass TestClear:\n def test_empties_messages(self):\n cm = ContextManager(config=_make_config())" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "5b4f459a27f515b6", + "equalIndicator/v1": "8cee59bace8c1fd371f09f4366dddab0c4cceab4fb5fcb2f86f41b184dc17248" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 127, + "startColumn": 7, + "charOffset": 4234, + "charLength": 10, + "snippet": { + "text": "TestOpType" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 125, + "startColumn": 1, + "charOffset": 4226, + "charLength": 100, + "snippet": { + "text": "\n\nclass TestOpType:\n def test_enum_values(self):\n assert OpType.USER_INPUT == \"user_input\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "61727fcf7c6881a7", + "equalIndicator/v1": "8ec7310b8ea95e9af821e8ee25d4e984e7a19448b97fdce9d8f5c71a955135d5" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_compute.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 463, + "startColumn": 7, + "charOffset": 17476, + "charLength": 24, + "snippet": { + "text": "TestPlanModeComputeTools" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 461, + "startColumn": 1, + "charOffset": 17391, + "charLength": 226, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestPlanModeComputeTools:\n def test_compute_list_allowed(self):\n assert \"compute_list\" in MODE_TOOL_RESTRICTIONS[\"plan\"][\"allowed\"]" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "81b468fa220c7e8b", + "equalIndicator/v1": "8f328dde1e4e3aa1283561e8aa207c25307fbb252f71f64aa79dcfbb80d7bdf6" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/session.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 14, + "startColumn": 7, + "charOffset": 286, + "charLength": 7, + "snippet": { + "text": "Session" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 12, + "startColumn": 1, + "charOffset": 268, + "charLength": 86, + "snippet": { + "text": "\n@dataclass\nclass Session:\n \"\"\"Holds all state for a single agent conversation.\"\"\"\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "e851eb0a5f38ed67", + "equalIndicator/v1": "8f862ac9e19966761d368395e7099e173d73faa7e22c643b03a5bd38e23d39fa" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_db_engine.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 37, + "startColumn": 7, + "charOffset": 1055, + "charLength": 9, + "snippet": { + "text": "TestGetDB" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 35, + "startColumn": 1, + "charOffset": 1027, + "charLength": 124, + "snippet": { + "text": "\n@pytest.mark.asyncio\nclass TestGetDB:\n async def test_yields_session(self):\n from openmlr.db.engine import get_db" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "26240ba51abe7a6b", + "equalIndicator/v1": "91426ec089fccd37a831e6c39fa4f211fec470fe48dc46953c574dcf9925c729" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_session.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 30, + "startColumn": 7, + "charOffset": 793, + "charLength": 8, + "snippet": { + "text": "TestInit" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 28, + "startColumn": 1, + "charOffset": 708, + "charLength": 231, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestInit:\n def test_session_creates_context_manager(self, session: Session):\n assert isinstance(session.context_manager, ContextManager)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "70960e13a427414b", + "equalIndicator/v1": "9175235d66b1cbb8d5e3af5446085bc6f163fbce5840f9dd05359dba30eaa635" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_routes_settings.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 14, + "startColumn": 7, + "charOffset": 225, + "charLength": 17, + "snippet": { + "text": "TestAgentSettings" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 12, + "startColumn": 1, + "charOffset": 217, + "charLength": 155, + "snippet": { + "text": "\n\nclass TestAgentSettings:\n async def test_get_all_settings_empty(self, auth_client: AsyncClient):\n resp = await auth_client.get(\"/api/settings\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "2c2add3bb3579f7f", + "equalIndicator/v1": "9402a49a4b1f88709e71627cefe04aac85cddf397fa31535749515507485784f" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models_orm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 119, + "startColumn": 7, + "charOffset": 3810, + "charLength": 20, + "snippet": { + "text": "TestConversationTask" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 117, + "startColumn": 1, + "charOffset": 3802, + "charLength": 135, + "snippet": { + "text": "\n\nclass TestConversationTask:\n @pytest_asyncio.fixture(autouse=True)\n async def _conv(self, db_session: AsyncSession, test_user):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "2ea90676c5a036be", + "equalIndicator/v1": "96e7de79268094b19a6f536cb3c2574a4db1ec920bca901b26c72107ee6c5fb4" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_routes_settings.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 113, + "startColumn": 7, + "charOffset": 4259, + "charLength": 10, + "snippet": { + "text": "TestModels" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 111, + "startColumn": 1, + "charOffset": 4251, + "charLength": 135, + "snippet": { + "text": "\n\nclass TestModels:\n async def test_list_models(self, auth_client: AsyncClient):\n resp = await auth_client.get(\"/api/models\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "80fd57fb78af4a3a", + "equalIndicator/v1": "97348d93398764b1bb7af1128a1cbe8c4f76041608d01357eeb795ad0bbf47c4" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_db_operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 105, + "startColumn": 7, + "charOffset": 4910, + "charLength": 21, + "snippet": { + "text": "TestMessageOperations" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 103, + "startColumn": 1, + "charOffset": 4902, + "charLength": 136, + "snippet": { + "text": "\n\nclass TestMessageOperations:\n @pytest_asyncio.fixture(autouse=True)\n async def _conv(self, db_session: AsyncSession, test_user):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "0d6d0056acb2ea64", + "equalIndicator/v1": "9868180f2611a5b4addcc9937a9865ddcc50b7eaa5b4528b309938efccd6238a" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 104, + "startColumn": 7, + "charOffset": 3243, + "charLength": 12, + "snippet": { + "text": "TestGetDraft" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 102, + "startColumn": 1, + "charOffset": 3235, + "charLength": 109, + "snippet": { + "text": "\n\nclass TestGetDraft:\n async def test_no_project(self):\n from unittest.mock import AsyncMock, patch" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ae837dbc74797aaf", + "equalIndicator/v1": "98856b900de53836a5b06a57fb2ffdf4a79d3f5702a1342395c17f29f3eb6da7" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models_orm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 276, + "startColumn": 7, + "charOffset": 9026, + "charLength": 18, + "snippet": { + "text": "TestWritingProject" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 274, + "startColumn": 1, + "charOffset": 9018, + "charLength": 139, + "snippet": { + "text": "\n\nclass TestWritingProject:\n async def test_create_project(self, db_session: AsyncSession, test_user):\n project = WritingProject(" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "823d24adbad992a7", + "equalIndicator/v1": "991ff94d6dee8f6d33380e41480795115989ac6367ab0db6ee017c74d2c909e5" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models_orm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 189, + "startColumn": 7, + "charOffset": 6137, + "charLength": 12, + "snippet": { + "text": "TestAgentJob" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 187, + "startColumn": 1, + "charOffset": 6129, + "charLength": 127, + "snippet": { + "text": "\n\nclass TestAgentJob:\n @pytest_asyncio.fixture(autouse=True)\n async def _conv(self, db_session: AsyncSession, test_user):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "78f4c679cecf8637", + "equalIndicator/v1": "9adefdf2b71eee83c7cf3dea6159e8036ed0c0233f91635f513cf370aae062c7" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 25, + "startColumn": 7, + "charOffset": 450, + "charLength": 16, + "snippet": { + "text": "TestUserRegister" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 23, + "startColumn": 1, + "charOffset": 442, + "charLength": 125, + "snippet": { + "text": "\n\nclass TestUserRegister:\n def test_valid(self):\n u = UserRegister(username=\"testuser\", password=\"testpassword123\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "309845e27dd4e0eb", + "equalIndicator/v1": "9b56a3badfb95992c0fdeea5f74bffd8e05288b14f291a0901c8ffbc7aaabab0" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_mcp.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 36, + "startColumn": 7, + "charOffset": 1165, + "charLength": 20, + "snippet": { + "text": "TestProcessMCPConfig" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 34, + "startColumn": 1, + "charOffset": 1157, + "charLength": 131, + "snippet": { + "text": "\n\nclass TestProcessMCPConfig:\n async def test_simple_dict(self, monkeypatch):\n monkeypatch.setenv(\"API_KEY\", \"secret123\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4928d583fb7b351f", + "equalIndicator/v1": "9ed2ca605eace22ee418c3f5d952fa6f38d5caafbb8e7357108948d4e27c4d1a" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 49, + "startColumn": 7, + "charOffset": 2071, + "charLength": 18, + "snippet": { + "text": "TestNormalizeModel" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 47, + "startColumn": 1, + "charOffset": 2063, + "charLength": 119, + "snippet": { + "text": "\n\nclass TestNormalizeModel:\n @pytest.mark.parametrize(\"full_name,normalized\", [\n (\"openai/gpt-4o\", \"gpt-4o\")," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "647d4c27293df90e", + "equalIndicator/v1": "9f0c01ec6411c19d7b44e60232abd59b75af24b4425003ad73903d823c75efab" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tool_registry.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 152, + "startColumn": 7, + "charOffset": 4501, + "charLength": 17, + "snippet": { + "text": "TestModeFiltering" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 150, + "startColumn": 1, + "charOffset": 4493, + "charLength": 143, + "snippet": { + "text": "\n\nclass TestModeFiltering:\n async def test_default_mode_allows_all(self, router, dummy_tool, bash_tool):\n router.register(dummy_tool)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "8b67c1156bc1b2b3", + "equalIndicator/v1": "a0c6b2796cd77f702c3a0213812c331dab3c041e73ab23a215c4d89418803cd3" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 223, + "startColumn": 7, + "charOffset": 9110, + "charLength": 14, + "snippet": { + "text": "TestRetryLogic" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 221, + "startColumn": 1, + "charOffset": 9102, + "charLength": 154, + "snippet": { + "text": "\n\nclass TestRetryLogic:\n def test_is_retryable_rate_limit(self):\n assert LLMProvider._is_retryable(Exception(\"429 Rate limit exceeded\")) is True" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ab6d695e4ddda632", + "equalIndicator/v1": "a28c78272b26583ef000362f7a76ccab692a28f7202588344138e11b00befbe3" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_config.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 70, + "startColumn": 7, + "charOffset": 2388, + "charLength": 26, + "snippet": { + "text": "TestGetModelMaxTokensKnown" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 68, + "startColumn": 1, + "charOffset": 2303, + "charLength": 174, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestGetModelMaxTokensKnown:\n @pytest.mark.parametrize(\n \"model_name, expected\"," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "cb7d9ed81e3e3a8f", + "equalIndicator/v1": "a3699d7b5b8f7402a424b1b4e7c04f306b86d301d42da12ce4fa0a9500c0ffad" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 8, + "startColumn": 7, + "charOffset": 178, + "charLength": 13, + "snippet": { + "text": "TestGetApiKey" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 6, + "startColumn": 1, + "charOffset": 170, + "charLength": 120, + "snippet": { + "text": "\n\nclass TestGetApiKey:\n @pytest.mark.parametrize(\"model_name,env_var\", [\n (\"openai/gpt-4o\", \"OPENAI_API_KEY\")," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "cfd357f83ae5abd9", + "equalIndicator/v1": "a38503cdf99102e8e6d2c0bb608ee2aa07ecaff1ceccbdae41105b7ee4d049c9" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 51, + "startColumn": 7, + "charOffset": 1370, + "charLength": 14, + "snippet": { + "text": "TestSetOutline" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 49, + "startColumn": 1, + "charOffset": 1362, + "charLength": 112, + "snippet": { + "text": "\n\nclass TestSetOutline:\n async def test_no_project(self):\n from openmlr.tools.writing import _projects" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "72dd1565f0ff8d31", + "equalIndicator/v1": "a55bee3a790c82e42f78357a531b15f343e2e4f3303636285c29d402a0e623bf" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_dependencies.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 41, + "startColumn": 7, + "charOffset": 1300, + "charLength": 9, + "snippet": { + "text": "TestGetDB" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 39, + "startColumn": 1, + "charOffset": 1292, + "charLength": 132, + "snippet": { + "text": "\n\nclass TestGetDB:\n async def test_db_session_yielded(self, client: AsyncClient):\n from openmlr.dependencies import get_db" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "e724830e3dc3209e", + "equalIndicator/v1": "a6506338ecd79f3f24fee9725892f22266c18db0a5449bffc79eaf78c94a24ae" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/compute/capabilities.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 17, + "startColumn": 7, + "charOffset": 297, + "charLength": 19, + "snippet": { + "text": "ComputeCapabilities" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 15, + "startColumn": 1, + "charOffset": 279, + "charLength": 109, + "snippet": { + "text": "\n@dataclass\nclass ComputeCapabilities:\n \"\"\"Comprehensive capabilities of a compute node.\"\"\"\n # Platform" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "f7ab45f2a06ea64d", + "equalIndicator/v1": "a8010f298877cf39c4bc6c8848415e501cd14500b8481f84c50388bb1aeead5a" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_github.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 45, + "startColumn": 7, + "charOffset": 1578, + "charLength": 11, + "snippet": { + "text": "TestHeaders" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 43, + "startColumn": 1, + "charOffset": 1570, + "charLength": 84, + "snippet": { + "text": "\n\nclass TestHeaders:\n async def test_headers_accept(self):\n h = _headers()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "befe82cb0cacfb51", + "equalIndicator/v1": "a83f74ae362a4d7aaaa97ffcdb98281f193db610ad35d04100fc49bc05ccaa78" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 203, + "startColumn": 7, + "charOffset": 6865, + "charLength": 17, + "snippet": { + "text": "TestRefineSection" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 201, + "startColumn": 1, + "charOffset": 6857, + "charLength": 126, + "snippet": { + "text": "\n\nclass TestRefineSection:\n async def test_returns_feedback_mode(self):\n from openmlr.tools.writing import _projects" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "9a26e43143f7c412", + "equalIndicator/v1": "a8978f653fe89dd55ae7dd574addd31f21df67c78bfb580d3915ef5fe8102153" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_session.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 123, + "startColumn": 7, + "charOffset": 3992, + "charLength": 16, + "snippet": { + "text": "TestCancellation" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 121, + "startColumn": 1, + "charOffset": 3907, + "charLength": 211, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestCancellation:\n def test_not_cancelled_initially(self, session: Session):\n assert session.is_cancelled() is False" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "581bf6f594dc4c12", + "equalIndicator/v1": "ab3e2f7f0acd5e0fc6cf7f2f029b155bcc67a3fc4ddfeb4f2b705f65dbae0555" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 219, + "startColumn": 7, + "charOffset": 7459, + "charLength": 17, + "snippet": { + "text": "TestCountSections" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 217, + "startColumn": 1, + "charOffset": 7451, + "charLength": 96, + "snippet": { + "text": "\n\nclass TestCountSections:\n async def test_counts_with_subsections(self):\n outline = [" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "25207bf699a570a0", + "equalIndicator/v1": "acf668dad8d92ad628816ee2d56a6f1a3d559a2784919f3f128cb19ec2b01fb1" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_compute.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 680, + "startColumn": 7, + "charOffset": 26229, + "charLength": 23, + "snippet": { + "text": "TestSystemPromptCompute" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 678, + "startColumn": 1, + "charOffset": 26144, + "charLength": 219, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestSystemPromptCompute:\n def test_prompt_includes_compute_env(self):\n from openmlr.agent.prompts import build_system_prompt" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "80fcdae928326369", + "equalIndicator/v1": "adeb74eae47232862bf7bb98bf8c94b88177073e3ca9ffdb86dd19aefd06d335" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_compute.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 399, + "startColumn": 7, + "charOffset": 15203, + "charLength": 17, + "snippet": { + "text": "TestPathTraversal" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 397, + "startColumn": 1, + "charOffset": 15118, + "charLength": 189, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestPathTraversal:\n def test_valid_relative_path(self, tmp_path):\n ws = tmp_path / \"workspace\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "d76fd488a4cbd349", + "equalIndicator/v1": "b129ddd0c34d93ad8560be5f89da56a4a1f97ed3cf72d38f982b0bae62236382" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_sandbox.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 52, + "startColumn": 7, + "charOffset": 1866, + "charLength": 15, + "snippet": { + "text": "TestHandleProbe" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 50, + "startColumn": 1, + "charOffset": 1858, + "charLength": 103, + "snippet": { + "text": "\n\nclass TestHandleProbe:\n async def test_probe_without_sandbox(self):\n mgr = SandboxManager()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "0fa011731ad33a51", + "equalIndicator/v1": "b9ce76889baf4b27aa52c0bc826779c949ff41af0e3de1dfacba844a3be9a538" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_doom_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 96, + "startColumn": 7, + "charOffset": 3280, + "charLength": 22, + "snippet": { + "text": "TestRepeatingSequences" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 94, + "startColumn": 1, + "charOffset": 3195, + "charLength": 167, + "snippet": { + "text": "# ── Pattern 2: repeating sequences ─────────────────────────────────────────\n\nclass TestRepeatingSequences:\n def test_detects_AB_AB_pattern(self):\n msgs = [" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "9977592deb3e6c9a", + "equalIndicator/v1": "babf62cb4da3bd500c8c0c8d958f918c87e2fdca8bdc541211219378568a8b39" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_db_engine.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 6, + "startColumn": 7, + "charOffset": 82, + "charLength": 16, + "snippet": { + "text": "TestEngineConfig" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 4, + "startColumn": 1, + "charOffset": 74, + "charLength": 116, + "snippet": { + "text": "\n\nclass TestEngineConfig:\n def test_database_url_exists(self):\n from openmlr.db.engine import DATABASE_URL" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "9a8a7ff71372fe53", + "equalIndicator/v1": "bb9f56ad81b32437360d5585669e640719ccae27e014aaac51ca1b3f05a1f794" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_local.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 20, + "startColumn": 7, + "charOffset": 338, + "charLength": 20, + "snippet": { + "text": "TestCreateLocalTools" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 18, + "startColumn": 1, + "charOffset": 330, + "charLength": 104, + "snippet": { + "text": "\n\nclass TestCreateLocalTools:\n def test_creates_all_tools(self):\n tools = create_local_tools()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "dacccb85bec3e886", + "equalIndicator/v1": "bc5b508b2d13b7751175f101349d507ec7d9678d14526b819c204862d4cadf0f" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 38, + "startColumn": 7, + "charOffset": 891, + "charLength": 10, + "snippet": { + "text": "AgentEvent" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 36, + "startColumn": 1, + "charOffset": 859, + "charLength": 124, + "snippet": { + "text": "\n@dataclass(kw_only=True)\nclass AgentEvent:\n \"\"\"Event emitted by the agent loop for SSE streaming.\"\"\"\n event_type: str" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "57b7f27c2e4c674e", + "equalIndicator/v1": "bda9d21aac8d26bad2015a2901673650b72b15e4ac0a1be41c75dc4488f9f77c" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 101, + "startColumn": 7, + "charOffset": 4313, + "charLength": 28, + "snippet": { + "text": "TestAnthropicFormatDetection" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 99, + "startColumn": 1, + "charOffset": 4305, + "charLength": 158, + "snippet": { + "text": "\n\nclass TestAnthropicFormatDetection:\n def test_native_anthropic(self):\n assert LLMProvider._is_anthropic_model(\"anthropic/claude-sonnet-4\") is True" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "60a655ebd6fe7d1f", + "equalIndicator/v1": "beef9f58577fa57f49179232b12b7c617b471b5f4647d4e8cadcc169b7d02502" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 141, + "startColumn": 7, + "charOffset": 4696, + "charLength": 14, + "snippet": { + "text": "TestSubmission" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 139, + "startColumn": 1, + "charOffset": 4688, + "charLength": 125, + "snippet": { + "text": "\n\nclass TestSubmission:\n def test_creation(self):\n sub = Submission(op=OpType.USER_INPUT, data=\"Send this message\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "b2a7d3e6d24adf5b", + "equalIndicator/v1": "c024c04a6daaf9897a186724d7612ad9e9be495c93a7bb9bd45c8912003a2ee3" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 297, + "startColumn": 7, + "charOffset": 11442, + "charLength": 20, + "snippet": { + "text": "TestNonStreamLLMCall" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 295, + "startColumn": 1, + "charOffset": 11373, + "charLength": 204, + "snippet": { + "text": "# ── LLM Call Helpers ───────────────────────────────────────\n\nclass TestNonStreamLLMCall:\n async def test_returns_llm_result(self, mock_session):\n mock_session.is_cancelled.return_value = False" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4b695b317d9db94e", + "equalIndicator/v1": "c02987ef5dfd66d068643d488acd77532b693c2f66e438584dfd944d6286409e" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tool_registry.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 99, + "startColumn": 7, + "charOffset": 2511, + "charLength": 16, + "snippet": { + "text": "TestToolDispatch" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 97, + "startColumn": 1, + "charOffset": 2503, + "charLength": 124, + "snippet": { + "text": "\n\nclass TestToolDispatch:\n async def test_call_tool_simple(self, router, dummy_tool):\n router.register(dummy_tool)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "f4eda54214b1d93b", + "equalIndicator/v1": "c09401e0033b015d12fb8f0ce36a39fddc255a023162624a38c6ad4d8e8aa22d" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_sandbox_types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 71, + "startColumn": 7, + "charOffset": 2332, + "charLength": 16, + "snippet": { + "text": "TestLocalSandbox" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 69, + "startColumn": 1, + "charOffset": 2304, + "charLength": 145, + "snippet": { + "text": "\n@pytest.mark.asyncio\nclass TestLocalSandbox:\n async def test_create_default(self, monkeypatch, tmp_path):\n monkeypatch.chdir(tmp_path)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "96768f0cd9d80d40", + "equalIndicator/v1": "c0c7d185b709e8f8630271692c16af9bece4f2b659814c181e4c99f8b5d4c053" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models_orm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 259, + "startColumn": 7, + "charOffset": 8482, + "charLength": 18, + "snippet": { + "text": "TestResearchCorpus" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 257, + "startColumn": 1, + "charOffset": 8474, + "charLength": 137, + "snippet": { + "text": "\n\nclass TestResearchCorpus:\n async def test_create_corpus(self, db_session: AsyncSession, test_user):\n corpus = ResearchCorpus(" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a0f7de33fcffd2f7", + "equalIndicator/v1": "c48292df6a0b0d3a34fe935b42d5cf50958b48a05bb42a8b4566a82b4c8e4636" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_event_bus.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 23, + "startColumn": 7, + "charOffset": 583, + "charLength": 13, + "snippet": { + "text": "TestSubscribe" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 21, + "startColumn": 1, + "charOffset": 498, + "charLength": 190, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestSubscribe:\n def test_subscribe_returns_queue(self, bus: EventBus):\n queue = bus.subscribe()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "765fd1c6d0d568fe", + "equalIndicator/v1": "c5d3ab1eb32f21d2f58c6c495be3aa5ead0fa6714200282f1f07eb50d2023363" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_db_operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 144, + "startColumn": 7, + "charOffset": 6669, + "charLength": 22, + "snippet": { + "text": "TestSettingsOperations" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 142, + "startColumn": 1, + "charOffset": 6661, + "charLength": 216, + "snippet": { + "text": "\n\nclass TestSettingsOperations:\n async def test_set_and_get_user_setting(self, db_session: AsyncSession, test_user):\n await ops.set_user_setting(db_session, test_user.id, \"agent\", \"default_model\", \"gpt-4o\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "108d833b25273efe", + "equalIndicator/v1": "c62d1fae356a4472f4886a91dfd39e75ae76a94d17ff4e735bb6d0c7e716bf5c" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 55, + "startColumn": 7, + "charOffset": 1611, + "charLength": 16, + "snippet": { + "text": "TestToOpenAlexId" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 53, + "startColumn": 1, + "charOffset": 1603, + "charLength": 118, + "snippet": { + "text": "\n\nclass TestToOpenAlexId:\n async def test_openalex_id(self):\n assert _to_openalex_id(\"W123456\") == \"W123456\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4e45c971dcc961d6", + "equalIndicator/v1": "c8575b467c0cd668e564ba9e0c218b6ab3c6c483b6d11aed7f1ed6a395ca7ab2" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_compute.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 219, + "startColumn": 7, + "charOffset": 8635, + "charLength": 23, + "snippet": { + "text": "TestComputeCapabilities" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 217, + "startColumn": 1, + "charOffset": 8550, + "charLength": 175, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestComputeCapabilities:\n def test_defaults(self):\n caps = ComputeCapabilities()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "36bfc80788102258", + "equalIndicator/v1": "caeaa80b9358169e5fb5cd48dabe67024b1b6f57c584bc47fbf8f95bd49846d8" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_session.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 167, + "startColumn": 7, + "charOffset": 5557, + "charLength": 15, + "snippet": { + "text": "TestUpdateModel" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 165, + "startColumn": 1, + "charOffset": 5472, + "charLength": 224, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestUpdateModel:\n def test_update_model_changes_config(self, session: Session):\n assert session.config.model_name == \"test-model\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "592d0004b583fcc6", + "equalIndicator/v1": "cc79d4c2015abff5cf5cfb36cde73ad1befc8b56cec711cf7fb57054d232ec5c" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 18, + "startColumn": 7, + "charOffset": 342, + "charLength": 8, + "snippet": { + "text": "ToolSpec" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 16, + "startColumn": 1, + "charOffset": 324, + "charLength": 84, + "snippet": { + "text": "\n@dataclass\nclass ToolSpec:\n \"\"\"Specification for an agent tool.\"\"\"\n name: str" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "41133f85a590105e", + "equalIndicator/v1": "ce4132279177d68d1cef926c73eb4a2e346f69dab13853ed2d9552012dfe6b97" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/compute/capabilities.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 8, + "startColumn": 7, + "charOffset": 133, + "charLength": 7, + "snippet": { + "text": "GPUInfo" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 6, + "startColumn": 1, + "charOffset": 115, + "charLength": 81, + "snippet": { + "text": "\n@dataclass\nclass GPUInfo:\n \"\"\"Information about a GPU.\"\"\"\n model: str = \"\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ab27cbd53fee52a2", + "equalIndicator/v1": "ce4f1152c79483f4581a1432b89fba7cb68373109ff19e593bfd5bf6bd22ca43" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_mcp.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 10, + "startColumn": 7, + "charOffset": 200, + "charLength": 21, + "snippet": { + "text": "TestSubstituteEnvVars" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 8, + "startColumn": 1, + "charOffset": 192, + "charLength": 135, + "snippet": { + "text": "\n\nclass TestSubstituteEnvVars:\n async def test_replaces_var(self, monkeypatch):\n monkeypatch.setenv(\"TEST_KEY\", \"test-value\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "e3afb297b3fabdbb", + "equalIndicator/v1": "cf2a575924e622749bf6592c8ad0c4c0f3d13354ee1103b99c680fa2dc380d4b" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 162, + "startColumn": 7, + "charOffset": 5518, + "charLength": 16, + "snippet": { + "text": "TestListSections" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 160, + "startColumn": 1, + "charOffset": 5510, + "charLength": 114, + "snippet": { + "text": "\n\nclass TestListSections:\n async def test_no_project(self):\n from openmlr.tools.writing import _projects" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "3307a0faa488f7b8", + "equalIndicator/v1": "cfb09538cd3671a67e935bb556dd1760d9f02246c17b3a44a51a88f1fa56c42e" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_context.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 138, + "startColumn": 7, + "charOffset": 5122, + "charLength": 19, + "snippet": { + "text": "TestNeedsCompaction" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 136, + "startColumn": 1, + "charOffset": 5037, + "charLength": 211, + "snippet": { + "text": "# ── ContextManager.needs_compaction ────────────────────────────────────────\n\nclass TestNeedsCompaction:\n def test_returns_false_when_under_threshold(self):\n cm = ContextManager(config=_make_config())" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "0edeb87dd2bce9d5", + "equalIndicator/v1": "d07f99253164aad1b5698bad82c5d5787477419166889c138c7db0697cc0daa3" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 112, + "startColumn": 7, + "charOffset": 3379, + "charLength": 22, + "snippet": { + "text": "TestConversationDetail" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 110, + "startColumn": 1, + "charOffset": 3371, + "charLength": 98, + "snippet": { + "text": "\n\nclass TestConversationDetail:\n def test_creation(self):\n from datetime import datetime" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "48f159d432478171", + "equalIndicator/v1": "d416766e21dcf1b49353b09ea5e2be80945c696a62de33f45c40303c0650732f" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_config.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 122, + "startColumn": 7, + "charOffset": 4443, + "charLength": 18, + "snippet": { + "text": "TestEstimateTokens" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 120, + "startColumn": 1, + "charOffset": 4358, + "charLength": 210, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestEstimateTokens:\n def test_empty_string_returns_one(self):\n \"\"\"Empty string yields at least 1 (max(1, 0//4)).\"\"\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "98570d4d8f83bdfa", + "equalIndicator/v1": "d4cddb79734681884ae66142a3f157ada5e92b9936bceb665ef69389e35556f8" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 163, + "startColumn": 7, + "charOffset": 5718, + "charLength": 12, + "snippet": { + "text": "TestRunAgent" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 161, + "startColumn": 1, + "charOffset": 5649, + "charLength": 240, + "snippet": { + "text": "# ── Run Agent ──────────────────────────────────────────────\n\nclass TestRunAgent:\n async def test_runs_with_no_tool_calls(self, mock_session, mock_router):\n \"\"\"Agent processes a message, LLM returns content with no tool calls.\"\"\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "e66c463506c25e1e", + "equalIndicator/v1": "d4e88851cc3f7b7d12ff1661aacc3900d08a3838852225a03e46c20896316c2a" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 68, + "startColumn": 7, + "charOffset": 2805, + "charLength": 14, + "snippet": { + "text": "TestGetBaseUrl" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 66, + "startColumn": 1, + "charOffset": 2797, + "charLength": 146, + "snippet": { + "text": "\n\nclass TestGetBaseUrl:\n def test_local_base_url(self):\n assert LLMProvider._get_base_url(\"local/default\") == \"http://localhost:8000/v1\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "7573da4284f1e6e8", + "equalIndicator/v1": "d95930bead44756481e8e95d1d986c3f5e98c95454a1f3cf6276d5b67573dbb9" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_event_bus.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 161, + "startColumn": 7, + "charOffset": 5592, + "charLength": 27, + "snippet": { + "text": "TestAgentEventSerialization" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 159, + "startColumn": 1, + "charOffset": 5507, + "charLength": 214, + "snippet": { + "text": "# ---------------------------------------------------------------------------\n\nclass TestAgentEventSerialization:\n def test_to_sse_format(self):\n event = AgentEvent(event_type=\"done\", data={\"result\": 42})" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "795d2e4c9d1e3ba4", + "equalIndicator/v1": "d96e07baf318f93c86de520633728f3134a8478f850ac4e950c5c66510042412" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 28, + "startColumn": 7, + "charOffset": 619, + "charLength": 7, + "snippet": { + "text": "Message" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 26, + "startColumn": 1, + "charOffset": 601, + "charLength": 130, + "snippet": { + "text": "\n@dataclass\nclass Message:\n \"\"\"A message in the conversation context.\"\"\"\n role: str # \"system\", \"user\", \"assistant\", \"tool\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "24ca6f9279888db5", + "equalIndicator/v1": "df55570e8352810bf22da096d468825e6e53c00717d78d9062e1ca13de3fc056" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 21, + "startColumn": 7, + "charOffset": 375, + "charLength": 21, + "snippet": { + "text": "TestCreateWritingTool" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 19, + "startColumn": 1, + "charOffset": 367, + "charLength": 106, + "snippet": { + "text": "\n\nclass TestCreateWritingTool:\n async def test_creates_tool(self):\n tool = create_writing_tool()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "225be225ecc9cac5", + "equalIndicator/v1": "e0ebfb85388caa0a1ab6016b97ef1c90f520dee660cd3b26055c580292191e63" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models_orm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 81, + "startColumn": 7, + "charOffset": 2471, + "charLength": 16, + "snippet": { + "text": "TestMessageModel" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 79, + "startColumn": 1, + "charOffset": 2463, + "charLength": 131, + "snippet": { + "text": "\n\nclass TestMessageModel:\n @pytest_asyncio.fixture(autouse=True)\n async def _conv(self, db_session: AsyncSession, test_user):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "9153eaa8809df43a", + "equalIndicator/v1": "e2315ae451426898d6d5d63ae1896925d931cd34991ba518f4590378a37be1d7" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_context.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 170, + "startColumn": 7, + "charOffset": 6391, + "charLength": 16, + "snippet": { + "text": "TestUndoLastTurn" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 168, + "startColumn": 1, + "charOffset": 6306, + "charLength": 209, + "snippet": { + "text": "# ── ContextManager.undo_last_turn ──────────────────────────────────────────\n\nclass TestUndoLastTurn:\n def test_removes_assistant_and_user_messages(self):\n cm = ContextManager(config=_make_config())" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ec130f5dfbc19713", + "equalIndicator/v1": "e379cae42dd0a787659bb464b8e760af6745768d294f8de9fa4bdfa8f0381f07" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 188, + "startColumn": 7, + "charOffset": 7856, + "charLength": 23, + "snippet": { + "text": "TestToAnthropicMessages" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 186, + "startColumn": 1, + "charOffset": 7848, + "charLength": 97, + "snippet": { + "text": "\n\nclass TestToAnthropicMessages:\n def test_separates_system_prompt(self):\n messages = [" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "2c34718393be9a60", + "equalIndicator/v1": "e8a1c31f1f8c27ec16cbaa49feb21d19526de1a25355ee34924c0ff4cd390ee6" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_auth.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 26, + "startColumn": 7, + "charOffset": 524, + "charLength": 16, + "snippet": { + "text": "TestHashPassword" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 24, + "startColumn": 1, + "charOffset": 439, + "charLength": 192, + "snippet": { + "text": "# ── hash_password ──────────────────────────────────────────────────────────\n\nclass TestHashPassword:\n def test_returns_valid_bcrypt_hash(self):\n hashed = hash_password(\"my_secret\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "6649e044231d5cde", + "equalIndicator/v1": "e8f18466796d1527801c4f427c0c6069885f84a20bb5a3421c6cfad74042d40b" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/sandbox/interface.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 10, + "startColumn": 7, + "charOffset": 195, + "charLength": 15, + "snippet": { + "text": "ExecutionResult" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 8, + "startColumn": 1, + "charOffset": 177, + "charLength": 91, + "snippet": { + "text": "\n@dataclass\nclass ExecutionResult:\n \"\"\"Result of a command execution.\"\"\"\n output: str" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "73ac2f2c2dd2a42f", + "equalIndicator/v1": "ea9e2ca3fdfa355ef17d1421bad005bc7ce3ec5da79238bb8ee1fa0379d115db" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_auth.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 58, + "startColumn": 7, + "charOffset": 1709, + "charLength": 21, + "snippet": { + "text": "TestCreateAccessToken" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 56, + "startColumn": 1, + "charOffset": 1624, + "charLength": 207, + "snippet": { + "text": "# ── create_access_token ────────────────────────────────────────────────────\n\nclass TestCreateAccessToken:\n def test_returns_string(self):\n token = create_access_token(user_id=1, username=\"alice\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4da4554a6593e6c1", + "equalIndicator/v1": "eb670aa19704eb857162315d45135176ee710eb6555a2fa431b34c363e2d9274" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 188, + "startColumn": 7, + "charOffset": 5661, + "charLength": 22, + "snippet": { + "text": "TestAgentEventPydantic" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 186, + "startColumn": 1, + "charOffset": 5653, + "charLength": 122, + "snippet": { + "text": "\n\nclass TestAgentEventPydantic:\n def test_valid(self):\n e = AgentEvent(event_type=\"status\", data={\"key\": \"val\"})" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "9075cf4bc19b9c37", + "equalIndicator/v1": "ec1b269ffbe7362f0a1c6942fed6f424be42dc2176cc53985be269421534a9ba" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_redis_pubsub.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 129, + "startColumn": 7, + "charOffset": 4641, + "charLength": 18, + "snippet": { + "text": "TestWaitForAnswers" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 127, + "startColumn": 1, + "charOffset": 4613, + "charLength": 165, + "snippet": { + "text": "\n@pytest.mark.asyncio\nclass TestWaitForAnswers:\n async def test_returns_answers_when_set(self):\n from openmlr.services.redis_pubsub import wait_for_answers" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "9e136db8b11d5c72", + "equalIndicator/v1": "ed1b43feb8965e204de29517554cef4e288db7fb051d870c6d857682d9eab349" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_context.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 85, + "startColumn": 7, + "charOffset": 2781, + "charLength": 15, + "snippet": { + "text": "TestGetMessages" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 83, + "startColumn": 1, + "charOffset": 2696, + "charLength": 198, + "snippet": { + "text": "# ── ContextManager.get_messages ────────────────────────────────────────────\n\nclass TestGetMessages:\n def test_returns_messages_in_order(self):\n cm = ContextManager(config=_make_config())" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "707d9712b32165f6", + "equalIndicator/v1": "f092d797a8604c40e9380cef1f273828f1d52bf30c5ae48b242fc59c56a484ef" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 324, + "startColumn": 7, + "charOffset": 12456, + "charLength": 17, + "snippet": { + "text": "TestStreamLLMCall" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 322, + "startColumn": 1, + "charOffset": 12448, + "charLength": 152, + "snippet": { + "text": "\n\nclass TestStreamLLMCall:\n async def test_returns_llm_result_from_chunks(self, mock_session):\n mock_session.is_cancelled.return_value = False" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "aabcaea4b70b5177", + "equalIndicator/v1": "f68ba8325f19a2511544f2d798c548960a11bf4d71c4792a2b7cc0ef0144580b" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_job_manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 18, + "startColumn": 7, + "charOffset": 484, + "charLength": 14, + "snippet": { + "text": "TestJobManager" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 16, + "startColumn": 1, + "charOffset": 476, + "charLength": 107, + "snippet": { + "text": "\n\nclass TestJobManager:\n async def test_get_job_manager_singleton(self):\n jm1 = get_job_manager()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "1b2c9ea8d931a413", + "equalIndicator/v1": "f87a7bc191cf361ff4a1040c1aca144d4f8facdf10f8c99c5d2e5c82f09d9e4b" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyClassHasNoInitInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Class has no __init__ method", + "markdown": "Class has no __init__ method" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 130, + "startColumn": 7, + "charOffset": 5659, + "charLength": 23, + "snippet": { + "text": "TestToolParamConversion" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 128, + "startColumn": 1, + "charOffset": 5651, + "charLength": 135, + "snippet": { + "text": "\n\nclass TestToolParamConversion:\n def test_openai_tool_param_none(self):\n assert LLMProvider._openai_tool_param(None) is None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "f46727b056b66037", + "equalIndicator/v1": "f8f1e9d1292ee40ab9c705a8c4451f98f187bf83caacaec06583af61645c9e28" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyInconsistentReturnsInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Missing return statement on some paths", + "markdown": "Missing return statement on some paths" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/plan.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 245, + "startColumn": 5, + "charOffset": 11025, + "charLength": 35, + "snippet": { + "text": "async with session_factory() as db:" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 243, + "startColumn": 1, + "charOffset": 10917, + "charLength": 260, + "snippet": { + "text": " \"\"\"Retrieve a stored report by ID. Used by the API.\"\"\"\n session_factory = _get_session_factory()\n async with session_factory() as db:\n resource = await ops.get_resource_by_id(db, report_id)\n return resource.content if resource else None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "8658eac78eaa5137", + "equalIndicator/v1": "decc8ef111e946f2051918663dcb62419dc60bc7efdabd7699fc3a26e96338d3" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "hasFixes": true, + "tags": ["Python"] + } + }, + { + "ruleId": "PyListCreationInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Multi-step list initialization can be replaced with a list literal", + "markdown": "Multi-step list initialization can be replaced with a list literal" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/compute_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 91, + "startColumn": 9, + "charOffset": 2910, + "charLength": 42, + "snippet": { + "text": "lines = [f\"## {node.name} Capabilities\\n\"]" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 89, + "startColumn": 1, + "charOffset": 2875, + "charLength": 199, + "snippet": { + "text": "\n # Format response\n lines = [f\"## {node.name} Capabilities\\n\"]\n lines.append(f\"Platform: {caps.platform}\")\n lines.append(f\"CPU: {caps.cpu_cores} cores ({caps.cpu_arch})\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "dede0ffae8de41c1", + "equalIndicator/v1": "50acaf8ed08817adda4ff8508a1e894bba662ea570745a97436584b4b6b07e6c" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "hasFixes": true, + "tags": ["Python"] + } + }, + { + "ruleId": "PyListCreationInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Multi-step list initialization can be replaced with a list literal", + "markdown": "Multi-step list initialization can be replaced with a list literal" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/compute_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 227, + "startColumn": 5, + "charOffset": 7707, + "charLength": 49, + "snippet": { + "text": "lines = [f\"## Recommended Compute for: {task}\\n\"]" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 225, + "startColumn": 1, + "charOffset": 7681, + "charLength": 203, + "snippet": { + "text": " best = scores[0]\n\n lines = [f\"## Recommended Compute for: {task}\\n\"]\n lines.append(f\"**Best choice: {best['node'].name}** ({best['node'].type})\")\n lines.append(f\"Score: {best['score']:.1f}\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "93a6c1a4bd96a83f", + "equalIndicator/v1": "70c98afaf23eea85f54b7536535fca22d61b554f35d9a8a386291f6db03a37e7" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "hasFixes": true, + "tags": ["Python"] + } + }, + { + "ruleId": "PyMethodMayBeStaticInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Method 'get_job_status' may be 'static'", + "markdown": "Method `get_job_status` may be 'static'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/services/job_manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 73, + "startColumn": 15, + "charOffset": 2018, + "charLength": 14, + "snippet": { + "text": "get_job_status" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 71, + "startColumn": 1, + "charOffset": 1984, + "charLength": 89, + "snippet": { + "text": " return job\n\n async def get_job_status(\n self,\n db: AsyncSession," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "d9a354e0b762713c", + "equalIndicator/v1": "1c4e4aac04c36fdc7f4af537daf8ccae13c33aee982efd8321f8d680d58d9dfc" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyMethodMayBeStaticInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Method 'create_job' may be 'static'", + "markdown": "Method `create_job` may be 'static'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/services/job_manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 31, + "startColumn": 15, + "charOffset": 855, + "charLength": 10, + "snippet": { + "text": "create_job" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 29, + "startColumn": 1, + "charOffset": 808, + "charLength": 98, + "snippet": { + "text": " return self._celery_app\n\n async def create_job(\n self,\n db: AsyncSession," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "c86e0467577d3a22", + "equalIndicator/v1": "45a25829c577c955ff8800d1d9edf3853cdcae2db57bf8439a11521b379ed95b" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyMethodMayBeStaticInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Method '_validate_local_config' may be 'static'", + "markdown": "Method `_validate_local_config` may be 'static'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/compute/manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 35, + "startColumn": 9, + "charOffset": 1227, + "charLength": 22, + "snippet": { + "text": "_validate_local_config" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 33, + "startColumn": 1, + "charOffset": 1194, + "charLength": 160, + "snippet": { + "text": " return True, \"\"\n\n def _validate_local_config(self, config: dict) -> tuple[bool, str]:\n workdir = config.get(\"workdir\", \"\")\n if workdir:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "5a0445e5cc4d36e1", + "equalIndicator/v1": "8c80d090c64de0a33e1d22bf71e2bb6b838b90dba562b20a19b84ff7149733f3" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyMethodMayBeStaticInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Method '_validate_modal_config' may be 'static'", + "markdown": "Method `_validate_modal_config` may be 'static'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/compute/manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 44, + "startColumn": 9, + "charOffset": 1634, + "charLength": 22, + "snippet": { + "text": "_validate_modal_config" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 42, + "startColumn": 1, + "charOffset": 1601, + "charLength": 121, + "snippet": { + "text": " return True, \"\"\n\n def _validate_modal_config(self, config: dict) -> tuple[bool, str]:\n return True, \"\"\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "90c16e35e413b85b", + "equalIndicator/v1": "ae337d5baefac57857e8d4071532a6083abd34fa83a6e3c74eaf09318ad9be91" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyMethodMayBeStaticInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Method 'get_active_jobs' may be 'static'", + "markdown": "Method `get_active_jobs` may be 'static'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/services/job_manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 92, + "startColumn": 15, + "charOffset": 2653, + "charLength": 15, + "snippet": { + "text": "get_active_jobs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 90, + "startColumn": 1, + "charOffset": 2628, + "charLength": 81, + "snippet": { + "text": " }\n\n async def get_active_jobs(\n self,\n db: AsyncSession," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "eac7f87b180ea7a6", + "equalIndicator/v1": "b4691da1d1f7377320083645f877c4862310099688ddef20cc0236e0042c52b9" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyMethodMayBeStaticInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Method 'validate_key' may be 'static'", + "markdown": "Method `validate_key` may be 'static'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/keys/manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 118, + "startColumn": 9, + "charOffset": 4832, + "charLength": 12, + "snippet": { + "text": "validate_key" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 116, + "startColumn": 1, + "charOffset": 4789, + "charLength": 208, + "snippet": { + "text": " return key_path, pub_path\n\n def validate_key(self, private_key_pem: str | bytes) -> dict:\n \"\"\"Validate an SSH private key and return metadata.\"\"\"\n if isinstance(private_key_pem, str):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "d0b086bd60833888", + "equalIndicator/v1": "c4e0c04218d69230be3173e188b5addd89fc52ff3c4160506659311b06321126" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyPep8NamingInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "CamelCase variable imported as constant", + "markdown": "CamelCase variable imported as constant" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 13, + "startColumn": 33, + "charOffset": 504, + "charLength": 2, + "snippet": { + "text": "ET" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 11, + "startColumn": 1, + "charOffset": 452, + "charLength": 90, + "snippet": { + "text": "import os\nimport re\nimport xml.etree.ElementTree as ET\n\nfrom ..agent.types import ToolSpec" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "65a30a02b495dc7e", + "equalIndicator/v1": "335a1742051f6afbc8375e6f290edc0e6f7bfff954abfd2a1d6603f51f041bce" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyPep8NamingInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Variable in function should be lowercase", + "markdown": "Variable in function should be lowercase" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/settings.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 335, + "startColumn": 5, + "charOffset": 13556, + "charLength": 16, + "snippet": { + "text": "ALLOWED_ENV_KEYS" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 333, + "startColumn": 1, + "charOffset": 13428, + "charLength": 203, + "snippet": { + "text": " \"\"\"Save API keys — both to user settings and to process env.\"\"\"\n # Whitelist of allowed environment variables to set\n ALLOWED_ENV_KEYS = {\n \"OPENAI_API_KEY\",\n \"ANTHROPIC_API_KEY\"," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "05c25051286c973f", + "equalIndicator/v1": "550bd8e53c7473742a597cdbf921c4ed7606f75471a7dc52d2cd5b8a8aab61c6" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyPep8NamingInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Function name should be lowercase", + "markdown": "Function name should be lowercase" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_doom_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 109, + "startColumn": 9, + "charOffset": 3793, + "charLength": 28, + "snippet": { + "text": "test_detects_ABC_ABC_pattern" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 107, + "startColumn": 1, + "charOffset": 3746, + "charLength": 153, + "snippet": { + "text": " assert \"write_file\" in result\n\n def test_detects_ABC_ABC_pattern(self):\n msgs = [\n _assistant_with_tool(\"read\", {\"p\": \"1\"})," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "7d5d39a7ed364f2a", + "equalIndicator/v1": "63243f9e2ed0a1bb623dbb38eb3359c33763a35d2d8459318501bc92ef8f03b2" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyPep8NamingInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Function name should be lowercase", + "markdown": "Function name should be lowercase" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_doom_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 97, + "startColumn": 9, + "charOffset": 3312, + "charLength": 26, + "snippet": { + "text": "test_detects_AB_AB_pattern" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 95, + "startColumn": 1, + "charOffset": 3273, + "charLength": 154, + "snippet": { + "text": "\nclass TestRepeatingSequences:\n def test_detects_AB_AB_pattern(self):\n msgs = [\n _assistant_with_tool(\"read_file\", {\"path\": \"a.py\"})," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "00aa0fea6a39a977", + "equalIndicator/v1": "752bf7c3059c146119c29242f124fc2b9bb8b43ef4c32bdced31351009765d8a" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _handle_approval of a module", + "markdown": "Access to a protected member _handle_approval of a module" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/agent.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 563, + "startColumn": 34, + "charOffset": 18965, + "charLength": 16, + "snippet": { + "text": "_handle_approval" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 561, + "startColumn": 1, + "charOffset": 18833, + "charLength": 258, + "snippet": { + "text": " active = _sm(request).get_current_session()\n if active and active.session.pending_approval:\n from ..agent.loop import _handle_approval\n asyncio.create_task(\n _handle_approval(active.session, active.tool_router, body.approvals)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "33c610764ee060e0", + "equalIndicator/v1": "029c6d7b769490976ee974239609c2782e721af912e80e79d1ed5ce1783bd8ca" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _set_outline of a class", + "markdown": "Access to a protected member _set_outline of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 13, + "startColumn": 5, + "charOffset": 272, + "charLength": 12, + "snippet": { + "text": "_set_outline" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 11, + "startColumn": 1, + "charOffset": 227, + "charLength": 103, + "snippet": { + "text": " _list_sections,\n _refine_section,\n _set_outline,\n _write_section,\n create_writing_tool," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "8b5010d46bdccfe3", + "equalIndicator/v1": "0822e3622d855beec39290b3dc58761ed507a4b522407f370afd23d5211fb992" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _run_agent of a class", + "markdown": "Access to a protected member _run_agent of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 14, + "startColumn": 5, + "charOffset": 344, + "charLength": 10, + "snippet": { + "text": "_run_agent" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 12, + "startColumn": 1, + "charOffset": 292, + "charLength": 96, + "snippet": { + "text": " _handle_approval,\n _non_stream_llm_call,\n _run_agent,\n _stream_llm_call,\n _undo," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "79b006be71710dd8", + "equalIndicator/v1": "10be07a75986edf946609a7a9ffdb4b194423ffb33624b4674ad75da66192043" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _increment_budget of a class", + "markdown": "Access to a protected member _increment_budget of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 9, + "startColumn": 5, + "charOffset": 181, + "charLength": 17, + "snippet": { + "text": "_increment_budget" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 7, + "startColumn": 1, + "charOffset": 132, + "charLength": 115, + "snippet": { + "text": " _extract_arxiv_id,\n _get_budget_info,\n _increment_budget,\n _reconstruct_abstract,\n _to_openalex_id," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "efb34a5684343aab", + "equalIndicator/v1": "11f27f8075caf60c72e3a544ea14b5f8010d2b12a55230458e5d3737ac7677ff" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _persist_wired of a class", + "markdown": "Access to a protected member _persist_wired of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/agent.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 411, + "startColumn": 12, + "charOffset": 13589, + "charLength": 21, + "snippet": { + "text": "active._persist_wired" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 409, + "startColumn": 1, + "charOffset": 13534, + "charLength": 161, + "snippet": { + "text": "\n # Wire DB persistence once per session\n if not active._persist_wired:\n _wire_persistence(active, db, conv.id)\n active._persist_wired = True" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "250bd0a5b5afd549", + "equalIndicator/v1": "123cfce0bde6d67a9f4ab68e41957b61f99077a624b772a0edaf8546979918e4" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _worker_engine of a module", + "markdown": "Access to a protected member _worker_engine of a module" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 19, + "startColumn": 29, + "charOffset": 515, + "charLength": 14, + "snippet": { + "text": "_worker_engine" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 17, + "startColumn": 1, + "charOffset": 386, + "charLength": 217, + "snippet": { + "text": "def _get_session_factory():\n \"\"\"Get the correct async session factory for the current context.\"\"\"\n from ..db.engine import _worker_engine, async_session\n eng = _worker_engine.get(None)\n if eng is not None:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "86cd61bd6c835445", + "equalIndicator/v1": "16ed527601371f603428cee3b54119e0cca1af1c0d675fd4ac723bde544c43d5" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _handle_write of a class", + "markdown": "Access to a protected member _handle_write of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_local.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 13, + "startColumn": 5, + "charOffset": 242, + "charLength": 13, + "snippet": { + "text": "_handle_write" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 11, + "startColumn": 1, + "charOffset": 202, + "charLength": 101, + "snippet": { + "text": " _handle_edit,\n _handle_read,\n _handle_write,\n _running_in_container,\n _validate_path," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "20a5c7b2ca4f5368", + "equalIndicator/v1": "19a1b0e43cf50fe38f1f43655fd0e53a6bff2f8ff681f2500f1d67875b58fed0" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _to_openalex_id of a class", + "markdown": "Access to a protected member _to_openalex_id of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 11, + "startColumn": 5, + "charOffset": 231, + "charLength": 15, + "snippet": { + "text": "_to_openalex_id" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 9, + "startColumn": 1, + "charOffset": 177, + "charLength": 96, + "snippet": { + "text": " _increment_budget,\n _reconstruct_abstract,\n _to_openalex_id,\n create_papers_tool,\n)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "9c590097b2dba5b8", + "equalIndicator/v1": "1b60f090acd8ee957887f644f97cbb5242ca6126b2eb0ffe2f7f698629edb4a5" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _validate_sync_path of a class", + "markdown": "Access to a protected member _validate_sync_path of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_compute.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 15, + "startColumn": 41, + "charOffset": 539, + "charLength": 19, + "snippet": { + "text": "_validate_sync_path" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 13, + "startColumn": 1, + "charOffset": 405, + "charLength": 224, + "snippet": { + "text": "from openmlr.keys.manager import KeyManager\nfrom openmlr.sandbox.ssh import SSHConnectionPool\nfrom openmlr.tools.compute_tools import _validate_sync_path\nfrom openmlr.tools.registry import MODE_TOOL_RESTRICTIONS, ToolRouter\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "92d158164872626e", + "equalIndicator/v1": "1c24b6f85c8161da2c4eec09555dc93e55dc31d5d58426811a5406770130832e" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _execute_research_tool of a class", + "markdown": "Access to a protected member _execute_research_tool of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_research.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 9, + "startColumn": 5, + "charOffset": 238, + "charLength": 22, + "snippet": { + "text": "_execute_research_tool" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 7, + "startColumn": 1, + "charOffset": 177, + "charLength": 140, + "snippet": { + "text": " MAX_RESEARCH_ITERATIONS,\n RESEARCH_SYSTEM_PROMPT,\n _execute_research_tool,\n _get_research_tool_specs,\n create_research_tool," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ab8ad12774fff67a", + "equalIndicator/v1": "1c880fe639cb2aec0c7c92c4401e3e2a4ec1a2b9cf98591cdd5db38e81cca3f2" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _worker_engine of a module", + "markdown": "Access to a protected member _worker_engine of a module" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/plan.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 17, + "startColumn": 29, + "charOffset": 483, + "charLength": 14, + "snippet": { + "text": "_worker_engine" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 15, + "startColumn": 1, + "charOffset": 338, + "charLength": 274, + "snippet": { + "text": "def _get_session_factory():\n \"\"\"Get the correct async session factory for the current context (web or worker).\"\"\"\n from ..db.engine import _worker_engine, async_session\n # If we're in a Celery worker context, use the worker engine\n eng = _worker_engine.get(None)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a627df2250f57863", + "equalIndicator/v1": "1d3a810680aec8dc0bae579cbccfa667ffb43781446e872c2f7de7354a2825ca" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _handle_probe of a class", + "markdown": "Access to a protected member _handle_probe of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_sandbox.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 5, + "startColumn": 41, + "charOffset": 122, + "charLength": 13, + "snippet": { + "text": "_handle_probe" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 3, + "startColumn": 1, + "charOffset": 67, + "charLength": 124, + "snippet": { + "text": "import pytest\n\nfrom openmlr.tools.sandbox_tools import _handle_probe, create_sandbox_tools\n\npytestmark = pytest.mark.asyncio" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a2bc2860d5182245", + "equalIndicator/v1": "20fe62bde2b15b005b36d079bf6b5ea6edff7ceaef98225a4a35d17425528ae6" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _create_project of a class", + "markdown": "Access to a protected member _create_project of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 8, + "startColumn": 5, + "charOffset": 168, + "charLength": 15, + "snippet": { + "text": "_create_project" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 6, + "startColumn": 1, + "charOffset": 124, + "charLength": 102, + "snippet": { + "text": " _add_citation,\n _count_sections,\n _create_project,\n _get_draft,\n _get_draft_from_proj," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "be7c1ed2d02b8a3f", + "equalIndicator/v1": "2396454facd31d8d545506fdf9e519d91fbac112b18ee72327f71e97a748c6e5" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _stream_llm_call of a class", + "markdown": "Access to a protected member _stream_llm_call of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 15, + "startColumn": 5, + "charOffset": 360, + "charLength": 16, + "snippet": { + "text": "_stream_llm_call" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 13, + "startColumn": 1, + "charOffset": 314, + "charLength": 94, + "snippet": { + "text": " _non_stream_llm_call,\n _run_agent,\n _stream_llm_call,\n _undo,\n run_agent_turn," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "5cc969c7d22ac31f", + "equalIndicator/v1": "3210d02a03c7c6486824bf5efc024e00abfad2e98fd97ed948a56cd335598edf" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _sftp of a class", + "markdown": "Access to a protected member _sftp of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/compute_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 380, + "startColumn": 25, + "charOffset": 13744, + "charLength": 17, + "snippet": { + "text": "ssh_sandbox._sftp" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 378, + "startColumn": 1, + "charOffset": 13634, + "charLength": 223, + "snippet": { + "text": " def _do_get(rpath=rp):\n buf = io.BytesIO()\n ssh_sandbox._sftp.getfo(rpath, buf)\n buf.seek(0)\n return buf.read()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a54d853178b54a84", + "equalIndicator/v1": "3b4283b844297ca6187728e2015f7d714563e8c0409c103bc77c12f57b529d78" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "hasFixes": true, + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _write_section of a class", + "markdown": "Access to a protected member _write_section of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 14, + "startColumn": 5, + "charOffset": 290, + "charLength": 14, + "snippet": { + "text": "_write_section" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 12, + "startColumn": 1, + "charOffset": 247, + "charLength": 85, + "snippet": { + "text": " _refine_section,\n _set_outline,\n _write_section,\n create_writing_tool,\n)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "7f171bd0c8b52eae", + "equalIndicator/v1": "467ff7ed90348285c4f8d007f5a0bc135b42613dbd55f091b310d1ea04ffb9ae" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _get_budget_info of a class", + "markdown": "Access to a protected member _get_budget_info of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 8, + "startColumn": 5, + "charOffset": 159, + "charLength": 16, + "snippet": { + "text": "_get_budget_info" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 6, + "startColumn": 1, + "charOffset": 113, + "charLength": 113, + "snippet": { + "text": " _check_budget,\n _extract_arxiv_id,\n _get_budget_info,\n _increment_budget,\n _reconstruct_abstract," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "b88f0ec42374633a", + "equalIndicator/v1": "49dd99fcfa7148eed9ffdbf5af0f1c3438ea40ee0827cdbb3d18cda7a264d62a" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _sftp of a class", + "markdown": "Access to a protected member _sftp of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/compute_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 314, + "startColumn": 50, + "charOffset": 11344, + "charLength": 17, + "snippet": { + "text": "ssh_sandbox._sftp" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 312, + "startColumn": 1, + "charOffset": 11196, + "charLength": 248, + "snippet": { + "text": " content = local_path.read_bytes()\n await asyncio.to_thread(\n lambda d=dst, c=content: ssh_sandbox._sftp.putfo(io.BytesIO(c), d)\n )\n transferred += 1" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "c26fe90ae8bdb1f6", + "equalIndicator/v1": "4eb7b321385a2d3a68535a312eb9ed4efa96a57b482a52e83e18d82545dc384c" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "hasFixes": true, + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _handle_read of a class", + "markdown": "Access to a protected member _handle_read of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_local.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 12, + "startColumn": 5, + "charOffset": 224, + "charLength": 12, + "snippet": { + "text": "_handle_read" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 10, + "startColumn": 1, + "charOffset": 184, + "charLength": 99, + "snippet": { + "text": " DOCKER_IMAGE,\n _handle_edit,\n _handle_read,\n _handle_write,\n _running_in_container," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "8c7e3572984e8d5e", + "equalIndicator/v1": "595bcc0f84a4ee87efc794bfb16defeea104021ecfd096fc1ceab38f50bdd489" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _non_stream_llm_call of a class", + "markdown": "Access to a protected member _non_stream_llm_call of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 13, + "startColumn": 5, + "charOffset": 318, + "charLength": 20, + "snippet": { + "text": "_non_stream_llm_call" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 11, + "startColumn": 1, + "charOffset": 273, + "charLength": 104, + "snippet": { + "text": " _execute_tool,\n _handle_approval,\n _non_stream_llm_call,\n _run_agent,\n _stream_llm_call," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "c939c614bee5ac8c", + "equalIndicator/v1": "5a8f3f72b2c4aa6d3c886414d9d28ff5e89a78e30927433d3e9363a728215b72" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _compact_llm_call of a class", + "markdown": "Access to a protected member _compact_llm_call of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 10, + "startColumn": 5, + "charOffset": 254, + "charLength": 17, + "snippet": { + "text": "_compact_llm_call" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 8, + "startColumn": 1, + "charOffset": 203, + "charLength": 110, + "snippet": { + "text": "from openmlr.agent.loop import (\n _compact,\n _compact_llm_call,\n _execute_tool,\n _handle_approval," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "814989e39323cabb", + "equalIndicator/v1": "5cdb5ec4aaeec32ed483260abaf7a689dabd75341220be6e2f7fca9e651bf187" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _refine_section of a class", + "markdown": "Access to a protected member _refine_section of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 12, + "startColumn": 5, + "charOffset": 251, + "charLength": 15, + "snippet": { + "text": "_refine_section" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 10, + "startColumn": 1, + "charOffset": 201, + "charLength": 104, + "snippet": { + "text": " _get_draft_from_proj,\n _list_sections,\n _refine_section,\n _set_outline,\n _write_section," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "b597cecffb3410f5", + "equalIndicator/v1": "5e844d48609810cf8f7d7889bbf17a6957627a299a799ea200e8c4b9e3b569c9" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _handle_approval of a class", + "markdown": "Access to a protected member _handle_approval of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 12, + "startColumn": 5, + "charOffset": 296, + "charLength": 16, + "snippet": { + "text": "_handle_approval" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 10, + "startColumn": 1, + "charOffset": 250, + "charLength": 105, + "snippet": { + "text": " _compact_llm_call,\n _execute_tool,\n _handle_approval,\n _non_stream_llm_call,\n _run_agent," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "610be1aa44b6327b", + "equalIndicator/v1": "5eda583fef44785d75af1f726140dcfc65dfccd453f8f6a6787b9fcb05b0c8e2" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _handle_edit of a class", + "markdown": "Access to a protected member _handle_edit of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_local.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 11, + "startColumn": 5, + "charOffset": 206, + "charLength": 12, + "snippet": { + "text": "_handle_edit" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 9, + "startColumn": 1, + "charOffset": 162, + "charLength": 94, + "snippet": { + "text": " CONTAINER_PREFIX,\n DOCKER_IMAGE,\n _handle_edit,\n _handle_read,\n _handle_write," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "2a571418b7318e88", + "equalIndicator/v1": "69928671d0630c0d3e4856f4a6167793b51cf395862f6a6c0d9bb45c0bc92080" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _get_draft of a class", + "markdown": "Access to a protected member _get_draft of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 9, + "startColumn": 5, + "charOffset": 189, + "charLength": 10, + "snippet": { + "text": "_get_draft" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 7, + "startColumn": 1, + "charOffset": 143, + "charLength": 103, + "snippet": { + "text": " _count_sections,\n _create_project,\n _get_draft,\n _get_draft_from_proj,\n _list_sections," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "e9db5de7a61471e8", + "equalIndicator/v1": "6aa991d82c1b1a61666d14ad545fa261982be6d54b332b18a996e1d7f19c7f9b" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _list_sections of a class", + "markdown": "Access to a protected member _list_sections of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 11, + "startColumn": 5, + "charOffset": 231, + "charLength": 14, + "snippet": { + "text": "_list_sections" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 9, + "startColumn": 1, + "charOffset": 185, + "charLength": 100, + "snippet": { + "text": " _get_draft,\n _get_draft_from_proj,\n _list_sections,\n _refine_section,\n _set_outline," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "65a14807bfa8f8ff", + "equalIndicator/v1": "6b3d2baa932e50d5c500f91c8f7f625f7ca3505cae2f558977b7d395c9d5a4c7" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _compact of a module", + "markdown": "Access to a protected member _compact of a module" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/agent.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 583, + "startColumn": 34, + "charOffset": 19586, + "charLength": 8, + "snippet": { + "text": "_compact" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 581, + "startColumn": 1, + "charOffset": 19490, + "charLength": 167, + "snippet": { + "text": " active = _sm(request).get_current_session()\n if active:\n from ..agent.loop import _compact\n await _compact(active.session)\n return {\"ok\": True}" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "09a1559a4a2c9204", + "equalIndicator/v1": "73673f38330788c21a18fad981a0c07cdb7ea51db502fd504c7167a185ff53ca" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _reconstruct_abstract of a class", + "markdown": "Access to a protected member _reconstruct_abstract of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 10, + "startColumn": 5, + "charOffset": 204, + "charLength": 21, + "snippet": { + "text": "_reconstruct_abstract" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 8, + "startColumn": 1, + "charOffset": 155, + "charLength": 116, + "snippet": { + "text": " _get_budget_info,\n _increment_budget,\n _reconstruct_abstract,\n _to_openalex_id,\n create_papers_tool," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "cbf6b11603916181", + "equalIndicator/v1": "83b69cfa29f70c0f1f35a9f7d04a94c04c12265db3451904413c7026996155a0" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _check_budget of a class", + "markdown": "Access to a protected member _check_budget of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 6, + "startColumn": 5, + "charOffset": 117, + "charLength": 13, + "snippet": { + "text": "_check_budget" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 4, + "startColumn": 1, + "charOffset": 77, + "charLength": 99, + "snippet": { + "text": "\nfrom openmlr.tools.papers import (\n _check_budget,\n _extract_arxiv_id,\n _get_budget_info," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "e270d5174b690e96", + "equalIndicator/v1": "87a9dd1025dff19a658896923fb9e5e0df4dc2ccce915eaa935f64a54242e6fb" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _running_in_container of a class", + "markdown": "Access to a protected member _running_in_container of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_local.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 14, + "startColumn": 5, + "charOffset": 261, + "charLength": 21, + "snippet": { + "text": "_running_in_container" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 12, + "startColumn": 1, + "charOffset": 220, + "charLength": 107, + "snippet": { + "text": " _handle_read,\n _handle_write,\n _running_in_container,\n _validate_path,\n create_local_tools," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "2158d086ab0af087", + "equalIndicator/v1": "958c0c0a979d63dd5dfb6f0e882bab4e0fadf3d850480666bfcb3cdffbcd3d3f" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _count_sections of a class", + "markdown": "Access to a protected member _count_sections of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 7, + "startColumn": 5, + "charOffset": 147, + "charLength": 15, + "snippet": { + "text": "_count_sections" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 5, + "startColumn": 1, + "charOffset": 88, + "charLength": 112, + "snippet": { + "text": "from openmlr.tools.writing import (\n _add_citation,\n _count_sections,\n _create_project,\n _get_draft," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "7dab8f5f31471ade", + "equalIndicator/v1": "a9c16576b1674507d3fb5fa4570580a1856080ddcd9ab05f73cf70cbc3ed2033" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _undo of a class", + "markdown": "Access to a protected member _undo of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 16, + "startColumn": 5, + "charOffset": 382, + "charLength": 5, + "snippet": { + "text": "_undo" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 14, + "startColumn": 1, + "charOffset": 340, + "charLength": 89, + "snippet": { + "text": " _run_agent,\n _stream_llm_call,\n _undo,\n run_agent_turn,\n submission_loop," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "e1af99678fb85630", + "equalIndicator/v1": "abefde98bc26732db3ff6ff29ab8ff758bdc4bf00847bab1b96e04672d2496e8" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _sftp of a class", + "markdown": "Access to a protected member _sftp of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/compute_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 403, + "startColumn": 29, + "charOffset": 14931, + "charLength": 17, + "snippet": { + "text": "ssh_sandbox._sftp" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 401, + "startColumn": 1, + "charOffset": 14804, + "charLength": 248, + "snippet": { + "text": " def _do_get_file(rpath=rf):\n buf = io.BytesIO()\n ssh_sandbox._sftp.getfo(rpath, buf)\n buf.seek(0)\n return buf.read()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "29457a4c45815f92", + "equalIndicator/v1": "ada7329b7c4591154baa120db38fc9f6eda741bfeaaace66053ca740e2581f4c" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "hasFixes": true, + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _get_research_tool_specs of a class", + "markdown": "Access to a protected member _get_research_tool_specs of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_research.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 10, + "startColumn": 5, + "charOffset": 266, + "charLength": 24, + "snippet": { + "text": "_get_research_tool_specs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 8, + "startColumn": 1, + "charOffset": 206, + "charLength": 113, + "snippet": { + "text": " RESEARCH_SYSTEM_PROMPT,\n _execute_research_tool,\n _get_research_tool_specs,\n create_research_tool,\n)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "9a2fc58f97aa4b82", + "equalIndicator/v1": "b564eb2ca289b72eb20ce59684bc60b6e82863c139e21d393c819c1681c1d662" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _undo of a module", + "markdown": "Access to a protected member _undo of a module" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/agent.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 574, + "startColumn": 34, + "charOffset": 19320, + "charLength": 5, + "snippet": { + "text": "_undo" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 572, + "startColumn": 1, + "charOffset": 19224, + "charLength": 161, + "snippet": { + "text": " active = _sm(request).get_current_session()\n if active:\n from ..agent.loop import _undo\n await _undo(active.session)\n return {\"ok\": True}" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "fa35e132190af4e2", + "equalIndicator/v1": "ba3665c52ec2c0d88f8786e830dd94c4f6811eacf1791698454a466ec637b117" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _execute_tool of a class", + "markdown": "Access to a protected member _execute_tool of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 11, + "startColumn": 5, + "charOffset": 277, + "charLength": 13, + "snippet": { + "text": "_execute_tool" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 9, + "startColumn": 1, + "charOffset": 236, + "charLength": 103, + "snippet": { + "text": " _compact,\n _compact_llm_call,\n _execute_tool,\n _handle_approval,\n _non_stream_llm_call," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ed0aa915af94e16f", + "equalIndicator/v1": "ce769da3ee3dc1bcd57e5576c5506da606f1b9f3934dad6f1e9eb787bc15a89e" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _compact of a class", + "markdown": "Access to a protected member _compact of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 9, + "startColumn": 5, + "charOffset": 240, + "charLength": 8, + "snippet": { + "text": "_compact" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 7, + "startColumn": 1, + "charOffset": 154, + "charLength": 137, + "snippet": { + "text": "from openmlr.agent.context import ContextManager\nfrom openmlr.agent.loop import (\n _compact,\n _compact_llm_call,\n _execute_tool," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "f8ccb1233321aa55", + "equalIndicator/v1": "d0eafe9207795d694446c69609f4d2030f19a502dbdb70cbe8d2eaf1c3d2c9bc" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _headers of a class", + "markdown": "Access to a protected member _headers of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_github.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 5, + "startColumn": 34, + "charOffset": 113, + "charLength": 8, + "snippet": { + "text": "_headers" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 3, + "startColumn": 1, + "charOffset": 65, + "charLength": 111, + "snippet": { + "text": "import pytest\n\nfrom openmlr.tools.github import _headers, create_github_tools\n\npytestmark = pytest.mark.asyncio" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "cea379236fd8f01c", + "equalIndicator/v1": "d45c6492240c122c1fe86962df1a13ef55e71b7b5650170e5d69e581f98f1395" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _validate_path of a class", + "markdown": "Access to a protected member _validate_path of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_local.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 15, + "startColumn": 5, + "charOffset": 288, + "charLength": 14, + "snippet": { + "text": "_validate_path" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 13, + "startColumn": 1, + "charOffset": 238, + "charLength": 91, + "snippet": { + "text": " _handle_write,\n _running_in_container,\n _validate_path,\n create_local_tools,\n)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "75cf2380c87f9ebe", + "equalIndicator/v1": "d8449bc750f9f72e8813b662caf881092ef5f8a6fe1509282dd5d2b5434b788b" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _add_citation of a class", + "markdown": "Access to a protected member _add_citation of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 6, + "startColumn": 5, + "charOffset": 128, + "charLength": 13, + "snippet": { + "text": "_add_citation" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 4, + "startColumn": 1, + "charOffset": 87, + "charLength": 97, + "snippet": { + "text": "\nfrom openmlr.tools.writing import (\n _add_citation,\n _count_sections,\n _create_project," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "2d1f3d034a5ec9eb", + "equalIndicator/v1": "e983b3eb058fd841a5f4b7acd3b94c62086f3625be0149b3b9a5112cfaed79ce" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _extract_arxiv_id of a class", + "markdown": "Access to a protected member _extract_arxiv_id of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 7, + "startColumn": 5, + "charOffset": 136, + "charLength": 17, + "snippet": { + "text": "_extract_arxiv_id" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 5, + "startColumn": 1, + "charOffset": 78, + "charLength": 121, + "snippet": { + "text": "from openmlr.tools.papers import (\n _check_budget,\n _extract_arxiv_id,\n _get_budget_info,\n _increment_budget," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "041051766a3bb4dc", + "equalIndicator/v1": "f0d380d73cea3ab3ab653bd7cb6f3acdf2ce7bdc68fe4abac3539d0903479b43" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _get_draft_from_proj of a class", + "markdown": "Access to a protected member _get_draft_from_proj of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 10, + "startColumn": 5, + "charOffset": 205, + "charLength": 20, + "snippet": { + "text": "_get_draft_from_proj" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 8, + "startColumn": 1, + "charOffset": 164, + "charLength": 103, + "snippet": { + "text": " _create_project,\n _get_draft,\n _get_draft_from_proj,\n _list_sections,\n _refine_section," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "f6362b2076088315", + "equalIndicator/v1": "f6693a6d92cfac80205fdf5889ab021d4cc1787af5d881d89305fac991dd1db6" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyProtectedMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Access to a protected member _sftp of a class", + "markdown": "Access to a protected member _sftp of a class" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/compute_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 304, + "startColumn": 58, + "charOffset": 10815, + "charLength": 17, + "snippet": { + "text": "ssh_sandbox._sftp" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 302, + "startColumn": 1, + "charOffset": 10650, + "charLength": 281, + "snippet": { + "text": " content = src.read_bytes()\n await asyncio.to_thread(\n lambda d=dst, c=content: ssh_sandbox._sftp.putfo(io.BytesIO(c), d)\n )\n transferred += 1" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "47047d5e73bfc55f", + "equalIndicator/v1": "fc0b1295a9d33647f6d0b812e221e290aafba3cb3458225ea1c056b2532a2e50" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "hasFixes": true, + "tags": ["Python"] + } + }, + { + "ruleId": "PyShadowingNamesInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Shadows name 'db' from outer scope", + "markdown": "Shadows name 'db' from outer scope" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tasks/agent_tasks.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 142, + "startColumn": 44, + "charOffset": 4454, + "charLength": 2, + "snippet": { + "text": "db" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 140, + "startColumn": 1, + "charOffset": 4253, + "charLength": 355, + "snippet": { + "text": " await ops.add_message(db, conversation_id, \"assistant\", event.data[\"content\"])\n elif event.event_type == \"tool_output\" and event.data:\n async with worker_session() as db:\n await ops.add_message(db, conversation_id, \"tool\", event.data.get(\"output\", \"\"), {\n \"tool\": event.data.get(\"tool\")," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "95e0d53b110b5521", + "equalIndicator/v1": "0d3c8a77515041618029d7e10fa8eef965eb5eed3dc32bb87f07ba4274e12340" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyShadowingNamesInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Shadows name 'payload' from outer scope", + "markdown": "Shadows name 'payload' from outer scope" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/agent.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 53, + "startColumn": 21, + "charOffset": 1691, + "charLength": 7, + "snippet": { + "text": "payload" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 51, + "startColumn": 1, + "charOffset": 1510, + "charLength": 294, + "snippet": { + "text": " event = await asyncio.wait_for(queue.get(), timeout=25)\n event.get(\"event_type\", \"?\") if isinstance(event, dict) else \"?\"\n payload = f\"data: {json.dumps(event)}\\n\\n\"\n yield payload\n except TimeoutError:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "e87d8d5cabfdfebb", + "equalIndicator/v1": "3e41d200d03a37e1769024fce6dbc9a3b8824e587b5a6695396088a8c68b9365" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyShadowingNamesInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Shadows name 'e' from outer scope", + "markdown": "Shadows name 'e' from outer scope" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/compute.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 326, + "startColumn": 45, + "charOffset": 10196, + "charLength": 1, + "snippet": { + "text": "e" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 324, + "startColumn": 1, + "charOffset": 10086, + "charLength": 271, + "snippet": { + "text": " try:\n client.connect(**connect_kwargs)\n except paramiko.SSHException as e:\n # If host key is unknown, paramiko raises an exception with WarningPolicy\n # We need to extract the host key from the transport" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "3891351b8401a198", + "equalIndicator/v1": "4f830b001584b06ca9f8b377fee8429444dca3c5159895605d1573002d8efba4" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyShadowingNamesInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Shadows name 'e' from outer scope", + "markdown": "Shadows name 'e' from outer scope" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tasks/agent_tasks.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 165, + "startColumn": 29, + "charOffset": 5473, + "charLength": 1, + "snippet": { + "text": "e" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 163, + "startColumn": 1, + "charOffset": 5389, + "charLength": 144, + "snippet": { + "text": " except asyncio.CancelledError:\n pass\n except Exception as e:\n logger.warning(f\"Interrupt poll error: {e}\")\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "980ccb868301eaae", + "equalIndicator/v1": "5648291cfca166c756230d21024c223949de0375f0debc9151808fad55fad031" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyShadowingNamesInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Shadows name 'p' from outer scope", + "markdown": "Shadows name 'p' from outer scope" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 883, + "startColumn": 28, + "charOffset": 31967, + "charLength": 1, + "snippet": { + "text": "p" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 881, + "startColumn": 1, + "charOffset": 31910, + "charLength": 129, + "snippet": { + "text": "\n # Sort by citation count\n papers.sort(key=lambda p: p.get(\"citationCount\", 0), reverse=True)\n papers = papers[:limit]\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a5edfdd62f563b04", + "equalIndicator/v1": "76e1810bbfe78479a4b6fe3ea12c6698952af5fedb2eea1b4ffbaee56d4542ae" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyShadowingNamesInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Shadows name 'db' from outer scope", + "markdown": "Shadows name 'db' from outer scope" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tasks/agent_tasks.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 139, + "startColumn": 44, + "charOffset": 4249, + "charLength": 2, + "snippet": { + "text": "db" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 137, + "startColumn": 1, + "charOffset": 4070, + "charLength": 340, + "snippet": { + "text": " # Persist assistant messages and tool outputs\n if event.event_type == \"assistant_message\" and event.data.get(\"content\"):\n async with worker_session() as db:\n await ops.add_message(db, conversation_id, \"assistant\", event.data[\"content\"])\n elif event.event_type == \"tool_output\" and event.data:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "5a3310eb08a88625", + "equalIndicator/v1": "9c49fc0fb0d0fb91cf2ceb015a57e87baed721443ca6404fa897a82f14fdda38" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyShadowingNamesInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Shadows name 'actual_fp' from outer scope", + "markdown": "Shadows name 'actual_fp' from outer scope" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/sandbox/ssh.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 212, + "startColumn": 21, + "charOffset": 7602, + "charLength": 9, + "snippet": { + "text": "actual_fp" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 210, + "startColumn": 1, + "charOffset": 7488, + "charLength": 204, + "snippet": { + "text": " remote_key = transport.get_remote_server_key()\n if remote_key:\n actual_fp = remote_key.get_fingerprint().hex()\n\n return client, sftp, actual_fp" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a37de2f931ba8e37", + "equalIndicator/v1": "b7d7643faca98226b9b16de3dafda242938c93c831874285f603636bde2ee047" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyShadowingNamesInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Shadows name 'app' from outer scope", + "markdown": "Shadows name 'app' from outer scope" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/app.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 22, + "startColumn": 20, + "charOffset": 628, + "charLength": 3, + "snippet": { + "text": "app" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 20, + "startColumn": 1, + "charOffset": 587, + "charLength": 153, + "snippet": { + "text": "\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n \"\"\"Startup: create tables & shared state. Shutdown: teardown sessions.\"\"\"\n import logging" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "76e7878b5a6c40e8", + "equalIndicator/v1": "d87d1d5dc203783e702bbc26b15fc9358c26d2975aa8be2caa0484237850ae38" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyShadowingNamesInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Shadows name 'actual_fp' from outer scope", + "markdown": "Shadows name 'actual_fp' from outer scope" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/sandbox/ssh.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 207, + "startColumn": 13, + "charOffset": 7398, + "charLength": 9, + "snippet": { + "text": "actual_fp" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 205, + "startColumn": 1, + "charOffset": 7347, + "charLength": 140, + "snippet": { + "text": " sftp = client.open_sftp()\n\n actual_fp = None\n transport = client.get_transport()\n if transport:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "f36753ec4fc3771c", + "equalIndicator/v1": "e48cddbad1dbb501dcac8678d916fa5d10712402a014dabf36af1b0411b04ec8" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyShadowingNamesInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Shadows name 'exit_code' from outer scope", + "markdown": "Shadows name 'exit_code' from outer scope" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/sandbox/ssh.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 271, + "startColumn": 13, + "charOffset": 9921, + "charLength": 9, + "snippet": { + "text": "exit_code" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 269, + "startColumn": 1, + "charOffset": 9867, + "charLength": 158, + "snippet": { + "text": " on_chunk(data, True)\n\n exit_code = channel.recv_exit_status()\n return \"\".join(out_buf), \"\".join(err_buf), exit_code\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "d2ba4313d9e0196f", + "equalIndicator/v1": "eb1bd95d722dc2948424527a52fc9c7ca8cc835a906c40e056eb0050edddfd82" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/keys/manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 46, + "startColumn": 57, + "charOffset": 1673, + "charLength": 11, + "snippet": { + "text": "str | bytes" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 44, + "startColumn": 1, + "charOffset": 1576, + "charLength": 234, + "snippet": { + "text": " return self.keys_dir / filename\n\n def write_key(self, filename: str, private_key_pem: str | bytes) -> Path:\n \"\"\"Write a private key to disk with restrictive permissions.\"\"\"\n key_path = self.keys_dir / filename" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "67af1d5f99bed54b", + "equalIndicator/v1": "04953a3cd68293c212525b8110e3f2b5d1b8e56e6b90932f60345d856f23717a" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 919, + "startColumn": 37, + "charOffset": 33190, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 917, + "startColumn": 1, + "charOffset": 33152, + "charLength": 121, + "snippet": { + "text": "\n\ndef _extract_arxiv_id(text: str) -> str | None:\n match = re.search(r'(\\d{4}\\.\\d{4,5}(?:v\\d+)?)', text)\n if match:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "1c2065f0b61ab4de", + "equalIndicator/v1": "070e08021495e9399c8c36712e5e2e0f2e685806be778af320bfa08115960147" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/mcp.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 136, + "startColumn": 16, + "charOffset": 4543, + "charLength": 15, + "snippet": { + "text": "set[str] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 134, + "startColumn": 1, + "charOffset": 4488, + "charLength": 96, + "snippet": { + "text": " mcp_configs: dict,\n tool_router,\n blocklist: set[str] | None = None,\n) -> int:\n \"\"\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "5096ff1eaaa7dce7", + "equalIndicator/v1": "0dab9db74e0bf84e35ff8da2ca492fa885ac526c555aba12fa7f1331c0bdf78d" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/context.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 112, + "startColumn": 42, + "charOffset": 4360, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 110, + "startColumn": 1, + "charOffset": 4299, + "charLength": 165, + "snippet": { + "text": " i += 1\n\n async def compact(self, llm_call) -> str | None:\n if len(self.messages) <= self.config.untouched_messages + 3:\n return None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4f334b5580b49595", + "equalIndicator/v1": "0f768236304b348aa2f76da357a3a2ec825d0972a3071bfdc4f69f7c40de5ec3" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/registry.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 51, + "startColumn": 36, + "charOffset": 1822, + "charLength": 10, + "snippet": { + "text": "int | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 49, + "startColumn": 1, + "charOffset": 1762, + "charLength": 206, + "snippet": { + "text": " self._db = None\n\n def set_context(self, user_id: int | None = None, db=None) -> None:\n \"\"\"Set per-request context (user_id, db) for tools that need them.\"\"\"\n self._user_id = user_id" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "fdf344aef20d11bb", + "equalIndicator/v1": "10dbdc3c57b71c1063eaaa1b57834f85eb032054bb8aba096422fb870a05e3dc" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 31, + "startColumn": 42, + "charOffset": 964, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 29, + "startColumn": 1, + "charOffset": 921, + "charLength": 138, + "snippet": { + "text": "\n\nasync def _load_project(conv_id: int) -> dict | None:\n \"\"\"Load project from DB if not already cached.\"\"\"\n if conv_id in _projects:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "c30ed9bfee4ca784", + "equalIndicator/v1": "138e022a238cff0775ab319aa0454daf0ff221e5b411a8e9429fe96221ce69b5" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/sandbox/ssh.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 76, + "startColumn": 83, + "charOffset": 2566, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 74, + "startColumn": 1, + "charOffset": 2463, + "charLength": 210, + "snippet": { + "text": " return None\n\n def put(self, host: str, port: int, username: str, client, sftp, fingerprint: str | None):\n \"\"\"Cache a connection for reuse.\"\"\"\n key = self._make_key(host, port, username)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a91a41cf72a477e7", + "equalIndicator/v1": "13ff96352fc72854d59fe18c667e0ae4a8f99a7e5ca990c588427c8d4a2fc46b" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/registry.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 190, + "startColumn": 63, + "charOffset": 7330, + "charLength": 15, + "snippet": { + "text": "set[str] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 188, + "startColumn": 1, + "charOffset": 7183, + "charLength": 300, + "snippet": { + "text": " return f\"Tool '{name}' has no handler and no MCP client configured.\", False\n\n async def register_mcp_tools(self, mcp_client, blocklist: set[str] | None = None) -> int:\n \"\"\"Register tools from an MCP client. Returns count of tools registered.\"\"\"\n self._mcp_client = mcp_client" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "613171a4bfebb9a7", + "equalIndicator/v1": "1ef24bc43a5e58587d6d4221763671be0c77b28f49dd9e025697354dd0324c9d" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/db/operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 186, + "startColumn": 70, + "charOffset": 4886, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 184, + "startColumn": 1, + "charOffset": 4815, + "charLength": 204, + "snippet": { + "text": "\n\nasync def get_all_settings(db: AsyncSession, user_id: int, category: str | None = None) -> dict:\n from .models import UserSetting\n query = select(UserSetting).where(UserSetting.user_id == user_id)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "f9d19db0425c5e48", + "equalIndicator/v1": "1f773049e74f39bff98c9c1d2512fdf46a0d1a1bd265b7738be4920dfd1cb44a" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/sandbox/ssh.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 19, + "startColumn": 34, + "charOffset": 540, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 17, + "startColumn": 1, + "charOffset": 397, + "charLength": 216, + "snippet": { + "text": " def __init__(self, expected_fingerprint: str | None = None):\n self.expected = expected_fingerprint\n self.actual_fingerprint: str | None = None\n\n def missing_host_key(self, client, hostname, key):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "964bc634e2ddbcf1", + "equalIndicator/v1": "1f8d8d3071eae315038f7e530fc84130d0c301602db4d2dc49039c345b392fb6" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/db/operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 25, + "startColumn": 12, + "charOffset": 505, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 23, + "startColumn": 1, + "charOffset": 439, + "charLength": 130, + "snippet": { + "text": " user_id: int,\n title: str = \"New conversation\",\n model: str | None = None,\n mode: str = \"general\",\n) -> Conversation:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ad7ada69ce59a4c1", + "equalIndicator/v1": "23b66ddb541695929593317d45df1264589852c4167f9d0e15f6c29e5664d182" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/http_utils.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 43, + "startColumn": 21, + "charOffset": 1133, + "charLength": 15, + "snippet": { + "text": "set[int] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 41, + "startColumn": 1, + "charOffset": 1055, + "charLength": 130, + "snippet": { + "text": " base_delay: float = 1.0,\n max_delay: float = 30.0,\n retry_statuses: set[int] | None = None,\n) -> httpx.Response:\n \"\"\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "e6d28fca22504584", + "equalIndicator/v1": "281baf18f658ec891d66462bfc6b0526628269bc7563c10e43e3d37de9892ac1" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 334, + "startColumn": 51, + "charOffset": 12337, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 332, + "startColumn": 1, + "charOffset": 12285, + "charLength": 193, + "snippet": { + "text": "\n\ndef _get_draft_from_proj(proj: dict, author_info: dict | None = None) -> tuple[str, bool]:\n \"\"\"Generate the full markdown draft from a project dict.\"\"\"\n lines = [f\"# {proj['title']}\\n\"]" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "67f9ce133403988c", + "equalIndicator/v1": "28326050743aabac84724332a4ecd2c97507be561ae699c9aba9c0358fa9a319" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/http_utils.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 142, + "startColumn": 53, + "charOffset": 4919, + "charLength": 12, + "snippet": { + "text": "float | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 140, + "startColumn": 1, + "charOffset": 4865, + "charLength": 163, + "snippet": { + "text": "\n\ndef _parse_retry_after(response: httpx.Response) -> float | None:\n \"\"\"Parse Retry-After header value.\"\"\"\n retry_after = response.headers.get(\"Retry-After\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "6751672b7a71333e", + "equalIndicator/v1": "2859f1e149cf4de5e3e401f83217b33d6d41881f1025290b2ea21d600fd6bd4e" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/services/redis_pubsub.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 78, + "startColumn": 21, + "charOffset": 2437, + "charLength": 19, + "snippet": { + "text": "asyncio.Task | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 76, + "startColumn": 1, + "charOffset": 2392, + "charLength": 159, + "snippet": { + "text": "\n def __init__(self):\n self._task: asyncio.Task | None = None\n self._local_subscribers: list[asyncio.Queue] = []\n self._running = False" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "d5f6039bf49a819d", + "equalIndicator/v1": "289fd14d515ab37988e88c59e8f35ca21fbce0232d47c017eb1f9f16ff0c4551" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 938, + "startColumn": 52, + "charOffset": 33739, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 936, + "startColumn": 1, + "charOffset": 33686, + "charLength": 161, + "snippet": { + "text": "\n\ndef _reconstruct_abstract(inverted_index: dict) -> str | None:\n \"\"\"Reconstruct abstract from OpenAlex's inverted index format.\"\"\"\n if not inverted_index:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "954410d7af51e283", + "equalIndicator/v1": "2b231636febb4ab45e9f2969e601a1337bddf4b27cf2dc30e99ead9ac236859a" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 209, + "startColumn": 35, + "charOffset": 8191, + "charLength": 17, + "snippet": { + "text": "list[dict] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 207, + "startColumn": 1, + "charOffset": 8138, + "charLength": 205, + "snippet": { + "text": "\n @staticmethod\n def _openai_tool_param(tools: list[dict] | None) -> list[dict] | None:\n \"\"\"Convert tool specs to OpenAI tools param. Handles both raw and pre-wrapped.\"\"\"\n if not tools:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "acf6fd4416a7209c", + "equalIndicator/v1": "2c3eb90b87f1a98eb57a76ffcc9171cffb7ca24429e7558f401c47ad17f8562e" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/http_utils.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 37, + "startColumn": 14, + "charOffset": 954, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 35, + "startColumn": 1, + "charOffset": 884, + "charLength": 144, + "snippet": { + "text": " method: str = \"GET\",\n params: dict | None = None,\n headers: dict | None = None,\n json: dict | None = None,\n timeout: float = 30," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "b2653302baebe1f4", + "equalIndicator/v1": "2cecb1aa030d5ff4fdf8a5a50a41281d8487ef0924f83186e7dae70395dcf727" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/db/operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 626, + "startColumn": 77, + "charOffset": 17739, + "charLength": 10, + "snippet": { + "text": "int | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 624, + "startColumn": 1, + "charOffset": 17661, + "charLength": 149, + "snippet": { + "text": "\n\nasync def set_default_compute_node(db: AsyncSession, user_id: int, node_id: int | None) -> None:\n # Clear existing default\n await db.execute(" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "35baff3339f6b2c1", + "equalIndicator/v1": "2d3cef132f3d0ed8c9e7d2cd5f1eba28ec3d98054d8bc74ae19b5a41af794618" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/services/session_manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 63, + "startColumn": 16, + "charOffset": 1986, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 61, + "startColumn": 1, + "charOffset": 1922, + "charLength": 159, + "snippet": { + "text": " conversation_id: int,\n uuid: str,\n model: str | None = None,\n mode: str = \"general\",\n existing_messages: list[dict] = None," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "24e0a20777005cb7", + "equalIndicator/v1": "30c1d2aaf740d648cb937e7492673695d3fad1a64cac7ab63e2c090a99027f05" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/db/operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 285, + "startColumn": 14, + "charOffset": 7803, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 283, + "startColumn": 1, + "charOffset": 7738, + "charLength": 146, + "snippet": { + "text": " resource_type: str,\n url: str | None = None,\n content: str | None = None,\n resource_id: str | None = None,\n) -> ConversationResource:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ad5d58cbbd80f9f0", + "equalIndicator/v1": "332b9277e747883c5d47c65acd7738ad2cfea149169b37ab7c0c62611cd6620a" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 101, + "startColumn": 16, + "charOffset": 4243, + "charLength": 17, + "snippet": { + "text": "list[dict] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 99, + "startColumn": 1, + "charOffset": 4169, + "charLength": 237, + "snippet": { + "text": " messages: list[dict],\n config: AgentConfig,\n tools: list[dict] | None = None,\n ) -> AsyncGenerator[str | ToolCall | dict, None]:\n async for chunk in LLMProvider._stream_with_retry(messages, config, tools):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4894cccbb2789247", + "equalIndicator/v1": "3382549986b5a7dd5e3db920e7668f880ab0fbe1fc7145fab7a3b8d7ee02d2fb" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 63, + "startColumn": 11, + "charOffset": 1383, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 61, + "startColumn": 1, + "charOffset": 1326, + "charLength": 162, + "snippet": { + "text": "class MessageSend(BaseModel):\n message: str\n mode: str | None = None # plan, research, write — per-message mode override\n\nclass ApprovalRequest(BaseModel):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "bd6f854c2235a1cb", + "equalIndicator/v1": "3927dc9aa4087d7670706fe7ecffb7a53f61ddd7d1a70da23b00039609b940c4" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/http_utils.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 36, + "startColumn": 13, + "charOffset": 921, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 34, + "startColumn": 1, + "charOffset": 877, + "charLength": 126, + "snippet": { + "text": " *,\n method: str = \"GET\",\n params: dict | None = None,\n headers: dict | None = None,\n json: dict | None = None," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "897a37628c8d508c", + "equalIndicator/v1": "39333edec0361ad7f8a053231050b4df9b068c03f78ff116c0db82af867902a8" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 52, + "startColumn": 15, + "charOffset": 1145, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 50, + "startColumn": 1, + "charOffset": 1100, + "charLength": 89, + "snippet": { + "text": " role: str\n content: str\n metadata: dict | None = None\n created_at: datetime\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a6f9f1da78c4ce83", + "equalIndicator/v1": "3c4e4bdfa00efbe88a310ea4f4bda48e5e2a5dd3ae7593b795a74747e4c79908" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/config.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 73, + "startColumn": 30, + "charOffset": 2691, + "charLength": 11, + "snippet": { + "text": "Path | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 71, + "startColumn": 1, + "charOffset": 2660, + "charLength": 151, + "snippet": { + "text": "\n\ndef load_config(config_path: Path | None = None) -> AgentConfig:\n \"\"\"Load agent configuration with layered priority.\"\"\"\n config = AgentConfig()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "e29a2acdf7211745", + "equalIndicator/v1": "403368222754b474c45bb7275de7b21c34e640dd27e27d6688d1280b676e1aee" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 169, + "startColumn": 16, + "charOffset": 6684, + "charLength": 17, + "snippet": { + "text": "list[dict] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 167, + "startColumn": 1, + "charOffset": 6610, + "charLength": 179, + "snippet": { + "text": " messages: list[dict],\n config: AgentConfig,\n tools: list[dict] | None = None,\n ) -> AsyncGenerator[str | ToolCall | dict, None]:\n last_error = None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "c3d782aadb2c4b96", + "equalIndicator/v1": "4302b75f75e38d23c957e3d4fd8526137e5e1f00ea76a85311c45ab6f8d86f1e" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/services/session_manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 284, + "startColumn": 10, + "charOffset": 11130, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 282, + "startColumn": 1, + "charOffset": 11061, + "charLength": 155, + "snippet": { + "text": " conversation_id: int,\n messages: list[dict],\n ) -> str | None:\n active = self.sessions.get(conversation_id)\n if not active:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a45b2f355c5a64a9", + "equalIndicator/v1": "44ab4c66f41c12931542cb2299dcd708783b4c8914d681366fb38812e5de20e9" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 32, + "startColumn": 17, + "charOffset": 765, + "charLength": 21, + "snippet": { + "text": "list[ToolCall] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 30, + "startColumn": 1, + "charOffset": 677, + "charLength": 180, + "snippet": { + "text": " role: str # \"system\", \"user\", \"assistant\", \"tool\"\n content: str\n tool_calls: list[ToolCall] | None = None\n tool_call_id: str | None = None\n name: str | None = None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "8ad4f32ff62c39ba", + "equalIndicator/v1": "44bc2b1be466e17e75fc2a20cfb8aa40286f54f1c27f0d57cef892b7fa7da3b7" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/sandbox/ssh.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 17, + "startColumn": 46, + "charOffset": 442, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 15, + "startColumn": 1, + "charOffset": 315, + "charLength": 242, + "snippet": { + "text": " \"\"\"Paramiko policy that verifies host keys against expected fingerprints.\"\"\"\n\n def __init__(self, expected_fingerprint: str | None = None):\n self.expected = expected_fingerprint\n self.actual_fingerprint: str | None = None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "3346cb6ad50aca43", + "equalIndicator/v1": "4e340cb8982b43beef4d774c725c4cea52c4efbe0afecd4f8b10c25155f2f01b" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 110, + "startColumn": 10, + "charOffset": 4548, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 108, + "startColumn": 1, + "charOffset": 4480, + "charLength": 169, + "snippet": { + "text": " messages: list[dict],\n config: AgentConfig,\n ) -> str | None:\n title_prompt = (\n \"Based on the conversation, generate a short title \"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a3729aeaa0621562", + "equalIndicator/v1": "51386c005ff81a34770b40dc0f2c9bd3805a7185aa0c8d4da6826a05386fb37b" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/keys/manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 14, + "startColumn": 34, + "charOffset": 385, + "charLength": 10, + "snippet": { + "text": "str | Path" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 12, + "startColumn": 1, + "charOffset": 283, + "charLength": 257, + "snippet": { + "text": " \"\"\"Manages SSH private keys stored in a dedicated directory.\"\"\"\n\n def __init__(self, keys_dir: str | Path = None):\n self.keys_dir = Path(keys_dir) if keys_dir else Path(__file__).parent.parent.parent.parent / \".keys\"\n self._ensure_dir()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ae862a2386091c7b", + "equalIndicator/v1": "523200c00c7ecd2d0fa33fe764fabad2d523c902ae63e6d091ee38c4c12dbc27" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 92, + "startColumn": 11, + "charOffset": 2135, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 90, + "startColumn": 1, + "charOffset": 2076, + "charLength": 78, + "snippet": { + "text": "class AgentEvent(BaseModel):\n event_type: str\n data: dict | None = None\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "7f32cfad7db4ce00", + "equalIndicator/v1": "5887014e32db1e6b680744044a672f6af8a2a3311d1edbd8550961eba86ab61d" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/session.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 32, + "startColumn": 22, + "charOffset": 900, + "charLength": 10, + "snippet": { + "text": "Any | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 30, + "startColumn": 1, + "charOffset": 835, + "charLength": 107, + "snippet": { + "text": "\n # Question/answer flow (ask_user tool)\n pending_answers: Any | None = None\n\n # Sandbox reference" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "28d1682389b61193", + "equalIndicator/v1": "5cf6cad9356bb8d53818019002b866f7e8c656c1e52e270d26123c73212fb059" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/services/session_manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 47, + "startColumn": 39, + "charOffset": 1442, + "charLength": 10, + "snippet": { + "text": "int | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 45, + "startColumn": 1, + "charOffset": 1324, + "charLength": 233, + "snippet": { + "text": " self.event_bus = event_bus\n self.default_config = default_config\n self.current_conversation_id: int | None = None\n self._is_processing: bool = False\n self._message_queues: dict[int, list[str]] = {}" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "9a4fef94ffd8fdf2", + "equalIndicator/v1": "600dea56b70443c0d5bcf6c9419fbfb1428425d58895569e5d466daba34569e9" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/services/event_bus.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 72, + "startColumn": 37, + "charOffset": 2286, + "charLength": 17, + "snippet": { + "text": "AgentEvent | dict" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 70, + "startColumn": 1, + "charOffset": 2182, + "charLength": 190, + "snippet": { + "text": " logger.warning(f\"Failed to publish to Redis: {e}\")\n\n def broadcast_sync(self, event: AgentEvent | dict) -> None:\n try:\n loop = asyncio.get_running_loop()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "bf57b815d9c9c8e3", + "equalIndicator/v1": "627ea22ec5b214ce7054b260d0aecd2be7126ce93befe422c094ae92737ac2c1" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/db/operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 154, + "startColumn": 69, + "charOffset": 4025, + "charLength": 38, + "snippet": { + "text": "dict | list | str | int | float | bool" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 152, + "startColumn": 1, + "charOffset": 3928, + "charLength": 174, + "snippet": { + "text": "\nasync def set_user_setting(\n db: AsyncSession, user_id: int, category: str, key: str, value: dict | list | str | int | float | bool\n):\n from .models import UserSetting" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "64240bdad360dd31", + "equalIndicator/v1": "645b8ac3af280461be514f972f977d4601ac101a14244847bd78506982d322fc" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/db/operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 417, + "startColumn": 11, + "charOffset": 11570, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 415, + "startColumn": 1, + "charOffset": 11524, + "charLength": 107, + "snippet": { + "text": " user_id: int,\n message: str,\n mode: str | None = None,\n) -> AgentJob:\n import uuid as uuid_mod" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "5dd080c4cb8c6613", + "equalIndicator/v1": "6606160a9b27a9219ad18804a4cc1355b18977aef2e9a7f08cbc940ed7ee6397" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 232, + "startColumn": 35, + "charOffset": 8831, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 230, + "startColumn": 1, + "charOffset": 8795, + "charLength": 112, + "snippet": { + "text": "\n\ndef _get_project(conv_id: int) -> dict | None:\n \"\"\"Get project from in-memory cache.\"\"\"\n if not conv_id:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "d8ab5cf252dc9ea1", + "equalIndicator/v1": "67eee05db5fb779ba0928cdb39c1802c17dea83e2a15e6396fe0b1c7e20d4f6c" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 80, + "startColumn": 21, + "charOffset": 1914, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 78, + "startColumn": 1, + "charOffset": 1810, + "charLength": 164, + "snippet": { + "text": " github_token: str | None = None\n semantic_scholar_api_key: str | None = None\n modal_token_id: str | None = None\n modal_token_secret: str | None = None\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "2c1a69fe5107162b", + "equalIndicator/v1": "6ab1b16d36ff01548a690086aae81889f65520261634d7f4e3db3e22265e22ea" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 34, + "startColumn": 11, + "charOffset": 840, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 32, + "startColumn": 1, + "charOffset": 749, + "charLength": 110, + "snippet": { + "text": " tool_calls: list[ToolCall] | None = None\n tool_call_id: str | None = None\n name: str | None = None\n\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "770097aa70b222bd", + "equalIndicator/v1": "6dc2f95381fdf1fd9715202b201bfcfe4c2e8f6e13dc0cad57b0cc7588ff42f7" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 71, + "startColumn": 12, + "charOffset": 1664, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 69, + "startColumn": 1, + "charOffset": 1599, + "charLength": 84, + "snippet": { + "text": " tool_calls: list[ToolCall]\n finish_reason: str\n usage: dict | None = None\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "90e2066efb388365", + "equalIndicator/v1": "6e91c8dabf1013d8cb5425643721bdf17355d4a1b402ce14bbf32e17b6fdc5b5" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 981, + "startColumn": 56, + "charOffset": 35179, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 979, + "startColumn": 1, + "charOffset": 35122, + "charLength": 103, + "snippet": { + "text": "\n\ndef _find_section(sections: list[dict], query: str) -> dict | None:\n try:\n idx = int(query)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a753c58f4f11b261", + "equalIndicator/v1": "70a174a499507ce4618129aa88c6642517345ef98f3b0c54425b7a96defa25c4" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 340, + "startColumn": 60, + "charOffset": 13002, + "charLength": 17, + "snippet": { + "text": "list[dict] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 338, + "startColumn": 1, + "charOffset": 12924, + "charLength": 172, + "snippet": { + "text": "\n @staticmethod\n def _anthropic_tool_param(tools: list[dict] | None) -> list[dict] | None:\n \"\"\"Convert tool specs to Anthropic format.\"\"\"\n if not tools:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "16777912930a32c9", + "equalIndicator/v1": "7124abd1a4184880eea8464c922833e150c83336f59716ff426ff328aa087246" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 42, + "startColumn": 12, + "charOffset": 950, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 40, + "startColumn": 1, + "charOffset": 910, + "charLength": 92, + "snippet": { + "text": " uuid: str\n title: str\n model: str | None\n mode: str\n user_message_count: int" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "86b01ba34e4d3686", + "equalIndicator/v1": "71fadc1ccdbf96c7c69a3413cfaeeb648f763255d0fc77947a021decb809c2c0" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/services/session_manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 67, + "startColumn": 18, + "charOffset": 2131, + "charLength": 10, + "snippet": { + "text": "int | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 65, + "startColumn": 1, + "charOffset": 2036, + "charLength": 156, + "snippet": { + "text": " existing_messages: list[dict] = None,\n username: str = \"user\",\n user_id: int | None = None,\n db = None,\n ) -> ActiveSession:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "58caa5d5da79be99", + "equalIndicator/v1": "74d6be15952afa3737c7b22aa40dc5e305771c06d37d132620a4c51eafa66c64" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/session.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 23, + "startColumn": 22, + "charOffset": 666, + "charLength": 10, + "snippet": { + "text": "int | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 21, + "startColumn": 1, + "charOffset": 580, + "charLength": 123, + "snippet": { + "text": "\n # Conversation reference (for database operations in tools)\n conversation_id: int | None = None\n\n # Cancellation" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4cc34bad3b5350e6", + "equalIndicator/v1": "78303c0bf1da4cdff5b1396f4770d4ccc59eb7a2a48509c45ac5a2e00862d209" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 227, + "startColumn": 16, + "charOffset": 8881, + "charLength": 17, + "snippet": { + "text": "list[dict] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 225, + "startColumn": 1, + "charOffset": 8807, + "charLength": 164, + "snippet": { + "text": " messages: list[dict],\n config: AgentConfig,\n tools: list[dict] | None,\n ) -> LLMResult:\n client = LLMProvider._openai_client(config)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "3208fecbd6bb2068", + "equalIndicator/v1": "7889bfc24c3bce404acc8b0e20c187a6c87ac304ff81be3adbbb1095fc1ae5fc" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/doom_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 15, + "startColumn": 68, + "charOffset": 419, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 13, + "startColumn": 1, + "charOffset": 350, + "charLength": 140, + "snippet": { + "text": "\n\ndef detect_doom_loop(messages: list[Message], window: int = 30) -> str | None:\n \"\"\"\n Analyze recent messages for doom loop patterns." + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "e725a46dcb19e381", + "equalIndicator/v1": "794b0e21f93e9794372b10809adfc63f41f3bfdcc774f499b6f0f2f5a3bb30d7" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 75, + "startColumn": 24, + "charOffset": 1713, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 73, + "startColumn": 1, + "charOffset": 1619, + "charLength": 190, + "snippet": { + "text": "class ProviderConfig(BaseModel):\n openai_api_key: str | None = None\n anthropic_api_key: str | None = None\n openrouter_api_key: str | None = None\n brave_api_key: str | None = None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "919a7ef681dc5c2c", + "equalIndicator/v1": "7990bdee548a72fc5bc0353578d617ad4f4cdc88583238f8bf08a589f39f45b6" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/db/operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 286, + "startColumn": 18, + "charOffset": 7839, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 284, + "startColumn": 1, + "charOffset": 7762, + "charLength": 150, + "snippet": { + "text": " url: str | None = None,\n content: str | None = None,\n resource_id: str | None = None,\n) -> ConversationResource:\n import uuid as uuid_mod" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "cffc45f17d499fac", + "equalIndicator/v1": "86c96e6a6e8cfbf9fe62efdba87174487a7de2a997095057302843b8b856db5e" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 35, + "startColumn": 12, + "charOffset": 761, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 33, + "startColumn": 1, + "charOffset": 670, + "charLength": 188, + "snippet": { + "text": "class ConversationCreate(BaseModel):\n title: str | None = \"New conversation\"\n model: str | None = None\n mode: str | None = \"general\" # \"research\", \"writing\", \"coding\", \"general\"\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "6cf3a361cbc56b6c", + "equalIndicator/v1": "8c39023aaeab4a80199a10b6fc9fa5e5482416ca982ef5d3c890fc47abca8edc" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 76, + "startColumn": 25, + "charOffset": 1755, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 74, + "startColumn": 1, + "charOffset": 1652, + "charLength": 193, + "snippet": { + "text": " openai_api_key: str | None = None\n anthropic_api_key: str | None = None\n openrouter_api_key: str | None = None\n brave_api_key: str | None = None\n github_token: str | None = None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "1caa43224708c39e", + "equalIndicator/v1": "8e29d083dcb481cd0b9d8f31a325423553efa6bf82ff0c8e89a1edf3b1acdd35" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/db/operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 114, + "startColumn": 15, + "charOffset": 3042, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 112, + "startColumn": 1, + "charOffset": 2995, + "charLength": 99, + "snippet": { + "text": " role: str,\n content: str,\n metadata: dict | None = None,\n) -> Message:\n msg = Message(" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "852eb1e348ae11d7", + "equalIndicator/v1": "8f608adeb039dad32f8c1b842396246fa18b3c4aff6ffe6808f64d3e1d6a9932" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 33, + "startColumn": 19, + "charOffset": 812, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 31, + "startColumn": 1, + "charOffset": 732, + "charLength": 126, + "snippet": { + "text": " content: str\n tool_calls: list[ToolCall] | None = None\n tool_call_id: str | None = None\n name: str | None = None\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "5abae849cd56bc82", + "equalIndicator/v1": "91a41296d1c01383be33398a2d0901fd01283098da00438321b8e1e606aeeb30" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/session.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 35, + "startColumn": 14, + "charOffset": 956, + "charLength": 10, + "snippet": { + "text": "Any | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 33, + "startColumn": 1, + "charOffset": 918, + "charLength": 103, + "snippet": { + "text": "\n # Sandbox reference\n sandbox: Any | None = None\n\n # Turn counter (for title generation etc.)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "7b709d890991b83d", + "equalIndicator/v1": "92cbd5821bdbe801a0291b58b3090f231a52e401a71a79581da60a4a612e9cad" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/compute/workspace.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 13, + "startColumn": 34, + "charOffset": 297, + "charLength": 10, + "snippet": { + "text": "str | Path" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 11, + "startColumn": 1, + "charOffset": 191, + "charLength": 264, + "snippet": { + "text": " \"\"\"Manages isolated workspace directories for each conversation.\"\"\"\n\n def __init__(self, base_dir: str | Path = None):\n self.base_dir = Path(base_dir) if base_dir else Path.home() / \".openmlr\"\n self.workspace_dir = self.base_dir / \"workspaces\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "b82b5a217e96cf6c", + "equalIndicator/v1": "933f5765157909b257bf4135f96703b61a2847818f39d42137ff0e34de2e87b8" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/context.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 21, + "startColumn": 32, + "charOffset": 563, + "charLength": 14, + "snippet": { + "text": "Message | dict" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 19, + "startColumn": 1, + "charOffset": 498, + "charLength": 153, + "snippet": { + "text": " running_token_count: int = 0\n\n def add_message(self, msg: Message | dict) -> None:\n if isinstance(msg, dict):\n tool_calls = None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "b1fc732a5ad4f44e", + "equalIndicator/v1": "93ea2689c0b57bd2db49e5c28022ac20096272fee25def2f401607171337c0f9" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/db/operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 284, + "startColumn": 10, + "charOffset": 7771, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 282, + "startColumn": 1, + "charOffset": 7722, + "charLength": 135, + "snippet": { + "text": " title: str,\n resource_type: str,\n url: str | None = None,\n content: str | None = None,\n resource_id: str | None = None," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "2abb5d426724a740", + "equalIndicator/v1": "976d5a3b874afcd690c0e4cf29088bc03e9b74a51e83756f72d691e57a32bbce" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/http_utils.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 19, + "startColumn": 37, + "charOffset": 397, + "charLength": 12, + "snippet": { + "text": "float | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 17, + "startColumn": 1, + "charOffset": 287, + "charLength": 279, + "snippet": { + "text": "class RateLimitError(Exception):\n \"\"\"Raised when rate limit is hit.\"\"\"\n def __init__(self, retry_after: float | None = None):\n self.retry_after = retry_after\n super().__init__(f\"Rate limit hit, retry after {retry_after}s\" if retry_after else \"Rate limit hit\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "50f9a9a510076cb9", + "equalIndicator/v1": "9c04088653952498b112e5e271b6aa2ee6fa754f4499744447fe3fcc298c5043" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/services/redis_pubsub.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 196, + "startColumn": 75, + "charOffset": 6731, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 194, + "startColumn": 1, + "charOffset": 6655, + "charLength": 187, + "snippet": { + "text": "\n\nasync def wait_for_answers(conversation_id: int, timeout: float = 300) -> dict | None:\n \"\"\"Wait for user answers from Redis. Used by background worker's ask_user handler.\"\"\"\n try:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "512a9ed3884024b7", + "equalIndicator/v1": "9d679cd7f276203dd4918a24e79fcb56d30627da22ec427d56a5aa376626cdf9" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/sandbox/ssh.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 121, + "startColumn": 24, + "charOffset": 4079, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 119, + "startColumn": 1, + "charOffset": 3979, + "charLength": 202, + "snippet": { + "text": " self.username: str = \"\"\n self.key_filename: str | None = None\n self.password: str | None = None\n self.workdir: str = \"~\"\n self.host_key_fingerprint: str | None = None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "8ab604ad3bc4d241", + "equalIndicator/v1": "9d8c4c5f861769d0af0f193a8a7913dab3a62ba1222297743c06ca5c2fdb10c2" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 454, + "startColumn": 16, + "charOffset": 17481, + "charLength": 17, + "snippet": { + "text": "list[dict] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 452, + "startColumn": 1, + "charOffset": 17407, + "charLength": 210, + "snippet": { + "text": " messages: list[dict],\n config: AgentConfig,\n tools: list[dict] | None,\n ) -> AsyncGenerator[str | ToolCall | dict, None]:\n model = LLMProvider._normalize_model(config.model_name)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4a7a5a7fc500dfe1", + "equalIndicator/v1": "9e819c7d3dbbd792035b220d027a8371c306cccbdc42821379bc9e84f461e3eb" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/sandbox/ssh.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 120, + "startColumn": 28, + "charOffset": 4038, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 118, + "startColumn": 1, + "charOffset": 3951, + "charLength": 177, + "snippet": { + "text": " self.port: int = 22\n self.username: str = \"\"\n self.key_filename: str | None = None\n self.password: str | None = None\n self.workdir: str = \"~\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "c69aa6c80441eee9", + "equalIndicator/v1": "9eb62ecb0763df80d059bc2864da4fd5e5f5b8acad561d6d09d3d00c1be3ec47" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 41, + "startColumn": 11, + "charOffset": 994, + "charLength": 21, + "snippet": { + "text": "dict[str, Any] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 39, + "startColumn": 1, + "charOffset": 903, + "charLength": 149, + "snippet": { + "text": " \"\"\"Event emitted by the agent loop for SSE streaming.\"\"\"\n event_type: str\n data: dict[str, Any] | None = None\n\n def to_sse(self) -> str:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "c4fb9ba70bb53d42", + "equalIndicator/v1": "a0438295aef57b091d87ba5ef90268a47fd1d6860c8dcd4d940eeb551fdf1312" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/http_utils.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 71, + "startColumn": 21, + "charOffset": 2059, + "charLength": 16, + "snippet": { + "text": "Exception | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 69, + "startColumn": 1, + "charOffset": 1987, + "charLength": 139, + "snippet": { + "text": " retry_statuses = {429, 500, 502, 503, 504}\n\n last_exception: Exception | None = None\n\n for attempt in range(max_retries + 1):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ac57a6403a844034", + "equalIndicator/v1": "a099ce11b8c3147167a8b081ec0bc56a20fb5a4ec4eda76fb86ea7be2735231e" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/registry.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 48, + "startColumn": 24, + "charOffset": 1744, + "charLength": 10, + "snippet": { + "text": "int | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 46, + "startColumn": 1, + "charOffset": 1635, + "charLength": 151, + "snippet": { + "text": " self._blocklist: set[str] = set()\n self._current_mode: str = \"general\"\n self._user_id: int | None = None\n self._db = None\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "3ce44c01e503670f", + "equalIndicator/v1": "a1484c1deb0ad588bcbb217a02a07ac9d5ea0830eb73a3fccaaa070ad3955b16" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/http_utils.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 166, + "startColumn": 29, + "charOffset": 5610, + "charLength": 16, + "snippet": { + "text": "Exception | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 164, + "startColumn": 1, + "charOffset": 5512, + "charLength": 173, + "snippet": { + "text": " @wraps(func)\n async def wrapper(*args, **kwargs) -> T:\n last_exception: Exception | None = None\n\n for attempt in range(max_retries + 1):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "cea9894563b68953", + "equalIndicator/v1": "a6c5c2ea73e4ad64fa50a60d3cdd1830b8b1e1c8ce3fdc51d573c683b489a86b" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 412, + "startColumn": 16, + "charOffset": 15964, + "charLength": 17, + "snippet": { + "text": "list[dict] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 410, + "startColumn": 1, + "charOffset": 15890, + "charLength": 176, + "snippet": { + "text": " messages: list[dict],\n config: AgentConfig,\n tools: list[dict] | None,\n ) -> LLMResult:\n model = LLMProvider._normalize_model(config.model_name)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "7a04f4ae4e6da2b0", + "equalIndicator/v1": "a754da49992d6a9d34bd043fe81f8227c808fbbe1e0be951f7dea1cc51ecc528" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 340, + "startColumn": 38, + "charOffset": 12980, + "charLength": 17, + "snippet": { + "text": "list[dict] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 338, + "startColumn": 1, + "charOffset": 12924, + "charLength": 172, + "snippet": { + "text": "\n @staticmethod\n def _anthropic_tool_param(tools: list[dict] | None) -> list[dict] | None:\n \"\"\"Convert tool specs to Anthropic format.\"\"\"\n if not tools:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "9a60efddc6825fee", + "equalIndicator/v1": "ab71088060b0a27378d2b457d3baec6735bda2ad0d0c603a8ed8f81bffe87348" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 24, + "startColumn": 21, + "charOffset": 566, + "charLength": 26, + "snippet": { + "text": "Callable[..., bool] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 22, + "startColumn": 1, + "charOffset": 430, + "charLength": 171, + "snippet": { + "text": " parameters: dict[str, Any] # JSON Schema\n handler: Callable[..., Awaitable[tuple[str, bool]]] | None = None\n needs_approval: Callable[..., bool] | None = None\n\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "d6a4c64a2b62418f", + "equalIndicator/v1": "ac45680d0a52ff8dd04da066b4a9e489260636391df8ebce62f841c0083c0f9e" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 268, + "startColumn": 16, + "charOffset": 10334, + "charLength": 17, + "snippet": { + "text": "list[dict] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 266, + "startColumn": 1, + "charOffset": 10260, + "charLength": 198, + "snippet": { + "text": " messages: list[dict],\n config: AgentConfig,\n tools: list[dict] | None,\n ) -> AsyncGenerator[str | ToolCall | dict, None]:\n client = LLMProvider._openai_client(config)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "853473cc0b5d6d7e", + "equalIndicator/v1": "adc976fcdaa12d900d5268b5fdee18f09d6e2c059df9e4f48e1518a267b7af3c" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 43, + "startColumn": 43, + "charOffset": 1612, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 41, + "startColumn": 1, + "charOffset": 1551, + "charLength": 176, + "snippet": { + "text": "\n @staticmethod\n def _get_base_url(model_name: str) -> str | None:\n \"\"\"Get the base URL for local/custom OpenAI-compatible APIs.\"\"\"\n mn = model_name.lower()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4fb531dd727d3f54", + "equalIndicator/v1": "ae212f55a5a85c6d4ee861e4d3d6d88f83f2a57f712f56c24f2d1a1f31258121" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 23, + "startColumn": 14, + "charOffset": 489, + "charLength": 49, + "snippet": { + "text": "Callable[..., Awaitable[tuple[str, bool]]] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 21, + "startColumn": 1, + "charOffset": 409, + "charLength": 191, + "snippet": { + "text": " description: str\n parameters: dict[str, Any] # JSON Schema\n handler: Callable[..., Awaitable[tuple[str, bool]]] | None = None\n needs_approval: Callable[..., bool] | None = None\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "461e7d3d8f3d4e8b", + "equalIndicator/v1": "b0f69d36010806071b2f2a623b68211a77398e8000f34e387889542e3de2c178" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/http_utils.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 165, + "startColumn": 47, + "charOffset": 5579, + "charLength": 1, + "snippet": { + "text": "T" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 163, + "startColumn": 1, + "charOffset": 5449, + "charLength": 185, + "snippet": { + "text": " def decorator(func: Callable[..., T]) -> Callable[..., T]:\n @wraps(func)\n async def wrapper(*args, **kwargs) -> T:\n last_exception: Exception | None = None\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "3ca565a66763116e", + "equalIndicator/v1": "b1c130043da97ebb8803100041eff02b8f48120224d59e765eaf3436b4c38e94" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/services/job_manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 77, + "startColumn": 10, + "charOffset": 2104, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 75, + "startColumn": 1, + "charOffset": 2048, + "charLength": 165, + "snippet": { + "text": " db: AsyncSession,\n job_id: str,\n ) -> dict | None:\n \"\"\"Get the current status of a job.\"\"\"\n job = await ops.get_agent_job(db, job_id)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "8dca62770611ac79", + "equalIndicator/v1": "b8cc928f997225b9940c540b909234a6c3726f274fb936a4325927acf903435e" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 929, + "startColumn": 43, + "charOffset": 33489, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 927, + "startColumn": 1, + "charOffset": 33445, + "charLength": 134, + "snippet": { + "text": "\n\ndef _extract_arxiv_from_ids(ids: dict) -> str | None:\n \"\"\"Extract arxiv ID from OpenAlex ids dict.\"\"\"\n ids.get(\"openalex\", \"\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "953eebc3663bd921", + "equalIndicator/v1": "bc32d63081304e82d7a6a3d89c770cad99e00c0d40bfce78a1b0f7c6dc8b1fc9" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/db/operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 582, + "startColumn": 75, + "charOffset": 16265, + "charLength": 10, + "snippet": { + "text": "int | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 580, + "startColumn": 1, + "charOffset": 16189, + "charLength": 210, + "snippet": { + "text": "\n\nasync def get_compute_node_by_id(db: AsyncSession, node_id: int, user_id: int | None = None) -> ComputeNode | None:\n query = select(ComputeNode).where(ComputeNode.id == node_id)\n if user_id is not None:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "d5517221d1759e90", + "equalIndicator/v1": "bc9233b70353295280a194f3ff7605ca46d4a0454cd136d08f0d3f8e735be7c1" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/sandbox/ssh.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 123, + "startColumn": 36, + "charOffset": 4164, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 121, + "startColumn": 1, + "charOffset": 4056, + "charLength": 159, + "snippet": { + "text": " self.password: str | None = None\n self.workdir: str = \"~\"\n self.host_key_fingerprint: str | None = None\n self._key_manager = None\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "dbeeaa987e54d296", + "equalIndicator/v1": "bf3036d2ab4b1dd8daa0e50bfdc44dd86b6a1ad4af763e76c27bb42f185b4a28" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 16, + "startColumn": 42, + "charOffset": 404, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 14, + "startColumn": 1, + "charOffset": 344, + "charLength": 140, + "snippet": { + "text": "\n @staticmethod\n def _get_api_key(model_name: str) -> str | None:\n mn = model_name.lower()\n if mn.startswith(\"openai/\"):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "080e98cff99933a5", + "equalIndicator/v1": "c3b95c51a08419bbaa57b72ce656e9377b9c9fb362d35f52d395ad338882c720" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 77, + "startColumn": 20, + "charOffset": 1792, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 75, + "startColumn": 1, + "charOffset": 1690, + "charLength": 203, + "snippet": { + "text": " anthropic_api_key: str | None = None\n openrouter_api_key: str | None = None\n brave_api_key: str | None = None\n github_token: str | None = None\n semantic_scholar_api_key: str | None = None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "756af0a7fe581703", + "equalIndicator/v1": "c588b4a512184b74b873cf22300a9e3cb2d1bf969a51a0dbb3de9e65f114a833" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 78, + "startColumn": 19, + "charOffset": 1828, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 76, + "startColumn": 1, + "charOffset": 1731, + "charLength": 200, + "snippet": { + "text": " openrouter_api_key: str | None = None\n brave_api_key: str | None = None\n github_token: str | None = None\n semantic_scholar_api_key: str | None = None\n modal_token_id: str | None = None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ba7fd7e9e2df80c1", + "equalIndicator/v1": "c66b212ebe3fcd879c86493226f8c6d39d09aee86c1b2009575b46014af170ca" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/auth/security.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 51, + "startColumn": 40, + "charOffset": 1649, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 49, + "startColumn": 1, + "charOffset": 1608, + "charLength": 131, + "snippet": { + "text": "\n\ndef decode_access_token(token: str) -> dict | None:\n try:\n return jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "7c90d56b82771c24", + "equalIndicator/v1": "c9bada87891cc768ddb111e3037b1b5022e2d8c6ee68a503c2fd9f016401db7b" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 74, + "startColumn": 21, + "charOffset": 1672, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 72, + "startColumn": 1, + "charOffset": 1618, + "charLength": 154, + "snippet": { + "text": "\nclass ProviderConfig(BaseModel):\n openai_api_key: str | None = None\n anthropic_api_key: str | None = None\n openrouter_api_key: str | None = None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "72fd17aedf67553f", + "equalIndicator/v1": "cab551458257a1f482f6ac70bcc7f4416513bc4312f02baf58507fe411612e68" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 79, + "startColumn": 31, + "charOffset": 1876, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 77, + "startColumn": 1, + "charOffset": 1773, + "charLength": 200, + "snippet": { + "text": " brave_api_key: str | None = None\n github_token: str | None = None\n semantic_scholar_api_key: str | None = None\n modal_token_id: str | None = None\n modal_token_secret: str | None = None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "9cbdc7534082e85c", + "equalIndicator/v1": "cef2a704b72dc6bd8c145fd5398f134830b8749fb6e55d176639076cf80d9fe3" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 34, + "startColumn": 12, + "charOffset": 718, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 32, + "startColumn": 1, + "charOffset": 669, + "charLength": 188, + "snippet": { + "text": "\nclass ConversationCreate(BaseModel):\n title: str | None = \"New conversation\"\n model: str | None = None\n mode: str | None = \"general\" # \"research\", \"writing\", \"coding\", \"general\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "c870778d0b63b160", + "equalIndicator/v1": "cfd66627ca192001edc616a1f0236bdeb20c7d54f65c2051d2ac385bd8245141" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 209, + "startColumn": 57, + "charOffset": 8213, + "charLength": 17, + "snippet": { + "text": "list[dict] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 207, + "startColumn": 1, + "charOffset": 8138, + "charLength": 205, + "snippet": { + "text": "\n @staticmethod\n def _openai_tool_param(tools: list[dict] | None) -> list[dict] | None:\n \"\"\"Convert tool specs to OpenAI tools param. Handles both raw and pre-wrapped.\"\"\"\n if not tools:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "d5bbcc673a6fc8f0", + "equalIndicator/v1": "d21c5f308ae6d9408a7a96a56efc97c5ab45803869c5f770892fcb77e5e17bea" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/services/event_bus.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 41, + "startColumn": 38, + "charOffset": 1201, + "charLength": 17, + "snippet": { + "text": "AgentEvent | dict" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 39, + "startColumn": 1, + "charOffset": 1146, + "charLength": 196, + "snippet": { + "text": " pass\n\n async def broadcast(self, event: AgentEvent | dict) -> None:\n if isinstance(event, AgentEvent):\n data = {\"event_type\": event.event_type, \"data\": event.data}" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "c168a5b6201a9c4a", + "equalIndicator/v1": "d626017c80db417702cb3f5926dbd84ee75b2b00cdaaf009f446e9c9164eb948" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 13, + "startColumn": 19, + "charOffset": 326, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 11, + "startColumn": 1, + "charOffset": 197, + "charLength": 175, + "snippet": { + "text": " username: str = Field(min_length=3, max_length=50)\n password: str = Field(min_length=6, max_length=128)\n display_name: str | None = None\n\nclass UserLogin(BaseModel):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "8832ab6940607e62", + "equalIndicator/v1": "d6c88770573be296d7a622df684aa015af2b112f95679d9f6956c62c95da704a" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/db/operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 458, + "startColumn": 16, + "charOffset": 12620, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 456, + "startColumn": 1, + "charOffset": 12558, + "charLength": 133, + "snippet": { + "text": " status: str,\n error: str | None = None,\n worker_id: str | None = None,\n) -> bool:\n job = await get_agent_job(db, job_id)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "26c787324254db95", + "equalIndicator/v1": "df0140fbd42cf64363aac216209ead7fc8439700452c81603193ae5d4f415c96" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 147, + "startColumn": 16, + "charOffset": 5817, + "charLength": 17, + "snippet": { + "text": "list[dict] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 145, + "startColumn": 1, + "charOffset": 5743, + "charLength": 149, + "snippet": { + "text": " messages: list[dict],\n config: AgentConfig,\n tools: list[dict] | None = None,\n max_retries: int = 3,\n ) -> LLMResult:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "24f04e4a8b369bad", + "equalIndicator/v1": "e0de3cc464d6737fe153795219efebfa018f3f160a755ae0fefd5b2e6ba66b8c" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/session.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 29, + "startColumn": 23, + "charOffset": 816, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 27, + "startColumn": 1, + "charOffset": 773, + "charLength": 105, + "snippet": { + "text": "\n # Approval flow\n pending_approval: dict | None = None\n\n # Question/answer flow (ask_user tool)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "d3f371ad1ddd592f", + "equalIndicator/v1": "e2e7ad505efaf1e48ab6ac4b04cad3c6895fc0f0c4993f088b58ffbc2e05cca1" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/services/event_bus.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 26, + "startColumn": 34, + "charOffset": 665, + "charLength": 19, + "snippet": { + "text": "asyncio.Task | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 24, + "startColumn": 1, + "charOffset": 556, + "charLength": 178, + "snippet": { + "text": " def __init__(self):\n self._subscribers: list[asyncio.Queue] = []\n self._redis_bridge_task: asyncio.Task | None = None\n\n def subscribe(self) -> asyncio.Queue:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "574e83259e0ed6f4", + "equalIndicator/v1": "e5ec7d46bb10933b62640a0de7dd3585a594bed34c2faa79fa1ca443c3fb2565" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/llm.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 93, + "startColumn": 16, + "charOffset": 3998, + "charLength": 17, + "snippet": { + "text": "list[dict] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 91, + "startColumn": 1, + "charOffset": 3924, + "charLength": 194, + "snippet": { + "text": " messages: list[dict],\n config: AgentConfig,\n tools: list[dict] | None = None,\n ) -> LLMResult:\n return await LLMProvider._call_with_retry(messages, config, tools)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "b3b9807897909f82", + "equalIndicator/v1": "e6a23c55a1c0b160199a8fcb04a26608f7ff4c8cf92e0577208594316d707925" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/compute/workspace.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 43, + "startColumn": 60, + "charOffset": 1706, + "charLength": 11, + "snippet": { + "text": "Path | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 41, + "startColumn": 1, + "charOffset": 1579, + "charLength": 270, + "snippet": { + "text": " return self.get_workspace_path(conversation_uuid).exists()\n\n def archive_workspace(self, conversation_uuid: str) -> Path | None:\n \"\"\"Archive a workspace before deletion. Returns archive path.\"\"\"\n path = self.get_workspace_path(conversation_uuid)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ccaec39d3c5504e8", + "equalIndicator/v1": "e6cb01de626239e1ede87e959e47a3480f650629d3c79494767047a4eac0abfd" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/db/operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 457, + "startColumn": 12, + "charOffset": 12586, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 455, + "startColumn": 1, + "charOffset": 12541, + "charLength": 108, + "snippet": { + "text": " job_id: str,\n status: str,\n error: str | None = None,\n worker_id: str | None = None,\n) -> bool:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "fcafaf2a23055fcd", + "equalIndicator/v1": "e8324349754729a5e7f55554723b6335f71ed577e33ca80a946bb32cb3bd8ef9" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_doom_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 15, + "startColumn": 43, + "charOffset": 379, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 13, + "startColumn": 1, + "charOffset": 335, + "charLength": 165, + "snippet": { + "text": "\n\ndef _assistant_with_tool(name: str, args: dict | None = None) -> Message:\n \"\"\"Helper: create an assistant message carrying one tool call.\"\"\"\n return Message(" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "6f692d449193c1af", + "equalIndicator/v1": "e9bc6a4cbe17af15bb707ab3460e7b7bd95703243a48b1f2299b82106110d29f" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/db/operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 513, + "startColumn": 47, + "charOffset": 14276, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 511, + "startColumn": 1, + "charOffset": 14135, + "charLength": 190, + "snippet": { + "text": "async def create_ssh_key(\n db: AsyncSession, user_id: int, filename: str, fingerprint: str,\n algorithm: str, public_key: str, comment: str | None = None,\n) -> SSHKey:\n key = SSHKey(" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "af3acc8143e92e19", + "equalIndicator/v1": "ea8f98ea0c5be8f632ffc2d1b99c54ea371657b2aa4ff75cad343c2010eb975e" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/keys/manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 118, + "startColumn": 45, + "charOffset": 4868, + "charLength": 11, + "snippet": { + "text": "str | bytes" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 116, + "startColumn": 1, + "charOffset": 4789, + "charLength": 208, + "snippet": { + "text": " return key_path, pub_path\n\n def validate_key(self, private_key_pem: str | bytes) -> dict:\n \"\"\"Validate an SSH private key and return metadata.\"\"\"\n if isinstance(private_key_pem, str):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "efc16dbeb2788f3d", + "equalIndicator/v1": "eac82361bddeb34c100653256ce781603bd77cfc3141546085c5fd57e689aa1f" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/db/operations.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 139, + "startColumn": 6, + "charOffset": 3573, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 137, + "startColumn": 1, + "charOffset": 3480, + "charLength": 172, + "snippet": { + "text": "async def get_user_setting(\n db: AsyncSession, user_id: int, category: str, key: str\n) -> dict | None:\n from .models import UserSetting\n result = await db.execute(" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a6c1d1093c41d379", + "equalIndicator/v1": "ebc00ec53edab1d4473d86b767e0d88e5b4dc848d14e2ab21b7f00d748f32e0f" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/http_utils.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 38, + "startColumn": 11, + "charOffset": 984, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 36, + "startColumn": 1, + "charOffset": 909, + "charLength": 145, + "snippet": { + "text": " params: dict | None = None,\n headers: dict | None = None,\n json: dict | None = None,\n timeout: float = 30,\n max_retries: int = 3," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "6a99c28abeaf5b6e", + "equalIndicator/v1": "ebf3474d58dc030dcc473e7f9f935d09c80f4cfaf6effd3e7408951d3ac247f0" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/sandbox/modal_sandbox.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 17, + "startColumn": 19, + "charOffset": 446, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 15, + "startColumn": 1, + "charOffset": 358, + "charLength": 144, + "snippet": { + "text": " self._app = None\n self.image_name: str = \"python:3.12\"\n self.gpu: str | None = None\n self.packages: list[str] = []\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "5195f05ba86be4ad", + "equalIndicator/v1": "ecb9d3bfcb3528d5a1872440bf4b9f7b05bd07bb260717a97174e175e5eb9876" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 52, + "startColumn": 49, + "charOffset": 1808, + "charLength": 11, + "snippet": { + "text": "dict | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 50, + "startColumn": 1, + "charOffset": 1758, + "charLength": 162, + "snippet": { + "text": "\n\nasync def _get_author_info(db, conv_id: int) -> dict | None:\n \"\"\"Fetch author settings for the conversation's user.\"\"\"\n # Get conversation to find user_id" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "801c7c10add714da", + "equalIndicator/v1": "ed080ac87d9e0cbeb9fdd7234447636d744cce519d352ca3920a6b4664f3ae69" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 81, + "startColumn": 25, + "charOffset": 1956, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 79, + "startColumn": 1, + "charOffset": 1846, + "charLength": 157, + "snippet": { + "text": " semantic_scholar_api_key: str | None = None\n modal_token_id: str | None = None\n modal_token_secret: str | None = None\n\n# ---- Model Management ----" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "38c4a398a21b535e", + "equalIndicator/v1": "ef3490a041dd7a1d49b4bba5df91a34fe12f31b489993c806805785745581fd9" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 27, + "startColumn": 19, + "charOffset": 586, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 25, + "startColumn": 1, + "charOffset": 538, + "charLength": 103, + "snippet": { + "text": " id: int\n username: str\n display_name: str | None\n is_active: bool\n created_at: datetime" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "835fa50211e0ccef", + "equalIndicator/v1": "f8e69701eec89deb52637894f5a685faa1bf524189ab56712d942925c07e3435" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/plan.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 242, + "startColumn": 49, + "charOffset": 10905, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 240, + "startColumn": 1, + "charOffset": 10855, + "charLength": 165, + "snippet": { + "text": "\n\nasync def get_report_content(report_id: str) -> str | None:\n \"\"\"Retrieve a stored report by ID. Used by the API.\"\"\"\n session_factory = _get_session_factory()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "2ddd6349a8c0805e", + "equalIndicator/v1": "f9ed285fade52385e5b45af9765a2617af1285cfb4b0d3364160ff6cfb08f205" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/mcp.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 50, + "startColumn": 20, + "charOffset": 1423, + "charLength": 15, + "snippet": { + "text": "set[str] | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 48, + "startColumn": 1, + "charOffset": 1356, + "charLength": 116, + "snippet": { + "text": " mcp_configs: dict,\n tool_router,\n blocklist: set[str] | None = None,\n ) -> int:\n \"\"\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "1bc17079f0c0803d", + "equalIndicator/v1": "fa7dac714650dc2f3d2d18fd704992a01db76d04a3ff26e5daa7778f82296b8f" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyTypeHintsInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Type hint is invalid or refers to the expression which is not a correct type", + "markdown": "Type hint is invalid or refers to the expression which is not a correct type" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 36, + "startColumn": 11, + "charOffset": 789, + "charLength": 10, + "snippet": { + "text": "str | None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 34, + "startColumn": 1, + "charOffset": 707, + "charLength": 190, + "snippet": { + "text": " title: str | None = \"New conversation\"\n model: str | None = None\n mode: str | None = \"general\" # \"research\", \"writing\", \"coding\", \"general\"\n\nclass ConversationResponse(BaseModel):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4a7f6b701d2d66f3", + "equalIndicator/v1": "fd20b36a0c99d4b6321f3e37e57e06ece91170583596f90740ff1135b9690103" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnboundLocalVariableInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Local variable 'sm' might be referenced before assignment", + "markdown": "Local variable 'sm' might be referenced before assignment" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/compute_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 118, + "startColumn": 19, + "charOffset": 4109, + "charLength": 2, + "snippet": { + "text": "sm" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 116, + "startColumn": 1, + "charOffset": 4051, + "charLength": 113, + "snippet": { + "text": " except Exception as e:\n try:\n await sm.destroy()\n except Exception:\n pass" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "8de22eedad5ba621", + "equalIndicator/v1": "0e21ba0a72d3c5c123f3ef322e8f3a2ec91aa12e9774fe2f64d1a693ccaaa009" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "hasFixes": true, + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnboundLocalVariableInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "Local variable 'ops' might be referenced before assignment", + "markdown": "Local variable 'ops' might be referenced before assignment" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/services/session_manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 178, + "startColumn": 39, + "charOffset": 7316, + "charLength": 3, + "snippet": { + "text": "ops" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 176, + "startColumn": 1, + "charOffset": 7226, + "charLength": 183, + "snippet": { + "text": " if user_id and db:\n try:\n all_nodes = await ops.get_compute_nodes(db, user_id)\n except Exception:\n pass" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "f4045f309ec6c614", + "equalIndicator/v1": "55f15b91ea5271fcdcc82725e9ec2d3d21434201928c70eafd12ad9f4159b6d8" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "hasFixes": true, + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnreachableCodeInspection", + "kind": "fail", + "level": "warning", + "message": { + "text": "This code is unreachable", + "markdown": "This code is unreachable" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 347, + "startColumn": 17, + "charOffset": 13367, + "charLength": 5, + "snippet": { + "text": "yield" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 345, + "startColumn": 1, + "charOffset": 13303, + "charLength": 152, + "snippet": { + "text": " yield \"Hello\"\n if False:\n yield\n\n with patch(\"openmlr.agent.loop.LLMProvider.generate_stream\") as mock_str:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ca13801d8bdc4f2b", + "equalIndicator/v1": "3d47b6916141a6e3821161bbe8fe84a747199e769193e06fc75f9915bb08969f" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Local variable 'sandbox' value is not used", + "markdown": "Local variable 'sandbox' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_sandbox_manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 27, + "startColumn": 9, + "charOffset": 695, + "charLength": 7, + "snippet": { + "text": "sandbox" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 25, + "startColumn": 1, + "charOffset": 631, + "charLength": 179, + "snippet": { + "text": "\n async def test_create_then_destroy(self, manager):\n sandbox = await manager.create(\"local\")\n await manager.destroy()\n assert manager.get_active() is None" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "3057cc44d6961d79", + "equalIndicator/v1": "00b30f9074403423a1f992857f6f51c8b067b583890df8d148cdb3cdc7188b64" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "hasFixes": true, + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'config' value is not used", + "markdown": "Parameter 'config' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 360, + "startColumn": 41, + "charOffset": 13940, + "charLength": 6, + "snippet": { + "text": "config" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 358, + "startColumn": 1, + "charOffset": 13820, + "charLength": 187, + "snippet": { + "text": " tc = ToolCall(id=\"call_1\", name=\"search\", arguments={\"query\": \"test\"})\n\n async def mock_stream(messages, config, tools):\n yield \"Finding...\"\n yield tc" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "6dc3d0d4f0a412bd", + "equalIndicator/v1": "077d688d76d0f0f025e2ac714fe33eb1596d8faffe658932944e76df713469c6" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'config' value is not used", + "markdown": "Parameter 'config' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/compute/manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 44, + "startColumn": 38, + "charOffset": 1663, + "charLength": 12, + "snippet": { + "text": "config: dict" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 42, + "startColumn": 1, + "charOffset": 1601, + "charLength": 121, + "snippet": { + "text": " return True, \"\"\n\n def _validate_modal_config(self, config: dict) -> tuple[bool, str]:\n return True, \"\"\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4f2b112f538eada0", + "equalIndicator/v1": "095ea263da0abbb63d916cdda9d7997467e0b449bda399e2a4868f11f13cf671" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'session' value is not used", + "markdown": "Parameter 'session' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/sandbox_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 213, + "startColumn": 67, + "charOffset": 8838, + "charLength": 12, + "snippet": { + "text": "session=None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 211, + "startColumn": 1, + "charOffset": 8770, + "charLength": 175, + "snippet": { + "text": "\n\nasync def _handle_write(sandbox_manager, path: str, content: str, session=None, **kwargs) -> tuple[str, bool]:\n sandbox = sandbox_manager.get_active()\n if not sandbox:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "711eb4202d9c220d", + "equalIndicator/v1": "1448a7218b482cf552b6a4a17b158a9deb077706e839c8b844e6d10a242c4b0a" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'node' value is not used", + "markdown": "Parameter 'node' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/compute.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 380, + "startColumn": 28, + "charOffset": 12042, + "charLength": 4, + "snippet": { + "text": "node" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 378, + "startColumn": 1, + "charOffset": 12013, + "charLength": 79, + "snippet": { + "text": "\n\nasync def _test_modal_node(node):\n \"\"\"Test Modal connectivity.\"\"\"\n try:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "731a39b323dd3652", + "equalIndicator/v1": "1718fb76f5494c7b56e8b08058a7a2070b685fed01fbc36a0b3825fdf1aac3a6" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/sandbox_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 169, + "startColumn": 111, + "charOffset": 7108, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 167, + "startColumn": 1, + "charOffset": 6996, + "charLength": 205, + "snippet": { + "text": "\n\nasync def _handle_exec(sandbox_manager, command: str, timeout: int = 120, stream: bool = False, session=None, **kwargs) -> tuple[str, bool]:\n sandbox = sandbox_manager.get_active()\n if not sandbox:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "145552e9fbd7600d", + "equalIndicator/v1": "21aa3737f6d7aed995c3907bc3a1378e9d5d3740f5a301c69a2606ef74e482c0" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Local variable 'local1' value is not used", + "markdown": "Local variable 'local1' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_sandbox_manager.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 33, + "startColumn": 9, + "charOffset": 925, + "charLength": 6, + "snippet": { + "text": "local1" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 31, + "startColumn": 1, + "charOffset": 856, + "charLength": 200, + "snippet": { + "text": "\n async def test_create_replaces_existing(self, manager):\n local1 = await manager.create(\"local\")\n local2 = await manager.create(\"local\")\n assert manager.get_active() is local2" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "b353e3e46c32f778", + "equalIndicator/v1": "231acf8e6d43d6b66e289e52c3c873683d61c2d4ae109bef2db21c4271af5470" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "hasFixes": true, + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/github.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 169, + "startColumn": 55, + "charOffset": 6541, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 167, + "startColumn": 1, + "charOffset": 6456, + "charLength": 177, + "snippet": { + "text": "\nasync def _handle_list_repos(\n owner: str, sort: str = \"stars\", limit: int = 20, **kwargs\n) -> tuple[str, bool]:\n \"\"\"List repos for a GitHub user/org with retry logic.\"\"\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a507d7dfbba59bdf", + "equalIndicator/v1": "24435b94079d4086f90b44a676fe137ad460d20d923b49a0a4e325fac2dcc9b2" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/sandbox_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 161, + "startColumn": 93, + "charOffset": 6724, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 159, + "startColumn": 1, + "charOffset": 6630, + "charLength": 194, + "snippet": { + "text": "\n\nasync def _handle_create(sandbox_manager, provider: str, config: dict = None, session=None, **kwargs) -> tuple[str, bool]:\n try:\n await sandbox_manager.create(provider, config or {})" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "882a3d6d4e8ad78e", + "equalIndicator/v1": "24be1f3677b977748fb5f258c57310674ca52020ad99925ce46c8c7cf5644408" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'tools' value is not used", + "markdown": "Parameter 'tools' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 360, + "startColumn": 49, + "charOffset": 13948, + "charLength": 5, + "snippet": { + "text": "tools" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 358, + "startColumn": 1, + "charOffset": 13820, + "charLength": 187, + "snippet": { + "text": " tc = ToolCall(id=\"call_1\", name=\"search\", arguments={\"query\": \"test\"})\n\n async def mock_stream(messages, config, tools):\n yield \"Finding...\"\n yield tc" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "07b815c46985d6f6", + "equalIndicator/v1": "25586f709be64b81be5942be675cf1d82048d57e49d9a4db42a006e4a2933129" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/sandbox_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 213, + "startColumn": 81, + "charOffset": 8852, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 211, + "startColumn": 1, + "charOffset": 8770, + "charLength": 175, + "snippet": { + "text": "\n\nasync def _handle_write(sandbox_manager, path: str, content: str, session=None, **kwargs) -> tuple[str, bool]:\n sandbox = sandbox_manager.get_active()\n if not sandbox:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "0ccbb2fc6ebef5e7", + "equalIndicator/v1": "264b55865619e72db82cece9d58372337e8c307935fda517aef3b5c05e2c53dc" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/local.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 338, + "startColumn": 96, + "charOffset": 13061, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 336, + "startColumn": 1, + "charOffset": 12964, + "charLength": 177, + "snippet": { + "text": "\n\nasync def _handle_edit(path: str, old_string: str, new_string: str, replace_all: bool = False, **kwargs) -> tuple[str, bool]:\n try:\n target = Path(path).expanduser()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "1fb8f5889c195742", + "equalIndicator/v1": "3168d042435ed76d915c72a7f1ba223da4302462265ae524196cc3d3b8472d91" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 184, + "startColumn": 5, + "charOffset": 6996, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 182, + "startColumn": 1, + "charOffset": 6947, + "charLength": 117, + "snippet": { + "text": " citation: dict = None,\n session=None,\n **kwargs,\n) -> tuple[str, bool]:\n \"\"\"Route writing operations.\"\"\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "983b62cc2a3b7954", + "equalIndicator/v1": "329c1f8ad9c8a31ebe200e0bd13d8e42a78a39d833b9097688d5cc2f38bc0b71" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/github.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 216, + "startColumn": 60, + "charOffset": 8067, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 214, + "startColumn": 1, + "charOffset": 7974, + "charLength": 184, + "snippet": { + "text": "\nasync def _handle_find_examples(\n query: str, language: str = \"python\", limit: int = 10, **kwargs\n) -> tuple[str, bool]:\n \"\"\"Search GitHub for code examples with retry logic.\"\"\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4750500d3cb8e80c", + "equalIndicator/v1": "33fd91c60a77f350bf4511952fcc9836e07b1778ba11b9dc888c26b1b3ff10f8" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'tools' value is not used", + "markdown": "Parameter 'tools' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 344, + "startColumn": 49, + "charOffset": 13295, + "charLength": 5, + "snippet": { + "text": "tools" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 342, + "startColumn": 1, + "charOffset": 13192, + "charLength": 158, + "snippet": { + "text": " mock_session.is_cancelled.return_value = True\n\n async def mock_stream(messages, config, tools):\n yield \"Hello\"\n if False:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "445ffb8c2b8f91ab", + "equalIndicator/v1": "38cb7c91f04eed3b01d3be988848d389f372552d8dded726fa95796432131caa" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'messages' value is not used", + "markdown": "Parameter 'messages' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 344, + "startColumn": 31, + "charOffset": 13277, + "charLength": 8, + "snippet": { + "text": "messages" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 342, + "startColumn": 1, + "charOffset": 13192, + "charLength": 158, + "snippet": { + "text": " mock_session.is_cancelled.return_value = True\n\n async def mock_stream(messages, config, tools):\n yield \"Hello\"\n if False:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "15d1ed872a5ed824", + "equalIndicator/v1": "398d0352d6ce3948f1e656ef18ec382e80389468eb8b9f22d05e01864e600f11" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'config' value is not used", + "markdown": "Parameter 'config' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 344, + "startColumn": 41, + "charOffset": 13287, + "charLength": 6, + "snippet": { + "text": "config" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 342, + "startColumn": 1, + "charOffset": 13192, + "charLength": 158, + "snippet": { + "text": " mock_session.is_cancelled.return_value = True\n\n async def mock_stream(messages, config, tools):\n yield \"Hello\"\n if False:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "b05c73b25fa04695", + "equalIndicator/v1": "3bfafd4ee391e824b828c4499061ee2ae9fb85bfb0eaaf24cb54a36411ee91b6" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/compute_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 152, + "startColumn": 92, + "charOffset": 5420, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 150, + "startColumn": 1, + "charOffset": 5327, + "charLength": 172, + "snippet": { + "text": "\n\nasync def _handle_plan(task: str, requirements: dict = None, user_id: int = None, db=None, **kwargs):\n \"\"\"Recommend the best compute node for a task.\"\"\"\n if not db:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "17f67062f5ce96fc", + "equalIndicator/v1": "3e1adc52bf1de0ae5d030aa84f2621ec35ab04fe8fbd5ba853ab03cdbd471c90" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/papers.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 158, + "startColumn": 5, + "charOffset": 6082, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 156, + "startColumn": 1, + "charOffset": 6034, + "charLength": 126, + "snippet": { + "text": " source: str = \"auto\",\n session=None,\n **kwargs,\n) -> tuple[str, bool]:\n # Budget check for API-calling operations" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "cf2bb222da8942c2", + "equalIndicator/v1": "3e35584c897bc2109aff6c743909031e5b37841f65aaa791c13ada7b3c829fed" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'session' value is not used", + "markdown": "Parameter 'session' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/sandbox_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 200, + "startColumn": 52, + "charOffset": 8405, + "charLength": 12, + "snippet": { + "text": "session=None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 198, + "startColumn": 1, + "charOffset": 8352, + "charLength": 160, + "snippet": { + "text": "\n\nasync def _handle_read(sandbox_manager, path: str, session=None, **kwargs) -> tuple[str, bool]:\n sandbox = sandbox_manager.get_active()\n if not sandbox:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "812ee0c52a47f51e", + "equalIndicator/v1": "3e833ace3dd145a32c811b080746cf9ee8f92a89c82ba1a1723eeb3122a1095e" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'user_id' value is not used", + "markdown": "Parameter 'user_id' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/compute_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 240, + "startColumn": 29, + "charOffset": 8216, + "charLength": 7, + "snippet": { + "text": "user_id" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 238, + "startColumn": 1, + "charOffset": 8186, + "charLength": 168, + "snippet": { + "text": "\n\nasync def _get_sync_context(user_id, db, session):\n \"\"\"Helper: resolve conversation UUID and workspace path for sync ops.\"\"\"\n from ..db import operations as ops" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "963bafc7ffaaae47", + "equalIndicator/v1": "3ed58638ecc62d0580c73f8cc0fffa2559415880a219e0b1cba7f01849953f14" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'config' value is not used", + "markdown": "Parameter 'config' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 329, + "startColumn": 41, + "charOffset": 12716, + "charLength": 6, + "snippet": { + "text": "config" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 327, + "startColumn": 1, + "charOffset": 12601, + "charLength": 183, + "snippet": { + "text": " mock_session.config = AgentConfig(model_name=\"test\", stream=True)\n\n async def mock_stream(messages, config, tools):\n yield \"Hello\"\n yield \" world\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "64dd21c4c872501d", + "equalIndicator/v1": "3fa951cc42a44b9026080c8f5c59c2ff740f63799817ffe8135424534034b655" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Local variable 'iteration' value is not used", + "markdown": "Local variable 'iteration' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 66, + "startColumn": 13, + "charOffset": 2545, + "charLength": 9, + "snippet": { + "text": "iteration" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 64, + "startColumn": 1, + "charOffset": 2523, + "charLength": 184, + "snippet": { + "text": "\n try:\n for iteration in range(session.config.max_iterations):\n if session.is_cancelled():\n await session.emit(AgentEvent(event_type=\"interrupted\"))" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "f4466fe16ef10dc4", + "equalIndicator/v1": "43afbf4235bfcc3188694c85b773f3d385ddee552977aa569f21fe3a99630f05" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "hasFixes": true, + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'session' value is not used", + "markdown": "Parameter 'session' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/sandbox_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 161, + "startColumn": 79, + "charOffset": 6710, + "charLength": 12, + "snippet": { + "text": "session=None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 159, + "startColumn": 1, + "charOffset": 6630, + "charLength": 194, + "snippet": { + "text": "\n\nasync def _handle_create(sandbox_manager, provider: str, config: dict = None, session=None, **kwargs) -> tuple[str, bool]:\n try:\n await sandbox_manager.create(provider, config or {})" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "28222e623a8b19b9", + "equalIndicator/v1": "482d1832eb3abc9636252c812b3b0f96fca887c42294577245103b57d79a367b" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/compute_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 23, + "startColumn": 54, + "charOffset": 714, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 21, + "startColumn": 1, + "charOffset": 659, + "charLength": 132, + "snippet": { + "text": "\n\nasync def _handle_list(user_id: int = None, db=None, **kwargs):\n \"\"\"List all compute nodes with capabilities.\"\"\"\n if not db:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "fa37dc62ee753889", + "equalIndicator/v1": "48f82d96228ef072bec941a0a2e74fb6df5d8dd69398181a1955c44f42e5a0d5" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'user' value is not used", + "markdown": "Parameter 'user' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/agent.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 488, + "startColumn": 5, + "charOffset": 15987, + "charLength": 38, + "snippet": { + "text": "user: User = Depends(get_current_user)" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 486, + "startColumn": 1, + "charOffset": 15935, + "charLength": 134, + "snippet": { + "text": "async def submit_answers(\n request: Request,\n user: User = Depends(get_current_user),\n db: AsyncSession = Depends(get_db),\n):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4836248a1e0b433d", + "equalIndicator/v1": "4b7cfaa4463d88371048d8d39ade76ea5cee088822246b4398fa8f643f5b6666" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'messages' value is not used", + "markdown": "Parameter 'messages' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 360, + "startColumn": 31, + "charOffset": 13930, + "charLength": 8, + "snippet": { + "text": "messages" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 358, + "startColumn": 1, + "charOffset": 13820, + "charLength": 187, + "snippet": { + "text": " tc = ToolCall(id=\"call_1\", name=\"search\", arguments={\"query\": \"test\"})\n\n async def mock_stream(messages, config, tools):\n yield \"Finding...\"\n yield tc" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "93ad312a52b34217", + "equalIndicator/v1": "557a3d51e968a6b6725b19b3a14ae4f84a63655f22b38d9ab180322cd52b1095" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/compute_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 128, + "startColumn": 86, + "charOffset": 4436, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 126, + "startColumn": 1, + "charOffset": 4349, + "charLength": 177, + "snippet": { + "text": "\n\nasync def _handle_select(node_name: str, user_id: int = None, db=None, session=None, **kwargs):\n \"\"\"Select a compute node as active for this conversation.\"\"\"\n if not db:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "eaea1722fc19b5e1", + "equalIndicator/v1": "56977e814d318196e7992189dbc91a6243ff051703f2f3c2731ce15f96bc85f4" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'arg2' value is not used", + "markdown": "Parameter 'arg2' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_types.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 38, + "startColumn": 38, + "charOffset": 1104, + "charLength": 13, + "snippet": { + "text": "arg2: int = 0" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 36, + "startColumn": 1, + "charOffset": 1024, + "charLength": 157, + "snippet": { + "text": "\n def test_creation_with_handler(self):\n async def handler(arg1: str, arg2: int = 0) -> tuple[str, bool]:\n return f\"done: {arg1}\", True\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "bcfaa5bbe38ba666", + "equalIndicator/v1": "5f1b7d998e22ef07a244e410ecaf91689b23ee4a54628b548cf753c5c1369a4d" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'user' value is not used", + "markdown": "Parameter 'user' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/agent.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 571, + "startColumn": 34, + "charOffset": 19183, + "charLength": 38, + "snippet": { + "text": "user: User = Depends(get_current_user)" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 569, + "startColumn": 1, + "charOffset": 19127, + "charLength": 159, + "snippet": { + "text": "\n@router.post(\"/undo\")\nasync def undo(request: Request, user: User = Depends(get_current_user)):\n active = _sm(request).get_current_session()\n if active:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "b07235a4355d0d45", + "equalIndicator/v1": "5f283c179c412de23beba3f9bd23444434cf4af936170cb27b30a0594e864e67" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'user' value is not used", + "markdown": "Parameter 'user' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/agent.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 460, + "startColumn": 5, + "charOffset": 15087, + "charLength": 38, + "snippet": { + "text": "user: User = Depends(get_current_user)" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 458, + "startColumn": 1, + "charOffset": 15044, + "charLength": 125, + "snippet": { + "text": "async def cancel_job(\n job_id: str,\n user: User = Depends(get_current_user),\n db: AsyncSession = Depends(get_db),\n):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "407bc70274ae5fb6", + "equalIndicator/v1": "5fed10c13bba6d0a83215f4b0779b69a42db63edf65bab1c2843635885c401c3" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/github.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 123, + "startColumn": 58, + "charOffset": 4948, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 121, + "startColumn": 1, + "charOffset": 4861, + "charLength": 170, + "snippet": { + "text": "\nasync def _handle_read_file(\n owner: str, repo: str, path: str, ref: str = \"main\", **kwargs\n) -> tuple[str, bool]:\n \"\"\"Read a file from GitHub with retry logic.\"\"\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "dcca77e789b7f95e", + "equalIndicator/v1": "608c72e5a88d236111425bab746c7a0c854c8f9818770c66d871812437e53d6e" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'config' value is not used", + "markdown": "Parameter 'config' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/agent/prompts.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 29, + "startColumn": 5, + "charOffset": 813, + "charLength": 33, + "snippet": { + "text": "config: AgentConfig | None = None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 27, + "startColumn": 1, + "charOffset": 750, + "charLength": 166, + "snippet": { + "text": " sandbox_info: str = \"none\",\n compute_env: str = \"\",\n config: AgentConfig | None = None,\n) -> str:\n \"\"\"Build the full system prompt from YAML template.\"\"\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "0ca32424b87234ee", + "equalIndicator/v1": "645e7479ea4cbec7f3ee5ac6a60e6d7bad91e7a174b4a884e3e5f1c38b8881fe" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'tmp_path' value is not used", + "markdown": "Parameter 'tmp_path' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_local.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 240, + "startColumn": 78, + "charOffset": 8884, + "charLength": 8, + "snippet": { + "text": "tmp_path" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 238, + "startColumn": 1, + "charOffset": 8759, + "charLength": 269, + "snippet": { + "text": " assert _running_in_container() is True\n\n def test_dockerenv_file_not_present_outside_container(self, monkeypatch, tmp_path):\n # When /.dockerenv doesn't exist and no other indicators\n monkeypatch.delenv(\"KUBERNETES_SERVICE_HOST\", raising=False)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "b8cfb8557feda3be", + "equalIndicator/v1": "6f58f30ae5961721a6ad7da597045ec8cde5d951f1b0e9c17db1a6e36074ed8e" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/github.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 265, + "startColumn": 5, + "charOffset": 9617, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 263, + "startColumn": 1, + "charOffset": 9567, + "charLength": 136, + "snippet": { + "text": " sort: str = \"stars\",\n limit: int = 10,\n **kwargs\n) -> tuple[str, bool]:\n \"\"\"Search GitHub repositories with retry logic.\"\"\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "64075f955fa4a1a3", + "equalIndicator/v1": "70c3bfafcba25e88ce893f4669be8cdeb735f539d7c6c7f7c52dfe0e8b203d94" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'user' value is not used", + "markdown": "Parameter 'user' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/agent.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 431, + "startColumn": 5, + "charOffset": 14163, + "charLength": 38, + "snippet": { + "text": "user: User = Depends(get_current_user)" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 429, + "startColumn": 1, + "charOffset": 14116, + "charLength": 129, + "snippet": { + "text": "async def get_job_status(\n job_id: str,\n user: User = Depends(get_current_user),\n db: AsyncSession = Depends(get_db),\n):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "34ca5fe48f0001ec", + "equalIndicator/v1": "79444cd41100bdcab1c265e2df87e5d68dee0c80148fef995489722c6f746d81" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'db' value is not used", + "markdown": "Parameter 'db' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/agent.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 489, + "startColumn": 5, + "charOffset": 16031, + "charLength": 34, + "snippet": { + "text": "db: AsyncSession = Depends(get_db)" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 487, + "startColumn": 1, + "charOffset": 15961, + "charLength": 177, + "snippet": { + "text": " request: Request,\n user: User = Depends(get_current_user),\n db: AsyncSession = Depends(get_db),\n):\n \"\"\"Submit answers to structured questions from ask_user tool.\"\"\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "f1dd77cfe3b801f7", + "equalIndicator/v1": "7b716a247d8996e02f18a09e649eae4018c1cc8810261e9e1e121d93584e9cd3" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'messages' value is not used", + "markdown": "Parameter 'messages' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 329, + "startColumn": 31, + "charOffset": 12706, + "charLength": 8, + "snippet": { + "text": "messages" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 327, + "startColumn": 1, + "charOffset": 12601, + "charLength": 183, + "snippet": { + "text": " mock_session.config = AgentConfig(model_name=\"test\", stream=True)\n\n async def mock_stream(messages, config, tools):\n yield \"Hello\"\n yield \" world\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "bd028cfa35c1b500", + "equalIndicator/v1": "81fb0419d8d01163ee1b217e56ba9937eb4184942c1e04b90aef07b26bf60af4" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'request' value is not used", + "markdown": "Parameter 'request' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/app.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 89, + "startColumn": 36, + "charOffset": 2862, + "charLength": 16, + "snippet": { + "text": "request: Request" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 87, + "startColumn": 1, + "charOffset": 2734, + "charLength": 222, + "snippet": { + "text": "# ── Global error handler ────────────────────────────────\n@app.exception_handler(Exception)\nasync def global_exception_handler(request: Request, exc: Exception):\n import logging\n logger = logging.getLogger(__name__)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "f4b7f6cc95dbd939", + "equalIndicator/v1": "8278142c79ae8c64f394f81809e38523d8f89a29ce7644a4109760b1e65681ea" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'project_id' value is not used", + "markdown": "Parameter 'project_id' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/writing.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 176, + "startColumn": 5, + "charOffset": 6795, + "charLength": 22, + "snippet": { + "text": "project_id: str = None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 174, + "startColumn": 1, + "charOffset": 6744, + "charLength": 123, + "snippet": { + "text": "async def _handle_writing(\n operation: str,\n project_id: str = None,\n title: str = None,\n outline: list = None," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "c8637f50e3072632", + "equalIndicator/v1": "8c44d610ba7e1dd96f5357c10c8c88459eefaf7cdd8608af0369be19d24ae881" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'tools' value is not used", + "markdown": "Parameter 'tools' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_agent_loop.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 329, + "startColumn": 49, + "charOffset": 12724, + "charLength": 5, + "snippet": { + "text": "tools" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 327, + "startColumn": 1, + "charOffset": 12601, + "charLength": 183, + "snippet": { + "text": " mock_session.config = AgentConfig(model_name=\"test\", stream=True)\n\n async def mock_stream(messages, config, tools):\n yield \"Hello\"\n yield \" world\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "0f2bf85e934d8b9e", + "equalIndicator/v1": "8cd7629865d54a6183f025d76f174c755c0c4aba0240e1890845dff0a7df198b" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/local.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 167, + "startColumn": 79, + "charOffset": 6507, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 165, + "startColumn": 1, + "charOffset": 6427, + "charLength": 181, + "snippet": { + "text": "\n\nasync def _handle_bash(command: str, timeout: int = 120, workdir: str = None, **kwargs) -> tuple[str, bool]:\n timeout = min(int(timeout), 3600)\n cwd = workdir or os.getcwd()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "61d18662b6dbdd9c", + "equalIndicator/v1": "8f4d2a0abd939ad5d69b56ae7cbbd660d4bff9c4d56653c4aa62b189ec9a5ab3" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/ask_user.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 72, + "startColumn": 5, + "charOffset": 3028, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 70, + "startColumn": 1, + "charOffset": 2976, + "charLength": 141, + "snippet": { + "text": " suggest_mode: str = None,\n session=None,\n **kwargs,\n) -> tuple[str, bool]:\n \"\"\"Emit questions to the UI and wait for answers.\"\"\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "713a043e053605f6", + "equalIndicator/v1": "9134e60a361af99a9bbf2fce36274fa71a038a3963a11c81340744865c288d2e" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'e' value is not used", + "markdown": "Parameter 'e' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_session.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 103, + "startColumn": 26, + "charOffset": 3349, + "charLength": 1, + "snippet": { + "text": "e" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 101, + "startColumn": 1, + "charOffset": 3244, + "charLength": 148, + "snippet": { + "text": " \"\"\"A failing listener must not prevent the event from being queued.\"\"\"\n\n def bad_listener(e):\n raise RuntimeError(\"boom\")\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "3f07d5f6f31d15df", + "equalIndicator/v1": "96510b468bba69161e3c2183c2a7340a845a18da762bc3d566f8d490dfbdae9b" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/compute_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 56, + "startColumn": 71, + "charOffset": 1842, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 54, + "startColumn": 1, + "charOffset": 1770, + "charLength": 146, + "snippet": { + "text": "\n\nasync def _handle_probe(node_name: str, user_id: int = None, db=None, **kwargs):\n \"\"\"Probe a compute node for capabilities.\"\"\"\n if not db:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "313a30ca7504afa9", + "equalIndicator/v1": "9663079a3b752377ebdddea4aa80a174ffeafcbf4747a817699f1b55ff5c50f7" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'required_arg' value is not used", + "markdown": "Parameter 'required_arg' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tool_registry.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 118, + "startColumn": 27, + "charOffset": 3292, + "charLength": 17, + "snippet": { + "text": "required_arg: str" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 116, + "startColumn": 1, + "charOffset": 3210, + "charLength": 152, + "snippet": { + "text": "\n async def test_call_tool_type_error(self, router):\n async def handler(required_arg: str) -> tuple[str, bool]:\n return \"ok\", True\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "b02618216bb2c4a6", + "equalIndicator/v1": "9e2f1cba8060fc061cde4e25f286b9a969d455f22de740bca680f03e8418ae9c" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'self' value is not used", + "markdown": "Parameter 'self' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tasks/compute_tasks.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 50, + "startColumn": 31, + "charOffset": 1605, + "charLength": 4, + "snippet": { + "text": "self" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 48, + "startColumn": 1, + "charOffset": 1531, + "charLength": 181, + "snippet": { + "text": "\n@celery_app.task(bind=True, max_retries=3)\ndef check_compute_node_health(self, node_id: int, user_id: int):\n \"\"\"Check health of a single compute node.\"\"\"\n async def _check():" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "07c15f6bfbd706a4", + "equalIndicator/v1": "9fda32804bc63c271e42b14662f3af847287ffa39cb07169d635c058fc7bc089" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/compute_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 330, + "startColumn": 102, + "charOffset": 11911, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 328, + "startColumn": 1, + "charOffset": 11808, + "charLength": 194, + "snippet": { + "text": "\n\nasync def _handle_sync_down(paths: list, node_name: str, user_id: int = None, db=None, session=None, **kwargs):\n \"\"\"Sync files from remote compute node to local workspace.\"\"\"\n if not db:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "dfca6fc07c5dcc8d", + "equalIndicator/v1": "a508ffd09c9ec32831efdc0ecf6d23b36a8c185ff8f3a55cb6537f0bc8f746b8" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'user_id' value is not used", + "markdown": "Parameter 'user_id' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tasks/agent_tasks.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 67, + "startColumn": 5, + "charOffset": 1827, + "charLength": 12, + "snippet": { + "text": "user_id: int" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 65, + "startColumn": 1, + "charOffset": 1780, + "charLength": 93, + "snippet": { + "text": " job_id: str,\n conversation_id: int,\n user_id: int,\n message: str,\n mode: str," + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "467b133655c85337", + "equalIndicator/v1": "a858a459cb0ead37c26ca38f27b26827159ba6fdc5371accd016e29f27cfa4fa" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'user' value is not used", + "markdown": "Parameter 'user' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/agent.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 475, + "startColumn": 5, + "charOffset": 15578, + "charLength": 38, + "snippet": { + "text": "user: User = Depends(get_current_user)" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 473, + "startColumn": 1, + "charOffset": 15532, + "charLength": 129, + "snippet": { + "text": "async def get_report(\n report_id: str,\n user: User = Depends(get_current_user),\n):\n \"\"\"Get a completion report by ID.\"\"\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4d7da52b6426a5b0", + "equalIndicator/v1": "b02fe3c6e3cd37b875297c12b076823c656e8c46e759b0ce9df1a76986a39d79" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'client' value is not used", + "markdown": "Parameter 'client' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/sandbox/ssh.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 21, + "startColumn": 32, + "charOffset": 590, + "charLength": 6, + "snippet": { + "text": "client" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 19, + "startColumn": 1, + "charOffset": 507, + "charLength": 175, + "snippet": { + "text": " self.actual_fingerprint: str | None = None\n\n def missing_host_key(self, client, hostname, key):\n import paramiko\n actual = key.get_fingerprint().hex()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "3b49c426bf5d50f6", + "equalIndicator/v1": "b15f4209041396b332c4e3c8a89528e910e5134b020cff5800ce1901c2dc4c82" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'user' value is not used", + "markdown": "Parameter 'user' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/agent.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 517, + "startColumn": 5, + "charOffset": 17036, + "charLength": 38, + "snippet": { + "text": "user: User = Depends(get_current_user)" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 515, + "startColumn": 1, + "charOffset": 16989, + "charLength": 129, + "snippet": { + "text": "async def interrupt(\n request: Request,\n user: User = Depends(get_current_user),\n db: AsyncSession = Depends(get_db),\n):" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a0f7c5d022f68247", + "equalIndicator/v1": "b46a76f28afc0472a1c49f50acc391b97633ee444d87085773deca38dbf690ab" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'user' value is not used", + "markdown": "Parameter 'user' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/agent.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 580, + "startColumn": 37, + "charOffset": 19449, + "charLength": 38, + "snippet": { + "text": "user: User = Depends(get_current_user)" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 578, + "startColumn": 1, + "charOffset": 19387, + "charLength": 165, + "snippet": { + "text": "\n@router.post(\"/compact\")\nasync def compact(request: Request, user: User = Depends(get_current_user)):\n active = _sm(request).get_current_session()\n if active:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "89dcee9192f43c24", + "equalIndicator/v1": "bbf629207a133c4492724bc0ffbc36a7c4db4cd4a42c568c27bbba6f0eaa6be6" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'session' value is not used", + "markdown": "Parameter 'session' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/sandbox_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 102, + "startColumn": 42, + "charOffset": 4425, + "charLength": 12, + "snippet": { + "text": "session=None" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 100, + "startColumn": 1, + "charOffset": 4382, + "charLength": 150, + "snippet": { + "text": "\n\nasync def _handle_probe(sandbox_manager, session=None, **kwargs) -> tuple[str, bool]:\n sandbox = sandbox_manager.get_active()\n if not sandbox:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "e96ac1118fd09791", + "equalIndicator/v1": "be72434034f76223d4c3f89925446bf5cfeeae97a8a0b978f75fdd5307197187" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/sandbox_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 200, + "startColumn": 66, + "charOffset": 8419, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 198, + "startColumn": 1, + "charOffset": 8352, + "charLength": 160, + "snippet": { + "text": "\n\nasync def _handle_read(sandbox_manager, path: str, session=None, **kwargs) -> tuple[str, bool]:\n sandbox = sandbox_manager.get_active()\n if not sandbox:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "3aa82d44d47268f7", + "equalIndicator/v1": "c624a60d6d84d853f2170790cb698f4986310883360aa5cba56c43b145ca983a" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/sandbox_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 102, + "startColumn": 56, + "charOffset": 4439, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 100, + "startColumn": 1, + "charOffset": 4382, + "charLength": 150, + "snippet": { + "text": "\n\nasync def _handle_probe(sandbox_manager, session=None, **kwargs) -> tuple[str, bool]:\n sandbox = sandbox_manager.get_active()\n if not sandbox:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "605aa77fd3afb9f7", + "equalIndicator/v1": "c8297c95a30e3b56a8c452c23d44c7873503322fa1ced645fd148df5e7cd0f57" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Local variable 'iteration' value is not used", + "markdown": "Local variable 'iteration' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/research.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 105, + "startColumn": 13, + "charOffset": 3500, + "charLength": 9, + "snippet": { + "text": "iteration" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 103, + "startColumn": 1, + "charOffset": 3478, + "charLength": 176, + "snippet": { + "text": "\n try:\n for iteration in range(MAX_RESEARCH_ITERATIONS):\n # Make LLM call\n result = await LLMProvider.generate(messages, config, research_tools)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "385abbb60ca7d138", + "equalIndicator/v1": "ca72ca34a35f872f010763c802e5ed61d80391acaf0e7d805f8cde31ce785a83" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "hasFixes": true, + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'user' value is not used", + "markdown": "Parameter 'user' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/compute.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 212, + "startColumn": 5, + "charOffset": 6808, + "charLength": 38, + "snippet": { + "text": "user: User = Depends(get_current_user)" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 210, + "startColumn": 1, + "charOffset": 6754, + "charLength": 149, + "snippet": { + "text": "async def test_node_config(\n request: Request,\n user: User = Depends(get_current_user),\n):\n \"\"\"Test connectivity for an unsaved node config." + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "419ef92768a3cdd9", + "equalIndicator/v1": "cace491dfe5fa04dd9e39b08cf001391d8e7200e22c4ea37550449e78b088315" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/local.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 276, + "startColumn": 71, + "charOffset": 10728, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 274, + "startColumn": 1, + "charOffset": 10597, + "charLength": 211, + "snippet": { + "text": "# ── File tools (host filesystem) ─────────────────────────\n\nasync def _handle_read(path: str, offset: int = 1, limit: int = 2000, **kwargs) -> tuple[str, bool]:\n try:\n target = Path(path).expanduser()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "97e6da445ada68a4", + "equalIndicator/v1": "cd9b9b195fc38e2ae7ed71ffd4153af5b339f98b859aa08f84cee8884208b3d0" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/github.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 326, + "startColumn": 28, + "charOffset": 11445, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 324, + "startColumn": 1, + "charOffset": 11387, + "charLength": 153, + "snippet": { + "text": "\nasync def _handle_get_readme(\n owner: str, repo: str, **kwargs\n) -> tuple[str, bool]:\n \"\"\"Get README from a GitHub repository with retry logic.\"\"\"" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4d5b49d9badfb786", + "equalIndicator/v1": "cf0663c694146ccf4a7c5db452105f4994e6014ddbc7fef4771e38a7ab08b933" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Local variable 'cwd' value is not used", + "markdown": "Local variable 'cwd' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_tools_local.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 61, + "startColumn": 9, + "charOffset": 1866, + "charLength": 3, + "snippet": { + "text": "cwd" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 59, + "startColumn": 1, + "charOffset": 1791, + "charLength": 181, + "snippet": { + "text": "class TestValidatePath:\n def test_resolves_relative_path(self):\n cwd = os.getcwd()\n path = Path(\".\", \"test_file.txt\")\n resolved, error = _validate_path(path)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "63f0a914e7deb3c8", + "equalIndicator/v1": "cf635d3afa9e2b5f7cca795edcff4e1da61e0ffad4f3459dc572ea19e1932935" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "hasFixes": true, + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Local variable 'param_count' value is not used", + "markdown": "Local variable 'param_count' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/benchmark_small_models.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 64, + "startColumn": 5, + "charOffset": 1504, + "charLength": 11, + "snippet": { + "text": "param_count" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 62, + "startColumn": 1, + "charOffset": 1433, + "charLength": 240, + "snippet": { + "text": "def get_model_size(model) -> float:\n \"\"\"Get model size in MB\"\"\"\n param_count = sum(p.numel() for p in model.parameters())\n param_size = sum(p.numel() * p.element_size() for p in model.parameters())\n return param_size / (1024**2)" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "2d24d066f304a482", + "equalIndicator/v1": "d09a4d4bb86023ff865d3a48fb28bcab3941a4eec7fc8528f29b0ceef2b8ca6c" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "hasFixes": true, + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Local variable 'q2' value is not used", + "markdown": "Local variable 'q2' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_event_bus.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 32, + "startColumn": 9, + "charOffset": 922, + "charLength": 2, + "snippet": { + "text": "q2" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 30, + "startColumn": 1, + "charOffset": 844, + "charLength": 140, + "snippet": { + "text": " q1 = bus.subscribe()\n assert bus.subscriber_count == 1\n q2 = bus.subscribe()\n assert bus.subscriber_count == 2\n" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4bf2ba19370de7e2", + "equalIndicator/v1": "d1d1f20188925e569e77f349fe50bb1a30bd7f9c393ac847d7fde8ffac2cd900" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "hasFixes": true, + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'request' value is not used", + "markdown": "Parameter 'request' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/agent.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 77, + "startColumn": 23, + "charOffset": 2440, + "charLength": 16, + "snippet": { + "text": "request: Request" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 75, + "startColumn": 1, + "charOffset": 2389, + "charLength": 168, + "snippet": { + "text": "\n@router.get(\"/events/test\")\nasync def events_test(request: Request):\n \"\"\"Test SSE endpoint — sends 3 events then closes. Use to verify SSE works.\"\"\"\n import json" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a35b985147c6435f", + "equalIndicator/v1": "d36dbcda795ea17198649fce33d32d4ee6b636155b232af08f74a666c9ff70b3" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/compute_tools.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 256, + "startColumn": 100, + "charOffset": 8907, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 254, + "startColumn": 1, + "charOffset": 8806, + "charLength": 192, + "snippet": { + "text": "\n\nasync def _handle_sync_up(paths: list, node_name: str, user_id: int = None, db=None, session=None, **kwargs):\n \"\"\"Sync files from local workspace to remote compute node.\"\"\"\n if not db:" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "0f7b523cdc891168", + "equalIndicator/v1": "d8ee0b99be3f9aa0aee2aa25cb6d174ec44d413f8cee69184a4b5a0093c6a8a4" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'user' value is not used", + "markdown": "Parameter 'user' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/routes/agent.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 559, + "startColumn": 5, + "charOffset": 18790, + "charLength": 38, + "snippet": { + "text": "user: User = Depends(get_current_user)" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 557, + "startColumn": 1, + "charOffset": 18737, + "charLength": 143, + "snippet": { + "text": " body: ApprovalRequest,\n request: Request,\n user: User = Depends(get_current_user),\n):\n active = _sm(request).get_current_session()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "831de34996348df8", + "equalIndicator/v1": "e0f3aa6ba516ebc7db4b91c017ef65aa10bef2480eb2cee37fb62225f8df0ee8" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/plan.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 89, + "startColumn": 5, + "charOffset": 3783, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 87, + "startColumn": 1, + "charOffset": 3736, + "charLength": 118, + "snippet": { + "text": " content: str = None,\n session=None,\n **kwargs,\n) -> tuple[str, bool]:\n # Get conversation_id from session" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "f4101b7399aea380", + "equalIndicator/v1": "ea7dafb465701b27603c2f6f85ffe3c6cabdda2d242140d8e119bad48b67d5dd" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Local variable 'q1' value is not used", + "markdown": "Local variable 'q1' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/tests/test_event_bus.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 30, + "startColumn": 9, + "charOffset": 852, + "charLength": 2, + "snippet": { + "text": "q1" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 28, + "startColumn": 1, + "charOffset": 738, + "charLength": 204, + "snippet": { + "text": " def test_subscribe_adds_to_subscribers(self, bus: EventBus):\n assert bus.subscriber_count == 0\n q1 = bus.subscribe()\n assert bus.subscriber_count == 1\n q2 = bus.subscribe()" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "2a88a3d6a5f20bb8", + "equalIndicator/v1": "f8cb925ac235cc3c9cc188c2bac4ebb1f0f4b6208ddfaeb6c4520745f54c8ee4" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "hasFixes": true, + "tags": ["Python"] + } + }, + { + "ruleId": "PyUnusedLocalInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Parameter 'kwargs' value is not used", + "markdown": "Parameter 'kwargs' value is not used" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "backend/openmlr/tools/search.py", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 34, + "startColumn": 58, + "charOffset": 1038, + "charLength": 8, + "snippet": { + "text": "**kwargs" + }, + "sourceLanguage": "Python" + }, + "contextRegion": { + "startLine": 32, + "startColumn": 1, + "charOffset": 979, + "charLength": 197, + "snippet": { + "text": "\n\nasync def _handle_web_search(query: str, count: int = 5, **kwargs) -> tuple[str, bool]:\n \"\"\"Search the web using Brave Search with retry logic.\"\"\"\n api_key = os.environ.get(\"BRAVE_API_KEY\")" + }, + "sourceLanguage": "Python" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "1447e1d07f49e102", + "equalIndicator/v1": "fa7d66ea050d7e82c36258702f2283224f6b7e193d05ea1da0007dd45d390eb1" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": ["Python"] + } + } + ], + "automationDetails": { + "id": "project/qodana/2026-04-27", + "guid": "327973ae-1149-4db7-9aef-12d232b043a5", + "properties": { + "jobUrl": "https://github.com/xprilion/OpenMLR/actions/runs/24982017922", + "analysisKind": "regular" + } + }, + "newlineSequences": ["\r\n", "\n"], + "properties": { + "qodana.coverage.files.provided": false, + "configProfile": "recommended", + "deviceId": "200820300000000-7c6f-e4df-c86a-c7e9d1cfe59f", + "qodanaNewResultSummary": { + "moderate": 309, + "high": 111, + "total": 420 + } + } + } + ] +} diff --git a/backend/openmlr/db/operations.py b/backend/openmlr/db/operations.py index 2ea72a1..7bafae0 100644 --- a/backend/openmlr/db/operations.py +++ b/backend/openmlr/db/operations.py @@ -385,7 +385,7 @@ async def upsert_paper_resource( async def upsert_resource( db: AsyncSession, conv_id: int, resource_id: str, title: str, resource_type: str, - content: str = None, url: str = None, + content: str | None = None, url: str | None = None, ) -> ConversationResource: """Create or update a resource by resource_id.""" existing = await get_resource_by_id(db, resource_id) @@ -478,7 +478,7 @@ async def update_job_status( # ---- User Settings ---- -async def get_user_settings(db: AsyncSession, user_id: int, category: str = None) -> dict: +async def get_user_settings(db: AsyncSession, user_id: int, category: str | None = None) -> dict: """Get user settings as a dict. Optionally filter by category.""" query = select(UserSetting).where(UserSetting.user_id == user_id) if category: diff --git a/backend/openmlr/services/session_manager.py b/backend/openmlr/services/session_manager.py index d59d7b1..825d779 100644 --- a/backend/openmlr/services/session_manager.py +++ b/backend/openmlr/services/session_manager.py @@ -86,11 +86,13 @@ async def get_or_create_session( session = Session(config=config, conversation_id=conversation_id) + # Import here (not at module level) to avoid circular imports + from ..db import operations as ops + # Determine effective compute node effective_node = None if user_id and db: try: - from ..db import operations as ops # Check conversation override conv = await ops.get_conversation_by_id(db, conversation_id) if conv and conv.extra: @@ -130,7 +132,6 @@ async def get_or_create_session( # Load MCP servers from user settings if available if user_id and db: try: - from ..db import operations as ops user_settings = await ops.get_all_settings(db, user_id, category="mcp") mcp_settings = user_settings.get("mcp", {}) mcp_servers = mcp_settings.get("servers", {}) diff --git a/backend/openmlr/tools/compute_tools.py b/backend/openmlr/tools/compute_tools.py index 2d6c0c9..7ccc6b0 100644 --- a/backend/openmlr/tools/compute_tools.py +++ b/backend/openmlr/tools/compute_tools.py @@ -67,6 +67,7 @@ async def _handle_probe(node_name: str, user_id: int = None, db=None, **kwargs): from ..compute import WorkspaceManager from ..sandbox.manager import SandboxManager + sm = None try: wm = WorkspaceManager() sm = SandboxManager(workspace_manager=wm) @@ -115,7 +116,8 @@ async def _handle_probe(node_name: str, user_id: int = None, db=None, **kwargs): except Exception as e: try: - await sm.destroy() + if sm is not None: + await sm.destroy() except Exception: pass await ops.update_compute_node( diff --git a/backend/tests/test_agent_loop.py b/backend/tests/test_agent_loop.py index dab8179..a430bf3 100644 --- a/backend/tests/test_agent_loop.py +++ b/backend/tests/test_agent_loop.py @@ -343,8 +343,6 @@ async def test_cancelled_returns_none(self, mock_session): async def mock_stream(messages, config, tools): yield "Hello" - if False: - yield with patch("openmlr.agent.loop.LLMProvider.generate_stream") as mock_str: mock_str.return_value = mock_stream(None, None, None) diff --git a/qodana.yaml b/qodana.yaml index 9a4826a..66eac95 100644 --- a/qodana.yaml +++ b/qodana.yaml @@ -4,7 +4,11 @@ version: "1.0" linter: jetbrains/qodana-python-community:2025.3 +projectJDK: "python3.12" profile: name: qodana.recommended +bootstrap: | + # Ensure Qodana uses Python 3.12+ for correct type hint inspection (PEP 604, PEP 585) + python3.12 --version 2>/dev/null || python3 --version include: - name: CheckDependencyLicenses From 1e889fb2de073cdcb8476bdf9b100555880d3569 Mon Sep 17 00:00:00 2001 From: xprilion Date: Mon, 27 Apr 2026 15:03:09 +0530 Subject: [PATCH 2/2] fix qodana issues --- .qodana-reports/report-1.json | 30465 -------------------------------- 1 file changed, 30465 deletions(-) delete mode 100644 .qodana-reports/report-1.json diff --git a/.qodana-reports/report-1.json b/.qodana-reports/report-1.json deleted file mode 100644 index 316b6df..0000000 --- a/.qodana-reports/report-1.json +++ /dev/null @@ -1,30465 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/schemastore/schemastore/master/src/schemas/json/sarif-2.1.0-rtm.5.json", - "version": "2.1.0", - "runs": [ - { - "tool": { - "driver": { - "name": "QDPY", - "fullName": "Qodana for Python", - "version": "253.31833", - "rules": [], - "taxa": [ - { - "id": "Pandas", - "name": "Pandas" - }, - { - "id": "EditorConfig", - "name": "EditorConfig" - }, - { - "id": "Python", - "name": "Python" - }, - { - "id": "Shell script", - "name": "Shell script" - }, - { - "id": "XML", - "name": "XML" - }, - { - "id": "YAML", - "name": "YAML" - }, - { - "id": "Proofreading", - "name": "Proofreading" - }, - { - "id": "JSON and JSON5", - "name": "JSON and JSON5" - }, - { - "id": "RegExp", - "name": "RegExp" - }, - { - "id": "Properties files", - "name": "Properties files" - }, - { - "id": "Requirements", - "name": "Requirements" - }, - { - "id": "Markdown", - "name": "Markdown" - }, - { - "id": "HTML", - "name": "HTML" - }, - { - "id": "General", - "name": "General" - }, - { - "id": "Structural search", - "name": "Structural search" - }, - { - "id": "Ini files", - "name": "Ini files" - }, - { - "id": "RELAX NG", - "name": "RELAX NG" - }, - { - "id": "Internationalization", - "name": "Internationalization" - }, - { - "id": "TOML", - "name": "TOML" - }, - { - "id": "Version control", - "name": "Version control" - }, - { - "id": "Qodana", - "name": "Qodana" - } - ], - "language": "en-US", - "contents": ["localizedData", "nonLocalizedData"], - "isComprehensive": false - }, - "extensions": [ - { - "name": "PythonCore", - "version": "253.31833.0", - "rules": [ - { - "id": "PyPandasSeriesToListInspection", - "shortDescription": { - "text": "Method Series.to_list() is recommended" - }, - "fullDescription": { - "text": "Reports redundant 'list' in 'list(Series.values)' statement for pandas and polars libraries. Such 'Series' values extraction can be replaced with the 'to_list()' function call. Example: list(df['column'].values)\n When the quick-fix is applied, the code changes to: df['column'].to_list()\n Inspection ID: PyPandasSeriesToListInspection", - "markdown": "Reports redundant `list` in `list(Series.values)` statement for pandas and polars libraries.\nSuch `Series` values extraction can be replaced with the `to_list()` function call.\n\n**Example:**\n\n```\nlist(df['column'].values)\n```\n\nWhen the quick-fix is applied, the code changes to:\n\n```\ndf['column'].to_list()\n```\n\nInspection ID: PyPandasSeriesToListInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "PyPackages", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Performance" - } - }, - "relationships": [ - { - "target": { - "id": "Pandas", - "index": 0, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PySetFunctionToLiteralInspection", - "shortDescription": { - "text": "Function call can be replaced with set literal" - }, - "fullDescription": { - "text": "Reports calls to the 'set' function that can be replaced with the 'set' literal. Example: 'def do_mult(a, b):\n c = a * b\n return set([c, a, b])' When the quick-fix is applied, the code changes to: 'def do_mult(a, b):\n c = a * b\n return {c, a, b}' Inspection ID: PySetFunctionToLiteralInspection", - "markdown": "Reports calls to the `set` function that can be replaced with\nthe `set` literal.\n\n**Example:**\n\n\n def do_mult(a, b):\n c = a * b\n return set([c, a, b])\n\nWhen the quick-fix is applied, the code changes to:\n\n\n def do_mult(a, b):\n c = a * b\n return {c, a, b}\n\nInspection ID: PySetFunctionToLiteralInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PySetFunctionToLiteral", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyStatementEffectInspection", - "shortDescription": { - "text": "Statement has no effect" - }, - "fullDescription": { - "text": "Reports statements that have no effect. Example: 'class Car:\n def __init__(self, speed=0):\n self.speed = speed\n self.time # has no effect\n\n2 + 3 # has no effect' In this example, you can either add a field 'time' to the 'Car' class or introduce variables for the problematic statements. Inspection ID: PyStatementEffectInspection", - "markdown": "Reports statements that have no effect.\n\n**Example:**\n\n\n class Car:\n def __init__(self, speed=0):\n self.speed = speed\n self.time # has no effect\n\n 2 + 3 # has no effect\n\nIn this example, you can either add a field `time` to the `Car` class or\nintroduce variables for the problematic statements.\n\nInspection ID: PyStatementEffectInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyStatementEffect", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyMandatoryEncodingInspection", - "shortDescription": { - "text": "No encoding specified for file" - }, - "fullDescription": { - "text": "Reports a missing encoding comment in Python 2. Example: 'class Book(object):\n def __init__(self):\n pass' When the quick-fix is applied, the missing comment is added: '# coding=utf-8\nclass Book(object):\n def __init__(self):\n pass' Inspection ID: PyMandatoryEncodingInspection", - "markdown": "Reports a missing encoding comment in Python 2.\n\n**Example:**\n\n\n class Book(object):\n def __init__(self):\n pass\n\nWhen the quick-fix is applied, the missing comment is added:\n\n\n # coding=utf-8\n class Book(object):\n def __init__(self):\n pass\n\nInspection ID: PyMandatoryEncodingInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "PyMandatoryEncoding", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyOverridesInspection", - "shortDescription": { - "text": "Invalid usages of @override decorator" - }, - "fullDescription": { - "text": "Reports when a method decorated with @override doesn't have a matching method in its ancestor classes Example: 'from typing import override\n\nclass Parent:\n def foo(self) -> int:\n return 1\n\n def bar(self, x: str) -> str:\n return x\n\nclass Child(Parent):\n @override\n def foo(self) -> int:\n return 2\n\n @override # Missing super method for override function\n def baz(self) -> int:\n return 1' Inspection ID: PyOverridesInspection", - "markdown": "Reports when a method decorated with @override doesn't have a matching method in its ancestor classes\n\n**Example:**\n\n\n from typing import override\n\n class Parent:\n def foo(self) -> int:\n return 1\n\n def bar(self, x: str) -> str:\n return x\n\n class Child(Parent):\n @override\n def foo(self) -> int:\n return 2\n\n @override # Missing super method for override function\n def baz(self) -> int:\n return 1\n\nInspection ID: PyOverridesInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyOverrides", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyInconsistentIndentationInspection", - "shortDescription": { - "text": "Inconsistent indentation" - }, - "fullDescription": { - "text": "Reports inconsistent indentation in Python source files when, for example, you use a mixture of tabs and spaces in your code. Inspection ID: PyInconsistentIndentationInspection", - "markdown": "Reports inconsistent indentation in Python source files when, for example,\nyou use a mixture of tabs and spaces in your code.\n\nInspection ID: PyInconsistentIndentationInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyInconsistentIndentation", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyAttributeOutsideInitInspection", - "shortDescription": { - "text": "An instance attribute is defined outside `__init__`" - }, - "fullDescription": { - "text": "Reports a problem when instance attribute definition is outside '__init__' method. Example: 'class Book:\n def __init__(self):\n self.author = 'Mark Twain'\n\n def release(self):\n self.year = '1889'' When the quick-fix is applied, the code sample changes to: 'class Book:\n def __init__(self):\n self.year = '1889'\n self.author = 'Mark Twain'\n\n def release(self):\n pass' Inspection ID: PyAttributeOutsideInitInspection", - "markdown": "Reports a problem when instance attribute definition is outside `__init__` method.\n\n**Example:**\n\n\n class Book:\n def __init__(self):\n self.author = 'Mark Twain'\n\n def release(self):\n self.year = '1889'\n\n\nWhen the quick-fix is applied, the code sample changes to:\n\n\n class Book:\n def __init__(self):\n self.year = '1889'\n self.author = 'Mark Twain'\n\n def release(self):\n pass\n\nInspection ID: PyAttributeOutsideInitInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyAttributeOutsideInit", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyTypedDictInspection", - "shortDescription": { - "text": "Invalid TypedDict definition and usages" - }, - "fullDescription": { - "text": "Reports invalid definition and usage of TypedDict. Example: 'from typing import TypedDict\n\n\nclass Movie(TypedDict):\n name: str\n year: int\n rate: int = 10 # Right-hand side values are not supported\n\n def method(self): # Invalid statement in TypedDict\n pass\n\n\nm = Movie(name=\"name\", year=1000, rate=9)\nprint(m[\"director\"]) # There is no the 'director' key in 'Movie'\ndel m[\"name\"] # The 'name' key cannot be deleted\nm[\"year\"] = \"1001\" # Expected 'int', got 'str'' Inspection ID: PyTypedDictInspection", - "markdown": "Reports invalid definition and usage of\n[TypedDict](https://www.python.org/dev/peps/pep-0589/).\n\n**Example:**\n\n\n from typing import TypedDict\n\n\n class Movie(TypedDict):\n name: str\n year: int\n rate: int = 10 # Right-hand side values are not supported\n\n def method(self): # Invalid statement in TypedDict\n pass\n\n\n m = Movie(name=\"name\", year=1000, rate=9)\n print(m[\"director\"]) # There is no the 'director' key in 'Movie'\n del m[\"name\"] # The 'name' key cannot be deleted\n m[\"year\"] = \"1001\" # Expected 'int', got 'str'\n\nInspection ID: PyTypedDictInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyTypedDict", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyPep8Inspection", - "shortDescription": { - "text": "PEP 8 coding style violation" - }, - "fullDescription": { - "text": "Reports violations of the PEP 8 coding style guide by running the bundled pycodestyle.py tool. Inspection ID: PyPep8Inspection", - "markdown": "Reports violations of the [PEP 8 coding style guide](https://www.python.org/dev/peps/pep-0008/) by running the bundled [pycodestyle.py](https://github.com/PyCQA/pycodestyle) tool.\n\nInspection ID: PyPep8Inspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyPep8", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyMissingTypeHintsInspection", - "shortDescription": { - "text": "Missing type hinting for function definition" - }, - "fullDescription": { - "text": "Reports missing type hints for function declaration in one of the two formats: parameter annotations or a type comment. Select the Only when types are known checkbox if you want the inspection check the types collected from runtime or inferred. Inspection ID: PyMissingTypeHintsInspection", - "markdown": "Reports missing type hints for function declaration in\none of the two formats: parameter annotations or a type comment.\n\nSelect the **Only when types are known** checkbox if you want the inspection check\nthe types collected from runtime or inferred.\n\nInspection ID: PyMissingTypeHintsInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "PyMissingTypeHints", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyTupleItemAssignmentInspection", - "shortDescription": { - "text": "Tuple item assignment is prohibited" - }, - "fullDescription": { - "text": "Reports assignments to a tuple item. Example: 't = ('red', 'blue', 'green', 'white')\nt[3] = 'black'' A quick-fix offers to replace the tuple with a list. Inspection ID: PyTupleItemAssignmentInspection", - "markdown": "Reports assignments to a tuple item.\n\n**Example:**\n\n\n t = ('red', 'blue', 'green', 'white')\n t[3] = 'black'\n\nA quick-fix offers to replace the tuple with a list.\n\nInspection ID: PyTupleItemAssignmentInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyTupleItemAssignment", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "OutdatedRequirementInspection", - "shortDescription": { - "text": "Requirement is outdated" - }, - "fullDescription": { - "text": "Reports packages mentioned in requirements files (for example, 'requirements.txt', or 'dependencies' section in 'pyproject.toml' files) which are outdated Inspection ID: OutdatedRequirementInspection", - "markdown": "Reports packages mentioned in requirements files (for example, `requirements.txt`,\nor `dependencies` section in `pyproject.toml` files) which are outdated\n\nInspection ID: OutdatedRequirementInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "OutdatedRequirement", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Unspecified" - } - }, - "relationships": [ - { - "target": { - "id": "Requirements", - "index": 10, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyInitNewSignatureInspection", - "shortDescription": { - "text": "Incompatible signatures of __new__ and __init__" - }, - "fullDescription": { - "text": "Reports incompatible signatures of the '__new__' and '__init__' methods. Example: 'class MyClass(object):\n def __new__(cls, arg1):\n return super().__new__(cls)\n\n def __init__(self):\n pass' If the '__new__' and '__init__' have different arguments, then the 'MyClass' cannot be instantiated. As a fix, the IDE offers to apply the Change Signature refactoring. Inspection ID: PyInitNewSignatureInspection", - "markdown": "Reports incompatible signatures of the `__new__` and `__init__` methods.\n\n**Example:**\n\n\n class MyClass(object):\n def __new__(cls, arg1):\n return super().__new__(cls)\n\n def __init__(self):\n pass\n\nIf the `__new__` and `__init__` have different arguments, then the `MyClass`\ncannot be instantiated.\n\nAs a fix, the IDE offers to apply the Change Signature refactoring.\n\nInspection ID: PyInitNewSignatureInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyInitNewSignature", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyDunderSlotsInspection", - "shortDescription": { - "text": "Invalid usages of classes with '__slots__' definitions" - }, - "fullDescription": { - "text": "Reports invalid usages of a class with '__slots__' definitions. Example when accessing undefined attributes: 'class Foo:\n __slots__ = ['foo', 'bar']\n\n def __init__(self):\n self.x = 3 # error: 'x' is not defined in __slots__' Example of conflicting attributes: 'class A:\n __slots__ = (\"x\",)\n x = 42 # error: conflict with \"x\" listed in __slots__' Example 'slots=True': 'from dataclasses import dataclass\n\n@dataclass(slots=True) # error: __slots__ is also defined in Foo\nclass Foo:\n __slots__ = ['a']' Inspection ID: PyDunderSlotsInspection", - "markdown": "Reports invalid usages of a class with `__slots__` definitions.\n\n**Example when accessing undefined attributes:**\n\n\n class Foo:\n __slots__ = ['foo', 'bar']\n\n def __init__(self):\n self.x = 3 # error: 'x' is not defined in __slots__\n\n**Example of conflicting attributes:**\n\n\n class A:\n __slots__ = (\"x\",)\n x = 42 # error: conflict with \"x\" listed in __slots__\n\n**Example `slots=True`:**\n\n\n from dataclasses import dataclass\n\n @dataclass(slots=True) # error: __slots__ is also defined in Foo\n class Foo:\n __slots__ = ['a']\n\nInspection ID: PyDunderSlotsInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyDunderSlots", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyMissingConstructorInspection", - "shortDescription": { - "text": "Missed call to '__init__' of the super class" - }, - "fullDescription": { - "text": "Reports cases when a call to the 'super' constructor in a class is missed. Example: 'class Fruit:\n def __init__(self):\n pass\n\n\nclass Pear(Fruit):\n def __init__(self):\n pass' The 'Pear' class should have a 'super' call in the '__init__' method. When the quick-fix is applied, the code changes to: 'class Fruit:\n def __init__(self):\n pass\n\n\nclass Pear(Fruit):\n def __init__(self):\n super().__init__()' Inspection ID: PyMissingConstructorInspection", - "markdown": "Reports cases when a call to the `super` constructor in a class is missed.\n\n**Example:**\n\n\n class Fruit:\n def __init__(self):\n pass\n\n\n class Pear(Fruit):\n def __init__(self):\n pass\n\nThe `Pear` class should have a `super` call in the `__init__`\nmethod.\n\nWhen the quick-fix is applied, the code changes to:\n\n\n class Fruit:\n def __init__(self):\n pass\n\n\n class Pear(Fruit):\n def __init__(self):\n super().__init__()\n\nInspection ID: PyMissingConstructorInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyMissingConstructor", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyDefaultArgumentInspection", - "shortDescription": { - "text": "The default argument is mutable" - }, - "fullDescription": { - "text": "Reports a problem when a mutable value as a list or dictionary is detected in a default value for an argument. Default argument values are evaluated only once at function definition time, which means that modifying the default value of the argument will affect all subsequent calls of that function. Example: 'def func(s, cache={}):\n cache[s] = None' When the quick-fix is applied, the code changes to: 'def func(s, cache=None):\n if cache is None:\n cache = {}\n cache[s] = None' Inspection ID: PyDefaultArgumentInspection", - "markdown": "Reports a problem when a mutable value as a list or dictionary is detected in a default value for\nan argument. \n\nDefault argument values are evaluated only once at function definition time,\nwhich means that modifying the\ndefault value of the argument will affect all subsequent calls of that function.\n\n**Example:**\n\n\n def func(s, cache={}):\n cache[s] = None\n\nWhen the quick-fix is applied, the code changes to:\n\n\n def func(s, cache=None):\n if cache is None:\n cache = {}\n cache[s] = None\n\nInspection ID: PyDefaultArgumentInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyDefaultArgument", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyTestUnpassedFixtureInspection", - "shortDescription": { - "text": "Fixture is not requested by test functions" - }, - "fullDescription": { - "text": "Reports if a fixture is used without being passed to test function parameters or to '@pytest.mark.usefixtures' decorator Inspection ID: PyTestUnpassedFixtureInspection", - "markdown": "Reports if a fixture is used without being passed to test function parameters or to `@pytest.mark.usefixtures` decorator\n\nInspection ID: PyTestUnpassedFixtureInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyTestUnpassedFixture", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyTypeAliasRedeclarationInspection", - "shortDescription": { - "text": "Redeclared type alias" - }, - "fullDescription": { - "text": "Reports redeclarations of type aliases. Example: 'type A = int\ntype A = str' Inspection ID: PyTypeAliasRedeclarationInspection", - "markdown": "Reports redeclarations of type aliases.\n\n**Example:**\n\n\n type A = int\n type A = str\n\nInspection ID: PyTypeAliasRedeclarationInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyTypeAliasRedeclaration", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Unspecified" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyShadowingBuiltinsInspection", - "shortDescription": { - "text": "Shadowing built-in names" - }, - "fullDescription": { - "text": "No description available", - "markdown": "No description available" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyShadowingBuiltins", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PySimplifyBooleanCheckInspection", - "shortDescription": { - "text": "Redundant boolean variable check" - }, - "fullDescription": { - "text": "Reports equality comparison with a boolean literal. Example: 'def func(s):\n if s.isdigit() == True:\n return int(s)' With the quick-fix applied, the code fragment will be simplified to: 'def func(s):\n if s.isdigit():\n return int(s)' Inspection ID: PySimplifyBooleanCheckInspection", - "markdown": "Reports equality comparison with a boolean literal.\n\n**Example:**\n\n\n def func(s):\n if s.isdigit() == True:\n return int(s)\n\nWith the quick-fix applied, the code fragment will be simplified to:\n\n\n def func(s):\n if s.isdigit():\n return int(s)\n\nInspection ID: PySimplifyBooleanCheckInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PySimplifyBooleanCheck", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyMethodOverridingInspection", - "shortDescription": { - "text": "Method signature does not match signature of overridden method" - }, - "fullDescription": { - "text": "Reports inconsistencies in overriding method signatures. Example: 'class Book:\n def add_title(self):\n pass\n\n\nclass Novel(Book):\n def add_title(self, text):\n pass' Parameters of the 'add_title' method in the 'Novel' class do not match the method signature specified in the 'Book' class. As a fix, the IDE offers to apply the Change Signature refactoring. Inspection ID: PyMethodOverridingInspection", - "markdown": "Reports inconsistencies in overriding method signatures.\n\n**Example:**\n\n\n class Book:\n def add_title(self):\n pass\n\n\n class Novel(Book):\n def add_title(self, text):\n pass\n\nParameters of the `add_title` method in the `Novel` class do not match the method\nsignature specified in the `Book` class. As a fix, the IDE offers to apply the Change Signature\nrefactoring.\n\nInspection ID: PyMethodOverridingInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyMethodOverriding", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PoetryPackageVersionsInspection", - "shortDescription": { - "text": "Outdated Poetry package versions" - }, - "fullDescription": { - "text": "Reports outdated versions of packages in '[tool.poetry.dependencies]' and '[tool.poetry.dev-dependencies]' sections of 'pyproject.toml'. Inspection ID: PoetryPackageVersionsInspection", - "markdown": "Reports outdated versions of packages in `[tool.poetry.dependencies]` and `[tool.poetry.dev-dependencies]`\nsections of `pyproject.toml`.\n\nInspection ID: PoetryPackageVersionsInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PoetryPackageVersions", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyTestParametrizedInspection", - "shortDescription": { - "text": "Incorrect arguments in @pytest.mark.parametrize" - }, - "fullDescription": { - "text": "Reports functions that are decorated with @pytest.mark.parametrize but do not have arguments to accept parameters of the decorator. Inspection ID: PyTestParametrizedInspection", - "markdown": "Reports functions that are decorated with [@pytest.mark.parametrize](https://docs.pytest.org/en/stable/parametrize.html) but do not have arguments to accept\nparameters of the decorator.\n\nInspection ID: PyTestParametrizedInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyTestParametrized", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyDecoratorInspection", - "shortDescription": { - "text": "Class-specific decorator is used outside the class" - }, - "fullDescription": { - "text": "Reports usages of '@classmethod' or '@staticmethod' decorators in methods outside a class. Example: 'class State(object):\n\n @classmethod\n def my_state(cls, name):\n cls.name = name\n\n\n@classmethod\ndef change_state(self):\n pass' The 'change_state' method should not use the '@classmethod' decorator or it should be moved to the 'State' class declaration. If you apply the 'Remove decorator' action, the code changes to: 'class State(object):\n\n @classmethod\n def my_state(cls, name):\n cls.name = name\n\n\ndef change_state(self):\n pass' Inspection ID: PyDecoratorInspection", - "markdown": "Reports usages of `@classmethod` or `@staticmethod` decorators\nin methods outside a class.\n\n**Example:**\n\n\n class State(object):\n\n @classmethod\n def my_state(cls, name):\n cls.name = name\n\n\n @classmethod\n def change_state(self):\n pass\n\nThe `change_state` method should not use the `@classmethod` decorator or it should be\nmoved to the `State` class declaration.\n\nIf you apply the `Remove decorator` action, the code changes to:\n\n\n class State(object):\n\n @classmethod\n def my_state(cls, name):\n cls.name = name\n\n\n def change_state(self):\n pass\n\nInspection ID: PyDecoratorInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyDecorator", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyAsyncCallInspection", - "shortDescription": { - "text": "Missing `await` syntax in coroutine calls" - }, - "fullDescription": { - "text": "Reports coroutines that were called without using the 'await' syntax. Example: 'async def bar():\n pass\n\n\nasync def foo():\n bar()' After the quick-fix is applied, the code changes to: 'async def bar():\n pass\n\n\nasync def foo():\n await bar()' Inspection ID: PyAsyncCallInspection", - "markdown": "Reports coroutines that were called\nwithout using the `await` syntax.\n\n**Example:**\n\n\n async def bar():\n pass\n\n\n async def foo():\n bar()\n\nAfter the quick-fix is applied, the code changes to:\n\n\n async def bar():\n pass\n\n\n async def foo():\n await bar()\n\nInspection ID: PyAsyncCallInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyAsyncCall", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyComparisonWithNoneInspection", - "shortDescription": { - "text": "Using equality operators to compare with None" - }, - "fullDescription": { - "text": "Reports comparisons with 'None'. That type of comparisons should always be done with 'is' or 'is not', never the equality operators. Example: 'a = 2\n\n\nif a == None:\n print(\"Success\")' Once the quick-fix is applied, the code changes to: 'a = 2\n\n\nif a is None:\n print(\"Success\")' Inspection ID: PyComparisonWithNoneInspection", - "markdown": "Reports comparisons with `None`. That type of comparisons\nshould always be done with `is` or `is not`, never\nthe equality operators.\n\n**Example:**\n\n\n a = 2\n\n\n if a == None:\n print(\"Success\")\n\nOnce the quick-fix is applied, the code changes to:\n\n\n a = 2\n\n\n if a is None:\n print(\"Success\")\n\nInspection ID: PyComparisonWithNoneInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyComparisonWithNone", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "CommandLineInspection", - "shortDescription": { - "text": "Incorrect CLI syntax" - }, - "fullDescription": { - "text": "Reports the problems if the arguments of the command you type in the console are not in the proper order. The inspection also verifies that option names and arguments are correct. Do not disable the inspection if you are going to use command-line interfaces like manage.py in Django. Inspection ID: CommandLineInspection", - "markdown": "Reports the problems if the arguments of the command you type in the console are not in the proper order. The inspection also verifies\nthat option names and arguments are correct.\n\nDo not disable the inspection if you are going to use command-line interfaces like [manage.py in Django](https://www.jetbrains.com/help/pycharm/running-manage-py.html).\n\nInspection ID: CommandLineInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "CommandLineInspection", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyCallingNonCallableInspection", - "shortDescription": { - "text": "Attempt to call a non-callable object" - }, - "fullDescription": { - "text": "Reports a problem when you are trying to call objects that are not callable, like, for example, properties: Example: 'class Record:\n @property\n def as_json(self):\n\njson = Record().as_json()' Inspection ID: PyCallingNonCallableInspection", - "markdown": "Reports a problem when you are trying\nto call objects that are not callable, like, for example, properties:\n\n**Example:**\n\n\n class Record:\n @property\n def as_json(self):\n\n json = Record().as_json()\n\nInspection ID: PyCallingNonCallableInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyCallingNonCallable", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyUnreachableCodeInspection", - "shortDescription": { - "text": "Unreachable code" - }, - "fullDescription": { - "text": "Reports code fragments that cannot be normally reached. Example: 'if True:\n print('Yes')\nelse:\n print('No')' As a fix, you might want to check and modify the algorithm to ensure it implements the expected logic. Inspection ID: PyUnreachableCodeInspection", - "markdown": "Reports code fragments that cannot be normally reached.\n\n**Example:**\n\n\n if True:\n print('Yes')\n else:\n print('No')\n\nAs a fix, you might want to check and modify the algorithm to ensure it implements\nthe expected logic.\n\nInspection ID: PyUnreachableCodeInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyUnreachableCode", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyAssertTypeInspection", - "shortDescription": { - "text": "typing.assert_type" - }, - "fullDescription": { - "text": "Checks 'typing.assert_type(val, typ, /)' calls and reports cases when 'val''s inferred type is not 'typ'. Example: 'def greet(name: str) -> None:\n assert_type(name, str) # OK\n assert_type(name, int) # Expected type 'int', got 'str' instead' Inspection ID: PyAssertTypeInspection", - "markdown": "Checks `typing.assert_type(val, typ, /)` calls and reports cases when `val`'s inferred type is not\n`typ`.\n\n**Example:**\n\n\n def greet(name: str) -> None:\n assert_type(name, str) # OK\n assert_type(name, int) # Expected type 'int', got 'str' instead\n\nInspection ID: PyAssertTypeInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyAssertType", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Unspecified" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyChainedComparisonsInspection", - "shortDescription": { - "text": "Too complex chained comparisons" - }, - "fullDescription": { - "text": "Reports chained comparisons that can be simplified. Example: 'def do_comparison(x):\n xmin = 10\n xmax = 100\n if x >= xmin and x <= xmax:\n pass' The IDE offers to simplify 'if x >= xmin and x <= xmax'. When the quick-fix is applied, the code changes to: 'def do_comparison(x):\n xmin = 10\n xmax = 100\n if xmin <= x <= xmax:\n pass' Inspection ID: PyChainedComparisonsInspection", - "markdown": "Reports chained comparisons that can be simplified.\n\n**Example:**\n\n\n def do_comparison(x):\n xmin = 10\n xmax = 100\n if x >= xmin and x <= xmax:\n pass\n\nThe IDE offers to simplify `if x >= xmin and x <= xmax`.\nWhen the quick-fix is applied, the code changes to:\n\n\n def do_comparison(x):\n xmin = 10\n xmax = 100\n if xmin <= x <= xmax:\n pass\n\nInspection ID: PyChainedComparisonsInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyChainedComparisons", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyMethodParametersInspection", - "shortDescription": { - "text": "Improper first parameter" - }, - "fullDescription": { - "text": "Reports methods that lack the first parameter that is usually named 'self'. Example: 'class Movie:\n\n def show():\n pass' When the quick-fix is applied, the code changes to: 'class Movie:\n\n def show(self):\n pass' The inspection also reports naming issues in class methods. Example: 'class Movie:\n @classmethod\n def show(abc):\n pass' Since the first parameter of a class method should be 'cls', the IDE provides a quick-fix to rename it. Inspection ID: PyMethodParametersInspection", - "markdown": "Reports methods that lack the first parameter that is usually\nnamed `self`.\n\n**Example:**\n\n\n class Movie:\n\n def show():\n pass\n\nWhen the quick-fix is applied, the code changes to:\n\n\n class Movie:\n\n def show(self):\n pass\n\nThe inspection also reports naming issues in class methods.\n\n**Example:**\n\n\n class Movie:\n @classmethod\n def show(abc):\n pass\n\nSince the first parameter of a class method should be `cls`, the IDE provides a quick-fix\nto rename it.\n\nInspection ID: PyMethodParametersInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyMethodParameters", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyDocstringTypesInspection", - "shortDescription": { - "text": "Type in docstring does not match inferred type" - }, - "fullDescription": { - "text": "Reports types in docstring that do not match dynamically inferred types. Inspection ID: PyDocstringTypesInspection", - "markdown": "Reports types in docstring that do not match dynamically inferred types.\n\nInspection ID: PyDocstringTypesInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyDocstringTypes", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyCompatibilityInspection", - "shortDescription": { - "text": "Code is incompatible with specific Python versions" - }, - "fullDescription": { - "text": "Reports incompatibility with the specified versions of Python. Enable this inspection if you need your code to be compatible with a range of Python versions, for example, if you are building a library. To define the range of the inspected Python versions, select the corresponding checkboxes in the Options section. For more information about the Python versions supported by the IDE, see the web help. Inspection ID: PyCompatibilityInspection", - "markdown": "Reports incompatibility with the specified versions of Python.\nEnable this inspection if you need your code to be compatible with a range of Python versions, for example,\nif you are building a library.\n\nTo define the range of the inspected Python versions, select the corresponding checkboxes in the **Options**\nsection.\n\nFor more information about the Python versions supported by the IDE, see the\n[web help](https://www.jetbrains.com/help/pycharm/python.html#support).\n\nInspection ID: PyCompatibilityInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "PyCompatibility", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyGlobalUndefinedInspection", - "shortDescription": { - "text": "Global variable is not defined at the module level" - }, - "fullDescription": { - "text": "Reports problems when a variable defined through the 'global' statement is not defined in the module scope. Example: 'def foo():\n global bar\n print(bar)\n\nfoo()' As a fix, you can move the global variable declaration: 'global bar\n\n\ndef foo():\n print(bar)' Inspection ID: PyGlobalUndefinedInspection", - "markdown": "Reports problems when a variable defined through the `global`\nstatement is not defined in the module scope.\n\n**Example:**\n\n\n def foo():\n global bar\n print(bar)\n\n foo()\n\nAs a fix, you can move the global variable declaration:\n\n\n global bar\n\n\n def foo():\n print(bar)\n\nInspection ID: PyGlobalUndefinedInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyGlobalUndefined", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "UnsatisfiedRequirementInspection", - "shortDescription": { - "text": "Requirement is not satisfied" - }, - "fullDescription": { - "text": "Reports packages mentioned in requirements files (for example, 'requirements.txt', or 'dependencies' section in 'pyproject.toml' files) but not installed, or imported but not mentioned in requirements files. Inspection ID: UnsatisfiedRequirementInspection", - "markdown": "Reports packages mentioned in requirements files (for example, `requirements.txt`, or `dependencies` section in `pyproject.toml` files) but not installed,\nor imported but not mentioned in requirements files.\n\nInspection ID: UnsatisfiedRequirementInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "UnsatisfiedRequirement", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "Requirements", - "index": 10, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyMethodFirstArgAssignmentInspection", - "shortDescription": { - "text": "First argument of the method is reassigned" - }, - "fullDescription": { - "text": "Reports cases when the first parameter, such as 'self' or 'cls', is reassigned in a method. Because in most cases, there are no objectives in such reassignment, the IDE indicates an error. Example: 'class Account:\n def calc(self, balance):\n if balance == 0:\n self = balance\n return self' As a fix, you might want to check and modify the algorithm to ensure that reassignment is needed. If everything is correct, you can invoke intention actions for this code and opt to ignore the warning. Inspection ID: PyMethodFirstArgAssignmentInspection", - "markdown": "Reports cases when the first parameter,\nsuch as `self` or `cls`, is reassigned in a method.\nBecause in most cases, there are no objectives in such reassignment, the\nIDE indicates an error.\n\n**Example:**\n\n\n class Account:\n def calc(self, balance):\n if balance == 0:\n self = balance\n return self\n\nAs a fix, you might want to check and modify the algorithm to ensure that reassignment is needed. If everything is correct,\nyou can invoke intention actions for this code and opt to ignore the warning.\n\nInspection ID: PyMethodFirstArgAssignmentInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyMethodFirstArgAssignment", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyNewStyleGenericSyntaxInspection", - "shortDescription": { - "text": "Invalid usage of new-style type parameters and type aliases" - }, - "fullDescription": { - "text": "Reports invalid usage of PEP 695 type parameter syntax Finds the following problems in function and class definitions and new-style type alias statements: Extending typing.Generic in new-style generic classes Extending parameterized typing.Protocol in new-style generic classes Using generic upper bounds and constraints with type parameters for ParamSpec and TypeVarTuple Mixing traditional and new-style type variables Using traditional type variables in new-style type aliases Examples: 'from typing import Generic\n\n class Example[T](Generic[T]): ... # Classes with type parameter list should not extend 'Generic'' 'class Example[T: (list[S], str)]: ... # Generic types are not allowed inside constraints and bounds of type parameters' 'from typing import TypeVar\n\n K = TypeVar(\"K\")\n\n class ClassC[V]:\n def method2[M](self, a: M, b: K) -> M | K: ... # Mixing traditional and new-style TypeVars is not allowed' Inspection ID: PyNewStyleGenericSyntaxInspection", - "markdown": "Reports invalid usage of [PEP 695](https://www.python.org/dev/peps/pep-0695/) type parameter syntax\n\n\nFinds the following problems in function and class definitions and new-style type alias statements:\n\n* Extending typing.Generic in new-style generic classes\n* Extending parameterized typing.Protocol in new-style generic classes\n* Using generic upper bounds and constraints with type parameters for ParamSpec and TypeVarTuple\n* Mixing traditional and new-style type variables\n* Using traditional type variables in new-style type aliases\n\n\nExamples:\n\n\n from typing import Generic\n\n class Example[T](Generic[T]): ... # Classes with type parameter list should not extend 'Generic'\n\n\n class Example[T: (list[S], str)]: ... # Generic types are not allowed inside constraints and bounds of type parameters\n\n\n from typing import TypeVar\n\n K = TypeVar(\"K\")\n\n class ClassC[V]:\n def method2[M](self, a: M, b: K) -> M | K: ... # Mixing traditional and new-style TypeVars is not allowed\n\nInspection ID: PyNewStyleGenericSyntaxInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyNewStyleGenericSyntax", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyProtocolInspection", - "shortDescription": { - "text": "Invalid protocol definitions and usages" - }, - "fullDescription": { - "text": "Reports invalid definitions and usages of protocols introduced in PEP-544. Example: 'from typing import Protocol\n\n\nclass MyProtocol(Protocol):\n def method(self, p: int) -> str:\n pass\n\n\nclass MyClass(MyProtocol):\n def method(self, p: str) -> int: # Type of 'method' is not compatible with 'MyProtocol'\n pass\n\n\nclass MyAnotherProtocol(MyClass, Protocol): # All bases of a protocol must be protocols\n pass' Inspection ID: PyProtocolInspection", - "markdown": "Reports invalid definitions and usages of protocols introduced in\n[PEP-544](https://www.python.org/dev/peps/pep-0544/).\n\n**Example:**\n\n\n from typing import Protocol\n\n\n class MyProtocol(Protocol):\n def method(self, p: int) -> str:\n pass\n\n\n class MyClass(MyProtocol):\n def method(self, p: str) -> int: # Type of 'method' is not compatible with 'MyProtocol'\n pass\n\n\n class MyAnotherProtocol(MyClass, Protocol): # All bases of a protocol must be protocols\n pass\n\nInspection ID: PyProtocolInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyProtocol", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyTypeHintsInspection", - "shortDescription": { - "text": "Invalid type hints definitions and usages" - }, - "fullDescription": { - "text": "Reports invalid usages of type hints. Example: 'from typing import TypeVar\n\nT0 = TypeVar('T1') # Argument of 'TypeVar' must be 'T0'\n\n\ndef b(p: int) -> int: # Type specified both in a comment and annotation\n # type: (int) -> int\n pass\n\n\ndef c(p1, p2): # Type signature has too many arguments\n # type: (int) -> int\n pass' Available quick-fixes offer various actions. You can rename, remove, or move problematic elements. You can also manually modify type declarations to ensure no warning is shown. Inspection ID: PyTypeHintsInspection", - "markdown": "Reports invalid usages of type hints.\n\n**Example:**\n\n\n from typing import TypeVar\n\n T0 = TypeVar('T1') # Argument of 'TypeVar' must be 'T0'\n\n\n def b(p: int) -> int: # Type specified both in a comment and annotation\n # type: (int) -> int\n pass\n\n\n def c(p1, p2): # Type signature has too many arguments\n # type: (int) -> int\n pass\n\nAvailable quick-fixes offer various actions. You can rename, remove, or move problematic elements. You can also manually modify type declarations to ensure no warning is shown.\n\nInspection ID: PyTypeHintsInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyTypeHints", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyMethodMayBeStaticInspection", - "shortDescription": { - "text": "Method is not declared static" - }, - "fullDescription": { - "text": "Reports any methods that do not require a class instance creation and can be made static. Example: 'class MyClass(object):\n def my_method(self, x):\n print(x)' If a Make function from method quick-fix is applied, the code changes to: 'def my_method(x):\n print(x)\n\n\nclass MyClass(object):\n pass' If you select the Make method static quick-fix, the '@staticmethod' decorator is added: 'class MyClass(object):\n @staticmethod\n def my_method(x):\n print(x)' Inspection ID: PyMethodMayBeStaticInspection", - "markdown": "Reports any methods that do not require a class instance creation and can be\nmade static.\n\n**Example:**\n\n\n class MyClass(object):\n def my_method(self, x):\n print(x)\n\nIf a **Make function from method** quick-fix is applied, the code changes to:\n\n\n def my_method(x):\n print(x)\n\n\n class MyClass(object):\n pass\n\nIf you select the **Make method static** quick-fix, the `@staticmethod` decorator is added:\n\n\n class MyClass(object):\n @staticmethod\n def my_method(x):\n print(x)\n\nInspection ID: PyMethodMayBeStaticInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyMethodMayBeStatic", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Performance" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyTupleAssignmentBalanceInspection", - "shortDescription": { - "text": "Tuple assignment balance is incorrect" - }, - "fullDescription": { - "text": "Reports cases when the number of expressions on the right-hand side and targets on the left-hand side are not the same. Example: 't = ('red', 'blue', 'green', 'white')\n(c1, c2, c3) = t' As a quick-fix, you can modify the highlighted code fragment to restore the tuple balance. Inspection ID: PyTupleAssignmentBalanceInspection", - "markdown": "Reports cases when the number of expressions on the right-hand side\nand targets on the left-hand side are not the same.\n\n**Example:**\n\n\n t = ('red', 'blue', 'green', 'white')\n (c1, c2, c3) = t\n\nAs a quick-fix, you can modify the highlighted code fragment to restore the tuple\nbalance.\n\nInspection ID: PyTupleAssignmentBalanceInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyTupleAssignmentBalance", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyClassHasNoInitInspection", - "shortDescription": { - "text": "Class has no `__init__` method" - }, - "fullDescription": { - "text": "Reports cases in Python 2 when a class has no '__init__' method, neither its parent classes. Example: 'class Book():\n pass' The quick-fix adds the '__init__' method: 'class Book():\n def __init__(self):\n pass' Inspection ID: PyClassHasNoInitInspection", - "markdown": "Reports cases in Python 2 when a class has no `__init__` method, neither its parent\nclasses.\n\n**Example:**\n\n\n class Book():\n pass\n\nThe quick-fix adds the `__init__` method:\n\n\n class Book():\n def __init__(self):\n pass\n\nInspection ID: PyClassHasNoInitInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyClassHasNoInit", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyArgumentEqualDefaultInspection", - "shortDescription": { - "text": "The function argument is equal to the default parameter value" - }, - "fullDescription": { - "text": "Reports a problem when an argument passed to the function is equal to the default parameter value. This inspection is disabled by default to avoid performance degradation. Example: 'def my_function(a: int = 2):\n print(a)\n\n\nmy_function(2)' Inspection ID: PyArgumentEqualDefaultInspection", - "markdown": "Reports a problem when an argument\npassed to the function is equal to the default parameter value.\n\nThis inspection is disabled by default to avoid performance degradation.\n\n**Example:**\n\n\n def my_function(a: int = 2):\n print(a)\n\n\n my_function(2)\n\nInspection ID: PyArgumentEqualDefaultInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "PyArgumentEqualDefault", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Performance" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyClassVarInspection", - "shortDescription": { - "text": "Invalid usage of ClassVar variables" - }, - "fullDescription": { - "text": "Reports invalid usages of ClassVar annotations. Example: 'from typing import ClassVar\n\n\nclass Cat:\n color: ClassVar[str] = \"white\"\n weight: int\n\n def __init__(self, weight: int):\n self.weight = weight\n\n\nCat.color = \"black\" # OK\nmy_cat = Cat(5)\nmy_cat.color = \"gray\" # Error, setting class variable on instance' Inspection ID: PyClassVarInspection", - "markdown": "Reports invalid usages of [ClassVar](https://docs.python.org/3/library/typing.html#typing.ClassVar) annotations.\n\n**Example:**\n\n\n from typing import ClassVar\n\n\n class Cat:\n color: ClassVar[str] = \"white\"\n weight: int\n\n def __init__(self, weight: int):\n self.weight = weight\n\n\n Cat.color = \"black\" # OK\n my_cat = Cat(5)\n my_cat.color = \"gray\" # Error, setting class variable on instance\n\nInspection ID: PyClassVarInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyClassVar", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyDictCreationInspection", - "shortDescription": { - "text": "Dictionary creation can be rewritten by dictionary literal" - }, - "fullDescription": { - "text": "Reports situations when you can rewrite dictionary creation by using a dictionary literal. This approach brings performance improvements. Example: 'dic = {}\ndic['var'] = 1' When the quick-fix is applied, the code changes to: 'dic = {'var': 1}' Inspection ID: PyDictCreationInspection", - "markdown": "Reports situations when you can rewrite dictionary creation\nby using a dictionary literal.\n\nThis approach brings performance improvements.\n\n**Example:**\n\n\n dic = {}\n dic['var'] = 1\n\nWhen the quick-fix is applied, the code changes to:\n\n\n dic = {'var': 1}\n\nInspection ID: PyDictCreationInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyDictCreation", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Performance" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyStringFormatInspection", - "shortDescription": { - "text": "Errors in string formatting operations" - }, - "fullDescription": { - "text": "Reports errors in string formatting operations. Example 1: '\"Hello {1}\".format(\"people\")' Example 2: 'def bar():\n return 1\n\n\n\"%s %s\" % bar()' As a fix, you need to rewrite string formatting fragments to adhere to the formatting syntax. Inspection ID: PyStringFormatInspection", - "markdown": "Reports errors in string formatting operations.\n\n**Example 1:**\n\n\n \"Hello {1}\".format(\"people\")\n\n**Example 2:**\n\n\n def bar():\n return 1\n\n\n \"%s %s\" % bar()\n\nAs a fix, you need to rewrite string formatting fragments to\nadhere to the [formatting syntax](https://docs.python.org/3/library/string.html#format-string-syntax).\n\nInspection ID: PyStringFormatInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyStringFormat", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyExceptionInheritInspection", - "shortDescription": { - "text": "Exceptions do not inherit from standard 'Exception' class" - }, - "fullDescription": { - "text": "Reports cases when a custom exception class is raised but does not inherit from the builtin Exception class. Example: 'class A:\n pass\n\n\ndef me_exception():\n raise A()' The proposed quick-fix changes the code to: 'class A(Exception):\n pass\n\n\ndef me_exception():\n raise A()' Inspection ID: PyExceptionInheritInspection", - "markdown": "Reports cases when a custom exception class is\nraised but does not inherit from the\n[builtin Exception class](https://docs.python.org/3/library/exceptions.html).\n\n**Example:**\n\n\n class A:\n pass\n\n\n def me_exception():\n raise A()\n\nThe proposed quick-fix changes the code to:\n\n\n class A(Exception):\n pass\n\n\n def me_exception():\n raise A()\n\nInspection ID: PyExceptionInheritInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyExceptionInherit", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyAssignmentToLoopOrWithParameterInspection", - "shortDescription": { - "text": "Assignments to 'for' loop or 'with' statement parameter" - }, - "fullDescription": { - "text": "Reports the cases when you rewrite a loop variable with an inner loop. Example: 'for i in range(5):\n for i in range(20, 25):\n print(\"Inner\", i)\n print(\"Outer\", i)' It also warns you if a variable declared in the 'with' statement is redeclared inside the statement body: 'with open(\"file\") as f:\n f.read()\n with open(\"file\") as f:' Inspection ID: PyAssignmentToLoopOrWithParameterInspection", - "markdown": "Reports the cases when you rewrite a loop variable with an inner loop.\n\n**Example:**\n\n\n for i in range(5):\n for i in range(20, 25):\n print(\"Inner\", i)\n print(\"Outer\", i)\n \nIt also warns you if a variable declared in the `with` statement is redeclared inside the statement body:\n\n\n with open(\"file\") as f:\n f.read()\n with open(\"file\") as f:\n \nInspection ID: PyAssignmentToLoopOrWithParameterInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyAssignmentToLoopOrWithParameter", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyInconsistentReturnsInspection", - "shortDescription": { - "text": "Inconsistent return statements" - }, - "fullDescription": { - "text": "Highlights inconsistent return statements in functions. According to PEP8, either all return statements in a function should return an expression, or none of them should. PEP8's recommendation: Either all return statements in a function should return an expression, or none of them should. If any return statement returns an expression, any return statements where no value is returned should explicitly state this as return None, and an explicit return statement should be present at the end of the function (if reachable): '# Correct:\n\ndef foo(x):\n if x >= 0:\n return math.sqrt(x)\n else:\n return None\n\ndef bar(x):\n if x < 0:\n return None\n return math.sqrt(x)' '# Wrong:\n\ndef foo(x):\n if x >= 0:\n return math.sqrt(x)\n\ndef bar(x):\n if x < 0:\n return\n return math.sqrt(x)' Inspection ID: PyInconsistentReturnsInspection", - "markdown": "Highlights inconsistent return statements in functions. According to PEP8, either all return statements in a function should return an expression, or none of them should.\n\n\nPEP8's recommendation:\nEither all return statements in a function should return an expression, or none of them should.\nIf any return statement returns an expression, any return statements where no value is returned\nshould explicitly state this as return None, and an explicit return statement should be present\nat the end of the function (if reachable):\n\n\n # Correct:\n\n def foo(x):\n if x >= 0:\n return math.sqrt(x)\n else:\n return None\n\n def bar(x):\n if x < 0:\n return None\n return math.sqrt(x)\n\n\n # Wrong:\n\n def foo(x):\n if x >= 0:\n return math.sqrt(x)\n\n def bar(x):\n if x < 0:\n return\n return math.sqrt(x)\n\nInspection ID: PyInconsistentReturnsInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyInconsistentReturns", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Unspecified" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyFromFutureImportInspection", - "shortDescription": { - "text": "Improper position of from __future__ import" - }, - "fullDescription": { - "text": "Reports 'from __future__ import' statements that are used not at the beginning of a file. Example: 'a = 1\nfrom __future__ import print_function\nprint()' When the quick-fix is applied, the code changes to: 'from __future__ import print_function\n\na = 1\nprint()' Inspection ID: PyFromFutureImportInspection", - "markdown": "Reports `from __future__ import`\nstatements that are used not at\nthe beginning of a file.\n\n**Example:**\n\n\n a = 1\n from __future__ import print_function\n print()\n\nWhen the quick-fix is applied, the code changes to:\n\n\n from __future__ import print_function\n\n a = 1\n print()\n\nInspection ID: PyFromFutureImportInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyFromFutureImport", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyUnresolvedReferencesInspection", - "shortDescription": { - "text": "Unresolved references" - }, - "fullDescription": { - "text": "Reports references in your code that cannot be resolved. In a dynamically typed language, this is possible in a limited number of cases. If a reference type is unknown, then its attributes are not highlighted as unresolved even if you know that they should be: 'def print_string(s):\n print(s.abc())' In this code fragment 's' is always a string and 'abc' should be highlighted as unresolved. However, 's' type is inferred as 'Any' and no warning is reported. The IDE provides quick-fix actions to add missing references on-the-fly. Inspection ID: PyUnresolvedReferencesInspection", - "markdown": "Reports references in your code that cannot be resolved.\n\nIn a dynamically typed language, this is possible in a limited number of cases.\n\nIf a reference type is unknown, then its attributes are not highlighted as unresolved even if you know that they should be:\n\n\n def print_string(s):\n print(s.abc())\n\nIn this code fragment `s` is always a string and `abc` should be highlighted as unresolved. However, `s`\ntype is inferred as `Any` and no warning is reported.\n\nThe IDE provides quick-fix actions to add missing references on-the-fly.\n\nInspection ID: PyUnresolvedReferencesInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "PyUnresolvedReferences", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PySuperArgumentsInspection", - "shortDescription": { - "text": "Wrong arguments to call super" - }, - "fullDescription": { - "text": "Reports cases when any call to 'super(A, B)' does not meet the following requirements: 'B' is an instance of 'A' 'B' a subclass of 'A' Example: 'class Figure:\n def color(self):\n pass\n\n\nclass Rectangle(Figure):\n def color(self):\n pass\n\n\nclass Square(Figure):\n def color(self):\n return super(Rectangle, self).color() # Square is not an instance or subclass of Rectangle' As a fix, you can make the 'Square' an instance of the 'Rectangle' class. Inspection ID: PySuperArgumentsInspection", - "markdown": "Reports cases when any call to `super(A, B)` does not meet the\nfollowing requirements:\n\n* `B` is an instance of `A`\n* `B` a subclass of `A`\n\n**Example:**\n\n\n class Figure:\n def color(self):\n pass\n\n\n class Rectangle(Figure):\n def color(self):\n pass\n\n\n class Square(Figure):\n def color(self):\n return super(Rectangle, self).color() # Square is not an instance or subclass of Rectangle\n\nAs a fix, you can make the `Square` an instance of the `Rectangle` class.\n\nInspection ID: PySuperArgumentsInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PySuperArguments", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyPackageRequirementsInspection", - "shortDescription": { - "text": "Unsatisfied package requirements" - }, - "fullDescription": { - "text": "Reports packages mentioned in requirements files (for example, 'requirements.txt' or 'Pipfile') but not installed, or imported but not mentioned in requirements files. The IDE shows a quick-fix banner so that you can install the missing packages in one click. Inspection ID: PyPackageRequirementsInspection", - "markdown": "Reports packages mentioned in requirements files (for example, `requirements.txt` or `Pipfile`) but not installed,\nor imported but not mentioned in requirements files.\n\n\nThe IDE shows a quick-fix banner so that you can install the missing packages in one click.\n\nInspection ID: PyPackageRequirementsInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyPackageRequirements", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyNonAsciiCharInspection", - "shortDescription": { - "text": "File contains non-ASCII character" - }, - "fullDescription": { - "text": "Reports cases in Python 2 when a file contains non-ASCII characters and does not have an encoding declaration at the top. Example: 'class A(object):\n# №5\n def __init__(self):\n pass' In this example, the IDE reports a non-ASCII symbol in a comment and a lack of encoding declaration. Apply the proposed quick-fix to add a missing encoding declaration: '# coding=utf-8\nclass A(object)\n# №5\n def __init__(self):\n pass' Inspection ID: PyNonAsciiCharInspection", - "markdown": "Reports cases in Python 2 when a file contains non-ASCII characters and does not\nhave an encoding declaration at the top.\n\n**Example:**\n\n\n class A(object):\n # №5\n def __init__(self):\n pass\n\nIn this example, the IDE reports a non-ASCII symbol in a comment and a lack of encoding\ndeclaration. Apply the proposed quick-fix to add a missing encoding declaration:\n\n\n # coding=utf-8\n class A(object)\n # №5\n def __init__(self):\n pass\n\nInspection ID: PyNonAsciiCharInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyNonAsciiChar", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyTrailingSemicolonInspection", - "shortDescription": { - "text": "Prohibited trailing semicolon in a statement" - }, - "fullDescription": { - "text": "Reports trailing semicolons in statements. Example: 'def my_func(a):\n c = a ** 2;\n return c' IDE provides a quick-fix that removes a trailing semicolon. When you apply it, the code changes to: 'def my_func(a):\n c = a ** 2\n return c' Inspection ID: PyTrailingSemicolonInspection", - "markdown": "Reports trailing semicolons in statements.\n\n**Example:**\n\n\n def my_func(a):\n c = a ** 2;\n return c\n\nIDE provides a quick-fix that removes a trailing semicolon. When you\napply it, the code changes to:\n\n\n def my_func(a):\n c = a ** 2\n return c\n\nInspection ID: PyTrailingSemicolonInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyTrailingSemicolon", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyRedundantParenthesesInspection", - "shortDescription": { - "text": "Redundant parentheses" - }, - "fullDescription": { - "text": "Reports about redundant parentheses in expressions. The IDE provides the quick-fix action to remove the redundant parentheses. Inspection ID: PyRedundantParenthesesInspection", - "markdown": "Reports about redundant parentheses in expressions.\n\nThe IDE provides the quick-fix action to remove the redundant parentheses.\n\nInspection ID: PyRedundantParenthesesInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyRedundantParentheses", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyAbstractClassInspection", - "shortDescription": { - "text": "Invalid abstract class definition and usages" - }, - "fullDescription": { - "text": "Reports invalid definition and usages of abstract classes. Example: 'from abc import abstractmethod, ABC\n\n\nclass Figure(ABC):\n\n @abstractmethod\n def do_figure(self):\n pass\n\n\nclass Triangle(Figure): # Not all abstract methods are defined in 'Triangle' class\n def do_triangle(self):\n pass\n\n\nTriangle() # Cannot instantiate abstract class 'Triangle'' When the quick-fix is applied, the IDE implements an abstract method for the 'Triangle' class: 'from abc import abstractmethod, ABC\n\n\nclass Figure(ABC):\n\n @abstractmethod\n def do_figure(self):\n pass\n\n\nclass Triangle(Figure):\n def do_figure(self):\n pass\n\n def do_triangle(self):\n pass\n\n\nTriangle()' It also warns you if 'abc.abstractmethod' is used in a class whose metaclass is not 'abc.ABCMeta': '' 'from abc import abstractmethod\n\n\nclass MyClass:\n @abstractmethod # 'MyClass' is not abstract\n def foo(self):\n ...' Inspection ID: PyAbstractClassInspection", - "markdown": "Reports invalid definition and usages of abstract classes.\n\n**Example:**\n\n\n from abc import abstractmethod, ABC\n\n\n class Figure(ABC):\n\n @abstractmethod\n def do_figure(self):\n pass\n\n\n class Triangle(Figure): # Not all abstract methods are defined in 'Triangle' class\n def do_triangle(self):\n pass\n\n\n Triangle() # Cannot instantiate abstract class 'Triangle'\n\nWhen the quick-fix is applied, the IDE implements an abstract method for the `Triangle` class:\n\n\n from abc import abstractmethod, ABC\n\n\n class Figure(ABC):\n\n @abstractmethod\n def do_figure(self):\n pass\n\n\n class Triangle(Figure):\n def do_figure(self):\n pass\n\n def do_triangle(self):\n pass\n\n\n Triangle()\n\nIt also warns you if `abc.abstractmethod` is used in a class whose metaclass is not `abc.ABCMeta`:\n\n from abc import abstractmethod\n\n\n class MyClass:\n @abstractmethod # 'MyClass' is not abstract\n def foo(self):\n ...\n\nInspection ID: PyAbstractClassInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyAbstractClass", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyOldStyleClassesInspection", - "shortDescription": { - "text": "Old-style class contains new-style class features" - }, - "fullDescription": { - "text": "Reports occurrences of new-style class features in old-style classes. The inspection highlights '__slots__', '__getattribute__', and 'super()' inside old-style classes. Inspection ID: PyOldStyleClassesInspection", - "markdown": "Reports occurrences of\n[new-style class features](https://www.python.org/doc/newstyle/)\nin old-style classes. The inspection highlights\n`__slots__`, `__getattribute__`, and `super()`\ninside old-style classes.\n\nInspection ID: PyOldStyleClassesInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyOldStyleClasses", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyUnnecessaryCastInspection", - "shortDescription": { - "text": "Unnecessary type cast" - }, - "fullDescription": { - "text": "Reports unnecessary calls to typing.cast when the expression already has the specified target type. Example: 'from typing import cast\n\na: int\nb = cast(int, a) # Unnecessary, a is already int' Inspection ID: PyUnnecessaryCastInspection", - "markdown": "Reports unnecessary calls to typing.cast when the expression already has the specified target type.\n\n**Example:**\n\n\n from typing import cast\n\n a: int\n b = cast(int, a) # Unnecessary, a is already int\n\nInspection ID: PyUnnecessaryCastInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyUnnecessaryCast", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Unspecified" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyArgumentListInspection", - "shortDescription": { - "text": "Incorrect call arguments" - }, - "fullDescription": { - "text": "Reports discrepancies between declared parameters and actual arguments, as well as incorrect arguments, for example, duplicate named arguments, and incorrect argument order. Example: 'class Foo:\n def __call__(self, p1: int, *, p2: str = \"%\"):\n return p2 * p1\n\n\nbar = Foo()\nbar.__call__() # unfilled parameter\nbar(5, \"#\") # unexpected argument' The correct code fragment looks at follows: 'class Foo:\n def __call__(self, p1: int, *, p2: str = \"%\"):\n return p2 * p1\n\n\nbar = Foo()\nbar.__call__(5)\nbar(5, p2=\"#\")' Inspection ID: PyArgumentListInspection", - "markdown": "Reports discrepancies between declared parameters and actual arguments, as well as\nincorrect arguments, for example, duplicate named arguments, and incorrect argument order.\n\n**Example:**\n\n\n class Foo:\n def __call__(self, p1: int, *, p2: str = \"%\"):\n return p2 * p1\n\n\n bar = Foo()\n bar.__call__() # unfilled parameter\n bar(5, \"#\") # unexpected argument\n\nThe correct code fragment looks at follows:\n\n\n class Foo:\n def __call__(self, p1: int, *, p2: str = \"%\"):\n return p2 * p1\n\n\n bar = Foo()\n bar.__call__(5)\n bar(5, p2=\"#\")\n\nInspection ID: PyArgumentListInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "PyArgumentList", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyInterpreterInspection", - "shortDescription": { - "text": "An invalid interpreter" - }, - "fullDescription": { - "text": "Reports problems if there is no Python interpreter configured for the project or if the interpreter is invalid. Without a properly configured interpreter, you cannot execute your Python scripts and benefit from some Python code insight features. The IDE provides quick access to the interpreter settings. Inspection ID: PyInterpreterInspection", - "markdown": "Reports problems if there is no Python interpreter configured for the project or if the interpreter is invalid. Without a properly\nconfigured interpreter, you cannot execute your Python scripts and benefit from some Python code insight features.\n\nThe IDE provides quick access to the interpreter settings.\n\nInspection ID: PyInterpreterInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "PyInterpreter", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyBroadExceptionInspection", - "shortDescription": { - "text": "Unclear exception clauses" - }, - "fullDescription": { - "text": "Reports exception clauses that do not provide specific information about the problem. Example: Clauses that do not specify an exception class Clauses that are specified as 'Exception' Inspection ID: PyBroadExceptionInspection", - "markdown": "Reports exception clauses that do not provide specific information\nabout the problem.\n\n**Example:**\n\n* Clauses that do not specify an exception class\n* Clauses that are specified as `Exception`\n\nInspection ID: PyBroadExceptionInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyBroadException", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyTypeCheckerInspection", - "shortDescription": { - "text": "Incorrect type" - }, - "fullDescription": { - "text": "Reports type errors in function call expressions, targets, and return values. In a dynamically typed language, this is possible in a limited number of cases. Types of function parameters can be specified in docstrings or in Python 3 function annotations. Example: 'def foo() -> int:\n return \"abc\" # Expected int, got str\n\n\na: str\na = foo() # Expected str, got int' With the quick-fix, you can modify the problematic types: 'def foo() -> str:\n return \"abc\"\n\n\na: str\na = foo()' Inspection ID: PyTypeCheckerInspection", - "markdown": "Reports type errors in function call expressions, targets, and return values. In a dynamically typed language, this is possible in a limited number of cases.\n\nTypes of function parameters can be specified in\ndocstrings or in Python 3 function annotations.\n\n**Example:**\n\n\n def foo() -> int:\n return \"abc\" # Expected int, got str\n\n\n a: str\n a = foo() # Expected str, got int\n\nWith the quick-fix, you can modify the problematic types:\n\n\n def foo() -> str:\n return \"abc\"\n\n\n a: str\n a = foo()\n\nInspection ID: PyTypeCheckerInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "PyTypeChecker", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyPropertyAccessInspection", - "shortDescription": { - "text": "Inappropriate access to properties" - }, - "fullDescription": { - "text": "Reports cases when properties are accessed inappropriately: Read-only properties are set Write-only properties are read Non-deletable properties are deleted Example: 'class MyClass:\n @property\n def read_only(self): return None\n\n def __write_only_setter(self, value): pass\n\n write_only = property(None, __write_only_setter)\n\n\na = MyClass()\na.read_only = 10 # property cannot be set\ndel a.read_only # property cannot be deleted\nprint(a.write_only) # property cannot be read' Inspection ID: PyPropertyAccessInspection", - "markdown": "Reports cases when properties are accessed inappropriately:\n\n* Read-only properties are set\n* Write-only properties are read\n* Non-deletable properties are deleted\n\n**Example:**\n\n\n class MyClass:\n @property\n def read_only(self): return None\n\n def __write_only_setter(self, value): pass\n\n write_only = property(None, __write_only_setter)\n\n\n a = MyClass()\n a.read_only = 10 # property cannot be set\n del a.read_only # property cannot be deleted\n print(a.write_only) # property cannot be read\n\nInspection ID: PyPropertyAccessInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyPropertyAccess", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Security" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyStubPackagesAdvertiser", - "shortDescription": { - "text": "Stub packages advertiser" - }, - "fullDescription": { - "text": "Reports availability of stub packages. Stub package is a package that contains type information for the corresponding runtime package. Using stub packages ensures better coding assistance for the corresponding python package. Inspection ID: PyStubPackagesAdvertiser", - "markdown": "Reports availability of stub packages.\n\n\n[Stub package](https://www.python.org/dev/peps/pep-0561/) is a package that contains type information for the corresponding\nruntime package.\n\nUsing stub packages ensures better coding assistance for the corresponding python package.\n\nInspection ID: PyStubPackagesAdvertiser" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyStubPackagesAdvertiser", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyByteLiteralInspection", - "shortDescription": { - "text": "A byte literal contains a non-ASCII character" - }, - "fullDescription": { - "text": "Reports characters in byte literals that are outside ASCII range. Example: 's = b'№5'' Inspection ID: PyByteLiteralInspection", - "markdown": "Reports characters in byte literals that are outside ASCII range.\n\n**Example:**\n\n\n s = b'№5'\n\nInspection ID: PyByteLiteralInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyByteLiteral", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyRelativeImportInspection", - "shortDescription": { - "text": "Suspicious relative imports" - }, - "fullDescription": { - "text": "Reports usages of relative imports inside plain directories, for example, directories neither containing '__init__.py' nor explicitly marked as namespace packages. Inspection ID: PyRelativeImportInspection", - "markdown": "Reports usages of relative imports inside plain directories, for example, directories neither containing `__init__.py` nor\nexplicitly marked as namespace packages.\n\nInspection ID: PyRelativeImportInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyPackages", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyAugmentAssignmentInspection", - "shortDescription": { - "text": "Assignment can be replaced with augmented assignment" - }, - "fullDescription": { - "text": "Reports assignments that can be replaced with augmented assignments. Example: 'a = 23\nb = 3\na = a + b' After the quick-fix is applied, the code changes to: 'a = 23\nb = 3\na += b' Inspection ID: PyAugmentAssignmentInspection", - "markdown": "Reports assignments that can be replaced with augmented assignments.\n\n**Example:**\n\n\n a = 23\n b = 3\n a = a + b\n\nAfter the quick-fix is applied, the code changes to:\n\n\n a = 23\n b = 3\n a += b\n\nInspection ID: PyAugmentAssignmentInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "PyAugmentAssignment", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyDeprecationInspection", - "shortDescription": { - "text": "Deprecated function, class, or module" - }, - "fullDescription": { - "text": "Reports usages of Python functions, or methods that are marked as deprecated and raise the 'DeprecationWarning' or 'PendingDeprecationWarning' warning. Also, this inspection highlights usages of 'abc.abstractstaticmethod', 'abc.abstractproperty', and 'abc.abstractclassmethod' decorators. Example: 'class Foo:\n @property\n def bar(self):\n import warnings\n warnings.warn(\"this is deprecated\", DeprecationWarning, 2)\n return 5\n\n\nfoo = Foo()\nprint(foo.bar)' Inspection ID: PyDeprecationInspection", - "markdown": "Reports usages of Python functions, or methods that are marked as\ndeprecated and raise the `DeprecationWarning` or `PendingDeprecationWarning` warning.\n\nAlso, this inspection highlights usages of `abc.abstractstaticmethod`, `abc.abstractproperty`, and `abc.abstractclassmethod`\ndecorators.\n\n**Example:**\n\n\n class Foo:\n @property\n def bar(self):\n import warnings\n warnings.warn(\"this is deprecated\", DeprecationWarning, 2)\n return 5\n\n\n foo = Foo()\n print(foo.bar)\n\nInspection ID: PyDeprecationInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyDeprecation", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyUnnecessaryBackslashInspection", - "shortDescription": { - "text": "Unnecessary backslash" - }, - "fullDescription": { - "text": "Reports backslashes in places where line continuation is implicit inside '()', '[]', and '{}'. Example: 'a = ('first', \\\n 'second', 'third')' When the quick-fix is applied, the redundant backslash is deleted. Inspection ID: PyUnnecessaryBackslashInspection", - "markdown": "Reports backslashes in places where line continuation is implicit inside `()`,\n`[]`, and `{}`.\n\n**Example:**\n\n\n a = ('first', \\\n 'second', 'third')\n\nWhen the quick-fix is applied, the redundant backslash is deleted.\n\nInspection ID: PyUnnecessaryBackslashInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyUnnecessaryBackslash", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyRedeclarationInspection", - "shortDescription": { - "text": "Redeclared names without usages" - }, - "fullDescription": { - "text": "Reports unconditional redeclarations of names without being used in between. Example: 'def x(): pass\n\n\nx = 2' It applies to function and class declarations, and top-level assignments. When the warning is shown, you can try a recommended action, for example, you might be prompted to rename the variable. Inspection ID: PyRedeclarationInspection", - "markdown": "Reports unconditional redeclarations of names without being used in between.\n\n**Example:**\n\n\n def x(): pass\n\n\n x = 2\n\nIt applies to function and class declarations, and top-level assignments.\n\nWhen the warning is shown, you can try a recommended action, for example, you might be prompted to\nrename the variable.\n\nInspection ID: PyRedeclarationInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyRedeclaration", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyShadowingNamesInspection", - "shortDescription": { - "text": "Shadowing names from outer scopes" - }, - "fullDescription": { - "text": "Reports shadowing names defined in outer scopes. Example: 'def outer(p):\n def inner(p):\n pass' As a quick-fix, the IDE offers to remove a parameter or rename it. Inspection ID: PyShadowingNamesInspection", - "markdown": "Reports shadowing names defined in outer scopes.\n\n**Example:**\n\n\n def outer(p):\n def inner(p):\n pass\n\nAs a quick-fix, the IDE offers to remove a parameter or rename it.\n\nInspection ID: PyShadowingNamesInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyShadowingNames", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyFinalInspection", - "shortDescription": { - "text": "Invalid usages of final classes, methods, and variables" - }, - "fullDescription": { - "text": "Reports invalid usages of final classes, methods and variables. Example: 'from typing import final\n\n\n@final\nclass A:\n def a_method(self):\n pass\n\n\nclass B(A):\n def a_method(self):\n pass' Inspection ID: PyFinalInspection", - "markdown": "Reports invalid usages of final classes,\nmethods and variables.\n\n**Example:**\n\n\n from typing import final\n\n\n @final\n class A:\n def a_method(self):\n pass\n\n\n class B(A):\n def a_method(self):\n pass\n\nInspection ID: PyFinalInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyFinal", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyProtectedMemberInspection", - "shortDescription": { - "text": "Accessing a protected member of a class or a module" - }, - "fullDescription": { - "text": "Reports cases when a protected member is accessed outside the class, a descendant of the class where it is defined, or a module. Example: 'class Foo:\n def _protected_method(self):\n pass\n\n\nclass Bar(Foo):\n def public_method(self):\n self._protected_method()\n\n\nfoo = Foo()\nfoo._protected_method() # Access to a protected method' Inspection ID: PyProtectedMemberInspection", - "markdown": "Reports cases when a protected member is accessed outside the class,\na descendant of the class where it is defined, or a module.\n\n**Example:**\n\n\n class Foo:\n def _protected_method(self):\n pass\n\n\n class Bar(Foo):\n def public_method(self):\n self._protected_method()\n\n\n foo = Foo()\n foo._protected_method() # Access to a protected method\n\nInspection ID: PyProtectedMemberInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyProtectedMember", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Security" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyStubPackagesCompatibilityInspection", - "shortDescription": { - "text": "Incompatible stub packages" - }, - "fullDescription": { - "text": "Reports stub packages that do not support the version of the corresponding runtime package. A stub package contains type information for some runtime package. Inspection ID: PyStubPackagesCompatibilityInspection", - "markdown": "Reports stub packages that do not support the version of the corresponding runtime package.\n\nA [stub package](https://www.python.org/dev/peps/pep-0561/) contains type information for some runtime package.\n\nInspection ID: PyStubPackagesCompatibilityInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyStubPackagesCompatibility", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyInvalidCastInspection", - "shortDescription": { - "text": "Type cast between unrelated types" - }, - "fullDescription": { - "text": "Reports 'typing.cast' calls where the source and target types are unrelated. An error is reported when neither the source type is a subtype of the target, nor the target type is a subtype of the source. Such casts often indicate a logical error, as an instance of one type cannot be assumed to be an instance of the other, and 'typing.cast' does not dynamically validate the type. This check applies even to types that could theoretically have a common descendant. For example, it will flag a cast between two sibling classes 'Left' and 'Right' that both inherit from 'Top', because there is no direct inheritance relationship between them. Example: 'from typing import cast\n\n# Non-overlapping types — likely a mistake\ncast(int, \"a\") # 'str' -> 'int'\ncast(list[int], [\"a\"]) # 'list[str]' -> 'list[int]'\n\n# Recommended explicit escape hatch is to use a \"double cast\"\ncast(int, cast(object, \"a\")) # ok\n\n# Legitimate overlapping cases\ncast(int, object()) # a valid down cast\ncast(object, 1) # a valid up cast\n\n# While the following is an invalid cast, as list is invariant. It's not currently supported by this inspection\nint_list = [1, 2, 3]\ncast(list[object], int_list)' The inspection relies on static type information; when a type is unknown, no warning is reported. Variance of generic types is not yet considered. Inspection ID: PyInvalidCastInspection", - "markdown": "Reports `typing.cast` calls where the source and target types are unrelated.\n\nAn error is reported when neither the source type is a subtype of the target, nor the target type is a subtype of the source.\nSuch casts often indicate a logical error, as an instance of one type cannot be assumed to be an instance of the other,\nand `typing.cast` does not dynamically validate the type.\n\nThis check applies even to types that could theoretically have a common descendant.\nFor example, it will flag a cast between two sibling classes `Left` and `Right` that both inherit from `Top`,\nbecause there is no direct inheritance relationship between them.\n\n**Example:**\n\n\n from typing import cast\n\n # Non-overlapping types --- likely a mistake\n cast(int, \"a\") # 'str' -> 'int'\n cast(list[int], [\"a\"]) # 'list[str]' -> 'list[int]'\n\n # Recommended explicit escape hatch is to use a \"double cast\"\n cast(int, cast(object, \"a\")) # ok\n\n # Legitimate overlapping cases\n cast(int, object()) # a valid down cast\n cast(object, 1) # a valid up cast\n\n # While the following is an invalid cast, as `list` is invariant. It's not currently supported by this inspection\n int_list = [1, 2, 3]\n cast(list[object], int_list)\n\nThe inspection relies on static type information; when a type is unknown, no warning is reported.\n\nVariance of generic types is not yet considered.\n\nInspection ID: PyInvalidCastInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyInvalidCast", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Unspecified" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyUnboundLocalVariableInspection", - "shortDescription": { - "text": "Unbound local variables" - }, - "fullDescription": { - "text": "Reports local variables referenced before assignment. Example: 'x = 0\nif x > 10:\n b = 3\nprint(b)' The IDE reports a problem for 'print(b)'. A possible fix is: 'x = 0\nif x > 10:\n b = 3\n print(b)' Inspection ID: PyUnboundLocalVariableInspection", - "markdown": "Reports local variables referenced before assignment.\n\n**Example:**\n\n\n x = 0\n if x > 10:\n b = 3\n print(b)\n\nThe IDE reports a problem for `print(b)`. A possible fix is:\n\n\n x = 0\n if x > 10:\n b = 3\n print(b)\n\nInspection ID: PyUnboundLocalVariableInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyUnboundLocalVariable", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyNamedTupleInspection", - "shortDescription": { - "text": "Invalid definition of 'typing.NamedTuple'" - }, - "fullDescription": { - "text": "Reports invalid definition of a typing.NamedTuple. Example: 'import typing\n\n\nclass FullName(typing.NamedTuple):\n first: str\n last: str = \"\"\n middle: str' As a fix, place the field with the default value after the fields without default values: 'import typing\n\n\nclass FullName(typing.NamedTuple):\n first: str\n middle: str\n last: str = \"\"' Inspection ID: PyNamedTupleInspection", - "markdown": "Reports invalid definition of a\n[typing.NamedTuple](https://docs.python.org/3/library/typing.html#typing.NamedTuple).\n\n**Example:**\n\n\n import typing\n\n\n class FullName(typing.NamedTuple):\n first: str\n last: str = \"\"\n middle: str\n\nAs a fix, place the field with the default value after the fields without default values:\n\n\n import typing\n\n\n class FullName(typing.NamedTuple):\n first: str\n middle: str\n last: str = \"\"\n\nInspection ID: PyNamedTupleInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyNamedTuple", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyNewTypeInspection", - "shortDescription": { - "text": "Invalid usage of NewType" - }, - "fullDescription": { - "text": "Reports invalid usages of NewType. Examples: 'from typing import NewType\n\n InvalidName = NewType(\"Name\", int) # Variable name 'InvalidName' does not match NewType name 'Name'' 'from typing import Literal\n\n InvalidType = NewType(\"InvalidType\", Literal[1]) # NewType cannot be used with 'Literal[1]'' 'Base = NewType(\"Base\", str)\n\n class Derived(Base): # 'Base' cannot be subclassed\n pass' Inspection ID: PyNewTypeInspection", - "markdown": "Reports invalid usages of [NewType](https://docs.python.org/3/library/typing.html#typing.NewType).\n\n\n**Examples:**\n\n\n from typing import NewType\n\n InvalidName = NewType(\"Name\", int) # Variable name 'InvalidName' does not match NewType name 'Name'\n\n\n from typing import Literal\n\n InvalidType = NewType(\"InvalidType\", Literal[1]) # NewType cannot be used with 'Literal[1]'\n\n\n Base = NewType(\"Base\", str)\n\n class Derived(Base): # 'Base' cannot be subclassed\n pass\n\nInspection ID: PyNewTypeInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyNewType", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Unspecified" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PySingleQuotedDocstringInspection", - "shortDescription": { - "text": "Single quoted docstring" - }, - "fullDescription": { - "text": "Reports docstrings that do not adhere to the triple double-quoted string format. Example: 'def calc(self, balance=0):\n 'param: balance'\n self.balance = balance' When the quick-fix is applied, the code changes to: 'def calc(self, balance=0):\n \"\"\"param: balance\"\"\"\n self.balance = balance' Inspection ID: PySingleQuotedDocstringInspection", - "markdown": "Reports docstrings that do not adhere to the triple double-quoted string format.\n\n**Example:**\n\n\n def calc(self, balance=0):\n 'param: balance'\n self.balance = balance\n\nWhen the quick-fix is applied, the code changes to:\n\n\n def calc(self, balance=0):\n \"\"\"param: balance\"\"\"\n self.balance = balance\n\nInspection ID: PySingleQuotedDocstringInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PySingleQuotedDocstring", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyUnusedLocalInspection", - "shortDescription": { - "text": "Unused local symbols" - }, - "fullDescription": { - "text": "Reports local variables, parameters, and functions that are locally defined, but not used name in a function. Inspection ID: PyUnusedLocalInspection", - "markdown": "Reports local variables, parameters, and functions that are locally defined, but not used name in a function.\n\nInspection ID: PyUnusedLocalInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyUnusedLocal", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyReturnFromInitInspection", - "shortDescription": { - "text": "__init__ method that returns a value" - }, - "fullDescription": { - "text": "Reports occurrences of 'return' statements with a return value inside '__init__' methods of classes. Example: 'class Sum:\n def __init__(self, a, b):\n self.a = a\n self.b = b\n self.sum = a + b\n return self.sum' A constructor should not return any value. The '__init__' method should only initialize the values of instance members for news objects. As a quick-fix, the IDE offers to remove the 'return' statement. Inspection ID: PyReturnFromInitInspection", - "markdown": "Reports occurrences of `return` statements with a return value inside\n`__init__` methods of classes.\n\n**Example:**\n\n\n class Sum:\n def __init__(self, a, b):\n self.a = a\n self.b = b\n self.sum = a + b\n return self.sum\n\nA constructor should not return any value. The `__init__` method should\nonly initialize the values of instance members for news objects.\n\nAs a quick-fix, the IDE offers to remove the `return` statement.\n\nInspection ID: PyReturnFromInitInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyReturnFromInit", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyNestedDecoratorsInspection", - "shortDescription": { - "text": "Problematic nesting of decorators" - }, - "fullDescription": { - "text": "Reports problems with nesting decorators. The inspection highlights the cases when 'classmethod' or 'staticmethod' is applied before another decorator. Example: 'def innocent(f):\n return f\n\n\nclass A:\n @innocent # Decorator will not receive a callable it may expect\n @classmethod\n def f2(cls):\n pass\n\n @innocent # Decorator will not receive a callable it may expect\n @staticmethod\n def f1():\n pass' As a quick-fix, the IDE offers to remove the decorator. Inspection ID: PyNestedDecoratorsInspection", - "markdown": "Reports problems with nesting decorators. The inspection highlights the cases when `classmethod` or `staticmethod`\nis applied before another decorator.\n\n**Example:**\n\n\n def innocent(f):\n return f\n\n\n class A:\n @innocent # Decorator will not receive a callable it may expect\n @classmethod\n def f2(cls):\n pass\n\n @innocent # Decorator will not receive a callable it may expect\n @staticmethod\n def f1():\n pass\n\nAs a quick-fix, the IDE offers to remove the decorator.\n\nInspection ID: PyNestedDecoratorsInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyNestedDecorators", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyPandasTruthValueIsAmbiguousInspection", - "shortDescription": { - "text": "The truth value of a DataFrame is ambiguous" - }, - "fullDescription": { - "text": "Reports ambiguous usage of a pandas 'DataFrame' or 'Series' in a boolean context, such as 'if', 'while', or logical expressions. This typically leads to the runtime error: 'ValueError: The truth value of a DataFrame is ambiguous'. In pandas, expressions like 'df' or 'df == other' do not return a single boolean value, but rather a DataFrame or Series of booleans. Using these in control flow without explicit reduction (e.g., '.any()', '.all()', or '.empty') is ambiguous and will raise an exception. Example: if df: # ❌ Raises ValueError: The truth value of a DataFrame is ambiguous\n print(\"DataFrame exists\")\n\nif not df.empty: # ✅ Checks if DataFrame has any rows\n print(\"DataFrame exists\")\n When the quick-fix is applied, the condition is replaced with an appropriate reducer like '.any()', '.all()', or '.empty' depending on the context. Inspection ID: PyPandasTruthValueIsAmbiguousInspection", - "markdown": "Reports ambiguous usage of a pandas `DataFrame` or `Series` in a boolean context,\nsuch as `if`, `while`, or logical expressions.\nThis typically leads to the runtime error:\n`ValueError: The truth value of a DataFrame is ambiguous`.\n\n\nIn pandas, expressions like `df` or `df == other` do not return a single boolean value,\nbut rather a DataFrame or Series of booleans. Using these in control flow without explicit reduction\n(e.g., `.any()`, `.all()`, or `.empty`) is ambiguous and will raise an exception.\n\n**Example:**\n\n```\nif df: # ❌ Raises ValueError: The truth value of a DataFrame is ambiguous\n print(\"DataFrame exists\")\n\nif not df.empty: # ✅ Checks if DataFrame has any rows\n print(\"DataFrame exists\")\n```\n\n\nWhen the quick-fix is applied, the condition is replaced with an appropriate reducer\nlike `.any()`, `.all()`, or `.empty` depending on the context.\n\nInspection ID: PyPandasTruthValueIsAmbiguousInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "PyPackages", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Unspecified" - } - }, - "relationships": [ - { - "target": { - "id": "Pandas", - "index": 0, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyMissingOrEmptyDocstringInspection", - "shortDescription": { - "text": "Missing or empty docstring" - }, - "fullDescription": { - "text": "Reports missing and empty docstrings. Example of a missing docstring 'def demo(a):\n c = a ** 2' Example of an empty docstring 'def demo(a):\n \"\"\"\n \"\"\"\n c = a ** 2' When the quick-fix is applied, the code fragments change to: 'def demo(a):\n \"\"\"\n\n :param a:\n \"\"\"\n c = a ** 2' You need to provide some details about the parameter in the generated template. Inspection ID: PyMissingOrEmptyDocstringInspection", - "markdown": "Reports missing and empty docstrings.\n\n**Example of a missing docstring**\n\n\n def demo(a):\n c = a ** 2\n\n**Example of an empty docstring**\n\n\n def demo(a):\n \"\"\"\n \"\"\"\n c = a ** 2\n\nWhen the quick-fix is applied, the code fragments change to:\n\n\n def demo(a):\n \"\"\"\n\n :param a:\n \"\"\"\n c = a ** 2\n\nYou need to provide some details about the parameter in the generated template.\n\nInspection ID: PyMissingOrEmptyDocstringInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "PyMissingOrEmptyDocstring", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyOverloadsInspection", - "shortDescription": { - "text": "Overloads in regular Python files" - }, - "fullDescription": { - "text": "Reports cases when overloads in regular Python files are placed after the implementation or when their signatures are not compatible with the implementation. Example: 'from typing import overload\n\n\n@overload\ndef foo(p1, p2): # Overload signature is not compatible with the implementation\n pass\n\n\n@overload\ndef foo(p1): # Overload signature is not compatible with the implementation\n pass\n\n\ndef foo(p1, p2, p3):\n print(p1, p2, p3)' Inspection ID: PyOverloadsInspection", - "markdown": "Reports cases when overloads in regular Python files are placed after the implementation or when their signatures are\nnot compatible with the implementation.\n\n**Example:**\n\n\n from typing import overload\n\n\n @overload\n def foo(p1, p2): # Overload signature is not compatible with the implementation\n pass\n\n\n @overload\n def foo(p1): # Overload signature is not compatible with the implementation\n pass\n\n\n def foo(p1, p2, p3):\n print(p1, p2, p3)\n\nInspection ID: PyOverloadsInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyOverloads", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyPep8NamingInspection", - "shortDescription": { - "text": "PEP 8 naming convention violation" - }, - "fullDescription": { - "text": "No description available", - "markdown": "No description available" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyPep8Naming", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyDictDuplicateKeysInspection", - "shortDescription": { - "text": "Dictionary contains duplicate keys" - }, - "fullDescription": { - "text": "Reports using the same value as the dictionary key twice. Example: 'dic = {\"a\": [1, 2], \"a\": [3, 4]}' Inspection ID: PyDictDuplicateKeysInspection", - "markdown": "Reports using the same value as the dictionary key twice.\n\n**Example:**\n\n\n dic = {\"a\": [1, 2], \"a\": [3, 4]}\n\nInspection ID: PyDictDuplicateKeysInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyDictDuplicateKeys", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyExceptClausesOrderInspection", - "shortDescription": { - "text": "Wrong order of 'except' clauses" - }, - "fullDescription": { - "text": "Reports cases when 'except' clauses are not in the proper order, from the more specific to the more generic, or one exception class is caught twice. If you do not fix the order, some exceptions may not be caught by the most specific handler. Example: 'try:\n call()\nexcept ValueError:\n pass\nexcept UnicodeError:\n pass' The IDE recommends moving the clause up. When the quick-fix is applied, the code changes to: 'try:\n call()\nexcept UnicodeError:\n pass\nexcept ValueError:\n pass' Inspection ID: PyExceptClausesOrderInspection", - "markdown": "Reports cases when `except` clauses are not in the proper order,\nfrom the more specific to the more generic, or one exception class is caught twice.\n\n\nIf you do not fix the order, some exceptions may not be caught by the most specific handler.\n\n**Example:**\n\n\n try:\n call()\n except ValueError:\n pass\n except UnicodeError:\n pass\n\nThe IDE recommends moving the clause up. When the quick-fix is applied, the code changes to:\n\n\n try:\n call()\n except UnicodeError:\n pass\n except ValueError:\n pass\n\nInspection ID: PyExceptClausesOrderInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyExceptClausesOrder", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyDataclassInspection", - "shortDescription": { - "text": "Invalid definition and usage of Data Classes" - }, - "fullDescription": { - "text": "Reports invalid definitions and usages of classes created with 'dataclasses' or 'attr' modules. Example: 'import dataclasses\n\n\n@dataclasses.dataclass\nclass FullName:\n first: str\n middle: str = \"\"\n last: str' Inspection ID: PyDataclassInspection", - "markdown": "Reports invalid definitions and usages of classes created with\n`dataclasses` or `attr` modules.\n\n**Example:**\n\n\n import dataclasses\n\n\n @dataclasses.dataclass\n class FullName:\n first: str\n middle: str = \"\"\n last: str\n\nInspection ID: PyDataclassInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "PyDataclass", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyClassicStyleClassInspection", - "shortDescription": { - "text": "Classic style class usage" - }, - "fullDescription": { - "text": "Reports classic style classes usage. This inspection applies only to Python 2. Example: 'class A:\n pass' With quick-fixes provided by the IDE, this code fragment changes to: 'class A(object):\n def __init__(self):\n pass' Inspection ID: PyClassicStyleClassInspection", - "markdown": "Reports [classic style classes](https://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes) usage. This inspection applies only to Python 2.\n\n**Example:**\n\n\n class A:\n pass\n\nWith quick-fixes provided by the IDE, this code fragment changes to:\n\n\n class A(object):\n def __init__(self):\n pass\n\nInspection ID: PyClassicStyleClassInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "PyClassicStyleClass", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyNoneFunctionAssignmentInspection", - "shortDescription": { - "text": "Assigning function calls that don't return anything" - }, - "fullDescription": { - "text": "Reports cases when an assignment is done on a function that does not return anything. This inspection is similar to pylint inspection E1111. Example: 'def just_print():\n print(\"Hello!\")\n\n\naction = just_print()' As a quick-fix, the IDE offers to remove the assignment. Inspection ID: PyNoneFunctionAssignmentInspection", - "markdown": "Reports cases when an assignment is done on a function that does not return anything.\nThis inspection is similar to [pylint inspection E1111](https://docs.pylint.org/en/1.6.0/features.html#id6).\n\n**Example:**\n\n\n def just_print():\n print(\"Hello!\")\n\n\n action = just_print()\n\nAs a quick-fix, the IDE offers to remove the assignment.\n\nInspection ID: PyNoneFunctionAssignmentInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyNoneFunctionAssignment", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyPropertyDefinitionInspection", - "shortDescription": { - "text": "Incorrect property definition" - }, - "fullDescription": { - "text": "Reports problems with the arguments of 'property()' and functions annotated with '@property'. 'class C:\n @property\n def abc(self): # Getter should return or yield something\n pass\n\n @abc.setter\n def foo(self, value): # Names of function and decorator don't match\n pass\n\n @abc.setter\n def abc(self, v1, v2): # Setter signature should be (self, value)\n pass\n\n @abc.deleter\n def abc(self, v1): # Delete signature should be (self)\n pass' A quick-fix offers to update parameters. Inspection ID: PyPropertyDefinitionInspection", - "markdown": "Reports problems with the arguments of `property()` and functions\nannotated with `@property`.\n\n\n class C:\n @property\n def abc(self): # Getter should return or yield something\n pass\n\n @abc.setter\n def foo(self, value): # Names of function and decorator don't match\n pass\n\n @abc.setter\n def abc(self, v1, v2): # Setter signature should be (self, value)\n pass\n\n @abc.deleter\n def abc(self, v1): # Delete signature should be (self)\n pass\n\nA quick-fix offers to update parameters.\n\nInspection ID: PyPropertyDefinitionInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyPropertyDefinition", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyIncorrectDocstringInspection", - "shortDescription": { - "text": "Incorrect docstring" - }, - "fullDescription": { - "text": "Reports mismatched parameters in a docstring. For example, 'b' is highlighted, because there is no such a parameter in the 'add' function. 'def add(a, c):\n \"\"\"\n @param a:\n @param b:\n @return:\n \"\"\"\n pass' The inspection does not warn you of missing parameters if none of them is mentioned in a docstring: 'def mult(a, c):\n \"\"\"\n @return:\n \"\"\"\n pass' Inspection ID: PyIncorrectDocstringInspection", - "markdown": "Reports mismatched parameters in a docstring. For example, `b` is highlighted, because there is no\nsuch a parameter in the `add` function.\n\n\n def add(a, c):\n \"\"\"\n @param a:\n @param b:\n @return:\n \"\"\"\n pass\n\nThe inspection does not warn you of missing parameters if none of them is mentioned in a docstring:\n\n\n def mult(a, c):\n \"\"\"\n @return:\n \"\"\"\n pass\n\nInspection ID: PyIncorrectDocstringInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyIncorrectDocstring", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyEnumInspection", - "shortDescription": { - "text": "Invalid Enum definition and usages" - }, - "fullDescription": { - "text": "Reports invalid definition and usage of Enum. Example: 'from enum import Enum\n\n\nclass Shape(Enum):\n SQUARE = 1\n CIRCLE = 2\n\n\nclass ExtendedShape(Shape): # Enum class 'Shape' is final and cannot be subclassed\n TRIANGLE = 3' 'from enum import Enum\n\n\n class Color(Enum):\n _value_: int\n RED = 1\n GREEN = \"green\" # Type 'str' is not assignable to declared type 'int'' 'from enum import Enum\n\n\n class Pet(Enum):\n CAT = 1\n DOG: int = 2 # Type annotations are not allowed for enum members' Inspection ID: PyEnumInspection", - "markdown": "Reports invalid definition and usage of [Enum](https://peps.python.org/pep-0435/).\n\n\n**Example:**\n\n\n from enum import Enum\n\n\n class Shape(Enum):\n SQUARE = 1\n CIRCLE = 2\n\n\n class ExtendedShape(Shape): # Enum class 'Shape' is final and cannot be subclassed\n TRIANGLE = 3\n\n\n from enum import Enum\n\n\n class Color(Enum):\n _value_: int\n RED = 1\n GREEN = \"green\" # Type 'str' is not assignable to declared type 'int'\n\n\n from enum import Enum\n\n\n class Pet(Enum):\n CAT = 1\n DOG: int = 2 # Type annotations are not allowed for enum members\n\nInspection ID: PyEnumInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyEnum", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Unspecified" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyListCreationInspection", - "shortDescription": { - "text": "Non-optimal list declaration" - }, - "fullDescription": { - "text": "Reports cases when a list declaration can be rewritten with a list literal. This ensures better performance of your application. Example: 'l = [1]\nl.append(2)' When the quick-fix is applied, the code changes to: 'l = [1, 2]' Inspection ID: PyListCreationInspection", - "markdown": "Reports cases when a list declaration\ncan be rewritten with a list literal.\n\nThis ensures better performance of your application.\n\n**Example:**\n\n\n l = [1]\n l.append(2)\n\nWhen the quick-fix is applied, the code changes to:\n\n\n l = [1, 2]\n\nInspection ID: PyListCreationInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PyListCreation", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Performance" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "PyUnusedImportsInspection", - "shortDescription": { - "text": "Unused imports" - }, - "fullDescription": { - "text": "Reports unused import statements in Python code. This inspection detects import statements that are not used in the code and can be safely removed. Removing unused imports helps to keep the code clean and reduces the risk of name conflicts. Example: 'import os # Unused import\nimport sys # Used import\nfrom math import pi # Unused import\n\nprint(sys.version)' The inspection provides a quick fix to optimize imports, which removes all unused import statements. Note that some imports might be used indirectly (e.g., for side effects) and should not be removed. You can suppress this inspection for specific imports if they are needed for side effects. Inspection ID: PyUnusedImportsInspection", - "markdown": "Reports unused import statements in Python code.\n\n\nThis inspection detects import statements that are not used in the code and can be safely removed.\nRemoving unused imports helps to keep the code clean and reduces the risk of name conflicts.\n\n**Example:**\n\n\n import os # Unused import\n import sys # Used import\n from math import pi # Unused import\n\n print(sys.version)\n\n\nThe inspection provides a quick fix to optimize imports, which removes all unused import statements.\n\n\nNote that some imports might be used indirectly (e.g., for side effects) and should not be removed.\nYou can suppress this inspection for specific imports if they are needed for side effects.\n\nInspection ID: PyUnusedImportsInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "PyUnusedImports", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Unspecified" - } - }, - "relationships": [ - { - "target": { - "id": "Python", - "index": 2, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - } - ], - "language": "en-US", - "contents": ["localizedData", "nonLocalizedData"], - "isComprehensive": false - }, - { - "name": "org.editorconfig.editorconfigjetbrains", - "version": "253.31833.0", - "rules": [ - { - "id": "EditorConfigCharClassRedundancy", - "shortDescription": { - "text": "Unnecessary character class" - }, - "fullDescription": { - "text": "Reports character classes that consist of a single character. Such classes can be simplified to a character, for example '[a]'→'a'. Inspection ID: EditorConfigCharClassRedundancy", - "markdown": "Reports character classes that consist of a single character. Such classes can be simplified to a character, for example `[a]`→`a`.\n\nInspection ID: EditorConfigCharClassRedundancy" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "EditorConfigCharClassRedundancy", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigDeprecatedDescriptor", - "shortDescription": { - "text": "Deprecated property" - }, - "fullDescription": { - "text": "Reports EditorConfig properties that are no longer supported. Inspection ID: EditorConfigDeprecatedDescriptor", - "markdown": "Reports EditorConfig properties that are no longer supported.\n\nInspection ID: EditorConfigDeprecatedDescriptor" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "EditorConfigDeprecatedDescriptor", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigRootDeclarationUniqueness", - "shortDescription": { - "text": "Extra top-level declaration" - }, - "fullDescription": { - "text": "Reports multiple top-level declarations. There can be only one optional “root=true” top-level declaration in the EditorConfig file. Using multiple top-level declarations is not allowed. Inspection ID: EditorConfigRootDeclarationUniqueness", - "markdown": "Reports multiple top-level declarations. There can be only one optional \"root=true\" top-level declaration in the EditorConfig file. Using multiple top-level declarations is not allowed.\n\nInspection ID: EditorConfigRootDeclarationUniqueness" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "EditorConfigRootDeclarationUniqueness", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigNumerousWildcards", - "shortDescription": { - "text": "Too many wildcards" - }, - "fullDescription": { - "text": "Reports sections that contain too many wildcards. Using a lot of wildcards may lead to performance issues. Inspection ID: EditorConfigNumerousWildcards", - "markdown": "Reports sections that contain too many wildcards. Using a lot of wildcards may lead to performance issues.\n\nInspection ID: EditorConfigNumerousWildcards" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "EditorConfigNumerousWildcards", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Performance" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigWildcardRedundancy", - "shortDescription": { - "text": "Redundant wildcard" - }, - "fullDescription": { - "text": "Reports wildcards that become redundant when the “**” wildcard is used in the same section. The “**” wildcard defines a broader set of files than any other wildcard. That is why, any other wildcard used in the same section has no affect and can be removed. Inspection ID: EditorConfigWildcardRedundancy", - "markdown": "Reports wildcards that become redundant when the \"\\*\\*\" wildcard is used in the same section.\n\n\nThe \"\\*\\*\" wildcard defines a broader set of files than any other wildcard.\nThat is why, any other wildcard used in the same section has no affect and can be removed.\n\nInspection ID: EditorConfigWildcardRedundancy" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "EditorConfigWildcardRedundancy", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigPartialOverride", - "shortDescription": { - "text": "Overlapping sections" - }, - "fullDescription": { - "text": "Reports subsets of files specified in the current section that overlap with other subsets in other sections. For example: '[{foo,bar}]' and '[{foo,bas}]' both contain “foo”. Inspection ID: EditorConfigPartialOverride", - "markdown": "Reports subsets of files specified in the current section that overlap with other subsets in other sections. For example: `[{foo,bar}]` and `[{foo,bas}]` both contain \"foo\".\n\nInspection ID: EditorConfigPartialOverride" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "EditorConfigPartialOverride", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigEmptySection", - "shortDescription": { - "text": "Empty section" - }, - "fullDescription": { - "text": "Reports sections that do not contain any EditorConfig properties. Inspection ID: EditorConfigEmptySection", - "markdown": "Reports sections that do not contain any EditorConfig properties.\n\nInspection ID: EditorConfigEmptySection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "EditorConfigEmptySection", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigHeaderUniqueness", - "shortDescription": { - "text": "EditorConfig section is not unique" - }, - "fullDescription": { - "text": "Reports sections that define the same file pattern as other sections. Inspection ID: EditorConfigHeaderUniqueness", - "markdown": "Reports sections that define the same file pattern as other sections.\n\nInspection ID: EditorConfigHeaderUniqueness" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "EditorConfigHeaderUniqueness", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigShadowingOption", - "shortDescription": { - "text": "Overriding property" - }, - "fullDescription": { - "text": "Reports properties that override the same properties defined earlier in the file. For example: '[*.java]\nindent_size=4\n[{*.java,*.js}]\nindent_size=2' The second section includes the same files as '[*.java]' but also sets indent_size to value 2. Thus the first declaration 'indent_size=4'will be ignored. Inspection ID: EditorConfigShadowingOption", - "markdown": "Reports properties that override the same properties defined earlier in the file.\n\nFor example:\n\n\n [*.java]\n indent_size=4\n [{*.java,*.js}]\n indent_size=2\n\nThe second section includes the same files as `[*.java]` but also sets indent_size to value 2. Thus the first declaration `indent_size=4`will be ignored.\n\nInspection ID: EditorConfigShadowingOption" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "EditorConfigShadowingOption", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigListAcceptability", - "shortDescription": { - "text": "Unexpected value list" - }, - "fullDescription": { - "text": "Reports lists of values that are used in properties in which lists are not supported. In this case, only a single value can be specified. Inspection ID: EditorConfigListAcceptability", - "markdown": "Reports lists of values that are used in properties in which lists are not supported. In this case, only a single value can be specified.\n\nInspection ID: EditorConfigListAcceptability" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "EditorConfigListAcceptability", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigShadowedOption", - "shortDescription": { - "text": "Overridden property" - }, - "fullDescription": { - "text": "Reports properties that are already defined in other sections. For example: '[*.java]\nindent_size=4\n[{*.java,*.js}]\nindent_size=2' The second section includes all '*.java' files too but it also redefines indent_size. As a result the value 2 will be used for files matching '*.java'. Inspection ID: EditorConfigShadowedOption", - "markdown": "Reports properties that are already defined in other sections.\n\nFor example:\n\n\n [*.java]\n indent_size=4\n [{*.java,*.js}]\n indent_size=2\n\nThe second section includes all `*.java` files too but it also redefines indent_size. As a result the value 2 will be used for files matching `*.java`.\n\nInspection ID: EditorConfigShadowedOption" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "EditorConfigShadowedOption", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigEmptyHeader", - "shortDescription": { - "text": "Empty header" - }, - "fullDescription": { - "text": "Reports sections with an empty header. Section header must contain file path globs in the format similar to one supported by 'gitignore'. Inspection ID: EditorConfigEmptyHeader", - "markdown": "Reports sections with an empty header. Section header must contain file path globs in the format similar to one supported by `gitignore`.\n\nInspection ID: EditorConfigEmptyHeader" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "EditorConfigEmptyHeader", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigValueCorrectness", - "shortDescription": { - "text": "Invalid property value" - }, - "fullDescription": { - "text": "Reports property values that do not meet value restrictions. For example, some properties may be only “true” or “false”, others contain only integer numbers etc. If a value has a limited set of variants, use code completion to see all of them. Inspection ID: EditorConfigValueCorrectness", - "markdown": "Reports property values that do not meet value restrictions. For example, some properties may be only \"true\" or \"false\", others contain only integer numbers etc. If a value has a limited set of variants, use code completion to see all of them.\n\nInspection ID: EditorConfigValueCorrectness" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "EditorConfigValueCorrectness", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigVerifyByCore", - "shortDescription": { - "text": "Invalid .editorconfig file" - }, - "fullDescription": { - "text": "Verifies the whole file using the backing EditorConfig core library and reports any failures. Any such failure would prevent EditorConfig properties from being correctly applied. Inspection ID: EditorConfigVerifyByCore", - "markdown": "Verifies the whole file using the backing EditorConfig core library and reports any failures. Any such failure would prevent EditorConfig properties from being correctly applied.\n\nInspection ID: EditorConfigVerifyByCore" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "EditorConfigVerifyByCore", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigValueUniqueness", - "shortDescription": { - "text": "Non-unique list value" - }, - "fullDescription": { - "text": "Reports duplicates in lists of values. Inspection ID: EditorConfigValueUniqueness", - "markdown": "Reports duplicates in lists of values.\n\nInspection ID: EditorConfigValueUniqueness" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "EditorConfigValueUniqueness", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigMissingRequiredDeclaration", - "shortDescription": { - "text": "Required declarations are missing" - }, - "fullDescription": { - "text": "Reports properties that miss the required declarations. Refer to the documentation for more information. Inspection ID: EditorConfigMissingRequiredDeclaration", - "markdown": "Reports properties that miss the required declarations. Refer to the documentation for more information.\n\nInspection ID: EditorConfigMissingRequiredDeclaration" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "EditorConfigMissingRequiredDeclaration", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigCharClassLetterRedundancy", - "shortDescription": { - "text": "Duplicate character class letter" - }, - "fullDescription": { - "text": "Reports wildcard patterns in the EditorConfig section that contain a duplicate character in the character class, for example '[aa]'. Inspection ID: EditorConfigCharClassLetterRedundancy", - "markdown": "Reports wildcard patterns in the EditorConfig section that contain a duplicate character in the character class, for example `[aa]`.\n\nInspection ID: EditorConfigCharClassLetterRedundancy" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "EditorConfigCharClassLetterRedundancy", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigKeyCorrectness", - "shortDescription": { - "text": "Unknown property" - }, - "fullDescription": { - "text": "Reports properties that are not supported by the IDE. Note: some “ij” domain properties may require specific language plugins. Inspection ID: EditorConfigKeyCorrectness", - "markdown": "Reports properties that are not supported by the IDE. Note: some \"ij\" domain properties may require specific language plugins.\n\nInspection ID: EditorConfigKeyCorrectness" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "EditorConfigKeyCorrectness", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigPatternEnumerationRedundancy", - "shortDescription": { - "text": "Unnecessary braces" - }, - "fullDescription": { - "text": "Reports pattern lists that are either empty '{}' or contain just one pattern, for example '{foo}' in contrast to a list containing multiple patterns, for example '{foo,bar}'. In this case braces are handled as a part of the name. For example, the pattern '*.{a}' will match the file 'my.{a}' but not 'my.a'. Inspection ID: EditorConfigPatternEnumerationRedundancy", - "markdown": "Reports pattern lists that are either empty `{}` or contain just one pattern, for example `{foo}` in contrast to a list containing multiple patterns, for example `{foo,bar}`. In this case braces are handled as a part of the name. For example, the pattern `*.{a}` will match the file `my.{a}` but not `my.a`.\n\nInspection ID: EditorConfigPatternEnumerationRedundancy" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "EditorConfigPatternEnumerationRedundancy", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigEncoding", - "shortDescription": { - "text": "File encoding doesn't match EditorConfig charset" - }, - "fullDescription": { - "text": "Checks that current file encoding matches the encoding defined in \"charset\" property of .editorconfig file. Inspection ID: EditorConfigEncoding", - "markdown": "Checks that current file encoding matches the encoding defined in \"charset\" property of .editorconfig file.\n\nInspection ID: EditorConfigEncoding" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "EditorConfigEncoding", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigSpaceInHeader", - "shortDescription": { - "text": "Space in file pattern" - }, - "fullDescription": { - "text": "Reports space characters in wildcard patterns that affect pattern matching. If these characters are not intentional, they should be removed. Inspection ID: EditorConfigSpaceInHeader", - "markdown": "Reports space characters in wildcard patterns that affect pattern matching. If these characters are not intentional, they should be removed.\n\nInspection ID: EditorConfigSpaceInHeader" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "EditorConfigSpaceInHeader", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigOptionRedundancy", - "shortDescription": { - "text": "Redundant property" - }, - "fullDescription": { - "text": "Reports properties that are redundant when another applicable section already contains the same property and value. For example: '[*]\nindent_size=4\n[*.java]\nindent_size=4' are both applicable to '*.java' files and define the same 'indent_size' value. Inspection ID: EditorConfigOptionRedundancy", - "markdown": "Reports properties that are redundant when another applicable section already contains the same property and value.\n\n\nFor example:\n\n\n [*]\n indent_size=4\n [*.java]\n indent_size=4\n\nare both applicable to `*.java` files and define the same `indent_size` value.\n\nInspection ID: EditorConfigOptionRedundancy" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "EditorConfigOptionRedundancy", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigRootDeclarationCorrectness", - "shortDescription": { - "text": "Unexpected top-level declaration" - }, - "fullDescription": { - "text": "Reports unexpected top-level declarations. Top-level declarations other than “root=true” are not allowed in the EditorConfig file. Inspection ID: EditorConfigRootDeclarationCorrectness", - "markdown": "Reports unexpected top-level declarations. Top-level declarations other than \"root=true\" are not allowed in the EditorConfig file.\n\nInspection ID: EditorConfigRootDeclarationCorrectness" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "EditorConfigRootDeclarationCorrectness", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigReferenceCorrectness", - "shortDescription": { - "text": "Invalid reference" - }, - "fullDescription": { - "text": "Reports identifiers that are either unknown or have a wrong type. Inspection ID: EditorConfigReferenceCorrectness", - "markdown": "Reports identifiers that are either unknown or have a wrong type.\n\nInspection ID: EditorConfigReferenceCorrectness" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "EditorConfigReferenceCorrectness", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigUnusedDeclaration", - "shortDescription": { - "text": "Unused declaration" - }, - "fullDescription": { - "text": "Reports unused declarations. Such declarations can be removed. Inspection ID: EditorConfigUnusedDeclaration", - "markdown": "Reports unused declarations. Such declarations can be removed.\n\nInspection ID: EditorConfigUnusedDeclaration" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "EditorConfigUnusedDeclaration", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigPairAcceptability", - "shortDescription": { - "text": "Unexpected key-value pair" - }, - "fullDescription": { - "text": "Reports key-value pairs that are not allowed in the current context. Inspection ID: EditorConfigPairAcceptability", - "markdown": "Reports key-value pairs that are not allowed in the current context.\n\nInspection ID: EditorConfigPairAcceptability" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "EditorConfigPairAcceptability", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigPatternRedundancy", - "shortDescription": { - "text": "Duplicate or redundant pattern" - }, - "fullDescription": { - "text": "Reports file patterns that are redundant as there already are other patterns that define the same scope of files or even a broader one. For example, in '[{*.java,*}]' the first '*.java' pattern defines a narrower scope compared to '*'. That is why it is redundant and can be removed. Inspection ID: EditorConfigPatternRedundancy", - "markdown": "Reports file patterns that are redundant as there already are other patterns that define the same scope of files or even a broader one. For example, in `[{*.java,*}]` the first `*.java` pattern defines a narrower scope compared to `*`. That is why it is redundant and can be removed.\n\nInspection ID: EditorConfigPatternRedundancy" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "EditorConfigPatternRedundancy", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigNoMatchingFiles", - "shortDescription": { - "text": "No matching files" - }, - "fullDescription": { - "text": "Reports sections with wildcard patterns that do not match any files under the directory in which the '.editorconfig' file is located. Inspection ID: EditorConfigNoMatchingFiles", - "markdown": "Reports sections with wildcard patterns that do not match any files under the directory in which the `.editorconfig` file is located.\n\nInspection ID: EditorConfigNoMatchingFiles" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "EditorConfigNoMatchingFiles", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EditorConfigUnexpectedComma", - "shortDescription": { - "text": "Unexpected comma" - }, - "fullDescription": { - "text": "Reports commas that cannot be used in the current context. Commas are allowed only as separators for values in lists. Inspection ID: EditorConfigUnexpectedComma", - "markdown": "Reports commas that cannot be used in the current context. Commas are allowed only as separators for values in lists.\n\nInspection ID: EditorConfigUnexpectedComma" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "EditorConfigUnexpectedComma", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "EditorConfig", - "index": 1, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - } - ], - "language": "en-US", - "contents": ["localizedData", "nonLocalizedData"], - "isComprehensive": false - }, - { - "name": "com.jetbrains.sh", - "version": "253.31833.0", - "rules": [ - { - "id": "ShellCheck", - "shortDescription": { - "text": "ShellCheck" - }, - "fullDescription": { - "text": "Reports shell script bugs detected by the integrated ShellCheck static analysis tool. Inspection ID: ShellCheck", - "markdown": "Reports shell script bugs detected by the integrated [ShellCheck](https://github.com/koalaman/shellcheck) static analysis tool.\n\nInspection ID: ShellCheck" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "ShellCheck", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Security" - } - }, - "relationships": [ - { - "target": { - "id": "Shell script", - "index": 3, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - } - ], - "language": "en-US", - "contents": ["localizedData", "nonLocalizedData"], - "isComprehensive": false - }, - { - "name": "com.intellij", - "version": "253.31833", - "rules": [ - { - "id": "XmlHighlighting", - "shortDescription": { - "text": "XML highlighting" - }, - "fullDescription": { - "text": "Reports XML validation problems in the results of a batch code inspection. Inspection ID: XmlHighlighting", - "markdown": "Reports XML validation problems in the results of a batch code inspection.\n\nInspection ID: XmlHighlighting" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "XmlHighlighting", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "XML", - "index": 4, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "XmlDuplicatedId", - "shortDescription": { - "text": "Duplicate 'id' attribute" - }, - "fullDescription": { - "text": "Reports a duplicate values of the 'id' attribute in XML and HTML. Inspection ID: XmlDuplicatedId", - "markdown": "Reports a duplicate values of the `id` attribute in XML and HTML.\n\nInspection ID: XmlDuplicatedId" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "XmlDuplicatedId", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "XML", - "index": 4, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "RegExpDuplicateCharacterInClass", - "shortDescription": { - "text": "Duplicate character in character class" - }, - "fullDescription": { - "text": "Reports duplicate characters inside a RegExp character class. Duplicate characters are unnecessary and can be removed without changing the semantics of the regex. Example: '[aabc]' After the quick-fix is applied: '[abc]' Inspection ID: RegExpDuplicateCharacterInClass", - "markdown": "Reports duplicate characters inside a RegExp character class. Duplicate characters are unnecessary and can be removed without changing the semantics of the regex.\n\n**Example:**\n\n\n [aabc]\n\nAfter the quick-fix is applied:\n\n\n [abc]\n\nInspection ID: RegExpDuplicateCharacterInClass" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "RegExpDuplicateCharacterInClass", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "RegExp", - "index": 8, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "HtmlUnknownBooleanAttribute", - "shortDescription": { - "text": "Incorrect boolean attribute" - }, - "fullDescription": { - "text": "Reports an HTML non-boolean attribute without a value. Suggests configuring attributes that should not be reported. Inspection ID: HtmlUnknownBooleanAttribute", - "markdown": "Reports an HTML non-boolean attribute without a value. Suggests configuring attributes that should not be reported.\n\nInspection ID: HtmlUnknownBooleanAttribute" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "HtmlUnknownBooleanAttribute", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "HTML", - "index": 12, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "XmlInvalidId", - "shortDescription": { - "text": "Unresolved 'id' reference" - }, - "fullDescription": { - "text": "Reports the use of the 'id' that is not defined anywhere in XML and HTML. Inspection ID: XmlInvalidId", - "markdown": "Reports the use of the `id` that is not defined anywhere in XML and HTML.\n\nInspection ID: XmlInvalidId" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "XmlInvalidId", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "XML", - "index": 4, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "XmlUnboundNsPrefix", - "shortDescription": { - "text": "Unbound namespace prefix" - }, - "fullDescription": { - "text": "Reports an unbound namespace prefix in XML. Inspection ID: XmlUnboundNsPrefix", - "markdown": "Reports an unbound namespace prefix in XML.\n\nInspection ID: XmlUnboundNsPrefix" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "XmlUnboundNsPrefix", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "XML", - "index": 4, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "RequiredAttributes", - "shortDescription": { - "text": "Missing required attribute" - }, - "fullDescription": { - "text": "Reports a missing mandatory attribute in an XML/HTML tag. Suggests configuring attributes that should not be reported. Inspection ID: RequiredAttributes", - "markdown": "Reports a missing mandatory attribute in an XML/HTML tag. Suggests configuring attributes that should not be reported.\n\nInspection ID: RequiredAttributes" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "RequiredAttributes", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "HTML", - "index": 12, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "DuplicatedCode", - "shortDescription": { - "text": "Duplicated code fragment" - }, - "fullDescription": { - "text": "Reports duplicated blocks of code from the selected scope: the same file or the entire project. The inspection features quick-fixes that help you to set the size of detected duplicates, navigate to repetitive code fragments, and compare them in a tool window. The inspection options allow you to select the scope of the reported duplicated fragments and set the initial size for the duplicated language constructs.", - "markdown": "Reports duplicated blocks of code from the selected scope: the same file or the entire project.\n\nThe inspection features quick-fixes that help you to set the size of detected duplicates, navigate to repetitive code fragments, and compare them in a tool window.\n\nThe inspection options allow you to select the scope of the reported duplicated fragments and set the initial size for the duplicated language constructs." - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "DuplicatedCode", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Unspecified" - } - }, - "relationships": [ - { - "target": { - "id": "General", - "index": 13, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "InconsistentLineSeparators", - "shortDescription": { - "text": "Inconsistent line separators" - }, - "fullDescription": { - "text": "Reports files with line separators different from the ones that are specified in the project's settings. For example, the inspection will be triggered if you set the line separator to '\\n' in Settings | Editor | Code Style | Line separator, while the file you are editing uses '\\r\\n' as a line separator. The inspection also warns you about mixed line separators within a file. Inspection ID: InconsistentLineSeparators", - "markdown": "Reports files with line separators different from the ones that are specified in the project's settings.\n\nFor example, the inspection will be triggered if you set the line separator to `\\n` in\n[Settings \\| Editor \\| Code Style \\| Line separator](settings://preferences.sourceCode?Line%20separator),\nwhile the file you are editing uses `\\r\\n` as a line separator.\n\nThe inspection also warns you about mixed line separators within a file.\n\nInspection ID: InconsistentLineSeparators" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "InconsistentLineSeparators", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "General", - "index": 13, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "ReassignedToPlainText", - "shortDescription": { - "text": "Reassigned to plain text" - }, - "fullDescription": { - "text": "Reports files that were explicitly re-assigned to Plain Text File Type. This association is unnecessary because the platform auto-detects text files by content automatically. You can dismiss this warning by removing the file type association in Settings | Editor | File Types | Text. Inspection ID: ReassignedToPlainText", - "markdown": "Reports files that were explicitly re-assigned to Plain Text File Type. This association is unnecessary because the platform auto-detects text files by content automatically.\n\nYou can dismiss this warning by removing the file type association\nin **Settings \\| Editor \\| File Types \\| Text**.\n\nInspection ID: ReassignedToPlainText" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "ReassignedToPlainText", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "General", - "index": 13, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "RedundantSuppression", - "shortDescription": { - "text": "Redundant suppression" - }, - "fullDescription": { - "text": "Reports usages of the following elements that can be safely removed because the inspection they affect is no longer applicable in this context: '@SuppressWarning' annotation, or '// noinspection' line comment, or '/** noinspection */' JavaDoc comment Example: 'public class C {\n // symbol is already private,\n // but annotation is still around\n @SuppressWarnings({\"WeakerAccess\"})\n private boolean CONST = true;\n void f() {\n CONST = false;\n }\n}' Inspection ID: RedundantSuppression", - "markdown": "Reports usages of the following elements that can be safely removed because the inspection they affect is no longer applicable in this context:\n\n* `@SuppressWarning` annotation, or\n* `// noinspection` line comment, or\n* `/** noinspection */` JavaDoc comment\n\nExample:\n\n\n public class C {\n // symbol is already private,\n // but annotation is still around\n @SuppressWarnings({\"WeakerAccess\"})\n private boolean CONST = true;\n void f() {\n CONST = false;\n }\n }\n\nInspection ID: RedundantSuppression" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "RedundantSuppression", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "General", - "index": 13, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "ProblematicWhitespace", - "shortDescription": { - "text": "Problematic whitespace" - }, - "fullDescription": { - "text": "Reports the following problems: Tabs used for indentation when the code style is configured to use only spaces. Spaces used for indentation when the code style is configured to use only tabs. Spaces used for indentation and tabs used for alignment when the code style is configured to use smart tabs. Inspection ID: ProblematicWhitespace", - "markdown": "Reports the following problems:\n\n* Tabs used for indentation when the code style is configured to use only spaces.\n* Spaces used for indentation when the code style is configured to use only tabs.\n* Spaces used for indentation and tabs used for alignment when the code style is configured to use smart tabs.\n\n\nInspection ID: ProblematicWhitespace" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "ProblematicWhitespace", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "General", - "index": 13, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "HtmlUnknownTarget", - "shortDescription": { - "text": "Unresolved file in a link" - }, - "fullDescription": { - "text": "Reports an unresolved file in a link. Inspection ID: HtmlUnknownTarget", - "markdown": "Reports an unresolved file in a link.\n\nInspection ID: HtmlUnknownTarget" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "HtmlUnknownTarget", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "HTML", - "index": 12, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "SSBasedInspection", - "shortDescription": { - "text": "Structural search inspection" - }, - "fullDescription": { - "text": "Allows configuring Structural Search/Structural Replace templates that you can apply to the file you are editing. All matches will be highlighted and marked with the template name that you have configured. If you configure the Structural Replace pattern as well, the corresponding replace option will be available as a quick-fix. Inspection ID: SSBasedInspection", - "markdown": "Allows configuring **Structural Search/Structural Replace** templates that you can apply to the file you are editing.\n\nAll matches will be highlighted and marked with the template name that you have configured.\nIf you configure the **Structural Replace** pattern as well, the corresponding replace option will be available as a quick-fix.\n\nInspection ID: SSBasedInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "SSBasedInspection", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "Structural search", - "index": 14, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "LongLine", - "shortDescription": { - "text": "Line is longer than allowed by code style" - }, - "fullDescription": { - "text": "Reports lines that are longer than the Hard wrap at parameter specified in Settings | Editor | Code Style | General. Inspection ID: LongLine", - "markdown": "Reports lines that are longer than the **Hard wrap at** parameter specified in [Settings \\| Editor \\| Code Style \\| General](settings://preferences.sourceCode?Hard%20wrap%20at).\n\nInspection ID: LongLine" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "LongLine", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "General", - "index": 13, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "XmlUnusedNamespaceDeclaration", - "shortDescription": { - "text": "Unused schema declaration" - }, - "fullDescription": { - "text": "Reports an unused namespace declaration or location hint in XML. Inspection ID: XmlUnusedNamespaceDeclaration", - "markdown": "Reports an unused namespace declaration or location hint in XML.\n\nInspection ID: XmlUnusedNamespaceDeclaration" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "XmlUnusedNamespaceDeclaration", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "XML", - "index": 4, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "RegExpRedundantClassElement", - "shortDescription": { - "text": "Redundant '\\d', '[:digit:]', or '\\D' class elements" - }, - "fullDescription": { - "text": "Reports redundant '\\d' or '[:digit:]' that are used in one class with '\\w' or '[:word:]' ('\\D' with '\\W') and can be removed. Example: '[\\w\\d]' After the quick-fix is applied: '[\\w]' New in 2022.2 Inspection ID: RegExpRedundantClassElement", - "markdown": "Reports redundant `\\d` or `[:digit:]` that are used in one class with `\\w` or `[:word:]` (`\\D` with `\\W`) and can be removed.\n\n**Example:**\n\n\n [\\w\\d]\n\nAfter the quick-fix is applied:\n\n\n [\\w]\n\nNew in 2022.2\n\nInspection ID: RegExpRedundantClassElement" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "RegExpRedundantClassElement", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "RegExp", - "index": 8, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "RegExpSimplifiable", - "shortDescription": { - "text": "Regular expression can be simplified" - }, - "fullDescription": { - "text": "Reports regular expressions that can be simplified. Example: '[a] xx* [ah-hz]' After the quick-fix is applied: 'a x+ [ahz]' New in 2022.1 Inspection ID: RegExpSimplifiable", - "markdown": "Reports regular expressions that can be simplified.\n\n**Example:**\n\n\n [a] xx* [ah-hz]\n\nAfter the quick-fix is applied:\n\n\n a x+ [ahz]\n\nNew in 2022.1\n\nInspection ID: RegExpSimplifiable" - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "RegExpSimplifiable", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "RegExp", - "index": 8, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "XmlWrongRootElement", - "shortDescription": { - "text": "Wrong root element" - }, - "fullDescription": { - "text": "Reports a root tag name different from the name specified in the '' tag. Inspection ID: XmlWrongRootElement", - "markdown": "Reports a root tag name different from the name specified in the `` tag.\n\nInspection ID: XmlWrongRootElement" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "XmlWrongRootElement", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "XML", - "index": 4, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "RegExpEmptyAlternationBranch", - "shortDescription": { - "text": "Empty branch in alternation" - }, - "fullDescription": { - "text": "Reports empty branches in a RegExp alternation. An empty branch will only match the empty string, and in most cases that is not what is desired. This inspection will not report a single empty branch at the start or the end of an alternation. Example: '(alpha||bravo)' After the quick-fix is applied: '(alpha|bravo)' New in 2017.2 Inspection ID: RegExpEmptyAlternationBranch", - "markdown": "Reports empty branches in a RegExp alternation. An empty branch will only match the empty string, and in most cases that is not what is desired. This inspection will not report a single empty branch at the start or the end of an alternation.\n\n**Example:**\n\n\n (alpha||bravo)\n\nAfter the quick-fix is applied:\n\n\n (alpha|bravo)\n\nNew in 2017.2\n\nInspection ID: RegExpEmptyAlternationBranch" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "RegExpEmptyAlternationBranch", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "RegExp", - "index": 8, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "CheckValidXmlInScriptTagBody", - "shortDescription": { - "text": "Malformed content of 'script' tag" - }, - "fullDescription": { - "text": "Reports contents of 'script' tags that are invalid XML. Example: '' After the quick-fix is applied: '' Inspection ID: CheckValidXmlInScriptTagBody", - "markdown": "Reports contents of `script` tags that are invalid XML. \n\n**Example:**\n\n\n \n\nAfter the quick-fix is applied:\n\n\n \n\nInspection ID: CheckValidXmlInScriptTagBody" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "CheckValidXmlInScriptTagBody", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "HTML", - "index": 12, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "Annotator", - "shortDescription": { - "text": "Annotator" - }, - "fullDescription": { - "text": "Reports issues essential to this file (e.g., syntax errors) in the result of a batch code inspection run. These issues are usually always highlighted in the editor and can't be configured, unlike inspections. These options control the scope of checks performed by this inspection: Option \"Report syntax errors\": report parser-related issues. Option \"Report issues from language-specific annotators\": report issues found by annotators configured for the relevant language. See Custom Language Support: Annotators for details. Option \"Report other highlighting problems\": report issues specific to the language of the current file (e.g., type mismatches or unreported exceptions). See Custom Language Support: Highlighting for details. Inspection ID: Annotator", - "markdown": "Reports issues essential to this file (e.g., syntax errors) in the result of a batch code inspection run. These issues are usually always highlighted in the editor and can't be configured, unlike inspections. These options control the scope of checks performed by this inspection:\n\n* Option \"**Report syntax errors**\": report parser-related issues.\n* Option \"**Report issues from language-specific annotators** \": report issues found by annotators configured for the relevant language. See [Custom Language Support: Annotators](https://plugins.jetbrains.com/docs/intellij/annotator.html) for details.\n* Option \"**Report other highlighting problems** \": report issues specific to the language of the current file (e.g., type mismatches or unreported exceptions). See [Custom Language Support: Highlighting](https://plugins.jetbrains.com/docs/intellij/syntax-highlighting-and-error-highlighting.html#semantic-highlighting) for details.\n\nInspection ID: Annotator" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "Annotator", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "General", - "index": 13, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "InjectedReferences", - "shortDescription": { - "text": "Injected references" - }, - "fullDescription": { - "text": "Reports unresolved references injected by Language Injections. Example: '@Language(\"file-reference\")\n String fileName = \"/home/user/nonexistent.file\"; // highlighted if file doesn't exist' Inspection ID: InjectedReferences", - "markdown": "Reports unresolved references injected by [Language Injections](https://www.jetbrains.com/help/idea/using-language-injections.html).\n\nExample:\n\n\n @Language(\"file-reference\")\n String fileName = \"/home/user/nonexistent.file\"; // highlighted if file doesn't exist\n\nInspection ID: InjectedReferences" - }, - "defaultConfiguration": { - "enabled": true, - "level": "error", - "parameters": { - "suppressToolId": "InjectedReferences", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "General", - "index": 13, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "RegExpSuspiciousBackref", - "shortDescription": { - "text": "Suspicious back reference" - }, - "fullDescription": { - "text": "Reports back references that will not be resolvable at runtime. This means that the back reference can never match anything. A back reference will not be resolvable when the group is defined after the back reference, or if the group is defined in a different branch of an alternation. Example of a group defined after its back reference: '\\1(abc)' Example of a group and a back reference in different branches: 'a(b)c|(xy)\\1z' New in 2022.1 Inspection ID: RegExpSuspiciousBackref", - "markdown": "Reports back references that will not be resolvable at runtime. This means that the back reference can never match anything. A back reference will not be resolvable when the group is defined after the back reference, or if the group is defined in a different branch of an alternation.\n\n**Example of a group defined after its back reference:**\n\n\n \\1(abc)\n\n**Example of a group and a back reference in different branches:**\n\n\n a(b)c|(xy)\\1z\n\nNew in 2022.1\n\nInspection ID: RegExpSuspiciousBackref" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "RegExpSuspiciousBackref", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "RegExp", - "index": 8, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "XmlPathReference", - "shortDescription": { - "text": "Unresolved file reference" - }, - "fullDescription": { - "text": "Reports an unresolved file reference in XML. Inspection ID: XmlPathReference", - "markdown": "Reports an unresolved file reference in XML.\n\nInspection ID: XmlPathReference" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "XmlPathReference", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "XML", - "index": 4, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "RegExpSingleCharAlternation", - "shortDescription": { - "text": "Single character alternation" - }, - "fullDescription": { - "text": "Reports single char alternation in a RegExp. It is simpler to use a character class instead. This may also provide better matching performance. Example: 'a|b|c|d' After the quick-fix is applied: '[abcd]' New in 2017.1 Inspection ID: RegExpSingleCharAlternation", - "markdown": "Reports single char alternation in a RegExp. It is simpler to use a character class instead. This may also provide better matching performance.\n\n**Example:**\n\n\n a|b|c|d\n\nAfter the quick-fix is applied:\n\n\n [abcd]\n\n\nNew in 2017.1\n\nInspection ID: RegExpSingleCharAlternation" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "RegExpSingleCharAlternation", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Performance" - } - }, - "relationships": [ - { - "target": { - "id": "RegExp", - "index": 8, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "RegExpUnnecessaryNonCapturingGroup", - "shortDescription": { - "text": "Unnecessary non-capturing group" - }, - "fullDescription": { - "text": "Reports unnecessary non-capturing groups, which have no influence on the match result. Example: 'Everybody be cool, (?:this) is a robbery!' After the quick-fix is applied: 'Everybody be cool, this is a robbery!' New in 2021.1 Inspection ID: RegExpUnnecessaryNonCapturingGroup", - "markdown": "Reports unnecessary non-capturing groups, which have no influence on the match result.\n\n**Example:**\n\n\n Everybody be cool, (?:this) is a robbery!\n\nAfter the quick-fix is applied:\n\n\n Everybody be cool, this is a robbery!\n\nNew in 2021.1\n\nInspection ID: RegExpUnnecessaryNonCapturingGroup" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "RegExpUnnecessaryNonCapturingGroup", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "RegExp", - "index": 8, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "TodoComment", - "shortDescription": { - "text": "TODO comment" - }, - "fullDescription": { - "text": "Reports TODO comments in your code. You can configure the format for TODO comments in Settings | Editor | TODO. Enable the Only warn on TODO comments without any details option to only warn on empty TODO comments, that don't provide any description on the task that should be done. Disable to report all TODO comments. Inspection ID: TodoComment", - "markdown": "Reports **TODO** comments in your code.\n\nYou can configure the format for **TODO** comments in [Settings \\| Editor \\| TODO](settings://preferences.toDoOptions).\n\nEnable the **Only warn on TODO comments without any details** option to only warn on empty TODO comments, that\ndon't provide any description on the task that should be done. Disable to report all TODO comments.\n\nInspection ID: TodoComment" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "TodoComment", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "General", - "index": 13, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "HtmlUnknownAttribute", - "shortDescription": { - "text": "Unknown attribute" - }, - "fullDescription": { - "text": "Reports an unknown HTML attribute. Suggests configuring attributes that should not be reported. Inspection ID: HtmlUnknownAttribute", - "markdown": "Reports an unknown HTML attribute. Suggests configuring attributes that should not be reported.\n\nInspection ID: HtmlUnknownAttribute" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "HtmlUnknownAttribute", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "HTML", - "index": 12, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "CheckTagEmptyBody", - "shortDescription": { - "text": "Empty element content" - }, - "fullDescription": { - "text": "Reports XML elements without contents. Example: '\n \n ' After the quick-fix is applied: '\n \n ' Inspection ID: CheckTagEmptyBody", - "markdown": "Reports XML elements without contents.\n\n**Example:**\n\n\n \n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n \n\nInspection ID: CheckTagEmptyBody" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "CheckTagEmptyBody", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "XML", - "index": 4, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "RegExpRedundantEscape", - "shortDescription": { - "text": "Redundant character escape" - }, - "fullDescription": { - "text": "Reports redundant character escape sequences that can be replaced with unescaped characters preserving the meaning. Many escape sequences that are necessary outside of a character class are redundant inside square brackets '[]' of a character class. Although unescaped opening curly braces '{' outside of character classes are allowed in some dialects (JavaScript, Python, and so on), it can cause confusion and make the pattern less portable, because there are dialects that require escaping curly braces as characters. For this reason the inspection does not report escaped opening curly braces. Example: '\\-\\;[\\.]' After the quick-fix is applied: '-;[.]' The Ignore escaped closing brackets '}' and ']' option specifies whether to report '\\}' and '\\]' outside of a character class when they are allowed to be unescaped by the RegExp dialect. Similarly, the Ignore escaped forward-slashes '/' option specifies whether to report '\\/' when they are allowed to be unescaped by the RegExp dialect. New in 2017.3 Inspection ID: RegExpRedundantEscape", - "markdown": "Reports redundant character escape sequences that can be replaced with unescaped characters preserving the meaning. Many escape sequences that are necessary outside of a character class are redundant inside square brackets `[]` of a character class.\n\n\nAlthough unescaped opening curly braces `{` outside of character classes are allowed in some dialects (JavaScript, Python, and so on),\nit can cause confusion and make the pattern less portable, because there are dialects that require escaping curly braces as characters.\nFor this reason the inspection does not report escaped opening curly braces.\n\n**Example:**\n\n\n \\-\\;[\\.]\n\nAfter the quick-fix is applied:\n\n\n -;[.]\n\n\nThe **Ignore escaped closing brackets '}' and '\\]'** option specifies whether to report `\\}` and `\\]` outside of a character class\nwhen they are allowed to be unescaped by the RegExp dialect.\n\n\nSimilarly, the **Ignore escaped forward-slashes '/'** option specifies whether to report `\\/` when\nthey are allowed to be unescaped by the RegExp dialect.\n\nNew in 2017.3\n\nInspection ID: RegExpRedundantEscape" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "RegExpRedundantEscape", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "RegExp", - "index": 8, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "UnresolvedReference", - "shortDescription": { - "text": "Unresolved reference" - }, - "fullDescription": { - "text": "Reports an unresolved reference to a named pattern ('define') in RELAX-NG files that use XML syntax. Suggests creating the referenced 'define' element. Inspection ID: UnresolvedReference", - "markdown": "Reports an unresolved reference to a named pattern (`define`) in RELAX-NG files that use XML syntax. Suggests creating the referenced `define` element.\n\nInspection ID: UnresolvedReference" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "UnresolvedReference", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "RELAX NG", - "index": 16, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "HtmlMissingClosingTag", - "shortDescription": { - "text": "Missing closing tag" - }, - "fullDescription": { - "text": "Reports an HTML element without a closing tag. Some coding styles require that HTML elements have closing tags even where this is optional. Example: '\n \n

      Behold!\n \n ' After the quick-fix is applied: '\n \n

      Behold!

      \n \n ' Inspection ID: HtmlMissingClosingTag", - "markdown": "Reports an HTML element without a closing tag. Some coding styles require that HTML elements have closing tags even where this is optional.\n\n**Example:**\n\n\n \n \n

      Behold!\n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n

      Behold!

      \n \n \n\nInspection ID: HtmlMissingClosingTag" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "HtmlMissingClosingTag", - "ideaSeverity": "INFORMATION", - "qodanaSeverity": "Info", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "HTML", - "index": 12, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "RegExpRedundantNestedCharacterClass", - "shortDescription": { - "text": "Redundant nested character class" - }, - "fullDescription": { - "text": "Reports unnecessary nested character classes. Example: '[a-c[x-z]]' After the quick-fix is applied: '[a-cx-z]' New in 2020.2 Inspection ID: RegExpRedundantNestedCharacterClass", - "markdown": "Reports unnecessary nested character classes.\n\n**Example:**\n\n\n [a-c[x-z]]\n\nAfter the quick-fix is applied:\n\n\n [a-cx-z]\n\nNew in 2020.2\n\nInspection ID: RegExpRedundantNestedCharacterClass" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "RegExpRedundantNestedCharacterClass", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "RegExp", - "index": 8, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "XmlDeprecatedElement", - "shortDescription": { - "text": "Deprecated symbol" - }, - "fullDescription": { - "text": "Reports a deprecated XML element or attribute. Symbols can be marked by XML comment or documentation tag with text 'deprecated'. Inspection ID: XmlDeprecatedElement", - "markdown": "Reports a deprecated XML element or attribute.\n\nSymbols can be marked by XML comment or documentation tag with text 'deprecated'.\n\nInspection ID: XmlDeprecatedElement" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "XmlDeprecatedElement", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "XML", - "index": 4, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "CustomRegExpInspection", - "shortDescription": { - "text": "Custom RegExp inspection" - }, - "fullDescription": { - "text": "Custom Regex Inspection Inspection ID: CustomRegExpInspection", - "markdown": "Custom Regex Inspection\n\nInspection ID: CustomRegExpInspection" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "CustomRegExpInspection", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Unspecified" - } - }, - "relationships": [ - { - "target": { - "id": "RegExp", - "index": 8, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "IncorrectFormatting", - "shortDescription": { - "text": "Incorrect formatting" - }, - "fullDescription": { - "text": "Reports formatting issues that appear if your code doesn't follow your project's code style settings. This inspection is not compatible with languages that require third-party formatters for code formatting, for example, Go or C with CLangFormat enabled. Inspection ID: IncorrectFormatting", - "markdown": "Reports formatting issues that appear if your code doesn't\nfollow your project's code style settings.\n\n\nThis inspection is not compatible with languages that require\nthird-party formatters for code formatting, for example, Go or\nC with CLangFormat enabled.\n\nInspection ID: IncorrectFormatting" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "IncorrectFormatting", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "General", - "index": 13, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "HtmlWrongAttributeValue", - "shortDescription": { - "text": "Wrong attribute value" - }, - "fullDescription": { - "text": "Reports an incorrect HTML attribute value. Inspection ID: HtmlWrongAttributeValue", - "markdown": "Reports an incorrect HTML attribute value.\n\nInspection ID: HtmlWrongAttributeValue" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "HtmlWrongAttributeValue", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "HTML", - "index": 12, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "XmlDefaultAttributeValue", - "shortDescription": { - "text": "Redundant attribute with default value" - }, - "fullDescription": { - "text": "Reports a redundant assignment of the default value to an XML attribute. Inspection ID: XmlDefaultAttributeValue", - "markdown": "Reports a redundant assignment of the default value to an XML attribute.\n\nInspection ID: XmlDefaultAttributeValue" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "XmlDefaultAttributeValue", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "XML", - "index": 4, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "HtmlExtraClosingTag", - "shortDescription": { - "text": "Redundant closing tag" - }, - "fullDescription": { - "text": "Reports redundant closing tags on empty elements, for example, 'img' or 'br'. Example: '\n \n

      \n \n ' After the quick-fix is applied: '\n \n
      \n \n ' Inspection ID: HtmlExtraClosingTag", - "markdown": "Reports redundant closing tags on empty elements, for example, `img` or `br`.\n\n**Example:**\n\n\n \n \n

      \n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n
      \n \n \n\nInspection ID: HtmlExtraClosingTag" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "HtmlExtraClosingTag", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "HTML", - "index": 12, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "RegExpOctalEscape", - "shortDescription": { - "text": "Octal escape" - }, - "fullDescription": { - "text": "Reports octal escapes, which are easily confused with back references. Use hexadecimal escapes to avoid confusion. Example: '\\07' After the quick-fix is applied: '\\x07' New in 2017.1 Inspection ID: RegExpOctalEscape", - "markdown": "Reports octal escapes, which are easily confused with back references. Use hexadecimal escapes to avoid confusion.\n\n**Example:**\n\n\n \\07\n\nAfter the quick-fix is applied:\n\n\n \\x07\n\nNew in 2017.1\n\nInspection ID: RegExpOctalEscape" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "RegExpOctalEscape", - "ideaSeverity": "INFORMATION", - "qodanaSeverity": "Info", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "RegExp", - "index": 8, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "HtmlUnknownAnchorTarget", - "shortDescription": { - "text": "Unresolved fragment in a link" - }, - "fullDescription": { - "text": "Reports an unresolved last part of an URL after the '#' sign. Inspection ID: HtmlUnknownAnchorTarget", - "markdown": "Reports an unresolved last part of an URL after the `#` sign.\n\nInspection ID: HtmlUnknownAnchorTarget" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "HtmlUnknownAnchorTarget", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Security" - } - }, - "relationships": [ - { - "target": { - "id": "HTML", - "index": 12, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "UnusedDefine", - "shortDescription": { - "text": "Unused define" - }, - "fullDescription": { - "text": "Reports an unused named pattern ('define') in a RELAX-NG file (XML or Compact Syntax). 'define' elements that are used through an include in another file are ignored. Inspection ID: UnusedDefine", - "markdown": "Reports an unused named pattern (`define`) in a RELAX-NG file (XML or Compact Syntax). `define` elements that are used through an include in another file are ignored.\n\nInspection ID: UnusedDefine" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "UnusedDefine", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "RELAX NG", - "index": 16, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "RegExpUnexpectedAnchor", - "shortDescription": { - "text": "Begin or end anchor in unexpected position" - }, - "fullDescription": { - "text": "Reports '^' or '\\A' anchors not at the beginning of the pattern and '$', '\\Z' or '\\z' anchors not at the end of the pattern. In the wrong position these RegExp anchors prevent the pattern from matching anything. In case of the '^' and '$' anchors, most likely the literal character was meant and the escape forgotten. Example: '(Price $10)' New in 2018.1 Inspection ID: RegExpUnexpectedAnchor", - "markdown": "Reports `^` or `\\A` anchors not at the beginning of the pattern and `$`, `\\Z` or `\\z` anchors not at the end of the pattern. In the wrong position these RegExp anchors prevent the pattern from matching anything. In case of the `^` and `$` anchors, most likely the literal character was meant and the escape forgotten.\n\n**Example:**\n\n\n (Price $10)\n\n\nNew in 2018.1\n\nInspection ID: RegExpUnexpectedAnchor" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "RegExpUnexpectedAnchor", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "RegExp", - "index": 8, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "EmptyDirectory", - "shortDescription": { - "text": "Empty directory" - }, - "fullDescription": { - "text": "Reports empty directories. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor. Use the Only report empty directories located under a source folder option to have only directories under source roots reported. Inspection ID: EmptyDirectory", - "markdown": "Reports empty directories.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Only report empty directories located under a source folder** option to have only directories under source\nroots reported.\n\n\nInspection ID: EmptyDirectory" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "EmptyDirectory", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "General", - "index": 13, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "RegExpAnonymousGroup", - "shortDescription": { - "text": "Anonymous capturing group or numeric back reference" - }, - "fullDescription": { - "text": "Reports anonymous capturing groups and numeric back references in a RegExp. These are only reported when the RegExp dialect supports named group and named group references. Named groups and named back references improve code readability and are recommended to use instead. When a capture is not needed, matching can be more performant and use less memory by using a non-capturing group, i.e. '(?:xxx)' instead of '(xxx)'. Example: '(\\d\\d\\d\\d)\\1' A better regex pattern could look like this: '(?\\d\\d\\d\\d)\\k' New in 2017.2 Inspection ID: RegExpAnonymousGroup", - "markdown": "Reports anonymous capturing groups and numeric back references in a RegExp. These are only reported when the RegExp dialect supports named group and named group references. Named groups and named back references improve code readability and are recommended to use instead. When a capture is not needed, matching can be more performant and use less memory by using a non-capturing group, i.e. `(?:xxx)` instead of `(xxx)`.\n\n**Example:**\n\n\n (\\d\\d\\d\\d)\\1\n\nA better regex pattern could look like this:\n\n\n (?\\d\\d\\d\\d)\\k\n\nNew in 2017.2\n\nInspection ID: RegExpAnonymousGroup" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "RegExpAnonymousGroup", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "RegExp", - "index": 8, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "CheckDtdRefs", - "shortDescription": { - "text": "Unresolved DTD reference" - }, - "fullDescription": { - "text": "Reports inconsistency in a DTD-specific reference, for example, in a reference to an XML entity or to a DTD element declaration. Works in DTD an XML files. Inspection ID: CheckDtdRefs", - "markdown": "Reports inconsistency in a DTD-specific reference, for example, in a reference to an XML entity or to a DTD element declaration. Works in DTD an XML files.\n\nInspection ID: CheckDtdRefs" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "CheckDtdRefs", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "XML", - "index": 4, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "CheckXmlFileWithXercesValidator", - "shortDescription": { - "text": "Failed external validation" - }, - "fullDescription": { - "text": "Reports a discrepancy in an XML file with the specified DTD or schema detected by the Xerces validator. Inspection ID: CheckXmlFileWithXercesValidator", - "markdown": "Reports a discrepancy in an XML file with the specified DTD or schema detected by the Xerces validator.\n\nInspection ID: CheckXmlFileWithXercesValidator" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "CheckXmlFileWithXercesValidator", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "XML", - "index": 4, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "NonAsciiCharacters", - "shortDescription": { - "text": "Non-ASCII characters" - }, - "fullDescription": { - "text": "Reports code elements that use non-ASCII symbols in an unusual context. Example: Non-ASCII characters used in identifiers, strings, or comments. Identifiers written in different languages, such as 'myСollection' with the letter 'C' written in Cyrillic. Comments or strings containing Unicode symbols, such as long dashes and arrows. Inspection ID: NonAsciiCharacters", - "markdown": "Reports code elements that use non-ASCII symbols in an unusual context.\n\nExample:\n\n* Non-ASCII characters used in identifiers, strings, or comments.\n* Identifiers written in different languages, such as `my`**С**`ollection` with the letter **C** written in Cyrillic.\n* Comments or strings containing Unicode symbols, such as long dashes and arrows.\n\nInspection ID: NonAsciiCharacters" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "NonAsciiCharacters", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Internationalization", - "index": 17, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "XmlUnresolvedReference", - "shortDescription": { - "text": "Unresolved references" - }, - "fullDescription": { - "text": "Reports an unresolved references in XML. Inspection ID: XmlUnresolvedReference", - "markdown": "Reports an unresolved references in XML.\n\nInspection ID: XmlUnresolvedReference" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "XmlUnresolvedReference", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "XML", - "index": 4, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "HtmlUnknownTag", - "shortDescription": { - "text": "Unknown tag" - }, - "fullDescription": { - "text": "Reports an unknown HTML tag. Suggests configuring tags that should not be reported. Inspection ID: HtmlUnknownTag", - "markdown": "Reports an unknown HTML tag. Suggests configuring tags that should not be reported.\n\nInspection ID: HtmlUnknownTag" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "HtmlUnknownTag", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "HTML", - "index": 12, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "RegExpEscapedMetaCharacter", - "shortDescription": { - "text": "Escaped meta character" - }, - "fullDescription": { - "text": "Reports escaped meta characters. Some RegExp coding styles specify that meta characters should be placed inside a character class, to make the regular expression easier to understand. This inspection does not warn about the meta character '[', ']' and '^', because those would need additional escaping inside a character class. Example: '\\d+\\.\\d+' After the quick-fix is applied: '\\d+[.]\\d+' New in 2017.1 Inspection ID: RegExpEscapedMetaCharacter", - "markdown": "Reports escaped meta characters. Some RegExp coding styles specify that meta characters should be placed inside a character class, to make the regular expression easier to understand. This inspection does not warn about the meta character `[`, `]` and `^`, because those would need additional escaping inside a character class.\n\n**Example:**\n\n\n \\d+\\.\\d+\n\nAfter the quick-fix is applied:\n\n\n \\d+[.]\\d+\n\nNew in 2017.1\n\nInspection ID: RegExpEscapedMetaCharacter" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "RegExpEscapedMetaCharacter", - "ideaSeverity": "INFORMATION", - "qodanaSeverity": "Info", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "RegExp", - "index": 8, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "LossyEncoding", - "shortDescription": { - "text": "Lossy encoding" - }, - "fullDescription": { - "text": "Reports characters that cannot be displayed because of the current document encoding. Examples: If you type international characters in a document with the US-ASCII charset, some characters will be lost on save. If you load a UTF-8-encoded file using the ISO-8859-1 one-byte charset, some characters will be displayed incorrectly. You can fix this by changing the file encoding either by specifying the encoding directly in the file, e.g. by editing 'encoding=' attribute in the XML prolog of XML file, or by changing the corresponding options in Settings | Editor | File Encodings. Inspection ID: LossyEncoding", - "markdown": "Reports characters that cannot be displayed because of the current document encoding.\n\nExamples:\n\n* If you type international characters in a document with the **US-ASCII** charset, some characters will be lost on save.\n* If you load a **UTF-8** -encoded file using the **ISO-8859-1** one-byte charset, some characters will be displayed incorrectly.\n\nYou can fix this by changing the file encoding\neither by specifying the encoding directly in the file, e.g. by editing `encoding=` attribute in the XML prolog of XML file,\nor by changing the corresponding options in **Settings \\| Editor \\| File Encodings**.\n\nInspection ID: LossyEncoding" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "LossyEncoding", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "Internationalization", - "index": 17, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "RegExpDuplicateAlternationBranch", - "shortDescription": { - "text": "Duplicate branch in alternation" - }, - "fullDescription": { - "text": "Reports duplicate branches in a RegExp alternation. Duplicate branches slow down matching and obscure the intent of the expression. Example: '(alpha|bravo|charlie|alpha)' After the quick-fix is applied: '(alpha|bravo|charlie)' New in 2017.1 Inspection ID: RegExpDuplicateAlternationBranch", - "markdown": "Reports duplicate branches in a RegExp alternation. Duplicate branches slow down matching and obscure the intent of the expression.\n\n**Example:**\n\n\n (alpha|bravo|charlie|alpha)\n\nAfter the quick-fix is applied:\n\n\n (alpha|bravo|charlie)\n\nNew in 2017.1\n\nInspection ID: RegExpDuplicateAlternationBranch" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "RegExpDuplicateAlternationBranch", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Performance" - } - }, - "relationships": [ - { - "target": { - "id": "RegExp", - "index": 8, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "RegExpRepeatedSpace", - "shortDescription": { - "text": "Consecutive spaces" - }, - "fullDescription": { - "text": "Reports multiple consecutive spaces in a RegExp. Because spaces are not visible by default, it can be hard to see how many spaces are required. The RegExp can be made more clear by replacing the consecutive spaces with a single space and a counted quantifier. Example: '( )' After the quick-fix is applied: '( {5})' New in 2017.1 Inspection ID: RegExpRepeatedSpace", - "markdown": "Reports multiple consecutive spaces in a RegExp. Because spaces are not visible by default, it can be hard to see how many spaces are required. The RegExp can be made more clear by replacing the consecutive spaces with a single space and a counted quantifier.\n\n**Example:**\n\n\n ( )\n\nAfter the quick-fix is applied:\n\n\n ( {5})\n\n\nNew in 2017.1\n\nInspection ID: RegExpRepeatedSpace" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "RegExpRepeatedSpace", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "RegExp", - "index": 8, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "IgnoreFileDuplicateEntry", - "shortDescription": { - "text": "Ignore file duplicates" - }, - "fullDescription": { - "text": "Reports duplicate entries (patterns) in the ignore file (e.g. .gitignore, .hgignore). Duplicate entries in these files are redundant and can be removed. Example: '# Output directories\n /out/\n /target/\n /out/' Inspection ID: IgnoreFileDuplicateEntry", - "markdown": "Reports duplicate entries (patterns) in the ignore file (e.g. .gitignore, .hgignore). Duplicate entries in these files are redundant and can be removed.\n\nExample:\n\n\n # Output directories\n /out/\n /target/\n /out/\n\nInspection ID: IgnoreFileDuplicateEntry" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "IgnoreFileDuplicateEntry", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "Version control", - "index": 19, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "CheckEmptyScriptTag", - "shortDescription": { - "text": "Empty tag" - }, - "fullDescription": { - "text": "Reports empty tags that do not work in some browsers. Example: '\n \n ' Inspection ID: CheckEmptyScriptTag", - "markdown": "Reports empty tags that do not work in some browsers.\n\n**Example:**\n\n\n \n \n \n\nInspection ID: CheckEmptyScriptTag" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "CheckEmptyScriptTag", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "HTML", - "index": 12, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - } - ], - "language": "en-US", - "contents": ["localizedData", "nonLocalizedData"], - "isComprehensive": false - }, - { - "name": "org.jetbrains.plugins.yaml", - "version": "253.31833.0", - "rules": [ - { - "id": "YAMLRecursiveAlias", - "shortDescription": { - "text": "Recursive alias" - }, - "fullDescription": { - "text": "Reports recursion in YAML aliases. Alias can't be recursive and be used inside the data referenced by a corresponding anchor. Example: 'some_key: &some_anchor\n sub_key1: value1\n sub_key2: *some_anchor' Inspection ID: YAMLRecursiveAlias", - "markdown": "Reports recursion in YAML aliases.\n\nAlias can't be recursive and be used inside the data referenced by a corresponding anchor.\n\n**Example:**\n\n\n some_key: &some_anchor\n sub_key1: value1\n sub_key2: *some_anchor\n\nInspection ID: YAMLRecursiveAlias" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "YAMLRecursiveAlias", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "YAML", - "index": 5, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "YAMLSchemaValidation", - "shortDescription": { - "text": "Validation by JSON Schema" - }, - "fullDescription": { - "text": "Reports inconsistencies between a YAML file and a JSON Schema if the schema is specified. Scheme example: '{\n \"properties\": {\n \"SomeNumberProperty\": {\n \"type\": \"number\"\n }\n }\n }' The following is an example with the corresponding warning: 'SomeNumberProperty: hello world' Inspection ID: YAMLSchemaValidation", - "markdown": "Reports inconsistencies between a YAML file and a JSON Schema if the schema is specified.\n\n**Scheme example:**\n\n\n {\n \"properties\": {\n \"SomeNumberProperty\": {\n \"type\": \"number\"\n }\n }\n }\n\n**The following is an example with the corresponding warning:**\n\n\n SomeNumberProperty: hello world\n\nInspection ID: YAMLSchemaValidation" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "YAMLSchemaValidation", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "YAML", - "index": 5, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "YAMLIncompatibleTypes", - "shortDescription": { - "text": "Suspicious type mismatch" - }, - "fullDescription": { - "text": "Reports a mismatch between a scalar value type in YAML file and types of the values in the similar positions. Example: 'myElements:\n - value1\n - value2\n - false # <- reported, because it is a boolean value, while other values are strings' Inspection ID: YAMLIncompatibleTypes", - "markdown": "Reports a mismatch between a scalar value type in YAML file and types of the values in the similar positions.\n\n**Example:**\n\n\n myElements:\n - value1\n - value2\n - false # <- reported, because it is a boolean value, while other values are strings\n\nInspection ID: YAMLIncompatibleTypes" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "YAMLIncompatibleTypes", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "YAML", - "index": 5, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "YAMLDuplicatedKeys", - "shortDescription": { - "text": "Duplicated YAML keys" - }, - "fullDescription": { - "text": "Reports duplicated keys in YAML files. Example: 'same_key: some value\n same_key: another value' Inspection ID: YAMLDuplicatedKeys", - "markdown": "Reports duplicated keys in YAML files.\n\n**Example:**\n\n\n same_key: some value\n same_key: another value\n\nInspection ID: YAMLDuplicatedKeys" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "YAMLDuplicatedKeys", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "YAML", - "index": 5, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "YAMLUnusedAnchor", - "shortDescription": { - "text": "Unused anchor" - }, - "fullDescription": { - "text": "Reports unused anchors. Example: 'some_key: &some_anchor\n key1: value1' Inspection ID: YAMLUnusedAnchor", - "markdown": "Reports unused anchors.\n\n**Example:**\n\n\n some_key: &some_anchor\n key1: value1\n\nInspection ID: YAMLUnusedAnchor" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "YAMLUnusedAnchor", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "YAML", - "index": 5, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "YAMLUnresolvedAlias", - "shortDescription": { - "text": "Unresolved alias" - }, - "fullDescription": { - "text": "Reports unresolved aliases in YAML files. Example: 'some_key: *unknown_alias' Inspection ID: YAMLUnresolvedAlias", - "markdown": "Reports unresolved aliases in YAML files.\n\n**Example:**\n\n\n some_key: *unknown_alias\n\nInspection ID: YAMLUnresolvedAlias" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "YAMLUnresolvedAlias", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "YAML", - "index": 5, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "YAMLSchemaDeprecation", - "shortDescription": { - "text": "Deprecated YAML key" - }, - "fullDescription": { - "text": "Reports deprecated keys in YAML files. Deprecation is checked only if there exists a JSON schema associated with the corresponding YAML file. Note that the deprecation mechanism is not defined in the JSON Schema specification yet, and this inspection uses a non-standard 'deprecationMessage' extension. Scheme deprecation example: '{\n \"properties\": {\n \"SomeDeprecatedProperty\": {\n \"deprecationMessage\": \"Baz\",\n \"description\": \"Foo bar\"\n }\n }\n }' The following is an example with the corresponding warning: 'SomeDeprecatedProperty: some value' Inspection ID: YAMLSchemaDeprecation", - "markdown": "Reports deprecated keys in YAML files.\n\nDeprecation is checked only if there exists a JSON schema associated with the corresponding YAML file.\n\nNote that the deprecation mechanism is not defined in the JSON Schema specification yet,\nand this inspection uses a non-standard `deprecationMessage` extension.\n\n**Scheme deprecation example:**\n\n\n {\n \"properties\": {\n \"SomeDeprecatedProperty\": {\n \"deprecationMessage\": \"Baz\",\n \"description\": \"Foo bar\"\n }\n }\n }\n\n**The following is an example with the corresponding warning:**\n\n\n SomeDeprecatedProperty: some value\n\nInspection ID: YAMLSchemaDeprecation" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "YAMLSchemaDeprecation", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "YAML", - "index": 5, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - } - ], - "language": "en-US", - "contents": ["localizedData", "nonLocalizedData"], - "isComprehensive": false - }, - { - "name": "tanvd.grazi", - "version": "253.31833.0", - "rules": [ - { - "id": "GrazieStyle", - "shortDescription": { - "text": "Style" - }, - "fullDescription": { - "text": "Check the writing style defined in: Grazie rule files (e.g. '.grazie.en.yaml' for English) for this project or its specific subdirectories. To create such a file, invoke New menu on any (e.g. root) directory of the project. Style rules in Editor | Natural languages | Rules settings This inspection only returns results via Code | Analyze Code | Run Inspection By Name... or in offline analysis. Editor highlighting of style issues is performed independently of this inspection's settings. Inspection ID: GrazieStyle", - "markdown": "Check the writing style defined in:\n\n* Grazie rule files (e.g. `.grazie.en.yaml` for English) for this project or its specific subdirectories. To create such a file, invoke **New** menu on any (e.g. root) directory of the project.\n* *Style* rules in *Editor \\| Natural languages \\| Rules* settings\n\nThis inspection only returns results via **Code \\| Analyze Code \\| Run Inspection By Name...** or in offline analysis. Editor highlighting of style issues is performed independently of this inspection's settings.\n\nInspection ID: GrazieStyle" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "GrazieStyle", - "ideaSeverity": "STYLE_SUGGESTION", - "qodanaSeverity": "Info", - "codeQualityCategory": "Unspecified" - } - }, - "relationships": [ - { - "target": { - "id": "Proofreading", - "index": 6, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "LanguageDetectionInspection", - "shortDescription": { - "text": "Natural language detection" - }, - "fullDescription": { - "text": "Detects natural languages and suggests enabling corresponding grammar and spelling checks. Inspection ID: LanguageDetectionInspection", - "markdown": "Detects natural languages and suggests enabling corresponding grammar and spelling checks.\n\nInspection ID: LanguageDetectionInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "LanguageDetectionInspection", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Proofreading", - "index": 6, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "SpellCheckingInspection", - "shortDescription": { - "text": "Spelling" - }, - "fullDescription": { - "text": "Reports typos and misspellings in your code, comments, and literals and fixes them with one click. Inspection ID: SpellCheckingInspection", - "markdown": "Reports typos and misspellings in your code, comments, and literals and fixes them with one click.\n\nInspection ID: SpellCheckingInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "SpellCheckingInspection", - "ideaSeverity": "TYPO", - "qodanaSeverity": "Low", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Proofreading", - "index": 6, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "GrazieInspection", - "shortDescription": { - "text": "Grammar" - }, - "fullDescription": { - "text": "Reports grammar mistakes in your text. You can configure the inspection in Settings | Editor | Natural Languages | Grammar and Style. Inspection ID: GrazieInspection", - "markdown": "Reports grammar mistakes in your text. You can configure the inspection in [Settings \\| Editor \\| Natural Languages \\| Grammar and Style](settings://reference.settingsdialog.project.grazie).\n\nInspection ID: GrazieInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "GrazieInspection", - "ideaSeverity": "GRAMMAR_ERROR", - "qodanaSeverity": "Info", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Proofreading", - "index": 6, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "GrazieInspectionRunner", - "shortDescription": { - "text": "Grammar" - }, - "fullDescription": { - "text": "Write your description here. Start the description with a verb in 3rd person singular, like reports, detects, highlights. In the first sentence, briefly explain what exactly the inspection helps you detect. Make sure the sentence is not very long and complicated. The first sentence must be in a dedicated paragraph separated from the rest of the text. This will make the description easier to read. Make sure the description doesn’t just repeat the inspection title. See https://plugins.jetbrains.com/docs/intellij/inspections.html#descriptions for more information. Embed code snippets: '// automatically highlighted according to inspection registration 'language' attribute' Text after this comment will only be shown in the settings of the inspection. To open related settings directly from the description, add a link with `settings://$` optionally followed by `?$` to pre-select a UI element. Inspection ID: GrazieInspectionRunner", - "markdown": "Write your description here. Start the description with a verb in 3rd person singular, like reports, detects, highlights. In the first sentence, briefly explain what exactly the inspection helps you detect. Make sure the sentence is not very long and complicated.\n\n\nThe first sentence must be in a dedicated paragraph separated from the rest of the text. This will make the description easier to read.\nMake sure the description doesn't just repeat the inspection title.\n\n\nSee https://plugins.jetbrains.com/docs/intellij/inspections.html#descriptions for more information.\n\n\nEmbed code snippets:\n\n\n // automatically highlighted according to inspection registration 'language' attribute\n\nText after this comment will only be shown in the settings of the inspection.\n\nTo open related settings directly from the description, add a link with \\`settings://$\\` optionally followed by \\`?$\\` to pre-select a UI\nelement.\n\nInspection ID: GrazieInspectionRunner" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "GrazieInspectionRunner", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Unspecified" - } - }, - "relationships": [ - { - "target": { - "id": "Proofreading", - "index": 6, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - } - ], - "language": "en-US", - "contents": ["localizedData", "nonLocalizedData"], - "isComprehensive": false - }, - { - "name": "com.intellij.modules.json", - "version": "253.31833.0", - "rules": [ - { - "id": "JsonSchemaDeprecation", - "shortDescription": { - "text": "Deprecated JSON property" - }, - "fullDescription": { - "text": "Reports a deprecated property in a JSON file. Note that deprecation mechanism is not defined in the JSON Schema specification yet, and this inspection uses a non-standard extension 'deprecationMessage'. Inspection ID: JsonSchemaDeprecation", - "markdown": "Reports a deprecated property in a JSON file. \nNote that deprecation mechanism is not defined in the JSON Schema specification yet, and this inspection uses a non-standard extension 'deprecationMessage'.\n\nInspection ID: JsonSchemaDeprecation" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "JsonSchemaDeprecation", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "JSON and JSON5", - "index": 7, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "JsonSchemaRefReference", - "shortDescription": { - "text": "Unresolved '$ref' and '$schema' references" - }, - "fullDescription": { - "text": "Reports an unresolved '$ref' or '$schema' path in a JSON schema. Inspection ID: JsonSchemaRefReference", - "markdown": "Reports an unresolved `$ref` or `$schema` path in a JSON schema. \n\nInspection ID: JsonSchemaRefReference" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "JsonSchemaRefReference", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "JSON and JSON5", - "index": 7, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "Json5StandardCompliance", - "shortDescription": { - "text": "Compliance with JSON5 standard" - }, - "fullDescription": { - "text": "Reports inconsistency with the language specification in a JSON5 file. Inspection ID: Json5StandardCompliance", - "markdown": "Reports inconsistency with [the language specification](http://json5.org) in a JSON5 file.\n\nInspection ID: Json5StandardCompliance" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "Json5StandardCompliance", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "JSON and JSON5", - "index": 7, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "JsonDuplicatePropertyKeys", - "shortDescription": { - "text": "Duplicate keys in object literals" - }, - "fullDescription": { - "text": "Reports a duplicate key in an object literal. Inspection ID: JsonDuplicatePropertyKeys", - "markdown": "Reports a duplicate key in an object literal.\n\nInspection ID: JsonDuplicatePropertyKeys" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "JsonDuplicatePropertyKeys", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "JSON and JSON5", - "index": 7, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "JsonSchemaCompliance", - "shortDescription": { - "text": "Compliance with JSON schema" - }, - "fullDescription": { - "text": "Reports inconsistence between a JSON file and the JSON schema that is assigned to it. Inspection ID: JsonSchemaCompliance", - "markdown": "Reports inconsistence between a JSON file and the [JSON schema](https://json-schema.org) that is assigned to it. \n\nInspection ID: JsonSchemaCompliance" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "JsonSchemaCompliance", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "JSON and JSON5", - "index": 7, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "JsonStandardCompliance", - "shortDescription": { - "text": "Compliance with JSON standard" - }, - "fullDescription": { - "text": "Reports the following discrepancies of a JSON file with the language specification: A line or block comment (configurable). Multiple top-level values (expect for JSON Lines files, configurable for others). A trailing comma in an object or array (configurable). A single quoted string. A property key is a not a double quoted strings. A NaN or Infinity/-Infinity numeric value as a floating point literal (configurable). Inspection ID: JsonStandardCompliance", - "markdown": "Reports the following discrepancies of a JSON file with [the language specification](https://tools.ietf.org/html/rfc7159):\n\n* A line or block comment (configurable).\n* Multiple top-level values (expect for JSON Lines files, configurable for others).\n* A trailing comma in an object or array (configurable).\n* A single quoted string.\n* A property key is a not a double quoted strings.\n* A NaN or Infinity/-Infinity numeric value as a floating point literal (configurable).\n\nInspection ID: JsonStandardCompliance" - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "JsonStandardCompliance", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "JSON and JSON5", - "index": 7, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - } - ], - "language": "en-US", - "contents": ["localizedData", "nonLocalizedData"], - "isComprehensive": false - }, - { - "name": "com.intellij.properties", - "version": "253.31833.0", - "rules": [ - { - "id": "DuplicatePropertyInspection", - "shortDescription": { - "text": "Duplicate property" - }, - "fullDescription": { - "text": "Reports duplicate property keys with different values, duplicate keys, or duplicate property values. Example: 'property1=value;\nproperty2=value;' The Options list allows selecting the area in which the inspection should search for duplicates. Inspection ID: DuplicatePropertyInspection", - "markdown": "Reports duplicate property keys with different values, duplicate keys, or duplicate property values.\n\nExample:\n\n\n property1=value;\n property2=value;\n\nThe **Options** list allows selecting the area in which the inspection should search for duplicates.\n\nInspection ID: DuplicatePropertyInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "DuplicatePropertyInspection", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Properties files", - "index": 9, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "UseEllipsisInPropertyInspection", - "shortDescription": { - "text": "Three dot characters instead of the ellipsis" - }, - "fullDescription": { - "text": "Reports three \"dot\" characters which are used instead of the ellipsis character for UTF-8 properties files. Inspection ID: UseEllipsisInPropertyInspection", - "markdown": "Reports three \"dot\" characters which are used instead of the ellipsis character for UTF-8 properties files.\n\nInspection ID: UseEllipsisInPropertyInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "UseEllipsisInPropertyInspection", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Properties files", - "index": 9, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "AlphaUnsortedPropertiesFile", - "shortDescription": { - "text": "Properties file or resource bundle is alphabetically unsorted" - }, - "fullDescription": { - "text": "Reports alphabetically unsorted resource bundles or .properties files. Inspection ID: AlphaUnsortedPropertiesFile", - "markdown": "Reports alphabetically unsorted resource bundles or .properties files.\n\nInspection ID: AlphaUnsortedPropertiesFile" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "AlphaUnsortedPropertiesFile", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Properties files", - "index": 9, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "TrailingSpacesInProperty", - "shortDescription": { - "text": "Trailing spaces in property" - }, - "fullDescription": { - "text": "Reports properties whose keys or values end with a whitespace. Inspection ID: TrailingSpacesInProperty", - "markdown": "Reports properties whose keys or values end with a whitespace.\n\nInspection ID: TrailingSpacesInProperty" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "TrailingSpacesInProperty", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Properties files", - "index": 9, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "UnusedProperty", - "shortDescription": { - "text": "Unused property" - }, - "fullDescription": { - "text": "Reports properties that are not referenced outside of the .properties file they are contained in. Inspection ID: UnusedProperty", - "markdown": "Reports properties that are not referenced outside of the .properties file they are contained in.\n\nInspection ID: UnusedProperty" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "UnusedProperty", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Reliability" - } - }, - "relationships": [ - { - "target": { - "id": "Properties files", - "index": 9, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "WrongPropertyKeyValueDelimiter", - "shortDescription": { - "text": "Property key/value delimiter doesn't match code style settings" - }, - "fullDescription": { - "text": "Reports properties in which key or value delimiters do not match code style settings. Inspection ID: WrongPropertyKeyValueDelimiter", - "markdown": "Reports properties in which key or value delimiters do not match code style settings.\n\nInspection ID: WrongPropertyKeyValueDelimiter" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "WrongPropertyKeyValueDelimiter", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Properties files", - "index": 9, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - } - ], - "language": "en-US", - "contents": ["localizedData", "nonLocalizedData"], - "isComprehensive": false - }, - { - "name": "org.intellij.plugins.markdown", - "version": "253.31833.0", - "rules": [ - { - "id": "MarkdownOutdatedTableOfContents", - "shortDescription": { - "text": "Outdated table of contents section" - }, - "fullDescription": { - "text": "Checks if a particular table of contents section corresponds to the actual structure of the document. Inspection ID: MarkdownOutdatedTableOfContents", - "markdown": "Checks if a particular table of contents section corresponds to the actual structure of the document.\n\nInspection ID: MarkdownOutdatedTableOfContents" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "MarkdownOutdatedTableOfContents", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "Markdown", - "index": 11, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "MarkdownNoTableBorders", - "shortDescription": { - "text": "Table doesn't have side borders" - }, - "fullDescription": { - "text": "Checks if table has correct side borders. For compatibility reasons all table rows should have borders (pipe symbols) at the start and at the end. Inspection ID: MarkdownNoTableBorders", - "markdown": "Checks if table has correct side borders. For compatibility reasons all table rows should have borders (pipe symbols) at the start and at the end.\n\nInspection ID: MarkdownNoTableBorders" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "MarkdownNoTableBorders", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Markdown", - "index": 11, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "MarkdownUnresolvedLinkLabel", - "shortDescription": { - "text": "Unresolved link label" - }, - "fullDescription": { - "text": "Reports unresolved link labels in Markdown files. Inspection ID: MarkdownUnresolvedLinkLabel", - "markdown": "Reports unresolved link labels in Markdown files.\n\nInspection ID: MarkdownUnresolvedLinkLabel" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "MarkdownUnresolvedLinkLabel", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Markdown", - "index": 11, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "MarkdownUnresolvedFileReference", - "shortDescription": { - "text": "Unresolved file references" - }, - "fullDescription": { - "text": "Reports unresolved file references in Markdown files. Inspection ID: MarkdownUnresolvedFileReference", - "markdown": "Reports unresolved file references in Markdown files.\n\nInspection ID: MarkdownUnresolvedFileReference" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "MarkdownUnresolvedFileReference", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "Markdown", - "index": 11, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "MarkdownIncorrectTableFormatting", - "shortDescription": { - "text": "Incorrect table formatting" - }, - "fullDescription": { - "text": "Checks if table is correctly formatted. Inspection ID: MarkdownIncorrectTableFormatting", - "markdown": "Checks if table is correctly formatted.\n\nInspection ID: MarkdownIncorrectTableFormatting" - }, - "defaultConfiguration": { - "enabled": false, - "level": "note", - "parameters": { - "suppressToolId": "MarkdownIncorrectTableFormatting", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Markdown", - "index": 11, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "MarkdownIncorrectlyNumberedListItem", - "shortDescription": { - "text": "Incorrectly numbered list item" - }, - "fullDescription": { - "text": "Ordered list items are expected to have straight numeration starting from 1. The motivation behind this is that most of Markdown processors are ignoring the numbering of ordered lists. A processor will generate an '
        ' element for such list, that will number items continuously from 1. Inspection ID: MarkdownIncorrectlyNumberedListItem", - "markdown": "Ordered list items are expected to have straight numeration starting from 1.\n\nThe motivation behind this is that most of Markdown processors are ignoring the numbering of ordered lists. A processor will generate an `
          ` element for such list, that will number items continuously from 1.\n\nInspection ID: MarkdownIncorrectlyNumberedListItem" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "MarkdownIncorrectlyNumberedListItem", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Markdown", - "index": 11, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "MarkdownLinkDestinationWithSpaces", - "shortDescription": { - "text": "Links should not contain spaces" - }, - "fullDescription": { - "text": "To ensure consistency between different tools, file links should not contain spaces. Example: '[Some file link](some file.md)' A quick-fix replaces spaces with their url-encoded equivalent: '[Some file link](some%20file.md)' Inspection ID: MarkdownLinkDestinationWithSpaces", - "markdown": "To ensure consistency between different tools, file links should not contain spaces.\n\n**Example:**\n\n\n [Some file link](some file.md)\n\nA quick-fix replaces spaces with their url-encoded equivalent:\n\n\n [Some file link](some%20file.md)\n\nInspection ID: MarkdownLinkDestinationWithSpaces" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "MarkdownLinkDestinationWithSpaces", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Markdown", - "index": 11, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "MarkdownUnresolvedHeaderReference", - "shortDescription": { - "text": "Unresolved header reference" - }, - "fullDescription": { - "text": "Reports unresolved header references in Markdown files. Inspection ID: MarkdownUnresolvedHeaderReference", - "markdown": "Reports unresolved header references in Markdown files.\n\nInspection ID: MarkdownUnresolvedHeaderReference" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "MarkdownUnresolvedHeaderReference", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Code Style" - } - }, - "relationships": [ - { - "target": { - "id": "Markdown", - "index": 11, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - } - ], - "language": "en-US", - "contents": ["localizedData", "nonLocalizedData"], - "isComprehensive": false - }, - { - "name": "com.jetbrains.plugins.ini4idea", - "version": "253.31833.0", - "rules": [ - { - "id": "DuplicateKeyInSection", - "shortDescription": { - "text": "Duplicate directive in section" - }, - "fullDescription": { - "text": "Reports duplicate properties in the 'ini' file section. Inspection ID: DuplicateKeyInSection", - "markdown": "Reports duplicate properties in the `ini` file section.\n\nInspection ID: DuplicateKeyInSection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "DuplicateKeyInSection", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "Ini files", - "index": 15, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - }, - { - "id": "DuplicateSectionInFile", - "shortDescription": { - "text": "Duplicate section in file" - }, - "fullDescription": { - "text": "Reports duplicate sections in the 'ini' file. Inspection ID: DuplicateSectionInFile", - "markdown": "Reports duplicate sections in the `ini` file.\n\nInspection ID: DuplicateSectionInFile" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "DuplicateSectionInFile", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "Ini files", - "index": 15, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - } - ], - "language": "en-US", - "contents": ["localizedData", "nonLocalizedData"], - "isComprehensive": false - }, - { - "name": "org.toml.lang", - "version": "253.31833.0", - "rules": [ - { - "id": "TomlUnresolvedReference", - "shortDescription": { - "text": "Unresolved reference" - }, - "fullDescription": { - "text": "Reports unresolved references in TOML files. Inspection ID: TomlUnresolvedReference", - "markdown": "Reports unresolved references in TOML files.\n\nInspection ID: TomlUnresolvedReference" - }, - "defaultConfiguration": { - "enabled": true, - "level": "warning", - "parameters": { - "suppressToolId": "TomlUnresolvedReference", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Sanity" - } - }, - "relationships": [ - { - "target": { - "id": "TOML", - "index": 18, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - } - ], - "language": "en-US", - "contents": ["localizedData", "nonLocalizedData"], - "isComprehensive": false - }, - { - "name": "org.intellij.qodana", - "version": "253.31833.0", - "rules": [ - { - "id": "CyclomaticComplexityInspection", - "shortDescription": { - "text": "Code metrics" - }, - "fullDescription": { - "text": "Calculates cyclomatic complexity. Inspection ID: CyclomaticComplexityInspection", - "markdown": "Calculates cyclomatic complexity.\n\nInspection ID: CyclomaticComplexityInspection" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "CyclomaticComplexityInspection", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "codeQualityCategory": "Unspecified" - } - }, - "relationships": [ - { - "target": { - "id": "Qodana", - "index": 20, - "toolComponent": { - "name": "QDPY" - } - }, - "kinds": ["superset"] - } - ] - } - ], - "language": "en-US", - "contents": ["localizedData", "nonLocalizedData"], - "isComprehensive": false - } - ] - }, - "invocations": [ - { - "startTimeUtc": "2026-04-27T07:25:55.944699976Z", - "exitCode": 0, - "toolExecutionNotifications": [ - { - "message": { - "text": "Analysis by sanity inspection \"An invalid interpreter\" was suspended due to high number of problems." - }, - "level": "error", - "timeUtc": "2026-04-27T07:26:14.738618141Z", - "properties": { - "qodanaKind": "sanityFailure" - } - } - ], - "executionSuccessful": true - } - ], - "language": "en-US", - "versionControlProvenance": [ - { - "repositoryUri": "https://github.com/xprilion/OpenMLR.git", - "revisionId": "eb2cd746e7d52b6e9f3b07215378278683602020", - "branch": "main", - "properties": { - "repoUrl": "https://github.com/xprilion/OpenMLR.git", - "lastAuthorName": "Anubhav Singh", - "vcsType": "Git", - "lastAuthorEmail": "xprilion@gmail.com" - } - } - ], - "originalUriBaseIds": { - "SRCROOT": { - "description": { - "text": "The subdirectory within the project that was analyzed (--project-dir qodana CLI parameter)" - } - } - }, - "results": [ - { - "ruleId": "PyAttributeOutsideInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Instance attribute _conversation_uuid defined outside __init__", - "markdown": "Instance attribute _conversation_uuid defined outside __init__" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/sandbox/ssh.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 134, - "startColumn": 9, - "charOffset": 4646, - "charLength": 23, - "snippet": { - "text": "self._conversation_uuid" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 132, - "startColumn": 1, - "charOffset": 4517, - "charLength": 217, - "snippet": { - "text": " self.workdir = config.get(\"workdir\", \"~\")\n self.host_key_fingerprint = config.get(\"host_key_fingerprint\")\n self._conversation_uuid = config.get(\"conversation_uuid\")\n\n if self.key_filename:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "5fa33ed5822d5961", - "equalIndicator/v1": "f48c45ce40e2d1a151817f21ada63b175dff5367ebadb83025cd63b33a91f4b1" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_local.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 214, - "startColumn": 7, - "charOffset": 7856, - "charLength": 19, - "snippet": { - "text": "TestModuleConstants" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 212, - "startColumn": 1, - "charOffset": 7848, - "charLength": 119, - "snippet": { - "text": "\n\nclass TestModuleConstants:\n def test_docker_image_default(self):\n assert DOCKER_IMAGE == \"python:3.12-slim\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "14048f09192b8560", - "equalIndicator/v1": "04f1a19657f9df7a1cff59578956e3d294608fd19cf4f21654f8ef9054ad6b8f" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_compute.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 432, - "startColumn": 7, - "charOffset": 16320, - "charLength": 21, - "snippet": { - "text": "TestToolRouterContext" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 430, - "startColumn": 1, - "charOffset": 16235, - "charLength": 169, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestToolRouterContext:\n def test_set_context(self):\n router = ToolRouter()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "b75764acc1a76ba0", - "equalIndicator/v1": "06bace1f1418b2290f90ca05415ab0abf46f0b0f32c25b011f6c8413c9265780" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 85, - "startColumn": 7, - "charOffset": 2526, - "charLength": 16, - "snippet": { - "text": "TestWriteSection" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 83, - "startColumn": 1, - "charOffset": 2518, - "charLength": 114, - "snippet": { - "text": "\n\nclass TestWriteSection:\n async def test_no_project(self):\n from openmlr.tools.writing import _projects" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "cb674c64ddf6630b", - "equalIndicator/v1": "0722547d23fd5f4672f3c901373f6b563cd1fb3e83f0d9f3f033e29b9c4317b0" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 28, - "startColumn": 7, - "charOffset": 655, - "charLength": 12, - "snippet": { - "text": "TestToolSpec" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 26, - "startColumn": 1, - "charOffset": 647, - "charLength": 165, - "snippet": { - "text": "\n\nclass TestToolSpec:\n def test_creation_without_optional(self):\n ts = ToolSpec(name=\"test_tool\", description=\"A test tool\", parameters={\"type\": \"object\"})" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "58b74f842f9f35c2", - "equalIndicator/v1": "0901db0f877572b4f3d794aae1669af41664849e660fe3596bc7b5f703f1402c" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_local.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 228, - "startColumn": 7, - "charOffset": 8317, - "charLength": 22, - "snippet": { - "text": "TestRunningInContainer" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 226, - "startColumn": 1, - "charOffset": 8309, - "charLength": 149, - "snippet": { - "text": "\n\nclass TestRunningInContainer:\n def test_returns_bool(self):\n # Just verify it returns a boolean (actual detection depends on environment)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "706de7e140137608", - "equalIndicator/v1": "090fde1b226a9c0bec71ad93629230c207f94a6a8398f3053ad161380f062272" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_routes_health.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 9, - "startColumn": 7, - "charOffset": 131, - "charLength": 19, - "snippet": { - "text": "TestHealthEndpoints" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 7, - "startColumn": 1, - "charOffset": 123, - "charLength": 144, - "snippet": { - "text": "\n\nclass TestHealthEndpoints:\n async def test_api_health_returns_ok(self, client: AsyncClient):\n resp = await client.get(\"/api/health\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "7d89435d95252348", - "equalIndicator/v1": "0987637930507d3185e71d72263562685d22ae7afb5c0da7afb5297b671426c5" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_compute.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 135, - "startColumn": 7, - "charOffset": 5007, - "charLength": 20, - "snippet": { - "text": "TestWorkspaceManager" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 133, - "startColumn": 1, - "charOffset": 4922, - "charLength": 229, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestWorkspaceManager:\n def test_create_workspace(self, workspace_manager):\n path = workspace_manager.create_workspace(\"test-uuid-123\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "0c62efe818de26dc", - "equalIndicator/v1": "09dceee9e4223abf45e9f6c12f9dc79930e19a4bb2ed253fce047552a29134a3" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 18, - "startColumn": 7, - "charOffset": 316, - "charLength": 20, - "snippet": { - "text": "TestCreatePapersTool" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 16, - "startColumn": 1, - "charOffset": 308, - "charLength": 104, - "snippet": { - "text": "\n\nclass TestCreatePapersTool:\n async def test_creates_tool(self):\n tool = create_papers_tool()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "87bc80a1b0d6c5d9", - "equalIndicator/v1": "0ad69604f1ef4946daeb9a80df713d3775ba008a852f8d57a28b11c471c75367" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_prompts.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 74, - "startColumn": 7, - "charOffset": 3292, - "charLength": 17, - "snippet": { - "text": "TestCompactPrompt" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 72, - "startColumn": 1, - "charOffset": 3284, - "charLength": 103, - "snippet": { - "text": "\n\nclass TestCompactPrompt:\n def test_is_string(self):\n assert isinstance(COMPACT_PROMPT, str)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4ee0901054afa2aa", - "equalIndicator/v1": "0b412ac2372f4914c4cbcae64dd129b84a78602e1c73d0ee61151de0f363fbbf" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 377, - "startColumn": 7, - "charOffset": 14523, - "charLength": 18, - "snippet": { - "text": "TestCompactLLMCall" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 375, - "startColumn": 1, - "charOffset": 14454, - "charLength": 192, - "snippet": { - "text": "# ── Compact LLM Call ───────────────────────────────────────\n\nclass TestCompactLLMCall:\n async def test_returns_content(self):\n messages = [{\"role\": \"user\", \"content\": \"summarize\"}]" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "58d6c3266c7d996a", - "equalIndicator/v1": "0c9becf55a42ecc090d8e55a30b292c9e7b91984ad68f9ec919ad011bf65f327" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 153, - "startColumn": 7, - "charOffset": 5067, - "charLength": 13, - "snippet": { - "text": "TestLLMResult" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 151, - "startColumn": 1, - "charOffset": 5059, - "charLength": 144, - "snippet": { - "text": "\n\nclass TestLLMResult:\n def test_basic_result(self):\n result = LLMResult(content=\"Hello, world!\", tool_calls=[], finish_reason=\"stop\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "99fe5060312cf2af", - "equalIndicator/v1": "0d6e4f0ced7b52b82ec3ceba1dcab2ac673c13c2e4ec304ba97dace1b894e504" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 12, - "startColumn": 7, - "charOffset": 251, - "charLength": 11, - "snippet": { - "text": "LLMProvider" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 10, - "startColumn": 1, - "charOffset": 243, - "charLength": 101, - "snippet": { - "text": "\n\nclass LLMProvider:\n \"\"\"Handles LLM calls across multiple providers with streaming and retry.\"\"\"\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "b499fc9b0809a8bc", - "equalIndicator/v1": "0ffc5ae25384f3c045e1f7205a860b01d669bbf6a7dc2a6c3f9e7bf8cb69b780" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_db_operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 12, - "startColumn": 7, - "charOffset": 211, - "charLength": 26, - "snippet": { - "text": "TestConversationOperations" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 10, - "startColumn": 1, - "charOffset": 203, - "charLength": 208, - "snippet": { - "text": "\n\nclass TestConversationOperations:\n async def test_create_conversation(self, db_session: AsyncSession, test_user):\n conv = await ops.create_conversation(db_session, test_user.id, title=\"Test Conv\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "0165b4c463a53634", - "equalIndicator/v1": "1038ab8b04c228c63c2f49070659c1d608daf47330c146f29cdc32a47b18b00a" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_redis_pubsub.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 9, - "startColumn": 7, - "charOffset": 173, - "charLength": 16, - "snippet": { - "text": "TestPublishEvent" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 7, - "startColumn": 1, - "charOffset": 145, - "charLength": 146, - "snippet": { - "text": "\n@pytest.mark.asyncio\nclass TestPublishEvent:\n async def test_publishes_json_to_redis(self):\n from openmlr.agent.types import AgentEvent" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ab9cc59dc6f43899", - "equalIndicator/v1": "11182262e1b8758b2b3ea27b37ba1ae64d8422074a5568f952a6a9a000e9418d" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 106, - "startColumn": 7, - "charOffset": 3395, - "charLength": 18, - "snippet": { - "text": "TestHandleApproval" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 104, - "startColumn": 1, - "charOffset": 3326, - "charLength": 234, - "snippet": { - "text": "# ── Approval Handling ──────────────────────────────────────\n\nclass TestHandleApproval:\n async def test_approves_tool_calls(self, mock_session, mock_router):\n tcs = [ToolCall(id=\"tc1\", name=\"bash\", arguments={\"cmd\": \"ls\"})]" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "8b9f17f8a5b1e554", - "equalIndicator/v1": "131d47632e716e219a4f666433968c1686c12eeca8c85c112ab35cb039330875" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_auth.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 41, - "startColumn": 7, - "charOffset": 1097, - "charLength": 18, - "snippet": { - "text": "TestVerifyPassword" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 39, - "startColumn": 1, - "charOffset": 1012, - "charLength": 202, - "snippet": { - "text": "# ── verify_password ────────────────────────────────────────────────────────\n\nclass TestVerifyPassword:\n def test_correct_password_returns_true(self):\n hashed = hash_password(\"correct_horse\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "747682c3d87e5e3f", - "equalIndicator/v1": "1479e7f97a7952460e350a41f622557cefb3b0b961e6cc081f2f061f0d6a84ff" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_local.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 59, - "startColumn": 7, - "charOffset": 1797, - "charLength": 16, - "snippet": { - "text": "TestValidatePath" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 57, - "startColumn": 1, - "charOffset": 1789, - "charLength": 94, - "snippet": { - "text": "\n\nclass TestValidatePath:\n def test_resolves_relative_path(self):\n cwd = os.getcwd()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "1732768871b6ac0a", - "equalIndicator/v1": "14cf83fe3a64b6f0438b15b72bd798ab851b4c6dab62f51b8be8c1d398534eb8" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tool_registry.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 220, - "startColumn": 7, - "charOffset": 7128, - "charLength": 26, - "snippet": { - "text": "TestModeRestrictionsConfig" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 218, - "startColumn": 1, - "charOffset": 7120, - "charLength": 142, - "snippet": { - "text": "\n\nclass TestModeRestrictionsConfig:\n async def test_plan_has_allowed_list(self):\n assert \"allowed\" in MODE_TOOL_RESTRICTIONS[\"plan\"]" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "8af23b655f5a0a22", - "equalIndicator/v1": "16476c2363d74aa362a57bd207966d4932f00d26e0ca303d9e9a2a5d798d2955" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 133, - "startColumn": 7, - "charOffset": 4461, - "charLength": 20, - "snippet": { - "text": "TestGetDraftFromProj" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 131, - "startColumn": 1, - "charOffset": 4453, - "charLength": 93, - "snippet": { - "text": "\n\nclass TestGetDraftFromProj:\n async def test_generates_full_draft(self):\n proj = {" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "c2b63889c619917a", - "equalIndicator/v1": "173ed3709e1d068a9d1099262e3c1ef89a3b0220dca81e2ed87c11b39620a9b5" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 16, - "startColumn": 7, - "charOffset": 265, - "charLength": 12, - "snippet": { - "text": "TestToolCall" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 14, - "startColumn": 1, - "charOffset": 257, - "charLength": 136, - "snippet": { - "text": "\n\nclass TestToolCall:\n def test_creation(self):\n tc = ToolCall(id=\"call_1\", name=\"read_file\", arguments={\"path\": \"/tmp/test\"})" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "3616ec874b566175", - "equalIndicator/v1": "17b2d4020f0784c0bb7ddb560ce97a1794f3b21cf1dd9bffb20207c44e355e18" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_routes_settings.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 78, - "startColumn": 7, - "charOffset": 3036, - "charLength": 13, - "snippet": { - "text": "TestProviders" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 76, - "startColumn": 1, - "charOffset": 3028, - "charLength": 144, - "snippet": { - "text": "\n\nclass TestProviders:\n async def test_list_providers(self, auth_client: AsyncClient):\n resp = await auth_client.get(\"/api/providers\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "92729e7f27326008", - "equalIndicator/v1": "1abbfeed6ba6fddb839af981e9387048867a54b1206dfd578a89ea643f161ec7" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_research.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 53, - "startColumn": 7, - "charOffset": 1625, - "charLength": 23, - "snippet": { - "text": "TestExecuteResearchTool" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 51, - "startColumn": 1, - "charOffset": 1617, - "charLength": 96, - "snippet": { - "text": "\n\nclass TestExecuteResearchTool:\n @pytest.mark.asyncio\n async def test_unknown_tool(self):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "edc495daa503ad80", - "equalIndicator/v1": "22cbb95f4b8e6410f0da9c260b30b8a1f877cd8b593d0a6cdfe97a30fa6692c4" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_config.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 107, - "startColumn": 7, - "charOffset": 3875, - "charLength": 28, - "snippet": { - "text": "TestGetModelMaxTokensUnknown" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 105, - "startColumn": 1, - "charOffset": 3790, - "charLength": 230, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestGetModelMaxTokensUnknown:\n def test_unknown_model_returns_default(self):\n assert get_model_max_tokens(\"my-custom-model\") == 200_000" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "b9ec3c4e7152d421", - "equalIndicator/v1": "23167eed71b9faea0d0f475f5a38d4de5c062c83c10c1084d1d2ae7fa48b26e0" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_dependencies.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 9, - "startColumn": 7, - "charOffset": 156, - "charLength": 13, - "snippet": { - "text": "TestGetConfig" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 7, - "startColumn": 1, - "charOffset": 148, - "charLength": 132, - "snippet": { - "text": "\n\nclass TestGetConfig:\n async def test_get_config_returns_agent_config(self):\n from openmlr.dependencies import get_config" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "10f99365bd5ba775", - "equalIndicator/v1": "232b6f2aecc4f637e998e37ca31aa5f8af523c00f42178a53da9706a5a93b33a" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_event_bus.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 90, - "startColumn": 7, - "charOffset": 2821, - "charLength": 13, - "snippet": { - "text": "TestBroadcast" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 88, - "startColumn": 1, - "charOffset": 2736, - "charLength": 186, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestBroadcast:\n @pytest.mark.asyncio\n async def test_broadcast_dict_event(self, bus: EventBus):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "37f6bf75e192b597", - "equalIndicator/v1": "24c22bfd0b6fc2220dd6cbe6e7355e9373dac02380ac674ffdc39221405eb2b0" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models_orm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 56, - "startColumn": 7, - "charOffset": 1580, - "charLength": 21, - "snippet": { - "text": "TestConversationModel" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 54, - "startColumn": 1, - "charOffset": 1572, - "charLength": 142, - "snippet": { - "text": "\n\nclass TestConversationModel:\n async def test_create_conversation(self, db_session: AsyncSession, test_user):\n conv = Conversation(" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "30d7a02412cbb454", - "equalIndicator/v1": "25b05703bc6904e07f7a4d81323bf0ffc478d8d4efac9d8aac83fe6bb8ee3b38" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_app.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 10, - "startColumn": 7, - "charOffset": 134, - "charLength": 15, - "snippet": { - "text": "TestAppCreation" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 8, - "startColumn": 1, - "charOffset": 126, - "charLength": 98, - "snippet": { - "text": "\n\nclass TestAppCreation:\n async def test_app_title(self):\n assert app.title == \"OpenMLR\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "71563321abe846e7", - "equalIndicator/v1": "25b548c0e865de0cf250bf19b6752dda28c745baba1b65bc3dd2c245b4195863" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models_orm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 226, - "startColumn": 7, - "charOffset": 7320, - "charLength": 15, - "snippet": { - "text": "TestUserSetting" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 224, - "startColumn": 1, - "charOffset": 7312, - "charLength": 133, - "snippet": { - "text": "\n\nclass TestUserSetting:\n async def test_create_setting(self, db_session: AsyncSession, test_user):\n setting = UserSetting(" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "7f1e1ff41a07c4cd", - "equalIndicator/v1": "27f82d53aec078985f63e354259bacc12c3dcf3bd71d23ebddf97846f74efa0c" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_compute.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 481, - "startColumn": 7, - "charOffset": 18187, - "charLength": 19, - "snippet": { - "text": "TestConfigRedaction" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 479, - "startColumn": 1, - "charOffset": 18102, - "charLength": 199, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestConfigRedaction:\n def test_redact_password(self):\n from openmlr.routes.compute import _redact_config" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "a0119625af0b4835", - "equalIndicator/v1": "2a6fb4f2021a53fa28795bcaac8b845e35caf49ee9e0173a753abdbc0bd6a583" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 53, - "startColumn": 7, - "charOffset": 1462, - "charLength": 13, - "snippet": { - "text": "TestUserLogin" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 51, - "startColumn": 1, - "charOffset": 1454, - "charLength": 110, - "snippet": { - "text": "\n\nclass TestUserLogin:\n def test_valid(self):\n u = UserLogin(username=\"testuser\", password=\"secret\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "527a2a92ca971c63", - "equalIndicator/v1": "2a9689b29b1c3c8d59dd0a77e05522c95cbd3d09f379d12c690aaa7ee57be39c" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 147, - "startColumn": 7, - "charOffset": 4526, - "charLength": 17, - "snippet": { - "text": "TestSettingUpdate" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 145, - "startColumn": 1, - "charOffset": 4518, - "charLength": 97, - "snippet": { - "text": "\n\nclass TestSettingUpdate:\n def test_str_value(self):\n s = SettingUpdate(value=\"hello\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "d409c390679e56e9", - "equalIndicator/v1": "2be8b677a36ad62a6c1e1f9bb44a70c4a97db45bff1dde76f54552185a584d22" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 69, - "startColumn": 7, - "charOffset": 1879, - "charLength": 15, - "snippet": { - "text": "TestExecuteTool" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 67, - "startColumn": 1, - "charOffset": 1810, - "charLength": 241, - "snippet": { - "text": "# ── Tool Execution ─────────────────────────────────────────\n\nclass TestExecuteTool:\n async def test_executes_tool_and_returns_output(self, mock_session, mock_router):\n tc = ToolCall(id=\"tc1\", name=\"bash\", arguments={\"cmd\": \"ls\"})" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "646fcb78ac1f201b", - "equalIndicator/v1": "2e60e8b548e6a8f4980a5763f9dee9c3dbb3865ba4cb3b4d1ec9292940f9a1c9" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 137, - "startColumn": 7, - "charOffset": 4232, - "charLength": 19, - "snippet": { - "text": "TestApprovalRequest" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 135, - "startColumn": 1, - "charOffset": 4224, - "charLength": 127, - "snippet": { - "text": "\n\nclass TestApprovalRequest:\n def test_valid(self):\n a = ApprovalRequest(approvals={\"call_1\": True, \"call_2\": False})" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ab2c0e5b47d8c252", - "equalIndicator/v1": "2e741eb45b08f14611d4bc0d04ad5c87fc0d8f2845f65e82c46ae6ee3e184331" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_redis_pubsub.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 59, - "startColumn": 7, - "charOffset": 2184, - "charLength": 20, - "snippet": { - "text": "TestPublishInterrupt" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 57, - "startColumn": 1, - "charOffset": 2156, - "charLength": 162, - "snippet": { - "text": "\n@pytest.mark.asyncio\nclass TestPublishInterrupt:\n async def test_sets_interrupt_key(self):\n from openmlr.services.redis_pubsub import publish_interrupt" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ff8c8f6746650cf1", - "equalIndicator/v1": "32ada3b0b09c14594080d86c3cf30cd1f65d8cd9060a4ca5f5c3b03e70a3ee66" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 35, - "startColumn": 7, - "charOffset": 892, - "charLength": 18, - "snippet": { - "text": "TestExtractArxivId" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 33, - "startColumn": 1, - "charOffset": 884, - "charLength": 132, - "snippet": { - "text": "\n\nclass TestExtractArxivId:\n async def test_standard_format(self):\n assert _extract_arxiv_id(\"2301.12345\") == \"2301.12345\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "e7dac0b0c8239c93", - "equalIndicator/v1": "34fe7dd842894612d12fa29202c4952a15763f72c24d1def8e0ae0fdae68c8ab" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_sandbox_types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 64, - "startColumn": 7, - "charOffset": 2179, - "charLength": 20, - "snippet": { - "text": "TestSandboxInterface" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 62, - "startColumn": 1, - "charOffset": 2171, - "charLength": 100, - "snippet": { - "text": "\n\nclass TestSandboxInterface:\n def test_is_abstract(self):\n with pytest.raises(TypeError):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "7d25b437a5ea5668", - "equalIndicator/v1": "3661da02ffa13e94148b6ecdd71d1cabb71643d6bf460c1979b4a7d69db27834" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models_orm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 25, - "startColumn": 7, - "charOffset": 497, - "charLength": 13, - "snippet": { - "text": "TestUserModel" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 23, - "startColumn": 1, - "charOffset": 489, - "charLength": 107, - "snippet": { - "text": "\n\nclass TestUserModel:\n async def test_create_user(self, db_session: AsyncSession):\n user = User(" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "9ec7a7fa3b78d98c", - "equalIndicator/v1": "37164808a4db45903454eff7502b8c6c382c64d8faf454f603fffc27220c6c6d" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_doom_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 60, - "startColumn": 7, - "charOffset": 1942, - "charLength": 24, - "snippet": { - "text": "TestIdenticalConsecutive" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 58, - "startColumn": 1, - "charOffset": 1857, - "charLength": 173, - "snippet": { - "text": "# ── Pattern 1: identical consecutive calls ─────────────────────────────────\n\nclass TestIdenticalConsecutive:\n def test_detects_3_identical_calls(self):\n msgs = [" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4add51a7bccf2e1b", - "equalIndicator/v1": "3933cc25febdbfeadd531a4b4b9780f509e691567dd1110bddd0f9921e79f496" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_sandbox_types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 44, - "startColumn": 7, - "charOffset": 1481, - "charLength": 19, - "snippet": { - "text": "TestExecutionResult" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 42, - "startColumn": 1, - "charOffset": 1473, - "charLength": 114, - "snippet": { - "text": "\n\nclass TestExecutionResult:\n def test_defaults(self):\n r = ExecutionResult(output=\"done\", success=True)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "cb4f392bbbaf33f8", - "equalIndicator/v1": "3a79f24f9a436330c2ab86bf59e706321b69fd0285eac342aef570f51e7ae50c" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_local.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 173, - "startColumn": 7, - "charOffset": 6151, - "charLength": 14, - "snippet": { - "text": "TestHandleEdit" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 171, - "startColumn": 1, - "charOffset": 6123, - "charLength": 144, - "snippet": { - "text": "\n@pytest.mark.asyncio\nclass TestHandleEdit:\n async def test_replaces_string(self, monkeypatch, tmp_path):\n monkeypatch.chdir(tmp_path)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "85d99bc04bb2000b", - "equalIndicator/v1": "3b8821d818f547923a46600facee40f7abb3aeb069ae815a3284efe0325e6d21" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_compute.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 333, - "startColumn": 7, - "charOffset": 12735, - "charLength": 21, - "snippet": { - "text": "TestSSHConnectionPool" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 331, - "startColumn": 1, - "charOffset": 12650, - "charLength": 182, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestSSHConnectionPool:\n def test_singleton(self):\n pool1 = SSHConnectionPool.get_pool()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "fe75aa15e353ed4c", - "equalIndicator/v1": "3bd6a369d3ac3ef4f205bc0b84f20a4dd87d2f58365a8fed0b81f6afa475bbe2" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 236, - "startColumn": 7, - "charOffset": 8987, - "charLength": 18, - "snippet": { - "text": "TestSubmissionLoop" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 234, - "startColumn": 1, - "charOffset": 8918, - "charLength": 230, - "snippet": { - "text": "# ── Submissions ────────────────────────────────────────────\n\nclass TestSubmissionLoop:\n async def test_processes_user_input(self, mock_session, mock_router):\n mock_session.submission_queue.get = AsyncMock(side_effect=[" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "d07604099d7e0174", - "equalIndicator/v1": "3ed188ef1e64c67fc1ed29cee8aedb79851d0fe7d622a25d8e7722bc7f3a9479" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_session_manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 32, - "startColumn": 7, - "charOffset": 637, - "charLength": 18, - "snippet": { - "text": "TestSessionManager" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 30, - "startColumn": 1, - "charOffset": 629, - "charLength": 147, - "snippet": { - "text": "\n\nclass TestSessionManager:\n async def test_initial_state(self, session_manager):\n assert session_manager.current_conversation_id is None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "96301ca52b312173", - "equalIndicator/v1": "3efd090c4c76c56c554fea68d63afae3321fb411daaaa8668a933eafba1adf6c" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_redis_pubsub.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 36, - "startColumn": 7, - "charOffset": 1273, - "charLength": 18, - "snippet": { - "text": "TestPublishAnswers" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 34, - "startColumn": 1, - "charOffset": 1245, - "charLength": 165, - "snippet": { - "text": "\n@pytest.mark.asyncio\nclass TestPublishAnswers:\n async def test_sets_answers_key_in_redis(self):\n from openmlr.services.redis_pubsub import publish_answers" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "bed85f3b1dc8e032", - "equalIndicator/v1": "3f4f57e2f47e17c506717b3a2fbccc0221efed9d7d1fd330558918769bb98584" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_sandbox.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 11, - "startColumn": 7, - "charOffset": 251, - "charLength": 22, - "snippet": { - "text": "TestCreateSandboxTools" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 9, - "startColumn": 1, - "charOffset": 243, - "charLength": 106, - "snippet": { - "text": "\n\nclass TestCreateSandboxTools:\n async def test_creates_all_tools(self):\n mgr = SandboxManager()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "d7c58322107397e0", - "equalIndicator/v1": "3f6aa174e10098d7ba193f3658aec7318cd3f140406a47d412c097b0254811c0" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_research.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 28, - "startColumn": 7, - "charOffset": 759, - "charLength": 24, - "snippet": { - "text": "TestGetResearchToolSpecs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 26, - "startColumn": 1, - "charOffset": 751, - "charLength": 120, - "snippet": { - "text": "\n\nclass TestGetResearchToolSpecs:\n def test_returns_formatted_tools(self):\n specs = _get_research_tool_specs()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "32971a8a6d1b6157", - "equalIndicator/v1": "3f994fdd22d786879fa2f33f55f48b27d8be83156a77965898998769802c7a34" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 60, - "startColumn": 7, - "charOffset": 1651, - "charLength": 17, - "snippet": { - "text": "TestTokenResponse" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 58, - "startColumn": 1, - "charOffset": 1643, - "charLength": 140, - "snippet": { - "text": "\n\nclass TestTokenResponse:\n def test_defaults(self):\n t = TokenResponse(access_token=\"abc123\", user={\"id\": 1, \"username\": \"test\"})" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "adce06a01ef25342", - "equalIndicator/v1": "424ae4a19f9e1f1fd8ffdfeb1afd60d86856c76da9779d5032d37d345155a3ef" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tool_registry.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 131, - "startColumn": 7, - "charOffset": 3710, - "charLength": 19, - "snippet": { - "text": "TestToolSpecsForLLM" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 129, - "startColumn": 1, - "charOffset": 3702, - "charLength": 148, - "snippet": { - "text": "\n\nclass TestToolSpecsForLLM:\n async def test_get_specs_in_openai_format(self, router, dummy_tool, read_tool):\n router.register(dummy_tool)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "7d4c94c59e676100", - "equalIndicator/v1": "432547f55f56e247ab64ecd440d218121a0440d5f875e0134560cc90e5de5970" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_session.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 150, - "startColumn": 7, - "charOffset": 4943, - "charLength": 11, - "snippet": { - "text": "TestOnEvent" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 148, - "startColumn": 1, - "charOffset": 4858, - "charLength": 198, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestOnEvent:\n def test_registers_listener(self, session: Session):\n assert len(session._listeners) == 0" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "7ba9eef3d8274196", - "equalIndicator/v1": "4346181f2eee20acc76b77740c84c2fecfd464730931fb322e4c25790fa7d00d" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 126, - "startColumn": 7, - "charOffset": 3929, - "charLength": 15, - "snippet": { - "text": "TestMessageSend" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 124, - "startColumn": 1, - "charOffset": 3921, - "charLength": 97, - "snippet": { - "text": "\n\nclass TestMessageSend:\n def test_basic(self):\n m = MessageSend(message=\"Hello world\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "6c255e21a5f53686", - "equalIndicator/v1": "44ebb26f18a84fdedf8972c9d443b87c7246b61627b03307ea9a967f53907f30" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 71, - "startColumn": 7, - "charOffset": 2136, - "charLength": 23, - "snippet": { - "text": "TestReconstructAbstract" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 69, - "startColumn": 1, - "charOffset": 2128, - "charLength": 108, - "snippet": { - "text": "\n\nclass TestReconstructAbstract:\n async def test_simple(self):\n inv = {\"hello\": [0], \"world\": [1]}" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "d72bec750b9e17fb", - "equalIndicator/v1": "44f017b7d5d3210aacfd2f1216821ab3b98409626b10e5a6caf1507fb1e5578e" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_event_bus.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 44, - "startColumn": 7, - "charOffset": 1296, - "charLength": 15, - "snippet": { - "text": "TestUnsubscribe" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 42, - "startColumn": 1, - "charOffset": 1211, - "charLength": 190, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestUnsubscribe:\n def test_unsubscribe_removes_queue(self, bus: EventBus):\n q = bus.subscribe()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "1dcf599a326e65af", - "equalIndicator/v1": "47a698246421ab11461f6ec6865073a8ce80ad3986a7e5e351d009690bf27139" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 165, - "startColumn": 7, - "charOffset": 4976, - "charLength": 18, - "snippet": { - "text": "TestProviderConfig" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 163, - "startColumn": 1, - "charOffset": 4968, - "charLength": 82, - "snippet": { - "text": "\n\nclass TestProviderConfig:\n def test_empty(self):\n p = ProviderConfig()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "8d36ce0caefadd6f", - "equalIndicator/v1": "4879434b5dac6efb5c5ac69f3ddbd7dd42d12c8e45b4fc45f94d193555fd516a" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_routes_settings.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 102, - "startColumn": 7, - "charOffset": 3907, - "charLength": 13, - "snippet": { - "text": "TestAppStatus" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 100, - "startColumn": 1, - "charOffset": 3899, - "charLength": 137, - "snippet": { - "text": "\n\nclass TestAppStatus:\n async def test_get_status(self, auth_client: AsyncClient):\n resp = await auth_client.get(\"/api/status\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "69c42153e3ca3822", - "equalIndicator/v1": "4d6da843c968d5999ca2fa5adba780476421a530e03b12e7b7beb95f2f028534" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 33, - "startColumn": 7, - "charOffset": 794, - "charLength": 17, - "snippet": { - "text": "TestCreateProject" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 31, - "startColumn": 1, - "charOffset": 786, - "charLength": 120, - "snippet": { - "text": "\n\nclass TestCreateProject:\n async def test_creates_project(self):\n from openmlr.tools.writing import _projects" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "c8cc099ccede6b8b", - "equalIndicator/v1": "500bb1ea011ce5853377835c24cf3d9ae5de7129db5abb2ede2a23cd080b32b6" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 59, - "startColumn": 7, - "charOffset": 1429, - "charLength": 10, - "snippet": { - "text": "Submission" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 57, - "startColumn": 1, - "charOffset": 1411, - "charLength": 86, - "snippet": { - "text": "\n@dataclass\nclass Submission:\n \"\"\"A submission to the agent loop.\"\"\"\n op: OpType" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "3bcb35761a56ac29", - "equalIndicator/v1": "50b94ecfbdb5276dbaa46111472def6693dbb7d87517186da1998017d5bda815" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/context.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 15, - "startColumn": 7, - "charOffset": 372, - "charLength": 14, - "snippet": { - "text": "ContextManager" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 13, - "startColumn": 1, - "charOffset": 354, - "charLength": 115, - "snippet": { - "text": "\n@dataclass\nclass ContextManager:\n config: AgentConfig\n messages: list[Message] = field(default_factory=list)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "dd7492d01f0d8f65", - "equalIndicator/v1": "522c74ef70706d9e866053b4ae824ee6ba22d7079591dbfb862857f5b0c9145a" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_redis_pubsub.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 84, - "startColumn": 7, - "charOffset": 3061, - "charLength": 18, - "snippet": { - "text": "TestCheckInterrupt" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 82, - "startColumn": 1, - "charOffset": 3033, - "charLength": 168, - "snippet": { - "text": "\n@pytest.mark.asyncio\nclass TestCheckInterrupt:\n async def test_returns_true_when_key_exists(self):\n from openmlr.services.redis_pubsub import check_interrupt" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "e657307c11bc0e63", - "equalIndicator/v1": "53ac34601dc566e7d1e2fe9d9b1c04d9837d500eb9441b6a14bda486fe05451e" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_sandbox_types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 10, - "startColumn": 7, - "charOffset": 271, - "charLength": 23, - "snippet": { - "text": "TestComputeCapabilities" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 8, - "startColumn": 1, - "charOffset": 263, - "charLength": 98, - "snippet": { - "text": "\n\nclass TestComputeCapabilities:\n def test_defaults(self):\n caps = ComputeCapabilities()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "45f0ac0aaffddb0c", - "equalIndicator/v1": "555c813b25a19a4d843eba77252158cc6f6276a19e935da03d63a93d184e2e93" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 88, - "startColumn": 7, - "charOffset": 2795, - "charLength": 14, - "snippet": { - "text": "TestAgentEvent" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 86, - "startColumn": 1, - "charOffset": 2787, - "charLength": 111, - "snippet": { - "text": "\n\nclass TestAgentEvent:\n def test_creation_without_data(self):\n evt = AgentEvent(event_type=\"status\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "1acf491985818ef4", - "equalIndicator/v1": "575bfb354cda4a3696d9005db988d31ba332a519c2889387070583363ed08127" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_sandbox_manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 15, - "startColumn": 7, - "charOffset": 248, - "charLength": 18, - "snippet": { - "text": "TestSandboxManager" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 13, - "startColumn": 1, - "charOffset": 240, - "charLength": 120, - "snippet": { - "text": "\n\nclass TestSandboxManager:\n async def test_initial_state(self, manager):\n assert manager.get_active() is None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "844a2d51303db122", - "equalIndicator/v1": "583d1f0eb7ba5be7ac9ae8a59d18fa4c9a6edebf1a63e34004e6ede827d3c13f" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 182, - "startColumn": 7, - "charOffset": 5535, - "charLength": 15, - "snippet": { - "text": "TestModelSwitch" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 180, - "startColumn": 1, - "charOffset": 5527, - "charLength": 90, - "snippet": { - "text": "\n\nclass TestModelSwitch:\n def test_valid(self):\n m = ModelSwitch(model=\"gpt-4o\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "5c633078f1cd496f", - "equalIndicator/v1": "587861f792fec3bb0830abe548b7c9151198b861a011c1e1630a58285f4c3476" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_db_operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 200, - "startColumn": 7, - "charOffset": 10007, - "charLength": 18, - "snippet": { - "text": "TestTaskOperations" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 198, - "startColumn": 1, - "charOffset": 9999, - "charLength": 133, - "snippet": { - "text": "\n\nclass TestTaskOperations:\n @pytest_asyncio.fixture(autouse=True)\n async def _conv(self, db_session: AsyncSession, test_user):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "c923d98bec82c27a", - "equalIndicator/v1": "58c3d497a99c4d10aa6a13dca1f38352e37f9f50844c18e76d4ba77b36887028" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 60, - "startColumn": 7, - "charOffset": 1775, - "charLength": 11, - "snippet": { - "text": "TestMessage" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 58, - "startColumn": 1, - "charOffset": 1767, - "charLength": 105, - "snippet": { - "text": "\n\nclass TestMessage:\n def test_user_message(self):\n msg = Message(role=\"user\", content=\"Hello\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "938762c347ba38e7", - "equalIndicator/v1": "58ed4d2e5173f01a6cae7830ee4377aa5f2d48c6eacfac6621d568e2185b874d" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_app.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 34, - "startColumn": 7, - "charOffset": 958, - "charLength": 14, - "snippet": { - "text": "TestMainModule" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 32, - "startColumn": 1, - "charOffset": 950, - "charLength": 104, - "snippet": { - "text": "\n\nclass TestMainModule:\n async def test_main_is_callable(self):\n from openmlr.main import main" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "0b2833d8a76fa5b7", - "equalIndicator/v1": "5a2e378739b2f5c6a57cf52d7517a83448564b2c8968ef0596347832212705a5" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_session.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 55, - "startColumn": 7, - "charOffset": 1778, - "charLength": 8, - "snippet": { - "text": "TestEmit" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 53, - "startColumn": 1, - "charOffset": 1693, - "charLength": 188, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestEmit:\n @pytest.mark.asyncio\n async def test_emit_puts_event_in_queue(self, session: Session):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "d8bc8c83d96bd061", - "equalIndicator/v1": "5afa7ecfe83b2ccf86d7fcae370a160183348ff1b4d8495bac366aca45830a07" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_research.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 15, - "startColumn": 7, - "charOffset": 328, - "charLength": 22, - "snippet": { - "text": "TestCreateResearchTool" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 13, - "startColumn": 1, - "charOffset": 320, - "charLength": 102, - "snippet": { - "text": "\n\nclass TestCreateResearchTool:\n def test_creates_tool(self):\n tool = create_research_tool()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "02be4901467e7a78", - "equalIndicator/v1": "5e4a5e582bef6593260629443a91b00a5effad3db74d3ea1731fe478bc047782" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_auth.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 79, - "startColumn": 7, - "charOffset": 2501, - "charLength": 21, - "snippet": { - "text": "TestDecodeAccessToken" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 77, - "startColumn": 1, - "charOffset": 2416, - "charLength": 211, - "snippet": { - "text": "# ── decode_access_token ────────────────────────────────────────────────────\n\nclass TestDecodeAccessToken:\n def test_decodes_valid_token(self):\n token = create_access_token(user_id=7, username=\"dave\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ecd65dbcc44a3c88", - "equalIndicator/v1": "5e9aec2cd056173254baf79a900229669749097750fe72be449706820b69974d" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 96, - "startColumn": 7, - "charOffset": 2799, - "charLength": 19, - "snippet": { - "text": "TestMessageResponse" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 94, - "startColumn": 1, - "charOffset": 2791, - "charLength": 95, - "snippet": { - "text": "\n\nclass TestMessageResponse:\n def test_creation(self):\n from datetime import datetime" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "17e058a729fe1ed0", - "equalIndicator/v1": "5ffd504aa4cf552ef4aa1f58e5f0b9fd17a45ab2ac0ba8cf1ec7686ee4206106" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 82, - "startColumn": 7, - "charOffset": 2358, - "charLength": 24, - "snippet": { - "text": "TestConversationResponse" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 80, - "startColumn": 1, - "charOffset": 2350, - "charLength": 100, - "snippet": { - "text": "\n\nclass TestConversationResponse:\n def test_creation(self):\n from datetime import datetime" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "07437f36ecdbb4c6", - "equalIndicator/v1": "60977c803fb9b0232b6b44f2ce2837559d08ea087b3569eb273f42683848499b" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/config.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 14, - "startColumn": 7, - "charOffset": 244, - "charLength": 11, - "snippet": { - "text": "AgentConfig" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 12, - "startColumn": 1, - "charOffset": 226, - "charLength": 133, - "snippet": { - "text": "\n@dataclass\nclass AgentConfig:\n model_name: str = \"\" # empty = auto-detect from available providers\n max_iterations: int = 300" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "514330a5f268e54e", - "equalIndicator/v1": "60d151e7b66296efca1b73ca0682e956ad7a254bc959d58a308fedb8333db0a8" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_redis_pubsub.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 163, - "startColumn": 7, - "charOffset": 6050, - "charLength": 19, - "snippet": { - "text": "TestModuleConstants" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 161, - "startColumn": 1, - "charOffset": 6042, - "charLength": 124, - "snippet": { - "text": "\n\nclass TestModuleConstants:\n def test_channel_name(self):\n from openmlr.services.redis_pubsub import CHANNEL_NAME" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "c5e7d4947b6b2e89", - "equalIndicator/v1": "61d7d8908b55b85254bfaefccc99bf16fb5ad286f7e10d9bea0983572cc642e1" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_github.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 10, - "startColumn": 7, - "charOffset": 185, - "charLength": 21, - "snippet": { - "text": "TestCreateGithubTools" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 8, - "startColumn": 1, - "charOffset": 177, - "charLength": 112, - "snippet": { - "text": "\n\nclass TestCreateGithubTools:\n async def test_creates_all_tools(self):\n tools = create_github_tools()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "35a27cdb87f6328f", - "equalIndicator/v1": "622268ae5882d80a92483a4d15c21e6e035d0b207e9931ebc5498de699de043d" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_context.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 47, - "startColumn": 7, - "charOffset": 1326, - "charLength": 14, - "snippet": { - "text": "TestAddMessage" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 45, - "startColumn": 1, - "charOffset": 1241, - "charLength": 191, - "snippet": { - "text": "# ── ContextManager.add_message ─────────────────────────────────────────────\n\nclass TestAddMessage:\n def test_adds_message_object(self):\n cm = ContextManager(config=_make_config())" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "1abf4d04551b3afe", - "equalIndicator/v1": "62d62e481ef223b25ee5ed31f76d6609b54873c9251e0b98d0fc865ae572d628" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_event_bus.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 69, - "startColumn": 7, - "charOffset": 2177, - "charLength": 19, - "snippet": { - "text": "TestSubscriberCount" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 67, - "startColumn": 1, - "charOffset": 2092, - "charLength": 196, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestSubscriberCount:\n def test_starts_at_zero(self, bus: EventBus):\n assert bus.subscriber_count == 0" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "1c6d79998a58c210", - "equalIndicator/v1": "6354620ea19cdc4f3da85c0eb80e9bd26fd089fd0d6d781b9123aec1cdc042bf" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 186, - "startColumn": 7, - "charOffset": 6349, - "charLength": 15, - "snippet": { - "text": "TestAddCitation" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 184, - "startColumn": 1, - "charOffset": 6341, - "charLength": 116, - "snippet": { - "text": "\n\nclass TestAddCitation:\n async def test_adds_citation(self):\n from openmlr.tools.writing import _projects" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "f8883fa8120ddbff", - "equalIndicator/v1": "668c414a1232334c30c99f94ef60768166974f0dd94e4b71447ee543dff8a2a3" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_search.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 10, - "startColumn": 7, - "charOffset": 167, - "charLength": 21, - "snippet": { - "text": "TestCreateSearchTools" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 8, - "startColumn": 1, - "charOffset": 159, - "charLength": 107, - "snippet": { - "text": "\n\nclass TestCreateSearchTools:\n async def test_creates_tool(self):\n tools = create_search_tools()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "739b9158eb0f9ccb", - "equalIndicator/v1": "66fe059ae79518141d3fb2e3ff2cfa1c496a5a46224de136b16877d73551e127" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_dependencies.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 24, - "startColumn": 7, - "charOffset": 643, - "charLength": 18, - "snippet": { - "text": "TestGetCurrentUser" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 22, - "startColumn": 1, - "charOffset": 635, - "charLength": 157, - "snippet": { - "text": "\n\nclass TestGetCurrentUser:\n async def test_valid_token_returns_user(self, auth_client: AsyncClient):\n resp = await auth_client.get(\"/api/auth/me\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "88737266818fbbb6", - "equalIndicator/v1": "69a9f771bcc9114c055b620eb22799546b83c06e8815d88af56c94a1d496ebdf" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_routes_settings.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 132, - "startColumn": 7, - "charOffset": 4888, - "charLength": 18, - "snippet": { - "text": "TestConfigEndpoint" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 130, - "startColumn": 1, - "charOffset": 4880, - "charLength": 130, - "snippet": { - "text": "\n\nclass TestConfigEndpoint:\n async def test_save_config(self, auth_client: AsyncClient):\n resp = await auth_client.post(" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4e5bb7709711e120", - "equalIndicator/v1": "6cf1d8a283c42ffb55140a4311f0dac7b4e64bbff0733ac65fef07879c6755d1" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_context.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 29, - "startColumn": 7, - "charOffset": 801, - "charLength": 18, - "snippet": { - "text": "TestEstimateTokens" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 27, - "startColumn": 1, - "charOffset": 716, - "charLength": 176, - "snippet": { - "text": "# ── estimate_tokens ────────────────────────────────────────────────────────\n\nclass TestEstimateTokens:\n def test_returns_roughly_len_over_4(self):\n text = \"a\" * 100" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "d24e54ca73416e2f", - "equalIndicator/v1": "6f262792bf54aafbd4adc6057765072429cb48719d7ad7644959faaafbb65f69" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 68, - "startColumn": 7, - "charOffset": 1929, - "charLength": 22, - "snippet": { - "text": "TestConversationCreate" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 66, - "startColumn": 1, - "charOffset": 1921, - "charLength": 93, - "snippet": { - "text": "\n\nclass TestConversationCreate:\n def test_defaults(self):\n c = ConversationCreate()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "842524d41546fbc5", - "equalIndicator/v1": "6fabb227b29f95059f4fd3f04571a7c7819003b22ccd01bda0cc4b0578bf3ada" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 151, - "startColumn": 7, - "charOffset": 5320, - "charLength": 11, - "snippet": { - "text": "TestCompact" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 149, - "startColumn": 1, - "charOffset": 5251, - "charLength": 248, - "snippet": { - "text": "# ── Compaction ─────────────────────────────────────────────\n\nclass TestCompact:\n async def test_compact_calls_context_manager(self, mock_session):\n mock_session.context_manager.compact = AsyncMock(return_value=\"Summary of conversation\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "5844f70f62e0282f", - "equalIndicator/v1": "7549a697526aacbb7ffb49032dfde1403a62f54eab5d637a172be956b3dfd111" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models_orm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 154, - "startColumn": 7, - "charOffset": 4936, - "charLength": 24, - "snippet": { - "text": "TestConversationResource" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 152, - "startColumn": 1, - "charOffset": 4928, - "charLength": 139, - "snippet": { - "text": "\n\nclass TestConversationResource:\n @pytest_asyncio.fixture(autouse=True)\n async def _conv(self, db_session: AsyncSession, test_user):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ba373ea329a489e8", - "equalIndicator/v1": "7ae051d2505e41975d02b741dfb79fab99fa83082bf19cbc98486cbc11a42d17" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_redis_pubsub.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 117, - "startColumn": 7, - "charOffset": 4272, - "charLength": 18, - "snippet": { - "text": "TestClearInterrupt" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 115, - "startColumn": 1, - "charOffset": 4244, - "charLength": 151, - "snippet": { - "text": "\n@pytest.mark.asyncio\nclass TestClearInterrupt:\n async def test_deletes_key(self):\n from openmlr.services.redis_pubsub import clear_interrupt" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "54d43644e8cb5c17", - "equalIndicator/v1": "7af638a84503589ec81bdbf83b0237abc392015ec631e24d9c24882b6d482abf" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_local.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 145, - "startColumn": 7, - "charOffset": 5027, - "charLength": 15, - "snippet": { - "text": "TestHandleWrite" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 143, - "startColumn": 1, - "charOffset": 4999, - "charLength": 141, - "snippet": { - "text": "\n@pytest.mark.asyncio\nclass TestHandleWrite:\n async def test_writes_file(self, monkeypatch, tmp_path):\n monkeypatch.chdir(tmp_path)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "681705e5408f93d7", - "equalIndicator/v1": "7af8d809c06c518742feb1ccfed2ac46bf68db152173d100b8f2995f803af42b" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_local.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 105, - "startColumn": 7, - "charOffset": 3523, - "charLength": 14, - "snippet": { - "text": "TestHandleRead" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 103, - "startColumn": 1, - "charOffset": 3495, - "charLength": 157, - "snippet": { - "text": "\n@pytest.mark.asyncio\nclass TestHandleRead:\n async def test_reads_file_with_line_numbers(self, monkeypatch, tmp_path):\n monkeypatch.chdir(tmp_path)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "19281328efac15ad", - "equalIndicator/v1": "7e0c0253560f0e3f0631dab620c3774026bbed3be8c7bf705e00af92c5c7591d" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_prompts.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 8, - "startColumn": 7, - "charOffset": 160, - "charLength": 21, - "snippet": { - "text": "TestBuildSystemPrompt" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 6, - "startColumn": 1, - "charOffset": 152, - "charLength": 87, - "snippet": { - "text": "\n\nclass TestBuildSystemPrompt:\n def test_renders_with_tools(self):\n tools = [" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "23a426bb559e7763", - "equalIndicator/v1": "7ec33dd12292b571020513873a4c0f1cf794159fb71f96cc8ba5f9960af96712" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_doom_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 28, - "startColumn": 7, - "charOffset": 745, - "charLength": 15, - "snippet": { - "text": "TestNoDetection" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 26, - "startColumn": 1, - "charOffset": 660, - "charLength": 193, - "snippet": { - "text": "# ── Edge cases / no detection ──────────────────────────────────────────────\n\nclass TestNoDetection:\n def test_returns_none_for_empty_list(self):\n assert detect_doom_loop([]) is None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "6e5a65ce8368445e", - "equalIndicator/v1": "7efdfdaa0877118b3863bb03e1b59c411df06be3e62b5aee55cb32bb5c65ac38" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_compute.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 279, - "startColumn": 7, - "charOffset": 10717, - "charLength": 18, - "snippet": { - "text": "TestComputeManager" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 277, - "startColumn": 1, - "charOffset": 10632, - "charLength": 204, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestComputeManager:\n def test_validate_ssh_missing_host(self, key_manager):\n cm = ComputeManager(key_manager)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "598960df70094bf3", - "equalIndicator/v1": "80821a7e327a8256fca7c16d5e40dc689bad397ffd84fdb70f84fd366f7ca9ea" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tool_registry.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 73, - "startColumn": 7, - "charOffset": 1604, - "charLength": 20, - "snippet": { - "text": "TestToolRegistration" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 71, - "startColumn": 1, - "charOffset": 1596, - "charLength": 127, - "snippet": { - "text": "\n\nclass TestToolRegistration:\n async def test_register_single(self, router, dummy_tool):\n router.register(dummy_tool)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "61ebad463cc14aa6", - "equalIndicator/v1": "812dab98e0c40ab107e415c073df23e450020909bf283b4e7b7bcbb19b94585f" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 10, - "startColumn": 7, - "charOffset": 213, - "charLength": 8, - "snippet": { - "text": "ToolCall" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 8, - "startColumn": 1, - "charOffset": 195, - "charLength": 83, - "snippet": { - "text": "\n@dataclass\nclass ToolCall:\n \"\"\"A tool call requested by the LLM.\"\"\"\n id: str" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "a8204d8c3f8d843f", - "equalIndicator/v1": "81d6aa2b581f385dbfb02b565756d4219c02a828a2dcead921f1caf609fb077e" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_db_operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 257, - "startColumn": 7, - "charOffset": 12452, - "charLength": 22, - "snippet": { - "text": "TestResourceOperations" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 255, - "startColumn": 1, - "charOffset": 12444, - "charLength": 137, - "snippet": { - "text": "\n\nclass TestResourceOperations:\n @pytest_asyncio.fixture(autouse=True)\n async def _conv(self, db_session: AsyncSession, test_user):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "136d14b8d3898251", - "equalIndicator/v1": "824394a48b55b5ad55d609ed943e75139e87537fed0ede28f1b6bb31d0469fef" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 86, - "startColumn": 7, - "charOffset": 2640, - "charLength": 19, - "snippet": { - "text": "TestBudgetFunctions" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 84, - "startColumn": 1, - "charOffset": 2632, - "charLength": 119, - "snippet": { - "text": "\n\nclass TestBudgetFunctions:\n async def test_check_budget_allows_first_call(self):\n ok, msg = _check_budget()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "f37ea4ae8741e176", - "equalIndicator/v1": "843fb2950e3d46639d679ed429e651f18bb7c3d24b6fde10ab2eddbd57a9e44f" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_config.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 12, - "startColumn": 7, - "charOffset": 402, - "charLength": 23, - "snippet": { - "text": "TestAgentConfigDefaults" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 10, - "startColumn": 1, - "charOffset": 317, - "charLength": 182, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestAgentConfigDefaults:\n def test_model_name_default_empty(self):\n cfg = AgentConfig()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "80540ed5ae7d3d1f", - "equalIndicator/v1": "84655aea434dcf4fe80257c0bfe8b1a0b5ace719a473e9368c2617e62838040a" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 139, - "startColumn": 7, - "charOffset": 4952, - "charLength": 8, - "snippet": { - "text": "TestUndo" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 137, - "startColumn": 1, - "charOffset": 4883, - "charLength": 214, - "snippet": { - "text": "# ── Undo ───────────────────────────────────────────────────\n\nclass TestUndo:\n async def test_undo_calls_context_manager(self, mock_session):\n mock_session.context_manager.undo_last_turn.return_value = 3" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4f2f7a58a3b307e0", - "equalIndicator/v1": "84a7a494c68cb10bf16e433441dff379dcb761eba7dd1b93b1766e99df1a0992" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_compute.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 505, - "startColumn": 7, - "charOffset": 19163, - "charLength": 13, - "snippet": { - "text": "TestKeyRoutes" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 503, - "startColumn": 1, - "charOffset": 19078, - "charLength": 204, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestKeyRoutes:\n async def test_list_keys_empty(self, auth_client):\n resp = await auth_client.get(\"/api/keys\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "065854e5e5945636", - "equalIndicator/v1": "856e6f07f9c34629dce0bf51f4e135549b77d704eba61915cc7e7d46688c85f3" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_celery_app.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 6, - "startColumn": 7, - "charOffset": 77, - "charLength": 13, - "snippet": { - "text": "TestCeleryApp" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 4, - "startColumn": 1, - "charOffset": 69, - "charLength": 111, - "snippet": { - "text": "\n\nclass TestCeleryApp:\n def test_is_celery_instance(self):\n from openmlr.celery_app import celery_app" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ac4d84c95b18d39b", - "equalIndicator/v1": "85777d1b2686ee41a99ce9deff46605b8b838167b4cbcb77eb52ff5d7e6a2daa" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_compute.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 560, - "startColumn": 7, - "charOffset": 21308, - "charLength": 21, - "snippet": { - "text": "TestComputeNodeRoutes" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 558, - "startColumn": 1, - "charOffset": 21300, - "charLength": 139, - "snippet": { - "text": "\n\nclass TestComputeNodeRoutes:\n async def test_list_empty(self, auth_client):\n resp = await auth_client.get(\"/api/compute/nodes\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "fbf6a2acc3ab93d7", - "equalIndicator/v1": "862930e7f8d00ad4afe1345202e4a1587cbfb6d3b12897fb21119545de54a684" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_db_engine.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 28, - "startColumn": 7, - "charOffset": 746, - "charLength": 20, - "snippet": { - "text": "TestGetWorkerSession" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 26, - "startColumn": 1, - "charOffset": 718, - "charLength": 153, - "snippet": { - "text": "\n@pytest.mark.asyncio\nclass TestGetWorkerSession:\n async def test_returns_sessionmaker(self):\n from openmlr.db.engine import get_worker_session" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "8b3579d4c22a1d1a", - "equalIndicator/v1": "86391a3cf4d2639dd9bf3f32f9910ae1b0aded0d3a1b24ec617004e845da9bf2" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models_orm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 292, - "startColumn": 7, - "charOffset": 9547, - "charLength": 17, - "snippet": { - "text": "TestSandboxConfig" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 290, - "startColumn": 1, - "charOffset": 9539, - "charLength": 135, - "snippet": { - "text": "\n\nclass TestSandboxConfig:\n async def test_create_config(self, db_session: AsyncSession, test_user):\n config = SandboxConfig(" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "46fa7678ba033db0", - "equalIndicator/v1": "868dd1a15ce81ec7e6d27d4f536eb140d4424695f82b91984f2d6dcf5a0608be" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_db_operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 335, - "startColumn": 7, - "charOffset": 15979, - "charLength": 22, - "snippet": { - "text": "TestAgentJobOperations" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 333, - "startColumn": 1, - "charOffset": 15971, - "charLength": 137, - "snippet": { - "text": "\n\nclass TestAgentJobOperations:\n @pytest_asyncio.fixture(autouse=True)\n async def _conv(self, db_session: AsyncSession, test_user):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "b63c229cb405d88a", - "equalIndicator/v1": "8a36d09a3a50523ca381ba7bec6743f0935dc0cda26af5c2eb1e6613df6406e3" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 66, - "startColumn": 7, - "charOffset": 1538, - "charLength": 9, - "snippet": { - "text": "LLMResult" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 64, - "startColumn": 1, - "charOffset": 1520, - "charLength": 78, - "snippet": { - "text": "\n@dataclass\nclass LLMResult:\n \"\"\"Result of an LLM call.\"\"\"\n content: str" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "e4f952926de667a2", - "equalIndicator/v1": "8a5fc36f1a4b34d12c0805cf9e7e99373af9b66579aef549f354bbf1c6286ee1" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_compute.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 48, - "startColumn": 7, - "charOffset": 1389, - "charLength": 14, - "snippet": { - "text": "TestKeyManager" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 46, - "startColumn": 1, - "charOffset": 1304, - "charLength": 201, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestKeyManager:\n def test_init_creates_dir(self, tmp_keys_dir, key_manager):\n assert tmp_keys_dir.exists()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4ab4d5aafe7c2ec4", - "equalIndicator/v1": "8aed7cae54fdac61ac371b57265a6216a9d3b8a1ea58c43f6057a84b459dcc41" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 203, - "startColumn": 7, - "charOffset": 7513, - "charLength": 16, - "snippet": { - "text": "TestRunAgentTurn" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 201, - "startColumn": 1, - "charOffset": 7505, - "charLength": 169, - "snippet": { - "text": "\n\nclass TestRunAgentTurn:\n async def test_delegates_to_run_agent(self, mock_session, mock_router):\n mock_session.context_manager.get_messages.return_value = []" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "72498b3e44d92060", - "equalIndicator/v1": "8b6e3c3835d2e8f678bf8f14634620257fc42150d5bb6ec80fac47c7faed016d" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_context.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 219, - "startColumn": 7, - "charOffset": 8534, - "charLength": 9, - "snippet": { - "text": "TestClear" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 217, - "startColumn": 1, - "charOffset": 8449, - "charLength": 183, - "snippet": { - "text": "# ── ContextManager.clear ───────────────────────────────────────────────────\n\nclass TestClear:\n def test_empties_messages(self):\n cm = ContextManager(config=_make_config())" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "5b4f459a27f515b6", - "equalIndicator/v1": "8cee59bace8c1fd371f09f4366dddab0c4cceab4fb5fcb2f86f41b184dc17248" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 127, - "startColumn": 7, - "charOffset": 4234, - "charLength": 10, - "snippet": { - "text": "TestOpType" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 125, - "startColumn": 1, - "charOffset": 4226, - "charLength": 100, - "snippet": { - "text": "\n\nclass TestOpType:\n def test_enum_values(self):\n assert OpType.USER_INPUT == \"user_input\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "61727fcf7c6881a7", - "equalIndicator/v1": "8ec7310b8ea95e9af821e8ee25d4e984e7a19448b97fdce9d8f5c71a955135d5" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_compute.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 463, - "startColumn": 7, - "charOffset": 17476, - "charLength": 24, - "snippet": { - "text": "TestPlanModeComputeTools" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 461, - "startColumn": 1, - "charOffset": 17391, - "charLength": 226, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestPlanModeComputeTools:\n def test_compute_list_allowed(self):\n assert \"compute_list\" in MODE_TOOL_RESTRICTIONS[\"plan\"][\"allowed\"]" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "81b468fa220c7e8b", - "equalIndicator/v1": "8f328dde1e4e3aa1283561e8aa207c25307fbb252f71f64aa79dcfbb80d7bdf6" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/session.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 14, - "startColumn": 7, - "charOffset": 286, - "charLength": 7, - "snippet": { - "text": "Session" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 12, - "startColumn": 1, - "charOffset": 268, - "charLength": 86, - "snippet": { - "text": "\n@dataclass\nclass Session:\n \"\"\"Holds all state for a single agent conversation.\"\"\"\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "e851eb0a5f38ed67", - "equalIndicator/v1": "8f862ac9e19966761d368395e7099e173d73faa7e22c643b03a5bd38e23d39fa" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_db_engine.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 37, - "startColumn": 7, - "charOffset": 1055, - "charLength": 9, - "snippet": { - "text": "TestGetDB" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 35, - "startColumn": 1, - "charOffset": 1027, - "charLength": 124, - "snippet": { - "text": "\n@pytest.mark.asyncio\nclass TestGetDB:\n async def test_yields_session(self):\n from openmlr.db.engine import get_db" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "26240ba51abe7a6b", - "equalIndicator/v1": "91426ec089fccd37a831e6c39fa4f211fec470fe48dc46953c574dcf9925c729" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_session.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 30, - "startColumn": 7, - "charOffset": 793, - "charLength": 8, - "snippet": { - "text": "TestInit" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 28, - "startColumn": 1, - "charOffset": 708, - "charLength": 231, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestInit:\n def test_session_creates_context_manager(self, session: Session):\n assert isinstance(session.context_manager, ContextManager)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "70960e13a427414b", - "equalIndicator/v1": "9175235d66b1cbb8d5e3af5446085bc6f163fbce5840f9dd05359dba30eaa635" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_routes_settings.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 14, - "startColumn": 7, - "charOffset": 225, - "charLength": 17, - "snippet": { - "text": "TestAgentSettings" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 12, - "startColumn": 1, - "charOffset": 217, - "charLength": 155, - "snippet": { - "text": "\n\nclass TestAgentSettings:\n async def test_get_all_settings_empty(self, auth_client: AsyncClient):\n resp = await auth_client.get(\"/api/settings\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "2c2add3bb3579f7f", - "equalIndicator/v1": "9402a49a4b1f88709e71627cefe04aac85cddf397fa31535749515507485784f" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models_orm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 119, - "startColumn": 7, - "charOffset": 3810, - "charLength": 20, - "snippet": { - "text": "TestConversationTask" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 117, - "startColumn": 1, - "charOffset": 3802, - "charLength": 135, - "snippet": { - "text": "\n\nclass TestConversationTask:\n @pytest_asyncio.fixture(autouse=True)\n async def _conv(self, db_session: AsyncSession, test_user):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "2ea90676c5a036be", - "equalIndicator/v1": "96e7de79268094b19a6f536cb3c2574a4db1ec920bca901b26c72107ee6c5fb4" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_routes_settings.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 113, - "startColumn": 7, - "charOffset": 4259, - "charLength": 10, - "snippet": { - "text": "TestModels" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 111, - "startColumn": 1, - "charOffset": 4251, - "charLength": 135, - "snippet": { - "text": "\n\nclass TestModels:\n async def test_list_models(self, auth_client: AsyncClient):\n resp = await auth_client.get(\"/api/models\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "80fd57fb78af4a3a", - "equalIndicator/v1": "97348d93398764b1bb7af1128a1cbe8c4f76041608d01357eeb795ad0bbf47c4" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_db_operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 105, - "startColumn": 7, - "charOffset": 4910, - "charLength": 21, - "snippet": { - "text": "TestMessageOperations" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 103, - "startColumn": 1, - "charOffset": 4902, - "charLength": 136, - "snippet": { - "text": "\n\nclass TestMessageOperations:\n @pytest_asyncio.fixture(autouse=True)\n async def _conv(self, db_session: AsyncSession, test_user):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "0d6d0056acb2ea64", - "equalIndicator/v1": "9868180f2611a5b4addcc9937a9865ddcc50b7eaa5b4528b309938efccd6238a" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 104, - "startColumn": 7, - "charOffset": 3243, - "charLength": 12, - "snippet": { - "text": "TestGetDraft" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 102, - "startColumn": 1, - "charOffset": 3235, - "charLength": 109, - "snippet": { - "text": "\n\nclass TestGetDraft:\n async def test_no_project(self):\n from unittest.mock import AsyncMock, patch" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ae837dbc74797aaf", - "equalIndicator/v1": "98856b900de53836a5b06a57fb2ffdf4a79d3f5702a1342395c17f29f3eb6da7" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models_orm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 276, - "startColumn": 7, - "charOffset": 9026, - "charLength": 18, - "snippet": { - "text": "TestWritingProject" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 274, - "startColumn": 1, - "charOffset": 9018, - "charLength": 139, - "snippet": { - "text": "\n\nclass TestWritingProject:\n async def test_create_project(self, db_session: AsyncSession, test_user):\n project = WritingProject(" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "823d24adbad992a7", - "equalIndicator/v1": "991ff94d6dee8f6d33380e41480795115989ac6367ab0db6ee017c74d2c909e5" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models_orm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 189, - "startColumn": 7, - "charOffset": 6137, - "charLength": 12, - "snippet": { - "text": "TestAgentJob" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 187, - "startColumn": 1, - "charOffset": 6129, - "charLength": 127, - "snippet": { - "text": "\n\nclass TestAgentJob:\n @pytest_asyncio.fixture(autouse=True)\n async def _conv(self, db_session: AsyncSession, test_user):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "78f4c679cecf8637", - "equalIndicator/v1": "9adefdf2b71eee83c7cf3dea6159e8036ed0c0233f91635f513cf370aae062c7" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 25, - "startColumn": 7, - "charOffset": 450, - "charLength": 16, - "snippet": { - "text": "TestUserRegister" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 23, - "startColumn": 1, - "charOffset": 442, - "charLength": 125, - "snippet": { - "text": "\n\nclass TestUserRegister:\n def test_valid(self):\n u = UserRegister(username=\"testuser\", password=\"testpassword123\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "309845e27dd4e0eb", - "equalIndicator/v1": "9b56a3badfb95992c0fdeea5f74bffd8e05288b14f291a0901c8ffbc7aaabab0" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_mcp.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 36, - "startColumn": 7, - "charOffset": 1165, - "charLength": 20, - "snippet": { - "text": "TestProcessMCPConfig" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 34, - "startColumn": 1, - "charOffset": 1157, - "charLength": 131, - "snippet": { - "text": "\n\nclass TestProcessMCPConfig:\n async def test_simple_dict(self, monkeypatch):\n monkeypatch.setenv(\"API_KEY\", \"secret123\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4928d583fb7b351f", - "equalIndicator/v1": "9ed2ca605eace22ee418c3f5d952fa6f38d5caafbb8e7357108948d4e27c4d1a" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 49, - "startColumn": 7, - "charOffset": 2071, - "charLength": 18, - "snippet": { - "text": "TestNormalizeModel" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 47, - "startColumn": 1, - "charOffset": 2063, - "charLength": 119, - "snippet": { - "text": "\n\nclass TestNormalizeModel:\n @pytest.mark.parametrize(\"full_name,normalized\", [\n (\"openai/gpt-4o\", \"gpt-4o\")," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "647d4c27293df90e", - "equalIndicator/v1": "9f0c01ec6411c19d7b44e60232abd59b75af24b4425003ad73903d823c75efab" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tool_registry.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 152, - "startColumn": 7, - "charOffset": 4501, - "charLength": 17, - "snippet": { - "text": "TestModeFiltering" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 150, - "startColumn": 1, - "charOffset": 4493, - "charLength": 143, - "snippet": { - "text": "\n\nclass TestModeFiltering:\n async def test_default_mode_allows_all(self, router, dummy_tool, bash_tool):\n router.register(dummy_tool)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "8b67c1156bc1b2b3", - "equalIndicator/v1": "a0c6b2796cd77f702c3a0213812c331dab3c041e73ab23a215c4d89418803cd3" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 223, - "startColumn": 7, - "charOffset": 9110, - "charLength": 14, - "snippet": { - "text": "TestRetryLogic" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 221, - "startColumn": 1, - "charOffset": 9102, - "charLength": 154, - "snippet": { - "text": "\n\nclass TestRetryLogic:\n def test_is_retryable_rate_limit(self):\n assert LLMProvider._is_retryable(Exception(\"429 Rate limit exceeded\")) is True" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ab6d695e4ddda632", - "equalIndicator/v1": "a28c78272b26583ef000362f7a76ccab692a28f7202588344138e11b00befbe3" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_config.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 70, - "startColumn": 7, - "charOffset": 2388, - "charLength": 26, - "snippet": { - "text": "TestGetModelMaxTokensKnown" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 68, - "startColumn": 1, - "charOffset": 2303, - "charLength": 174, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestGetModelMaxTokensKnown:\n @pytest.mark.parametrize(\n \"model_name, expected\"," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "cb7d9ed81e3e3a8f", - "equalIndicator/v1": "a3699d7b5b8f7402a424b1b4e7c04f306b86d301d42da12ce4fa0a9500c0ffad" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 8, - "startColumn": 7, - "charOffset": 178, - "charLength": 13, - "snippet": { - "text": "TestGetApiKey" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 6, - "startColumn": 1, - "charOffset": 170, - "charLength": 120, - "snippet": { - "text": "\n\nclass TestGetApiKey:\n @pytest.mark.parametrize(\"model_name,env_var\", [\n (\"openai/gpt-4o\", \"OPENAI_API_KEY\")," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "cfd357f83ae5abd9", - "equalIndicator/v1": "a38503cdf99102e8e6d2c0bb608ee2aa07ecaff1ceccbdae41105b7ee4d049c9" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 51, - "startColumn": 7, - "charOffset": 1370, - "charLength": 14, - "snippet": { - "text": "TestSetOutline" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 49, - "startColumn": 1, - "charOffset": 1362, - "charLength": 112, - "snippet": { - "text": "\n\nclass TestSetOutline:\n async def test_no_project(self):\n from openmlr.tools.writing import _projects" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "72dd1565f0ff8d31", - "equalIndicator/v1": "a55bee3a790c82e42f78357a531b15f343e2e4f3303636285c29d402a0e623bf" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_dependencies.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 41, - "startColumn": 7, - "charOffset": 1300, - "charLength": 9, - "snippet": { - "text": "TestGetDB" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 39, - "startColumn": 1, - "charOffset": 1292, - "charLength": 132, - "snippet": { - "text": "\n\nclass TestGetDB:\n async def test_db_session_yielded(self, client: AsyncClient):\n from openmlr.dependencies import get_db" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "e724830e3dc3209e", - "equalIndicator/v1": "a6506338ecd79f3f24fee9725892f22266c18db0a5449bffc79eaf78c94a24ae" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/compute/capabilities.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 17, - "startColumn": 7, - "charOffset": 297, - "charLength": 19, - "snippet": { - "text": "ComputeCapabilities" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 15, - "startColumn": 1, - "charOffset": 279, - "charLength": 109, - "snippet": { - "text": "\n@dataclass\nclass ComputeCapabilities:\n \"\"\"Comprehensive capabilities of a compute node.\"\"\"\n # Platform" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "f7ab45f2a06ea64d", - "equalIndicator/v1": "a8010f298877cf39c4bc6c8848415e501cd14500b8481f84c50388bb1aeead5a" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_github.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 45, - "startColumn": 7, - "charOffset": 1578, - "charLength": 11, - "snippet": { - "text": "TestHeaders" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 43, - "startColumn": 1, - "charOffset": 1570, - "charLength": 84, - "snippet": { - "text": "\n\nclass TestHeaders:\n async def test_headers_accept(self):\n h = _headers()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "befe82cb0cacfb51", - "equalIndicator/v1": "a83f74ae362a4d7aaaa97ffcdb98281f193db610ad35d04100fc49bc05ccaa78" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 203, - "startColumn": 7, - "charOffset": 6865, - "charLength": 17, - "snippet": { - "text": "TestRefineSection" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 201, - "startColumn": 1, - "charOffset": 6857, - "charLength": 126, - "snippet": { - "text": "\n\nclass TestRefineSection:\n async def test_returns_feedback_mode(self):\n from openmlr.tools.writing import _projects" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "9a26e43143f7c412", - "equalIndicator/v1": "a8978f653fe89dd55ae7dd574addd31f21df67c78bfb580d3915ef5fe8102153" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_session.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 123, - "startColumn": 7, - "charOffset": 3992, - "charLength": 16, - "snippet": { - "text": "TestCancellation" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 121, - "startColumn": 1, - "charOffset": 3907, - "charLength": 211, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestCancellation:\n def test_not_cancelled_initially(self, session: Session):\n assert session.is_cancelled() is False" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "581bf6f594dc4c12", - "equalIndicator/v1": "ab3e2f7f0acd5e0fc6cf7f2f029b155bcc67a3fc4ddfeb4f2b705f65dbae0555" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 219, - "startColumn": 7, - "charOffset": 7459, - "charLength": 17, - "snippet": { - "text": "TestCountSections" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 217, - "startColumn": 1, - "charOffset": 7451, - "charLength": 96, - "snippet": { - "text": "\n\nclass TestCountSections:\n async def test_counts_with_subsections(self):\n outline = [" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "25207bf699a570a0", - "equalIndicator/v1": "acf668dad8d92ad628816ee2d56a6f1a3d559a2784919f3f128cb19ec2b01fb1" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_compute.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 680, - "startColumn": 7, - "charOffset": 26229, - "charLength": 23, - "snippet": { - "text": "TestSystemPromptCompute" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 678, - "startColumn": 1, - "charOffset": 26144, - "charLength": 219, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestSystemPromptCompute:\n def test_prompt_includes_compute_env(self):\n from openmlr.agent.prompts import build_system_prompt" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "80fcdae928326369", - "equalIndicator/v1": "adeb74eae47232862bf7bb98bf8c94b88177073e3ca9ffdb86dd19aefd06d335" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_compute.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 399, - "startColumn": 7, - "charOffset": 15203, - "charLength": 17, - "snippet": { - "text": "TestPathTraversal" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 397, - "startColumn": 1, - "charOffset": 15118, - "charLength": 189, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestPathTraversal:\n def test_valid_relative_path(self, tmp_path):\n ws = tmp_path / \"workspace\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "d76fd488a4cbd349", - "equalIndicator/v1": "b129ddd0c34d93ad8560be5f89da56a4a1f97ed3cf72d38f982b0bae62236382" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_sandbox.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 52, - "startColumn": 7, - "charOffset": 1866, - "charLength": 15, - "snippet": { - "text": "TestHandleProbe" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 50, - "startColumn": 1, - "charOffset": 1858, - "charLength": 103, - "snippet": { - "text": "\n\nclass TestHandleProbe:\n async def test_probe_without_sandbox(self):\n mgr = SandboxManager()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "0fa011731ad33a51", - "equalIndicator/v1": "b9ce76889baf4b27aa52c0bc826779c949ff41af0e3de1dfacba844a3be9a538" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_doom_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 96, - "startColumn": 7, - "charOffset": 3280, - "charLength": 22, - "snippet": { - "text": "TestRepeatingSequences" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 94, - "startColumn": 1, - "charOffset": 3195, - "charLength": 167, - "snippet": { - "text": "# ── Pattern 2: repeating sequences ─────────────────────────────────────────\n\nclass TestRepeatingSequences:\n def test_detects_AB_AB_pattern(self):\n msgs = [" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "9977592deb3e6c9a", - "equalIndicator/v1": "babf62cb4da3bd500c8c0c8d958f918c87e2fdca8bdc541211219378568a8b39" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_db_engine.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 6, - "startColumn": 7, - "charOffset": 82, - "charLength": 16, - "snippet": { - "text": "TestEngineConfig" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 4, - "startColumn": 1, - "charOffset": 74, - "charLength": 116, - "snippet": { - "text": "\n\nclass TestEngineConfig:\n def test_database_url_exists(self):\n from openmlr.db.engine import DATABASE_URL" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "9a8a7ff71372fe53", - "equalIndicator/v1": "bb9f56ad81b32437360d5585669e640719ccae27e014aaac51ca1b3f05a1f794" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_local.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 20, - "startColumn": 7, - "charOffset": 338, - "charLength": 20, - "snippet": { - "text": "TestCreateLocalTools" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 18, - "startColumn": 1, - "charOffset": 330, - "charLength": 104, - "snippet": { - "text": "\n\nclass TestCreateLocalTools:\n def test_creates_all_tools(self):\n tools = create_local_tools()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "dacccb85bec3e886", - "equalIndicator/v1": "bc5b508b2d13b7751175f101349d507ec7d9678d14526b819c204862d4cadf0f" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 38, - "startColumn": 7, - "charOffset": 891, - "charLength": 10, - "snippet": { - "text": "AgentEvent" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 36, - "startColumn": 1, - "charOffset": 859, - "charLength": 124, - "snippet": { - "text": "\n@dataclass(kw_only=True)\nclass AgentEvent:\n \"\"\"Event emitted by the agent loop for SSE streaming.\"\"\"\n event_type: str" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "57b7f27c2e4c674e", - "equalIndicator/v1": "bda9d21aac8d26bad2015a2901673650b72b15e4ac0a1be41c75dc4488f9f77c" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 101, - "startColumn": 7, - "charOffset": 4313, - "charLength": 28, - "snippet": { - "text": "TestAnthropicFormatDetection" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 99, - "startColumn": 1, - "charOffset": 4305, - "charLength": 158, - "snippet": { - "text": "\n\nclass TestAnthropicFormatDetection:\n def test_native_anthropic(self):\n assert LLMProvider._is_anthropic_model(\"anthropic/claude-sonnet-4\") is True" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "60a655ebd6fe7d1f", - "equalIndicator/v1": "beef9f58577fa57f49179232b12b7c617b471b5f4647d4e8cadcc169b7d02502" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 141, - "startColumn": 7, - "charOffset": 4696, - "charLength": 14, - "snippet": { - "text": "TestSubmission" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 139, - "startColumn": 1, - "charOffset": 4688, - "charLength": 125, - "snippet": { - "text": "\n\nclass TestSubmission:\n def test_creation(self):\n sub = Submission(op=OpType.USER_INPUT, data=\"Send this message\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "b2a7d3e6d24adf5b", - "equalIndicator/v1": "c024c04a6daaf9897a186724d7612ad9e9be495c93a7bb9bd45c8912003a2ee3" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 297, - "startColumn": 7, - "charOffset": 11442, - "charLength": 20, - "snippet": { - "text": "TestNonStreamLLMCall" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 295, - "startColumn": 1, - "charOffset": 11373, - "charLength": 204, - "snippet": { - "text": "# ── LLM Call Helpers ───────────────────────────────────────\n\nclass TestNonStreamLLMCall:\n async def test_returns_llm_result(self, mock_session):\n mock_session.is_cancelled.return_value = False" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4b695b317d9db94e", - "equalIndicator/v1": "c02987ef5dfd66d068643d488acd77532b693c2f66e438584dfd944d6286409e" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tool_registry.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 99, - "startColumn": 7, - "charOffset": 2511, - "charLength": 16, - "snippet": { - "text": "TestToolDispatch" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 97, - "startColumn": 1, - "charOffset": 2503, - "charLength": 124, - "snippet": { - "text": "\n\nclass TestToolDispatch:\n async def test_call_tool_simple(self, router, dummy_tool):\n router.register(dummy_tool)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "f4eda54214b1d93b", - "equalIndicator/v1": "c09401e0033b015d12fb8f0ce36a39fddc255a023162624a38c6ad4d8e8aa22d" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_sandbox_types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 71, - "startColumn": 7, - "charOffset": 2332, - "charLength": 16, - "snippet": { - "text": "TestLocalSandbox" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 69, - "startColumn": 1, - "charOffset": 2304, - "charLength": 145, - "snippet": { - "text": "\n@pytest.mark.asyncio\nclass TestLocalSandbox:\n async def test_create_default(self, monkeypatch, tmp_path):\n monkeypatch.chdir(tmp_path)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "96768f0cd9d80d40", - "equalIndicator/v1": "c0c7d185b709e8f8630271692c16af9bece4f2b659814c181e4c99f8b5d4c053" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models_orm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 259, - "startColumn": 7, - "charOffset": 8482, - "charLength": 18, - "snippet": { - "text": "TestResearchCorpus" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 257, - "startColumn": 1, - "charOffset": 8474, - "charLength": 137, - "snippet": { - "text": "\n\nclass TestResearchCorpus:\n async def test_create_corpus(self, db_session: AsyncSession, test_user):\n corpus = ResearchCorpus(" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "a0f7de33fcffd2f7", - "equalIndicator/v1": "c48292df6a0b0d3a34fe935b42d5cf50958b48a05bb42a8b4566a82b4c8e4636" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_event_bus.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 23, - "startColumn": 7, - "charOffset": 583, - "charLength": 13, - "snippet": { - "text": "TestSubscribe" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 21, - "startColumn": 1, - "charOffset": 498, - "charLength": 190, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestSubscribe:\n def test_subscribe_returns_queue(self, bus: EventBus):\n queue = bus.subscribe()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "765fd1c6d0d568fe", - "equalIndicator/v1": "c5d3ab1eb32f21d2f58c6c495be3aa5ead0fa6714200282f1f07eb50d2023363" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_db_operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 144, - "startColumn": 7, - "charOffset": 6669, - "charLength": 22, - "snippet": { - "text": "TestSettingsOperations" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 142, - "startColumn": 1, - "charOffset": 6661, - "charLength": 216, - "snippet": { - "text": "\n\nclass TestSettingsOperations:\n async def test_set_and_get_user_setting(self, db_session: AsyncSession, test_user):\n await ops.set_user_setting(db_session, test_user.id, \"agent\", \"default_model\", \"gpt-4o\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "108d833b25273efe", - "equalIndicator/v1": "c62d1fae356a4472f4886a91dfd39e75ae76a94d17ff4e735bb6d0c7e716bf5c" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 55, - "startColumn": 7, - "charOffset": 1611, - "charLength": 16, - "snippet": { - "text": "TestToOpenAlexId" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 53, - "startColumn": 1, - "charOffset": 1603, - "charLength": 118, - "snippet": { - "text": "\n\nclass TestToOpenAlexId:\n async def test_openalex_id(self):\n assert _to_openalex_id(\"W123456\") == \"W123456\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4e45c971dcc961d6", - "equalIndicator/v1": "c8575b467c0cd668e564ba9e0c218b6ab3c6c483b6d11aed7f1ed6a395ca7ab2" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_compute.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 219, - "startColumn": 7, - "charOffset": 8635, - "charLength": 23, - "snippet": { - "text": "TestComputeCapabilities" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 217, - "startColumn": 1, - "charOffset": 8550, - "charLength": 175, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestComputeCapabilities:\n def test_defaults(self):\n caps = ComputeCapabilities()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "36bfc80788102258", - "equalIndicator/v1": "caeaa80b9358169e5fb5cd48dabe67024b1b6f57c584bc47fbf8f95bd49846d8" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_session.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 167, - "startColumn": 7, - "charOffset": 5557, - "charLength": 15, - "snippet": { - "text": "TestUpdateModel" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 165, - "startColumn": 1, - "charOffset": 5472, - "charLength": 224, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestUpdateModel:\n def test_update_model_changes_config(self, session: Session):\n assert session.config.model_name == \"test-model\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "592d0004b583fcc6", - "equalIndicator/v1": "cc79d4c2015abff5cf5cfb36cde73ad1befc8b56cec711cf7fb57054d232ec5c" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 18, - "startColumn": 7, - "charOffset": 342, - "charLength": 8, - "snippet": { - "text": "ToolSpec" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 16, - "startColumn": 1, - "charOffset": 324, - "charLength": 84, - "snippet": { - "text": "\n@dataclass\nclass ToolSpec:\n \"\"\"Specification for an agent tool.\"\"\"\n name: str" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "41133f85a590105e", - "equalIndicator/v1": "ce4132279177d68d1cef926c73eb4a2e346f69dab13853ed2d9552012dfe6b97" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/compute/capabilities.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 8, - "startColumn": 7, - "charOffset": 133, - "charLength": 7, - "snippet": { - "text": "GPUInfo" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 6, - "startColumn": 1, - "charOffset": 115, - "charLength": 81, - "snippet": { - "text": "\n@dataclass\nclass GPUInfo:\n \"\"\"Information about a GPU.\"\"\"\n model: str = \"\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ab27cbd53fee52a2", - "equalIndicator/v1": "ce4f1152c79483f4581a1432b89fba7cb68373109ff19e593bfd5bf6bd22ca43" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_mcp.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 10, - "startColumn": 7, - "charOffset": 200, - "charLength": 21, - "snippet": { - "text": "TestSubstituteEnvVars" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 8, - "startColumn": 1, - "charOffset": 192, - "charLength": 135, - "snippet": { - "text": "\n\nclass TestSubstituteEnvVars:\n async def test_replaces_var(self, monkeypatch):\n monkeypatch.setenv(\"TEST_KEY\", \"test-value\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "e3afb297b3fabdbb", - "equalIndicator/v1": "cf2a575924e622749bf6592c8ad0c4c0f3d13354ee1103b99c680fa2dc380d4b" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 162, - "startColumn": 7, - "charOffset": 5518, - "charLength": 16, - "snippet": { - "text": "TestListSections" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 160, - "startColumn": 1, - "charOffset": 5510, - "charLength": 114, - "snippet": { - "text": "\n\nclass TestListSections:\n async def test_no_project(self):\n from openmlr.tools.writing import _projects" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "3307a0faa488f7b8", - "equalIndicator/v1": "cfb09538cd3671a67e935bb556dd1760d9f02246c17b3a44a51a88f1fa56c42e" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_context.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 138, - "startColumn": 7, - "charOffset": 5122, - "charLength": 19, - "snippet": { - "text": "TestNeedsCompaction" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 136, - "startColumn": 1, - "charOffset": 5037, - "charLength": 211, - "snippet": { - "text": "# ── ContextManager.needs_compaction ────────────────────────────────────────\n\nclass TestNeedsCompaction:\n def test_returns_false_when_under_threshold(self):\n cm = ContextManager(config=_make_config())" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "0edeb87dd2bce9d5", - "equalIndicator/v1": "d07f99253164aad1b5698bad82c5d5787477419166889c138c7db0697cc0daa3" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 112, - "startColumn": 7, - "charOffset": 3379, - "charLength": 22, - "snippet": { - "text": "TestConversationDetail" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 110, - "startColumn": 1, - "charOffset": 3371, - "charLength": 98, - "snippet": { - "text": "\n\nclass TestConversationDetail:\n def test_creation(self):\n from datetime import datetime" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "48f159d432478171", - "equalIndicator/v1": "d416766e21dcf1b49353b09ea5e2be80945c696a62de33f45c40303c0650732f" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_config.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 122, - "startColumn": 7, - "charOffset": 4443, - "charLength": 18, - "snippet": { - "text": "TestEstimateTokens" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 120, - "startColumn": 1, - "charOffset": 4358, - "charLength": 210, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestEstimateTokens:\n def test_empty_string_returns_one(self):\n \"\"\"Empty string yields at least 1 (max(1, 0//4)).\"\"\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "98570d4d8f83bdfa", - "equalIndicator/v1": "d4cddb79734681884ae66142a3f157ada5e92b9936bceb665ef69389e35556f8" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 163, - "startColumn": 7, - "charOffset": 5718, - "charLength": 12, - "snippet": { - "text": "TestRunAgent" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 161, - "startColumn": 1, - "charOffset": 5649, - "charLength": 240, - "snippet": { - "text": "# ── Run Agent ──────────────────────────────────────────────\n\nclass TestRunAgent:\n async def test_runs_with_no_tool_calls(self, mock_session, mock_router):\n \"\"\"Agent processes a message, LLM returns content with no tool calls.\"\"\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "e66c463506c25e1e", - "equalIndicator/v1": "d4e88851cc3f7b7d12ff1661aacc3900d08a3838852225a03e46c20896316c2a" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 68, - "startColumn": 7, - "charOffset": 2805, - "charLength": 14, - "snippet": { - "text": "TestGetBaseUrl" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 66, - "startColumn": 1, - "charOffset": 2797, - "charLength": 146, - "snippet": { - "text": "\n\nclass TestGetBaseUrl:\n def test_local_base_url(self):\n assert LLMProvider._get_base_url(\"local/default\") == \"http://localhost:8000/v1\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "7573da4284f1e6e8", - "equalIndicator/v1": "d95930bead44756481e8e95d1d986c3f5e98c95454a1f3cf6276d5b67573dbb9" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_event_bus.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 161, - "startColumn": 7, - "charOffset": 5592, - "charLength": 27, - "snippet": { - "text": "TestAgentEventSerialization" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 159, - "startColumn": 1, - "charOffset": 5507, - "charLength": 214, - "snippet": { - "text": "# ---------------------------------------------------------------------------\n\nclass TestAgentEventSerialization:\n def test_to_sse_format(self):\n event = AgentEvent(event_type=\"done\", data={\"result\": 42})" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "795d2e4c9d1e3ba4", - "equalIndicator/v1": "d96e07baf318f93c86de520633728f3134a8478f850ac4e950c5c66510042412" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 28, - "startColumn": 7, - "charOffset": 619, - "charLength": 7, - "snippet": { - "text": "Message" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 26, - "startColumn": 1, - "charOffset": 601, - "charLength": 130, - "snippet": { - "text": "\n@dataclass\nclass Message:\n \"\"\"A message in the conversation context.\"\"\"\n role: str # \"system\", \"user\", \"assistant\", \"tool\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "24ca6f9279888db5", - "equalIndicator/v1": "df55570e8352810bf22da096d468825e6e53c00717d78d9062e1ca13de3fc056" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 21, - "startColumn": 7, - "charOffset": 375, - "charLength": 21, - "snippet": { - "text": "TestCreateWritingTool" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 19, - "startColumn": 1, - "charOffset": 367, - "charLength": 106, - "snippet": { - "text": "\n\nclass TestCreateWritingTool:\n async def test_creates_tool(self):\n tool = create_writing_tool()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "225be225ecc9cac5", - "equalIndicator/v1": "e0ebfb85388caa0a1ab6016b97ef1c90f520dee660cd3b26055c580292191e63" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models_orm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 81, - "startColumn": 7, - "charOffset": 2471, - "charLength": 16, - "snippet": { - "text": "TestMessageModel" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 79, - "startColumn": 1, - "charOffset": 2463, - "charLength": 131, - "snippet": { - "text": "\n\nclass TestMessageModel:\n @pytest_asyncio.fixture(autouse=True)\n async def _conv(self, db_session: AsyncSession, test_user):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "9153eaa8809df43a", - "equalIndicator/v1": "e2315ae451426898d6d5d63ae1896925d931cd34991ba518f4590378a37be1d7" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_context.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 170, - "startColumn": 7, - "charOffset": 6391, - "charLength": 16, - "snippet": { - "text": "TestUndoLastTurn" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 168, - "startColumn": 1, - "charOffset": 6306, - "charLength": 209, - "snippet": { - "text": "# ── ContextManager.undo_last_turn ──────────────────────────────────────────\n\nclass TestUndoLastTurn:\n def test_removes_assistant_and_user_messages(self):\n cm = ContextManager(config=_make_config())" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ec130f5dfbc19713", - "equalIndicator/v1": "e379cae42dd0a787659bb464b8e760af6745768d294f8de9fa4bdfa8f0381f07" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 188, - "startColumn": 7, - "charOffset": 7856, - "charLength": 23, - "snippet": { - "text": "TestToAnthropicMessages" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 186, - "startColumn": 1, - "charOffset": 7848, - "charLength": 97, - "snippet": { - "text": "\n\nclass TestToAnthropicMessages:\n def test_separates_system_prompt(self):\n messages = [" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "2c34718393be9a60", - "equalIndicator/v1": "e8a1c31f1f8c27ec16cbaa49feb21d19526de1a25355ee34924c0ff4cd390ee6" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_auth.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 26, - "startColumn": 7, - "charOffset": 524, - "charLength": 16, - "snippet": { - "text": "TestHashPassword" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 24, - "startColumn": 1, - "charOffset": 439, - "charLength": 192, - "snippet": { - "text": "# ── hash_password ──────────────────────────────────────────────────────────\n\nclass TestHashPassword:\n def test_returns_valid_bcrypt_hash(self):\n hashed = hash_password(\"my_secret\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "6649e044231d5cde", - "equalIndicator/v1": "e8f18466796d1527801c4f427c0c6069885f84a20bb5a3421c6cfad74042d40b" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/sandbox/interface.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 10, - "startColumn": 7, - "charOffset": 195, - "charLength": 15, - "snippet": { - "text": "ExecutionResult" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 8, - "startColumn": 1, - "charOffset": 177, - "charLength": 91, - "snippet": { - "text": "\n@dataclass\nclass ExecutionResult:\n \"\"\"Result of a command execution.\"\"\"\n output: str" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "73ac2f2c2dd2a42f", - "equalIndicator/v1": "ea9e2ca3fdfa355ef17d1421bad005bc7ce3ec5da79238bb8ee1fa0379d115db" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_auth.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 58, - "startColumn": 7, - "charOffset": 1709, - "charLength": 21, - "snippet": { - "text": "TestCreateAccessToken" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 56, - "startColumn": 1, - "charOffset": 1624, - "charLength": 207, - "snippet": { - "text": "# ── create_access_token ────────────────────────────────────────────────────\n\nclass TestCreateAccessToken:\n def test_returns_string(self):\n token = create_access_token(user_id=1, username=\"alice\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4da4554a6593e6c1", - "equalIndicator/v1": "eb670aa19704eb857162315d45135176ee710eb6555a2fa431b34c363e2d9274" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 188, - "startColumn": 7, - "charOffset": 5661, - "charLength": 22, - "snippet": { - "text": "TestAgentEventPydantic" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 186, - "startColumn": 1, - "charOffset": 5653, - "charLength": 122, - "snippet": { - "text": "\n\nclass TestAgentEventPydantic:\n def test_valid(self):\n e = AgentEvent(event_type=\"status\", data={\"key\": \"val\"})" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "9075cf4bc19b9c37", - "equalIndicator/v1": "ec1b269ffbe7362f0a1c6942fed6f424be42dc2176cc53985be269421534a9ba" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_redis_pubsub.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 129, - "startColumn": 7, - "charOffset": 4641, - "charLength": 18, - "snippet": { - "text": "TestWaitForAnswers" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 127, - "startColumn": 1, - "charOffset": 4613, - "charLength": 165, - "snippet": { - "text": "\n@pytest.mark.asyncio\nclass TestWaitForAnswers:\n async def test_returns_answers_when_set(self):\n from openmlr.services.redis_pubsub import wait_for_answers" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "9e136db8b11d5c72", - "equalIndicator/v1": "ed1b43feb8965e204de29517554cef4e288db7fb051d870c6d857682d9eab349" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_context.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 85, - "startColumn": 7, - "charOffset": 2781, - "charLength": 15, - "snippet": { - "text": "TestGetMessages" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 83, - "startColumn": 1, - "charOffset": 2696, - "charLength": 198, - "snippet": { - "text": "# ── ContextManager.get_messages ────────────────────────────────────────────\n\nclass TestGetMessages:\n def test_returns_messages_in_order(self):\n cm = ContextManager(config=_make_config())" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "707d9712b32165f6", - "equalIndicator/v1": "f092d797a8604c40e9380cef1f273828f1d52bf30c5ae48b242fc59c56a484ef" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 324, - "startColumn": 7, - "charOffset": 12456, - "charLength": 17, - "snippet": { - "text": "TestStreamLLMCall" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 322, - "startColumn": 1, - "charOffset": 12448, - "charLength": 152, - "snippet": { - "text": "\n\nclass TestStreamLLMCall:\n async def test_returns_llm_result_from_chunks(self, mock_session):\n mock_session.is_cancelled.return_value = False" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "aabcaea4b70b5177", - "equalIndicator/v1": "f68ba8325f19a2511544f2d798c548960a11bf4d71c4792a2b7cc0ef0144580b" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_job_manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 18, - "startColumn": 7, - "charOffset": 484, - "charLength": 14, - "snippet": { - "text": "TestJobManager" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 16, - "startColumn": 1, - "charOffset": 476, - "charLength": 107, - "snippet": { - "text": "\n\nclass TestJobManager:\n async def test_get_job_manager_singleton(self):\n jm1 = get_job_manager()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "1b2c9ea8d931a413", - "equalIndicator/v1": "f87a7bc191cf361ff4a1040c1aca144d4f8facdf10f8c99c5d2e5c82f09d9e4b" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyClassHasNoInitInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Class has no __init__ method", - "markdown": "Class has no __init__ method" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 130, - "startColumn": 7, - "charOffset": 5659, - "charLength": 23, - "snippet": { - "text": "TestToolParamConversion" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 128, - "startColumn": 1, - "charOffset": 5651, - "charLength": 135, - "snippet": { - "text": "\n\nclass TestToolParamConversion:\n def test_openai_tool_param_none(self):\n assert LLMProvider._openai_tool_param(None) is None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "f46727b056b66037", - "equalIndicator/v1": "f8f1e9d1292ee40ab9c705a8c4451f98f187bf83caacaec06583af61645c9e28" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyInconsistentReturnsInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Missing return statement on some paths", - "markdown": "Missing return statement on some paths" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/plan.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 245, - "startColumn": 5, - "charOffset": 11025, - "charLength": 35, - "snippet": { - "text": "async with session_factory() as db:" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 243, - "startColumn": 1, - "charOffset": 10917, - "charLength": 260, - "snippet": { - "text": " \"\"\"Retrieve a stored report by ID. Used by the API.\"\"\"\n session_factory = _get_session_factory()\n async with session_factory() as db:\n resource = await ops.get_resource_by_id(db, report_id)\n return resource.content if resource else None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "8658eac78eaa5137", - "equalIndicator/v1": "decc8ef111e946f2051918663dcb62419dc60bc7efdabd7699fc3a26e96338d3" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "hasFixes": true, - "tags": ["Python"] - } - }, - { - "ruleId": "PyListCreationInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Multi-step list initialization can be replaced with a list literal", - "markdown": "Multi-step list initialization can be replaced with a list literal" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/compute_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 91, - "startColumn": 9, - "charOffset": 2910, - "charLength": 42, - "snippet": { - "text": "lines = [f\"## {node.name} Capabilities\\n\"]" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 89, - "startColumn": 1, - "charOffset": 2875, - "charLength": 199, - "snippet": { - "text": "\n # Format response\n lines = [f\"## {node.name} Capabilities\\n\"]\n lines.append(f\"Platform: {caps.platform}\")\n lines.append(f\"CPU: {caps.cpu_cores} cores ({caps.cpu_arch})\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "dede0ffae8de41c1", - "equalIndicator/v1": "50acaf8ed08817adda4ff8508a1e894bba662ea570745a97436584b4b6b07e6c" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "hasFixes": true, - "tags": ["Python"] - } - }, - { - "ruleId": "PyListCreationInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Multi-step list initialization can be replaced with a list literal", - "markdown": "Multi-step list initialization can be replaced with a list literal" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/compute_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 227, - "startColumn": 5, - "charOffset": 7707, - "charLength": 49, - "snippet": { - "text": "lines = [f\"## Recommended Compute for: {task}\\n\"]" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 225, - "startColumn": 1, - "charOffset": 7681, - "charLength": 203, - "snippet": { - "text": " best = scores[0]\n\n lines = [f\"## Recommended Compute for: {task}\\n\"]\n lines.append(f\"**Best choice: {best['node'].name}** ({best['node'].type})\")\n lines.append(f\"Score: {best['score']:.1f}\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "93a6c1a4bd96a83f", - "equalIndicator/v1": "70c98afaf23eea85f54b7536535fca22d61b554f35d9a8a386291f6db03a37e7" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "hasFixes": true, - "tags": ["Python"] - } - }, - { - "ruleId": "PyMethodMayBeStaticInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Method 'get_job_status' may be 'static'", - "markdown": "Method `get_job_status` may be 'static'" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/services/job_manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 73, - "startColumn": 15, - "charOffset": 2018, - "charLength": 14, - "snippet": { - "text": "get_job_status" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 71, - "startColumn": 1, - "charOffset": 1984, - "charLength": 89, - "snippet": { - "text": " return job\n\n async def get_job_status(\n self,\n db: AsyncSession," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "d9a354e0b762713c", - "equalIndicator/v1": "1c4e4aac04c36fdc7f4af537daf8ccae13c33aee982efd8321f8d680d58d9dfc" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyMethodMayBeStaticInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Method 'create_job' may be 'static'", - "markdown": "Method `create_job` may be 'static'" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/services/job_manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 31, - "startColumn": 15, - "charOffset": 855, - "charLength": 10, - "snippet": { - "text": "create_job" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 29, - "startColumn": 1, - "charOffset": 808, - "charLength": 98, - "snippet": { - "text": " return self._celery_app\n\n async def create_job(\n self,\n db: AsyncSession," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "c86e0467577d3a22", - "equalIndicator/v1": "45a25829c577c955ff8800d1d9edf3853cdcae2db57bf8439a11521b379ed95b" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyMethodMayBeStaticInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Method '_validate_local_config' may be 'static'", - "markdown": "Method `_validate_local_config` may be 'static'" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/compute/manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 35, - "startColumn": 9, - "charOffset": 1227, - "charLength": 22, - "snippet": { - "text": "_validate_local_config" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 33, - "startColumn": 1, - "charOffset": 1194, - "charLength": 160, - "snippet": { - "text": " return True, \"\"\n\n def _validate_local_config(self, config: dict) -> tuple[bool, str]:\n workdir = config.get(\"workdir\", \"\")\n if workdir:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "5a0445e5cc4d36e1", - "equalIndicator/v1": "8c80d090c64de0a33e1d22bf71e2bb6b838b90dba562b20a19b84ff7149733f3" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyMethodMayBeStaticInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Method '_validate_modal_config' may be 'static'", - "markdown": "Method `_validate_modal_config` may be 'static'" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/compute/manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 44, - "startColumn": 9, - "charOffset": 1634, - "charLength": 22, - "snippet": { - "text": "_validate_modal_config" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 42, - "startColumn": 1, - "charOffset": 1601, - "charLength": 121, - "snippet": { - "text": " return True, \"\"\n\n def _validate_modal_config(self, config: dict) -> tuple[bool, str]:\n return True, \"\"\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "90c16e35e413b85b", - "equalIndicator/v1": "ae337d5baefac57857e8d4071532a6083abd34fa83a6e3c74eaf09318ad9be91" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyMethodMayBeStaticInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Method 'get_active_jobs' may be 'static'", - "markdown": "Method `get_active_jobs` may be 'static'" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/services/job_manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 92, - "startColumn": 15, - "charOffset": 2653, - "charLength": 15, - "snippet": { - "text": "get_active_jobs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 90, - "startColumn": 1, - "charOffset": 2628, - "charLength": 81, - "snippet": { - "text": " }\n\n async def get_active_jobs(\n self,\n db: AsyncSession," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "eac7f87b180ea7a6", - "equalIndicator/v1": "b4691da1d1f7377320083645f877c4862310099688ddef20cc0236e0042c52b9" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyMethodMayBeStaticInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Method 'validate_key' may be 'static'", - "markdown": "Method `validate_key` may be 'static'" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/keys/manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 118, - "startColumn": 9, - "charOffset": 4832, - "charLength": 12, - "snippet": { - "text": "validate_key" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 116, - "startColumn": 1, - "charOffset": 4789, - "charLength": 208, - "snippet": { - "text": " return key_path, pub_path\n\n def validate_key(self, private_key_pem: str | bytes) -> dict:\n \"\"\"Validate an SSH private key and return metadata.\"\"\"\n if isinstance(private_key_pem, str):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "d0b086bd60833888", - "equalIndicator/v1": "c4e0c04218d69230be3173e188b5addd89fc52ff3c4160506659311b06321126" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyPep8NamingInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "CamelCase variable imported as constant", - "markdown": "CamelCase variable imported as constant" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 13, - "startColumn": 33, - "charOffset": 504, - "charLength": 2, - "snippet": { - "text": "ET" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 11, - "startColumn": 1, - "charOffset": 452, - "charLength": 90, - "snippet": { - "text": "import os\nimport re\nimport xml.etree.ElementTree as ET\n\nfrom ..agent.types import ToolSpec" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "65a30a02b495dc7e", - "equalIndicator/v1": "335a1742051f6afbc8375e6f290edc0e6f7bfff954abfd2a1d6603f51f041bce" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyPep8NamingInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Variable in function should be lowercase", - "markdown": "Variable in function should be lowercase" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/settings.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 335, - "startColumn": 5, - "charOffset": 13556, - "charLength": 16, - "snippet": { - "text": "ALLOWED_ENV_KEYS" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 333, - "startColumn": 1, - "charOffset": 13428, - "charLength": 203, - "snippet": { - "text": " \"\"\"Save API keys — both to user settings and to process env.\"\"\"\n # Whitelist of allowed environment variables to set\n ALLOWED_ENV_KEYS = {\n \"OPENAI_API_KEY\",\n \"ANTHROPIC_API_KEY\"," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "05c25051286c973f", - "equalIndicator/v1": "550bd8e53c7473742a597cdbf921c4ed7606f75471a7dc52d2cd5b8a8aab61c6" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyPep8NamingInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Function name should be lowercase", - "markdown": "Function name should be lowercase" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_doom_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 109, - "startColumn": 9, - "charOffset": 3793, - "charLength": 28, - "snippet": { - "text": "test_detects_ABC_ABC_pattern" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 107, - "startColumn": 1, - "charOffset": 3746, - "charLength": 153, - "snippet": { - "text": " assert \"write_file\" in result\n\n def test_detects_ABC_ABC_pattern(self):\n msgs = [\n _assistant_with_tool(\"read\", {\"p\": \"1\"})," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "7d5d39a7ed364f2a", - "equalIndicator/v1": "63243f9e2ed0a1bb623dbb38eb3359c33763a35d2d8459318501bc92ef8f03b2" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyPep8NamingInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Function name should be lowercase", - "markdown": "Function name should be lowercase" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_doom_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 97, - "startColumn": 9, - "charOffset": 3312, - "charLength": 26, - "snippet": { - "text": "test_detects_AB_AB_pattern" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 95, - "startColumn": 1, - "charOffset": 3273, - "charLength": 154, - "snippet": { - "text": "\nclass TestRepeatingSequences:\n def test_detects_AB_AB_pattern(self):\n msgs = [\n _assistant_with_tool(\"read_file\", {\"path\": \"a.py\"})," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "00aa0fea6a39a977", - "equalIndicator/v1": "752bf7c3059c146119c29242f124fc2b9bb8b43ef4c32bdced31351009765d8a" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _handle_approval of a module", - "markdown": "Access to a protected member _handle_approval of a module" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/agent.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 563, - "startColumn": 34, - "charOffset": 18965, - "charLength": 16, - "snippet": { - "text": "_handle_approval" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 561, - "startColumn": 1, - "charOffset": 18833, - "charLength": 258, - "snippet": { - "text": " active = _sm(request).get_current_session()\n if active and active.session.pending_approval:\n from ..agent.loop import _handle_approval\n asyncio.create_task(\n _handle_approval(active.session, active.tool_router, body.approvals)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "33c610764ee060e0", - "equalIndicator/v1": "029c6d7b769490976ee974239609c2782e721af912e80e79d1ed5ce1783bd8ca" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _set_outline of a class", - "markdown": "Access to a protected member _set_outline of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 13, - "startColumn": 5, - "charOffset": 272, - "charLength": 12, - "snippet": { - "text": "_set_outline" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 11, - "startColumn": 1, - "charOffset": 227, - "charLength": 103, - "snippet": { - "text": " _list_sections,\n _refine_section,\n _set_outline,\n _write_section,\n create_writing_tool," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "8b5010d46bdccfe3", - "equalIndicator/v1": "0822e3622d855beec39290b3dc58761ed507a4b522407f370afd23d5211fb992" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _run_agent of a class", - "markdown": "Access to a protected member _run_agent of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 14, - "startColumn": 5, - "charOffset": 344, - "charLength": 10, - "snippet": { - "text": "_run_agent" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 12, - "startColumn": 1, - "charOffset": 292, - "charLength": 96, - "snippet": { - "text": " _handle_approval,\n _non_stream_llm_call,\n _run_agent,\n _stream_llm_call,\n _undo," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "79b006be71710dd8", - "equalIndicator/v1": "10be07a75986edf946609a7a9ffdb4b194423ffb33624b4674ad75da66192043" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _increment_budget of a class", - "markdown": "Access to a protected member _increment_budget of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 9, - "startColumn": 5, - "charOffset": 181, - "charLength": 17, - "snippet": { - "text": "_increment_budget" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 7, - "startColumn": 1, - "charOffset": 132, - "charLength": 115, - "snippet": { - "text": " _extract_arxiv_id,\n _get_budget_info,\n _increment_budget,\n _reconstruct_abstract,\n _to_openalex_id," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "efb34a5684343aab", - "equalIndicator/v1": "11f27f8075caf60c72e3a544ea14b5f8010d2b12a55230458e5d3737ac7677ff" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _persist_wired of a class", - "markdown": "Access to a protected member _persist_wired of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/agent.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 411, - "startColumn": 12, - "charOffset": 13589, - "charLength": 21, - "snippet": { - "text": "active._persist_wired" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 409, - "startColumn": 1, - "charOffset": 13534, - "charLength": 161, - "snippet": { - "text": "\n # Wire DB persistence once per session\n if not active._persist_wired:\n _wire_persistence(active, db, conv.id)\n active._persist_wired = True" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "250bd0a5b5afd549", - "equalIndicator/v1": "123cfce0bde6d67a9f4ab68e41957b61f99077a624b772a0edaf8546979918e4" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _worker_engine of a module", - "markdown": "Access to a protected member _worker_engine of a module" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 19, - "startColumn": 29, - "charOffset": 515, - "charLength": 14, - "snippet": { - "text": "_worker_engine" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 17, - "startColumn": 1, - "charOffset": 386, - "charLength": 217, - "snippet": { - "text": "def _get_session_factory():\n \"\"\"Get the correct async session factory for the current context.\"\"\"\n from ..db.engine import _worker_engine, async_session\n eng = _worker_engine.get(None)\n if eng is not None:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "86cd61bd6c835445", - "equalIndicator/v1": "16ed527601371f603428cee3b54119e0cca1af1c0d675fd4ac723bde544c43d5" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _handle_write of a class", - "markdown": "Access to a protected member _handle_write of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_local.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 13, - "startColumn": 5, - "charOffset": 242, - "charLength": 13, - "snippet": { - "text": "_handle_write" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 11, - "startColumn": 1, - "charOffset": 202, - "charLength": 101, - "snippet": { - "text": " _handle_edit,\n _handle_read,\n _handle_write,\n _running_in_container,\n _validate_path," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "20a5c7b2ca4f5368", - "equalIndicator/v1": "19a1b0e43cf50fe38f1f43655fd0e53a6bff2f8ff681f2500f1d67875b58fed0" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _to_openalex_id of a class", - "markdown": "Access to a protected member _to_openalex_id of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 11, - "startColumn": 5, - "charOffset": 231, - "charLength": 15, - "snippet": { - "text": "_to_openalex_id" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 9, - "startColumn": 1, - "charOffset": 177, - "charLength": 96, - "snippet": { - "text": " _increment_budget,\n _reconstruct_abstract,\n _to_openalex_id,\n create_papers_tool,\n)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "9c590097b2dba5b8", - "equalIndicator/v1": "1b60f090acd8ee957887f644f97cbb5242ca6126b2eb0ffe2f7f698629edb4a5" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _validate_sync_path of a class", - "markdown": "Access to a protected member _validate_sync_path of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_compute.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 15, - "startColumn": 41, - "charOffset": 539, - "charLength": 19, - "snippet": { - "text": "_validate_sync_path" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 13, - "startColumn": 1, - "charOffset": 405, - "charLength": 224, - "snippet": { - "text": "from openmlr.keys.manager import KeyManager\nfrom openmlr.sandbox.ssh import SSHConnectionPool\nfrom openmlr.tools.compute_tools import _validate_sync_path\nfrom openmlr.tools.registry import MODE_TOOL_RESTRICTIONS, ToolRouter\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "92d158164872626e", - "equalIndicator/v1": "1c24b6f85c8161da2c4eec09555dc93e55dc31d5d58426811a5406770130832e" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _execute_research_tool of a class", - "markdown": "Access to a protected member _execute_research_tool of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_research.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 9, - "startColumn": 5, - "charOffset": 238, - "charLength": 22, - "snippet": { - "text": "_execute_research_tool" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 7, - "startColumn": 1, - "charOffset": 177, - "charLength": 140, - "snippet": { - "text": " MAX_RESEARCH_ITERATIONS,\n RESEARCH_SYSTEM_PROMPT,\n _execute_research_tool,\n _get_research_tool_specs,\n create_research_tool," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ab8ad12774fff67a", - "equalIndicator/v1": "1c880fe639cb2aec0c7c92c4401e3e2a4ec1a2b9cf98591cdd5db38e81cca3f2" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _worker_engine of a module", - "markdown": "Access to a protected member _worker_engine of a module" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/plan.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 17, - "startColumn": 29, - "charOffset": 483, - "charLength": 14, - "snippet": { - "text": "_worker_engine" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 15, - "startColumn": 1, - "charOffset": 338, - "charLength": 274, - "snippet": { - "text": "def _get_session_factory():\n \"\"\"Get the correct async session factory for the current context (web or worker).\"\"\"\n from ..db.engine import _worker_engine, async_session\n # If we're in a Celery worker context, use the worker engine\n eng = _worker_engine.get(None)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "a627df2250f57863", - "equalIndicator/v1": "1d3a810680aec8dc0bae579cbccfa667ffb43781446e872c2f7de7354a2825ca" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _handle_probe of a class", - "markdown": "Access to a protected member _handle_probe of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_sandbox.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 5, - "startColumn": 41, - "charOffset": 122, - "charLength": 13, - "snippet": { - "text": "_handle_probe" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 3, - "startColumn": 1, - "charOffset": 67, - "charLength": 124, - "snippet": { - "text": "import pytest\n\nfrom openmlr.tools.sandbox_tools import _handle_probe, create_sandbox_tools\n\npytestmark = pytest.mark.asyncio" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "a2bc2860d5182245", - "equalIndicator/v1": "20fe62bde2b15b005b36d079bf6b5ea6edff7ceaef98225a4a35d17425528ae6" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _create_project of a class", - "markdown": "Access to a protected member _create_project of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 8, - "startColumn": 5, - "charOffset": 168, - "charLength": 15, - "snippet": { - "text": "_create_project" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 6, - "startColumn": 1, - "charOffset": 124, - "charLength": 102, - "snippet": { - "text": " _add_citation,\n _count_sections,\n _create_project,\n _get_draft,\n _get_draft_from_proj," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "be7c1ed2d02b8a3f", - "equalIndicator/v1": "2396454facd31d8d545506fdf9e519d91fbac112b18ee72327f71e97a748c6e5" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _stream_llm_call of a class", - "markdown": "Access to a protected member _stream_llm_call of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 15, - "startColumn": 5, - "charOffset": 360, - "charLength": 16, - "snippet": { - "text": "_stream_llm_call" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 13, - "startColumn": 1, - "charOffset": 314, - "charLength": 94, - "snippet": { - "text": " _non_stream_llm_call,\n _run_agent,\n _stream_llm_call,\n _undo,\n run_agent_turn," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "5cc969c7d22ac31f", - "equalIndicator/v1": "3210d02a03c7c6486824bf5efc024e00abfad2e98fd97ed948a56cd335598edf" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _sftp of a class", - "markdown": "Access to a protected member _sftp of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/compute_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 380, - "startColumn": 25, - "charOffset": 13744, - "charLength": 17, - "snippet": { - "text": "ssh_sandbox._sftp" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 378, - "startColumn": 1, - "charOffset": 13634, - "charLength": 223, - "snippet": { - "text": " def _do_get(rpath=rp):\n buf = io.BytesIO()\n ssh_sandbox._sftp.getfo(rpath, buf)\n buf.seek(0)\n return buf.read()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "a54d853178b54a84", - "equalIndicator/v1": "3b4283b844297ca6187728e2015f7d714563e8c0409c103bc77c12f57b529d78" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "hasFixes": true, - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _write_section of a class", - "markdown": "Access to a protected member _write_section of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 14, - "startColumn": 5, - "charOffset": 290, - "charLength": 14, - "snippet": { - "text": "_write_section" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 12, - "startColumn": 1, - "charOffset": 247, - "charLength": 85, - "snippet": { - "text": " _refine_section,\n _set_outline,\n _write_section,\n create_writing_tool,\n)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "7f171bd0c8b52eae", - "equalIndicator/v1": "467ff7ed90348285c4f8d007f5a0bc135b42613dbd55f091b310d1ea04ffb9ae" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _get_budget_info of a class", - "markdown": "Access to a protected member _get_budget_info of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 8, - "startColumn": 5, - "charOffset": 159, - "charLength": 16, - "snippet": { - "text": "_get_budget_info" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 6, - "startColumn": 1, - "charOffset": 113, - "charLength": 113, - "snippet": { - "text": " _check_budget,\n _extract_arxiv_id,\n _get_budget_info,\n _increment_budget,\n _reconstruct_abstract," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "b88f0ec42374633a", - "equalIndicator/v1": "49dd99fcfa7148eed9ffdbf5af0f1c3438ea40ee0827cdbb3d18cda7a264d62a" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _sftp of a class", - "markdown": "Access to a protected member _sftp of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/compute_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 314, - "startColumn": 50, - "charOffset": 11344, - "charLength": 17, - "snippet": { - "text": "ssh_sandbox._sftp" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 312, - "startColumn": 1, - "charOffset": 11196, - "charLength": 248, - "snippet": { - "text": " content = local_path.read_bytes()\n await asyncio.to_thread(\n lambda d=dst, c=content: ssh_sandbox._sftp.putfo(io.BytesIO(c), d)\n )\n transferred += 1" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "c26fe90ae8bdb1f6", - "equalIndicator/v1": "4eb7b321385a2d3a68535a312eb9ed4efa96a57b482a52e83e18d82545dc384c" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "hasFixes": true, - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _handle_read of a class", - "markdown": "Access to a protected member _handle_read of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_local.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 12, - "startColumn": 5, - "charOffset": 224, - "charLength": 12, - "snippet": { - "text": "_handle_read" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 10, - "startColumn": 1, - "charOffset": 184, - "charLength": 99, - "snippet": { - "text": " DOCKER_IMAGE,\n _handle_edit,\n _handle_read,\n _handle_write,\n _running_in_container," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "8c7e3572984e8d5e", - "equalIndicator/v1": "595bcc0f84a4ee87efc794bfb16defeea104021ecfd096fc1ceab38f50bdd489" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _non_stream_llm_call of a class", - "markdown": "Access to a protected member _non_stream_llm_call of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 13, - "startColumn": 5, - "charOffset": 318, - "charLength": 20, - "snippet": { - "text": "_non_stream_llm_call" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 11, - "startColumn": 1, - "charOffset": 273, - "charLength": 104, - "snippet": { - "text": " _execute_tool,\n _handle_approval,\n _non_stream_llm_call,\n _run_agent,\n _stream_llm_call," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "c939c614bee5ac8c", - "equalIndicator/v1": "5a8f3f72b2c4aa6d3c886414d9d28ff5e89a78e30927433d3e9363a728215b72" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _compact_llm_call of a class", - "markdown": "Access to a protected member _compact_llm_call of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 10, - "startColumn": 5, - "charOffset": 254, - "charLength": 17, - "snippet": { - "text": "_compact_llm_call" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 8, - "startColumn": 1, - "charOffset": 203, - "charLength": 110, - "snippet": { - "text": "from openmlr.agent.loop import (\n _compact,\n _compact_llm_call,\n _execute_tool,\n _handle_approval," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "814989e39323cabb", - "equalIndicator/v1": "5cdb5ec4aaeec32ed483260abaf7a689dabd75341220be6e2f7fca9e651bf187" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _refine_section of a class", - "markdown": "Access to a protected member _refine_section of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 12, - "startColumn": 5, - "charOffset": 251, - "charLength": 15, - "snippet": { - "text": "_refine_section" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 10, - "startColumn": 1, - "charOffset": 201, - "charLength": 104, - "snippet": { - "text": " _get_draft_from_proj,\n _list_sections,\n _refine_section,\n _set_outline,\n _write_section," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "b597cecffb3410f5", - "equalIndicator/v1": "5e844d48609810cf8f7d7889bbf17a6957627a299a799ea200e8c4b9e3b569c9" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _handle_approval of a class", - "markdown": "Access to a protected member _handle_approval of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 12, - "startColumn": 5, - "charOffset": 296, - "charLength": 16, - "snippet": { - "text": "_handle_approval" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 10, - "startColumn": 1, - "charOffset": 250, - "charLength": 105, - "snippet": { - "text": " _compact_llm_call,\n _execute_tool,\n _handle_approval,\n _non_stream_llm_call,\n _run_agent," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "610be1aa44b6327b", - "equalIndicator/v1": "5eda583fef44785d75af1f726140dcfc65dfccd453f8f6a6787b9fcb05b0c8e2" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _handle_edit of a class", - "markdown": "Access to a protected member _handle_edit of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_local.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 11, - "startColumn": 5, - "charOffset": 206, - "charLength": 12, - "snippet": { - "text": "_handle_edit" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 9, - "startColumn": 1, - "charOffset": 162, - "charLength": 94, - "snippet": { - "text": " CONTAINER_PREFIX,\n DOCKER_IMAGE,\n _handle_edit,\n _handle_read,\n _handle_write," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "2a571418b7318e88", - "equalIndicator/v1": "69928671d0630c0d3e4856f4a6167793b51cf395862f6a6c0d9bb45c0bc92080" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _get_draft of a class", - "markdown": "Access to a protected member _get_draft of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 9, - "startColumn": 5, - "charOffset": 189, - "charLength": 10, - "snippet": { - "text": "_get_draft" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 7, - "startColumn": 1, - "charOffset": 143, - "charLength": 103, - "snippet": { - "text": " _count_sections,\n _create_project,\n _get_draft,\n _get_draft_from_proj,\n _list_sections," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "e9db5de7a61471e8", - "equalIndicator/v1": "6aa991d82c1b1a61666d14ad545fa261982be6d54b332b18a996e1d7f19c7f9b" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _list_sections of a class", - "markdown": "Access to a protected member _list_sections of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 11, - "startColumn": 5, - "charOffset": 231, - "charLength": 14, - "snippet": { - "text": "_list_sections" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 9, - "startColumn": 1, - "charOffset": 185, - "charLength": 100, - "snippet": { - "text": " _get_draft,\n _get_draft_from_proj,\n _list_sections,\n _refine_section,\n _set_outline," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "65a14807bfa8f8ff", - "equalIndicator/v1": "6b3d2baa932e50d5c500f91c8f7f625f7ca3505cae2f558977b7d395c9d5a4c7" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _compact of a module", - "markdown": "Access to a protected member _compact of a module" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/agent.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 583, - "startColumn": 34, - "charOffset": 19586, - "charLength": 8, - "snippet": { - "text": "_compact" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 581, - "startColumn": 1, - "charOffset": 19490, - "charLength": 167, - "snippet": { - "text": " active = _sm(request).get_current_session()\n if active:\n from ..agent.loop import _compact\n await _compact(active.session)\n return {\"ok\": True}" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "09a1559a4a2c9204", - "equalIndicator/v1": "73673f38330788c21a18fad981a0c07cdb7ea51db502fd504c7167a185ff53ca" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _reconstruct_abstract of a class", - "markdown": "Access to a protected member _reconstruct_abstract of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 10, - "startColumn": 5, - "charOffset": 204, - "charLength": 21, - "snippet": { - "text": "_reconstruct_abstract" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 8, - "startColumn": 1, - "charOffset": 155, - "charLength": 116, - "snippet": { - "text": " _get_budget_info,\n _increment_budget,\n _reconstruct_abstract,\n _to_openalex_id,\n create_papers_tool," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "cbf6b11603916181", - "equalIndicator/v1": "83b69cfa29f70c0f1f35a9f7d04a94c04c12265db3451904413c7026996155a0" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _check_budget of a class", - "markdown": "Access to a protected member _check_budget of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 6, - "startColumn": 5, - "charOffset": 117, - "charLength": 13, - "snippet": { - "text": "_check_budget" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 4, - "startColumn": 1, - "charOffset": 77, - "charLength": 99, - "snippet": { - "text": "\nfrom openmlr.tools.papers import (\n _check_budget,\n _extract_arxiv_id,\n _get_budget_info," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "e270d5174b690e96", - "equalIndicator/v1": "87a9dd1025dff19a658896923fb9e5e0df4dc2ccce915eaa935f64a54242e6fb" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _running_in_container of a class", - "markdown": "Access to a protected member _running_in_container of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_local.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 14, - "startColumn": 5, - "charOffset": 261, - "charLength": 21, - "snippet": { - "text": "_running_in_container" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 12, - "startColumn": 1, - "charOffset": 220, - "charLength": 107, - "snippet": { - "text": " _handle_read,\n _handle_write,\n _running_in_container,\n _validate_path,\n create_local_tools," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "2158d086ab0af087", - "equalIndicator/v1": "958c0c0a979d63dd5dfb6f0e882bab4e0fadf3d850480666bfcb3cdffbcd3d3f" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _count_sections of a class", - "markdown": "Access to a protected member _count_sections of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 7, - "startColumn": 5, - "charOffset": 147, - "charLength": 15, - "snippet": { - "text": "_count_sections" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 5, - "startColumn": 1, - "charOffset": 88, - "charLength": 112, - "snippet": { - "text": "from openmlr.tools.writing import (\n _add_citation,\n _count_sections,\n _create_project,\n _get_draft," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "7dab8f5f31471ade", - "equalIndicator/v1": "a9c16576b1674507d3fb5fa4570580a1856080ddcd9ab05f73cf70cbc3ed2033" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _undo of a class", - "markdown": "Access to a protected member _undo of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 16, - "startColumn": 5, - "charOffset": 382, - "charLength": 5, - "snippet": { - "text": "_undo" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 14, - "startColumn": 1, - "charOffset": 340, - "charLength": 89, - "snippet": { - "text": " _run_agent,\n _stream_llm_call,\n _undo,\n run_agent_turn,\n submission_loop," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "e1af99678fb85630", - "equalIndicator/v1": "abefde98bc26732db3ff6ff29ab8ff758bdc4bf00847bab1b96e04672d2496e8" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _sftp of a class", - "markdown": "Access to a protected member _sftp of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/compute_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 403, - "startColumn": 29, - "charOffset": 14931, - "charLength": 17, - "snippet": { - "text": "ssh_sandbox._sftp" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 401, - "startColumn": 1, - "charOffset": 14804, - "charLength": 248, - "snippet": { - "text": " def _do_get_file(rpath=rf):\n buf = io.BytesIO()\n ssh_sandbox._sftp.getfo(rpath, buf)\n buf.seek(0)\n return buf.read()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "29457a4c45815f92", - "equalIndicator/v1": "ada7329b7c4591154baa120db38fc9f6eda741bfeaaace66053ca740e2581f4c" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "hasFixes": true, - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _get_research_tool_specs of a class", - "markdown": "Access to a protected member _get_research_tool_specs of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_research.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 10, - "startColumn": 5, - "charOffset": 266, - "charLength": 24, - "snippet": { - "text": "_get_research_tool_specs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 8, - "startColumn": 1, - "charOffset": 206, - "charLength": 113, - "snippet": { - "text": " RESEARCH_SYSTEM_PROMPT,\n _execute_research_tool,\n _get_research_tool_specs,\n create_research_tool,\n)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "9a2fc58f97aa4b82", - "equalIndicator/v1": "b564eb2ca289b72eb20ce59684bc60b6e82863c139e21d393c819c1681c1d662" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _undo of a module", - "markdown": "Access to a protected member _undo of a module" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/agent.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 574, - "startColumn": 34, - "charOffset": 19320, - "charLength": 5, - "snippet": { - "text": "_undo" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 572, - "startColumn": 1, - "charOffset": 19224, - "charLength": 161, - "snippet": { - "text": " active = _sm(request).get_current_session()\n if active:\n from ..agent.loop import _undo\n await _undo(active.session)\n return {\"ok\": True}" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "fa35e132190af4e2", - "equalIndicator/v1": "ba3665c52ec2c0d88f8786e830dd94c4f6811eacf1791698454a466ec637b117" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _execute_tool of a class", - "markdown": "Access to a protected member _execute_tool of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 11, - "startColumn": 5, - "charOffset": 277, - "charLength": 13, - "snippet": { - "text": "_execute_tool" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 9, - "startColumn": 1, - "charOffset": 236, - "charLength": 103, - "snippet": { - "text": " _compact,\n _compact_llm_call,\n _execute_tool,\n _handle_approval,\n _non_stream_llm_call," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ed0aa915af94e16f", - "equalIndicator/v1": "ce769da3ee3dc1bcd57e5576c5506da606f1b9f3934dad6f1e9eb787bc15a89e" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _compact of a class", - "markdown": "Access to a protected member _compact of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 9, - "startColumn": 5, - "charOffset": 240, - "charLength": 8, - "snippet": { - "text": "_compact" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 7, - "startColumn": 1, - "charOffset": 154, - "charLength": 137, - "snippet": { - "text": "from openmlr.agent.context import ContextManager\nfrom openmlr.agent.loop import (\n _compact,\n _compact_llm_call,\n _execute_tool," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "f8ccb1233321aa55", - "equalIndicator/v1": "d0eafe9207795d694446c69609f4d2030f19a502dbdb70cbe8d2eaf1c3d2c9bc" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _headers of a class", - "markdown": "Access to a protected member _headers of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_github.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 5, - "startColumn": 34, - "charOffset": 113, - "charLength": 8, - "snippet": { - "text": "_headers" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 3, - "startColumn": 1, - "charOffset": 65, - "charLength": 111, - "snippet": { - "text": "import pytest\n\nfrom openmlr.tools.github import _headers, create_github_tools\n\npytestmark = pytest.mark.asyncio" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "cea379236fd8f01c", - "equalIndicator/v1": "d45c6492240c122c1fe86962df1a13ef55e71b7b5650170e5d69e581f98f1395" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _validate_path of a class", - "markdown": "Access to a protected member _validate_path of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_local.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 15, - "startColumn": 5, - "charOffset": 288, - "charLength": 14, - "snippet": { - "text": "_validate_path" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 13, - "startColumn": 1, - "charOffset": 238, - "charLength": 91, - "snippet": { - "text": " _handle_write,\n _running_in_container,\n _validate_path,\n create_local_tools,\n)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "75cf2380c87f9ebe", - "equalIndicator/v1": "d8449bc750f9f72e8813b662caf881092ef5f8a6fe1509282dd5d2b5434b788b" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _add_citation of a class", - "markdown": "Access to a protected member _add_citation of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 6, - "startColumn": 5, - "charOffset": 128, - "charLength": 13, - "snippet": { - "text": "_add_citation" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 4, - "startColumn": 1, - "charOffset": 87, - "charLength": 97, - "snippet": { - "text": "\nfrom openmlr.tools.writing import (\n _add_citation,\n _count_sections,\n _create_project," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "2d1f3d034a5ec9eb", - "equalIndicator/v1": "e983b3eb058fd841a5f4b7acd3b94c62086f3625be0149b3b9a5112cfaed79ce" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _extract_arxiv_id of a class", - "markdown": "Access to a protected member _extract_arxiv_id of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 7, - "startColumn": 5, - "charOffset": 136, - "charLength": 17, - "snippet": { - "text": "_extract_arxiv_id" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 5, - "startColumn": 1, - "charOffset": 78, - "charLength": 121, - "snippet": { - "text": "from openmlr.tools.papers import (\n _check_budget,\n _extract_arxiv_id,\n _get_budget_info,\n _increment_budget," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "041051766a3bb4dc", - "equalIndicator/v1": "f0d380d73cea3ab3ab653bd7cb6f3acdf2ce7bdc68fe4abac3539d0903479b43" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _get_draft_from_proj of a class", - "markdown": "Access to a protected member _get_draft_from_proj of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 10, - "startColumn": 5, - "charOffset": 205, - "charLength": 20, - "snippet": { - "text": "_get_draft_from_proj" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 8, - "startColumn": 1, - "charOffset": 164, - "charLength": 103, - "snippet": { - "text": " _create_project,\n _get_draft,\n _get_draft_from_proj,\n _list_sections,\n _refine_section," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "f6362b2076088315", - "equalIndicator/v1": "f6693a6d92cfac80205fdf5889ab021d4cc1787af5d881d89305fac991dd1db6" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyProtectedMemberInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Access to a protected member _sftp of a class", - "markdown": "Access to a protected member _sftp of a class" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/compute_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 304, - "startColumn": 58, - "charOffset": 10815, - "charLength": 17, - "snippet": { - "text": "ssh_sandbox._sftp" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 302, - "startColumn": 1, - "charOffset": 10650, - "charLength": 281, - "snippet": { - "text": " content = src.read_bytes()\n await asyncio.to_thread(\n lambda d=dst, c=content: ssh_sandbox._sftp.putfo(io.BytesIO(c), d)\n )\n transferred += 1" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "47047d5e73bfc55f", - "equalIndicator/v1": "fc0b1295a9d33647f6d0b812e221e290aafba3cb3458225ea1c056b2532a2e50" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "hasFixes": true, - "tags": ["Python"] - } - }, - { - "ruleId": "PyShadowingNamesInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Shadows name 'db' from outer scope", - "markdown": "Shadows name 'db' from outer scope" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tasks/agent_tasks.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 142, - "startColumn": 44, - "charOffset": 4454, - "charLength": 2, - "snippet": { - "text": "db" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 140, - "startColumn": 1, - "charOffset": 4253, - "charLength": 355, - "snippet": { - "text": " await ops.add_message(db, conversation_id, \"assistant\", event.data[\"content\"])\n elif event.event_type == \"tool_output\" and event.data:\n async with worker_session() as db:\n await ops.add_message(db, conversation_id, \"tool\", event.data.get(\"output\", \"\"), {\n \"tool\": event.data.get(\"tool\")," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "95e0d53b110b5521", - "equalIndicator/v1": "0d3c8a77515041618029d7e10fa8eef965eb5eed3dc32bb87f07ba4274e12340" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyShadowingNamesInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Shadows name 'payload' from outer scope", - "markdown": "Shadows name 'payload' from outer scope" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/agent.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 53, - "startColumn": 21, - "charOffset": 1691, - "charLength": 7, - "snippet": { - "text": "payload" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 51, - "startColumn": 1, - "charOffset": 1510, - "charLength": 294, - "snippet": { - "text": " event = await asyncio.wait_for(queue.get(), timeout=25)\n event.get(\"event_type\", \"?\") if isinstance(event, dict) else \"?\"\n payload = f\"data: {json.dumps(event)}\\n\\n\"\n yield payload\n except TimeoutError:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "e87d8d5cabfdfebb", - "equalIndicator/v1": "3e41d200d03a37e1769024fce6dbc9a3b8824e587b5a6695396088a8c68b9365" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyShadowingNamesInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Shadows name 'e' from outer scope", - "markdown": "Shadows name 'e' from outer scope" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/compute.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 326, - "startColumn": 45, - "charOffset": 10196, - "charLength": 1, - "snippet": { - "text": "e" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 324, - "startColumn": 1, - "charOffset": 10086, - "charLength": 271, - "snippet": { - "text": " try:\n client.connect(**connect_kwargs)\n except paramiko.SSHException as e:\n # If host key is unknown, paramiko raises an exception with WarningPolicy\n # We need to extract the host key from the transport" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "3891351b8401a198", - "equalIndicator/v1": "4f830b001584b06ca9f8b377fee8429444dca3c5159895605d1573002d8efba4" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyShadowingNamesInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Shadows name 'e' from outer scope", - "markdown": "Shadows name 'e' from outer scope" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tasks/agent_tasks.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 165, - "startColumn": 29, - "charOffset": 5473, - "charLength": 1, - "snippet": { - "text": "e" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 163, - "startColumn": 1, - "charOffset": 5389, - "charLength": 144, - "snippet": { - "text": " except asyncio.CancelledError:\n pass\n except Exception as e:\n logger.warning(f\"Interrupt poll error: {e}\")\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "980ccb868301eaae", - "equalIndicator/v1": "5648291cfca166c756230d21024c223949de0375f0debc9151808fad55fad031" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyShadowingNamesInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Shadows name 'p' from outer scope", - "markdown": "Shadows name 'p' from outer scope" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 883, - "startColumn": 28, - "charOffset": 31967, - "charLength": 1, - "snippet": { - "text": "p" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 881, - "startColumn": 1, - "charOffset": 31910, - "charLength": 129, - "snippet": { - "text": "\n # Sort by citation count\n papers.sort(key=lambda p: p.get(\"citationCount\", 0), reverse=True)\n papers = papers[:limit]\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "a5edfdd62f563b04", - "equalIndicator/v1": "76e1810bbfe78479a4b6fe3ea12c6698952af5fedb2eea1b4ffbaee56d4542ae" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyShadowingNamesInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Shadows name 'db' from outer scope", - "markdown": "Shadows name 'db' from outer scope" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tasks/agent_tasks.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 139, - "startColumn": 44, - "charOffset": 4249, - "charLength": 2, - "snippet": { - "text": "db" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 137, - "startColumn": 1, - "charOffset": 4070, - "charLength": 340, - "snippet": { - "text": " # Persist assistant messages and tool outputs\n if event.event_type == \"assistant_message\" and event.data.get(\"content\"):\n async with worker_session() as db:\n await ops.add_message(db, conversation_id, \"assistant\", event.data[\"content\"])\n elif event.event_type == \"tool_output\" and event.data:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "5a3310eb08a88625", - "equalIndicator/v1": "9c49fc0fb0d0fb91cf2ceb015a57e87baed721443ca6404fa897a82f14fdda38" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyShadowingNamesInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Shadows name 'actual_fp' from outer scope", - "markdown": "Shadows name 'actual_fp' from outer scope" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/sandbox/ssh.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 212, - "startColumn": 21, - "charOffset": 7602, - "charLength": 9, - "snippet": { - "text": "actual_fp" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 210, - "startColumn": 1, - "charOffset": 7488, - "charLength": 204, - "snippet": { - "text": " remote_key = transport.get_remote_server_key()\n if remote_key:\n actual_fp = remote_key.get_fingerprint().hex()\n\n return client, sftp, actual_fp" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "a37de2f931ba8e37", - "equalIndicator/v1": "b7d7643faca98226b9b16de3dafda242938c93c831874285f603636bde2ee047" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyShadowingNamesInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Shadows name 'app' from outer scope", - "markdown": "Shadows name 'app' from outer scope" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/app.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 22, - "startColumn": 20, - "charOffset": 628, - "charLength": 3, - "snippet": { - "text": "app" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 20, - "startColumn": 1, - "charOffset": 587, - "charLength": 153, - "snippet": { - "text": "\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n \"\"\"Startup: create tables & shared state. Shutdown: teardown sessions.\"\"\"\n import logging" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "76e7878b5a6c40e8", - "equalIndicator/v1": "d87d1d5dc203783e702bbc26b15fc9358c26d2975aa8be2caa0484237850ae38" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyShadowingNamesInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Shadows name 'actual_fp' from outer scope", - "markdown": "Shadows name 'actual_fp' from outer scope" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/sandbox/ssh.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 207, - "startColumn": 13, - "charOffset": 7398, - "charLength": 9, - "snippet": { - "text": "actual_fp" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 205, - "startColumn": 1, - "charOffset": 7347, - "charLength": 140, - "snippet": { - "text": " sftp = client.open_sftp()\n\n actual_fp = None\n transport = client.get_transport()\n if transport:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "f36753ec4fc3771c", - "equalIndicator/v1": "e48cddbad1dbb501dcac8678d916fa5d10712402a014dabf36af1b0411b04ec8" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyShadowingNamesInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Shadows name 'exit_code' from outer scope", - "markdown": "Shadows name 'exit_code' from outer scope" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/sandbox/ssh.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 271, - "startColumn": 13, - "charOffset": 9921, - "charLength": 9, - "snippet": { - "text": "exit_code" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 269, - "startColumn": 1, - "charOffset": 9867, - "charLength": 158, - "snippet": { - "text": " on_chunk(data, True)\n\n exit_code = channel.recv_exit_status()\n return \"\".join(out_buf), \"\".join(err_buf), exit_code\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "d2ba4313d9e0196f", - "equalIndicator/v1": "eb1bd95d722dc2948424527a52fc9c7ca8cc835a906c40e056eb0050edddfd82" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/keys/manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 46, - "startColumn": 57, - "charOffset": 1673, - "charLength": 11, - "snippet": { - "text": "str | bytes" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 44, - "startColumn": 1, - "charOffset": 1576, - "charLength": 234, - "snippet": { - "text": " return self.keys_dir / filename\n\n def write_key(self, filename: str, private_key_pem: str | bytes) -> Path:\n \"\"\"Write a private key to disk with restrictive permissions.\"\"\"\n key_path = self.keys_dir / filename" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "67af1d5f99bed54b", - "equalIndicator/v1": "04953a3cd68293c212525b8110e3f2b5d1b8e56e6b90932f60345d856f23717a" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 919, - "startColumn": 37, - "charOffset": 33190, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 917, - "startColumn": 1, - "charOffset": 33152, - "charLength": 121, - "snippet": { - "text": "\n\ndef _extract_arxiv_id(text: str) -> str | None:\n match = re.search(r'(\\d{4}\\.\\d{4,5}(?:v\\d+)?)', text)\n if match:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "1c2065f0b61ab4de", - "equalIndicator/v1": "070e08021495e9399c8c36712e5e2e0f2e685806be778af320bfa08115960147" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/mcp.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 136, - "startColumn": 16, - "charOffset": 4543, - "charLength": 15, - "snippet": { - "text": "set[str] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 134, - "startColumn": 1, - "charOffset": 4488, - "charLength": 96, - "snippet": { - "text": " mcp_configs: dict,\n tool_router,\n blocklist: set[str] | None = None,\n) -> int:\n \"\"\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "5096ff1eaaa7dce7", - "equalIndicator/v1": "0dab9db74e0bf84e35ff8da2ca492fa885ac526c555aba12fa7f1331c0bdf78d" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/context.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 112, - "startColumn": 42, - "charOffset": 4360, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 110, - "startColumn": 1, - "charOffset": 4299, - "charLength": 165, - "snippet": { - "text": " i += 1\n\n async def compact(self, llm_call) -> str | None:\n if len(self.messages) <= self.config.untouched_messages + 3:\n return None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4f334b5580b49595", - "equalIndicator/v1": "0f768236304b348aa2f76da357a3a2ec825d0972a3071bfdc4f69f7c40de5ec3" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/registry.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 51, - "startColumn": 36, - "charOffset": 1822, - "charLength": 10, - "snippet": { - "text": "int | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 49, - "startColumn": 1, - "charOffset": 1762, - "charLength": 206, - "snippet": { - "text": " self._db = None\n\n def set_context(self, user_id: int | None = None, db=None) -> None:\n \"\"\"Set per-request context (user_id, db) for tools that need them.\"\"\"\n self._user_id = user_id" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "fdf344aef20d11bb", - "equalIndicator/v1": "10dbdc3c57b71c1063eaaa1b57834f85eb032054bb8aba096422fb870a05e3dc" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 31, - "startColumn": 42, - "charOffset": 964, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 29, - "startColumn": 1, - "charOffset": 921, - "charLength": 138, - "snippet": { - "text": "\n\nasync def _load_project(conv_id: int) -> dict | None:\n \"\"\"Load project from DB if not already cached.\"\"\"\n if conv_id in _projects:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "c30ed9bfee4ca784", - "equalIndicator/v1": "138e022a238cff0775ab319aa0454daf0ff221e5b411a8e9429fe96221ce69b5" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/sandbox/ssh.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 76, - "startColumn": 83, - "charOffset": 2566, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 74, - "startColumn": 1, - "charOffset": 2463, - "charLength": 210, - "snippet": { - "text": " return None\n\n def put(self, host: str, port: int, username: str, client, sftp, fingerprint: str | None):\n \"\"\"Cache a connection for reuse.\"\"\"\n key = self._make_key(host, port, username)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "a91a41cf72a477e7", - "equalIndicator/v1": "13ff96352fc72854d59fe18c667e0ae4a8f99a7e5ca990c588427c8d4a2fc46b" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/registry.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 190, - "startColumn": 63, - "charOffset": 7330, - "charLength": 15, - "snippet": { - "text": "set[str] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 188, - "startColumn": 1, - "charOffset": 7183, - "charLength": 300, - "snippet": { - "text": " return f\"Tool '{name}' has no handler and no MCP client configured.\", False\n\n async def register_mcp_tools(self, mcp_client, blocklist: set[str] | None = None) -> int:\n \"\"\"Register tools from an MCP client. Returns count of tools registered.\"\"\"\n self._mcp_client = mcp_client" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "613171a4bfebb9a7", - "equalIndicator/v1": "1ef24bc43a5e58587d6d4221763671be0c77b28f49dd9e025697354dd0324c9d" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/db/operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 186, - "startColumn": 70, - "charOffset": 4886, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 184, - "startColumn": 1, - "charOffset": 4815, - "charLength": 204, - "snippet": { - "text": "\n\nasync def get_all_settings(db: AsyncSession, user_id: int, category: str | None = None) -> dict:\n from .models import UserSetting\n query = select(UserSetting).where(UserSetting.user_id == user_id)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "f9d19db0425c5e48", - "equalIndicator/v1": "1f773049e74f39bff98c9c1d2512fdf46a0d1a1bd265b7738be4920dfd1cb44a" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/sandbox/ssh.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 19, - "startColumn": 34, - "charOffset": 540, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 17, - "startColumn": 1, - "charOffset": 397, - "charLength": 216, - "snippet": { - "text": " def __init__(self, expected_fingerprint: str | None = None):\n self.expected = expected_fingerprint\n self.actual_fingerprint: str | None = None\n\n def missing_host_key(self, client, hostname, key):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "964bc634e2ddbcf1", - "equalIndicator/v1": "1f8d8d3071eae315038f7e530fc84130d0c301602db4d2dc49039c345b392fb6" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/db/operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 25, - "startColumn": 12, - "charOffset": 505, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 23, - "startColumn": 1, - "charOffset": 439, - "charLength": 130, - "snippet": { - "text": " user_id: int,\n title: str = \"New conversation\",\n model: str | None = None,\n mode: str = \"general\",\n) -> Conversation:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ad7ada69ce59a4c1", - "equalIndicator/v1": "23b66ddb541695929593317d45df1264589852c4167f9d0e15f6c29e5664d182" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/http_utils.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 43, - "startColumn": 21, - "charOffset": 1133, - "charLength": 15, - "snippet": { - "text": "set[int] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 41, - "startColumn": 1, - "charOffset": 1055, - "charLength": 130, - "snippet": { - "text": " base_delay: float = 1.0,\n max_delay: float = 30.0,\n retry_statuses: set[int] | None = None,\n) -> httpx.Response:\n \"\"\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "e6d28fca22504584", - "equalIndicator/v1": "281baf18f658ec891d66462bfc6b0526628269bc7563c10e43e3d37de9892ac1" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 334, - "startColumn": 51, - "charOffset": 12337, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 332, - "startColumn": 1, - "charOffset": 12285, - "charLength": 193, - "snippet": { - "text": "\n\ndef _get_draft_from_proj(proj: dict, author_info: dict | None = None) -> tuple[str, bool]:\n \"\"\"Generate the full markdown draft from a project dict.\"\"\"\n lines = [f\"# {proj['title']}\\n\"]" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "67f9ce133403988c", - "equalIndicator/v1": "28326050743aabac84724332a4ecd2c97507be561ae699c9aba9c0358fa9a319" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/http_utils.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 142, - "startColumn": 53, - "charOffset": 4919, - "charLength": 12, - "snippet": { - "text": "float | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 140, - "startColumn": 1, - "charOffset": 4865, - "charLength": 163, - "snippet": { - "text": "\n\ndef _parse_retry_after(response: httpx.Response) -> float | None:\n \"\"\"Parse Retry-After header value.\"\"\"\n retry_after = response.headers.get(\"Retry-After\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "6751672b7a71333e", - "equalIndicator/v1": "2859f1e149cf4de5e3e401f83217b33d6d41881f1025290b2ea21d600fd6bd4e" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/services/redis_pubsub.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 78, - "startColumn": 21, - "charOffset": 2437, - "charLength": 19, - "snippet": { - "text": "asyncio.Task | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 76, - "startColumn": 1, - "charOffset": 2392, - "charLength": 159, - "snippet": { - "text": "\n def __init__(self):\n self._task: asyncio.Task | None = None\n self._local_subscribers: list[asyncio.Queue] = []\n self._running = False" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "d5f6039bf49a819d", - "equalIndicator/v1": "289fd14d515ab37988e88c59e8f35ca21fbce0232d47c017eb1f9f16ff0c4551" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 938, - "startColumn": 52, - "charOffset": 33739, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 936, - "startColumn": 1, - "charOffset": 33686, - "charLength": 161, - "snippet": { - "text": "\n\ndef _reconstruct_abstract(inverted_index: dict) -> str | None:\n \"\"\"Reconstruct abstract from OpenAlex's inverted index format.\"\"\"\n if not inverted_index:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "954410d7af51e283", - "equalIndicator/v1": "2b231636febb4ab45e9f2969e601a1337bddf4b27cf2dc30e99ead9ac236859a" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 209, - "startColumn": 35, - "charOffset": 8191, - "charLength": 17, - "snippet": { - "text": "list[dict] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 207, - "startColumn": 1, - "charOffset": 8138, - "charLength": 205, - "snippet": { - "text": "\n @staticmethod\n def _openai_tool_param(tools: list[dict] | None) -> list[dict] | None:\n \"\"\"Convert tool specs to OpenAI tools param. Handles both raw and pre-wrapped.\"\"\"\n if not tools:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "acf6fd4416a7209c", - "equalIndicator/v1": "2c3eb90b87f1a98eb57a76ffcc9171cffb7ca24429e7558f401c47ad17f8562e" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/http_utils.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 37, - "startColumn": 14, - "charOffset": 954, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 35, - "startColumn": 1, - "charOffset": 884, - "charLength": 144, - "snippet": { - "text": " method: str = \"GET\",\n params: dict | None = None,\n headers: dict | None = None,\n json: dict | None = None,\n timeout: float = 30," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "b2653302baebe1f4", - "equalIndicator/v1": "2cecb1aa030d5ff4fdf8a5a50a41281d8487ef0924f83186e7dae70395dcf727" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/db/operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 626, - "startColumn": 77, - "charOffset": 17739, - "charLength": 10, - "snippet": { - "text": "int | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 624, - "startColumn": 1, - "charOffset": 17661, - "charLength": 149, - "snippet": { - "text": "\n\nasync def set_default_compute_node(db: AsyncSession, user_id: int, node_id: int | None) -> None:\n # Clear existing default\n await db.execute(" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "35baff3339f6b2c1", - "equalIndicator/v1": "2d3cef132f3d0ed8c9e7d2cd5f1eba28ec3d98054d8bc74ae19b5a41af794618" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/services/session_manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 63, - "startColumn": 16, - "charOffset": 1986, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 61, - "startColumn": 1, - "charOffset": 1922, - "charLength": 159, - "snippet": { - "text": " conversation_id: int,\n uuid: str,\n model: str | None = None,\n mode: str = \"general\",\n existing_messages: list[dict] = None," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "24e0a20777005cb7", - "equalIndicator/v1": "30c1d2aaf740d648cb937e7492673695d3fad1a64cac7ab63e2c090a99027f05" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/db/operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 285, - "startColumn": 14, - "charOffset": 7803, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 283, - "startColumn": 1, - "charOffset": 7738, - "charLength": 146, - "snippet": { - "text": " resource_type: str,\n url: str | None = None,\n content: str | None = None,\n resource_id: str | None = None,\n) -> ConversationResource:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ad5d58cbbd80f9f0", - "equalIndicator/v1": "332b9277e747883c5d47c65acd7738ad2cfea149169b37ab7c0c62611cd6620a" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 101, - "startColumn": 16, - "charOffset": 4243, - "charLength": 17, - "snippet": { - "text": "list[dict] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 99, - "startColumn": 1, - "charOffset": 4169, - "charLength": 237, - "snippet": { - "text": " messages: list[dict],\n config: AgentConfig,\n tools: list[dict] | None = None,\n ) -> AsyncGenerator[str | ToolCall | dict, None]:\n async for chunk in LLMProvider._stream_with_retry(messages, config, tools):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4894cccbb2789247", - "equalIndicator/v1": "3382549986b5a7dd5e3db920e7668f880ab0fbe1fc7145fab7a3b8d7ee02d2fb" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 63, - "startColumn": 11, - "charOffset": 1383, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 61, - "startColumn": 1, - "charOffset": 1326, - "charLength": 162, - "snippet": { - "text": "class MessageSend(BaseModel):\n message: str\n mode: str | None = None # plan, research, write — per-message mode override\n\nclass ApprovalRequest(BaseModel):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "bd6f854c2235a1cb", - "equalIndicator/v1": "3927dc9aa4087d7670706fe7ecffb7a53f61ddd7d1a70da23b00039609b940c4" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/http_utils.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 36, - "startColumn": 13, - "charOffset": 921, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 34, - "startColumn": 1, - "charOffset": 877, - "charLength": 126, - "snippet": { - "text": " *,\n method: str = \"GET\",\n params: dict | None = None,\n headers: dict | None = None,\n json: dict | None = None," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "897a37628c8d508c", - "equalIndicator/v1": "39333edec0361ad7f8a053231050b4df9b068c03f78ff116c0db82af867902a8" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 52, - "startColumn": 15, - "charOffset": 1145, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 50, - "startColumn": 1, - "charOffset": 1100, - "charLength": 89, - "snippet": { - "text": " role: str\n content: str\n metadata: dict | None = None\n created_at: datetime\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "a6f9f1da78c4ce83", - "equalIndicator/v1": "3c4e4bdfa00efbe88a310ea4f4bda48e5e2a5dd3ae7593b795a74747e4c79908" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/config.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 73, - "startColumn": 30, - "charOffset": 2691, - "charLength": 11, - "snippet": { - "text": "Path | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 71, - "startColumn": 1, - "charOffset": 2660, - "charLength": 151, - "snippet": { - "text": "\n\ndef load_config(config_path: Path | None = None) -> AgentConfig:\n \"\"\"Load agent configuration with layered priority.\"\"\"\n config = AgentConfig()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "e29a2acdf7211745", - "equalIndicator/v1": "403368222754b474c45bb7275de7b21c34e640dd27e27d6688d1280b676e1aee" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 169, - "startColumn": 16, - "charOffset": 6684, - "charLength": 17, - "snippet": { - "text": "list[dict] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 167, - "startColumn": 1, - "charOffset": 6610, - "charLength": 179, - "snippet": { - "text": " messages: list[dict],\n config: AgentConfig,\n tools: list[dict] | None = None,\n ) -> AsyncGenerator[str | ToolCall | dict, None]:\n last_error = None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "c3d782aadb2c4b96", - "equalIndicator/v1": "4302b75f75e38d23c957e3d4fd8526137e5e1f00ea76a85311c45ab6f8d86f1e" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/services/session_manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 284, - "startColumn": 10, - "charOffset": 11130, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 282, - "startColumn": 1, - "charOffset": 11061, - "charLength": 155, - "snippet": { - "text": " conversation_id: int,\n messages: list[dict],\n ) -> str | None:\n active = self.sessions.get(conversation_id)\n if not active:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "a45b2f355c5a64a9", - "equalIndicator/v1": "44ab4c66f41c12931542cb2299dcd708783b4c8914d681366fb38812e5de20e9" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 32, - "startColumn": 17, - "charOffset": 765, - "charLength": 21, - "snippet": { - "text": "list[ToolCall] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 30, - "startColumn": 1, - "charOffset": 677, - "charLength": 180, - "snippet": { - "text": " role: str # \"system\", \"user\", \"assistant\", \"tool\"\n content: str\n tool_calls: list[ToolCall] | None = None\n tool_call_id: str | None = None\n name: str | None = None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "8ad4f32ff62c39ba", - "equalIndicator/v1": "44bc2b1be466e17e75fc2a20cfb8aa40286f54f1c27f0d57cef892b7fa7da3b7" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/sandbox/ssh.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 17, - "startColumn": 46, - "charOffset": 442, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 15, - "startColumn": 1, - "charOffset": 315, - "charLength": 242, - "snippet": { - "text": " \"\"\"Paramiko policy that verifies host keys against expected fingerprints.\"\"\"\n\n def __init__(self, expected_fingerprint: str | None = None):\n self.expected = expected_fingerprint\n self.actual_fingerprint: str | None = None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "3346cb6ad50aca43", - "equalIndicator/v1": "4e340cb8982b43beef4d774c725c4cea52c4efbe0afecd4f8b10c25155f2f01b" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 110, - "startColumn": 10, - "charOffset": 4548, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 108, - "startColumn": 1, - "charOffset": 4480, - "charLength": 169, - "snippet": { - "text": " messages: list[dict],\n config: AgentConfig,\n ) -> str | None:\n title_prompt = (\n \"Based on the conversation, generate a short title \"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "a3729aeaa0621562", - "equalIndicator/v1": "51386c005ff81a34770b40dc0f2c9bd3805a7185aa0c8d4da6826a05386fb37b" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/keys/manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 14, - "startColumn": 34, - "charOffset": 385, - "charLength": 10, - "snippet": { - "text": "str | Path" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 12, - "startColumn": 1, - "charOffset": 283, - "charLength": 257, - "snippet": { - "text": " \"\"\"Manages SSH private keys stored in a dedicated directory.\"\"\"\n\n def __init__(self, keys_dir: str | Path = None):\n self.keys_dir = Path(keys_dir) if keys_dir else Path(__file__).parent.parent.parent.parent / \".keys\"\n self._ensure_dir()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ae862a2386091c7b", - "equalIndicator/v1": "523200c00c7ecd2d0fa33fe764fabad2d523c902ae63e6d091ee38c4c12dbc27" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 92, - "startColumn": 11, - "charOffset": 2135, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 90, - "startColumn": 1, - "charOffset": 2076, - "charLength": 78, - "snippet": { - "text": "class AgentEvent(BaseModel):\n event_type: str\n data: dict | None = None\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "7f32cfad7db4ce00", - "equalIndicator/v1": "5887014e32db1e6b680744044a672f6af8a2a3311d1edbd8550961eba86ab61d" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/session.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 32, - "startColumn": 22, - "charOffset": 900, - "charLength": 10, - "snippet": { - "text": "Any | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 30, - "startColumn": 1, - "charOffset": 835, - "charLength": 107, - "snippet": { - "text": "\n # Question/answer flow (ask_user tool)\n pending_answers: Any | None = None\n\n # Sandbox reference" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "28d1682389b61193", - "equalIndicator/v1": "5cf6cad9356bb8d53818019002b866f7e8c656c1e52e270d26123c73212fb059" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/services/session_manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 47, - "startColumn": 39, - "charOffset": 1442, - "charLength": 10, - "snippet": { - "text": "int | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 45, - "startColumn": 1, - "charOffset": 1324, - "charLength": 233, - "snippet": { - "text": " self.event_bus = event_bus\n self.default_config = default_config\n self.current_conversation_id: int | None = None\n self._is_processing: bool = False\n self._message_queues: dict[int, list[str]] = {}" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "9a4fef94ffd8fdf2", - "equalIndicator/v1": "600dea56b70443c0d5bcf6c9419fbfb1428425d58895569e5d466daba34569e9" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/services/event_bus.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 72, - "startColumn": 37, - "charOffset": 2286, - "charLength": 17, - "snippet": { - "text": "AgentEvent | dict" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 70, - "startColumn": 1, - "charOffset": 2182, - "charLength": 190, - "snippet": { - "text": " logger.warning(f\"Failed to publish to Redis: {e}\")\n\n def broadcast_sync(self, event: AgentEvent | dict) -> None:\n try:\n loop = asyncio.get_running_loop()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "bf57b815d9c9c8e3", - "equalIndicator/v1": "627ea22ec5b214ce7054b260d0aecd2be7126ce93befe422c094ae92737ac2c1" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/db/operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 154, - "startColumn": 69, - "charOffset": 4025, - "charLength": 38, - "snippet": { - "text": "dict | list | str | int | float | bool" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 152, - "startColumn": 1, - "charOffset": 3928, - "charLength": 174, - "snippet": { - "text": "\nasync def set_user_setting(\n db: AsyncSession, user_id: int, category: str, key: str, value: dict | list | str | int | float | bool\n):\n from .models import UserSetting" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "64240bdad360dd31", - "equalIndicator/v1": "645b8ac3af280461be514f972f977d4601ac101a14244847bd78506982d322fc" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/db/operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 417, - "startColumn": 11, - "charOffset": 11570, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 415, - "startColumn": 1, - "charOffset": 11524, - "charLength": 107, - "snippet": { - "text": " user_id: int,\n message: str,\n mode: str | None = None,\n) -> AgentJob:\n import uuid as uuid_mod" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "5dd080c4cb8c6613", - "equalIndicator/v1": "6606160a9b27a9219ad18804a4cc1355b18977aef2e9a7f08cbc940ed7ee6397" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 232, - "startColumn": 35, - "charOffset": 8831, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 230, - "startColumn": 1, - "charOffset": 8795, - "charLength": 112, - "snippet": { - "text": "\n\ndef _get_project(conv_id: int) -> dict | None:\n \"\"\"Get project from in-memory cache.\"\"\"\n if not conv_id:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "d8ab5cf252dc9ea1", - "equalIndicator/v1": "67eee05db5fb779ba0928cdb39c1802c17dea83e2a15e6396fe0b1c7e20d4f6c" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 80, - "startColumn": 21, - "charOffset": 1914, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 78, - "startColumn": 1, - "charOffset": 1810, - "charLength": 164, - "snippet": { - "text": " github_token: str | None = None\n semantic_scholar_api_key: str | None = None\n modal_token_id: str | None = None\n modal_token_secret: str | None = None\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "2c1a69fe5107162b", - "equalIndicator/v1": "6ab1b16d36ff01548a690086aae81889f65520261634d7f4e3db3e22265e22ea" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 34, - "startColumn": 11, - "charOffset": 840, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 32, - "startColumn": 1, - "charOffset": 749, - "charLength": 110, - "snippet": { - "text": " tool_calls: list[ToolCall] | None = None\n tool_call_id: str | None = None\n name: str | None = None\n\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "770097aa70b222bd", - "equalIndicator/v1": "6dc2f95381fdf1fd9715202b201bfcfe4c2e8f6e13dc0cad57b0cc7588ff42f7" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 71, - "startColumn": 12, - "charOffset": 1664, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 69, - "startColumn": 1, - "charOffset": 1599, - "charLength": 84, - "snippet": { - "text": " tool_calls: list[ToolCall]\n finish_reason: str\n usage: dict | None = None\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "90e2066efb388365", - "equalIndicator/v1": "6e91c8dabf1013d8cb5425643721bdf17355d4a1b402ce14bbf32e17b6fdc5b5" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 981, - "startColumn": 56, - "charOffset": 35179, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 979, - "startColumn": 1, - "charOffset": 35122, - "charLength": 103, - "snippet": { - "text": "\n\ndef _find_section(sections: list[dict], query: str) -> dict | None:\n try:\n idx = int(query)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "a753c58f4f11b261", - "equalIndicator/v1": "70a174a499507ce4618129aa88c6642517345ef98f3b0c54425b7a96defa25c4" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 340, - "startColumn": 60, - "charOffset": 13002, - "charLength": 17, - "snippet": { - "text": "list[dict] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 338, - "startColumn": 1, - "charOffset": 12924, - "charLength": 172, - "snippet": { - "text": "\n @staticmethod\n def _anthropic_tool_param(tools: list[dict] | None) -> list[dict] | None:\n \"\"\"Convert tool specs to Anthropic format.\"\"\"\n if not tools:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "16777912930a32c9", - "equalIndicator/v1": "7124abd1a4184880eea8464c922833e150c83336f59716ff426ff328aa087246" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 42, - "startColumn": 12, - "charOffset": 950, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 40, - "startColumn": 1, - "charOffset": 910, - "charLength": 92, - "snippet": { - "text": " uuid: str\n title: str\n model: str | None\n mode: str\n user_message_count: int" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "86b01ba34e4d3686", - "equalIndicator/v1": "71fadc1ccdbf96c7c69a3413cfaeeb648f763255d0fc77947a021decb809c2c0" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/services/session_manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 67, - "startColumn": 18, - "charOffset": 2131, - "charLength": 10, - "snippet": { - "text": "int | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 65, - "startColumn": 1, - "charOffset": 2036, - "charLength": 156, - "snippet": { - "text": " existing_messages: list[dict] = None,\n username: str = \"user\",\n user_id: int | None = None,\n db = None,\n ) -> ActiveSession:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "58caa5d5da79be99", - "equalIndicator/v1": "74d6be15952afa3737c7b22aa40dc5e305771c06d37d132620a4c51eafa66c64" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/session.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 23, - "startColumn": 22, - "charOffset": 666, - "charLength": 10, - "snippet": { - "text": "int | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 21, - "startColumn": 1, - "charOffset": 580, - "charLength": 123, - "snippet": { - "text": "\n # Conversation reference (for database operations in tools)\n conversation_id: int | None = None\n\n # Cancellation" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4cc34bad3b5350e6", - "equalIndicator/v1": "78303c0bf1da4cdff5b1396f4770d4ccc59eb7a2a48509c45ac5a2e00862d209" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 227, - "startColumn": 16, - "charOffset": 8881, - "charLength": 17, - "snippet": { - "text": "list[dict] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 225, - "startColumn": 1, - "charOffset": 8807, - "charLength": 164, - "snippet": { - "text": " messages: list[dict],\n config: AgentConfig,\n tools: list[dict] | None,\n ) -> LLMResult:\n client = LLMProvider._openai_client(config)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "3208fecbd6bb2068", - "equalIndicator/v1": "7889bfc24c3bce404acc8b0e20c187a6c87ac304ff81be3adbbb1095fc1ae5fc" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/doom_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 15, - "startColumn": 68, - "charOffset": 419, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 13, - "startColumn": 1, - "charOffset": 350, - "charLength": 140, - "snippet": { - "text": "\n\ndef detect_doom_loop(messages: list[Message], window: int = 30) -> str | None:\n \"\"\"\n Analyze recent messages for doom loop patterns." - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "e725a46dcb19e381", - "equalIndicator/v1": "794b0e21f93e9794372b10809adfc63f41f3bfdcc774f499b6f0f2f5a3bb30d7" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 75, - "startColumn": 24, - "charOffset": 1713, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 73, - "startColumn": 1, - "charOffset": 1619, - "charLength": 190, - "snippet": { - "text": "class ProviderConfig(BaseModel):\n openai_api_key: str | None = None\n anthropic_api_key: str | None = None\n openrouter_api_key: str | None = None\n brave_api_key: str | None = None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "919a7ef681dc5c2c", - "equalIndicator/v1": "7990bdee548a72fc5bc0353578d617ad4f4cdc88583238f8bf08a589f39f45b6" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/db/operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 286, - "startColumn": 18, - "charOffset": 7839, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 284, - "startColumn": 1, - "charOffset": 7762, - "charLength": 150, - "snippet": { - "text": " url: str | None = None,\n content: str | None = None,\n resource_id: str | None = None,\n) -> ConversationResource:\n import uuid as uuid_mod" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "cffc45f17d499fac", - "equalIndicator/v1": "86c96e6a6e8cfbf9fe62efdba87174487a7de2a997095057302843b8b856db5e" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 35, - "startColumn": 12, - "charOffset": 761, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 33, - "startColumn": 1, - "charOffset": 670, - "charLength": 188, - "snippet": { - "text": "class ConversationCreate(BaseModel):\n title: str | None = \"New conversation\"\n model: str | None = None\n mode: str | None = \"general\" # \"research\", \"writing\", \"coding\", \"general\"\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "6cf3a361cbc56b6c", - "equalIndicator/v1": "8c39023aaeab4a80199a10b6fc9fa5e5482416ca982ef5d3c890fc47abca8edc" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 76, - "startColumn": 25, - "charOffset": 1755, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 74, - "startColumn": 1, - "charOffset": 1652, - "charLength": 193, - "snippet": { - "text": " openai_api_key: str | None = None\n anthropic_api_key: str | None = None\n openrouter_api_key: str | None = None\n brave_api_key: str | None = None\n github_token: str | None = None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "1caa43224708c39e", - "equalIndicator/v1": "8e29d083dcb481cd0b9d8f31a325423553efa6bf82ff0c8e89a1edf3b1acdd35" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/db/operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 114, - "startColumn": 15, - "charOffset": 3042, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 112, - "startColumn": 1, - "charOffset": 2995, - "charLength": 99, - "snippet": { - "text": " role: str,\n content: str,\n metadata: dict | None = None,\n) -> Message:\n msg = Message(" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "852eb1e348ae11d7", - "equalIndicator/v1": "8f608adeb039dad32f8c1b842396246fa18b3c4aff6ffe6808f64d3e1d6a9932" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 33, - "startColumn": 19, - "charOffset": 812, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 31, - "startColumn": 1, - "charOffset": 732, - "charLength": 126, - "snippet": { - "text": " content: str\n tool_calls: list[ToolCall] | None = None\n tool_call_id: str | None = None\n name: str | None = None\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "5abae849cd56bc82", - "equalIndicator/v1": "91a41296d1c01383be33398a2d0901fd01283098da00438321b8e1e606aeeb30" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/session.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 35, - "startColumn": 14, - "charOffset": 956, - "charLength": 10, - "snippet": { - "text": "Any | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 33, - "startColumn": 1, - "charOffset": 918, - "charLength": 103, - "snippet": { - "text": "\n # Sandbox reference\n sandbox: Any | None = None\n\n # Turn counter (for title generation etc.)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "7b709d890991b83d", - "equalIndicator/v1": "92cbd5821bdbe801a0291b58b3090f231a52e401a71a79581da60a4a612e9cad" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/compute/workspace.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 13, - "startColumn": 34, - "charOffset": 297, - "charLength": 10, - "snippet": { - "text": "str | Path" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 11, - "startColumn": 1, - "charOffset": 191, - "charLength": 264, - "snippet": { - "text": " \"\"\"Manages isolated workspace directories for each conversation.\"\"\"\n\n def __init__(self, base_dir: str | Path = None):\n self.base_dir = Path(base_dir) if base_dir else Path.home() / \".openmlr\"\n self.workspace_dir = self.base_dir / \"workspaces\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "b82b5a217e96cf6c", - "equalIndicator/v1": "933f5765157909b257bf4135f96703b61a2847818f39d42137ff0e34de2e87b8" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/context.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 21, - "startColumn": 32, - "charOffset": 563, - "charLength": 14, - "snippet": { - "text": "Message | dict" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 19, - "startColumn": 1, - "charOffset": 498, - "charLength": 153, - "snippet": { - "text": " running_token_count: int = 0\n\n def add_message(self, msg: Message | dict) -> None:\n if isinstance(msg, dict):\n tool_calls = None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "b1fc732a5ad4f44e", - "equalIndicator/v1": "93ea2689c0b57bd2db49e5c28022ac20096272fee25def2f401607171337c0f9" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/db/operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 284, - "startColumn": 10, - "charOffset": 7771, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 282, - "startColumn": 1, - "charOffset": 7722, - "charLength": 135, - "snippet": { - "text": " title: str,\n resource_type: str,\n url: str | None = None,\n content: str | None = None,\n resource_id: str | None = None," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "2abb5d426724a740", - "equalIndicator/v1": "976d5a3b874afcd690c0e4cf29088bc03e9b74a51e83756f72d691e57a32bbce" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/http_utils.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 19, - "startColumn": 37, - "charOffset": 397, - "charLength": 12, - "snippet": { - "text": "float | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 17, - "startColumn": 1, - "charOffset": 287, - "charLength": 279, - "snippet": { - "text": "class RateLimitError(Exception):\n \"\"\"Raised when rate limit is hit.\"\"\"\n def __init__(self, retry_after: float | None = None):\n self.retry_after = retry_after\n super().__init__(f\"Rate limit hit, retry after {retry_after}s\" if retry_after else \"Rate limit hit\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "50f9a9a510076cb9", - "equalIndicator/v1": "9c04088653952498b112e5e271b6aa2ee6fa754f4499744447fe3fcc298c5043" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/services/redis_pubsub.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 196, - "startColumn": 75, - "charOffset": 6731, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 194, - "startColumn": 1, - "charOffset": 6655, - "charLength": 187, - "snippet": { - "text": "\n\nasync def wait_for_answers(conversation_id: int, timeout: float = 300) -> dict | None:\n \"\"\"Wait for user answers from Redis. Used by background worker's ask_user handler.\"\"\"\n try:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "512a9ed3884024b7", - "equalIndicator/v1": "9d679cd7f276203dd4918a24e79fcb56d30627da22ec427d56a5aa376626cdf9" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/sandbox/ssh.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 121, - "startColumn": 24, - "charOffset": 4079, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 119, - "startColumn": 1, - "charOffset": 3979, - "charLength": 202, - "snippet": { - "text": " self.username: str = \"\"\n self.key_filename: str | None = None\n self.password: str | None = None\n self.workdir: str = \"~\"\n self.host_key_fingerprint: str | None = None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "8ab604ad3bc4d241", - "equalIndicator/v1": "9d8c4c5f861769d0af0f193a8a7913dab3a62ba1222297743c06ca5c2fdb10c2" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 454, - "startColumn": 16, - "charOffset": 17481, - "charLength": 17, - "snippet": { - "text": "list[dict] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 452, - "startColumn": 1, - "charOffset": 17407, - "charLength": 210, - "snippet": { - "text": " messages: list[dict],\n config: AgentConfig,\n tools: list[dict] | None,\n ) -> AsyncGenerator[str | ToolCall | dict, None]:\n model = LLMProvider._normalize_model(config.model_name)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4a7a5a7fc500dfe1", - "equalIndicator/v1": "9e819c7d3dbbd792035b220d027a8371c306cccbdc42821379bc9e84f461e3eb" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/sandbox/ssh.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 120, - "startColumn": 28, - "charOffset": 4038, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 118, - "startColumn": 1, - "charOffset": 3951, - "charLength": 177, - "snippet": { - "text": " self.port: int = 22\n self.username: str = \"\"\n self.key_filename: str | None = None\n self.password: str | None = None\n self.workdir: str = \"~\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "c69aa6c80441eee9", - "equalIndicator/v1": "9eb62ecb0763df80d059bc2864da4fd5e5f5b8acad561d6d09d3d00c1be3ec47" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 41, - "startColumn": 11, - "charOffset": 994, - "charLength": 21, - "snippet": { - "text": "dict[str, Any] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 39, - "startColumn": 1, - "charOffset": 903, - "charLength": 149, - "snippet": { - "text": " \"\"\"Event emitted by the agent loop for SSE streaming.\"\"\"\n event_type: str\n data: dict[str, Any] | None = None\n\n def to_sse(self) -> str:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "c4fb9ba70bb53d42", - "equalIndicator/v1": "a0438295aef57b091d87ba5ef90268a47fd1d6860c8dcd4d940eeb551fdf1312" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/http_utils.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 71, - "startColumn": 21, - "charOffset": 2059, - "charLength": 16, - "snippet": { - "text": "Exception | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 69, - "startColumn": 1, - "charOffset": 1987, - "charLength": 139, - "snippet": { - "text": " retry_statuses = {429, 500, 502, 503, 504}\n\n last_exception: Exception | None = None\n\n for attempt in range(max_retries + 1):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ac57a6403a844034", - "equalIndicator/v1": "a099ce11b8c3147167a8b081ec0bc56a20fb5a4ec4eda76fb86ea7be2735231e" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/registry.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 48, - "startColumn": 24, - "charOffset": 1744, - "charLength": 10, - "snippet": { - "text": "int | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 46, - "startColumn": 1, - "charOffset": 1635, - "charLength": 151, - "snippet": { - "text": " self._blocklist: set[str] = set()\n self._current_mode: str = \"general\"\n self._user_id: int | None = None\n self._db = None\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "3ce44c01e503670f", - "equalIndicator/v1": "a1484c1deb0ad588bcbb217a02a07ac9d5ea0830eb73a3fccaaa070ad3955b16" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/http_utils.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 166, - "startColumn": 29, - "charOffset": 5610, - "charLength": 16, - "snippet": { - "text": "Exception | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 164, - "startColumn": 1, - "charOffset": 5512, - "charLength": 173, - "snippet": { - "text": " @wraps(func)\n async def wrapper(*args, **kwargs) -> T:\n last_exception: Exception | None = None\n\n for attempt in range(max_retries + 1):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "cea9894563b68953", - "equalIndicator/v1": "a6c5c2ea73e4ad64fa50a60d3cdd1830b8b1e1c8ce3fdc51d573c683b489a86b" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 412, - "startColumn": 16, - "charOffset": 15964, - "charLength": 17, - "snippet": { - "text": "list[dict] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 410, - "startColumn": 1, - "charOffset": 15890, - "charLength": 176, - "snippet": { - "text": " messages: list[dict],\n config: AgentConfig,\n tools: list[dict] | None,\n ) -> LLMResult:\n model = LLMProvider._normalize_model(config.model_name)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "7a04f4ae4e6da2b0", - "equalIndicator/v1": "a754da49992d6a9d34bd043fe81f8227c808fbbe1e0be951f7dea1cc51ecc528" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 340, - "startColumn": 38, - "charOffset": 12980, - "charLength": 17, - "snippet": { - "text": "list[dict] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 338, - "startColumn": 1, - "charOffset": 12924, - "charLength": 172, - "snippet": { - "text": "\n @staticmethod\n def _anthropic_tool_param(tools: list[dict] | None) -> list[dict] | None:\n \"\"\"Convert tool specs to Anthropic format.\"\"\"\n if not tools:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "9a60efddc6825fee", - "equalIndicator/v1": "ab71088060b0a27378d2b457d3baec6735bda2ad0d0c603a8ed8f81bffe87348" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 24, - "startColumn": 21, - "charOffset": 566, - "charLength": 26, - "snippet": { - "text": "Callable[..., bool] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 22, - "startColumn": 1, - "charOffset": 430, - "charLength": 171, - "snippet": { - "text": " parameters: dict[str, Any] # JSON Schema\n handler: Callable[..., Awaitable[tuple[str, bool]]] | None = None\n needs_approval: Callable[..., bool] | None = None\n\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "d6a4c64a2b62418f", - "equalIndicator/v1": "ac45680d0a52ff8dd04da066b4a9e489260636391df8ebce62f841c0083c0f9e" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 268, - "startColumn": 16, - "charOffset": 10334, - "charLength": 17, - "snippet": { - "text": "list[dict] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 266, - "startColumn": 1, - "charOffset": 10260, - "charLength": 198, - "snippet": { - "text": " messages: list[dict],\n config: AgentConfig,\n tools: list[dict] | None,\n ) -> AsyncGenerator[str | ToolCall | dict, None]:\n client = LLMProvider._openai_client(config)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "853473cc0b5d6d7e", - "equalIndicator/v1": "adc976fcdaa12d900d5268b5fdee18f09d6e2c059df9e4f48e1518a267b7af3c" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 43, - "startColumn": 43, - "charOffset": 1612, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 41, - "startColumn": 1, - "charOffset": 1551, - "charLength": 176, - "snippet": { - "text": "\n @staticmethod\n def _get_base_url(model_name: str) -> str | None:\n \"\"\"Get the base URL for local/custom OpenAI-compatible APIs.\"\"\"\n mn = model_name.lower()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4fb531dd727d3f54", - "equalIndicator/v1": "ae212f55a5a85c6d4ee861e4d3d6d88f83f2a57f712f56c24f2d1a1f31258121" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 23, - "startColumn": 14, - "charOffset": 489, - "charLength": 49, - "snippet": { - "text": "Callable[..., Awaitable[tuple[str, bool]]] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 21, - "startColumn": 1, - "charOffset": 409, - "charLength": 191, - "snippet": { - "text": " description: str\n parameters: dict[str, Any] # JSON Schema\n handler: Callable[..., Awaitable[tuple[str, bool]]] | None = None\n needs_approval: Callable[..., bool] | None = None\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "461e7d3d8f3d4e8b", - "equalIndicator/v1": "b0f69d36010806071b2f2a623b68211a77398e8000f34e387889542e3de2c178" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/http_utils.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 165, - "startColumn": 47, - "charOffset": 5579, - "charLength": 1, - "snippet": { - "text": "T" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 163, - "startColumn": 1, - "charOffset": 5449, - "charLength": 185, - "snippet": { - "text": " def decorator(func: Callable[..., T]) -> Callable[..., T]:\n @wraps(func)\n async def wrapper(*args, **kwargs) -> T:\n last_exception: Exception | None = None\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "3ca565a66763116e", - "equalIndicator/v1": "b1c130043da97ebb8803100041eff02b8f48120224d59e765eaf3436b4c38e94" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/services/job_manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 77, - "startColumn": 10, - "charOffset": 2104, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 75, - "startColumn": 1, - "charOffset": 2048, - "charLength": 165, - "snippet": { - "text": " db: AsyncSession,\n job_id: str,\n ) -> dict | None:\n \"\"\"Get the current status of a job.\"\"\"\n job = await ops.get_agent_job(db, job_id)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "8dca62770611ac79", - "equalIndicator/v1": "b8cc928f997225b9940c540b909234a6c3726f274fb936a4325927acf903435e" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 929, - "startColumn": 43, - "charOffset": 33489, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 927, - "startColumn": 1, - "charOffset": 33445, - "charLength": 134, - "snippet": { - "text": "\n\ndef _extract_arxiv_from_ids(ids: dict) -> str | None:\n \"\"\"Extract arxiv ID from OpenAlex ids dict.\"\"\"\n ids.get(\"openalex\", \"\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "953eebc3663bd921", - "equalIndicator/v1": "bc32d63081304e82d7a6a3d89c770cad99e00c0d40bfce78a1b0f7c6dc8b1fc9" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/db/operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 582, - "startColumn": 75, - "charOffset": 16265, - "charLength": 10, - "snippet": { - "text": "int | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 580, - "startColumn": 1, - "charOffset": 16189, - "charLength": 210, - "snippet": { - "text": "\n\nasync def get_compute_node_by_id(db: AsyncSession, node_id: int, user_id: int | None = None) -> ComputeNode | None:\n query = select(ComputeNode).where(ComputeNode.id == node_id)\n if user_id is not None:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "d5517221d1759e90", - "equalIndicator/v1": "bc9233b70353295280a194f3ff7605ca46d4a0454cd136d08f0d3f8e735be7c1" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/sandbox/ssh.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 123, - "startColumn": 36, - "charOffset": 4164, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 121, - "startColumn": 1, - "charOffset": 4056, - "charLength": 159, - "snippet": { - "text": " self.password: str | None = None\n self.workdir: str = \"~\"\n self.host_key_fingerprint: str | None = None\n self._key_manager = None\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "dbeeaa987e54d296", - "equalIndicator/v1": "bf3036d2ab4b1dd8daa0e50bfdc44dd86b6a1ad4af763e76c27bb42f185b4a28" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 16, - "startColumn": 42, - "charOffset": 404, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 14, - "startColumn": 1, - "charOffset": 344, - "charLength": 140, - "snippet": { - "text": "\n @staticmethod\n def _get_api_key(model_name: str) -> str | None:\n mn = model_name.lower()\n if mn.startswith(\"openai/\"):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "080e98cff99933a5", - "equalIndicator/v1": "c3b95c51a08419bbaa57b72ce656e9377b9c9fb362d35f52d395ad338882c720" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 77, - "startColumn": 20, - "charOffset": 1792, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 75, - "startColumn": 1, - "charOffset": 1690, - "charLength": 203, - "snippet": { - "text": " anthropic_api_key: str | None = None\n openrouter_api_key: str | None = None\n brave_api_key: str | None = None\n github_token: str | None = None\n semantic_scholar_api_key: str | None = None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "756af0a7fe581703", - "equalIndicator/v1": "c588b4a512184b74b873cf22300a9e3cb2d1bf969a51a0dbb3de9e65f114a833" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 78, - "startColumn": 19, - "charOffset": 1828, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 76, - "startColumn": 1, - "charOffset": 1731, - "charLength": 200, - "snippet": { - "text": " openrouter_api_key: str | None = None\n brave_api_key: str | None = None\n github_token: str | None = None\n semantic_scholar_api_key: str | None = None\n modal_token_id: str | None = None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ba7fd7e9e2df80c1", - "equalIndicator/v1": "c66b212ebe3fcd879c86493226f8c6d39d09aee86c1b2009575b46014af170ca" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/auth/security.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 51, - "startColumn": 40, - "charOffset": 1649, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 49, - "startColumn": 1, - "charOffset": 1608, - "charLength": 131, - "snippet": { - "text": "\n\ndef decode_access_token(token: str) -> dict | None:\n try:\n return jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "7c90d56b82771c24", - "equalIndicator/v1": "c9bada87891cc768ddb111e3037b1b5022e2d8c6ee68a503c2fd9f016401db7b" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 74, - "startColumn": 21, - "charOffset": 1672, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 72, - "startColumn": 1, - "charOffset": 1618, - "charLength": 154, - "snippet": { - "text": "\nclass ProviderConfig(BaseModel):\n openai_api_key: str | None = None\n anthropic_api_key: str | None = None\n openrouter_api_key: str | None = None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "72fd17aedf67553f", - "equalIndicator/v1": "cab551458257a1f482f6ac70bcc7f4416513bc4312f02baf58507fe411612e68" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 79, - "startColumn": 31, - "charOffset": 1876, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 77, - "startColumn": 1, - "charOffset": 1773, - "charLength": 200, - "snippet": { - "text": " brave_api_key: str | None = None\n github_token: str | None = None\n semantic_scholar_api_key: str | None = None\n modal_token_id: str | None = None\n modal_token_secret: str | None = None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "9cbdc7534082e85c", - "equalIndicator/v1": "cef2a704b72dc6bd8c145fd5398f134830b8749fb6e55d176639076cf80d9fe3" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 34, - "startColumn": 12, - "charOffset": 718, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 32, - "startColumn": 1, - "charOffset": 669, - "charLength": 188, - "snippet": { - "text": "\nclass ConversationCreate(BaseModel):\n title: str | None = \"New conversation\"\n model: str | None = None\n mode: str | None = \"general\" # \"research\", \"writing\", \"coding\", \"general\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "c870778d0b63b160", - "equalIndicator/v1": "cfd66627ca192001edc616a1f0236bdeb20c7d54f65c2051d2ac385bd8245141" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 209, - "startColumn": 57, - "charOffset": 8213, - "charLength": 17, - "snippet": { - "text": "list[dict] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 207, - "startColumn": 1, - "charOffset": 8138, - "charLength": 205, - "snippet": { - "text": "\n @staticmethod\n def _openai_tool_param(tools: list[dict] | None) -> list[dict] | None:\n \"\"\"Convert tool specs to OpenAI tools param. Handles both raw and pre-wrapped.\"\"\"\n if not tools:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "d5bbcc673a6fc8f0", - "equalIndicator/v1": "d21c5f308ae6d9408a7a96a56efc97c5ab45803869c5f770892fcb77e5e17bea" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/services/event_bus.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 41, - "startColumn": 38, - "charOffset": 1201, - "charLength": 17, - "snippet": { - "text": "AgentEvent | dict" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 39, - "startColumn": 1, - "charOffset": 1146, - "charLength": 196, - "snippet": { - "text": " pass\n\n async def broadcast(self, event: AgentEvent | dict) -> None:\n if isinstance(event, AgentEvent):\n data = {\"event_type\": event.event_type, \"data\": event.data}" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "c168a5b6201a9c4a", - "equalIndicator/v1": "d626017c80db417702cb3f5926dbd84ee75b2b00cdaaf009f446e9c9164eb948" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 13, - "startColumn": 19, - "charOffset": 326, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 11, - "startColumn": 1, - "charOffset": 197, - "charLength": 175, - "snippet": { - "text": " username: str = Field(min_length=3, max_length=50)\n password: str = Field(min_length=6, max_length=128)\n display_name: str | None = None\n\nclass UserLogin(BaseModel):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "8832ab6940607e62", - "equalIndicator/v1": "d6c88770573be296d7a622df684aa015af2b112f95679d9f6956c62c95da704a" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/db/operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 458, - "startColumn": 16, - "charOffset": 12620, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 456, - "startColumn": 1, - "charOffset": 12558, - "charLength": 133, - "snippet": { - "text": " status: str,\n error: str | None = None,\n worker_id: str | None = None,\n) -> bool:\n job = await get_agent_job(db, job_id)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "26c787324254db95", - "equalIndicator/v1": "df0140fbd42cf64363aac216209ead7fc8439700452c81603193ae5d4f415c96" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 147, - "startColumn": 16, - "charOffset": 5817, - "charLength": 17, - "snippet": { - "text": "list[dict] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 145, - "startColumn": 1, - "charOffset": 5743, - "charLength": 149, - "snippet": { - "text": " messages: list[dict],\n config: AgentConfig,\n tools: list[dict] | None = None,\n max_retries: int = 3,\n ) -> LLMResult:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "24f04e4a8b369bad", - "equalIndicator/v1": "e0de3cc464d6737fe153795219efebfa018f3f160a755ae0fefd5b2e6ba66b8c" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/session.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 29, - "startColumn": 23, - "charOffset": 816, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 27, - "startColumn": 1, - "charOffset": 773, - "charLength": 105, - "snippet": { - "text": "\n # Approval flow\n pending_approval: dict | None = None\n\n # Question/answer flow (ask_user tool)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "d3f371ad1ddd592f", - "equalIndicator/v1": "e2e7ad505efaf1e48ab6ac4b04cad3c6895fc0f0c4993f088b58ffbc2e05cca1" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/services/event_bus.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 26, - "startColumn": 34, - "charOffset": 665, - "charLength": 19, - "snippet": { - "text": "asyncio.Task | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 24, - "startColumn": 1, - "charOffset": 556, - "charLength": 178, - "snippet": { - "text": " def __init__(self):\n self._subscribers: list[asyncio.Queue] = []\n self._redis_bridge_task: asyncio.Task | None = None\n\n def subscribe(self) -> asyncio.Queue:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "574e83259e0ed6f4", - "equalIndicator/v1": "e5ec7d46bb10933b62640a0de7dd3585a594bed34c2faa79fa1ca443c3fb2565" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/llm.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 93, - "startColumn": 16, - "charOffset": 3998, - "charLength": 17, - "snippet": { - "text": "list[dict] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 91, - "startColumn": 1, - "charOffset": 3924, - "charLength": 194, - "snippet": { - "text": " messages: list[dict],\n config: AgentConfig,\n tools: list[dict] | None = None,\n ) -> LLMResult:\n return await LLMProvider._call_with_retry(messages, config, tools)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "b3b9807897909f82", - "equalIndicator/v1": "e6a23c55a1c0b160199a8fcb04a26608f7ff4c8cf92e0577208594316d707925" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/compute/workspace.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 43, - "startColumn": 60, - "charOffset": 1706, - "charLength": 11, - "snippet": { - "text": "Path | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 41, - "startColumn": 1, - "charOffset": 1579, - "charLength": 270, - "snippet": { - "text": " return self.get_workspace_path(conversation_uuid).exists()\n\n def archive_workspace(self, conversation_uuid: str) -> Path | None:\n \"\"\"Archive a workspace before deletion. Returns archive path.\"\"\"\n path = self.get_workspace_path(conversation_uuid)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ccaec39d3c5504e8", - "equalIndicator/v1": "e6cb01de626239e1ede87e959e47a3480f650629d3c79494767047a4eac0abfd" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/db/operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 457, - "startColumn": 12, - "charOffset": 12586, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 455, - "startColumn": 1, - "charOffset": 12541, - "charLength": 108, - "snippet": { - "text": " job_id: str,\n status: str,\n error: str | None = None,\n worker_id: str | None = None,\n) -> bool:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "fcafaf2a23055fcd", - "equalIndicator/v1": "e8324349754729a5e7f55554723b6335f71ed577e33ca80a946bb32cb3bd8ef9" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_doom_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 15, - "startColumn": 43, - "charOffset": 379, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 13, - "startColumn": 1, - "charOffset": 335, - "charLength": 165, - "snippet": { - "text": "\n\ndef _assistant_with_tool(name: str, args: dict | None = None) -> Message:\n \"\"\"Helper: create an assistant message carrying one tool call.\"\"\"\n return Message(" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "6f692d449193c1af", - "equalIndicator/v1": "e9bc6a4cbe17af15bb707ab3460e7b7bd95703243a48b1f2299b82106110d29f" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/db/operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 513, - "startColumn": 47, - "charOffset": 14276, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 511, - "startColumn": 1, - "charOffset": 14135, - "charLength": 190, - "snippet": { - "text": "async def create_ssh_key(\n db: AsyncSession, user_id: int, filename: str, fingerprint: str,\n algorithm: str, public_key: str, comment: str | None = None,\n) -> SSHKey:\n key = SSHKey(" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "af3acc8143e92e19", - "equalIndicator/v1": "ea8f98ea0c5be8f632ffc2d1b99c54ea371657b2aa4ff75cad343c2010eb975e" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/keys/manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 118, - "startColumn": 45, - "charOffset": 4868, - "charLength": 11, - "snippet": { - "text": "str | bytes" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 116, - "startColumn": 1, - "charOffset": 4789, - "charLength": 208, - "snippet": { - "text": " return key_path, pub_path\n\n def validate_key(self, private_key_pem: str | bytes) -> dict:\n \"\"\"Validate an SSH private key and return metadata.\"\"\"\n if isinstance(private_key_pem, str):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "efc16dbeb2788f3d", - "equalIndicator/v1": "eac82361bddeb34c100653256ce781603bd77cfc3141546085c5fd57e689aa1f" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/db/operations.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 139, - "startColumn": 6, - "charOffset": 3573, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 137, - "startColumn": 1, - "charOffset": 3480, - "charLength": 172, - "snippet": { - "text": "async def get_user_setting(\n db: AsyncSession, user_id: int, category: str, key: str\n) -> dict | None:\n from .models import UserSetting\n result = await db.execute(" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "a6c1d1093c41d379", - "equalIndicator/v1": "ebc00ec53edab1d4473d86b767e0d88e5b4dc848d14e2ab21b7f00d748f32e0f" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/http_utils.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 38, - "startColumn": 11, - "charOffset": 984, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 36, - "startColumn": 1, - "charOffset": 909, - "charLength": 145, - "snippet": { - "text": " params: dict | None = None,\n headers: dict | None = None,\n json: dict | None = None,\n timeout: float = 30,\n max_retries: int = 3," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "6a99c28abeaf5b6e", - "equalIndicator/v1": "ebf3474d58dc030dcc473e7f9f935d09c80f4cfaf6effd3e7408951d3ac247f0" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/sandbox/modal_sandbox.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 17, - "startColumn": 19, - "charOffset": 446, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 15, - "startColumn": 1, - "charOffset": 358, - "charLength": 144, - "snippet": { - "text": " self._app = None\n self.image_name: str = \"python:3.12\"\n self.gpu: str | None = None\n self.packages: list[str] = []\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "5195f05ba86be4ad", - "equalIndicator/v1": "ecb9d3bfcb3528d5a1872440bf4b9f7b05bd07bb260717a97174e175e5eb9876" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 52, - "startColumn": 49, - "charOffset": 1808, - "charLength": 11, - "snippet": { - "text": "dict | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 50, - "startColumn": 1, - "charOffset": 1758, - "charLength": 162, - "snippet": { - "text": "\n\nasync def _get_author_info(db, conv_id: int) -> dict | None:\n \"\"\"Fetch author settings for the conversation's user.\"\"\"\n # Get conversation to find user_id" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "801c7c10add714da", - "equalIndicator/v1": "ed080ac87d9e0cbeb9fdd7234447636d744cce519d352ca3920a6b4664f3ae69" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 81, - "startColumn": 25, - "charOffset": 1956, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 79, - "startColumn": 1, - "charOffset": 1846, - "charLength": 157, - "snippet": { - "text": " semantic_scholar_api_key: str | None = None\n modal_token_id: str | None = None\n modal_token_secret: str | None = None\n\n# ---- Model Management ----" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "38c4a398a21b535e", - "equalIndicator/v1": "ef3490a041dd7a1d49b4bba5df91a34fe12f31b489993c806805785745581fd9" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 27, - "startColumn": 19, - "charOffset": 586, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 25, - "startColumn": 1, - "charOffset": 538, - "charLength": 103, - "snippet": { - "text": " id: int\n username: str\n display_name: str | None\n is_active: bool\n created_at: datetime" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "835fa50211e0ccef", - "equalIndicator/v1": "f8e69701eec89deb52637894f5a685faa1bf524189ab56712d942925c07e3435" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/plan.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 242, - "startColumn": 49, - "charOffset": 10905, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 240, - "startColumn": 1, - "charOffset": 10855, - "charLength": 165, - "snippet": { - "text": "\n\nasync def get_report_content(report_id: str) -> str | None:\n \"\"\"Retrieve a stored report by ID. Used by the API.\"\"\"\n session_factory = _get_session_factory()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "2ddd6349a8c0805e", - "equalIndicator/v1": "f9ed285fade52385e5b45af9765a2617af1285cfb4b0d3364160ff6cfb08f205" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/mcp.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 50, - "startColumn": 20, - "charOffset": 1423, - "charLength": 15, - "snippet": { - "text": "set[str] | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 48, - "startColumn": 1, - "charOffset": 1356, - "charLength": 116, - "snippet": { - "text": " mcp_configs: dict,\n tool_router,\n blocklist: set[str] | None = None,\n ) -> int:\n \"\"\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "1bc17079f0c0803d", - "equalIndicator/v1": "fa7dac714650dc2f3d2d18fd704992a01db76d04a3ff26e5daa7778f82296b8f" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyTypeHintsInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Type hint is invalid or refers to the expression which is not a correct type", - "markdown": "Type hint is invalid or refers to the expression which is not a correct type" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 36, - "startColumn": 11, - "charOffset": 789, - "charLength": 10, - "snippet": { - "text": "str | None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 34, - "startColumn": 1, - "charOffset": 707, - "charLength": 190, - "snippet": { - "text": " title: str | None = \"New conversation\"\n model: str | None = None\n mode: str | None = \"general\" # \"research\", \"writing\", \"coding\", \"general\"\n\nclass ConversationResponse(BaseModel):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4a7f6b701d2d66f3", - "equalIndicator/v1": "fd20b36a0c99d4b6321f3e37e57e06ece91170583596f90740ff1135b9690103" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnboundLocalVariableInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Local variable 'sm' might be referenced before assignment", - "markdown": "Local variable 'sm' might be referenced before assignment" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/compute_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 118, - "startColumn": 19, - "charOffset": 4109, - "charLength": 2, - "snippet": { - "text": "sm" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 116, - "startColumn": 1, - "charOffset": 4051, - "charLength": 113, - "snippet": { - "text": " except Exception as e:\n try:\n await sm.destroy()\n except Exception:\n pass" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "8de22eedad5ba621", - "equalIndicator/v1": "0e21ba0a72d3c5c123f3ef322e8f3a2ec91aa12e9774fe2f64d1a693ccaaa009" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "hasFixes": true, - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnboundLocalVariableInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "Local variable 'ops' might be referenced before assignment", - "markdown": "Local variable 'ops' might be referenced before assignment" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/services/session_manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 178, - "startColumn": 39, - "charOffset": 7316, - "charLength": 3, - "snippet": { - "text": "ops" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 176, - "startColumn": 1, - "charOffset": 7226, - "charLength": 183, - "snippet": { - "text": " if user_id and db:\n try:\n all_nodes = await ops.get_compute_nodes(db, user_id)\n except Exception:\n pass" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "f4045f309ec6c614", - "equalIndicator/v1": "55f15b91ea5271fcdcc82725e9ec2d3d21434201928c70eafd12ad9f4159b6d8" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "hasFixes": true, - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnreachableCodeInspection", - "kind": "fail", - "level": "warning", - "message": { - "text": "This code is unreachable", - "markdown": "This code is unreachable" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 347, - "startColumn": 17, - "charOffset": 13367, - "charLength": 5, - "snippet": { - "text": "yield" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 345, - "startColumn": 1, - "charOffset": 13303, - "charLength": 152, - "snippet": { - "text": " yield \"Hello\"\n if False:\n yield\n\n with patch(\"openmlr.agent.loop.LLMProvider.generate_stream\") as mock_str:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "ca13801d8bdc4f2b", - "equalIndicator/v1": "3d47b6916141a6e3821161bbe8fe84a747199e769193e06fc75f9915bb08969f" - }, - "properties": { - "ideaSeverity": "WARNING", - "qodanaSeverity": "High", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Local variable 'sandbox' value is not used", - "markdown": "Local variable 'sandbox' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_sandbox_manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 27, - "startColumn": 9, - "charOffset": 695, - "charLength": 7, - "snippet": { - "text": "sandbox" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 25, - "startColumn": 1, - "charOffset": 631, - "charLength": 179, - "snippet": { - "text": "\n async def test_create_then_destroy(self, manager):\n sandbox = await manager.create(\"local\")\n await manager.destroy()\n assert manager.get_active() is None" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "3057cc44d6961d79", - "equalIndicator/v1": "00b30f9074403423a1f992857f6f51c8b067b583890df8d148cdb3cdc7188b64" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "hasFixes": true, - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'config' value is not used", - "markdown": "Parameter 'config' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 360, - "startColumn": 41, - "charOffset": 13940, - "charLength": 6, - "snippet": { - "text": "config" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 358, - "startColumn": 1, - "charOffset": 13820, - "charLength": 187, - "snippet": { - "text": " tc = ToolCall(id=\"call_1\", name=\"search\", arguments={\"query\": \"test\"})\n\n async def mock_stream(messages, config, tools):\n yield \"Finding...\"\n yield tc" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "6dc3d0d4f0a412bd", - "equalIndicator/v1": "077d688d76d0f0f025e2ac714fe33eb1596d8faffe658932944e76df713469c6" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'config' value is not used", - "markdown": "Parameter 'config' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/compute/manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 44, - "startColumn": 38, - "charOffset": 1663, - "charLength": 12, - "snippet": { - "text": "config: dict" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 42, - "startColumn": 1, - "charOffset": 1601, - "charLength": 121, - "snippet": { - "text": " return True, \"\"\n\n def _validate_modal_config(self, config: dict) -> tuple[bool, str]:\n return True, \"\"\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4f2b112f538eada0", - "equalIndicator/v1": "095ea263da0abbb63d916cdda9d7997467e0b449bda399e2a4868f11f13cf671" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'session' value is not used", - "markdown": "Parameter 'session' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/sandbox_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 213, - "startColumn": 67, - "charOffset": 8838, - "charLength": 12, - "snippet": { - "text": "session=None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 211, - "startColumn": 1, - "charOffset": 8770, - "charLength": 175, - "snippet": { - "text": "\n\nasync def _handle_write(sandbox_manager, path: str, content: str, session=None, **kwargs) -> tuple[str, bool]:\n sandbox = sandbox_manager.get_active()\n if not sandbox:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "711eb4202d9c220d", - "equalIndicator/v1": "1448a7218b482cf552b6a4a17b158a9deb077706e839c8b844e6d10a242c4b0a" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'node' value is not used", - "markdown": "Parameter 'node' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/compute.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 380, - "startColumn": 28, - "charOffset": 12042, - "charLength": 4, - "snippet": { - "text": "node" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 378, - "startColumn": 1, - "charOffset": 12013, - "charLength": 79, - "snippet": { - "text": "\n\nasync def _test_modal_node(node):\n \"\"\"Test Modal connectivity.\"\"\"\n try:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "731a39b323dd3652", - "equalIndicator/v1": "1718fb76f5494c7b56e8b08058a7a2070b685fed01fbc36a0b3825fdf1aac3a6" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/sandbox_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 169, - "startColumn": 111, - "charOffset": 7108, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 167, - "startColumn": 1, - "charOffset": 6996, - "charLength": 205, - "snippet": { - "text": "\n\nasync def _handle_exec(sandbox_manager, command: str, timeout: int = 120, stream: bool = False, session=None, **kwargs) -> tuple[str, bool]:\n sandbox = sandbox_manager.get_active()\n if not sandbox:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "145552e9fbd7600d", - "equalIndicator/v1": "21aa3737f6d7aed995c3907bc3a1378e9d5d3740f5a301c69a2606ef74e482c0" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Local variable 'local1' value is not used", - "markdown": "Local variable 'local1' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_sandbox_manager.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 33, - "startColumn": 9, - "charOffset": 925, - "charLength": 6, - "snippet": { - "text": "local1" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 31, - "startColumn": 1, - "charOffset": 856, - "charLength": 200, - "snippet": { - "text": "\n async def test_create_replaces_existing(self, manager):\n local1 = await manager.create(\"local\")\n local2 = await manager.create(\"local\")\n assert manager.get_active() is local2" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "b353e3e46c32f778", - "equalIndicator/v1": "231acf8e6d43d6b66e289e52c3c873683d61c2d4ae109bef2db21c4271af5470" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "hasFixes": true, - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/github.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 169, - "startColumn": 55, - "charOffset": 6541, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 167, - "startColumn": 1, - "charOffset": 6456, - "charLength": 177, - "snippet": { - "text": "\nasync def _handle_list_repos(\n owner: str, sort: str = \"stars\", limit: int = 20, **kwargs\n) -> tuple[str, bool]:\n \"\"\"List repos for a GitHub user/org with retry logic.\"\"\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "a507d7dfbba59bdf", - "equalIndicator/v1": "24435b94079d4086f90b44a676fe137ad460d20d923b49a0a4e325fac2dcc9b2" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/sandbox_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 161, - "startColumn": 93, - "charOffset": 6724, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 159, - "startColumn": 1, - "charOffset": 6630, - "charLength": 194, - "snippet": { - "text": "\n\nasync def _handle_create(sandbox_manager, provider: str, config: dict = None, session=None, **kwargs) -> tuple[str, bool]:\n try:\n await sandbox_manager.create(provider, config or {})" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "882a3d6d4e8ad78e", - "equalIndicator/v1": "24be1f3677b977748fb5f258c57310674ca52020ad99925ce46c8c7cf5644408" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'tools' value is not used", - "markdown": "Parameter 'tools' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 360, - "startColumn": 49, - "charOffset": 13948, - "charLength": 5, - "snippet": { - "text": "tools" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 358, - "startColumn": 1, - "charOffset": 13820, - "charLength": 187, - "snippet": { - "text": " tc = ToolCall(id=\"call_1\", name=\"search\", arguments={\"query\": \"test\"})\n\n async def mock_stream(messages, config, tools):\n yield \"Finding...\"\n yield tc" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "07b815c46985d6f6", - "equalIndicator/v1": "25586f709be64b81be5942be675cf1d82048d57e49d9a4db42a006e4a2933129" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/sandbox_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 213, - "startColumn": 81, - "charOffset": 8852, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 211, - "startColumn": 1, - "charOffset": 8770, - "charLength": 175, - "snippet": { - "text": "\n\nasync def _handle_write(sandbox_manager, path: str, content: str, session=None, **kwargs) -> tuple[str, bool]:\n sandbox = sandbox_manager.get_active()\n if not sandbox:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "0ccbb2fc6ebef5e7", - "equalIndicator/v1": "264b55865619e72db82cece9d58372337e8c307935fda517aef3b5c05e2c53dc" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/local.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 338, - "startColumn": 96, - "charOffset": 13061, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 336, - "startColumn": 1, - "charOffset": 12964, - "charLength": 177, - "snippet": { - "text": "\n\nasync def _handle_edit(path: str, old_string: str, new_string: str, replace_all: bool = False, **kwargs) -> tuple[str, bool]:\n try:\n target = Path(path).expanduser()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "1fb8f5889c195742", - "equalIndicator/v1": "3168d042435ed76d915c72a7f1ba223da4302462265ae524196cc3d3b8472d91" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 184, - "startColumn": 5, - "charOffset": 6996, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 182, - "startColumn": 1, - "charOffset": 6947, - "charLength": 117, - "snippet": { - "text": " citation: dict = None,\n session=None,\n **kwargs,\n) -> tuple[str, bool]:\n \"\"\"Route writing operations.\"\"\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "983b62cc2a3b7954", - "equalIndicator/v1": "329c1f8ad9c8a31ebe200e0bd13d8e42a78a39d833b9097688d5cc2f38bc0b71" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/github.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 216, - "startColumn": 60, - "charOffset": 8067, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 214, - "startColumn": 1, - "charOffset": 7974, - "charLength": 184, - "snippet": { - "text": "\nasync def _handle_find_examples(\n query: str, language: str = \"python\", limit: int = 10, **kwargs\n) -> tuple[str, bool]:\n \"\"\"Search GitHub for code examples with retry logic.\"\"\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4750500d3cb8e80c", - "equalIndicator/v1": "33fd91c60a77f350bf4511952fcc9836e07b1778ba11b9dc888c26b1b3ff10f8" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'tools' value is not used", - "markdown": "Parameter 'tools' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 344, - "startColumn": 49, - "charOffset": 13295, - "charLength": 5, - "snippet": { - "text": "tools" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 342, - "startColumn": 1, - "charOffset": 13192, - "charLength": 158, - "snippet": { - "text": " mock_session.is_cancelled.return_value = True\n\n async def mock_stream(messages, config, tools):\n yield \"Hello\"\n if False:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "445ffb8c2b8f91ab", - "equalIndicator/v1": "38cb7c91f04eed3b01d3be988848d389f372552d8dded726fa95796432131caa" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'messages' value is not used", - "markdown": "Parameter 'messages' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 344, - "startColumn": 31, - "charOffset": 13277, - "charLength": 8, - "snippet": { - "text": "messages" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 342, - "startColumn": 1, - "charOffset": 13192, - "charLength": 158, - "snippet": { - "text": " mock_session.is_cancelled.return_value = True\n\n async def mock_stream(messages, config, tools):\n yield \"Hello\"\n if False:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "15d1ed872a5ed824", - "equalIndicator/v1": "398d0352d6ce3948f1e656ef18ec382e80389468eb8b9f22d05e01864e600f11" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'config' value is not used", - "markdown": "Parameter 'config' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 344, - "startColumn": 41, - "charOffset": 13287, - "charLength": 6, - "snippet": { - "text": "config" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 342, - "startColumn": 1, - "charOffset": 13192, - "charLength": 158, - "snippet": { - "text": " mock_session.is_cancelled.return_value = True\n\n async def mock_stream(messages, config, tools):\n yield \"Hello\"\n if False:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "b05c73b25fa04695", - "equalIndicator/v1": "3bfafd4ee391e824b828c4499061ee2ae9fb85bfb0eaaf24cb54a36411ee91b6" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/compute_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 152, - "startColumn": 92, - "charOffset": 5420, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 150, - "startColumn": 1, - "charOffset": 5327, - "charLength": 172, - "snippet": { - "text": "\n\nasync def _handle_plan(task: str, requirements: dict = None, user_id: int = None, db=None, **kwargs):\n \"\"\"Recommend the best compute node for a task.\"\"\"\n if not db:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "17f67062f5ce96fc", - "equalIndicator/v1": "3e1adc52bf1de0ae5d030aa84f2621ec35ab04fe8fbd5ba853ab03cdbd471c90" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/papers.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 158, - "startColumn": 5, - "charOffset": 6082, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 156, - "startColumn": 1, - "charOffset": 6034, - "charLength": 126, - "snippet": { - "text": " source: str = \"auto\",\n session=None,\n **kwargs,\n) -> tuple[str, bool]:\n # Budget check for API-calling operations" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "cf2bb222da8942c2", - "equalIndicator/v1": "3e35584c897bc2109aff6c743909031e5b37841f65aaa791c13ada7b3c829fed" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'session' value is not used", - "markdown": "Parameter 'session' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/sandbox_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 200, - "startColumn": 52, - "charOffset": 8405, - "charLength": 12, - "snippet": { - "text": "session=None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 198, - "startColumn": 1, - "charOffset": 8352, - "charLength": 160, - "snippet": { - "text": "\n\nasync def _handle_read(sandbox_manager, path: str, session=None, **kwargs) -> tuple[str, bool]:\n sandbox = sandbox_manager.get_active()\n if not sandbox:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "812ee0c52a47f51e", - "equalIndicator/v1": "3e833ace3dd145a32c811b080746cf9ee8f92a89c82ba1a1723eeb3122a1095e" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'user_id' value is not used", - "markdown": "Parameter 'user_id' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/compute_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 240, - "startColumn": 29, - "charOffset": 8216, - "charLength": 7, - "snippet": { - "text": "user_id" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 238, - "startColumn": 1, - "charOffset": 8186, - "charLength": 168, - "snippet": { - "text": "\n\nasync def _get_sync_context(user_id, db, session):\n \"\"\"Helper: resolve conversation UUID and workspace path for sync ops.\"\"\"\n from ..db import operations as ops" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "963bafc7ffaaae47", - "equalIndicator/v1": "3ed58638ecc62d0580c73f8cc0fffa2559415880a219e0b1cba7f01849953f14" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'config' value is not used", - "markdown": "Parameter 'config' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 329, - "startColumn": 41, - "charOffset": 12716, - "charLength": 6, - "snippet": { - "text": "config" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 327, - "startColumn": 1, - "charOffset": 12601, - "charLength": 183, - "snippet": { - "text": " mock_session.config = AgentConfig(model_name=\"test\", stream=True)\n\n async def mock_stream(messages, config, tools):\n yield \"Hello\"\n yield \" world\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "64dd21c4c872501d", - "equalIndicator/v1": "3fa951cc42a44b9026080c8f5c59c2ff740f63799817ffe8135424534034b655" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Local variable 'iteration' value is not used", - "markdown": "Local variable 'iteration' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 66, - "startColumn": 13, - "charOffset": 2545, - "charLength": 9, - "snippet": { - "text": "iteration" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 64, - "startColumn": 1, - "charOffset": 2523, - "charLength": 184, - "snippet": { - "text": "\n try:\n for iteration in range(session.config.max_iterations):\n if session.is_cancelled():\n await session.emit(AgentEvent(event_type=\"interrupted\"))" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "f4466fe16ef10dc4", - "equalIndicator/v1": "43afbf4235bfcc3188694c85b773f3d385ddee552977aa569f21fe3a99630f05" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "hasFixes": true, - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'session' value is not used", - "markdown": "Parameter 'session' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/sandbox_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 161, - "startColumn": 79, - "charOffset": 6710, - "charLength": 12, - "snippet": { - "text": "session=None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 159, - "startColumn": 1, - "charOffset": 6630, - "charLength": 194, - "snippet": { - "text": "\n\nasync def _handle_create(sandbox_manager, provider: str, config: dict = None, session=None, **kwargs) -> tuple[str, bool]:\n try:\n await sandbox_manager.create(provider, config or {})" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "28222e623a8b19b9", - "equalIndicator/v1": "482d1832eb3abc9636252c812b3b0f96fca887c42294577245103b57d79a367b" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/compute_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 23, - "startColumn": 54, - "charOffset": 714, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 21, - "startColumn": 1, - "charOffset": 659, - "charLength": 132, - "snippet": { - "text": "\n\nasync def _handle_list(user_id: int = None, db=None, **kwargs):\n \"\"\"List all compute nodes with capabilities.\"\"\"\n if not db:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "fa37dc62ee753889", - "equalIndicator/v1": "48f82d96228ef072bec941a0a2e74fb6df5d8dd69398181a1955c44f42e5a0d5" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'user' value is not used", - "markdown": "Parameter 'user' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/agent.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 488, - "startColumn": 5, - "charOffset": 15987, - "charLength": 38, - "snippet": { - "text": "user: User = Depends(get_current_user)" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 486, - "startColumn": 1, - "charOffset": 15935, - "charLength": 134, - "snippet": { - "text": "async def submit_answers(\n request: Request,\n user: User = Depends(get_current_user),\n db: AsyncSession = Depends(get_db),\n):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4836248a1e0b433d", - "equalIndicator/v1": "4b7cfaa4463d88371048d8d39ade76ea5cee088822246b4398fa8f643f5b6666" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'messages' value is not used", - "markdown": "Parameter 'messages' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 360, - "startColumn": 31, - "charOffset": 13930, - "charLength": 8, - "snippet": { - "text": "messages" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 358, - "startColumn": 1, - "charOffset": 13820, - "charLength": 187, - "snippet": { - "text": " tc = ToolCall(id=\"call_1\", name=\"search\", arguments={\"query\": \"test\"})\n\n async def mock_stream(messages, config, tools):\n yield \"Finding...\"\n yield tc" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "93ad312a52b34217", - "equalIndicator/v1": "557a3d51e968a6b6725b19b3a14ae4f84a63655f22b38d9ab180322cd52b1095" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/compute_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 128, - "startColumn": 86, - "charOffset": 4436, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 126, - "startColumn": 1, - "charOffset": 4349, - "charLength": 177, - "snippet": { - "text": "\n\nasync def _handle_select(node_name: str, user_id: int = None, db=None, session=None, **kwargs):\n \"\"\"Select a compute node as active for this conversation.\"\"\"\n if not db:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "eaea1722fc19b5e1", - "equalIndicator/v1": "56977e814d318196e7992189dbc91a6243ff051703f2f3c2731ce15f96bc85f4" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'arg2' value is not used", - "markdown": "Parameter 'arg2' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_types.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 38, - "startColumn": 38, - "charOffset": 1104, - "charLength": 13, - "snippet": { - "text": "arg2: int = 0" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 36, - "startColumn": 1, - "charOffset": 1024, - "charLength": 157, - "snippet": { - "text": "\n def test_creation_with_handler(self):\n async def handler(arg1: str, arg2: int = 0) -> tuple[str, bool]:\n return f\"done: {arg1}\", True\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "bcfaa5bbe38ba666", - "equalIndicator/v1": "5f1b7d998e22ef07a244e410ecaf91689b23ee4a54628b548cf753c5c1369a4d" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'user' value is not used", - "markdown": "Parameter 'user' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/agent.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 571, - "startColumn": 34, - "charOffset": 19183, - "charLength": 38, - "snippet": { - "text": "user: User = Depends(get_current_user)" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 569, - "startColumn": 1, - "charOffset": 19127, - "charLength": 159, - "snippet": { - "text": "\n@router.post(\"/undo\")\nasync def undo(request: Request, user: User = Depends(get_current_user)):\n active = _sm(request).get_current_session()\n if active:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "b07235a4355d0d45", - "equalIndicator/v1": "5f283c179c412de23beba3f9bd23444434cf4af936170cb27b30a0594e864e67" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'user' value is not used", - "markdown": "Parameter 'user' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/agent.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 460, - "startColumn": 5, - "charOffset": 15087, - "charLength": 38, - "snippet": { - "text": "user: User = Depends(get_current_user)" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 458, - "startColumn": 1, - "charOffset": 15044, - "charLength": 125, - "snippet": { - "text": "async def cancel_job(\n job_id: str,\n user: User = Depends(get_current_user),\n db: AsyncSession = Depends(get_db),\n):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "407bc70274ae5fb6", - "equalIndicator/v1": "5fed10c13bba6d0a83215f4b0779b69a42db63edf65bab1c2843635885c401c3" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/github.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 123, - "startColumn": 58, - "charOffset": 4948, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 121, - "startColumn": 1, - "charOffset": 4861, - "charLength": 170, - "snippet": { - "text": "\nasync def _handle_read_file(\n owner: str, repo: str, path: str, ref: str = \"main\", **kwargs\n) -> tuple[str, bool]:\n \"\"\"Read a file from GitHub with retry logic.\"\"\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "dcca77e789b7f95e", - "equalIndicator/v1": "608c72e5a88d236111425bab746c7a0c854c8f9818770c66d871812437e53d6e" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'config' value is not used", - "markdown": "Parameter 'config' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/agent/prompts.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 29, - "startColumn": 5, - "charOffset": 813, - "charLength": 33, - "snippet": { - "text": "config: AgentConfig | None = None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 27, - "startColumn": 1, - "charOffset": 750, - "charLength": 166, - "snippet": { - "text": " sandbox_info: str = \"none\",\n compute_env: str = \"\",\n config: AgentConfig | None = None,\n) -> str:\n \"\"\"Build the full system prompt from YAML template.\"\"\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "0ca32424b87234ee", - "equalIndicator/v1": "645e7479ea4cbec7f3ee5ac6a60e6d7bad91e7a174b4a884e3e5f1c38b8881fe" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'tmp_path' value is not used", - "markdown": "Parameter 'tmp_path' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_local.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 240, - "startColumn": 78, - "charOffset": 8884, - "charLength": 8, - "snippet": { - "text": "tmp_path" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 238, - "startColumn": 1, - "charOffset": 8759, - "charLength": 269, - "snippet": { - "text": " assert _running_in_container() is True\n\n def test_dockerenv_file_not_present_outside_container(self, monkeypatch, tmp_path):\n # When /.dockerenv doesn't exist and no other indicators\n monkeypatch.delenv(\"KUBERNETES_SERVICE_HOST\", raising=False)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "b8cfb8557feda3be", - "equalIndicator/v1": "6f58f30ae5961721a6ad7da597045ec8cde5d951f1b0e9c17db1a6e36074ed8e" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/github.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 265, - "startColumn": 5, - "charOffset": 9617, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 263, - "startColumn": 1, - "charOffset": 9567, - "charLength": 136, - "snippet": { - "text": " sort: str = \"stars\",\n limit: int = 10,\n **kwargs\n) -> tuple[str, bool]:\n \"\"\"Search GitHub repositories with retry logic.\"\"\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "64075f955fa4a1a3", - "equalIndicator/v1": "70c3bfafcba25e88ce893f4669be8cdeb735f539d7c6c7f7c52dfe0e8b203d94" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'user' value is not used", - "markdown": "Parameter 'user' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/agent.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 431, - "startColumn": 5, - "charOffset": 14163, - "charLength": 38, - "snippet": { - "text": "user: User = Depends(get_current_user)" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 429, - "startColumn": 1, - "charOffset": 14116, - "charLength": 129, - "snippet": { - "text": "async def get_job_status(\n job_id: str,\n user: User = Depends(get_current_user),\n db: AsyncSession = Depends(get_db),\n):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "34ca5fe48f0001ec", - "equalIndicator/v1": "79444cd41100bdcab1c265e2df87e5d68dee0c80148fef995489722c6f746d81" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'db' value is not used", - "markdown": "Parameter 'db' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/agent.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 489, - "startColumn": 5, - "charOffset": 16031, - "charLength": 34, - "snippet": { - "text": "db: AsyncSession = Depends(get_db)" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 487, - "startColumn": 1, - "charOffset": 15961, - "charLength": 177, - "snippet": { - "text": " request: Request,\n user: User = Depends(get_current_user),\n db: AsyncSession = Depends(get_db),\n):\n \"\"\"Submit answers to structured questions from ask_user tool.\"\"\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "f1dd77cfe3b801f7", - "equalIndicator/v1": "7b716a247d8996e02f18a09e649eae4018c1cc8810261e9e1e121d93584e9cd3" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'messages' value is not used", - "markdown": "Parameter 'messages' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 329, - "startColumn": 31, - "charOffset": 12706, - "charLength": 8, - "snippet": { - "text": "messages" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 327, - "startColumn": 1, - "charOffset": 12601, - "charLength": 183, - "snippet": { - "text": " mock_session.config = AgentConfig(model_name=\"test\", stream=True)\n\n async def mock_stream(messages, config, tools):\n yield \"Hello\"\n yield \" world\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "bd028cfa35c1b500", - "equalIndicator/v1": "81fb0419d8d01163ee1b217e56ba9937eb4184942c1e04b90aef07b26bf60af4" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'request' value is not used", - "markdown": "Parameter 'request' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/app.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 89, - "startColumn": 36, - "charOffset": 2862, - "charLength": 16, - "snippet": { - "text": "request: Request" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 87, - "startColumn": 1, - "charOffset": 2734, - "charLength": 222, - "snippet": { - "text": "# ── Global error handler ────────────────────────────────\n@app.exception_handler(Exception)\nasync def global_exception_handler(request: Request, exc: Exception):\n import logging\n logger = logging.getLogger(__name__)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "f4b7f6cc95dbd939", - "equalIndicator/v1": "8278142c79ae8c64f394f81809e38523d8f89a29ce7644a4109760b1e65681ea" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'project_id' value is not used", - "markdown": "Parameter 'project_id' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/writing.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 176, - "startColumn": 5, - "charOffset": 6795, - "charLength": 22, - "snippet": { - "text": "project_id: str = None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 174, - "startColumn": 1, - "charOffset": 6744, - "charLength": 123, - "snippet": { - "text": "async def _handle_writing(\n operation: str,\n project_id: str = None,\n title: str = None,\n outline: list = None," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "c8637f50e3072632", - "equalIndicator/v1": "8c44d610ba7e1dd96f5357c10c8c88459eefaf7cdd8608af0369be19d24ae881" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'tools' value is not used", - "markdown": "Parameter 'tools' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_agent_loop.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 329, - "startColumn": 49, - "charOffset": 12724, - "charLength": 5, - "snippet": { - "text": "tools" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 327, - "startColumn": 1, - "charOffset": 12601, - "charLength": 183, - "snippet": { - "text": " mock_session.config = AgentConfig(model_name=\"test\", stream=True)\n\n async def mock_stream(messages, config, tools):\n yield \"Hello\"\n yield \" world\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "0f2bf85e934d8b9e", - "equalIndicator/v1": "8cd7629865d54a6183f025d76f174c755c0c4aba0240e1890845dff0a7df198b" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/local.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 167, - "startColumn": 79, - "charOffset": 6507, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 165, - "startColumn": 1, - "charOffset": 6427, - "charLength": 181, - "snippet": { - "text": "\n\nasync def _handle_bash(command: str, timeout: int = 120, workdir: str = None, **kwargs) -> tuple[str, bool]:\n timeout = min(int(timeout), 3600)\n cwd = workdir or os.getcwd()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "61d18662b6dbdd9c", - "equalIndicator/v1": "8f4d2a0abd939ad5d69b56ae7cbbd660d4bff9c4d56653c4aa62b189ec9a5ab3" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/ask_user.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 72, - "startColumn": 5, - "charOffset": 3028, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 70, - "startColumn": 1, - "charOffset": 2976, - "charLength": 141, - "snippet": { - "text": " suggest_mode: str = None,\n session=None,\n **kwargs,\n) -> tuple[str, bool]:\n \"\"\"Emit questions to the UI and wait for answers.\"\"\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "713a043e053605f6", - "equalIndicator/v1": "9134e60a361af99a9bbf2fce36274fa71a038a3963a11c81340744865c288d2e" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'e' value is not used", - "markdown": "Parameter 'e' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_session.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 103, - "startColumn": 26, - "charOffset": 3349, - "charLength": 1, - "snippet": { - "text": "e" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 101, - "startColumn": 1, - "charOffset": 3244, - "charLength": 148, - "snippet": { - "text": " \"\"\"A failing listener must not prevent the event from being queued.\"\"\"\n\n def bad_listener(e):\n raise RuntimeError(\"boom\")\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "3f07d5f6f31d15df", - "equalIndicator/v1": "96510b468bba69161e3c2183c2a7340a845a18da762bc3d566f8d490dfbdae9b" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/compute_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 56, - "startColumn": 71, - "charOffset": 1842, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 54, - "startColumn": 1, - "charOffset": 1770, - "charLength": 146, - "snippet": { - "text": "\n\nasync def _handle_probe(node_name: str, user_id: int = None, db=None, **kwargs):\n \"\"\"Probe a compute node for capabilities.\"\"\"\n if not db:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "313a30ca7504afa9", - "equalIndicator/v1": "9663079a3b752377ebdddea4aa80a174ffeafcbf4747a817699f1b55ff5c50f7" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'required_arg' value is not used", - "markdown": "Parameter 'required_arg' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tool_registry.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 118, - "startColumn": 27, - "charOffset": 3292, - "charLength": 17, - "snippet": { - "text": "required_arg: str" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 116, - "startColumn": 1, - "charOffset": 3210, - "charLength": 152, - "snippet": { - "text": "\n async def test_call_tool_type_error(self, router):\n async def handler(required_arg: str) -> tuple[str, bool]:\n return \"ok\", True\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "b02618216bb2c4a6", - "equalIndicator/v1": "9e2f1cba8060fc061cde4e25f286b9a969d455f22de740bca680f03e8418ae9c" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'self' value is not used", - "markdown": "Parameter 'self' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tasks/compute_tasks.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 50, - "startColumn": 31, - "charOffset": 1605, - "charLength": 4, - "snippet": { - "text": "self" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 48, - "startColumn": 1, - "charOffset": 1531, - "charLength": 181, - "snippet": { - "text": "\n@celery_app.task(bind=True, max_retries=3)\ndef check_compute_node_health(self, node_id: int, user_id: int):\n \"\"\"Check health of a single compute node.\"\"\"\n async def _check():" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "07c15f6bfbd706a4", - "equalIndicator/v1": "9fda32804bc63c271e42b14662f3af847287ffa39cb07169d635c058fc7bc089" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/compute_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 330, - "startColumn": 102, - "charOffset": 11911, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 328, - "startColumn": 1, - "charOffset": 11808, - "charLength": 194, - "snippet": { - "text": "\n\nasync def _handle_sync_down(paths: list, node_name: str, user_id: int = None, db=None, session=None, **kwargs):\n \"\"\"Sync files from remote compute node to local workspace.\"\"\"\n if not db:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "dfca6fc07c5dcc8d", - "equalIndicator/v1": "a508ffd09c9ec32831efdc0ecf6d23b36a8c185ff8f3a55cb6537f0bc8f746b8" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'user_id' value is not used", - "markdown": "Parameter 'user_id' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tasks/agent_tasks.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 67, - "startColumn": 5, - "charOffset": 1827, - "charLength": 12, - "snippet": { - "text": "user_id: int" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 65, - "startColumn": 1, - "charOffset": 1780, - "charLength": 93, - "snippet": { - "text": " job_id: str,\n conversation_id: int,\n user_id: int,\n message: str,\n mode: str," - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "467b133655c85337", - "equalIndicator/v1": "a858a459cb0ead37c26ca38f27b26827159ba6fdc5371accd016e29f27cfa4fa" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'user' value is not used", - "markdown": "Parameter 'user' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/agent.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 475, - "startColumn": 5, - "charOffset": 15578, - "charLength": 38, - "snippet": { - "text": "user: User = Depends(get_current_user)" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 473, - "startColumn": 1, - "charOffset": 15532, - "charLength": 129, - "snippet": { - "text": "async def get_report(\n report_id: str,\n user: User = Depends(get_current_user),\n):\n \"\"\"Get a completion report by ID.\"\"\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4d7da52b6426a5b0", - "equalIndicator/v1": "b02fe3c6e3cd37b875297c12b076823c656e8c46e759b0ce9df1a76986a39d79" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'client' value is not used", - "markdown": "Parameter 'client' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/sandbox/ssh.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 21, - "startColumn": 32, - "charOffset": 590, - "charLength": 6, - "snippet": { - "text": "client" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 19, - "startColumn": 1, - "charOffset": 507, - "charLength": 175, - "snippet": { - "text": " self.actual_fingerprint: str | None = None\n\n def missing_host_key(self, client, hostname, key):\n import paramiko\n actual = key.get_fingerprint().hex()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "3b49c426bf5d50f6", - "equalIndicator/v1": "b15f4209041396b332c4e3c8a89528e910e5134b020cff5800ce1901c2dc4c82" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'user' value is not used", - "markdown": "Parameter 'user' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/agent.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 517, - "startColumn": 5, - "charOffset": 17036, - "charLength": 38, - "snippet": { - "text": "user: User = Depends(get_current_user)" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 515, - "startColumn": 1, - "charOffset": 16989, - "charLength": 129, - "snippet": { - "text": "async def interrupt(\n request: Request,\n user: User = Depends(get_current_user),\n db: AsyncSession = Depends(get_db),\n):" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "a0f7c5d022f68247", - "equalIndicator/v1": "b46a76f28afc0472a1c49f50acc391b97633ee444d87085773deca38dbf690ab" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'user' value is not used", - "markdown": "Parameter 'user' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/agent.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 580, - "startColumn": 37, - "charOffset": 19449, - "charLength": 38, - "snippet": { - "text": "user: User = Depends(get_current_user)" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 578, - "startColumn": 1, - "charOffset": 19387, - "charLength": 165, - "snippet": { - "text": "\n@router.post(\"/compact\")\nasync def compact(request: Request, user: User = Depends(get_current_user)):\n active = _sm(request).get_current_session()\n if active:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "89dcee9192f43c24", - "equalIndicator/v1": "bbf629207a133c4492724bc0ffbc36a7c4db4cd4a42c568c27bbba6f0eaa6be6" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'session' value is not used", - "markdown": "Parameter 'session' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/sandbox_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 102, - "startColumn": 42, - "charOffset": 4425, - "charLength": 12, - "snippet": { - "text": "session=None" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 100, - "startColumn": 1, - "charOffset": 4382, - "charLength": 150, - "snippet": { - "text": "\n\nasync def _handle_probe(sandbox_manager, session=None, **kwargs) -> tuple[str, bool]:\n sandbox = sandbox_manager.get_active()\n if not sandbox:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "e96ac1118fd09791", - "equalIndicator/v1": "be72434034f76223d4c3f89925446bf5cfeeae97a8a0b978f75fdd5307197187" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/sandbox_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 200, - "startColumn": 66, - "charOffset": 8419, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 198, - "startColumn": 1, - "charOffset": 8352, - "charLength": 160, - "snippet": { - "text": "\n\nasync def _handle_read(sandbox_manager, path: str, session=None, **kwargs) -> tuple[str, bool]:\n sandbox = sandbox_manager.get_active()\n if not sandbox:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "3aa82d44d47268f7", - "equalIndicator/v1": "c624a60d6d84d853f2170790cb698f4986310883360aa5cba56c43b145ca983a" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/sandbox_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 102, - "startColumn": 56, - "charOffset": 4439, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 100, - "startColumn": 1, - "charOffset": 4382, - "charLength": 150, - "snippet": { - "text": "\n\nasync def _handle_probe(sandbox_manager, session=None, **kwargs) -> tuple[str, bool]:\n sandbox = sandbox_manager.get_active()\n if not sandbox:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "605aa77fd3afb9f7", - "equalIndicator/v1": "c8297c95a30e3b56a8c452c23d44c7873503322fa1ced645fd148df5e7cd0f57" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Local variable 'iteration' value is not used", - "markdown": "Local variable 'iteration' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/research.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 105, - "startColumn": 13, - "charOffset": 3500, - "charLength": 9, - "snippet": { - "text": "iteration" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 103, - "startColumn": 1, - "charOffset": 3478, - "charLength": 176, - "snippet": { - "text": "\n try:\n for iteration in range(MAX_RESEARCH_ITERATIONS):\n # Make LLM call\n result = await LLMProvider.generate(messages, config, research_tools)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "385abbb60ca7d138", - "equalIndicator/v1": "ca72ca34a35f872f010763c802e5ed61d80391acaf0e7d805f8cde31ce785a83" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "hasFixes": true, - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'user' value is not used", - "markdown": "Parameter 'user' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/compute.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 212, - "startColumn": 5, - "charOffset": 6808, - "charLength": 38, - "snippet": { - "text": "user: User = Depends(get_current_user)" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 210, - "startColumn": 1, - "charOffset": 6754, - "charLength": 149, - "snippet": { - "text": "async def test_node_config(\n request: Request,\n user: User = Depends(get_current_user),\n):\n \"\"\"Test connectivity for an unsaved node config." - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "419ef92768a3cdd9", - "equalIndicator/v1": "cace491dfe5fa04dd9e39b08cf001391d8e7200e22c4ea37550449e78b088315" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/local.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 276, - "startColumn": 71, - "charOffset": 10728, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 274, - "startColumn": 1, - "charOffset": 10597, - "charLength": 211, - "snippet": { - "text": "# ── File tools (host filesystem) ─────────────────────────\n\nasync def _handle_read(path: str, offset: int = 1, limit: int = 2000, **kwargs) -> tuple[str, bool]:\n try:\n target = Path(path).expanduser()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "97e6da445ada68a4", - "equalIndicator/v1": "cd9b9b195fc38e2ae7ed71ffd4153af5b339f98b859aa08f84cee8884208b3d0" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/github.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 326, - "startColumn": 28, - "charOffset": 11445, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 324, - "startColumn": 1, - "charOffset": 11387, - "charLength": 153, - "snippet": { - "text": "\nasync def _handle_get_readme(\n owner: str, repo: str, **kwargs\n) -> tuple[str, bool]:\n \"\"\"Get README from a GitHub repository with retry logic.\"\"\"" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4d5b49d9badfb786", - "equalIndicator/v1": "cf0663c694146ccf4a7c5db452105f4994e6014ddbc7fef4771e38a7ab08b933" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Local variable 'cwd' value is not used", - "markdown": "Local variable 'cwd' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_tools_local.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 61, - "startColumn": 9, - "charOffset": 1866, - "charLength": 3, - "snippet": { - "text": "cwd" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 59, - "startColumn": 1, - "charOffset": 1791, - "charLength": 181, - "snippet": { - "text": "class TestValidatePath:\n def test_resolves_relative_path(self):\n cwd = os.getcwd()\n path = Path(\".\", \"test_file.txt\")\n resolved, error = _validate_path(path)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "63f0a914e7deb3c8", - "equalIndicator/v1": "cf635d3afa9e2b5f7cca795edcff4e1da61e0ffad4f3459dc572ea19e1932935" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "hasFixes": true, - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Local variable 'param_count' value is not used", - "markdown": "Local variable 'param_count' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/benchmark_small_models.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 64, - "startColumn": 5, - "charOffset": 1504, - "charLength": 11, - "snippet": { - "text": "param_count" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 62, - "startColumn": 1, - "charOffset": 1433, - "charLength": 240, - "snippet": { - "text": "def get_model_size(model) -> float:\n \"\"\"Get model size in MB\"\"\"\n param_count = sum(p.numel() for p in model.parameters())\n param_size = sum(p.numel() * p.element_size() for p in model.parameters())\n return param_size / (1024**2)" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "2d24d066f304a482", - "equalIndicator/v1": "d09a4d4bb86023ff865d3a48fb28bcab3941a4eec7fc8528f29b0ceef2b8ca6c" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "hasFixes": true, - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Local variable 'q2' value is not used", - "markdown": "Local variable 'q2' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_event_bus.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 32, - "startColumn": 9, - "charOffset": 922, - "charLength": 2, - "snippet": { - "text": "q2" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 30, - "startColumn": 1, - "charOffset": 844, - "charLength": 140, - "snippet": { - "text": " q1 = bus.subscribe()\n assert bus.subscriber_count == 1\n q2 = bus.subscribe()\n assert bus.subscriber_count == 2\n" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "4bf2ba19370de7e2", - "equalIndicator/v1": "d1d1f20188925e569e77f349fe50bb1a30bd7f9c393ac847d7fde8ffac2cd900" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "hasFixes": true, - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'request' value is not used", - "markdown": "Parameter 'request' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/agent.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 77, - "startColumn": 23, - "charOffset": 2440, - "charLength": 16, - "snippet": { - "text": "request: Request" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 75, - "startColumn": 1, - "charOffset": 2389, - "charLength": 168, - "snippet": { - "text": "\n@router.get(\"/events/test\")\nasync def events_test(request: Request):\n \"\"\"Test SSE endpoint — sends 3 events then closes. Use to verify SSE works.\"\"\"\n import json" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "a35b985147c6435f", - "equalIndicator/v1": "d36dbcda795ea17198649fce33d32d4ee6b636155b232af08f74a666c9ff70b3" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/compute_tools.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 256, - "startColumn": 100, - "charOffset": 8907, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 254, - "startColumn": 1, - "charOffset": 8806, - "charLength": 192, - "snippet": { - "text": "\n\nasync def _handle_sync_up(paths: list, node_name: str, user_id: int = None, db=None, session=None, **kwargs):\n \"\"\"Sync files from local workspace to remote compute node.\"\"\"\n if not db:" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "0f7b523cdc891168", - "equalIndicator/v1": "d8ee0b99be3f9aa0aee2aa25cb6d174ec44d413f8cee69184a4b5a0093c6a8a4" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'user' value is not used", - "markdown": "Parameter 'user' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/routes/agent.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 559, - "startColumn": 5, - "charOffset": 18790, - "charLength": 38, - "snippet": { - "text": "user: User = Depends(get_current_user)" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 557, - "startColumn": 1, - "charOffset": 18737, - "charLength": 143, - "snippet": { - "text": " body: ApprovalRequest,\n request: Request,\n user: User = Depends(get_current_user),\n):\n active = _sm(request).get_current_session()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "831de34996348df8", - "equalIndicator/v1": "e0f3aa6ba516ebc7db4b91c017ef65aa10bef2480eb2cee37fb62225f8df0ee8" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/plan.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 89, - "startColumn": 5, - "charOffset": 3783, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 87, - "startColumn": 1, - "charOffset": 3736, - "charLength": 118, - "snippet": { - "text": " content: str = None,\n session=None,\n **kwargs,\n) -> tuple[str, bool]:\n # Get conversation_id from session" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "f4101b7399aea380", - "equalIndicator/v1": "ea7dafb465701b27603c2f6f85ffe3c6cabdda2d242140d8e119bad48b67d5dd" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Local variable 'q1' value is not used", - "markdown": "Local variable 'q1' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/tests/test_event_bus.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 30, - "startColumn": 9, - "charOffset": 852, - "charLength": 2, - "snippet": { - "text": "q1" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 28, - "startColumn": 1, - "charOffset": 738, - "charLength": 204, - "snippet": { - "text": " def test_subscribe_adds_to_subscribers(self, bus: EventBus):\n assert bus.subscriber_count == 0\n q1 = bus.subscribe()\n assert bus.subscriber_count == 1\n q2 = bus.subscribe()" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "2a88a3d6a5f20bb8", - "equalIndicator/v1": "f8cb925ac235cc3c9cc188c2bac4ebb1f0f4b6208ddfaeb6c4520745f54c8ee4" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "hasFixes": true, - "tags": ["Python"] - } - }, - { - "ruleId": "PyUnusedLocalInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "Parameter 'kwargs' value is not used", - "markdown": "Parameter 'kwargs' value is not used" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "backend/openmlr/tools/search.py", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 34, - "startColumn": 58, - "charOffset": 1038, - "charLength": 8, - "snippet": { - "text": "**kwargs" - }, - "sourceLanguage": "Python" - }, - "contextRegion": { - "startLine": 32, - "startColumn": 1, - "charOffset": 979, - "charLength": 197, - "snippet": { - "text": "\n\nasync def _handle_web_search(query: str, count: int = 5, **kwargs) -> tuple[str, bool]:\n \"\"\"Search the web using Brave Search with retry logic.\"\"\"\n api_key = os.environ.get(\"BRAVE_API_KEY\")" - }, - "sourceLanguage": "Python" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "1447e1d07f49e102", - "equalIndicator/v1": "fa7d66ea050d7e82c36258702f2283224f6b7e193d05ea1da0007dd45d390eb1" - }, - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "problemType": "REGULAR", - "tags": ["Python"] - } - } - ], - "automationDetails": { - "id": "project/qodana/2026-04-27", - "guid": "327973ae-1149-4db7-9aef-12d232b043a5", - "properties": { - "jobUrl": "https://github.com/xprilion/OpenMLR/actions/runs/24982017922", - "analysisKind": "regular" - } - }, - "newlineSequences": ["\r\n", "\n"], - "properties": { - "qodana.coverage.files.provided": false, - "configProfile": "recommended", - "deviceId": "200820300000000-7c6f-e4df-c86a-c7e9d1cfe59f", - "qodanaNewResultSummary": { - "moderate": 309, - "high": 111, - "total": 420 - } - } - } - ] -}