authsome 0.2.3rc67__tar.gz → 0.2.3rc68__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.
Files changed (197) hide show
  1. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/.gitignore +4 -1
  2. authsome-0.2.3rc68/DESIGN.html +384 -0
  3. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/PKG-INFO +10 -21
  4. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/README.md +9 -20
  5. authsome-0.2.3rc68/assets/authsome-how-it-works-light.svg +113 -0
  6. authsome-0.2.3rc68/design.md +76 -0
  7. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/pyproject.toml +1 -1
  8. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  9. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  10. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/.github/dependabot.yml +0 -0
  11. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/.github/pull_request_template.md +0 -0
  12. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/.github/release-please-config.json +0 -0
  13. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/.github/release-please-manifest.json +0 -0
  14. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/.github/workflows/pr-title.yml +0 -0
  15. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/.github/workflows/publish-rc.yml +0 -0
  16. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/.github/workflows/publish.yml +0 -0
  17. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/.github/workflows/release-please.yml +0 -0
  18. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/.github/workflows/test.yml +0 -0
  19. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/.pre-commit-config.yaml +0 -0
  20. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/AGENTS.md +0 -0
  21. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/CHANGELOG.md +0 -0
  22. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/CLAUDE.md +0 -0
  23. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/CONTRIBUTING.md +0 -0
  24. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/LICENSE +0 -0
  25. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/UBIQUITOUS_LANGUAGE.md +0 -0
  26. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/adr/0001-provider-client-record-server-scope.md +0 -0
  27. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/architecture.md +0 -0
  28. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/authsome-design.md +0 -0
  29. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/cli.md +0 -0
  30. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/manual-testing.md +0 -0
  31. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/providers.md +0 -0
  32. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/register-provider.md +0 -0
  33. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/security.md +0 -0
  34. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/README.md +0 -0
  35. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/concepts/architecture.mdx +0 -0
  36. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/concepts/credential-storage.mdx +0 -0
  37. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/concepts/provider-registry.mdx +0 -0
  38. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/concepts/proxy-injection.mdx +0 -0
  39. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/docs.json +0 -0
  40. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/guides/custom-providers.mdx +0 -0
  41. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/guides/headless-device-code.mdx +0 -0
  42. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/guides/login-with-oauth.mdx +0 -0
  43. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/guides/profiles.mdx +0 -0
  44. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/guides/run-agents-with-proxy.mdx +0 -0
  45. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/guides/use-api-keys.mdx +0 -0
  46. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/index.mdx +0 -0
  47. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/quickstart.mdx +0 -0
  48. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/reference/bundled-providers.mdx +0 -0
  49. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/reference/cli.mdx +0 -0
  50. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/reference/environment-variables.mdx +0 -0
  51. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/reference/provider-schema.mdx +0 -0
  52. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/troubleshooting/doctor.mdx +0 -0
  53. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/troubleshooting/oauth-callbacks.mdx +0 -0
  54. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/troubleshooting/proxy-networking.mdx +0 -0
  55. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/site/troubleshooting/token-refresh.mdx +0 -0
  56. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/docs/specs/authsome-v1.md +0 -0
  57. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/refactoring.md +0 -0
  58. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/skills/authsome/SKILL.md +0 -0
  59. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/skills/authsome/evals/evals.json +0 -0
  60. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/__init__.py +0 -0
  61. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/audit/__init__.py +0 -0
  62. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/__init__.py +0 -0
  63. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/__init__.py +0 -0
  64. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/ahrefs.json +0 -0
  65. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/apollo.json +0 -0
  66. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/ashby.json +0 -0
  67. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/atlassian.json +0 -0
  68. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/beehiiv.json +0 -0
  69. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/brevo.json +0 -0
  70. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/buffer.json +0 -0
  71. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/calendly.json +0 -0
  72. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/clearbit.json +0 -0
  73. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/discord.json +0 -0
  74. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/dub.json +0 -0
  75. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/g2.json +0 -0
  76. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/github.json +0 -0
  77. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/gitlab.json +0 -0
  78. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/google.json +0 -0
  79. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/hubspot.json +0 -0
  80. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/hunter.json +0 -0
  81. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/instantly.json +0 -0
  82. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/intercom.json +0 -0
  83. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/keywords-everywhere.json +0 -0
  84. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/klaviyo-oauth.json +0 -0
  85. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/klaviyo.json +0 -0
  86. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/lemlist.json +0 -0
  87. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/linear.json +0 -0
  88. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/livestorm.json +0 -0
  89. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/mailchimp.json +0 -0
  90. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/mention-me.json +0 -0
  91. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/microsoft.json +0 -0
  92. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/notion.json +0 -0
  93. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/notion_dcr.json +0 -0
  94. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/openai.json +0 -0
  95. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/optimizely.json +0 -0
  96. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/postiz.json +0 -0
  97. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/postmark.json +0 -0
  98. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/resend.json +0 -0
  99. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/rewardful.json +0 -0
  100. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/savvycal.json +0 -0
  101. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/semrush.json +0 -0
  102. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/sendgrid.json +0 -0
  103. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/slack.json +0 -0
  104. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/tolt.json +0 -0
  105. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/typeform.json +0 -0
  106. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/wistia.json +0 -0
  107. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/x.json +0 -0
  108. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/bundled_providers/zapier.json +0 -0
  109. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/flows/__init__.py +0 -0
  110. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/flows/api_key.py +0 -0
  111. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/flows/base.py +0 -0
  112. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/flows/dcr_pkce.py +0 -0
  113. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/flows/device_code.py +0 -0
  114. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/flows/pkce.py +0 -0
  115. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/input_provider.py +0 -0
  116. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/models/__init__.py +0 -0
  117. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/models/config.py +0 -0
  118. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/models/connection.py +0 -0
  119. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/models/enums.py +0 -0
  120. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/models/profile.py +0 -0
  121. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/models/provider.py +0 -0
  122. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/providers/__init__.py +0 -0
  123. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/providers/registry.py +0 -0
  124. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/service.py +0 -0
  125. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/auth/sessions.py +0 -0
  126. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/cli/__init__.py +0 -0
  127. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/cli/client.py +0 -0
  128. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/cli/daemon_control.py +0 -0
  129. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/cli/main.py +0 -0
  130. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/errors.py +0 -0
  131. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/identity/__init__.py +0 -0
  132. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/proxy/__init__.py +0 -0
  133. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/proxy/router.py +0 -0
  134. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/proxy/runner.py +0 -0
  135. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/proxy/server.py +0 -0
  136. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/py.typed +0 -0
  137. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/server/__init__.py +0 -0
  138. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/server/app.py +0 -0
  139. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/server/daemon.py +0 -0
  140. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/server/dependencies.py +0 -0
  141. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/server/routes/__init__.py +0 -0
  142. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/server/routes/_deps.py +0 -0
  143. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/server/routes/auth.py +0 -0
  144. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/server/routes/connections.py +0 -0
  145. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/server/routes/health.py +0 -0
  146. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/server/routes/providers.py +0 -0
  147. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/server/routes/proxy.py +0 -0
  148. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/server/routes/ui.py +0 -0
  149. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/server/schemas.py +0 -0
  150. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/server/ui/__init__.py +0 -0
  151. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/server/ui/pages.py +0 -0
  152. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/server/ui/web_theme.py +0 -0
  153. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/server/urls.py +0 -0
  154. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/store/__init__.py +0 -0
  155. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/store/interfaces.py +0 -0
  156. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/store/local.py +0 -0
  157. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/ui/__init__.py +0 -0
  158. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/ui/static/app.js +0 -0
  159. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/ui/static/style.css +0 -0
  160. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/ui/templates/_app_detail_shell.html +0 -0
  161. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/ui/templates/_layout.html +0 -0
  162. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/ui/templates/app_detail_apikey.html +0 -0
  163. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/ui/templates/app_detail_disconnected.html +0 -0
  164. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/ui/templates/app_detail_oauth.html +0 -0
  165. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/ui/templates/connections.html +0 -0
  166. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/ui/templates/overview.html +0 -0
  167. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/utils.py +0 -0
  168. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/vault/__init__.py +0 -0
  169. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/src/authsome/vault/crypto.py +0 -0
  170. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/__init__.py +0 -0
  171. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/auth/__init__.py +0 -0
  172. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/auth/test_flows.py +0 -0
  173. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/auth/test_models.py +0 -0
  174. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/auth/test_url_template.py +0 -0
  175. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/cli/__init__.py +0 -0
  176. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/cli/conftest.py +0 -0
  177. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/cli/test_daemon.py +0 -0
  178. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/cli/test_get.py +0 -0
  179. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/cli/test_helpers.py +0 -0
  180. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/cli/test_list.py +0 -0
  181. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/cli/test_login.py +0 -0
  182. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/cli/test_logout.py +0 -0
  183. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/cli/test_register.py +0 -0
  184. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/cli/test_revoke.py +0 -0
  185. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/cli/test_whoami.py +0 -0
  186. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/common/__init__.py +0 -0
  187. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/common/test_audit.py +0 -0
  188. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/common/test_errors.py +0 -0
  189. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/common/test_logging.py +0 -0
  190. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/common/test_utils.py +0 -0
  191. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/conftest.py +0 -0
  192. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/proxy/__init__.py +0 -0
  193. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/proxy/test_proxy.py +0 -0
  194. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/vault/__init__.py +0 -0
  195. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/vault/test_crypto.py +0 -0
  196. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/tests/vault/test_store.py +0 -0
  197. {authsome-0.2.3rc67 → authsome-0.2.3rc68}/uv.lock +0 -0
@@ -241,5 +241,8 @@ __marimo__/
241
241
 
242
242
  .DS_Store
243
243
 
244
+ # Git worktrees
245
+ .worktrees/
246
+ .claude/worktrees/
244
247
  # Local authsome home directory
245
- .authsome/
248
+ .authsome/
@@ -0,0 +1,384 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Instance.io - Identity Protocol</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js"></script>
9
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/ScrollTrigger.min.js"></script>
10
+ <script src="https://code.iconify.design/iconify-icon/1.0.7/iconify-icon.min.js"></script>
11
+ <style>
12
+ body {
13
+ overflow-x: hidden;
14
+ -webkit-font-smoothing: antialiased;
15
+ -moz-osx-font-smoothing: grayscale;
16
+ }
17
+
18
+ .tilt-wrapper {
19
+ perspective: 1000px;
20
+ transform-style: preserve-3d;
21
+ }
22
+
23
+ .tilt-element {
24
+ transition: transform 0.1s ease-out;
25
+ will-change: transform;
26
+ }
27
+
28
+ .vertical-text {
29
+ writing-mode: vertical-rl;
30
+ text-orientation: mixed;
31
+ transform: rotate(180deg);
32
+ }
33
+
34
+ .reveal-mask {
35
+ overflow: hidden;
36
+ display: inline-flex;
37
+ padding-bottom: 2px;
38
+ }
39
+
40
+ .reveal-text {
41
+ transform: translateY(110%);
42
+ will-change: transform;
43
+ }
44
+
45
+ .fade-up {
46
+ opacity: 0;
47
+ transform: translateY(20px);
48
+ will-change: transform, opacity;
49
+ }
50
+ </style>
51
+ </head>
52
+ <body class="bg-[#181716] text-[#1A1918] min-h-screen p-3 md:p-6 lg:p-8 flex flex-col items-center font-sans selection:bg-[#E4573D]/20 selection:text-[#E4573D]">
53
+
54
+ <!-- Framed Master Container -->
55
+ <main class="relative w-full max-w-[1280px] flex-grow bg-[#F4F3EF] rounded-[32px] shadow-[0_20px_60px_rgba(0,0,0,0.4)] overflow-hidden border border-[#2D2B2A] flex flex-col items-center justify-center pt-[20vh] pb-24 px-4 tilt-wrapper ring-1 ring-white/5" id="badge-container">
56
+
57
+ <!-- Subtle Diagonal Paper Texture -->
58
+ <div class="absolute inset-0 opacity-[0.025] mix-blend-multiply pointer-events-none" style="background-image: repeating-linear-gradient(45deg, #000 0, #000 1px, transparent 1px, transparent 6px);"></div>
59
+
60
+ <!-- Measured Spatial Guides -->
61
+ <div class="absolute top-[25%] left-0 w-full h-[1px] bg-[#EAE8E1] pointer-events-none"></div>
62
+ <div class="absolute top-[75%] left-0 w-full h-[1px] bg-[#EAE8E1] pointer-events-none"></div>
63
+ <div class="absolute top-0 left-[25%] w-[1px] h-full bg-[#EAE8E1] pointer-events-none"></div>
64
+ <div class="absolute top-0 left-[75%] w-[1px] h-full bg-[#EAE8E1] pointer-events-none"></div>
65
+
66
+ <!-- Technical Inset Framing -->
67
+ <div class="absolute inset-4 border border-[#E2DED6] rounded-[20px] pointer-events-none z-0">
68
+ <!-- Corner Brackets -->
69
+ <div class="absolute -top-[1px] -left-[1px] w-5 h-5 border-t border-l border-[#A39F96] rounded-tl-[20px]"></div>
70
+ <div class="absolute -top-[1px] -right-[1px] w-5 h-5 border-t border-r border-[#A39F96] rounded-tr-[20px]"></div>
71
+ <div class="absolute -bottom-[1px] -left-[1px] w-5 h-5 border-b border-l border-[#A39F96] rounded-bl-[20px]"></div>
72
+ <div class="absolute -bottom-[1px] -right-[1px] w-5 h-5 border-b border-r border-[#A39F96] rounded-br-[20px]"></div>
73
+ </div>
74
+
75
+ <!-- Lanyard Assembly -->
76
+ <div class="absolute top-0 left-1/2 -translate-x-1/2 flex flex-col items-center z-10 pointer-events-none">
77
+ <!-- Strap -->
78
+ <div class="w-[52px] h-[228px] bg-[#DBD9D1] border-l border-r border-[#D0CEC5]"></div>
79
+
80
+ <!-- Clip Hardware -->
81
+ <div class="relative flex flex-col items-center -mt-2">
82
+ <!-- Outer Loop -->
83
+ <div class="w-[72px] h-[20px] border-[3px] border-[#C2C0B8] rounded-full z-20 shadow-[0px_2px_3px_-1px_rgba(0,0,0,0.1),0px_1px_0px_0px_rgba(25,28,33,0.02),0px_0px_0px_1px_rgba(25,28,33,0.08)] bg-[#F4F3EF] relative overflow-hidden">
84
+ <div class="absolute inset-0 border border-white/50 rounded-full pointer-events-none"></div>
85
+ </div>
86
+ <!-- Vertical Connector -->
87
+ <div class="w-[28px] h-[24px] bg-[#42403E] z-10 -mt-[10px] rounded-[2px] border border-[#2B2A29] shadow-[0px_2px_3px_-1px_rgba(0,0,0,0.1),0px_1px_0px_0px_rgba(25,28,33,0.02),0px_0px_0px_1px_rgba(25,28,33,0.08)] relative">
88
+ <div class="absolute top-0 left-0 right-0 h-[1px] bg-white/20"></div>
89
+ </div>
90
+ </div>
91
+ </div>
92
+
93
+ <!-- The ID Badge -->
94
+ <div id="badge" class="tilt-element relative w-full max-w-[620px] aspect-[1.6/1] bg-[#ECEBE5] rounded-[6px] p-[10px] flex shadow-[0_2.8px_2.2px_rgba(0,_0,_0,_0.034),_0_6.7px_5.3px_rgba(0,_0,_0,_0.048),_0_12.5px_10px_rgba(0,_0,_0,_0.06),_0_22.3px_17.9px_rgba(0,_0,_0,_0.072),_0_41.8px_33.4px_rgba(0,_0,_0,_0.086),_0_100px_80px_rgba(0,_0,_0,_0.12)] border border-[#E0DED6] z-20">
95
+
96
+ <!-- Cutout hole at top center revealing paper container behind -->
97
+ <div class="absolute top-0 left-1/2 -translate-x-1/2 w-[44px] h-[10px] bg-[#F4F3EF] rounded-b-md shadow-[inset_0_3px_6px_rgba(0,0,0,0.04)] border-b border-l border-r border-[#E0DED6] z-30"></div>
98
+
99
+ <!-- Bottom Cutout for Physical Connection -->
100
+ <div class="absolute bottom-0 left-1/2 -translate-x-1/2 w-[44px] h-[10px] bg-[#F4F3EF] rounded-t-md shadow-[inset_0_-3px_6px_rgba(0,0,0,0.04)] border-t border-l border-r border-[#E0DED6] z-30"></div>
101
+
102
+ <!-- Data Link Cable connected to bottom -->
103
+ <div class="absolute -bottom-[38px] left-1/2 -translate-x-1/2 flex flex-col items-center z-10 pointer-events-none">
104
+ <div class="w-[20px] h-[16px] bg-[#363431] rounded-b-[3px] border border-[#2B2A29] shadow-[0px_2px_3px_-1px_rgba(0,0,0,0.1),0px_1px_0px_0px_rgba(25,28,33,0.02),0px_0px_0px_1px_rgba(25,28,33,0.08)] relative z-20 flex justify-center mt-[2px]">
105
+ <div class="w-[8px] h-[2px] bg-[#34D399] mt-[8px] rounded-full shadow-[0_0_8px_rgba(52,211,153,0.8)]"></div>
106
+ </div>
107
+ <div class="w-[6px] h-[30px] bg-gradient-to-b from-[#2D2C2A] to-transparent -mt-[1px] rounded-b-sm"></div>
108
+ </div>
109
+
110
+ <!-- Left Inner Screen -->
111
+ <div class="relative w-[78%] h-full rounded-[3px] bg-[#FCFBF9] border border-[#E6E4DD] overflow-hidden shadow-[inset_0_0_15px_rgba(0,0,0,0.02)] flex flex-col z-20">
112
+
113
+ <!-- Top UI Bar -->
114
+ <div class="absolute top-0 left-0 right-0 h-10 border-b border-[#F0EFEB] flex items-center px-4 justify-between z-20 bg-[#FCFBF9]/80 backdrop-blur-sm">
115
+ <div class="flex gap-[6px] items-center">
116
+ <div class="w-[5px] h-[5px] rounded-full bg-[#34D399] shadow-[0_0_6px_rgba(52,211,153,0.6)]"></div>
117
+ <div class="w-[5px] h-[5px] rounded-full bg-[#D1CFC7]"></div>
118
+ <div class="w-[5px] h-[5px] rounded-full bg-[#D1CFC7]"></div>
119
+ </div>
120
+ <div class="font-mono text-xs text-[#A8A59C] tracking-widest uppercase">Connected</div>
121
+ </div>
122
+
123
+ <!-- WebGL / Canvas Animation Area -->
124
+ <canvas id="digital-canvas" class="absolute inset-0 w-full h-full z-10 mix-blend-multiply opacity-85"></canvas>
125
+
126
+ <!-- Bottom Technical Rules -->
127
+ <div class="absolute bottom-4 left-4 right-4 flex justify-between items-end border-t border-[#F0EFEB] pt-2 z-20">
128
+ <div class="font-mono text-xs text-[#8E8B82] uppercase tracking-wider">Node: Online</div>
129
+ <div class="font-mono text-xs text-[#8E8B82]">Ver: 1.0.5</div>
130
+ </div>
131
+
132
+ <!-- Inner Brackets -->
133
+ <div class="absolute top-2 left-2 w-1.5 h-1.5 border-t border-l border-[#D1CFC7] z-20"></div>
134
+ <div class="absolute top-2 right-2 w-1.5 h-1.5 border-t border-r border-[#D1CFC7] z-20"></div>
135
+ <div class="absolute bottom-2 left-2 w-1.5 h-1.5 border-b border-l border-[#D1CFC7] z-20"></div>
136
+ <div class="absolute bottom-2 right-2 w-1.5 h-1.5 border-b border-r border-[#D1CFC7] z-20"></div>
137
+ </div>
138
+
139
+ <!-- Right Text Area -->
140
+ <div class="flex-1 h-full flex flex-col items-center justify-between py-6 px-2 z-20">
141
+ <!-- Technical Icon -->
142
+ <iconify-icon icon="solar:cpu-linear" width="26" height="26" class="text-[#363431]"></iconify-icon>
143
+
144
+ <!-- Rotated Brand Text -->
145
+ <div class="text-[#2D2C2A] font-normal text-4xl tracking-tight vertical-text leading-none select-none">
146
+ INSTANCE.IO
147
+ </div>
148
+
149
+ <!-- Tiny Technical Mark -->
150
+ <div class="flex flex-col items-center gap-1.5">
151
+ <div class="w-[3px] h-[3px] bg-[#E4573D]"></div>
152
+ <div class="w-[12px] h-[1px] bg-[#C2C0B8]"></div>
153
+ </div>
154
+ </div>
155
+
156
+ <!-- Edge highlights for tactility -->
157
+ <div class="absolute inset-0 border border-white/80 rounded-[6px] pointer-events-none mix-blend-overlay z-40"></div>
158
+ <div class="absolute top-0 left-0 right-0 h-[1px] bg-white rounded-t-[6px] pointer-events-none z-40"></div>
159
+ </div>
160
+
161
+ <!-- Landing Page Supplementary Content -->
162
+ <div class="mt-24 flex flex-col items-center text-center gap-3 relative z-20 pb-4">
163
+ <h1 class="text-xs tracking-[0.2em] text-[#E4573D] font-mono uppercase font-normal flex items-center gap-2">
164
+ <span class="w-[14px] h-[14px] rounded-sm bg-[#E4573D]/10 border border-[#E4573D]/30 flex items-center justify-center">
165
+ <span class="w-1 h-1 bg-[#E4573D] rounded-[1px]"></span>
166
+ </span>
167
+ <span class="reveal-mask"><span class="reveal-text block">Identity Protocol</span></span>
168
+ </h1>
169
+
170
+ <h2 class="text-4xl md:text-5xl tracking-tight text-[#1A1918] font-normal flex gap-2">
171
+ <span class="reveal-mask"><span class="reveal-text block">Deploy</span></span>
172
+ <span class="reveal-mask"><span class="reveal-text block">your</span></span>
173
+ <span class="reveal-mask"><span class="reveal-text block text-[#949188]">credential.</span></span>
174
+ </h2>
175
+
176
+ <!-- Social Proof -->
177
+ <div class="mt-8 flex flex-col items-center gap-3 fade-up">
178
+ <div class="flex items-center gap-3">
179
+ <div class="flex -space-x-2">
180
+ <img src="https://i.pravatar.cc/100?img=33" alt="Operator" class="w-8 h-8 rounded-full border-2 border-[#F4F3EF] shadow-[0px_2px_3px_-1px_rgba(0,0,0,0.1),0px_1px_0px_0px_rgba(25,28,33,0.02),0px_0px_0px_1px_rgba(25,28,33,0.08)]">
181
+ <img src="https://i.pravatar.cc/100?img=47" alt="Operator" class="w-8 h-8 rounded-full border-2 border-[#F4F3EF] shadow-[0px_2px_3px_-1px_rgba(0,0,0,0.1),0px_1px_0px_0px_rgba(25,28,33,0.02),0px_0px_0px_1px_rgba(25,28,33,0.08)]">
182
+ <img src="https://i.pravatar.cc/100?img=12" alt="Operator" class="w-8 h-8 rounded-full border-2 border-[#F4F3EF] shadow-[0px_2px_3px_-1px_rgba(0,0,0,0.1),0px_1px_0px_0px_rgba(25,28,33,0.02),0px_0px_0px_1px_rgba(25,28,33,0.08)]">
183
+ <div class="w-8 h-8 rounded-full border-2 border-[#F4F3EF] bg-[#EAE8E1] flex items-center justify-center text-xs font-medium text-[#8E8B82] shadow-[0px_2px_3px_-1px_rgba(0,0,0,0.1),0px_1px_0px_0px_rgba(25,28,33,0.02),0px_0px_0px_1px_rgba(25,28,33,0.08)]">
184
+ <iconify-icon icon="solar:user-linear" width="14" height="14"></iconify-icon>
185
+ </div>
186
+ </div>
187
+ <div class="text-sm text-[#8E8B82]">
188
+ Validated by <span class="font-medium text-[#1A1918]">10,000+</span> operators
189
+ </div>
190
+ </div>
191
+ </div>
192
+
193
+ <!-- Bottom CTA -->
194
+ <div class="mt-6 fade-up">
195
+ <button class="group relative inline-flex items-center justify-center rounded-full p-[1px] shadow-[0px_2px_3px_-1px_rgba(0,0,0,0.1),0px_1px_0px_0px_rgba(25,28,33,0.02),0px_0px_0px_1px_rgba(25,28,33,0.08)] bg-gradient-to-b from-[#5c5a58] to-[#1A1918] focus:outline-none focus:ring-2 focus:ring-[#E4573D]/50 focus:ring-offset-2 focus:ring-offset-[#F4F3EF]">
196
+ <span class="relative inline-flex items-center gap-2 bg-[#1A1918] px-6 py-2.5 rounded-full text-sm font-medium text-white transition-all group-hover:bg-[#252422]">
197
+ Initialize Sequence
198
+ <iconify-icon icon="solar:arrow-right-linear" width="16" height="16" class="text-[#A39F96] group-hover:text-white transition-all group-hover:translate-x-0.5"></iconify-icon>
199
+ </span>
200
+ </button>
201
+ </div>
202
+ </div>
203
+ </main>
204
+
205
+ <script>
206
+ // --- 1. Canvas Animation ---
207
+ const canvas = document.getElementById('digital-canvas');
208
+ const ctx = canvas.getContext('2d');
209
+
210
+ let width, height;
211
+ let particles = [];
212
+ const particleCount = 150;
213
+
214
+ function resize() {
215
+ const rect = canvas.getBoundingClientRect();
216
+ width = rect.width;
217
+ height = rect.height;
218
+ canvas.width = width * window.devicePixelRatio;
219
+ canvas.height = height * window.devicePixelRatio;
220
+ ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
221
+ initParticles();
222
+ }
223
+
224
+ class Particle {
225
+ constructor() {
226
+ this.x = (Math.random() * 0.6 + 0.3) * width;
227
+ this.y = (Math.random() * 0.8 + 0.1) * height;
228
+ this.baseX = this.x;
229
+ this.baseY = this.y;
230
+
231
+ this.size = Math.random() > 0.9 ? Math.random() * 3 + 2 : Math.random() * 1.5 + 0.5;
232
+ this.speedX = Math.random() * 0.4 - 0.2;
233
+ this.speedY = Math.random() * 0.4 - 0.2;
234
+
235
+ const isAccent = Math.random() > 0.95;
236
+ if (isAccent) {
237
+ this.color = `rgba(228, 87, 61, ${Math.random() * 0.7 + 0.3})`;
238
+ } else {
239
+ const shade = Math.floor(Math.random() * 60 + 30);
240
+ this.color = `rgba(${shade}, ${shade}, ${shade}, ${Math.random() * 0.5 + 0.2})`;
241
+ }
242
+
243
+ this.targetX = this.x;
244
+ this.targetY = this.y;
245
+ }
246
+
247
+ update(mouseX, mouseY) {
248
+ this.baseX += this.speedX;
249
+ this.baseY += this.speedY;
250
+
251
+ if(this.baseX < 0 || this.baseX > width) this.speedX *= -1;
252
+ if(this.baseY < 0 || this.baseY > height) this.speedY *= -1;
253
+
254
+ let dx = mouseX - this.baseX;
255
+ let dy = mouseY - this.baseY;
256
+ let distance = Math.sqrt(dx * dx + dy * dy);
257
+
258
+ if (distance < 80) {
259
+ let forceDirectionX = dx / distance;
260
+ let forceDirectionY = dy / distance;
261
+ let force = (80 - distance) / 80;
262
+ this.targetX = this.baseX - forceDirectionX * force * 20;
263
+ this.targetY = this.baseY - forceDirectionY * force * 20;
264
+ } else {
265
+ this.targetX = this.baseX;
266
+ this.targetY = this.baseY;
267
+ }
268
+
269
+ this.x += (this.targetX - this.x) * 0.1;
270
+ this.y += (this.targetY - this.y) * 0.1;
271
+ }
272
+
273
+ draw() {
274
+ ctx.fillStyle = this.color;
275
+ ctx.fillRect(this.x, this.y, this.size, this.size);
276
+ }
277
+ }
278
+
279
+ function initParticles() {
280
+ particles = [];
281
+ for (let i = 0; i < particleCount; i++) {
282
+ particles.push(new Particle());
283
+ }
284
+ for(let i=0; i<5; i++) {
285
+ let p = new Particle();
286
+ p.x = p.baseX = Math.random() * width;
287
+ p.y = p.baseY = Math.random() * height;
288
+ p.size = Math.random() * 4 + 3;
289
+ p.color = `rgba(160, 156, 145, ${Math.random() * 0.4 + 0.2})`;
290
+ particles.push(p);
291
+ }
292
+ }
293
+
294
+ let mouseX = -1000;
295
+ let mouseY = -1000;
296
+
297
+ canvas.addEventListener('mousemove', (e) => {
298
+ const rect = canvas.getBoundingClientRect();
299
+ mouseX = e.clientX - rect.left;
300
+ mouseY = e.clientY - rect.top;
301
+ });
302
+
303
+ canvas.addEventListener('mouseleave', () => {
304
+ mouseX = -1000;
305
+ mouseY = -1000;
306
+ });
307
+
308
+ function animate() {
309
+ ctx.clearRect(0, 0, width, height);
310
+
311
+ const gradient = ctx.createRadialGradient(width*0.6, height*0.5, 0, width*0.6, height*0.5, height*0.6);
312
+ gradient.addColorStop(0, 'rgba(0,0,0,0.015)');
313
+ gradient.addColorStop(1, 'rgba(0,0,0,0)');
314
+ ctx.fillStyle = gradient;
315
+ ctx.fillRect(0,0,width,height);
316
+
317
+ particles.forEach(p => {
318
+ p.update(mouseX, mouseY);
319
+ p.draw();
320
+ });
321
+ requestAnimationFrame(animate);
322
+ }
323
+
324
+ window.addEventListener('resize', resize);
325
+ resize();
326
+ animate();
327
+
328
+
329
+ // --- 2. 3D Tilt Effect on Badge ---
330
+ const container = document.getElementById('badge-container');
331
+ const badge = document.getElementById('badge');
332
+
333
+ container.addEventListener('mousemove', (e) => {
334
+ const rect = container.getBoundingClientRect();
335
+ const x = e.clientX - rect.left;
336
+ const y = e.clientY - rect.top;
337
+
338
+ const centerX = rect.width / 2;
339
+ const centerY = rect.height / 2;
340
+
341
+ const rotateX = ((y - centerY) / centerY) * -5;
342
+ const rotateY = ((x - centerX) / centerX) * 5;
343
+
344
+ badge.style.transform = `rotateX(${rotateX}deg) rotateY(${rotateY}deg) translateZ(10px)`;
345
+ });
346
+
347
+ container.addEventListener('mouseleave', () => {
348
+ badge.style.transform = `rotateX(0deg) rotateY(0deg) translateZ(0px)`;
349
+ badge.style.transition = "transform 0.5s cubic-bezier(0.25, 1, 0.5, 1)";
350
+ setTimeout(() => { badge.style.transition = "transform 0.1s ease-out"; }, 500);
351
+ });
352
+
353
+
354
+ // --- 3. GSAP Animations ---
355
+ gsap.registerPlugin(ScrollTrigger);
356
+
357
+ const tl = gsap.timeline({
358
+ defaults: { ease: "power4.out" },
359
+ scrollTrigger: {
360
+ trigger: "#badge-container",
361
+ start: "top 80%"
362
+ }
363
+ });
364
+
365
+ tl.fromTo(badge,
366
+ { y: 50, opacity: 0, scale: 0.95 },
367
+ { y: 0, opacity: 1, scale: 1, duration: 1.5, ease: "power3.out" }
368
+ )
369
+ .to(".reveal-text", {
370
+ y: "0%",
371
+ duration: 1,
372
+ stagger: 0.1,
373
+ }, "-=1")
374
+ .to(".fade-up", {
375
+ y: 0,
376
+ opacity: 1,
377
+ duration: 1,
378
+ stagger: 0.15,
379
+ ease: "power3.out"
380
+ }, "-=0.8");
381
+
382
+ </script>
383
+ </body>
384
+ </html>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: authsome
3
- Version: 0.2.3rc67
3
+ Version: 0.2.3rc68
4
4
  Summary: A portable local authentication library for AI agents and developer tools
