supermemory/packages/lib
Dhravya 5d2b5855fe
feat(auth): AgentID sign-in button on the web login page (#1467)
## What?

Adds a "Continue with AgentID" button to the web app's login page, matching the existing Google/GitHub buttons (same `ExternalAuthButton` pattern, PostHog `login_attempt` capture, last-used badge).

- `packages/lib/auth.ts`: adds the `genericOAuthClient` plugin — generic OAuth providers sign in via `signIn.oauth2({ providerId })`, not `signIn.social`.
- `apps/web/app/(auth)/login/page.tsx`: the button, gated the same way as the other social buttons — always shown on cloud (`NEXT_PUBLIC_HOST_ID === "supermemory"`), opt-in elsewhere via `NEXT_PUBLIC_AGENTID_AUTH_ENABLED` (added to `.env.example`).

## Why?

Companion to supermemoryai/mono#2908, which registers an `agentid` generic OAuth provider (OIDC against auth.agentid.com) on the API so agents can authenticate with their AgentID identity. The consumer app talks to the same better-auth server, so it gets the same sign-in option. mono#2916 additionally auto-invites the agent's verified human owner to the agent's workspace.

Requires mono#2908 to be deployed for the button to work; until then the API rejects the unknown provider and the page shows its normal error state.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches authentication entry points and OAuth client configuration; risk is moderate because it extends login surface area but follows existing social sign-in patterns and is feature-flagged.
>
> **Overview**
> Adds **Continue with AgentID** on the web login page, using the same `ExternalAuthButton` flow as Google/GitHub (PostHog `login_attempt`, last-used badge, loading/error handling).
>
> The button calls **`signIn.oauth2({ providerId: "agentid" })`** instead of `signIn.social`, enabled by registering **`genericOAuthClient`** on the shared better-auth client in `packages/lib/auth.ts`.
>
> Visibility matches other social providers: shown on cloud when `NEXT_PUBLIC_HOST_ID === "supermemory"`, or elsewhere when **`NEXT_PUBLIC_AGENTID_AUTH_ENABLED`** is set (documented in `.env.example`). Depends on the API registering the `agentid` generic OAuth provider.
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 90a32786a3. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2026-08-16 23:20:38 +00:00
..
api.ts Add Nova workspace prompt settings (#1323) 2026-07-29 21:13:59 +00:00
auth-context.tsx feat(web): company brain entitlement helper, hook + ?org deep-link activation (#1110) 2026-06-22 17:54:13 +00:00
auth.middleware.ts New Version of Supermemory Consumer App 2025-08-16 18:50:10 -07:00
auth.ts feat(auth): AgentID sign-in button on the web login page (#1467) 2026-08-16 23:20:38 +00:00
constants.ts feat(web): company brain entitlement helper, hook + ?org deep-link activation (#1110) 2026-06-22 17:54:13 +00:00
error-tracking.tsx feat: optional posthog intialization (#525) 2025-10-27 16:10:15 -07:00
generate-id.ts perf(lib): hoist customAlphabet factory in generateId (#1204) 2026-07-10 19:15:21 -07:00
glass-effect-manager.ts New Version of Supermemory Consumer App 2025-08-16 18:50:10 -07:00
package.json fix: add type checks for TypeScript workspaces (#1447) 2026-08-13 17:55:50 +05:30
posthog.tsx feat(web): add Slack connect card to home + space selector polish (#1137) 2026-06-22 18:20:09 +00:00
queries.ts docs(brain): note trial attach after Slack OAuth (#1313) 2026-07-21 21:34:25 +00:00
query-client.tsx New Version of Supermemory Consumer App 2025-08-16 18:50:10 -07:00
similarity.ts New Version of Supermemory Consumer App 2025-08-16 18:50:10 -07:00
tsconfig.json New Version of Supermemory Consumer App 2025-08-16 18:50:10 -07:00
types.ts feat(web): company brain entitlement helper, hook + ?org deep-link activation (#1110) 2026-06-22 17:54:13 +00:00
utils.ts New Version of Supermemory Consumer App 2025-08-16 18:50:10 -07:00