Skip to content

feat: capture all VS Code extension ad surfaces, not just statusline #12

Description

@amitray007

Background

The Kickbacks VS Code extension serves ads across 6 distinct surfaces. The menu-bar app currently only reads one of them (~/.vibe-ads/cli-ad.json, the statusline surface). The others are either baked into patched bundles at extension activation time (not accessible via local file) or readable from a different local file we're not yet checking.

Surfaces audit

Surface Location Local file? Currently captured?
Overlay Claude Code webview (above spinner glyph) ❌ Patched into index.js at activation
Banner Claude Code usage-limit bar (bottom of chat) ❌ Same patched block
Status bar VS Code bottom bar ❌ In-memory widget
Spinner verb Terminal thinking-verb during task run ~/.claude/settings.jsonspinnerVerbs.verbs[0]
Statusline Terminal CLI output line ~/.vibe-ads/cli-ad.json ✅ (current)
Codex overlay Codex IDE webview ❌ Separate patched bundle

What we can do

Short-term (local file read):

  • Read ~/.claude/settings.jsonspinnerVerbs.verbs[0] as a secondary local signal
  • Use it as a fallback when cli-ad.json is stale/missing (spinner text can persist longer)
  • Cross-check: if the two differ, it signals the extension rotated ads mid-session

Not feasible locally:

  • Overlay, banner, status bar, and Codex overlay are all in-process VS Code artifacts — no stable local file to read. The ad text injected into index.js at activation time is the same as what arrives from /v1/portfolio, so the API model already captures it.

Considered but rejected

  • Reading the patched index.js to extract __VIBE_ADS_AD__ — fragile, depends on exact patch format, breaks on extension updates
  • Using debug.log — schema is unstable (flagged in design doc)

Next steps

  1. Add ~/.claude/settings.json spinnerVerbs reader as a fallback signal in live.ts
  2. Optionally show "spinner" vs "statusline" as labelled rows in the Recent Ads section if the texts differ
  3. Investigate whether overlay/banner impression counts are reflected in the /v1/portfolio earnings (they should be — that's how revenue is tracked)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions