Commit Graph

11 Commits

Author SHA1 Message Date
Ishaan Gupta 6e951215a2 separate login approval from organization switching 2026-08-24 19:05:34 +05:30
Ishaan Gupta 30642cc7ae feat: add organization switching 2026-08-24 12:34:13 +05:30
Dhravya Shah a4ecd312b1 Fail open with 3s network cap on all hooks; async capture; token count in recall banner (#108)
* feat: fail open with 3s network cap on all hooks; async capture; token count in recall banner

- All hook API calls hard-capped at 3s (was 15s default, 4s recall);
  every failure path continues the session with a visible error
- Stop/capture hook runs with "async": true — fire-and-forget save, so
  the user gets their prompt back immediately. Injection hooks stay
  sync (async hooks' output is discarded, which would kill recall
  injection and auto-approval); tightened their backstop timeouts
- Network failures now say "Supermemory unreachable" instead of raw
  fetch errors, and session-start no longer claims "no previous
  memories" when the fetch failed — only a 404 means empty
- Recall banner shows the injected context cost: "recalled 5 memories (32 tok)"

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PfsBZgW6vDm8GEcy9ML3dT

* feat: statusline tally counts recalled memories in context, not recall events

Search state accumulates a cumulative memories counter (fresh injections
only); the resting tally shows "9 recalled" instead of "6 recalls".
Sessions with only MCP-tool searches (nothing hook-injected) keep the
event-count fallback.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PfsBZgW6vDm8GEcy9ML3dT

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 16:59:59 -06:00
Dhravya Shah e8148dfb30 fix: advance the capture cursor only after the save succeeds
formatNewEntries/formatSignalEntries advanced the tracker before
capture.js called the API, so a failed save silently skipped that
delta forever. The formatters now return { formatted, lastUuid } and
capture.js advances the cursor after addMemory succeeds — a failure
leaves the cursor put and the next Stop recaptures. Found via #96,
originally spotted against the old architecture by @catShaark in #84.

Fixes #96

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-18 21:03:59 -07:00
Dhravya Shah 22b65a2fd8 feat: entity context asks for human-memorable memories, skips git-tracked state
Extraction was memorizing transient working-tree snapshots
("uncommitted changes to X, ready to be committed to PR #N") — state
git already tracks and no teammate would remember. The entity context
now leads with "try to remember things that a human would remember"
and explicitly skips uncommitted file lists, branch position, and
in-flight commit/push status.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-18 20:29:56 -07:00
Dhravya Shah 38f8ab265d fix: mid-luminance brand tint so the ◪ reads on dark and light terminals
#3B35F3 measured 2.4:1 against a dark background — below the 3:1
legibility floor. rgb(124,120,250) measures 4.7:1 on dark and 3.5:1 on
light; shimmer tiers re-derived from the new base.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-18 20:00:42 -07:00
Dhravya Shah 7c2eb06613 feat: recall dedup across the session; brand-colored banners
Injected memories are hashed into a per-session recalled.json (pruned
with statusline state, capped at 500) so a memory already in context is
never re-injected — the banner reports only fresh hits, with repeats as
a gray '… already in context' tail. Banners share lib/colors.js: brand
blue for the ◪ mark, red for recall failures.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-18 19:49:37 -07:00
Dhravya Shah f76ec6757f fix: readStdin resolves on complete JSON instead of waiting for stream end
Fixes #25: on Windows the stdin 'end' event never fires for hook
subprocesses, hanging every hook for its full timeout. readStdin now
parses incrementally and resolves as soon as the payload is complete
JSON, with a 3s fallback timer — the same pattern the statusline
renderer already used. Also drops dead formatRelativeTime code.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-18 19:15:47 -07:00
Dhravya Shah 74d0ed0fe4 feat: recall on every substantive prompt, done by the hook itself
The recall directive was advisory — the model had to choose to spend a
tool call, so mid-session recall almost never happened. The
UserPromptSubmit hook now searches supermemory with the prompt itself
(4s timeout, skips short prompts and /, !, # inputs) and injects the
top matches directly, with a visible '◪ recalled N memories' notice
and statusline search state. A configured recallDirective restores
advisory mode.

Also fixes recall-approve missing the claude.ai connector namespace
(mcp__claude_ai_supermemory__*), which silently dropped the recall
notice and statusline count when the model did search.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-18 19:12:06 -07:00
Dhravya Shah 1d1c9d8f57 feat: live statusline tally + one-time ◆ explainer
Resting label is now a session tally (N loaded · N captured · N recalls)
that ticks on every turn and every recall, instead of a static count with
decaying flashes. First session shows a one-time notice teaching that ◆
marks anything sourced from supermemory.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-18 17:34:35 -07:00
Dhravya Shah e9f018c6b6 checkpoint: visibility fixes in src + new CLI-free hooks architecture (pre-restructure)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-18 17:19:14 -07:00