5
5
  Author-email: Manoj Bajaj <manojbajaj95@gmail.com>
6
6
  License-Expression: MIT
@@ -49,9 +49,9 @@ Description-Content-Type: text/markdown
49
49
  \__,_/\__,_/\__/_/ /_/____/\____/_/ /_/ /_/\___/
50
50
  ```
51
51
 
52
- **Local auth for AI agents.**
52
+ **Local-first credential broker and vault for AI Agents**
53
53
 
54
- Log in once via OAuth2/API Key. Authsome keeps the credentials fresh for every AI agent.
54
+ An open-source credential broker that sits between your agents and the services they call. Instead of sharing credentials with every agent, log in once via OAuth2 or API keys. Authsome stores credentials securely and injects them via an HTTP proxy. You get one place to manage access, rotate keys, and see what every agent is doing.
55
55
 
56
56
  ---
57
57
 
@@ -61,21 +61,17 @@ https://github.com/user-attachments/assets/27f9b229-baf4-4889-be9a-378a133654dc
61
61
 
62
62
  ---
63
63
 
64
- ## Why Agents Are Different
64
+ ## Why Agents need Authsome
65
65
 
66
- Agents need API access that survives outside an interactive app:
66
+ Agents run beyond interactive sessions. They live in CI, over SSH, in cron jobs, in background workers, and in parallel pipelines. They need API access that survives without a human in the loop.
67
67
 
68
- - agents run without interactive sessions
69
- - tokens expire, rotate, and need refresh
70
- - tool access must work in scripts, cron, CI, SSH, background workers, and parallel pipelines
68
+ Hardcoded environment tokens leak or go stale, and building auth flow logic, token storage, refresh handling, and per-provider config into every project rebuilds the same plumbing every time.
71
69
 
72
- Hardcoded env tokens leak or go stale. DIY auth means rebuilding flow logic, token storage, refresh handling, expiry checks, and per-provider config for every project.
73
-
74
- Authsome is the local credential layer agents can call at runtime.
70
+ Authsome is the local credential layer agents call at runtime.
75
71
 
76
72
  - **No credential sprawl.** One encrypted store — every provider, every agent, one place.
77
- - **No SaaS, no privacy trade-off.** Credentials never leave your machine. No third-party cloud dependency.
78
- - **No browser required at runtime.** Setup can use browser PKCE, device code, or a browser bridge for secure API key entry. After that, agents run headlessly in CI, SSH, cron, workers, or parallel pipelines.
73
+ - **No SaaS, no privacy trade-off.** Credentials never leave your machine. Eliminates credential exfiltration risks as agents never see them.
74
+ - **No browser required at runtime.** Setup can use browser PKCE, device code, or a browser bridge for secure API key entry. After that, agents run headlessly.
79
75
 
80
76
  ---
81
77
 
@@ -83,14 +79,7 @@ Authsome is the local credential layer agents can call at runtime.
83
79
 
84
80
  The CLI is the agent's interface: setup once, then inject fresh credentials whenever a tool runs.
85
81
 
86
- ```text
87
- ┌──────────┐ authsome ┌──────────────┐
88
- │ Agent │ ──────────────────────▶ │ Local Vault │
89
- └──────────┘ └──────┬───────┘
90
- ▲ │
91
- │ fresh token / API key │ encrypted
92
- └──────────────────────────────────────┘
93
- ```
82
+ ![How Authsome works](assets/authsome-how-it-works-dark.svg)
94
83
 
95
84
  Authenticate once:
96
85
 
@@ -15,9 +15,9 @@
15
15
  \__,_/\__,_/\__/_/ /_/____/\____/_/ /_/ /_/\___/
16
16
  ```
