Skip to content

feat: v2.0.0 + v2.1.0 – Shell parity, OAuth, local workers, observability#201

Merged
github-actions[bot] merged 9 commits into
mainfrom
shell-parity
Apr 5, 2026
Merged

feat: v2.0.0 + v2.1.0 – Shell parity, OAuth, local workers, observability#201
github-actions[bot] merged 9 commits into
mainfrom
shell-parity

Conversation

@typelicious
Copy link
Copy Markdown
Collaborator

Summary

  • v2.0.0 – Shell parity & complete provider coverage: CLI deep-links, config workflows, local worker discovery, full LLMAIRouter/KiloCode provider coverage
  • v2.1.0 – Managed provider OAuth wrapper: token store, device-code flows for Google (Antigravity/Gemini CLI), Qwen, Claude Code; faigate-auth CLI
  • v2.1.0 – Local worker completion: Grid integration, GPU/VRAM metrics (Ollama /api/ps, vLLM /metrics), dynamic model enumeration
  • v2.1.0 – Enhanced client profiles: cost_limit_usd_day/cost_limit_usd_month, HTTP 429 enforcement
  • v2.1.0 – Observability suite: MetricsStore.get_anomalies(), GET /api/alerts endpoint
  • Antigravity provider: full registry, catalog, and lane-registry integration for ag/ model family
  • Qwen OAuth: production-ready integration via qwen-code CLI credentials

Test plan

  • CI Gate passes (test, lint, package)
  • Pre-commit hooks pass
  • OAuth flows: faigate-auth google-antigravity, faigate-auth qwen
  • Local worker discovery with GPU metrics
  • Budget limit enforcement (HTTP 429 at threshold)
  • Alerts API: GET /api/alerts

🤖 Generated with Claude Code

André Lange and others added 9 commits April 5, 2026 02:55
- Shell parity and intelligence: CLI deep-links, suggestions, config workflows
- Local worker auto-discovery CLI (faigate-config discover)
- Complete provider coverage: all LLM AI Router custom endpoints now in catalog
- Added missing providers: xAI, Z.AI, Mistral, Groq, HuggingFace, MoonshotAI, MiniMax, Volcano Engine, BytePlus, Qwen, OpenAI Codex, OpenCode Zen, Cerebras, GitHub Copilot, Synthetic, Kimi Coding, Vercel AI Gateway
- KiloCode model-level access: individual catalog entries for kilo-auto/frontier, kilo-auto/balanced, kilo-auto/free
- Enhanced provider catalog: 43 curated provider entries (up from 17)
- Local worker examples and generic provider templates in config.yaml
- Updated roadmap and changelog for v2.0.0 release
- GitHub issues created for v2.1.0 OAuth wrapper functionality
- Token store with encrypted JSON storage
- Generic OAuth backend wrapping existing providers
- Provider factory integration (backend=oauth)
- CLI helper stub with Google ADC support
- Config.yaml examples for qwen‑portal, claude‑code, openai‑codex
- Optional dependencies for OAuth (requests, google‑auth)
- Updated roadmap and changelog
…v2.1.0)

- Add google-antigravity provider to registry, catalog, and lane registry
  with ag/ model family (Claude Opus/Sonnet 4.6, Gemini 3.x variants)
- Rename google-vertex → google-gemini-cli in registry and catalog
- Implement claude_code_oauth() reading token from ~/.config/claude/settings.json
- Add google_oauth_device_flow() for interactive OAuth flows (Gemini, Antigravity)
- Add antigravity provider config example to config.yaml

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…dentials

- Replace placeholder Qwen device flow with real implementation:
  - Correct endpoints: chat.qwen.ai/api/v1/oauth2/{device/code,token}
  - Official client_id from qwen-code source (f0304373...)
  - Scope: openid profile email model.completion
- New qwen_oauth(): reads ~/.qwen/oauth_creds.json (shared with qwen-code CLI)
  - Dynamic base_url from resource_url field (portal.qwen.ai → compatible-mode/v1)
  - Expiry warning with refresh guidance
  - Fallback to dashscope.aliyuncs.com if no resource_url
- New qwen_refresh(): refresh token flow, writes back to ~/.qwen/oauth_creds.json
- qwen_device_code_flow(): stores token to shared ~/.qwen/oauth_creds.json (mode 0o600)
- CLI: faigate-auth qwen-portal reads existing creds or starts device flow;
  --refresh flag triggers token refresh
- Update registry: correct base_url, base_url_env, model (coder-model)
- Update provider_catalog: correct model, source URL, notes
- Update config.yaml: accurate setup instructions replacing placeholder comments

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…tegration

- Extract real OAuth parameters from LLM AI Router connect URL:
  client_id: 1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com
  scopes: cloud-platform, userinfo.email, userinfo.profile, cclog, experimentsandconfigs
- antigravity_oauth(): reads ~/.gemini/oauth_creds.json (shared with Antigravity IDE)
  - Expiry warning with refresh guidance
  - base_url from ANTIGRAVITY_BASE_URL env var (requires network discovery)
- antigravity_refresh(): token refresh via oauth2.googleapis.com, preserves existing fields
- antigravity_login(): full Authorization Code + PKCE flow
  - Generates code_verifier + S256 code_challenge
  - Opens browser to Google consent screen
  - Local HTTP server on :8080 captures callback
  - State parameter validated (CSRF protection)
  - Writes credentials to ~/.gemini/oauth_creds.json (mode 0o600)
- CLI: faigate-auth google-antigravity reads existing creds or starts browser login;
  --refresh flag triggers token refresh without browser
- Update registry: base_url_env=ANTIGRAVITY_BASE_URL, document pending discovery
- Update catalog: real client_id, correct signup_url, observed evidence_level
- Update config.yaml: accurate setup instructions, document endpoint discovery process

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Network discovery confirmed: Antigravity's client interface is a local
ephemeral gRPC language server (127.0.0.1:<port>/exa.language_server_pb
.LanguageServerService/…), not a remote inference endpoint. The Google
OAuth token grants direct access to the Google Generative Language API.

- registry.py: set base_url to generativelanguage.googleapis.com/v1beta/openai
- config.yaml: same default, document gRPC LS discovery finding
- oauth/cli.py: remove "unknown endpoint" warning, use default base_url
- provider_catalog.py: document gRPC LS fact, update recommended_model

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ution

lane_registry.py, local_discovery.py, provider_catalog.py and registry.py
all had content removed by overly broad HEAD-always conflict resolution.
Restore each file to origin/main state (which already contains the v2.1.0
additions that were previously merged via CI fix PRs).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions github-actions Bot enabled auto-merge (squash) April 5, 2026 01:17
@github-actions github-actions Bot merged commit 919418e into main Apr 5, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant