authsome 0.3.0__tar.gz → 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- authsome-0.3.1/.github/release-please-manifest.json +3 -0
- {authsome-0.3.0 → authsome-0.3.1}/CHANGELOG.md +13 -0
- {authsome-0.3.0 → authsome-0.3.1}/PKG-INFO +1 -1
- authsome-0.3.1/docs/internal/cli-design-review.md +253 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/internal/manual-testing.md +18 -12
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/reference/cli.mdx +82 -43
- {authsome-0.3.0 → authsome-0.3.1}/pyproject.toml +1 -1
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/cli/context.py +6 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/cli/main.py +94 -30
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/routes/health.py +1 -2
- authsome-0.3.0/.github/release-please-manifest.json +0 -3
- {authsome-0.3.0 → authsome-0.3.1}/.claude-plugin/marketplace.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/.github/dependabot.yml +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/.github/pull_request_template.md +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/.github/release-please-config.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/.github/workflows/pr-title.yml +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/.github/workflows/publish-rc.yml +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/.github/workflows/publish.yml +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/.github/workflows/release-please.yml +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/.github/workflows/test.yml +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/.gitignore +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/.pre-commit-config.yaml +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/AGENTS.md +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/CLAUDE.md +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/CONTRIBUTING.md +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/LICENSE +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/README.md +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/assets/authsome-how-it-works-dark.svg +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/assets/authsome-how-it-works-light.svg +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/assets/authsome-logo-dark.svg +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/assets/authsome-logo-light.svg +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/UBIQUITOUS_LANGUAGE.md +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/adr/0001-provider-client-record-server-scope.md +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/adr/0002-server-registered-identities.md +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/internal/authsome-design.md +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/register-provider.md +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/README.md +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/changelog.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/compared.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/concepts/architecture.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/concepts/credential-storage.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/concepts/profiles-vs-connections.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/concepts/provider-registry.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/concepts/proxy-injection.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/concepts/the-daemon.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/docs.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/favicon.svg +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/guides/custom-providers.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/guides/headless-device-code.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/guides/login-with-oauth.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/guides/multiple-connections.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/guides/profiles.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/guides/run-agents-with-proxy.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/guides/use-api-keys.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/index.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/installation.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/agents/anthropic-sdk.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/agents/claude-code.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/agents/codex.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/agents/cowork.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/agents/cursor.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/agents/index.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/agents/langchain.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/agents/llamaindex.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/agents/nanoclaw.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/agents/openai-agents-sdk.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/agents/opencode.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/agents/python.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/ahrefs.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/apollo.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/ashby.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/beehiiv.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/brevo.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/buffer.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/calendly.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/clearbit.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/dub.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/g2.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/hunter.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/index.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/instantly.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/intercom.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/keywords-everywhere.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/klaviyo.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/lemlist.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/livestorm.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/mailchimp.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/mention-me.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/openai.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/optimizely.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/postmark.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/resend.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/rewardful.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/savvycal.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/semrush.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/sendgrid.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/tolt.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/typeform.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/wistia.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/api-key/zapier.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/oauth/atlassian.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/oauth/discord.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/oauth/github.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/oauth/gitlab.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/oauth/google.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/oauth/hubspot.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/oauth/index.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/oauth/klaviyo-oauth.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/oauth/linear.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/oauth/microsoft.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/oauth/notion-dcr.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/oauth/notion.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/oauth/postiz.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/oauth/slack.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/integrations/oauth/x.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/logo/dark.svg +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/logo/light.svg +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/quickstart.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/reference/audit-log.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/reference/bundled-providers.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/reference/daemon-api.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/reference/environment-variables.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/reference/file-layout.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/reference/provider-schema.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/reference/python-library.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/roadmap.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/security/daemon-trust-boundary.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/security/disclosure.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/security/encryption.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/security/hosted-deployment.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/security/threat-model.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/snippets/masked-input-note.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/snippets/multi-connections-cta.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/snippets/whats-next-apikey.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/snippets/whats-next-oauth.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/troubleshooting/daemon-issues.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/troubleshooting/doctor.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/troubleshooting/oauth-callbacks.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/troubleshooting/proxy-networking.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/docs/site/troubleshooting/token-refresh.mdx +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/skills/authsome/SKILL.md +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/skills/authsome/evals/evals.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/audit/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/ahrefs.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/apollo.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/ashby.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/atlassian.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/beehiiv.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/brevo.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/buffer.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/calendly.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/clearbit.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/discord.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/dub.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/g2.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/github.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/gitlab.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/google.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/hubspot.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/hunter.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/instantly.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/intercom.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/keywords-everywhere.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/klaviyo-oauth.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/klaviyo.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/lemlist.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/linear.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/livestorm.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/mailchimp.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/mention-me.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/microsoft.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/notion.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/notion_dcr.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/openai.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/optimizely.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/postiz.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/postmark.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/resend.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/rewardful.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/savvycal.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/semrush.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/sendgrid.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/slack.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/tolt.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/typeform.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/wistia.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/x.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/bundled_providers/zapier.json +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/flows/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/flows/api_key.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/flows/base.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/flows/dcr_pkce.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/flows/device_code.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/flows/pkce.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/input_provider.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/models/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/models/config.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/models/connection.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/models/enums.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/models/provider.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/service.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/sessions.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/auth/utils.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/cli/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/cli/client.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/cli/client_config.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/cli/daemon_control.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/cli/helpers.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/errors.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/identity/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/identity/keys.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/identity/proof.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/identity/registry.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/paths.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/proxy/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/proxy/certs.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/proxy/router.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/proxy/runner.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/proxy/server.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/py.typed +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/app.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/daemon.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/dependencies.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/routes/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/routes/_deps.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/routes/auth.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/routes/connections.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/routes/identities.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/routes/providers.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/routes/proxy.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/routes/ui.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/schemas.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/ui/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/ui/pages.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/ui/web_theme.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/ui_sessions.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/server/urls.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/store/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/store/interfaces.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/store/local.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/ui/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/ui/static/app.js +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/ui/static/style.css +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/ui/templates/_app_detail_shell.html +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/ui/templates/_layout.html +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/ui/templates/app_detail_apikey.html +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/ui/templates/app_detail_disconnected.html +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/ui/templates/app_detail_oauth.html +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/ui/templates/connections.html +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/ui/templates/overview.html +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/utils.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/vault/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/src/authsome/vault/crypto.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/auth/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/auth/test_flows.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/auth/test_models.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/auth/test_service.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/auth/test_service_provider_clients.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/auth/test_url_template.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/cli/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/cli/conftest.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/cli/test_client_signing.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/cli/test_daemon.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/cli/test_doctor.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/cli/test_get.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/cli/test_helpers.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/cli/test_identity.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/cli/test_import_env.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/cli/test_init.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/cli/test_list.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/cli/test_login.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/cli/test_logout.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/cli/test_register.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/cli/test_revoke.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/cli/test_ui.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/cli/test_whoami.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/common/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/common/test_audit.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/common/test_errors.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/common/test_logging.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/common/test_utils.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/conftest.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/identity/test_identity.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/identity/test_proof.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/proxy/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/proxy/test_proxy.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/server/test_auth_sessions.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/server/test_pop_auth.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/server/test_provider_operation_policy.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/server/test_ui_sessions.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/vault/__init__.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/tests/vault/test_crypto.py +0 -0
- {authsome-0.3.0 → authsome-0.3.1}/uv.lock +0 -0
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.3.1](https://github.com/agentrhq/authsome/compare/authsome-v0.3.0...authsome-v0.3.1) (2026-05-17)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **cli:** resolve three CLI bugs and improve audit log command ([3b990e3](https://github.com/agentrhq/authsome/commit/3b990e3cae998d9ccaccb421b5cb577c2bb89de3))
|
|
9
|
+
* **cli:** resolve three CLI bugs, improve audit log, and sync docs ([dd9cad3](https://github.com/agentrhq/authsome/commit/dd9cad326cb2817826eb8e5b8bb42f5f3df8e2a2))
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Documentation
|
|
13
|
+
|
|
14
|
+
* **cli:** sync reference and manual-testing guide with 0.3.0 implementation ([bdf659f](https://github.com/agentrhq/authsome/commit/bdf659ffffc0a0c2100cc21508daec042161656e))
|
|
15
|
+
|
|
3
16
|
## [0.3.0](https://github.com/agentrhq/authsome/compare/authsome-v0.2.4...authsome-v0.3.0) (2026-05-15)
|
|
4
17
|
|
|
5
18
|
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
# CLI Design Review — authsome 0.3.0
|
|
2
|
+
|
|
3
|
+
_Generated: 2026-05-17_
|
|
4
|
+
_Scope: audit of the CLI surface against (1) published docs, (2) implementation, (3) industry conventions (clig.dev, gh, stripe, fly, kubectl)._
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Summary
|
|
9
|
+
|
|
10
|
+
Three categories of issues:
|
|
11
|
+
|
|
12
|
+
1. **Docs vs. implementation gaps** — documented behavior that the code no longer matches.
|
|
13
|
+
2. **Implementation bugs** — the code is broken relative to stated intent.
|
|
14
|
+
3. **Design gaps vs. industry conventions** — opportunities to align with well-established patterns.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 1. Docs vs. Implementation Gaps
|
|
19
|
+
|
|
20
|
+
### 1a. Exit code table is completely wrong
|
|
21
|
+
|
|
22
|
+
**`docs/site/reference/cli.mdx` says:**
|
|
23
|
+
|
|
24
|
+
| Code | Meaning |
|
|
25
|
+
|------|---------|
|
|
26
|
+
| 2 | Invalid usage |
|
|
27
|
+
| 3 | Provider not found |
|
|
28
|
+
| 4 | Authentication failed |
|
|
29
|
+
| 5 | Credential missing |
|
|
30
|
+
| 6 | Refresh failed |
|
|
31
|
+
| 7 | Store unavailable |
|
|
32
|
+
| 8 | User cancelled credential entry |
|
|
33
|
+
|
|
34
|
+
**`src/authsome/utils.py:format_error_code` actually does:**
|
|
35
|
+
|
|
36
|
+
| Code | Exception(s) |
|
|
37
|
+
|------|------|
|
|
38
|
+
| 1 | Generic / unrecognized |
|
|
39
|
+
| 2 | `AuthenticationFailedError`, `InputCancelledError` |
|
|
40
|
+
| 3 | `ConnectionNotFoundError` |
|
|
41
|
+
| 4 | `ProviderNotFoundError`, `OperationNotAllowedError` |
|
|
42
|
+
| 5 | `CredentialMissingError`, `TokenExpiredError`, `RefreshFailedError` |
|
|
43
|
+
| 6 | `ConnectionAlreadyExistsError` |
|
|
44
|
+
| 7 | `ProviderAlreadyRegisteredError`, `FileExistsError` |
|
|
45
|
+
| 8 | `EndpointUnreachableError` |
|
|
46
|
+
| 9 | `DaemonUnavailableError` |
|
|
47
|
+
|
|
48
|
+
Every code from 2 onwards maps to a different error than documented. Scripts checking exit codes against the published table will behave incorrectly. The table in the docs needs a full replacement.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
### 1b. `set-default` is a top-level command, not `connection set-default`
|
|
53
|
+
|
|
54
|
+
Docs say: `uvx authsome connection set-default <provider> <connection>`
|
|
55
|
+
CLI binary exposes: `authsome set-default <provider> <connection>` at the root
|
|
56
|
+
|
|
57
|
+
The `connection` namespace documented does not exist. Running `authsome connection set-default` raises an error.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### 1c. `doctor` check names have changed
|
|
62
|
+
|
|
63
|
+
Docs and manual-testing guide mention checks named `config`, `providers`, `vault`.
|
|
64
|
+
Current implementation returns: `spec_version`, `identity`, `providers`, `connections`, `vault`, `integrity`.
|
|
65
|
+
`config` is gone. Three new checks are present and undocumented.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
### 1d. `--log-file` default path is wrong in docs
|
|
70
|
+
|
|
71
|
+
Docs say default: `~/.authsome/logs/authsome.log`.
|
|
72
|
+
`--help` output shows: `~/.authsome/client/logs/authsome.log`.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
### 1e. `profile` command exists but is not documented
|
|
77
|
+
|
|
78
|
+
`authsome profile` with subcommands `create` and `use` appears in the CLI but is absent from `docs/site/reference/cli.mdx`.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
### 1f. `export` has a `shell` format not documented
|
|
83
|
+
|
|
84
|
+
`authsome export --format` accepts `env`, `json`, and `shell`.
|
|
85
|
+
The CLI reference documents only `env` and `json`.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
### 1g. `daemon logs` subcommand — docs show `-n 100`, actual flag is different
|
|
90
|
+
|
|
91
|
+
Docs say `authsome daemon logs [-n 100]`. Actual `authsome log` (client log command) uses `-n / --lines COUNT`.
|
|
92
|
+
These are two different commands (`daemon logs` tails the daemon log; `log` tails the client audit log) — the distinction and both flags need clear documentation.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 2. Implementation Bugs
|
|
97
|
+
|
|
98
|
+
### 2a. `doctor` renders `spec_version` as FAIL on every healthy system
|
|
99
|
+
|
|
100
|
+
**Location:** `src/authsome/cli/main.py:930`, `src/authsome/server/routes/health.py:32`
|
|
101
|
+
|
|
102
|
+
The server stores the spec version number as the value:
|
|
103
|
+
```python
|
|
104
|
+
checks["spec_version"] = str(current_spec_version()) # → "3"
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
The CLI checks `val == "ok"` for every key, so `"3" != "ok"` always renders `FAIL` even on a healthy install.
|
|
108
|
+
|
|
109
|
+
**Fix (server side):** Return `"ok"` for a passing check; surface the version number in a separate key (e.g., `spec_version_number: "3"`).
|
|
110
|
+
**Fix (CLI side):** Treat `spec_version` as a special case that passes when the value is a numeric string.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
### 2b. `--force` on `register` does not skip the confirmation prompt
|
|
115
|
+
|
|
116
|
+
**Location:** `src/authsome/cli/main.py:698–733`
|
|
117
|
+
|
|
118
|
+
The confirmation prompt checks only `yes` flag, not `force`. Running `authsome register --force` still prompts interactively; piping no input causes a generic failure (exit 1, no useful message).
|
|
119
|
+
|
|
120
|
+
The `--force` flag is forwarded only to the server for the duplicate-override check. The client prompt is never bypassed.
|
|
121
|
+
|
|
122
|
+
**Current state:** `--force` and `--yes` have different, non-overlapping effects. A full "force overwrite silently" requires `--force --yes`.
|
|
123
|
+
**Fix:** Either document the split explicitly in both `--help` and docs, or make `--force` imply `--yes` (the more ergonomic convention — `docker rm -f` and `git push --force` do not prompt).
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
### 2c. `--quiet` silences ALL output, including primary data
|
|
128
|
+
|
|
129
|
+
**Location:** `src/authsome/cli/context.py:52–54`
|
|
130
|
+
|
|
131
|
+
`echo()` returns immediately when `quiet=True`. This means `authsome --quiet list` produces zero output — the provider table is suppressed alongside any informational banners.
|
|
132
|
+
|
|
133
|
+
**Industry convention (clig.dev, gh):** `--quiet` suppresses status messages, progress indicators, and banners. It does NOT suppress the primary result (data rows, IDs, URLs). Errors always print to stderr regardless of `--quiet`.
|
|
134
|
+
|
|
135
|
+
**Fix:** Split `echo()` into a data path (`emit()`) and an info path (`note()`). Apply `quiet` suppression only to `note()`.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
### 2d. `daemon stop` reports stopped but daemon immediately restarts
|
|
140
|
+
|
|
141
|
+
`authsome daemon stop` outputs "Daemon stopped." and exits 0, but a subsequent `authsome daemon status` shows `running: true` within milliseconds. The guide test for `running: false` after stop cannot pass.
|
|
142
|
+
|
|
143
|
+
Whether this is supervision auto-restart or a race in the status check is not confirmed, but the CLI output creates a misleading state. Either the daemon should indicate it will restart, or the stop command should wait for the process to actually stop before returning.
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## 3. Design Gaps vs. Industry Conventions
|
|
148
|
+
|
|
149
|
+
### 3a. `inspect` and `get` serve overlapping purposes
|
|
150
|
+
|
|
151
|
+
Current situation:
|
|
152
|
+
- `authsome get <provider>` — returns connection metadata; secrets redacted; accepts `--field`, `--show-secret`, `--json`
|
|
153
|
+
- `authsome inspect <provider>` — returns full provider definition + connection summary as JSON (always)
|
|
154
|
+
|
|
155
|
+
This creates confusion: users must know that `get` is for connection state and `inspect` is for provider config. The `--json` flag on `inspect` is redundant because `inspect` always outputs JSON.
|
|
156
|
+
|
|
157
|
+
**Convention (kubectl, docker, gh):**
|
|
158
|
+
- `describe` / `inspect` — human-readable detail combining metadata and context
|
|
159
|
+
- `get` — scriptable, machine-readable fetch
|
|
160
|
+
|
|
161
|
+
**Recommendation:** Make `inspect` human-readable (like `kubectl describe`) and `get` the JSON-native scriptable path. Or merge into a single `show <provider>` command that defaults to human-readable and accepts `--json`. Either way, the two commands should not both exist at the same conceptual level without a clear, documented distinction.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
### 3b. `--force` and `--yes` semantics need to follow convention
|
|
166
|
+
|
|
167
|
+
Industry standard (clig.dev, `gh`, `fly`):
|
|
168
|
+
- `--yes` / `-y`: skip interactive confirmation prompts
|
|
169
|
+
- `--force` / `-f`: override a safety constraint the tool would otherwise refuse
|
|
170
|
+
|
|
171
|
+
Currently, `register --force` means "server-side overwrite" and `register --yes` means "skip client prompt" — this is a valid split, but it's not what most users expect when they reach for `--force`. The `--help` text for `--force` says "Force overwrite if provider exists" which implies the prompt is also skipped.
|
|
172
|
+
|
|
173
|
+
**Recommendation:** `--force` should imply `--yes` (skips the prompt AND forces the overwrite). If the server-side distinction must be preserved, document it explicitly or rename the server-side flag to `--overwrite` internally.
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
### 3c. `set-default` should be under a command group
|
|
178
|
+
|
|
179
|
+
`authsome set-default <provider> <connection>` at the top level is an outlier. It's a CRUD operation on a connection property, and the docs already (correctly) document it as `connection set-default`.
|
|
180
|
+
|
|
181
|
+
**Convention (gh, kubectl, fly):** CRUD on a sub-resource belongs under a noun group. `kubectl label node`, `gh repo set-default`, `fly machine update` all group the resource type first.
|
|
182
|
+
|
|
183
|
+
**Recommendation:** Implement `authsome connection set-default` as documented (or `authsome connection default <provider> <connection>` for a simpler form). Remove or alias the flat `set-default`.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
### 3d. Exit code range is too wide
|
|
188
|
+
|
|
189
|
+
The current scheme uses codes 1–9. `sysexits.h` reserves 64–78 for application errors; POSIX reserves 126–128+ for shell-level errors. Codes 1–9 are in the safe application range, but:
|
|
190
|
+
|
|
191
|
+
- Code 2 is used for `AuthenticationFailedError` — but shells and Click both use 2 for "usage error / bad arguments". This clash means a usage error and an authentication failure are indistinguishable.
|
|
192
|
+
- `gh` uses only 0, 1, 2, 4 and documents them clearly.
|
|
193
|
+
|
|
194
|
+
**Recommendation:** Reserve 2 strictly for argument/usage errors (Click's default). Shift application errors to 3–9 (or adopt `sysexits.h` 64+ for a cleaner split). Update the docs table to match.
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
### 3e. `--json` is redundant on `inspect` and missing on `daemon status`
|
|
199
|
+
|
|
200
|
+
- `inspect` always outputs JSON regardless of `--json` flag. The flag is a no-op but appears in `--help`, misleading users.
|
|
201
|
+
- `daemon status` always outputs JSON. There is no human-readable plain-text mode for `daemon status`.
|
|
202
|
+
|
|
203
|
+
**Recommendation:**
|
|
204
|
+
- `inspect` should have a human-readable default and use `--json` to switch to machine output (like every other command).
|
|
205
|
+
- `daemon status` should follow the same pattern — plain text summary by default, `--json` for structured output.
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
### 3f. `remove` help text doesn't mention bundled providers
|
|
210
|
+
|
|
211
|
+
`authsome remove --help` says "Permanently uninstall the specified custom PROVIDER definition."
|
|
212
|
+
The CLI reference says `remove` also "resets to bundled" when used on a bundled provider.
|
|
213
|
+
|
|
214
|
+
If the behavior differs for bundled vs. custom providers, the `--help` text should say so. Users who accidentally run `authsome remove github` should know whether they're deleting something permanently or just resetting to defaults.
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Recommended Priority Order
|
|
219
|
+
|
|
220
|
+
| Priority | Item | Effort |
|
|
221
|
+
|----------|------|--------|
|
|
222
|
+
| P0 | Fix `doctor` `spec_version: FAIL` rendering bug | Small |
|
|
223
|
+
| P0 | Fix exit code documentation table | Small |
|
|
224
|
+
| P1 | Fix `--quiet` — stop suppressing data output | Medium |
|
|
225
|
+
| P1 | Fix `--force` on `register` — imply `--yes` or document split | Small |
|
|
226
|
+
| P1 | Add `connection set-default` subgroup (or alias to match docs) | Small |
|
|
227
|
+
| P1 | Document `profile` command, `shell` export format, corrected `--log-file` path | Small |
|
|
228
|
+
| P2 | Resolve `inspect` vs `get` overlap — pick a clear model | Medium |
|
|
229
|
+
| P2 | Add human-readable default to `inspect` and `daemon status` | Medium |
|
|
230
|
+
| P2 | Fix `daemon stop` — wait for actual stop before returning | Medium |
|
|
231
|
+
| P2 | Fix exit code 2 clash with Click usage errors | Small |
|
|
232
|
+
| P3 | Update manual-testing.md to match current check names and exit codes | Small |
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## Correct Exit Code Table (matches `format_error_code` as-is)
|
|
237
|
+
|
|
238
|
+
Replace the table in `docs/site/reference/cli.mdx`:
|
|
239
|
+
|
|
240
|
+
| Code | Meaning | Error class |
|
|
241
|
+
|------|---------|-------------|
|
|
242
|
+
| 0 | Success | — |
|
|
243
|
+
| 1 | Unexpected failure | Unclassified exceptions |
|
|
244
|
+
| 2 | Authentication failed or input cancelled | `AuthenticationFailedError`, `InputCancelledError` |
|
|
245
|
+
| 3 | Connection not found | `ConnectionNotFoundError` |
|
|
246
|
+
| 4 | Provider not found or operation not allowed | `ProviderNotFoundError`, `OperationNotAllowedError` |
|
|
247
|
+
| 5 | Credential missing or token expired | `CredentialMissingError`, `TokenExpiredError`, `RefreshFailedError` |
|
|
248
|
+
| 6 | Connection already exists | `ConnectionAlreadyExistsError` |
|
|
249
|
+
| 7 | Provider already registered | `ProviderAlreadyRegisteredError` |
|
|
250
|
+
| 8 | Endpoint unreachable | `EndpointUnreachableError` |
|
|
251
|
+
| 9 | Daemon unavailable | `DaemonUnavailableError` |
|
|
252
|
+
|
|
253
|
+
Note: Click argument validation errors (missing required argument, unknown option) produce exit code 2 via Click's own mechanism — this overlaps with `AuthenticationFailedError`. Consider shifting application codes up by one (3 → authentication, 4 → connection not found, …) to cleanly reserve 2 for usage errors.
|
|
@@ -32,13 +32,13 @@ uv run authsome whoami --json
|
|
|
32
32
|
uv run authsome doctor
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
**Expected:** Exit code `0`; `OK` printed for `
|
|
35
|
+
**Expected:** Exit code `0`; `OK` printed for `spec_version`, `identity`, `providers`, `connections`, `vault`, `integrity`.
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
38
|
uv run authsome doctor --json
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
**Expected:** `{"status": "ready", "checks": {"
|
|
41
|
+
**Expected:** `{"status": "ready", "checks": {"spec_version": "ok", "identity": "ok", "providers": "ok", "connections": "ok", "vault": "ok", "integrity": "ok"}}`.
|
|
42
42
|
|
|
43
43
|
---
|
|
44
44
|
|
|
@@ -220,26 +220,32 @@ uv run authsome run --quiet curl -s https://api.resend.com/domains
|
|
|
220
220
|
uv run authsome log
|
|
221
221
|
```
|
|
222
222
|
|
|
223
|
-
**Expected:**
|
|
223
|
+
**Expected:** Human-readable table of recent audit entries with columns `Timestamp`, `Event`, `Provider`, `Status`. Shows "No audit entries found." if empty.
|
|
224
224
|
|
|
225
225
|
```bash
|
|
226
226
|
uv run authsome log -n 5
|
|
227
227
|
```
|
|
228
228
|
|
|
229
|
-
**Expected:** Last 5 entries only.
|
|
229
|
+
**Expected:** Last 5 entries only (same table format).
|
|
230
230
|
|
|
231
231
|
```bash
|
|
232
232
|
uv run authsome log -n 5 --json
|
|
233
233
|
```
|
|
234
234
|
|
|
235
|
-
**Expected:**
|
|
235
|
+
**Expected:** JSON object with `log_file` path and `entries` array of parsed audit event objects, each with `timestamp`, `event`, `provider`, `status`.
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
uv run authsome log --raw -n 10
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**Expected:** Last 10 lines of the raw client debug log (loguru format).
|
|
236
242
|
|
|
237
243
|
---
|
|
238
244
|
|
|
239
245
|
## 11. Connection Management
|
|
240
246
|
|
|
241
247
|
```bash
|
|
242
|
-
uv run authsome
|
|
248
|
+
uv run authsome set-default github default
|
|
243
249
|
```
|
|
244
250
|
|
|
245
251
|
**Expected:** Confirmation that `default` is now the default connection for `github`.
|
|
@@ -279,11 +285,11 @@ uv run authsome list | grep test-custom
|
|
|
279
285
|
**Expected:** Listed under `custom` source, `not_connected`.
|
|
280
286
|
|
|
281
287
|
```bash
|
|
282
|
-
# Register again to test --force
|
|
288
|
+
# Register again to test --force (overwrites without prompting)
|
|
283
289
|
uv run authsome register /tmp/test-provider.json --force
|
|
284
290
|
```
|
|
285
291
|
|
|
286
|
-
**Expected:**
|
|
292
|
+
**Expected:** Registers immediately, no confirmation prompt, no error.
|
|
287
293
|
|
|
288
294
|
```bash
|
|
289
295
|
uv run authsome remove test-custom
|
|
@@ -372,19 +378,19 @@ uv run authsome --verbose get github
|
|
|
372
378
|
uv run authsome login doesnotexist 2>&1; echo "exit: $?"
|
|
373
379
|
```
|
|
374
380
|
|
|
375
|
-
**Expected:** `ProviderNotFoundError`, exit code `
|
|
381
|
+
**Expected:** `ProviderNotFoundError`, exit code `4`.
|
|
376
382
|
|
|
377
383
|
```bash
|
|
378
384
|
uv run authsome inspect doesnotexist 2>&1; echo "exit: $?"
|
|
379
385
|
```
|
|
380
386
|
|
|
381
|
-
**Expected:** `ProviderNotFoundError`, exit code `
|
|
387
|
+
**Expected:** `ProviderNotFoundError`, exit code `4`.
|
|
382
388
|
|
|
383
389
|
```bash
|
|
384
390
|
uv run authsome logout doesnotexist 2>&1; echo "exit: $?"
|
|
385
391
|
```
|
|
386
392
|
|
|
387
|
-
**Expected:** `ProviderNotFoundError`, exit code `
|
|
393
|
+
**Expected:** `ProviderNotFoundError`, exit code `4`.
|
|
388
394
|
|
|
389
395
|
```bash
|
|
390
396
|
# Missing required argument
|
|
@@ -399,7 +405,7 @@ uv run authsome logout resend
|
|
|
399
405
|
uv run authsome get resend 2>&1; echo "exit: $?"
|
|
400
406
|
```
|
|
401
407
|
|
|
402
|
-
**Expected:**
|
|
408
|
+
**Expected:** `ConnectionNotFoundError`, exit code `3`.
|
|
403
409
|
|
|
404
410
|
---
|
|
405
411
|
|
|
@@ -9,22 +9,23 @@ All commands support `--json` for machine-readable output, `--quiet` to suppress
|
|
|
9
9
|
|
|
10
10
|
| Command | Description |
|
|
11
11
|
|---------|-------------|
|
|
12
|
-
| `whoami` | Show
|
|
13
|
-
| `doctor` | Run health checks on
|
|
12
|
+
| `whoami` | Show local identity context and encryption mode. |
|
|
13
|
+
| `doctor` | Run health checks on identity, providers, vault, and store integrity. |
|
|
14
14
|
| `list` | List all providers (bundled and custom) and their connection states. |
|
|
15
15
|
| `inspect <provider>` | Show the full provider definition and any connections. |
|
|
16
16
|
| `login <provider>` | Authenticate with a provider using its configured flow. |
|
|
17
17
|
| `get <provider>` | Get connection metadata (secrets redacted by default). |
|
|
18
|
-
| `export <provider>` | Export credentials in `env` or `json` format. |
|
|
18
|
+
| `export <provider>` | Export credentials in `env`, `shell`, or `json` format. |
|
|
19
19
|
| `run -- <cmd>` | Run a subprocess behind the local auth proxy. |
|
|
20
20
|
| `scan` | Discover provider API keys in env files and the current environment. |
|
|
21
21
|
| `logout <provider>` | Log out of a connection and remove local state. |
|
|
22
22
|
| `revoke <provider>` | Reset all connections and client secrets for the provider. |
|
|
23
23
|
| `remove <provider>` | Uninstall a custom provider or reset a bundled one. |
|
|
24
24
|
| `register <path>` | Register a custom provider from a JSON file. |
|
|
25
|
-
| `
|
|
25
|
+
| `set-default <provider> <connection>` | Set the default connection for a provider. |
|
|
26
|
+
| `profile` | Manage local profiles backed by identity keys. |
|
|
26
27
|
| `ui` | Open the dashboard in the browser. |
|
|
27
|
-
| `log` | View
|
|
28
|
+
| `log` | View structured audit entries. |
|
|
28
29
|
| `daemon <subcommand>` | Manage the local daemon: `serve`, `start`, `stop`, `restart`, `status`, `logs`. |
|
|
29
30
|
|
|
30
31
|
## Global flags
|
|
@@ -32,32 +33,42 @@ All commands support `--json` for machine-readable output, `--quiet` to suppress
|
|
|
32
33
|
| Flag | Description |
|
|
33
34
|
|------|-------------|
|
|
34
35
|
| `--json` | Output in machine-readable JSON. |
|
|
35
|
-
| `--quiet` | Suppress non-essential output. |
|
|
36
|
+
| `--quiet` | Suppress non-essential output (banners, status messages). Primary data rows always print. |
|
|
36
37
|
| `--no-color` | Disable ANSI colors. |
|
|
37
38
|
| `-v`, `--version` | Print the authsome version. |
|
|
38
39
|
| `--verbose` | Enable DEBUG logging to stderr. |
|
|
39
|
-
| `--log-file <path>` | Path for the rotating log file. Pass `""` to disable. Default: `~/.authsome/logs/authsome.log`. |
|
|
40
|
+
| `--log-file <path>` | Path for the rotating client debug log file. Pass `""` to disable. Default: `~/.authsome/client/logs/authsome.log`. |
|
|
40
41
|
|
|
41
42
|
## Command details
|
|
42
43
|
|
|
43
44
|
### `whoami` / `doctor`
|
|
44
45
|
|
|
45
46
|
```bash
|
|
46
|
-
uvx authsome whoami # show
|
|
47
|
+
uvx authsome whoami # show identity context and encryption mode
|
|
47
48
|
uvx authsome doctor # run health checks
|
|
49
|
+
uvx authsome doctor --json # structured output for monitoring
|
|
48
50
|
```
|
|
49
51
|
|
|
50
|
-
`doctor`
|
|
52
|
+
`doctor` runs six checks and exits `0` when all pass:
|
|
53
|
+
|
|
54
|
+
| Check | What it verifies |
|
|
55
|
+
|-------|-----------------|
|
|
56
|
+
| `spec_version` | Server spec version is compatible |
|
|
57
|
+
| `identity` | Active identity key is present and readable |
|
|
58
|
+
| `providers` | Provider registry loads without error |
|
|
59
|
+
| `connections` | Connection store is accessible |
|
|
60
|
+
| `vault` | Vault roundtrip (put / get / delete) succeeds |
|
|
61
|
+
| `integrity` | Store integrity check passes |
|
|
51
62
|
|
|
52
63
|
### `list` / `inspect`
|
|
53
64
|
|
|
54
65
|
```bash
|
|
55
66
|
uvx authsome list # all providers + connection states
|
|
56
|
-
uvx authsome
|
|
57
|
-
uvx authsome inspect github
|
|
67
|
+
uvx authsome list --json # machine-readable, bundled + custom arrays
|
|
68
|
+
uvx authsome inspect github # full provider definition + connections as JSON
|
|
58
69
|
```
|
|
59
70
|
|
|
60
|
-
`
|
|
71
|
+
`--quiet` suppresses the summary header (`Providers: N total, N connected`) but always prints the table.
|
|
61
72
|
|
|
62
73
|
### `login`
|
|
63
74
|
|
|
@@ -71,7 +82,7 @@ uvx authsome login <provider> [OPTIONS]
|
|
|
71
82
|
| `--connection <name>` | Connection name. Default: `default`. |
|
|
72
83
|
| `--scopes <s1,s2>` | Comma-separated scopes to request. |
|
|
73
84
|
| `--base-url <url>` | Override the base URL for multi-tenant providers. |
|
|
74
|
-
| `--force` | Overwrite an existing connection. |
|
|
85
|
+
| `--force` | Overwrite an existing connection without prompting. |
|
|
75
86
|
|
|
76
87
|
Examples:
|
|
77
88
|
|
|
@@ -84,7 +95,7 @@ uvx authsome login github --base-url https://github.acme.com # GitHub Enterpri
|
|
|
84
95
|
```
|
|
85
96
|
|
|
86
97
|
<Warning>
|
|
87
|
-
Sensitive values
|
|
98
|
+
Sensitive values — `client_secret`, API keys — are never accepted as command-line arguments. Authsome collects them through the secure browser bridge or, on headless machines, through masked terminal input.
|
|
88
99
|
</Warning>
|
|
89
100
|
|
|
90
101
|
### `get`
|
|
@@ -96,7 +107,7 @@ uvx authsome get <provider> [OPTIONS]
|
|
|
96
107
|
| Option | Description |
|
|
97
108
|
|--------|-------------|
|
|
98
109
|
| `--connection <name>` | Connection name. Default: `default`. |
|
|
99
|
-
| `--field <field>` | Return only a specific field. |
|
|
110
|
+
| `--field <field>` | Return only the value of a specific field. |
|
|
100
111
|
| `--show-secret` | Reveal encrypted secret values in output. |
|
|
101
112
|
|
|
102
113
|
```bash
|
|
@@ -114,14 +125,15 @@ uvx authsome export <provider> [OPTIONS]
|
|
|
114
125
|
| Option | Description |
|
|
115
126
|
|--------|-------------|
|
|
116
127
|
| `--connection <name>` | Connection name. Default: `default`. |
|
|
117
|
-
| `--format <fmt>` | Output format: `env` (default) or `json`. |
|
|
128
|
+
| `--format <fmt>` | Output format: `env` (default), `shell`, or `json`. |
|
|
118
129
|
|
|
119
130
|
```bash
|
|
120
|
-
uvx authsome export github --format env
|
|
121
|
-
uvx authsome export
|
|
131
|
+
uvx authsome export github --format env # KEY=value lines
|
|
132
|
+
uvx authsome export github --format shell # export KEY=value (sourceable)
|
|
133
|
+
uvx authsome export openai --format json # JSON object
|
|
122
134
|
```
|
|
123
135
|
|
|
124
|
-
Only the `access_token` (OAuth2) or `api_key` (API-key) is exported. Refresh tokens are never exposed
|
|
136
|
+
Only the `access_token` (OAuth2) or `api_key` (API-key) is exported. Refresh tokens are never exposed — authsome handles refresh transparently.
|
|
125
137
|
|
|
126
138
|
### `run`
|
|
127
139
|
|
|
@@ -170,18 +182,27 @@ uvx authsome scan --import --connection ci # import into a named connection
|
|
|
170
182
|
|
|
171
183
|
`scan` does not support `--quiet`. Use `--json` for headless contexts.
|
|
172
184
|
|
|
173
|
-
### `
|
|
185
|
+
### `set-default`
|
|
174
186
|
|
|
175
187
|
```bash
|
|
176
|
-
uvx authsome
|
|
188
|
+
uvx authsome set-default <provider> <connection>
|
|
177
189
|
```
|
|
178
190
|
|
|
179
191
|
Sets the default connection for a provider. The proxy and library calls use the default unless an explicit `--connection` flag is passed.
|
|
180
192
|
|
|
181
193
|
```bash
|
|
182
|
-
uvx authsome
|
|
194
|
+
uvx authsome set-default github work
|
|
183
195
|
```
|
|
184
196
|
|
|
197
|
+
### `profile`
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
uvx authsome profile create # create a new local profile keypair
|
|
201
|
+
uvx authsome profile use # switch the active local profile
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Profiles are backed by Ed25519 identity keys at `~/.authsome/identities/`. Each profile has its own credential namespace in the vault. See [Profiles vs Connections](/concepts/profiles-vs-connections) for the distinction.
|
|
205
|
+
|
|
185
206
|
### `ui`
|
|
186
207
|
|
|
187
208
|
```bash
|
|
@@ -205,7 +226,7 @@ uvx authsome daemon logs [-n 100]
|
|
|
205
226
|
|
|
206
227
|
- `serve` runs the daemon in the foreground (blocks the terminal).
|
|
207
228
|
- `start` / `stop` / `restart` manage a background daemon.
|
|
208
|
-
- `status` prints
|
|
229
|
+
- `status` prints health, PID file path, and log file path as JSON.
|
|
209
230
|
- `logs` tails the daemon log file.
|
|
210
231
|
|
|
211
232
|
### `logout` / `revoke` / `remove`
|
|
@@ -214,7 +235,7 @@ uvx authsome daemon logs [-n 100]
|
|
|
214
235
|
|---------|-------------|-----------------|
|
|
215
236
|
| `logout` | Removes the connection record | Not contacted |
|
|
216
237
|
| `revoke` | Removes all connections + client credentials | Calls revocation endpoint where supported |
|
|
217
|
-
| `remove` | Removes the provider entirely (custom) or resets to bundled (bundled) | Not contacted |
|
|
238
|
+
| `remove` | Removes the provider entirely (custom) or resets to bundled default (bundled) | Not contacted |
|
|
218
239
|
|
|
219
240
|
```bash
|
|
220
241
|
uvx authsome logout github --connection work
|
|
@@ -225,35 +246,53 @@ uvx authsome remove acmecrm
|
|
|
225
246
|
### `register`
|
|
226
247
|
|
|
227
248
|
```bash
|
|
228
|
-
uvx authsome register <path/to/provider.json> [
|
|
249
|
+
uvx authsome register <path/to/provider.json> [OPTIONS]
|
|
229
250
|
```
|
|
230
251
|
|
|
231
|
-
|
|
252
|
+
| Option | Description |
|
|
253
|
+
|--------|-------------|
|
|
254
|
+
| `--force` | Overwrite an existing provider with the same name without prompting. |
|
|
255
|
+
| `--yes` | Skip the confirmation prompt (without forcing an overwrite). |
|
|
256
|
+
|
|
257
|
+
Validates the JSON, copies it into `~/.authsome/providers/`, and confirms the new provider appears in `authsome list`.
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
uvx authsome register ./acme.json # prompt before registering
|
|
261
|
+
uvx authsome register ./acme.json --force # overwrite existing, no prompt
|
|
262
|
+
uvx authsome register ./acme.json --yes # skip prompt, fail if already exists
|
|
263
|
+
```
|
|
232
264
|
|
|
233
265
|
See [Custom providers](/guides/custom-providers) for full templates.
|
|
234
266
|
|
|
235
267
|
### `log`
|
|
236
268
|
|
|
237
269
|
```bash
|
|
238
|
-
uvx authsome log # last 50 audit entries
|
|
239
|
-
uvx authsome log -n 200 # last 200
|
|
240
|
-
uvx authsome log --json #
|
|
270
|
+
uvx authsome log # last 50 structured audit entries
|
|
271
|
+
uvx authsome log -n 200 # last 200 entries
|
|
272
|
+
uvx authsome log --json # entries as a parsed JSON array
|
|
273
|
+
uvx authsome log --raw # raw client debug log (loguru format)
|
|
274
|
+
uvx authsome log --raw -n 20 # last 20 lines of the client debug log
|
|
241
275
|
```
|
|
242
276
|
|
|
243
|
-
Reads from `~/.authsome/
|
|
277
|
+
Reads from `~/.authsome/server/logs/authsome.log` (the server-side structured audit log). Each entry records actions like `login`, `logout`, `revoke`, `export`, and `get --show-secret`, with fields: `timestamp`, `event`, `provider`, `connection`, `identity`, `status`.
|
|
278
|
+
|
|
279
|
+
The `--raw` flag switches to the client-side debug log at `~/.authsome/client/logs/authsome.log` (loguru format, DEBUG level).
|
|
244
280
|
|
|
245
281
|
## Exit codes
|
|
246
282
|
|
|
247
|
-
| Code | Meaning |
|
|
248
|
-
|
|
249
|
-
| `0` | Success |
|
|
250
|
-
| `1` |
|
|
251
|
-
| `2` |
|
|
252
|
-
| `3` |
|
|
253
|
-
| `4` |
|
|
254
|
-
| `5` | Credential missing |
|
|
255
|
-
| `6` |
|
|
256
|
-
| `7` |
|
|
257
|
-
| `8` |
|
|
258
|
-
|
|
259
|
-
|
|
283
|
+
| Code | Meaning | Error class |
|
|
284
|
+
|------|---------|-------------|
|
|
285
|
+
| `0` | Success | — |
|
|
286
|
+
| `1` | Unexpected failure | Unclassified exceptions |
|
|
287
|
+
| `2` | Authentication failed or input cancelled | `AuthenticationFailedError`, `InputCancelledError` |
|
|
288
|
+
| `3` | Connection not found | `ConnectionNotFoundError` |
|
|
289
|
+
| `4` | Provider not found or operation not allowed | `ProviderNotFoundError`, `OperationNotAllowedError` |
|
|
290
|
+
| `5` | Credential missing or token expired | `CredentialMissingError`, `TokenExpiredError`, `RefreshFailedError` |
|
|
291
|
+
| `6` | Connection already exists | `ConnectionAlreadyExistsError` |
|
|
292
|
+
| `7` | Provider already registered | `ProviderAlreadyRegisteredError` |
|
|
293
|
+
| `8` | Endpoint unreachable | `EndpointUnreachableError` |
|
|
294
|
+
| `9` | Daemon unavailable | `DaemonUnavailableError` |
|
|
295
|
+
|
|
296
|
+
Note: Click argument validation errors (missing required argument, unknown option) also produce exit code `2` via Click's own mechanism.
|
|
297
|
+
|
|
298
|
+
When `--json` is passed and a command fails, the structured output includes `"error"` and `"message"` keys.
|
|
@@ -56,6 +56,12 @@ class ContextObj:
|
|
|
56
56
|
color = None
|
|
57
57
|
click.secho(message, err=err, fg=color, nl=nl)
|
|
58
58
|
|
|
59
|
+
def emit(self, message: str, color: str | None = None, nl: bool = True) -> None:
|
|
60
|
+
"""Print primary data output. Never suppressed by --quiet; respects --no-color."""
|
|
61
|
+
if self.no_color:
|
|
62
|
+
color = None
|
|
63
|
+
click.secho(message, fg=color, nl=nl)
|
|
64
|
+
|
|
59
65
|
|
|
60
66
|
pass_ctx = click.make_pass_decorator(ContextObj)
|
|
61
67
|
|