Commit graph

1743 commits

Author SHA1 Message Date
Sreeram Sreedhar
9cc762c2e4 Add desktop browser auth 2026-06-22 18:06:20 -07:00
Sreeram Sreedhar
d20026a28a Add desktop AI tool connectors 2026-06-22 17:47:44 -07:00
Sreeram Sreedhar
7249b287e9 Add desktop SMFS integration 2026-06-22 17:38:06 -07:00
Sreeram Sreedhar
1b7f59f88b Add spotlight shortcut and menu bar controls 2026-06-22 17:07:33 -07:00
Sreeram Sreedhar
53c10e2126 Add native desktop spotlight search 2026-06-22 16:58:17 -07:00
Sreeram Sreedhar
ce8c960586 Refine desktop home composer layout 2026-06-22 16:53:01 -07:00
Sreeram Sreedhar
5254421ea5 Rename desktop app package to supermemory 2026-06-22 16:53:01 -07:00
Sreeram Sreedhar
5d7dc85886 Match desktop shell to web dashboard 2026-06-22 16:52:55 -07:00
Sreeram Sreedhar
9cd894a8f2 Open desktop search results in preview 2026-06-22 16:19:40 -07:00
Sreeram Sreedhar
dd56682f27 Add desktop recent memories view 2026-06-22 16:17:45 -07:00
Sreeram Sreedhar
577206aa19 Prefer desktop API URL for auth 2026-06-22 16:11:41 -07:00
Sreeram Sreedhar
aed9606963 Cache desktop auth token after dev login 2026-06-22 16:10:13 -07:00
Sreeram Sreedhar
63d33f03a0 Fix desktop dev auth setup 2026-06-22 16:09:20 -07:00
Sreeram Sreedhar
93ec22555c Add real desktop memory search 2026-06-22 15:23:10 -07:00
Sreeram Sreedhar
5bd0682213 Wire desktop dev key login 2026-06-22 15:23:10 -07:00
Sreeram Sreedhar
00b91becfd Add native desktop auth commands 2026-06-22 15:19:50 -07:00
Sreeram Sreedhar
8b24010ac7 Add required desktop icon assets 2026-06-22 15:19:41 -07:00
Sreeram Sreedhar
4def158714 routing & app shell 2026-06-21 23:27:52 -07:00
Sreeram Sreedhar
6a4d59ccf5 initial commit 2026-06-21 22:13:57 -07:00
MaheshtheDev
cf47d73126 feat(onboarding): instrument brain onboarding analytics (#1099)
Wire PostHog funnel events (started, step viewed/completed, mode, workspace, sources, ingest, team, completed) across the brain onboarding flow, and drop stale pre-brain event defs from analytics.ts.

---
**Session Details**
- Session: [View Session](https://supermemory.us1.vorflux.com/agent-sessions/5b48bbe4-422a-4577-b6bf-fd9416a6846b)
- Requested by: Sreeram Sreedhar (sreeram@supermemory.com)
- Address comments on this PR. Add `(aside)` to your comment to have me ignore it.
2026-06-20 07:48:15 +00:00
ved015
c6b20b5b87 Fix delete organization dialog focus race (#1139)
## Summary
- Delay opening the delete organization dialog until after the Danger zone popover begins closing
- Explicitly focus the organization confirmation input when the dialog opens
- Prevent intermittent focus loss where users could not type the org name
2026-06-19 17:46:21 +00:00
sreedharsreeram
313a8df6a6 feat(web): show import status on X bookmarks integration card (#1130)
## What

The X bookmarks ("Import X bookmarks") card on the integrations page never reflected any state, even after importing tweets — unlike connectors and plugins, which show "Connected"/"Active".

After this change, once you've imported at least one tweet the card shows an **"Imported · {last import time}"** pill (mirroring the plugin "Active · {time}" style) and is included in the **Connected** filter.

Since importing X bookmarks is a one-time/occasional action rather than a live connection, it intentionally says **"Imported"** with the last-import timestamp, not "Connected".

## Why

The page's status logic (`isItemConnected` + `renderStatus`) only handled the `plugin` and `connector` item kinds. The X bookmarks card is an `import` kind, so it always rendered just "Connect". This was a regression from #979 (the integrations overhaul), which rebuilt the page around item kinds and dropped the previous "{N} tweets imported" indicator.

## How

- Add a single documents query (`@post/documents/documents`, `categories: ["tweet"]`, `limit: 1`, newest first) that yields both the org-wide tweet count (`pagination.totalItems`) and the latest tweet's `createdAt`.
- `isItemConnected` returns `true` for `import` when the count is `> 0`.
- `renderStatus` renders a new `ImportedPill` ("Imported · {relative time}") for `import` when there's ≥1 tweet.

## Testing

- `tsc` and Biome pass; no new errors introduced by this change.
- Verified the status source of truth against a local backend by seeding `type='tweet'` documents — the count/latest-timestamp the pill renders reflect them.

> Note: `tsc` reports two **pre-existing**, unrelated `granola` errors in this file (`CONNECTOR_META` + an icon record missing the `granola` provider). They exist on `main` and are not touched by this PR.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-18 04:43:06 +00:00
sohamd22
9017a1b5d4 add weekly digests, log, and opt out options (#1107)
### TL;DR

Adds a Weekly Digests view to the web app, allowing users to browse and read their personalized weekly memory recaps directly in the UI, along with a notification preference toggle to opt out of digest emails.

### What changed?

- Added a new `digests` view mode that renders a `DigestsView` component, accessible from the dashboard via a new weekly digest preview card that appears when a digest exists.
- `DigestsView` displays a master-detail layout: a scrollable list of past weekly digests on the left, and a full digest content pane on the right. The detail pane renders the intro (with a floating brain illustration), numbered highlights, and feature recommendations styled to mirror the email layout.
- Added thumbs-up/thumbs-down feedback controls and an optional free-text input on each digest, wired to analytics events.
- Added `useDigests` and `useDigest` hooks that fetch digest list and detail data from the API, with 5- and 10-minute stale times respectively.
- Registered four new API schema endpoints: `GET /digests`, `GET /digests/:id`, `GET /digests/preferences`, and `POST /digests/preferences`.
- Added a `DigestPreferences` section to the account settings page with a toggle that lets users opt in or out of the weekly digest email.
- Extended the `viewModeChanged` analytics event and the `viewLiterals` search param list to include `"digests"`, and added `digestViewed`, `digestFeedback`, and `digestFeedbackDetail` analytics events.
- Added documentation for the `SUPERMEMORY_EMBEDDING_RAM_LIMIT` and `SUPERMEMORY_INGEST_CONCURRENCY` environment variables, explaining the memory-bounded ingestion queue and its live terminal status output.

### How to test?

1. Navigate to the dashboard and confirm the weekly digest preview card appears when a digest exists, and clicking it transitions to the `digests` view.
2. In the digests view, verify the list renders past digests with the most recent highlighted by a gradient border, and selecting a row loads the correct detail content.
3. Confirm the empty state renders correctly when no digests exist.
4. Use the thumbs-up/thumbs-down buttons and the detailed feedback textarea on a digest, verifying the toast confirmation appears on submission.
5. Open account settings, locate the "Notifications" section, and toggle the weekly digest switch on and off, verifying the preference persists without errors.
6. Confirm the `digests` view mode is reflected in the URL search params when active.

### Why make this change?

Users currently receive weekly digest emails but have no way to revisit past digests within the app. This change surfaces digest history directly in the UI, adds in-product feedback collection on digest quality, and gives users control over whether they receive the emails — improving discoverability, engagement, and preference management.
2026-06-18 01:06:40 +00:00
sreedharsreeram
d4a3a57a42 fix(web): remove duplicate "Connected" text on connector cards (#1131)
## Problem
On the integrations page → **Knowledge bases** section, a connected connector card (e.g. Google Drive) rendered the green **"Connected"** pill **twice** — once on the bottom-left, and again on the bottom-right next to the `+` button.

## Cause
The `ConnectionsCountPill` was rendered in two slots of the card:
- `renderStatus()` → left `statusSlot`
- `renderRight()` → right `actionSlot` (alongside the `+` add-source button)

The `renderStatus` connector case was added recently (#1065) and duplicated the pill that `renderRight` already shows.

## Fix
Removed the `connector` case from `renderStatus()` so the pill renders **only on the right**, in place of the Connect button. The logic is keyed on `kind === "connector"`, so this fixes every Knowledge-bases card uniformly — **Google Drive, Notion, OneDrive, Granola**.

- Non-connected cards still show the **Connect** button (unchanged).
- The info modal is unaffected — it renders `infoActionSlot ?? actionSlot` and never `statusSlot`.

```diff
-			case "connector": {
-				const count = connectionsByProvider[item.provider].length
-				if (count <= 0) return null
-				return <ConnectionsCountPill count={count} />
-			}
 			default:
 				return null
```

## Testing
Minimal, self-contained deletion (no new code, no unused symbols). Local `tsc` not run in this worktree because `node_modules` isn't installed here; the change leaves valid syntax and `ConnectionsCountPill`/`connectionsByProvider` remain used by `renderRight`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-17 18:07:25 +00:00
sreedharsreeram
00d481e8c0 Move Granola connector to Pro plan (#1132)
## Summary
- move Granola from Max-gated to Pro-gated in Nova integrations and add-connection flows
- add Granola to Pro plan card connector copy in billing
- update Granola connector docs to say Pro Plan or higher

## Testing
- bunx biome check apps/web/components/settings/billing.tsx apps/web/components/integrations-view.tsx apps/web/components/add-document/connections.tsx apps/docs/connectors/granola.mdx
- git diff --check

Note: onboarding-brain was intentionally left unchanged.
2026-06-17 17:48:04 +00:00
MaheshtheDev
def847af5f Revert "fix(mcp): clarify memory graph pagination (#1032)" (#1133)
Some checks failed
Publish OpenAI SDK Python / publish (push) Has been cancelled
This reverts commit feca81f69e.
2026-06-17 17:16:22 +00:00
icyzh
f833843760
fix(openai-sdk): use AsyncSupermemory and correct client API calls (#1063) 2026-06-17 09:05:11 -07:00
Rin
f7e97e0233
fix(web): strengthen URL validation and redirect handling in OG scraper (#1059) 2026-06-17 20:28:24 +05:30
Rāna(Bass Ver.)
feca81f69e
fix(mcp): clarify memory graph pagination (#1032)
Co-authored-by: Vedant Mahajan <vedant.04.mahajan@gmail.com>
2026-06-17 18:38:19 +05:30
nyxst4ck
6a4e0b2514
docs: quote pip extras install examples (#1039)
Co-authored-by: nyxst4ck <289980115+nyxst4ck@users.noreply.github.com>
2026-06-16 23:30:41 -07:00
ishaanxgupta
24eb5a4367 Fix Granola Max upgrade gating (#1095)
## Summary

- Keep the Granola integration card in Upgrade state unless the active plan includes Max or above.
- Prevent the Granola API-key modal from opening unless the active plan is Max or above in both the integrations grid and add-document connections UI.
2026-06-17 06:22:41 +00:00
vorflux
0d2c6c8623 docs: rename Claude Code plugin to supermemory (#1100)
## Summary
- Rename the Claude Code plugin docs references from `claude-supermemory` / `Claude-Supermemory` to `supermemory`
- Update install and command examples to use `/plugin install supermemory` and `/supermemory:logout`

## Testing
- Ran `git diff --check`

---
**Session Details**
- Session: [View Session](https://supermemory.us1.vorflux.com/agent-sessions/cc17c7ae-0fb2-4e2c-bb4c-20a66900d720)
- Requested by: Sreeram Sreedhar (sreeram@supermemory.com)
- Address comments on this PR. Add `(aside)` to your comment to have me ignore it.
2026-06-17 06:14:29 +00:00
@aaronjmars
377bc979d5
fix(deps): bump next to 16.0.7 in memory-graph-playground (critical CVE) (#1082)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-06-16 21:10:32 -07:00
ved015
da70ccc5f1 feat: add chat memory imports to extension (#1115)
demo shared on work-done
2026-06-17 04:08:44 +00:00
ishaanxgupta
9c5a5d4991 Improve mobile integrations layout (#1097)
## Summary
- Add a mobile-only Activity panel with Active and Recent tabs near the top of the integrations page.
- Switch mobile integration cards from horizontal carousel cards to compact vertical list rows.
- Keep the existing desktop right-column layout unchanged.

<img width="366" height="800" alt="image" src="https://github.com/user-attachments/assets/04dc04a0-ae7b-4fe5-b54f-5d730220a90c" />
2026-06-17 04:06:59 +00:00
Mahesh Sanikommu
3f5af42565
Add console logs for debugging consent page (#1129) 2026-06-16 14:46:07 -07:00
Prasanna721
949413d98e fix mcp consent org restore (#1126)
Stops Nova's saved active org from overriding the org picked on the MCP OAuth consent page.

- skips localStorage org restoration on `/oauth/consent`
- keeps normal Nova org restore behavior everywhere else

Testing:
- `bunx biome check --write packages/lib/auth-context.tsx`
- `bun run --filter @repo/web lint` passes with existing warnings
- `bunx tsc --noEmit --project apps/web/tsconfig.json` fails on existing unrelated type errors outside this change
2026-06-16 21:19:06 +00:00
Prasanna721
e75349d82c fail closed on mcp approve (#1123)
The consent screen now fails the approve action if the MCP scope bind fails, if the OAuth consent response omits a redirect URL, or if approve tries to send the user back into a signed Better Auth interaction URL.

That prevents the UI from showing Access authorized while Claude never receives the callback.

Testing:
- bunx biome check --write apps/web/app/oauth/consent/page.tsx
- bun run --filter @repo/web lint (passes with existing warnings outside this file)
- bunx tsc --noEmit --project apps/web/tsconfig.json (fails on existing unrelated app errors)
2026-06-16 19:42:59 +00:00
Prasanna721
8de01a49d3 fix oauth resume redirect (#1122)
Fix the Claude Desktop MCP OAuth resume path after login/org selection.

- drop stale signed Better Auth params before resuming \`/oauth2/authorize\`
- consume \`prompt=login\` so approve can continue to consent/code redirect instead of looping back to login

Tested with \`bunx biome check apps/web/app/'(auth)'/login/page.tsx\`.
2026-06-16 18:31:35 +00:00
Prasanna721
651e304735 feat(web): MCP OAuth consent page (#1118)
Consent + connect UI for the new OAuth 2.1 provider. The API side lives in mono#1812 (stacked on the Enterprise MCP PR). When an MCP client starts OAuth, this is the page where you pick the org and approve access.

What's here:

- `/oauth/consent`: the consent screen. Pick an organization (cards), then set access: permission (read / read+write) and scope (full, or scoped to specific container-tag spaces with a searchable picker). Approving hands the code back to the client.
- `/connect`: plugin-aware entry for known clients (Claude Code, etc.).
- `ConsentCard.tsx`: shared card component (org list with fade, dual-icon connecting header, scoped-spaces picker), built to reuse across plugins.
- plus a fix to the mcp resource metadata.

Pairs with mono#1812 (the API OAuth provider) and the Enterprise MCP PR. Draft until the end-to-end flow is verified.
2026-06-16 17:33:09 +00:00
Ishaan Gupta
925be7c6c5
Add Antigravity MCP setup (#1119) 2026-06-16 12:10:36 +05:30
Mahesh Sanikommu
5eed4bcbf3
Add bulk multi-URL paste to create separate memories (#1109)
Some checks failed
Publish Memory Graph / publish (push) Has been cancelled
2026-06-15 11:37:09 +05:30
Mahesh Sanikommu
3b1fac2d6c
feat(web): delete organization from settings danger zone (#1117) 2026-06-15 11:36:00 +05:30
Ishaan Gupta
42b1920ce0
fix memory render (#1087) 2026-06-14 23:45:53 +05:30
Dhravya Shah
39ef7e1e5e fix: thread issue 2026-06-12 17:41:36 -07:00
sohamd22
dfff4f0fe2 add images for weekly digest email (#1106)
### TL;DR

Added new digest feature images and wordmark asset to the web app's public directory.

### What changed?

Five new images were added under `apps/web/public/images/digest/`:
- `feat-memory.png`
- `feat-profiles.png`
- `feat-retrieval.png`
- `feat-router.png`
- `wordmark.png`

### How to test?

Verify the images are accessible via their public URLs (e.g., `/images/digest/feat-memory.png`) and render correctly wherever they are referenced in the application.

### Why make this change?

These assets are needed to support the digest feature showcase, providing visual representations of the memory, profiles, retrieval, and router features, along with a wordmark for branding purposes.
2026-06-12 21:58:01 +00:00
sreedharsreeram
0ae552037a feat(mcp): playground-style rich recall (formatMemories + profile) (#1101)
## What

Makes the MCP `recall` tool render memories the same way the console **playground** does — rich, scored, relation-aware output — instead of the old flat `### Memory N (NN% match)` list.

The playground pattern is: **profile + rich search → one shared `formatMemories` formatter → feed to the model.** This ports that into the standalone MCP server.

## Changes

- **`format.ts`** (new) — `formatMemories`, lifted verbatim from the playground. Pure, dependency-free. Renders similarity scores, `agg`/`chunk` markers, related-memory arrows (`←` parent, `→` child, `~` related), attached document summaries, and temporal context.
- **`client.ts`** — `SupermemoryClient.search()` now accepts the playground's retrieval knobs (`searchMode` / `rerank` / `rewriteQuery` / `include`) and **stops discarding** the rich response fields (`context`, `documents`, `metadata`, `isAggregated`) during normalization, so the formatter has data to render.
- **`server.ts` (`handleRecall`)** — retrieves memories via `client.search()` with `include: { documents, relatedMemories }`, prepends the user's profile (stable + recent facts) when `includeProfile` is set, and renders memories through `formatMemories`. Output capped at `MAX_RECALL_CHARS`.

## How it maps to the playground

| | Playground | MCP (this PR) |
|---|---|---|
| Profile | injected into its own system prompt (`<user_profile>`) | prepended to `recall` output / exposed via `context` prompt |
| Search | hook pre-fetch **or** tool | `recall` tool (model-triggered) |
| Formatting | `formatMemories` → system prompt | `formatMemories` → `recall` tool result |

## Testing

Verified end-to-end against a local API + local MCP, driven through a real MCP client (and Claude Desktop). `recall` now returns scored memory blocks with `Source:`/`Document:` lines and the legend header. Existing e2e assertions remain compatible (they match `## User Profile` / `## Relevant Memories`, both still emitted).

## Notes

- One deliberate gap vs the playground: `aggregate` — the public SDK's `search.memories` doesn't expose it, so no `agg` synthesis blocks. Relation arrows render only when memories actually have linked parent/child versions.
- Possible follow-up: expose the `include` / `rerank` knobs as `recall` tool params so callers can toggle relations/documents per call.
- Pre-existing `tsc` errors in `server.ts` (dual `@modelcontextprotocol/sdk` install) and `mcp-app.ts` (DOM `lib`) are unrelated to this change — confirmed by an unchanged baseline.

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

---
**Session Details**
- Session: [View Session](https://supermemory.us1.vorflux.com/agent-sessions/c616fc88-a725-4961-9011-712bce740601)
- Requested by: Sreeram Sreedhar (sreeram@supermemory.com)
- Address comments on this PR. Add `(aside)` to your comment to have me ignore it.
2026-06-12 21:53:58 +00:00
MaheshtheDev
81ae72224f feat(spaces): per-space entity context + edit-space modal (#1078)
- "What to remember" per-space context — set on create, on edit, and in the space profile; steers what gets extracted into memory
- Edit-space modal (name + context) from the space pill's hover edit, mirroring the create modal
- Manual saves respect a space's configured context instead of overwriting it with the generic default
2026-06-12 20:51:37 +00:00
MaheshtheDev
40d025e178 Fix onboarding source integrations and connector gating (#1105)
Fixes the onboarding source-integrations step: corrects connector behavior, applies plan-based gating to connectors, and polishes the integrations layout.
2026-06-12 18:05:48 +00:00
Mahesh Sanikommu
94a1e30742
docs: add Container Tags concept page (#1098) 2026-06-11 16:11:09 -07:00