Skip to content

0.5.1

Choose a tag to compare

@onfafanutifafa onfafanutifafa released this 07 Jun 01:11
· 6 commits to main since this release

The Phase 1.8 §2 self-dogfood cut. Every fix in this release came from
a single round of running getdebug against a real 1,217-file Python
repo (crewAIInc/crewAI) — plus a full MCP round-trip against the
debug org itself. Two demo killers, fifteen smaller cuts, zero new
features.

Top-line numbers

  • Python false-positive rate cut roughly 70% on prompt-injection
    • unbounded-stream + secret-placeholder shapes. 14 of 22 HIGH FPs
      on crewAI traced back to message and query in the
      prompt-injection identifier set; both removed.
  • --fail-on=verified-* is now actually a precision lane. Before
    this cut, verified-high and plain high produced the same exit
    code on every real repo — the verified suffix only skipped
    status=invalid secrets. It's now an inclusion gate: a finding
    counts only with affirmative evidence (provider 2xx for secrets).
  • MCP list_findings → get_finding works end-to-end. The
    get_finding tool was hitting an API route that didn't exist — so
    any AI agent that listed findings could never drill into one. The
    route now exists and accepts both the legacy id form and the new
    stable form. Live on prod.

Demo killers (P0)

  • --fail-on=verified-* is an inclusion gate, not a subtraction.
  • TTY output surfaces [LIVE] / [REJECTED] / [UNVERIFIED] badges
    per row + a verification summary line. Pre-fix, verifier output
    was silently dropped on the way to the renderer.
  • Python prompt-injection: message + query removed from the
    identifier set. self.message = f"…" in custom Exception
    subclasses and query = "SELECT …" + … SQL builders no longer
    fire.

Detector improvements

  • New detectors for xAI, GitLab, and npm access tokens —
    verifiers shipped in 0.5.0 but no detector regex existed.
  • Anthropic (sk-ant-…) now correctly classifies as Anthropic, not
    OpenAI. The scan loop tracks per-line consumed ranges so a token
    can produce only one finding.
  • Placeholder values prefixed fake- / mock_ / stub- suppressed
    in .env-style files.
  • PEM-block detector respects Python docstrings + doctest lines.
    Narrow — real sk-… shapes inside docstrings still fire.
  • streamTruePyRe requires kwarg context — kills FPs on
    self.stream = True attribute assignments.

CLI ergonomics

  • --local-llm files are ranked by security relevance before
    the file cap. Pre-fix, the default 50-file cap burned on
    __init__.py + constants before reaching auth/sql handlers.
  • New per-file progress meter [N/M] path · elapsed Ns · ETA Ns
    during --local-llm.
  • New --local-llm-per-file-timeout (default 3 min) — pre-fix
    ceiling was the localllm HTTP client's 10 min, so one stuck file
    could pin a whole run.
  • getdebug fix . --local-only accepts . as the workdir alias
    (every other command did already).
  • getdebug undo deletes the .getdebug-backup-<TS>/ directory by
    default. Use --keep-backup to retain it.
  • getdebug login no longer sticky-caches localhost API URLs
    across sessions.
  • The 20 MB truncation hint now names the file the walk stopped at
    • suggests concrete next steps.

MCP

  • GET /v1/findings/:id exists. mcp__getdebug__get_finding works.
  • Finding ids on the wire are now finding_<projectId>_<contentHash>
    — stable across rescans. Legacy ids still resolve on the input
    side for backwards compat. MCP server source unchanged; same npm
    artifact, but it gets stable ids back from the API now.

Docs

  • /docs Local-mode section now explicitly walks the chat-model
    pull (ollama pull qwen2.5-coder:7b) needed for --local-llm,
    not just the embedding model used by index --local.
  • Documents the per-model wall-clock tradeoff: deepseek-r1:7b ~75s
    per file needs --local-llm-max-files=10, not the default 50.

Upgrade

npm install -g @getdebug/cli@0.5.1
# or for MCP:
npm install -g @getdebug/mcp@0.5.1

No breaking changes. CI gates using --fail-on=verified-high will see
sharply lower fail counts — this is the intended behavior; use plain
--fail-on=high if you want the prior gate.

Full changelog: cli/CHANGELOG.md