Sem: 코드 이해를 위한 새로운 원시 개념 – LSP가 아니라 Git 위의 엔티티
Source: Hacker News
무엇이 바뀌었는지 알아보세요.
Semantic understanding on top of Git.
Diff, blame, impact, log. Functions, not lines.
복사됨
$ brew install sem-cli
~/project
같은 커밋. 다른 시각.
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]
│
└────────────────────────────────────
1개의 파일에서 3개의 엔티티가 변경되었습니다.
AI 에이전트는 raw 라인 diff보다 sem 출력이 주어졌을 때 2.3배 더 정확합니다.
벤치마크 보기.
여섯 개 명령. 하나의 바이너리.
Everything works in any Git repo. No config. No plugins.
sem diff
무엇이 바뀌었나요? 엔티티 수준 diff와 이름 변경 감지, 구조 해싱, 단어 수준 인라인 하이라이트.
│ ⊕ function validateToken [added]
│ ∆ function authenticateUser [modified]
│ ⊖ function legacyAuth [deleted]
sem blame
누가 변경했나요? 각 함수, 클래스, 메서드를 마지막으로 수정한 커밋을 보여주는 엔티티별 blame.
│ ⊕ render_inline_diff a1a6fbf Rohan 04-03
│ ⊕ format_terminal a1a6fbf Rohan 04-03
sem impact
무엇이 깨지나요? 파일 간 의존성 그래프가 특정 함수에 의존하는 모든 엔티티와 영향을 받은 테스트를 보여줍니다.
⊕ function authenticateUser
→ depends on: db.findUser, rateLimiter
← used by: loginRoute, authMiddleware
! 42 entities transitively affected
sem log
어떻게 진화했나요? 단일 엔티티에 대한 Git 히스토리. 특정 함수에 영향을 준 모든 커밋을 확인하세요.
│ ae576ab Rohan 02-05 added
│ a105183 Rohan 02-08 modified (logic)
│ a1a6fbf Rohan 04-03 modified (logic)
sem entities
경로 아래에는 무엇이 있나요? 모든 함수, 클래스, 메서드, 타입을 라인 범위와 함께 나열합니다.
entities: src/auth/login.ts
function validateToken (L12:24)
function authenticateUser (L26:45)
interface AuthConfig (L47:52)
sem context
AI를 위한 스마트 컨텍스트. 토큰 예산이 제한된 컨텍스트 윈도우: 엔티티와 그 의존성 및 의존자를 포함합니다. 모든 LLM 프롬프트에 맞습니다.
context for authenticateUser (budget: 8000)
target: ~705 tokens
dependencies: ~256 tokens
dependents: ~812 tokens
All commands support --json for machine-readable output.
Full reference.
당신의 스택. 모두 지원.
26개 언어. 5개 데이터 포맷. 하나의 바이너리.
- TypeScript
- JavaScript
- Python
- Go