From 710fdd27ce152e5ac445b779172ee43b554a3f49 Mon Sep 17 00:00:00 2001 From: alcpereira <48070464+alcpereira@users.noreply.github.com> Date: Thu, 8 Jan 2026 00:44:19 +0000 Subject: [PATCH 1/3] Add opencode configuration schema (#5267) Adds remote schema for opencode AI coding agent configuration files (opencode.json, opencode.jsonc). --- src/api/json/catalog.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/api/json/catalog.json b/src/api/json/catalog.json index 12976ac3873..9a1c3494871 100644 --- a/src/api/json/catalog.json +++ b/src/api/json/catalog.json @@ -4503,6 +4503,17 @@ ], "url": "https://meta.open-rpc.org/" }, + { + "name": "opencode", + "description": "opencode AI coding agent configuration file", + "fileMatch": [ + "opencode.json", + "opencode.jsonc", + "**/.opencode/opencode.json", + "**/.opencode/opencode.jsonc" + ], + "url": "https://opencode.ai/config.json" + }, { "name": "OpenUtau character yaml", "description": "OpenUtau voicebank configuration file, character.yaml", From cbd630381758d2d511b20d7b2494008bcd35b179 Mon Sep 17 00:00:00 2001 From: Christian Oliff Date: Thu, 8 Jan 2026 09:44:48 +0900 Subject: [PATCH 2/3] HTMLHint: Change type to anyOf for attributes in htmlhint.json (#5263) * HTMLHint: Change type to anyOf for attributes in htmlhint.json These rules accept boolean OR am array. - https://htmlhint.com/rules/attr-lowercase/ - https://htmlhint.com/rules/attr-value-no-duplication/ * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- src/schemas/json/htmlhint.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/schemas/json/htmlhint.json b/src/schemas/json/htmlhint.json index bd3a1cd4ca5..620008915dd 100644 --- a/src/schemas/json/htmlhint.json +++ b/src/schemas/json/htmlhint.json @@ -9,7 +9,7 @@ }, "attr-lowercase": { "description": "Attribute name must be lowercase.", - "type": "boolean", + "anyOf": [{ "type": "boolean" }, { "type": "array" }], "default": false }, "attr-no-duplication": { @@ -34,7 +34,7 @@ }, "attr-value-no-duplication": { "description": "Class attributes should not contain duplicate values. Other attributes can be checked via configuration.", - "type": "boolean", + "anyOf": [{ "type": "boolean" }, { "type": "array" }], "default": false }, "attr-value-not-empty": { From cf85cac77d5581b7c3e6362713889b3e1011fd75 Mon Sep 17 00:00:00 2001 From: Aria Desires Date: Wed, 7 Jan 2026 19:45:31 -0500 Subject: [PATCH 3/3] Update ty's JSON schema (#5269) This updates ty's JSON schema to [d18902cdcc4d39badfad86c88e89b866a809c881](https://github.com/astral-sh/ty/commit/d18902cdcc4d39badfad86c88e89b866a809c881) --- src/schemas/json/ty.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/schemas/json/ty.json b/src/schemas/json/ty.json index dcbd3a40535..7b43853bc28 100644 --- a/src/schemas/json/ty.json +++ b/src/schemas/json/ty.json @@ -304,6 +304,10 @@ { "description": "Python 3.14", "const": "3.14" + }, + { + "description": "Python 3.15", + "const": "3.15" } ] }, @@ -778,6 +782,16 @@ } ] }, + "invalid-total-ordering": { + "title": "detects `@total_ordering` classes without an ordering method", + "description": "## What it does\nChecks for classes decorated with `@functools.total_ordering` that don't\ndefine any ordering method (`__lt__`, `__le__`, `__gt__`, or `__ge__`).\n\n## Why is this bad?\nThe `@total_ordering` decorator requires the class to define at least one\nordering method. If none is defined, Python raises a `ValueError` at runtime.\n\n## Example\n\n```python\nfrom functools import total_ordering\n\n@total_ordering\nclass MyClass: # Error: no ordering method defined\n def __eq__(self, other: object) -> bool:\n return True\n```\n\nUse instead:\n\n```python\nfrom functools import total_ordering\n\n@total_ordering\nclass MyClass:\n def __eq__(self, other: object) -> bool:\n return True\n\n def __lt__(self, other: \"MyClass\") -> bool:\n return True\n```", + "default": "error", + "oneOf": [ + { + "$ref": "#/definitions/Level" + } + ] + }, "invalid-type-alias-type": { "title": "detects invalid TypeAliasType definitions", "description": "## What it does\nChecks for the creation of invalid `TypeAliasType`s\n\n## Why is this bad?\nThere are several requirements that you must follow when creating a `TypeAliasType`.\n\n## Examples\n```python\nfrom typing import TypeAliasType\n\nIntOrStr = TypeAliasType(\"IntOrStr\", int | str) # okay\nNewAlias = TypeAliasType(get_name(), int) # error: TypeAliasType name must be a string literal\n```", @@ -848,6 +862,16 @@ } ] }, + "invalid-typed-dict-statement": { + "title": "detects invalid statements in `TypedDict` class bodies", + "description": "## What it does\nDetects statements other than annotated declarations in `TypedDict` class bodies.\n\n## Why is this bad?\n`TypedDict` class bodies aren't allowed to contain any other types of statements. For\nexample, method definitions and field values aren't allowed. None of these will be\navailable on \"instances of the `TypedDict`\" at runtime (as `dict` is the runtime class of\nall \"`TypedDict` instances\").\n\n## Example\n```python\nfrom typing import TypedDict\n\nclass Foo(TypedDict):\n def bar(self): # error: [invalid-typed-dict-statement]\n pass\n```", + "default": "error", + "oneOf": [ + { + "$ref": "#/definitions/Level" + } + ] + }, "missing-argument": { "title": "detects missing required arguments in a call", "description": "## What it does\nChecks for missing required arguments in a call.\n\n## Why is this bad?\nFailing to provide a required argument will raise a `TypeError` at runtime.\n\n## Examples\n```python\ndef func(x: int): ...\nfunc() # TypeError: func() missing 1 required positional argument: 'x'\n```",