Merge feature/agent-detail-view (#444) and resolve conflicts, keeping the
PR's backend-driven detail page (API endpoint, audit scoping, tests) and
our enhanced agents list view (search, card headers, claim badges).
Also fixes three review issues:
- Add 403 guard for non-admin audit identity filter (prevents querying
events for identities the caller does not own)
- Add idx_audit_events_identity index via migration v2
- Update test assertions for new 403 behavior and migration count
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
When two processes with the same private key race to register, the loser
gets a 409 from the identity server. Re-resolve the handle by DID and
continue instead of failing startup.
Co-authored-by: Cursor <cursoragent@cursor.com>
Unifies first-run setup into a single idempotent command that registers
identity, completes claim, and imports API keys from env. Persists
--base-url in client config for remote daemon connections.
Closes#434
Co-authored-by: Cursor <cursoragent@cursor.com>
Adds `env: Literal["prod", "dev", "test"]` to `AuthsomeConfig` (read from
`AUTHSOME_ENV`) so the runtime environment is a first-class config concern
shared across client and server.
Gates `analytics_enabled` on `env == "prod"` in `ServerConfig` so PostHog
is never initialised in dev or test — preventing the background consumer
thread from blocking pytest process exit and causing CI jobs to hang until
the 6-hour GitHub Actions timeout.
Test suite now sets `AUTHSOME_ENV=test` at module level and in the
`_disable_analytics` autouse fixture. The CI workflow also sets it as
defence-in-depth and adds `timeout-minutes: 10` so runaway jobs fail fast.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add ProviderType.BROWSER enum value; reclassify linkedin-browser and
x-browser from type:app to type:browser
- Add 8 LLM providers (anthropic, mistral, groq, openrouter, together,
fireworks, perplexity, bedrock) with type:llm
- Add 8 MCP providers (brave-search-mcp, stripe-mcp, sentry-mcp,
linear-mcp, notion-mcp, github-mcp, slack-mcp, cloudflare-mcp)
with type:mcp; each is distinct from the existing OAuth app provider
of the same service
- Migrate all 73 bundled provider files from .json to .jsonc; each file
now has a top-level comment block documenting purpose, auth/flow type,
and non-obvious config choices (scope rationale, header quirks, etc.)
Closes#408
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a `type` field (app | llm | mcp) to ProviderDefinition so consumers
can filter and display providers by category. Backfills all 71 bundled
providers. Also introduces a `parse_jsonc` utility that strips // and /* */
comments before JSON parsing, and wires it into the bundled loader and the
CLI register command so both .json and .jsonc provider files are accepted.
Closes#362
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Hatchling respects .gitignore by default, so the generated
src/authsome/ui/web/* assets were excluded from the wheel even though
build-ui.sh populates them before uv build runs in CI.
- Add force-include for the wheel target (sdist already had this) with
the correct installed path (authsome/ui/web, not src/authsome/ui/web)
- Remove .gitkeep — build-ui.sh's mkdir -p creates the directory;
no placeholder needed
- Drop the .gitignore exception for .gitkeep
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>