@crewx/search 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/SKILL.md ADDED
@@ -0,0 +1,131 @@
1
+ ---
2
+ name: search-bm25
3
+ description: BM25 기반 문서/코드 검색 스킬. grep보다 똑똑한 검색 - 복합 키워드, 점수 정렬, 의미 기반 매칭.
4
+ version: 0.1.0
5
+ ---
6
+
7
+ # Search BM25 Skill
8
+
9
+ grep보다 똑똑한 BM25 기반 검색. 복합 키워드를 이해하고 관련성 점수로 정렬.
10
+
11
+ ## When to Use This Skill
12
+
13
+ - 문서에서 특정 주제 찾을 때
14
+ - 코드베이스에서 관련 파일 찾을 때
15
+ - grep으로 정확히 못 찾을 때
16
+ - 여러 키워드 조합 검색할 때
17
+
18
+ ## Setup
19
+
20
+ ```bash
21
+ cd skills/search-bm25
22
+ npm install
23
+ ```
24
+
25
+ **Dependencies:**
26
+ - wink-bm25-text-search (BM25 검색 엔진)
27
+ - wink-nlp-utils (토크나이저, 스테밍)
28
+ - gray-matter (마크다운 frontmatter 파싱)
29
+ - glob (파일 패턴 매칭)
30
+
31
+ ## Quick Start
32
+
33
+ ```bash
34
+ # 마크다운 검색 (기본)
35
+ npx search "런처 아키텍처" .
36
+
37
+ # 특정 디렉토리
38
+ npx search "API endpoint" ./docs
39
+
40
+ # JS/TS 파일 검색
41
+ npx search "authentication" ./src --glob="**/*.{js,ts}"
42
+
43
+ # 결과 개수 제한
44
+ npx search "error handling" . --limit=10
45
+
46
+ # JSON 출력
47
+ npx search "database" . --json
48
+ ```
49
+
50
+ ## Options
51
+
52
+ | 옵션 | 설명 | 기본값 |
53
+ |------|------|--------|
54
+ | `--glob=<pattern>` | 파일 패턴 | `**/*.md` |
55
+ | `--limit=<n>` | 결과 개수 제한 | 20 |
56
+ | `--json` | JSON 형식 출력 | false |
57
+
58
+ ## grep vs search
59
+
60
+ | | grep | search |
61
+ |--|------|--------|
62
+ | 정확한 문자열 | ✅ | ✅ |
63
+ | 복합 키워드 | ❌ | ✅ |
64
+ | 점수 정렬 | ❌ | ✅ |
65
+ | 의미 유사 | ❌ | △ (BM25) |
66
+ | 한글 검색 | ✅ | ✅ |
67
+
68
+ ## Examples
69
+
70
+ ### 문서 검색
71
+ ```bash
72
+ # CrewX 런처 관련 문서 찾기
73
+ npx search "CrewX launcher electron architecture" ./docs
74
+
75
+ # 결과:
76
+ # [17.5점] docs/launcher/architecture.md
77
+ # [12.3점] docs/decisions/2025-12-24-launcher.md
78
+ ```
79
+
80
+ ### 코드 검색
81
+ ```bash
82
+ # API 인증 관련 코드 찾기
83
+ npx search "authentication JWT token" ./src --glob="**/*.ts"
84
+
85
+ # 결과:
86
+ # [15.2점] src/auth/jwt.service.ts
87
+ # [10.8점] src/middleware/auth.middleware.ts
88
+ ```
89
+
90
+ ### 한글 검색
91
+ ```bash
92
+ # 에러 처리 관련 찾기
93
+ npx search "에러 처리 예외" . --glob="**/*.md"
94
+
95
+ # 결과:
96
+ # [3점] docs/troubleshooting.md
97
+ # [2점] docs/error-handling.md
98
+ ```
99
+
100
+ ## How It Works
101
+
102
+ 1. **파일 수집**: glob 패턴으로 대상 파일 찾기
103
+ 2. **인덱싱**: 각 파일 내용을 BM25 엔진에 등록
104
+ 3. **검색**: 쿼리를 토큰화하고 점수 계산
105
+ 4. **정렬**: 관련성 점수 높은 순으로 출력
106
+
107
+ ### 점수 계산 (BM25)
108
+ - **TF (Term Frequency)**: 단어 빈도
109
+ - **IDF (Inverse Document Frequency)**: 희귀 단어일수록 높은 점수
110
+ - **문서 길이 보정**: 짧은 문서에서 매칭되면 더 의미있음
111
+
112
+ ## Tips
113
+
114
+ 1. **키워드 많이 넣기**: BM25는 부분 매칭도 점수화
115
+ ```bash
116
+ # 좋음: 관련 키워드 여러 개
117
+ search "API authentication JWT refresh token"
118
+
119
+ # 나쁨: 단어 하나만
120
+ search "API"
121
+ ```
122
+
123
+ 2. **한글+영어 혼합 가능**
124
+ ```bash
125
+ search "런처 Electron Tauri 아키텍처"
126
+ ```
127
+
128
+ 3. **결과 많으면 limit 조절**
129
+ ```bash
130
+ search "config" . --limit=5
131
+ ```
package/dist/cli.js CHANGED
@@ -61,7 +61,7 @@ function loadTracer() {
61
61
  }