17
17
 
18
- **Local auth for AI agents.**
18
+ **Local-first credential broker and vault for AI Agents**
19
19
 
20
- Log in once via OAuth2/API Key. Authsome keeps the credentials fresh for every AI agent.
20
+ An open-source credential broker that sits between your agents and the services they call. Instead of sharing credentials with every agent, log in once via OAuth2 or API keys. Authsome stores credentials securely and injects them via an HTTP proxy. You get one place to manage access, rotate keys, and see what every agent is doing.
21
21
 
22
22
  ---
23
23
 
@@ -27,21 +27,17 @@ https://github.com/user-attachments/assets/27f9b229-baf4-4889-be9a-378a133654dc
27
27
 
28
28
  ---
29
29
 
30
- ## Why Agents Are Different
30
+ ## Why Agents need Authsome
31
31
 
32
- Agents need API access that survives outside an interactive app:
32
+ Agents run beyond interactive sessions. They live in CI, over SSH, in cron jobs, in background workers, and in parallel pipelines. They need API access that survives without a human in the loop.
33
33
 
34
- - agents run without interactive sessions
35
- - tokens expire, rotate, and need refresh
36
- - tool access must work in scripts, cron, CI, SSH, background workers, and parallel pipelines
34
+ Hardcoded environment tokens leak or go stale, and building auth flow logic, token storage, refresh handling, and per-provider config into every project rebuilds the same plumbing every time.
37
35
 
