Skip to content
Merged
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
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@
All notable changes to Sunglasses are documented here.


## [0.2.66] — 2026-06-11

### Added (discovery_file_poisoning expansion — agent config/discovery-file class)

- **+8 discovery_file_poisoning patterns** (`GLS-DFP-083`, `084`, `087`, `088`, `089`, `090`, `095`, `096`) — coverage for poisoned config/discovery surfaces AI agents read and trust: redacted HAR-bundle sidecars, Release-Please/Changesets configs, WebdriverIO/Selenium test configs, WebGPU/shader source comments, OpenTelemetry trace/baggage metadata, PowerShell module manifests, GitHub Discussion templates, and repository ruleset / branch-protection exports. **1,038 → 1,046 patterns / 65 categories / 7,631 keywords.**
- All 8 passed the clean-code false-positive gate (`test_false_positives` + `test_real_corpus_fp`) before ship — the same Miasma/Hades agent-config-poisoning class where a trusted repo file becomes agent policy on read.

## [0.2.65] — 2026-06-10

### Added (discovery_file_poisoning expansion)
Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,8 +139,8 @@ result = scanner.scan_auto("any_file.ext")
|--------|-------|
| Average text scan | <1ms (avg 0.26ms on M3 Max, single-threaded) |
| Throughput | ~3,800 scans/sec (single-threaded, M3 Max) |
| Patterns | 1038 |
| Keywords | 7,548 |
| Patterns | 1046 |
| Keywords | 7,631 |
| Languages | 23 |
| Attack categories | 65 |
| Normalization techniques | 17 |
Expand All @@ -151,15 +151,15 @@ result = scanner.scan_auto("any_file.ext")
| Core dependencies | Zero for text scan; optional deps for media |
| Platforms | Mac, Windows, Linux — anywhere Python runs |

_All performance numbers verified against `stats/current.json` (v0.2.65, updated Jun 6, 2026). Measured on Apple M3 Max, 48GB RAM, single-threaded Python 3.11. Your hardware will differ._
_All performance numbers verified against `stats/current.json` (v0.2.66, updated Jun 11, 2026). Measured on Apple M3 Max, 48GB RAM, single-threaded Python 3.11. Your hardware will differ._

## 23 Languages

English, Spanish, Portuguese, French, German, Italian, Dutch, Russian, Ukrainian, Polish, Czech, Turkish, Azerbaijani, Arabic, Hebrew, Persian, Chinese, Japanese, Korean, Hindi, Bengali, Indonesian, Vietnamese — plus normalization handles romanization, Unicode confusables, and 17 other obfuscation techniques. Community language contributions welcome.

## What Works Today (v0.2.65)
## What Works Today (v0.2.66)

- ✅ Text scanning: 1038 patterns, 7,548 keywords, 23 languages, 65 attack categories
- ✅ Text scanning: 1046 patterns, 7,631 keywords, 23 languages, 65 attack categories
- ✅ Negation handling: "do NOT run rm -rf" correctly downgrades severity
- ✅ Multi-stage pipeline: normalization (17 techniques) → pattern match → decision
- ✅ Image scanning: OCR + EXIF metadata + hidden text detection (requires Tesseract)
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

setup(
name="sunglasses",
version="0.2.65",
version="0.2.66",
description="Sunglasses for AI agents. Protection layer + neighborhood watch.",
long_description=open("README.md").read(),
long_description_content_type="text/markdown",
Expand Down
2 changes: 1 addition & 1 deletion sunglasses/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@
#
# "Don't let your agents get fooled."

__version__ = "0.2.65"
__version__ = "0.2.66"
Loading
Loading