62
62
  return null;
63
63
  }
64
- function showSkillHelp() {
64
+ function showDetailedUsage() {
65
65
  const skillMd = path.join(__dirname, '..', 'SKILL.md');
66
66
  if (fs.existsSync(skillMd)) {
67
67
  process.stdout.write(fs.readFileSync(skillMd, 'utf-8'));
@@ -75,10 +75,13 @@ if (args[0] === '--version') {
75
75
  console.log(PKG_VERSION);
76
76
  process.exit(0);
77
77
  }
78
- if (args[0] === 'help') {
79
- showSkillHelp();
78
+ if (args[0] === 'usage') {
79
+ showDetailedUsage();
80
80
  process.exit(0);
81
81
  }
82
+ if (args[0] === 'help' || args[0] === '--help' || args[0] === '-h') {
83
+ args.length = 0;
84
+ }
82
85
  const options = {
83
86
  query: '',
84
87
  searchPath: '.',
@@ -106,21 +109,28 @@ for (let i = 0; i < args.length; i++) {
106
109
  }
107
110
  if (!options.query) {
108
111
  console.log(`
109
- @crewx/search@${PKG_VERSION} - BM25 기반 문서 검색
112
+ @crewx/search@${PKG_VERSION} - BM25 full-text search engine
110
113
 
111
114
  Usage:
112
- node cli.ts "<query>" [path] [options]
115
+ search <query> [path] [options]
116
+
117
+ Commands:
118
+ search <query> [path] Search files by query (default path: .)
119
+ search usage Show detailed guide
113
120
 
114
121
  Options:
115
- --glob=<pattern> 파일 패턴 (default: **/*.md)
116
- --limit=<n> 결과 개수 제한 (default: 20)
117
- --json JSON 출력
122
+ --glob=<pattern> File pattern (default: **/*.md)
123
+ --limit=<n> Max results (default: 20)
124
+ --json JSON output
125
+ --version Show version
126
+ --help, -h Show this help
118
127
 
119
128
  Examples:
120
- node cli.ts "API authentication" ./docs
121
- node cli.ts "런처 아키텍처" . --glob="**/*.md"
122
- node cli.ts "error handling" ./src --glob="**/*.{js,ts}" --limit=10
123
- node cli.ts "database connection" . --json
129
+ search "API authentication" ./docs
130
+ search "error handling" ./src --glob="**/*.{js,ts}" --limit=10
131
+ search "database connection" . --json
132
+
133
+ For detailed usage guide: search usage
124
134
  `);
125
135
  process.exit(0);
126
136
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewx/search",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "BM25 full-text search engine for CrewX documents and code",
5
5
  "type": "commonjs",
6
6
  "main": "dist/src/engine.js",
@@ -12,7 +12,7 @@
12
12
  }
13
13
  },
14
14
  "bin": { "search": "./dist/cli.js" },
15
- "files": ["dist"],
15
+ "files": ["dist", "SKILL.md"],
16
16
  "scripts": {
17
17
  "build": "tsc",
18
18
  "dev": "ts-node cli.ts",
@@ -21,7 +21,7 @@
21
21
  "keywords": ["crewx", "search", "bm25", "full-text"],
22
22
  "license": "MIT",
23
23
  "dependencies": {
24
- "@crewx/knowledge-core": "^0.1.1",
24
+ "@crewx/knowledge-core": "^0.1.3",
25
25
  "glob": "^10.0.0"
26
26
  },
27
27
  "devDependencies": {