Files
steipete--codexbar/docs/zed.md
T
2026-07-13 12:22:33 +08:00

77 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
summary: "Zed provider data source: editor Keychain session and Zed cloud API."
read_when:
- Debugging Zed usage fetch
- Updating Zed Keychain or cloud API handling
- Adjusting Zed provider UI/menu behavior
---
# Zed provider
CodexBar monitors Zed plan status, billing cycle dates, edit-prediction quota, and overdue invoices via Zed's cloud API.
## Data source
**Local probe (Keychain + cloud API)** — reads the same credentials Zed stores after GitHub sign-in, then calls:
```text
GET https://cloud.zed.dev/client/users/me
Authorization: {user_id} {access_token}
```
### Keychain credentials
| Item | Value |
| --- | --- |
| Service URL | `https://zed.dev` by default, or the configured HTTPS `server_url` for a custom server |
| Keychain class | **Internet password** (`kSecClassInternetPassword`, server = service URL). Generic-password fallback is supported for older layouts. |
| Account | Zed user ID (string) |
| Secret | Access token (UTF-8 bytes) |
CodexBar requests a non-interactive Keychain read. Existing Zed items can still carry an access-control list that makes
macOS show a SecurityAgent prompt the first time CodexBar reads them. Choose **Always Allow** to avoid repeat prompts. If
Zed has never been signed in, or access is denied, the provider reports **Not signed in to Zed**.
### Settings override
CodexBar reads Zeds user settings from `~/.config/zed/settings.json`. The `credentials_url` setting (falls back to
`server_url`) selects which Keychain entry to read. For the trusted
`https://zed.dev` and `https://staging.zed.dev` servers, Zed may use a separate credential identifier. Custom servers
must use HTTPS and store credentials under the exact same `server_url`; CodexBar rejects cross-origin overrides so a
settings-file change cannot forward a Keychain token to another host.
## Snapshot mapping
| Zed field | CodexBar display |
| --- | --- |
| `plan.plan_v3` | Plan label (Free / Pro / Trial / Student / Business) |
| `plan.usage.edit_predictions` | Primary bar: used/limit or “Unlimited” on Pro+ |
| `plan.subscription_period.ended_at` | Billing cycle reset / secondary window |
| `plan.has_overdue_invoices` | Warning note + billing window marker |
## Limitations
### Not tracked as “Zed”
Per [LLM Providers](https://zed.dev/docs/ai/llm-providers.html) and [External Agents](https://zed.dev/docs/ai/external-agents.html):
- BYOK models → track via OpenAI, Claude, Gemini, etc.
- External agents (Claude Agent, Codex ACP) → bill through those providers
## Troubleshooting
### “Not signed in to Zed”
- Sign in from the **Zed editor app** (Command Palette → `client: sign in`).
- Confirm a Keychain internet-password entry exists for server `https://zed.dev` (or your custom `credentials_url`).
### “Could not read Zed credentials from the Keychain”
- macOS may block Keychain access until you allow CodexBar (same class of issue as other IDE probes).
- Re-sign in to Zed after changing `credentials_url`.
## Key files
- `Sources/CodexBarCore/Providers/Zed/ZedStatusProbe.swift` - Keychain read, cloud API, snapshot mapping
- `Sources/CodexBarCore/Providers/Zed/ZedProviderDescriptor.swift` - provider metadata and local fetch strategy
- `Sources/CodexBar/Providers/Zed/ZedProviderImplementation.swift` - app registration
- `Tests/CodexBarTests/ZedStatusProbeTests.swift` - cloud API and routing tests