Pangram verdict · v3.3
We believe that this document is fully AI-generated
AI likelihood · overall
AIArticle text · 520 words · 3 segments analyzed
Know what changed. Semantic understanding on top of Git. Diff, blame, impact, log. Functions, not lines. copied $ brew install sem-cli
~/project
Same commit. Different lens. Left: what git shows you. Right: what actually happened.
git diff diff --git a/src/auth/login.ts b/src/auth/login.ts index 4a2b1c0..8f3d2e1 100644 --- a/src/auth/login.ts +++ b/src/auth/login.ts @@ -12,6 +12,18 @@ +export function validateToken(token: string) { + const decoded = jwt.verify(token, SECRET); + if (!decoded.exp || decoded.exp < Date.now()) { + throw new TokenExpiredError(); + } + return decoded; +} + @@ -24,8 +36,10 @@ export async function authenticateUser( - const user = await db.findUser(email); - if (!user) return null; + const user = await db.findUser(email); + if (!user) throw new UserNotFoundError(); + await rateLimiter.check(email); @@ -45,12 +59,0 @@ -export function legacyAuth(user, pass) { - return db.query('SELECT * FROM users - WHERE email = ? AND password = ?', - [user, pass]); -}
sem diff ┌─ src/auth/login.ts ──────────────── │ │ ⊕ function validateToken [added] │ ∆ function authenticateUser [modified] │ ⊖ function legacyAuth [deleted] │ └────────────────────────────────────
3 entities changed across 1 file
AI agents are 2.3x more accurate when given sem output vs raw line diffs. See the benchmark.
Six commands.
One binary. Everything works in any Git repo. No config. No plugins.
sem diff What changed? Entity-level diffs with rename detection, structural hashing, and word-level inline highlights. │ ⊕ function validateToken [added] │ ∆ function authenticateUser [modified] │ ⊖ function legacyAuth [deleted]
sem blame Who changed it? Per-entity blame showing the last commit that touched each function, class, or method. │ ⊕ render_inline_diff a1a6fbf Rohan 04-03 │ ⊕ format_terminal a1a6fbf Rohan 04-03
sem impact What breaks? Cross-file dependency graph shows every entity that depends on a given function, plus affected tests. ⊕ function authenticateUser → depends on: db.findUser, rateLimiter ← used by: loginRoute, authMiddleware ! 42 entities transitively affected
sem log How did it evolve? Git history for a single entity. See every commit that touched a specific function. │ ae576ab Rohan 02-05 added │ a105183 Rohan 02-08 modified (logic) │ a1a6fbf Rohan 04-03 modified (logic)
sem entities What's under a path? Lists every function, class, method, and type with line ranges. entities: src/auth/login.ts function validateToken (L12:24) function authenticateUser (L26:45) interface AuthConfig (L47:52)
sem context Smart context for AI. Token-budgeted context window: the entity, its dependencies, and dependents.
Fits in any LLM prompt. context for authenticateUser (budget: 8000) target: ~705 tokens dependencies: ~256 tokens dependents: ~812 tokens
All commands support --json for machine-readable output. Full reference.
Your stack. Covered. 26 languages. 5 data formats. One binary.
TypeScript JavaScript Python Go Rust Java C C++ C# Ruby PHP Swift Kotlin Elixir Bash HCL Fortran Vue Svelte XML ERB Dart Perl OCaml Scala Zig JSON YAML TOML CSV Markdown
8ms typical diff 26 languages 0 config needed 4,000+ downloads
Try it. 10 seconds. $ brew install sem-cli $ sem setup ✓ Created wrapper script ✓ Set git config --global diff.external = sem ✓ Pre-commit hook installed
Done! Running git diff in any repo will now use sem. To revert, run: sem unsetup One command. Every git diff becomes a sem diff. No config files. Also: cargo install --git https://github.com/Ataraxy-Labs/sem sem-cli