38
- Hardcoded env tokens leak or go stale. DIY auth means rebuilding flow logic, token storage, refresh handling, expiry checks, and per-provider config for every project.
39
-
40
- Authsome is the local credential layer agents can call at runtime.
36
+ Authsome is the local credential layer agents call at runtime.
41
37
 
42
38
  - **No credential sprawl.** One encrypted store — every provider, every agent, one place.
43
- - **No SaaS, no privacy trade-off.** Credentials never leave your machine. No third-party cloud dependency.
44
- - **No browser required at runtime.** Setup can use browser PKCE, device code, or a browser bridge for secure API key entry. After that, agents run headlessly in CI, SSH, cron, workers, or parallel pipelines.
39
+ - **No SaaS, no privacy trade-off.** Credentials never leave your machine. Eliminates credential exfiltration risks as agents never see them.
40
+ - **No browser required at runtime.** Setup can use browser PKCE, device code, or a browser bridge for secure API key entry. After that, agents run headlessly.
45
41
 
46
42
  ---
47
43
 
@@ -49,14 +45,7 @@ Authsome is the local credential layer agents can call at runtime.
49
45
 
50
46
  The CLI is the agent's interface: setup once, then inject fresh credentials whenever a tool runs.
51
47
 
52
- ```text
53
- ┌──────────┐ authsome ┌──────────────┐
54
- │ Agent │ ──────────────────────▶ │ Local Vault │
55
- └──────────┘ └──────┬───────┘
56
- ▲ │
57
- │ fresh token / API key │ encrypted
58
- └──────────────────────────────────────┘
59
- ```
48
+ ![How Authsome works](assets/authsome-how-it-works-dark.svg)
60
49
 
