Skip to content

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 06 Apr 07:33
· 375 commits to main since this release

Added

  • ai gemini -m deep-research: Gemini Deep Research via the Interactions API (deep-research-pro-preview-12-2025). Submits a background job, polls every 30s until complete, cancels via DELETE on Ctrl-C. Auth: GOOGLE_API_KEY_FREE_TIERGOOGLE_API_KEY_TIER_1 (REST-only; no OAuth path). Output follows the same -o/auto-file/stdout conventions as other models. (AI-CLI-36)
  • ai --version / ai -V: print the installed package version and exit.
  • ai gemini -s/--start-tier TIER: Skip earlier auth tiers explicitly (1=OAuth CLI, 2=free API key, 3=paid API key). Useful when OAuth returns truncated responses without erroring. (AI-CLI-36)
  • ai gemini -d standard/--depth standard: Planner-Executor research pipeline — query generation → concurrent Gemini-grounded search → synthesis. Per-step JSON checkpointing at ~/.local/state/ai-cli/research-runs/<run-id>/. Resume with --resume <run-id>. (AI-CLI-36)

Fixed

  • ai gemini -m deep-research: Interactions API submit response returns "id" (flat string), not "name" (resource path). Code was using .get("name", "").split("/")[-1], producing an empty string and silently failing before polling started. Fixed to interaction.get("id") or interaction.get("name", "").split("/")[-1]. (AI-CLI-36)
  • Prompt injection watcher: hardened against stale prompt visible during claude --continue startup. Added 10-cycle grace period, double capture-pane verification, removed C-u keystroke, and signal file is now deleted after injection (not before). (AI-CLI-35)
  • Process hygiene (ai ps): stale PID file cleanup, orphan detection, and session health checks.
  • ai layout command: YAML-driven iTerm2 window/tab/pane layout system. Subcommands: list, validate <name>, profiles <name>, <name> (apply). Layout files at ~/.config/iterm2/layouts/*.yaml. Nested pane split model (vertical/horizontal). Dynamic Profile generation + runtime tinted icon per tab. See docs/designs/iterm2-layout-system.md.
  • icon_generator module: runtime PNG icon generation with Pillow. Auto-contrast tint derived from tab background color via HSL color theory (180° hue rotation + lightness adaptation). Explicit icon_color override supported. Source logos at src/ai_cli/data/icons/. Falls back to Claude brand orange (#da7756) when no tab color is set.
  • Per-session Dynamic Profile generation: each session gets a ai-cli:{ai_name} Dynamic Profile JSON (inherits from base profile, sets tab color + icon) written to ~/Library/Application Support/iTerm2/DynamicProfiles/ai-cli-generated/ at launch and cleaned up on exit.
  • Lease-file-based collision-free iTerm2 tab color assignment. Replaces modulo-based system; any palette size supported. Lease files at ~/.local/state/ai-cli/iterm2/color-leases.json.
  • [iterm2.base_profiles] config section: configure which iTerm2 base profile each session type inherits from.
  • [iterm2.project_colors] config section: pin project/session names to preferred palette color slots.
  • [iterm2.icon_color_overrides] config section: explicit icon tint override per palette color slot.
  • ai color <name|#hex> command: ad hoc tab color reassignment for the current session.
  • ai internal cleanup-session-files <ai_name>: remove session icon PNG and Dynamic Profile JSON; called by EXIT trap.
  • OSC 1 title fix: session name now set via \033]1; instead of \033]0; so mosh on remote sessions does not prepend [mosh] to the tab title.
  • ai setup command: detects managed platform vs standalone environment and configures CLAUDE.md accordingly; marks file assume-unchanged in git after swap so external users don't see local modifications
  • CLAUDE-full.md: standalone self-contained Claude Code session config for users without the managed platform; CLAUDE.md remains the lean variant for managed platform users
  • pyright basic mode type checking in CI lint job

Security

  • iTerm2 session-tracking files moved from /tmp/ to ~/.local/state/ai-cli/iterm2/ (XDG Base Directory Specification), eliminating symlink attack surface on shared servers
  • Session runtime files (cc-exit-*, cc-resume-prompt-*, ai-watcher-lock-*) moved from /tmp/ to ~/.local/state/ai-cli/
  • session_id_uuid validated against UUID regex before bash f-string interpolation in get_engine_script(); malformed input is cleared
  • --project argument rejects values containing / or \ path separators

Added

  • CI test matrix (Python 3.11/3.12/3.13) with Codecov coverage reporting
  • GitHub Release automation on tag push
  • Pre-commit config (ruff + hygiene hooks)
  • Renovate for dependency management (replaces Dependabot)
  • Issue templates (bug report, feature request) and PR template
  • Full README rewrite (PyOpenSci 13-section structure)
  • CONTRIBUTING.md