Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
73db9e2
Fix: Allow running in environments with existing event loop
array-cat Jun 28, 2026
ea48858
Fix: remove unused asyncio import from meta_analyzer.py
array-cat Jun 28, 2026
2b15280
feat(analyzer): detect untrusted container image pull as SC7
CharmingGroot Jun 28, 2026
4480ea4
fix(report): preserve full finding metadata in SARIF output (#229)
rodboev Jun 29, 2026
eb7d221
fix(report): preserve remaining SARIF finding fields (#229)
rodboev Jun 29, 2026
66113ee
fix(report): preserve exact SARIF severity metadata (#229)
rodboev Jun 30, 2026
9526734
fix(analyzer): rely on runner for SC7 example filtering to close exec…
CharmingGroot Jun 30, 2026
9a2e087
Add unit tests for run_async utility function
array-cat Jul 1, 2026
eb3fe89
fix(mcp): prove stdio initialize compatibility (#199)
rodboev Jul 4, 2026
90a9181
fix(yara): reduce packaged malware-signature false positives (#236)
rodboev Jul 4, 2026
f682cc5
rename contrib/multilingual to contrib/batch_scan and update README u…
WhereIs38 Jul 7, 2026
87b033a
docs: correct MCP fixture expectations
koriyoshi2041 Jul 9, 2026
bb41e37
fix(cli): preserve full per-skill JSON payload in recursive scans (#228)
rodboev Jun 29, 2026
f0f2f3e
feat(provider): allow scoped LLM provider injection (#243)
rodboev Jul 4, 2026
de9e56b
fix(yara): skip malformed unicode encoded rules (#236)
rodboev Jul 9, 2026
f1637ee
fix(sc7): exclude --disable-content-trust=false to keep content-trust…
CharmingGroot Jul 10, 2026
ca3bac6
fix emoji zwj prompt injection false positive
koriyoshi2041 Jul 10, 2026
19ecc4c
Merge pull request #258 from WhereIs38/contrib/batch-scan-readme
rng1995 Jul 10, 2026
483c0e4
Merge pull request #248 from rodboev/pr/mcp-stdio-initialize-199
rng1995 Jul 10, 2026
a68496d
Merge pull request #262 from koriyoshi2041/fix-b31-mcp-doc-fixture
rng1995 Jul 10, 2026
0e22116
Refresh CI after a stale merge-ref failure
rodboev Jul 5, 2026
2908823
fix(analyzer): gate documentation false positives for PE3/RA1/TM1/AR2…
rodboev Jul 11, 2026
e928a9f
fix(analyzer): keep config-file findings outside doc gating (#251)
rodboev Jul 11, 2026
3e7ce25
fix(analyzer): classify docs from the finding line (#251)
rodboev Jul 11, 2026
866a4fc
fix(analyzer): keep inline block comments out of doc gating (#251)
rodboev Jul 11, 2026
5f80cc2
fix(analyzer): keep executable doc calls outside suppression (#251)
rodboev Jul 11, 2026
7eefd67
Fix conflict: update chat_completion implementation to match main branch
array-cat Jul 1, 2026
f88cddc
Format: ruff lint and format fixes
array-cat Jul 11, 2026
d398fdd
Fix merge conflicts with main branch (import conflicts)
array-cat Jul 11, 2026
24cfc13
Merge branch 'main' into fix-running-loop-detection
array-cat Jul 11, 2026
af90680
Sync OSS release snapshot
keshprad Jul 13, 2026
5106ae1
Merge pull request #272 from NVIDIA/keshavp/oss-release-2026-07-13
keshprad Jul 13, 2026
40c2b1e
Merge pull request #222 from zhenliemao/fix-running-loop-detection
rng1995 Jul 14, 2026
d0e36f5
Merge pull request #230 from rodboev/pr/sarif-full-finding-metadata-229
rng1995 Jul 14, 2026
e4c0d1e
Merge pull request #224 from CharmingGroot/feat/sc7-untrusted-contain…
rng1995 Jul 14, 2026
2260aa1
Merge pull request #247 from rodboev/pr/yara-packaging-236
rng1995 Jul 14, 2026
6827771
Merge pull request #231 from rodboev/pr/recursive-json-full-schema-228
rng1995 Jul 14, 2026
cad5d6c
Merge pull request #266 from rodboev/pr/static-doc-fp-gating
rng1995 Jul 14, 2026
86f4d9a
Merge pull request #264 from koriyoshi2041/fix-emoji-zwj-prompt-injec…
rng1995 Jul 14, 2026
36cb67d
Merge pull request #249 from rodboev/pr/provider-injection-243
rng1995 Jul 14, 2026
29c6673
Sync OSS release snapshot
keshprad Jul 14, 2026
8f534e2
Merge pull request #275 from NVIDIA/keshavp/oss-release-2026-07-14
keshprad Jul 14, 2026
539267e
feat(provider): forward reasoning effort to OpenAI-compatible models …
rodboev Jul 18, 2026
be69a9f
fix(analyzer): align file-size guard with character semantics (#284)
rodboev Jul 18, 2026
8784f21
feat(provider): keep reasoning effort consistent across Anthropic pat…
rodboev Jul 20, 2026
bb5988c
fix(provider): keep reasoning effort pass-through consistent (#283)
rodboev Jul 20, 2026
dd79495
Merge pull request #287 from rodboev/pr/clarify-char-file-limit
keshprad Jul 20, 2026
fda4a01
Merge pull request #285 from rodboev/pr/reasoning-effort-283
keshprad Jul 20, 2026
cffb03b
chore: sync OSS release snapshot
keshprad Jul 20, 2026
11567e8
Merge pull request #289 from NVIDIA/release/oss-2026-07-20
keshprad Jul 20, 2026
077224e
Sync OSS release snapshot
keshprad Jul 21, 2026
a2646e3
Merge upstream NVIDIA/SkillSpector keshavp/oss-release-2026-07-21
will-exaforce Aug 3, 2026
6a7ceb7
chore(benchmark): sync lockfile to skillspector 2.4.2
will-exaforce Aug 3, 2026
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
3 changes: 3 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ NVIDIA_INFERENCE_KEY=
# etc.); leave unset for stock api.openai.com.
OPENAI_API_KEY=
OPENAI_BASE_URL=
# Optional provider- and model-dependent reasoning-effort setting. Non-empty values
# are trimmed and passed through unchanged; unset or blank uses the provider default.
SKILLSPECTOR_REASONING_EFFORT=

# For SKILLSPECTOR_PROVIDER=anthropic.
ANTHROPIC_API_KEY=
Expand Down
86 changes: 66 additions & 20 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,38 +30,84 @@ concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
UV_VERSION: "0.10.x"
PYTHON_VERSION: "3.12"
UV_CACHE_DIR: .uv-cache
UV_LINK_MODE: copy

jobs:
lint-and-test:
name: Lint & Test (Python ${{ matrix.python-version }})
changes:
runs-on: ubuntu-latest
# Windows is excluded: the test suite has known path-separator failures
# in build_context that are out of scope for this workflow.
strategy:
fail-fast: false
matrix:
python-version: ["3.12", "3.13", "3.14"]

outputs:
docker: ${{ steps.filter.outputs.docker }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- id: filter
env:
BASE_SHA: ${{ github.event.pull_request.base.sha || github.event.before }}
HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
run: |
if git diff --quiet "$BASE_SHA" "$HEAD_SHA" -- \
.dockerignore .github/workflows/ci.yml .gitlab-ci.yml Dockerfile \
Makefile pyproject.toml uv.lock src tests/docker tests/fixtures/safe_skill; then
echo "docker=false" >> "$GITHUB_OUTPUT"
else
echo "docker=true" >> "$GITHUB_OUTPUT"
fi

lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up uv
# Pinned to a full commit SHA (third-party action); comment tracks the tag.
uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5
with:
version: ${{ env.UV_VERSION }}
enable-cache: true
python-version: ${{ matrix.python-version }}
cache-dependency-glob: uv.lock
python-version: ${{ env.PYTHON_VERSION }}
- run: make install-dev
- run: uv run make lint
- run: uv run make format-check

- name: Install dependencies
run: uv sync --all-extras

- name: Lint with ruff
run: uv run ruff check src/ tests/

- name: Check formatting with ruff
run: uv run ruff format --check src/ tests/
test-unit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up uv
# Pinned to a full commit SHA (third-party action); comment tracks the tag.
uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5
with:
version: ${{ env.UV_VERSION }}
enable-cache: true
cache-dependency-glob: uv.lock
python-version: ${{ env.PYTHON_VERSION }}
- run: make install-dev
- run: uv run skillspector --version
- run: uv run make test-ci

- name: Run unit tests with coverage
run: uv run pytest -m "not integration" --cov=src/skillspector --cov-report=term-missing
docker-smoke:
needs: changes
if: needs.changes.outputs.docker == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: docker version
- run: docker info
- run: docker build -t skillspector .
- run: tests/docker/smoke.sh
- if: always()
uses: actions/upload-artifact@v4
with:
name: docker-smoke-reports
path: |
.skillspector-docker-smoke.json
.skillspector-docker-github-smoke.json
if-no-files-found: ignore

dco:
name: DCO Check
Expand Down
Loading
Loading