61
50
  Authenticate once:
62
51
 
@@ -0,0 +1,113 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1160 520" fill="none">
2
+ <style>
3
+ text { font-family: Inter, system-ui, sans-serif; }
4
+ .mono { font-family: "JetBrains Mono", "Fira Mono", ui-monospace, monospace; }
5
+ .label { font-size: 10px; fill: #8E8B82; letter-spacing: 2px; font-weight: 500; }
6
+ .card { fill: #FCFBF9; stroke: #E6E4DD; stroke-width: 1; }
7
+ .name { fill: #1A1918; font-size: 13px; font-weight: 500; }
8
+ .sub { fill: #8E8B82; font-size: 11px; }
9
+ </style>
10
+
11
+ <!-- Background -->
12
+ <rect width="1160" height="520" fill="#F4F3EF"/>
13
+
14
+ <!-- Spatial guide lines -->
15
+ <line x1="0" y1="130" x2="1160" y2="130" stroke="#EAE8E1" stroke-width="1"/>
16
+ <line x1="0" y1="390" x2="1160" y2="390" stroke="#EAE8E1" stroke-width="1"/>
17
+ <line x1="290" y1="0" x2="290" y2="520" stroke="#EAE8E1" stroke-width="1"/>
18
+ <line x1="870" y1="0" x2="870" y2="520" stroke="#EAE8E1" stroke-width="1"/>
19
+
20
+ <!-- Inset frame -->
21
+ <rect x="16" y="16" width="1128" height="488" rx="20" fill="none" stroke="#E2DED6" stroke-width="1"/>
22
+
23
+ <!-- Frame corner brackets -->
24
+ <path d="M36,16 Q16,16 16,36" stroke="#A39F96" stroke-width="1" fill="none" stroke-linecap="round"/>
25
+ <path d="M1124,16 Q1144,16 1144,36" stroke="#A39F96" stroke-width="1" fill="none" stroke-linecap="round"/>
26
+ <path d="M16,484 Q16,504 36,504" stroke="#A39F96" stroke-width="1" fill="none" stroke-linecap="round"/>
27
+ <path d="M1144,484 Q1144,504 1124,504" stroke="#A39F96" stroke-width="1" fill="none" stroke-linecap="round"/>
28
+
29
+ <!-- AI AGENTS -->
30
+ <text x="580" y="72" text-anchor="middle" class="mono" fill="#E4573D" font-size="10" font-weight="600" letter-spacing="2px">AI AGENTS</text>
31
+
32
+ <rect x="52" y="90" width="192" height="52" rx="4" class="card"/>
33
+ <text x="148" y="122" text-anchor="middle" class="name">Claude Code</text>
34
+ <rect x="268" y="90" width="192" height="52" rx="4" class="card"/>
35
+ <text x="364" y="122" text-anchor="middle" class="name">Codex</text>
36
+ <rect x="484" y="90" width="192" height="52" rx="4" class="card"/>
37
+ <text x="580" y="122" text-anchor="middle" class="name">OpenClaw</text>
38
+ <rect x="700" y="90" width="192" height="52" rx="4" class="card"/>
39
+ <text x="796" y="122" text-anchor="middle" class="name">Hermes</text>
40
+ <rect x="916" y="90" width="192" height="52" rx="4" class="card"/>
41
+ <text x="1012" y="122" text-anchor="middle" class="name">Any Agent</text>
42
+
43
+ <!-- Agents → Authsome -->
44
+ <g stroke="#C2C0B8" stroke-width="1" marker-end="url(#tip)">
45
+ <line x1="148" y1="142" x2="148" y2="178"/>
46
+ <line x1="364" y1="142" x2="364" y2="178"/>
47
+ <line x1="580" y1="142" x2="580" y2="178"/>
48
+ <line x1="796" y1="142" x2="796" y2="178"/>
49
+ <line x1="1012" y1="142" x2="1012" y2="178"/>
50
+ </g>
51
+
52
+ <!-- Authsome zone -->
53
+ <rect x="34" y="178" width="1092" height="164" rx="12" fill="#ECEBE5" stroke="#E6E4DD" stroke-width="1"/>
54
+
55
+ <!-- Zone corner brackets -->
56
+ <path d="M46,178 Q34,178 34,190" stroke="#A39F96" stroke-width="1" fill="none" stroke-linecap="round"/>
57
+ <path d="M1114,178 Q1126,178 1126,190" stroke="#A39F96" stroke-width="1" fill="none" stroke-linecap="round"/>
58
+ <path d="M34,330 Q34,342 46,342" stroke="#A39F96" stroke-width="1" fill="none" stroke-linecap="round"/>
59
+ <path d="M1126,330 Q1126,342 1114,342" stroke="#A39F96" stroke-width="1" fill="none" stroke-linecap="round"/>
60
+
61
+ <!-- AUTHSOME label -->
62
+ <text x="580" y="204" text-anchor="middle" class="mono" fill="#E4573D" font-size="10" font-weight="600" letter-spacing="2px">AUTHSOME</text>
63
+
64
+ <!-- CLI -->
65
+ <rect x="72" y="228" width="300" height="66" rx="4" class="card"/>
66
+ <text x="222" y="256" text-anchor="middle" class="name">CLI</text>
67
+ <text x="222" y="277" text-anchor="middle" class="sub">Login, export, and run commands</text>
68
+
69
+ <!-- Local Auth Proxy — highlighted with coral border -->
70
+ <rect x="422" y="216" width="316" height="90" rx="8" class="card"/>
71
+ <!-- Proxy inner corner brackets -->
72
+ <path d="M430,216 Q422,216 422,224" stroke="#C2C0B8" stroke-width="0.8" fill="none" stroke-linecap="round"/>
73
+ <path d="M730,216 Q738,216 738,224" stroke="#C2C0B8" stroke-width="0.8" fill="none" stroke-linecap="round"/>
74
+ <path d="M422,298 Q422,306 430,306" stroke="#C2C0B8" stroke-width="0.8" fill="none" stroke-linecap="round"/>
75
+ <path d="M730,306 Q738,306 738,298" stroke="#C2C0B8" stroke-width="0.8" fill="none" stroke-linecap="round"/>
76
+ <text x="580" y="254" text-anchor="middle" fill="#1A1918" font-size="15" font-weight="500">Local Auth Proxy</text>
77
+ <text x="580" y="276" text-anchor="middle" class="sub">Injects fresh credentials at request time</text>
78
+ <text x="580" y="294" text-anchor="middle" class="mono" fill="#A39F96" font-size="9" letter-spacing="1.2px">CONTROLLED HANDOFF</text>
79
+
80
+ <!-- Encrypted Vault -->
81
+ <rect x="788" y="228" width="300" height="66" rx="4" class="card"/>
82
+ <text x="938" y="256" text-anchor="middle" class="name">Encrypted Vault</text>
83
+ <text x="938" y="277" text-anchor="middle" class="sub">Local storage and token refresh</text>
84
+
85
+ <!-- Authsome → Services -->
86
+ <g stroke="#C2C0B8" stroke-width="1" marker-end="url(#tip)">
87
+ <line x1="148" y1="342" x2="148" y2="414"/>
88
+ <line x1="364" y1="342" x2="364" y2="414"/>
89
+ <line x1="580" y1="342" x2="580" y2="414"/>
90
+ <line x1="796" y1="342" x2="796" y2="414"/>
91
+ <line x1="1012" y1="342" x2="1012" y2="414"/>
92
+ </g>
93
+
94
+ <!-- EXTERNAL SERVICES -->
95
+ <text x="580" y="396" text-anchor="middle" class="mono" fill="#E4573D" font-size="10" font-weight="600" letter-spacing="2px">EXTERNAL SERVICES</text>
96
+
97
+ <rect x="52" y="414" width="192" height="52" rx="4" class="card"/>
98
+ <text x="148" y="446" text-anchor="middle" class="name">Stripe</text>
99
+ <rect x="268" y="414" width="192" height="52" rx="4" class="card"/>
100
+ <text x="364" y="446" text-anchor="middle" class="name">GitHub</text>
101
+ <rect x="484" y="414" width="192" height="52" rx="4" class="card"/>
102
+ <text x="580" y="446" text-anchor="middle" class="name">OpenAI</text>
103
+ <rect x="700" y="414" width="192" height="52" rx="4" class="card"/>
104
+ <text x="796" y="446" text-anchor="middle" class="name">Gmail</text>
105
+ <rect x="916" y="414" width="192" height="52" rx="4" class="card"/>
106
+ <text x="1012" y="446" text-anchor="middle" class="name">Any App</text>
107
+
108
+ <defs>
109
+ <marker id="tip" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="6" markerHeight="6" orient="auto">
110
+ <path d="M1 1 L7 4 L1 7" stroke="#C2C0B8" stroke-width="1.2" fill="none"/>
111
+ </marker>
112
+ </defs>
113
+ </svg>