diff --git a/README.md b/README.md index 01a9093..a947069 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,11 @@ license: MIT

- +

+ Typing a misspelled half-remembered phrase; the session you meant is row one +

## Why not just `/resume`? @@ -168,7 +172,7 @@ opened the session *asking for*, so it's weighted hardest; **length normalizatio sprawling transcript that mentions your term once no longer outranks a short, on-point session. Near-ties are then nudged by **recency** and by how often you've actually resumed that session (read off agsearch's own resume log). Badge `N/T` = query terms matched. A word that barely exists -anywhere (a typo like `alibrry`) falls back to subsequence matching. No modes or flags. +anywhere (a typo like `conection`) falls back to subsequence matching. No modes or flags. **Honest limit:** this is lexical, not semantic. Ranking beats an unordered `rg` dump, but it is not a guarantee that row one is the session you meant. Because transcripts are large, diff --git a/agsearch b/agsearch index 6578cdb..04339bb 100755 --- a/agsearch +++ b/agsearch @@ -1041,7 +1041,7 @@ def build_sessions(lines): fh.write("\n".join(out)) -# Common words that add noise, not signal, to a search ("migration OF alibrary"). +# Common words that add noise, not signal, to a search ("migration OF the database"). _STOP = {"of", "the", "a", "an", "to", "for", "in", "on", "and", "or", "is", "it", "this", "that", "with", "from", "by", "at", "as", "be", "are", "was", "were", "how", "do", "i", "my", "me", "we", "you", "about", "into", "using", "use", "some", "any"} @@ -1219,7 +1219,7 @@ def rank_sessions(rows, qterms, usage=None, now=None): length normalization, so a sprawling session no longer outranks a short exact match, and what a session was *opened to do* outweighs a passing mention buried in it. The result is then nudged by recency and how often you've resumed that session. A term that exists almost - nowhere as text (a typo like 'alibrry') falls back to subsequence matching. + nowhere as text (a typo like 'conection') falls back to subsequence matching. """ usage = usage or {} n = len(rows) or 1 diff --git a/docs/demo.gif b/docs/demo.gif new file mode 100644 index 0000000..c26cd4c Binary files /dev/null and b/docs/demo.gif differ diff --git a/docs/demo.tape b/docs/demo.tape deleted file mode 100644 index 0d38c2a..0000000 --- a/docs/demo.tape +++ /dev/null @@ -1,42 +0,0 @@ -# VHS tape for the README demo GIF. https://github.com/charmbracelet/vhs -# -# brew install vhs -# vhs docs/demo.tape # writes docs/demo.gif -# -# The tape is committed rather than just the GIF on purpose: re-recording after -# a UI change is `vhs docs/demo.tape`, not getting the take right again. -# -# Keep it under ~15 seconds. The demo's whole job is to show that row one is -# the session you meant — not to tour the flags. - -Output docs/demo.gif - -Set Shell "zsh" -Set FontSize 16 -Set Width 1200 -Set Height 640 -Set Padding 20 -Set Theme "Catppuccin Mocha" -Set TypingSpeed 60ms - -Hide -Type "clear" Enter -Show - -Sleep 700ms -Type "agsearch" -Sleep 400ms -Enter - -# Cold list settles, then type the thing you half-remember. -Sleep 2s -Type "stripe tax" -Sleep 2500ms - -# The point of the whole product: the preview pane already shows the matched -# line, highlighted, before spending a token. -Sleep 1500ms - -# Enter resumes — into Claude Code or Codex, whichever the session came from. -Enter -Sleep 3s