vikingowl
|
de1798ff5c
|
fix: M1-M7 gap audit phase 1 — bug fix + 5 quick wins
Bug fix:
- window.go: token ratio after compaction used len(w.messages) after
reassignment, always producing ratio ~1.0. Fixed by saving original
length before assignment.
Gap 1 (M3): Scanner patterns 13 → 47
- Added 34 new patterns: Azure, DigitalOcean, HuggingFace, Grafana,
GitHub extended (app/oauth/refresh), Shopify, Twilio, SendGrid,
NPM, PyPI, Databricks, Pulumi, Postman, Sentry, Anthropic admin,
OpenAI extended, Vault, Supabase, Telegram, Discord, JWT, Heroku,
Mailgun, Figma
Gap 2 (M3): Config security section
- SecuritySection with EntropyThreshold + custom PatternConfig
- Wire custom patterns from TOML into scanner at startup
Gap 3 (M4): Polling discovery loop
- StartDiscoveryLoop with 30s ticker, reconciles arms vs discovered
- Router.RemoveArm for disappeared local models
Gap 4 (M5): Incognito LocalOnly enforcement
- Router.SetLocalOnly filters non-local arms in Select()
- TUI incognito toggle (Ctrl+X, /incognito) sets local-only routing
Gap 5 (M6): Reactive 413 compaction
- Window.ForceCompact() bypasses ShouldCompact threshold
- Engine handles 413 with emergency compact + retry
|
2026-04-03 23:11:08 +02:00 |
|
vikingowl
|
09f102bdec
|
feat: add security firewall with secret scanning and incognito mode
internal/security/ — core security layer baked into gnoma:
- Secret scanner: gitleaks-derived regex patterns (Anthropic, OpenAI,
AWS, GitHub, GitLab, Slack, Stripe, private keys, DB URLs, generic
secrets) + Shannon entropy detection for unknown formats
- Redactor: replaces matched secrets with [REDACTED], merges
overlapping ranges, preserves surrounding context
- Unicode sanitizer: NFKC normalization, strips Cf/Co categories,
tag characters (ASCII smuggling), zero-width chars, RTL overrides
- Incognito mode: suppresses persistence, learning, content logging
- Firewall: wraps engine, scans outgoing messages + system prompt +
tool results before they reach the provider
Wired into engine and CLI. 21 security tests.
|
2026-04-03 14:07:50 +02:00 |
|