Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
810 commits
Select commit Hold shift + click to select a range
223e67b
Merge branch 'main' into yashraj/align-opencode-llm-timeout
github-actions[bot] Oct 5, 2026
41ba8e5
Merge branch 'main' into yashraj/pin-release-checkout
github-actions[bot] Oct 5, 2026
ce36003
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 5, 2026
206c644
Merge branch 'main' into yashraj/restrict-mcp-http-loopback
github-actions[bot] Oct 5, 2026
a33a269
Merge branch 'main' into yashraj/fix-xor-key-regex-backtracking
github-actions[bot] Oct 5, 2026
36ede42
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 5, 2026
cfc9d5f
Merge branch 'main' into yashraj/disable-unsafe-codex-provider
github-actions[bot] Oct 5, 2026
806408a
Merge branch 'main' into yashraj/isolate-http-mcp-git-credentials
github-actions[bot] Oct 5, 2026
8fa662c
Merge branch 'main' into yashraj/fix-markdown-report-output-20261005
github-actions[bot] Oct 5, 2026
7c63f34
Merge branch 'main' into yashraj/fix-batch-markdown-output-20261005
github-actions[bot] Oct 5, 2026
191773e
Merge pull request #593 from udsy19/fix/yara-reverse-shell-multiline
rng1995 Oct 5, 2026
a96b7c6
Merge branch 'main' into yashraj/refresh-nvidia-build-default
github-actions[bot] Oct 5, 2026
ac878c5
Merge branch 'main' into yashraj/align-opencode-llm-timeout
github-actions[bot] Oct 5, 2026
56b2f46
Merge branch 'main' into yashraj/pin-release-checkout
github-actions[bot] Oct 5, 2026
e732e3f
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 5, 2026
e20d1e6
Merge branch 'main' into yashraj/restrict-mcp-http-loopback
github-actions[bot] Oct 5, 2026
0704ce5
Merge branch 'main' into yashraj/fix-xor-key-regex-backtracking
github-actions[bot] Oct 5, 2026
f6f47d8
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 5, 2026
76c13b1
Merge branch 'main' into yashraj/disable-unsafe-codex-provider
github-actions[bot] Oct 5, 2026
13165ee
Merge branch 'main' into yashraj/isolate-http-mcp-git-credentials
github-actions[bot] Oct 5, 2026
15405c7
Merge branch 'main' into yashraj/fix-markdown-report-output-20261005
github-actions[bot] Oct 5, 2026
69c49ba
Merge branch 'main' into yashraj/fix-batch-markdown-output-20261005
github-actions[bot] Oct 5, 2026
a5ba8b3
Merge pull request #716 from Yoseph-Zuskin/fix/opencode-zen-free-tier
rng1995 Oct 5, 2026
8d54ecc
Merge branch 'main' into yashraj/refresh-nvidia-build-default
github-actions[bot] Oct 5, 2026
55e1b47
Merge branch 'main' into yashraj/align-opencode-llm-timeout
github-actions[bot] Oct 5, 2026
547021b
Merge branch 'main' into yashraj/pin-release-checkout
github-actions[bot] Oct 5, 2026
7c95e7d
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 5, 2026
6af89bb
Merge branch 'main' into yashraj/restrict-mcp-http-loopback
github-actions[bot] Oct 5, 2026
f430ab8
Merge branch 'main' into yashraj/fix-xor-key-regex-backtracking
github-actions[bot] Oct 5, 2026
5ebda66
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 5, 2026
b787c5c
Merge branch 'main' into yashraj/disable-unsafe-codex-provider
github-actions[bot] Oct 5, 2026
02a9011
Merge branch 'main' into yashraj/isolate-http-mcp-git-credentials
github-actions[bot] Oct 5, 2026
d294325
Merge branch 'main' into yashraj/fix-markdown-report-output-20261005
github-actions[bot] Oct 5, 2026
58c52c8
Merge branch 'main' into yashraj/fix-batch-markdown-output-20261005
github-actions[bot] Oct 5, 2026
532f67c
Merge pull request #706 from Harbor404/fix/dependency-source-analysis…
rng1995 Oct 5, 2026
39b2e3b
Merge branch 'main' into yashraj/refresh-nvidia-build-default
github-actions[bot] Oct 5, 2026
dad8651
Merge branch 'main' into yashraj/align-opencode-llm-timeout
github-actions[bot] Oct 5, 2026
dcef4fc
Merge branch 'main' into yashraj/pin-release-checkout
github-actions[bot] Oct 5, 2026
57faa4e
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 5, 2026
5331137
Merge branch 'main' into yashraj/restrict-mcp-http-loopback
github-actions[bot] Oct 5, 2026
a78d8ec
Merge branch 'main' into yashraj/fix-xor-key-regex-backtracking
github-actions[bot] Oct 5, 2026
8256dcd
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 5, 2026
5db1ed2
Merge branch 'main' into yashraj/disable-unsafe-codex-provider
github-actions[bot] Oct 5, 2026
39dd085
Merge branch 'main' into yashraj/isolate-http-mcp-git-credentials
github-actions[bot] Oct 5, 2026
052a12e
Merge branch 'main' into yashraj/fix-markdown-report-output-20261005
github-actions[bot] Oct 5, 2026
f07d9f4
Merge branch 'main' into yashraj/fix-batch-markdown-output-20261005
github-actions[bot] Oct 5, 2026
8ac671d
Merge branch 'main' into fix/interrupted-scan-temp-dir
rng1995 Oct 5, 2026
03e4e1f
fix(taint): walk the AST in source order, not breadth-first
udsy19 Sep 20, 2026
26bc7d6
fix(taint): make source detection independent of AST visit order
udsy19 Sep 28, 2026
fb5c800
fix(taint): make the taint fixpoint monotone and linear
udsy19 Oct 2, 2026
6e13b59
fix(taint): fire each propagating assignment at most once
udsy19 Oct 4, 2026
9938f29
docs: clarify unconfirmed review outcomes
efegokdemir Oct 5, 2026
2cd8e87
Merge pull request #678 from Yi-111-a/fix/pe2-chmod-numeric-modes
rng1995 Oct 5, 2026
5dbc208
Merge branch 'main' into yashraj/refresh-nvidia-build-default
github-actions[bot] Oct 5, 2026
6b29805
Merge branch 'main' into yashraj/align-opencode-llm-timeout
github-actions[bot] Oct 5, 2026
63f6121
Merge branch 'main' into yashraj/pin-release-checkout
github-actions[bot] Oct 5, 2026
b097b84
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 5, 2026
00bdf58
Merge pull request #682 from CharmingGroot/fix/pe5-tm4-reference-conf…
rng1995 Oct 5, 2026
16388a4
Merge branch 'main' into yashraj/restrict-mcp-http-loopback
github-actions[bot] Oct 5, 2026
74276ee
Merge branch 'main' into yashraj/fix-xor-key-regex-backtracking
github-actions[bot] Oct 5, 2026
cd20c62
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 5, 2026
6564007
Merge branch 'main' into yashraj/disable-unsafe-codex-provider
github-actions[bot] Oct 5, 2026
290d6ce
Merge branch 'main' into yashraj/isolate-http-mcp-git-credentials
github-actions[bot] Oct 5, 2026
76c078d
Merge branch 'main' into yashraj/fix-markdown-report-output-20261005
github-actions[bot] Oct 5, 2026
f9c510c
Merge branch 'main' into yashraj/fix-batch-markdown-output-20261005
github-actions[bot] Oct 5, 2026
c43ef27
Merge branch 'main' into yashraj/refresh-nvidia-build-default
github-actions[bot] Oct 5, 2026
ce1152d
Merge branch 'main' into yashraj/align-opencode-llm-timeout
github-actions[bot] Oct 5, 2026
aea5d79
Merge branch 'main' into yashraj/pin-release-checkout
github-actions[bot] Oct 5, 2026
19c3604
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 5, 2026
ce44b61
docs: mark the Codex CLI provider disabled
yashrajp22 Oct 5, 2026
349b692
docs: mark the Codex CLI provider disabled
yashrajp22 Oct 5, 2026
a8a816d
fix: preserve network settings in scrubbed CLI environments
yashrajp22 Oct 5, 2026
4ff755c
fix(opencode): preserve whole credentials and JSON during redaction
yashrajp22 Oct 5, 2026
41b0660
fix(batch): validate rendered Markdown and strip display escapes
yashrajp22 Oct 5, 2026
2c3e9ab
fix(batch): preserve literal terminal names and whitespace
yashrajp22 Oct 5, 2026
9cc256f
fix(report): escape strikethrough and validate rendered output
yashrajp22 Oct 5, 2026
31fdf49
test(pi): enforce synchronous redaction runtime budget
yashrajp22 Oct 5, 2026
9604577
test(opencode): exercise standalone short values at truncation bounda…
yashrajp22 Oct 5, 2026
f34cda0
fix: preserve anonymous Git transport compatibility and isolation
yashrajp22 Oct 5, 2026
6f25ccc
fix(provider): clarify reasoning defaults and provenance
yashrajp22 Oct 5, 2026
5ede9a2
fix: align HTTP MCP bindings with accepted host headers
yashrajp22 Oct 5, 2026
104b7d0
fix(pi): allow explicit LLM scans to use the workflow budget
yashrajp22 Oct 5, 2026
8b9a82c
style: format review regression coverage
yashrajp22 Oct 5, 2026
81a85fe
style: format review regression coverage
yashrajp22 Oct 5, 2026
0144565
fix(batch): report interrupted scans and separate worker startup
yashrajp22 Oct 5, 2026
d41ab95
Merge commit 'ce44b61bc9e580c613728cfff9ba66d1c937f3c6' into yashraj/…
yashrajp22 Oct 5, 2026
01516f6
style: format Markdown token assertions
yashrajp22 Oct 5, 2026
37d8868
style: format Markdown token assertions
yashrajp22 Oct 5, 2026
545dc4d
test(batch): leave room for worker shutdown in startup check
yashrajp22 Oct 5, 2026
704ffea
Merge reviewed terminal fixes from stacked base
yashrajp22 Oct 5, 2026
f13e98a
Merge reviewed Markdown fixes from stacked base
yashrajp22 Oct 5, 2026
c1a60e7
style: format batch worker regression tests
yashrajp22 Oct 5, 2026
5886e0e
fix: bound XOR helper header discovery and strengthen escape regressions
yashrajp22 Oct 5, 2026
263b76e
fix(opencode): cover overlapping credential redaction spans
yashrajp22 Oct 5, 2026
4d002b2
Merge pull request #740 from NVIDIA/yashraj/fix-xor-key-regex-backtra…
rng1995 Oct 5, 2026
c7af4cc
Merge branch 'main' into yashraj/refresh-nvidia-build-default
github-actions[bot] Oct 5, 2026
39ec078
Merge branch 'main' into yashraj/align-opencode-llm-timeout
github-actions[bot] Oct 5, 2026
0be4dd5
Merge branch 'main' into yashraj/pin-release-checkout
github-actions[bot] Oct 5, 2026
63a128f
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 5, 2026
f0d811d
Merge branch 'main' into yashraj/restrict-mcp-http-loopback
github-actions[bot] Oct 5, 2026
6cfb020
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 5, 2026
0415317
Merge branch 'main' into yashraj/disable-unsafe-codex-provider
github-actions[bot] Oct 5, 2026
54418f6
Merge branch 'main' into yashraj/isolate-http-mcp-git-credentials
github-actions[bot] Oct 5, 2026
067f309
Merge pull request #744 from NVIDIA/yashraj/restrict-mcp-http-loopback
rng1995 Oct 5, 2026
dd8b77a
Merge branch 'main' into yashraj/fix-markdown-report-output-20261005
github-actions[bot] Oct 5, 2026
4aa8987
Merge branch 'main' into yashraj/fix-batch-markdown-output-20261005
github-actions[bot] Oct 5, 2026
0c3f73d
Merge pull request #746 from NVIDIA/yashraj/pin-release-checkout
rng1995 Oct 5, 2026
adf305d
Merge branch 'main' into yashraj/refresh-nvidia-build-default
github-actions[bot] Oct 5, 2026
7065c1b
Merge branch 'main' into yashraj/align-opencode-llm-timeout
github-actions[bot] Oct 5, 2026
eda0f7f
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 5, 2026
3708557
Merge pull request #747 from NVIDIA/yashraj/align-opencode-llm-timeout
rng1995 Oct 5, 2026
53fb1f7
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 5, 2026
0cba4d0
Merge branch 'main' into yashraj/disable-unsafe-codex-provider
github-actions[bot] Oct 5, 2026
2c3a1b4
Merge branch 'main' into yashraj/isolate-http-mcp-git-credentials
github-actions[bot] Oct 5, 2026
9c31087
Merge branch 'main' into yashraj/fix-markdown-report-output-20261005
github-actions[bot] Oct 5, 2026
ec3da38
Merge branch 'main' into yashraj/fix-batch-markdown-output-20261005
github-actions[bot] Oct 5, 2026
548c9c3
Merge pull request #729 from YMuskrat/fix/prevent-input-overwrite
rng1995 Oct 5, 2026
2f2d5b7
Merge branch 'main' into yashraj/refresh-nvidia-build-default
github-actions[bot] Oct 5, 2026
03af0fb
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 5, 2026
70e5166
Merge pull request #666 from kevin9327/fix/interrupted-scan-temp-dir
rng1995 Oct 5, 2026
4ba9a2d
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 5, 2026
5f5d220
Merge branch 'main' into yashraj/disable-unsafe-codex-provider
github-actions[bot] Oct 5, 2026
75ff780
Merge branch 'main' into yashraj/isolate-http-mcp-git-credentials
github-actions[bot] Oct 5, 2026
2431c42
Merge branch 'main' into yashraj/fix-markdown-report-output-20261005
github-actions[bot] Oct 5, 2026
1eca5d2
Merge branch 'main' into yashraj/fix-batch-markdown-output-20261005
github-actions[bot] Oct 5, 2026
8f8b6da
Merge branch 'main' into yashraj/refresh-nvidia-build-default
github-actions[bot] Oct 5, 2026
cfee917
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 5, 2026
f3ec825
Merge pull request #496 from bytemare/providers/add-gemini
rng1995 Oct 5, 2026
81ab513
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 5, 2026
5103abe
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 5, 2026
1df4a92
Merge branch 'main' into yashraj/isolate-http-mcp-git-credentials
github-actions[bot] Oct 5, 2026
b469dd5
Merge branch 'main' into yashraj/fix-markdown-report-output-20261005
github-actions[bot] Oct 5, 2026
fd0095f
Merge branch 'main' into yashraj/fix-batch-markdown-output-20261005
github-actions[bot] Oct 5, 2026
94abd7c
Merge pull request #733 from NVIDIA/yashraj/fix-batch-markdown-output…
rng1995 Oct 5, 2026
9804a56
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 5, 2026
ad02245
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 5, 2026
b9f93f5
Merge branch 'main' into yashraj/isolate-http-mcp-git-credentials
github-actions[bot] Oct 5, 2026
52ba7c6
Merge branch 'main' into yashraj/fix-markdown-report-output-20261005
github-actions[bot] Oct 5, 2026
901cb9e
Merge branch 'main' into yashraj/fix-batch-terminal-output-20261005
github-actions[bot] Oct 5, 2026
0d0757c
Merge pull request #611 from udsy19/fix/taint-source-order
rng1995 Oct 5, 2026
b6f0304
Merge pull request #684 from efegokdemir/fix/675-stage2-docs
rng1995 Oct 5, 2026
a39c2b7
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 5, 2026
3941940
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 5, 2026
a95b082
Merge branch 'main' into yashraj/isolate-http-mcp-git-credentials
github-actions[bot] Oct 5, 2026
28f6e93
Merge branch 'main' into yashraj/fix-markdown-report-output-20261005
github-actions[bot] Oct 5, 2026
2669280
Merge branch 'main' into yashraj/fix-batch-terminal-output-20261005
github-actions[bot] Oct 5, 2026
6eeeb74
Merge main while preserving the GLM-5.3 default and Gemini guidance
yashrajp22 Oct 6, 2026
6aa7256
Merge main while preserving disabled Codex and Gemini guidance
yashrajp22 Oct 6, 2026
40882b4
Merge branch 'yashraj/disable-unsafe-codex-provider' of /Users/yashra…
yashrajp22 Oct 6, 2026
f44ffbb
docs: clarify HTTP scan transport environment settings
yashrajp22 Oct 6, 2026
37db309
fix: normalize Windows environment checks and retain account names
yashrajp22 Oct 6, 2026
ea35f51
fix(report): share Markdown escaping and check rendered leak assertions
yashrajp22 Oct 6, 2026
2cefeac
fix(batch): keep warning names literal with Rich and plain output
yashrajp22 Oct 6, 2026
e0f8aa7
fix(opencode): redact credentials adjacent to configured values
yashrajp22 Oct 6, 2026
06b7d6c
fix(opencode): recognize credential boundaries on original output
yashrajp22 Oct 6, 2026
f1c82de
fix(opencode): scan assignment names once during redaction
yashrajp22 Oct 6, 2026
a80ef55
fix(batch): stop orphaned pool managers and correct failed scan summa…
yashrajp22 Oct 6, 2026
952ec04
Merge terminal warning follow-up into batch timeout fix
yashrajp22 Oct 6, 2026
e2bf4a1
Merge pull request #735 from NVIDIA/yashraj/fix-markdown-report-outpu…
rng1995 Oct 6, 2026
9bfa428
Merge branch 'main' into yashraj/refresh-nvidia-build-default
github-actions[bot] Oct 6, 2026
932db0a
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 6, 2026
cd77729
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 6, 2026
1506cde
Merge branch 'main' into yashraj/disable-unsafe-codex-provider
github-actions[bot] Oct 6, 2026
c555547
Merge branch 'main' into yashraj/isolate-http-mcp-git-credentials
github-actions[bot] Oct 6, 2026
bd6258d
Merge branch 'main' into yashraj/fix-batch-terminal-output-20261005
github-actions[bot] Oct 6, 2026
d5e508f
Merge pull request #736 from NVIDIA/yashraj/isolate-http-mcp-git-cred…
rng1995 Oct 6, 2026
7fce10d
Merge branch 'main' into yashraj/refresh-nvidia-build-default
github-actions[bot] Oct 6, 2026
0ea622e
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 6, 2026
568b0ee
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 6, 2026
8e1fecf
Merge branch 'main' into yashraj/disable-unsafe-codex-provider
github-actions[bot] Oct 6, 2026
6b47607
Merge branch 'main' into yashraj/fix-batch-terminal-output-20261005
github-actions[bot] Oct 6, 2026
d3b8590
Merge pull request #737 from NVIDIA/yashraj/disable-unsafe-codex-prov…
rng1995 Oct 6, 2026
6852526
Merge branch 'main' into yashraj/refresh-nvidia-build-default
github-actions[bot] Oct 6, 2026
74c09f0
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 6, 2026
405d56a
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 6, 2026
7bda170
Merge branch 'main' into yashraj/allowlist-agent-cli-environment
github-actions[bot] Oct 6, 2026
de8c857
Merge branch 'main' into yashraj/fix-batch-terminal-output-20261005
github-actions[bot] Oct 6, 2026
81bf9db
Merge pull request #748 from NVIDIA/yashraj/refresh-nvidia-build-default
rng1995 Oct 6, 2026
608ca41
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 6, 2026
d1f8057
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 6, 2026
c527b46
Merge branch 'main' into yashraj/allowlist-agent-cli-environment
github-actions[bot] Oct 6, 2026
c580fa6
Merge branch 'main' into yashraj/fix-batch-terminal-output-20261005
github-actions[bot] Oct 6, 2026
4a9f7b1
Merge pull request #738 from NVIDIA/yashraj/allowlist-agent-cli-envir…
rng1995 Oct 6, 2026
a6d62fc
Merge pull request #743 from NVIDIA/yashraj/fix-batch-worker-timeout-…
rng1995 Oct 6, 2026
c745ff4
Merge branch 'main' into yashraj/redact-short-opencode-credentials
github-actions[bot] Oct 6, 2026
eef43f1
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 6, 2026
6ebbfb7
Merge branch 'main' into yashraj/fix-batch-terminal-output-20261005
github-actions[bot] Oct 6, 2026
8562ecc
Merge pull request #745 from NVIDIA/yashraj/redact-short-opencode-cre…
rng1995 Oct 6, 2026
9f2a048
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 6, 2026
77f1cb6
Merge branch 'main' into yashraj/fix-batch-terminal-output-20261005
github-actions[bot] Oct 6, 2026
95528a7
Merge pull request #734 from NVIDIA/yashraj/fix-batch-terminal-output…
rng1995 Oct 6, 2026
1d908c2
Merge branch 'main' into yashraj/fix-pi-redaction-runtime-20261005
github-actions[bot] Oct 6, 2026
0e77030
Merge pull request #739 from NVIDIA/yashraj/fix-pi-redaction-runtime-…
rng1995 Oct 6, 2026
3b7239b
fix(static): decode provable printf escapes in shell literals (#704)
Harbor404 Oct 6, 2026
17e9e85
fix(static): stop TR2/TR3 over-reading trigger descriptions (#669) (#…
Zhuoxi2000 Oct 6, 2026
ef0f96d
test(report): cover Markdown table escaping (#723)
fallintoplace Oct 6, 2026
5485cda
fix(static): stop code comparisons from reading as tag marker directi…
rng1995 Oct 6, 2026
025c65e
fix(analyzer): keep Python and Perl syntax from exhausting the shell …
rng1995 Oct 6, 2026
3a1ceee
fix(static): let validated Python string literals own their quotes in…
rng1995 Oct 7, 2026
b359c66
fix(pe3): treat ignore-file entries as path exclusions, not credentia…
rng1995 Oct 7, 2026
8afd386
fix(pi): require approval for external scan inputs
yashrajp22 Oct 7, 2026
d3147c1
fix(suppression): isolate transitive content cache keys
yashrajp22 Oct 7, 2026
4a609f0
test: observe merged cache before report serialization
yashrajp22 Oct 7, 2026
f651cad
fix(pi): keep git-prefixed local inputs canonical
yashrajp22 Oct 7, 2026
3c8e4b9
fix(static): keep AR2 off Python comments describing program output (…
rng1995 Oct 7, 2026
d7f8ef0
Merge branch 'main' into yashraj/isolate-transitive-content-cache
github-actions[bot] Oct 7, 2026
511b215
Merge branch 'main' into yashraj/fix-pi-input-permissions-20261007
github-actions[bot] Oct 7, 2026
8777636
fix: prefer tool output for OpenAI Opus 5 TP4 (#691)
chrisknvidia Oct 8, 2026
be851c6
Merge branch 'main' into yashraj/isolate-transitive-content-cache
github-actions[bot] Oct 8, 2026
6d0a1d0
Merge branch 'main' into yashraj/fix-pi-input-permissions-20261007
github-actions[bot] Oct 8, 2026
5ee48ef
fix(analyzer): detect bound shell truthiness (#577)
chrisknvidia Oct 8, 2026
b866a82
Merge branch 'main' into yashraj/isolate-transitive-content-cache
github-actions[bot] Oct 8, 2026
9fc1a3d
Merge branch 'main' into yashraj/fix-pi-input-permissions-20261007
github-actions[bot] Oct 8, 2026
a0d489e
fix(yara): avoid ransomware findings for Bitcoin payment prose (#608)
chrisknvidia Oct 8, 2026
838f9e9
Merge branch 'main' into yashraj/isolate-transitive-content-cache
github-actions[bot] Oct 8, 2026
1486134
Merge branch 'main' into yashraj/fix-pi-input-permissions-20261007
github-actions[bot] Oct 8, 2026
8f4ca7d
fix(static_yara): surface dropped rule files instead of reporting com…
Souptik96 Oct 8, 2026
8006c0b
Merge branch 'main' into yashraj/isolate-transitive-content-cache
github-actions[bot] Oct 8, 2026
5667438
Merge branch 'main' into yashraj/fix-pi-input-permissions-20261007
github-actions[bot] Oct 8, 2026
66e9438
test(suppression): cover exact transitive baseline round trips
yashrajp22 Oct 9, 2026
fc58fbe
fix(pi): close remaining external input permission gaps
yashrajp22 Oct 9, 2026
d74e1a3
test(yara): use matching strings in include regression
yashrajp22 Oct 9, 2026
12a20cd
style(test): format YARA fixture
yashrajp22 Oct 9, 2026
dd95368
fix(analyzer): stabilize TM1 window identity (#578)
chrisknvidia Oct 9, 2026
0464278
Merge branch 'main' into yashraj/isolate-transitive-content-cache
github-actions[bot] Oct 9, 2026
3ca6d5b
Merge branch 'main' into yashraj/fix-pi-input-permissions-20261007
github-actions[bot] Oct 9, 2026
9108009
fix(baseline): preserve exact findings and protect baseline output (#…
chrisknvidia Oct 9, 2026
6396600
Merge branch 'main' into yashraj/isolate-transitive-content-cache
github-actions[bot] Oct 9, 2026
4711771
Merge branch 'main' into yashraj/fix-pi-input-permissions-20261007
github-actions[bot] Oct 9, 2026
320031c
fix: avoid defensive-language and skill-installation false positives …
chrisknvidia Oct 9, 2026
4c797f2
Merge branch 'main' into yashraj/isolate-transitive-content-cache
github-actions[bot] Oct 9, 2026
69527ef
Merge branch 'main' into yashraj/fix-pi-input-permissions-20261007
github-actions[bot] Oct 9, 2026
2c14261
feat(python): classify executable source surfaces (#579)
chrisknvidia Oct 9, 2026
dcb3e30
Merge branch 'main' into yashraj/isolate-transitive-content-cache
github-actions[bot] Oct 9, 2026
faa207c
Merge branch 'main' into yashraj/fix-pi-input-permissions-20261007
github-actions[bot] Oct 9, 2026
b503b13
Merge current main updates into transitive cache isolation
yashrajp22 Oct 9, 2026
9e9e8a7
merge: preserve Pi permission fixes with latest upstream changes
yashrajp22 Oct 9, 2026
2f93a86
fix(taint): detect inline urllib opener network sinks (#721)
agentsope Oct 9, 2026
9f24d83
Merge branch 'main' into yashraj/isolate-transitive-content-cache
github-actions[bot] Oct 9, 2026
98be7bd
Merge branch 'main' into yashraj/fix-pi-input-permissions-20261007
github-actions[bot] Oct 9, 2026
d62606b
merge: preserve security fixes with latest review branch
yashrajp22 Oct 9, 2026
1acfc41
Merge remote-tracking branch 'origin/pr-792-current' into yashraj/iso…
yashrajp22 Oct 9, 2026
657788f
Merge pull request #791 from NVIDIA/yashraj/fix-pi-input-permissions-…
mohgupta-ship-it Oct 9, 2026
0f412f9
Merge branch 'main' into yashraj/isolate-transitive-content-cache
github-actions[bot] Oct 9, 2026
5edc347
Merge pull request #792 from NVIDIA/yashraj/isolate-transitive-conten…
mohgupta-ship-it Oct 9, 2026
d1adc01
merge: sync with NVIDIA/SkillSpector 2.12.0
rodrigorjsf Oct 10, 2026
997508b
docs(notices): say what the regex license file contains
rodrigorjsf Oct 10, 2026
a7d78df
docs(notices): reproduce the CNRI Python license regex names
rodrigorjsf Oct 10, 2026
0e18f80
docs: retire the allowed-tools separator deviation upstream closed
rodrigorjsf Oct 10, 2026
0d1e7a6
fix(ci): let the upstream-drift workflow load at all
rodrigorjsf Oct 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 5 additions & 6 deletions .claude/rules/allowed-tools-separator.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@ paths:
- "src/skillspector/nodes/analyzers/mcp_least_privilege.py"
---

# `allowed-tools` separator — known deviation, do not fix in passing
# `allowed-tools` scoped syntax — known defect, do not fix in passing

- Both files split the Agent Skills `allowed-tools` frontmatter field on **commas** (`build_context.py:304`, `mcp_least_privilege.py:143`). The specification defines it as **space**-separated. This is a known, deliberate deviation — not an oversight.
- **Do not change it as part of unrelated work.** Correcting the separator changes findings on inputs scanned today, which violates the repo's behavior-preservation constraint. It needs its own decision, changelog entry, and version bump.
- Neither call site has direct test coverage, so a change here fails silently in the suite. Downstream consumers are `_map_allowed_tools_to_categories` and the `has_declaration` branch (`mcp_least_privilege.py:190`, `:334`), which drive LP1, LP3, and LP4.
- Reopen conditions, blast radius, and the migration checklist: `docs/MULTI_FRAMEWORK_SKILL_ANALYSIS.md` § Known deviation.
- A second, independent defect lives here: scoped syntax (`Bash(git:*)`) does not match `_TOOL_TO_CAPABILITY` even with correct whitespace splitting. Fixing one does not fix the other.
- Scoped tool syntax (`Bash(git:*)`) does not map to a capability: `_map_allowed_tools_to_categories` looks the whole token up in `_TOOL_TO_CAPABILITY`, so it matches nothing. A skill declaring only scoped tools has a declaration and an empty capability set, which drives LP1, LP3 and LP4.
- **Do not change it as part of unrelated work.** Extracting the base tool name changes findings on inputs scanned today, which violates the repo's behavior-preservation constraint. It needs its own decision and changelog entry.
- The separator is no longer a deviation. Both parsers split on whitespace, or on commas when the value contains one, since upstream `1b87593`. Do not "restore" comma-only splitting.
- Background: `docs/MULTI_FRAMEWORK_SKILL_ANALYSIS.md` § Closed deviation.
10 changes: 6 additions & 4 deletions .claude/rules/analyzers.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,17 @@ paths:

# Analyzer nodes

Full walkthrough: `docs/DEVELOPMENT.md` §9. Signatures and the registration facts that doc omits:
Full walkthrough: `docs/DEVELOPMENT.md` §9, whose registration steps are upstream text that still describes hand-editing `__init__.py` — that part is stale, and the bullets below win. Signatures and registration:

- A node is `node(state: SkillspectorState) -> AnalyzerNodeResponse`, returning `{"findings": list[Finding]}`.
- A static pattern module exposes `analyze(content: str, file_path: str, file_type: str) -> list[AnalyzerFinding]` and is driven by `static_runner.run_static_patterns`. Take category and remediation text from `pattern_defaults`.
- Registering means editing `nodes/analyzers/__init__.py` twice, in the same relative order: append the id to `ANALYZER_NODE_IDS` and add the matching key to `ANALYZER_NODES`. `graph.py` needs no change — its edges are generated from `ANALYZER_NODE_IDS` in a loop.
- Then update `EXPECTED_ANALYZER_NODE_IDS` in `tests/nodes/analyzers/test_registry.py`. It is an exact, order-sensitive list asserted for equality; a new id in the wrong position fails the suite.
- Registering is discovery, not an edit (upstream `837d100`, in since the 2.12.0 sync): `nodes/analyzers/__init__.py` imports every non-package module beside it and registers the ones exposing a module-level `ANALYZER_ID` and a callable `node`. Never hand-edit that file — it is upstream's whole. A module that fails to import does not raise at load time: it lands in `ANALYZER_LOAD_ERRORS`, the analyzer is absent from the graph, and `finalize_inspection_ledger` reports it as an `ANALYZER_LOAD_ERROR` ledger event (upstream `dbcb3c5`). So a new analyzer that finds nothing may never have been imported — read the scan's `analysis_completeness` before debugging its Rules.
- Registry order is `pkgutil` order, not a curated one. Nothing may depend on it.
- Then add the id to `EXPECTED_ANALYZER_NODE_IDS` in `tests/nodes/analyzers/test_registry.py`. It is compared as a set; a missing id still fails the suite.
- `graph.py` skips a discovered module whose `is_available()` returns false, or whose `requires_api_key` is true with no LLM configured. A fork Analyzer declares neither — its gates live inside `node`, below.
- `guard_analyzer_node` wraps every node and converts any exception into `{"findings": []}` plus a `"failed"` ledger status. A broken analyzer will not fail the run or a test that only checks `graph.invoke()` succeeded — assert on findings directly.
- Adding the id to `_MODEL_SLOTS` in `constants.py` is optional and only enables the `SKILLSPECTOR_MODEL_<SLOT>` override; an unlisted id falls back to `model_config["default"]`.
- Every analyzer runs on every scan — `build_context` fans out to all of them unconditionally. An analyzer that should only apply to certain inputs must return early on its own gate.
- Every wired analyzer runs on every scan — `build_context` fans out to all of them unconditionally. An analyzer that should only apply to certain inputs must return early on its own gate.
- Two gates, and only two, return bare `{"findings": []}` (ADR 0002): a **Framework** mismatch, and a **default-off configuration gate** whose default is the absence of a request — today only `--spec-checks off`, which `structure_agent_skills_spec` answers with silence. A gate that is a *request* the user made is not one of them: `--no-llm` turns an analyzer that would have run off, and the semantic analyzers report that as `disabled` with `LedgerReason.DISABLED_BY_CONFIGURATION`. Read the ADR before adding a third; the cost that decides it is that any status row reaches `analysis_completeness`, which the Behavior Snapshot projects.
- Past whichever gate applies, the analyzer reports a status on every input: applicability is one named predicate, the gate tests its result for emptiness, the planned work derives from that same result, and an empty result emits `not_applicable` with `LedgerReason.NO_APPLICABLE_FILES` and no ledger event. Two expressions for "applicable" is the defect ADR 0006 records.
- **No analyzer may encode run configuration into a `Finding`.** `suppression.finding_fingerprint` hashes **every** field of the payload — `confidence` and `tags` included — so a Finding that says "this run was configured such-and-such" fingerprints one defect two ways, and a committed baseline stops suppressing when the command line changes. Carry the signal in graph state instead, the way `unscored_rule_ids` carries `--spec-checks`. This is the analyzer-facing half of the rule stated in `.claude/rules/suppression.md`, which is scoped to `suppression.py` and so never loads here; both halves are one rule. A run-scoped state key needs a reducer before a *second* analyzer may write it — the parallel fan-out rejects a concurrent write to a bare channel outside any node, where `guard_analyzer_node` cannot catch it.
5 changes: 4 additions & 1 deletion .claude/rules/pi-extension.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
---
paths:
- "extensions/*.ts"
- ".opencode/tools/*.ts"
---

# Pi extension
# Pi and OpenCode extensions

Two extensions, one security contract. The helper names below are Pi's; the OpenCode tool under `.opencode/tools/` keeps the same contract under its own names: `redact()` on both streams, `SKILLSPECTOR_BIN` first in binary resolution, `noLlm` defaulting to true.

- Subprocess calls go through `pi.exec(bin, argsArray, {...})` with an argument **array**. Never build a shell string — there is no shell in this path and adding one reintroduces injection.
- Both `stdout` and `stderr` must pass through `redactSecrets()` before being returned to the caller.
Expand Down
2 changes: 1 addition & 1 deletion .claude/rules/tests.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ paths:

# Test markers

- `pyproject.toml` sets `addopts = "-m 'not integration and not provider'"`, so anything carrying those markers is deselected by default. Run them with `make test-integration` / `make test-provider [openai|anthropic|nv_build]`.
- `pyproject.toml` sets `addopts = "-m 'not integration and not provider'"`, so anything carrying those markers is deselected by default. Run them with `make test-integration` / `make test-provider [openai|anthropic|nv_build|gemini]`.
- `tests/integration/conftest.py` auto-applies `pytest.mark.integration` to every test under that path, which cuts both ways. **Never put a unit test there** — it is marked by location and silently deselected from the default run. **Anywhere else, mark explicitly** — a live-LLM or live-provider test written under `tests/unit/` or `tests/nodes/` runs unmarked in default CI and will call a real provider.
- Use the module-level form for explicit marking: `pytestmark = [pytest.mark.provider]` (see `tests/provider/test_provider_endpoint.py`). Existing examples outside the marker directories: `tests/nodes/analyzers/test_semantic_developer_intent.py`, `tests/test_mcp_tool_poisoning.py`.
- `asyncio_mode = "auto"` — `async def test_*` needs no `@pytest.mark.asyncio`.
Expand Down
54 changes: 52 additions & 2 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,20 @@ ENV=dev # options: dev|s

# Active LLM provider. Selects which provider answers credentials,
# metadata, and default-model lookups. Leave unset to default to nv_build.
# Options: openai | anthropic | anthropic_proxy | nv_build
# Options: openai | anthropic | anthropic_proxy | bedrock | nv_build |
# ollama | azure_openai | openai_compatible | gemini | claude_cli |
# gemini_cli | opencode_cli
# codex_cli is registered but disabled: its read-only sandbox permits host-file reads.
SKILLSPECTOR_PROVIDER=

# Aggregate deadline for one complete scan workflow. Defaults to 600 seconds;
# override this positive finite value when a different limit is required.
# SKILLSPECTOR_MAX_WORKFLOW_SECONDS=600

# Static analysis per artifact defaults to 300 seconds, capped by the remaining
# workflow time. Set a positive finite value before starting the process.
# SKILLSPECTOR_MAX_STATIC_ANALYSIS_SECONDS_PER_ARTIFACT=300

# Provider credentials — set the one matching SKILLSPECTOR_PROVIDER (or
# leave SKILLSPECTOR_PROVIDER unset and set NVIDIA_INFERENCE_KEY for the
# default nv_build path).
Expand All @@ -18,8 +29,17 @@ NVIDIA_INFERENCE_KEY=
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.
# are trimmed and passed through unchanged. Unset or blank sends high for nv_build
# with z-ai/glm-5.3; other provider/model combinations keep their endpoint defaults.
SKILLSPECTOR_REASONING_EFFORT=
# Optional language for human-readable LLM finding text. Machine-readable values
# such as rule IDs and severity values remain unchanged.
SKILLSPECTOR_OUTPUT_LANGUAGE=
# Optional sampling controls. Temperature is supported by hosted providers;
# seed is forwarded only to OpenAI-compatible and Azure OpenAI endpoints.
# Unset or blank values preserve provider defaults.
SKILLSPECTOR_TEMPERATURE= # range: 0..1
SKILLSPECTOR_SEED= # integer

# For SKILLSPECTOR_PROVIDER=anthropic.
ANTHROPIC_API_KEY=
Expand All @@ -31,6 +51,36 @@ ANTHROPIC_PROXY_API_KEY=
# ANTHROPIC_PROXY_API_VERSION=vertex-2023-10-16 # optional; defaults to vertex-2023-10-16
# SKILLSPECTOR_SSL_VERIFY=false # set to false for internal/self-signed CAs

# For SKILLSPECTOR_PROVIDER=gemini (Google Cloud ADC / Workload Identity).
# Requires GOOGLE_CLOUD_PROJECT; GOOGLE_CLOUD_LOCATION defaults to global.
# Local use: gcloud auth application-default login (configure quota project with: gcloud auth application-default set-quota-project PROJECT_ID)
# Kubernetes/GKE: configure Workload Identity (leave GOOGLE_APPLICATION_CREDENTIALS unset)
# Note: regional endpoints alone do not guarantee data residency; global does not support residency.
GOOGLE_CLOUD_PROJECT=
# GOOGLE_CLOUD_LOCATION=global # optional; e.g. global, us, eu, us-central1
# GOOGLE_APPLICATION_CREDENTIALS= # optional; path to Workload/Workforce Identity Federation config JSON

# For SKILLSPECTOR_PROVIDER=bedrock. AWS_PROFILE is optional; when unset,
# boto3 uses its standard credential chain. AWS_REGION defaults to us-west-2.
# AWS_PROFILE=
# AWS_REGION=us-west-2

# For SKILLSPECTOR_PROVIDER=ollama. No API key is required.
# OLLAMA_BASE_URL=http://localhost:11434/v1 # optional; shown default

# For SKILLSPECTOR_PROVIDER=azure_openai.
AZURE_OPENAI_API_KEY=
AZURE_OPENAI_ENDPOINT=
# AZURE_OPENAI_DEPLOYMENT= # optional; defaults to the model label
# AZURE_OPENAI_API_VERSION=2024-06-01 # optional; shown default

# For SKILLSPECTOR_PROVIDER=openai_compatible.
SKILLSPECTOR_COMPAT_API_KEY=
SKILLSPECTOR_COMPAT_BASE_URL=

# claude_cli, gemini_cli, and opencode_cli use their CLI's existing local
# authentication session and do not need an API key here.

# SkillSpector config
SKILLSPECTOR_MODEL= # leave empty to use the active provider's bundled default (see README); set to override (e.g. gpt-5.2)
# SKILLSPECTOR_MODEL_REGISTRY=./model_registry.yaml # optional override; defaults to each provider's bundled YAML in src/skillspector/providers/
Expand Down
15 changes: 15 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ concurrency:
env:
UV_VERSION: "0.10.x"
PYTHON_VERSION: "3.12"
NODE_VERSION: "22.20.0"
UV_CACHE_DIR: .uv-cache
UV_LINK_MODE: copy

Expand Down Expand Up @@ -91,6 +92,20 @@ jobs:
- run: uv run skillspector --version
- run: uv run make test-ci

test-opencode:
name: OpenCode TypeScript Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Set up Node.js
# Pinned to a full commit SHA (third-party action); comment tracks the tag.
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: ${{ env.NODE_VERSION }}
- run: node --test tests/opencode/skillspector_scan_lib.test.ts
- name: Run Pi extension security tests
run: node --test tests/unit/test_pi_extension.mjs

docker-smoke:
needs: changes
if: needs.changes.outputs.docker == 'true'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
ref: ${{ github.event.pull_request.merge_commit_sha }}
- name: Set up uv
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/upstream-drift.yml
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,9 @@ jobs:

# Every line of upstream-authored text (commit subjects, path names)
# reaches this file by redirection, never by command substitution into
# a shell string and never through `${{ }}`. It is fenced as code for
# the same reason: an unfenced `(#357)` renders as a cross-reference
# and would backlink an unrelated fork issue every week.
# a shell string and never through an Actions expression. It is fenced
# as code for the same reason: an unfenced `(#357)` renders as a
# cross-reference and would backlink an unrelated fork issue every week.
{
printf '%s\n\n' "$ISSUE_MARKER"
printf 'Upstream `NVIDIA/SkillSpector` has **%s commit(s)** this fork has not merged.\n' \
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -111,3 +111,7 @@ credentials.json

# Agent session scaffolding, not a deliverable
docs/handoffs/
# Reports (generated artifacts only — anchored to repo root)
/report*.md
/report*.json
/report*.sarif
5 changes: 5 additions & 0 deletions .opencode/commands/skillspector.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
description: Scan an AI agent skill for security risks with SkillSpector (static analysis by default); use when vetting a skill before install or auditing one in use.
---
Scan the skill at $ARGUMENTS with the skillspector_scan tool (static analysis only, no LLM calls).
To opt into LLM semantic analysis instead, call skillspector_scan with noLlm false and SKILLSPECTOR_PROVIDER/SKILLSPECTOR_MODEL set.
24 changes: 24 additions & 0 deletions .opencode/tools/skillspector_scan.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { tool } from "@opencode-ai/plugin"
import { execFile } from "node:child_process"
import fs from "node:fs"
import { promisify } from "node:util"
import { executeScan, type RunFile } from "./skillspector_scan_lib.ts"

const runFile = promisify(execFile) as unknown as RunFile

export default tool({
description: "Scan an AI agent skill for security risks with SkillSpector. Static analysis only by default; opt into LLM analysis explicitly.",
args: {
target: tool.schema.string().describe("Skill to scan: local path, .md/.zip file, or Git/file URL"),
format: tool.schema.enum(["terminal", "json", "markdown", "sarif"]).default("json").describe("Report format"),
noLlm: tool.schema.boolean().default(true).describe("Skip LLM analysis (static checks only). Set false to opt into LLM semantic analysis via SKILLSPECTOR_PROVIDER/SKILLSPECTOR_MODEL"),
output: tool.schema.string().optional().describe("Write the report to this file instead of returning it (resolved against the session directory if relative)"),
},
async execute(args, context) {
return executeScan(args, context, {
runFile,
existsSync: fs.existsSync,
lstatSync: fs.lstatSync,
})
},
})
Loading
Loading