Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.12", "3.13"]
python-version: ["3.12", "3.13", "3.14"]

steps:
- uses: actions/checkout@v4
Expand Down
2 changes: 1 addition & 1 deletion docs/PI_EXTENSION.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ SkillSpector can be installed into Pi as a local package. The extension register
## Requirements

- Pi installed.
- Python `>=3.12,<3.14`.
- Python `>=3.12,<3.15`.
- `uv` recommended.
- This repo checked out locally.

Expand Down
3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ version = "2.3.7"
description = "SkillSpector: Security scanner for AI agent skills (Claude Code, Cursor, and similar). Scans skills for vulnerabilities, malicious patterns, and security risks before installation. Supports Git repos, URLs, zips, and local directories; runs static pattern checks and optional LLM semantic analysis; outputs terminal, JSON, and Markdown reports with risk scoring."
readme = "README.md"
license = "Apache-2.0"
requires-python = ">=3.12,<3.14"
requires-python = ">=3.12,<3.15"
keywords = [
"security",
"ai-agents",
Expand All @@ -25,6 +25,7 @@ classifiers = [
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Security",
"Topic :: Software Development :: Quality Assurance",
]
Expand Down
15 changes: 14 additions & 1 deletion src/skillspector/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,23 @@

"""Skillspector v2 LangGraph workflow package."""

import warnings
from importlib.metadata import version as _pkg_version

__version__ = _pkg_version("skillspector")

from skillspector.graph import create_graph, graph
# ponytail: langgraph deserializes with langchain's allowed_objects default,
# which warns. langchain_core's import re-enables that warning via
# surface_langchain_deprecation_warnings(), so import it first, then prepend our
# ignore filter so it wins. Drop this once langgraph pins an explicit default.
import langchain_core # noqa: F401 (force its warning-filter setup before ours)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

need to see if this should be done here or not

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codex note: please address this before merge. The workaround makes sense as warning hygiene, but importing langchain_core from the package top-level only to control warning-filter ordering feels too broad. Can we either move this into a small compat/helper near the graph-loading path, or at least narrow the filter to LangChain’s specific pending deprecation warning category instead of category=Warning? This should stay scoped and easy to remove once LangGraph passes an explicit allowed_objects default.


warnings.filterwarnings(
"ignore",
message="The default value of `allowed_objects` will change",
category=Warning,
)

from skillspector.graph import create_graph, graph # noqa: E402 (after filter setup)

__all__ = ["create_graph", "graph", "__version__"]
Loading
Loading