@ngao/search 0.1.0 → 0.1.2
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/.claude/settings.local.json +10 -0
- package/.env.example +7 -0
- package/.eslintrc.json +20 -0
- package/.github/workflows/build.yml +39 -0
- package/.github/workflows/release.yml +34 -0
- package/.github/workflows/test.yml +35 -0
- package/.mcp-config.json +14 -0
- package/.prettierrc.json +10 -0
- package/LICENSE +17 -0
- package/Makefile +26 -0
- package/README.md +57 -172
- package/config.example.json +8 -0
- package/dist/backend/api/search-engine.d.ts +40 -0
- package/dist/backend/api/search-engine.d.ts.map +1 -0
- package/dist/backend/api/search-engine.js +227 -0
- package/dist/backend/api/search-engine.js.map +1 -0
- package/dist/backend/core/block-impl.d.ts +32 -0
- package/dist/backend/core/block-impl.d.ts.map +1 -0
- package/dist/backend/core/block-impl.js +33 -0
- package/dist/backend/core/block-impl.js.map +1 -0
- package/dist/backend/core/config-loader.d.ts +68 -0
- package/dist/backend/core/config-loader.d.ts.map +1 -0
- package/dist/backend/core/config-loader.js +234 -0
- package/dist/backend/core/config-loader.js.map +1 -0
- package/dist/backend/core/constants.d.ts +39 -0
- package/dist/backend/core/constants.d.ts.map +1 -0
- package/dist/backend/core/constants.js +57 -0
- package/dist/backend/core/constants.js.map +1 -0
- package/dist/backend/core/enums.d.ts +54 -0
- package/dist/backend/core/enums.d.ts.map +1 -0
- package/dist/backend/core/enums.js +61 -0
- package/dist/backend/core/enums.js.map +1 -0
- package/dist/backend/core/errors.d.ts +83 -0
- package/dist/backend/core/errors.d.ts.map +1 -0
- package/dist/backend/core/errors.js +151 -0
- package/dist/backend/core/errors.js.map +1 -0
- package/dist/backend/core/logger.d.ts +68 -0
- package/dist/backend/core/logger.d.ts.map +1 -0
- package/dist/backend/core/logger.js +151 -0
- package/dist/backend/core/logger.js.map +1 -0
- package/dist/backend/core/models.d.ts +332 -0
- package/dist/backend/core/models.d.ts.map +1 -0
- package/dist/backend/core/models.js +6 -0
- package/dist/backend/core/models.js.map +1 -0
- package/dist/backend/core/service-types.d.ts +184 -0
- package/dist/backend/core/service-types.d.ts.map +1 -0
- package/dist/backend/core/service-types.js +7 -0
- package/dist/backend/core/service-types.js.map +1 -0
- package/dist/backend/core/types.d.ts +219 -0
- package/dist/backend/core/types.d.ts.map +1 -0
- package/dist/backend/core/types.js +109 -0
- package/dist/backend/core/types.js.map +1 -0
- package/dist/backend/index.d.ts +5 -0
- package/dist/backend/index.d.ts.map +1 -0
- package/dist/backend/index.js +13 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/indexing/block-extractor.d.ts +22 -0
- package/dist/backend/indexing/block-extractor.d.ts.map +1 -0
- package/dist/backend/indexing/block-extractor.js +52 -0
- package/dist/backend/indexing/block-extractor.js.map +1 -0
- package/dist/backend/indexing/index-builder.d.ts +26 -0
- package/dist/backend/indexing/index-builder.d.ts.map +1 -0
- package/dist/backend/indexing/index-builder.js +71 -0
- package/dist/backend/indexing/index-builder.js.map +1 -0
- package/dist/backend/parsers/base-file-parser.d.ts +134 -0
- package/dist/backend/parsers/base-file-parser.d.ts.map +1 -0
- package/dist/backend/parsers/base-file-parser.js +149 -0
- package/dist/backend/parsers/base-file-parser.js.map +1 -0
- package/dist/backend/parsers/javascript-parser.d.ts +36 -0
- package/dist/backend/parsers/javascript-parser.d.ts.map +1 -0
- package/dist/backend/parsers/javascript-parser.js +194 -0
- package/dist/backend/parsers/javascript-parser.js.map +1 -0
- package/dist/backend/parsers/json-parser.d.ts +15 -0
- package/dist/backend/parsers/json-parser.d.ts.map +1 -0
- package/dist/backend/parsers/json-parser.js +75 -0
- package/dist/backend/parsers/json-parser.js.map +1 -0
- package/dist/backend/parsers/markdown-parser.d.ts +17 -0
- package/dist/backend/parsers/markdown-parser.d.ts.map +1 -0
- package/dist/backend/parsers/markdown-parser.js +94 -0
- package/dist/backend/parsers/markdown-parser.js.map +1 -0
- package/dist/backend/parsers/parser-factory.d.ts +43 -0
- package/dist/backend/parsers/parser-factory.d.ts.map +1 -0
- package/dist/backend/parsers/parser-factory.js +149 -0
- package/dist/backend/parsers/parser-factory.js.map +1 -0
- package/dist/backend/parsers/python-parser.d.ts +21 -0
- package/dist/backend/parsers/python-parser.d.ts.map +1 -0
- package/dist/backend/parsers/python-parser.js +185 -0
- package/dist/backend/parsers/python-parser.js.map +1 -0
- package/dist/backend/parsers/yaml-parser.d.ts +16 -0
- package/dist/backend/parsers/yaml-parser.d.ts.map +1 -0
- package/dist/backend/parsers/yaml-parser.js +81 -0
- package/dist/backend/parsers/yaml-parser.js.map +1 -0
- package/dist/backend/repositories/implementations/lancedb-block-repository.d.ts +125 -0
- package/dist/backend/repositories/implementations/lancedb-block-repository.d.ts.map +1 -0
- package/dist/backend/repositories/implementations/lancedb-block-repository.js +505 -0
- package/dist/backend/repositories/implementations/lancedb-block-repository.js.map +1 -0
- package/dist/backend/repositories/implementations/lancedb-metadata-repository.d.ts +107 -0
- package/dist/backend/repositories/implementations/lancedb-metadata-repository.d.ts.map +1 -0
- package/dist/backend/repositories/implementations/lancedb-metadata-repository.js +275 -0
- package/dist/backend/repositories/implementations/lancedb-metadata-repository.js.map +1 -0
- package/dist/backend/repositories/implementations/memory-cache.d.ts +18 -0
- package/dist/backend/repositories/implementations/memory-cache.d.ts.map +1 -0
- package/dist/backend/repositories/implementations/memory-cache.js +53 -0
- package/dist/backend/repositories/implementations/memory-cache.js.map +1 -0
- package/dist/backend/repositories/repository.interface.d.ts +334 -0
- package/dist/backend/repositories/repository.interface.d.ts.map +1 -0
- package/dist/backend/repositories/repository.interface.js +7 -0
- package/dist/backend/repositories/repository.interface.js.map +1 -0
- package/dist/backend/search/context-extractor.d.ts +29 -0
- package/dist/backend/search/context-extractor.d.ts.map +1 -0
- package/dist/backend/search/context-extractor.js +106 -0
- package/dist/backend/search/context-extractor.js.map +1 -0
- package/dist/backend/search/multi-index-searcher.d.ts +28 -0
- package/dist/backend/search/multi-index-searcher.d.ts.map +1 -0
- package/dist/backend/search/multi-index-searcher.js +81 -0
- package/dist/backend/search/multi-index-searcher.js.map +1 -0
- package/dist/backend/search/query-parser.d.ts +37 -0
- package/dist/backend/search/query-parser.d.ts.map +1 -0
- package/dist/backend/search/query-parser.js +145 -0
- package/dist/backend/search/query-parser.js.map +1 -0
- package/dist/backend/search/ranking-engine.d.ts +31 -0
- package/dist/backend/search/ranking-engine.d.ts.map +1 -0
- package/dist/backend/search/ranking-engine.js +165 -0
- package/dist/backend/search/ranking-engine.js.map +1 -0
- package/dist/backend/search/result-formatter.d.ts +29 -0
- package/dist/backend/search/result-formatter.d.ts.map +1 -0
- package/dist/backend/search/result-formatter.js +70 -0
- package/dist/backend/search/result-formatter.js.map +1 -0
- package/dist/backend/service-types.d.ts +184 -0
- package/dist/backend/service-types.d.ts.map +1 -0
- package/dist/backend/service-types.js +7 -0
- package/dist/backend/service-types.js.map +1 -0
- package/dist/backend/services/embedding-service.d.ts +75 -0
- package/dist/backend/services/embedding-service.d.ts.map +1 -0
- package/dist/backend/services/embedding-service.js +298 -0
- package/dist/backend/services/embedding-service.js.map +1 -0
- package/dist/backend/services/file-watcher.d.ts +17 -0
- package/dist/backend/services/file-watcher.d.ts.map +1 -0
- package/dist/backend/services/file-watcher.js +92 -0
- package/dist/backend/services/file-watcher.js.map +1 -0
- package/dist/backend/services/index-information-service.d.ts +114 -0
- package/dist/backend/services/index-information-service.d.ts.map +1 -0
- package/dist/backend/services/index-information-service.js +104 -0
- package/dist/backend/services/index-information-service.js.map +1 -0
- package/dist/backend/services/ngao-search-service.d.ts +107 -0
- package/dist/backend/services/ngao-search-service.d.ts.map +1 -0
- package/dist/backend/services/ngao-search-service.js +384 -0
- package/dist/backend/services/ngao-search-service.js.map +1 -0
- package/dist/backend/services/quantization-service.d.ts +53 -0
- package/dist/backend/services/quantization-service.d.ts.map +1 -0
- package/dist/backend/services/quantization-service.js +84 -0
- package/dist/backend/services/quantization-service.js.map +1 -0
- package/dist/backend/services/reindex-manager.d.ts +25 -0
- package/dist/backend/services/reindex-manager.d.ts.map +1 -0
- package/dist/backend/services/reindex-manager.js +78 -0
- package/dist/backend/services/reindex-manager.js.map +1 -0
- package/dist/backend/services/session-manager.d.ts +115 -0
- package/dist/backend/services/session-manager.d.ts.map +1 -0
- package/dist/backend/services/session-manager.js +150 -0
- package/dist/backend/services/session-manager.js.map +1 -0
- package/dist/backend/services/vector-search-service.d.ts +81 -0
- package/dist/backend/services/vector-search-service.d.ts.map +1 -0
- package/dist/backend/services/vector-search-service.js +143 -0
- package/dist/backend/services/vector-search-service.js.map +1 -0
- package/dist/backend/utils/file-utils.d.ts +92 -0
- package/dist/backend/utils/file-utils.d.ts.map +1 -0
- package/dist/backend/utils/file-utils.js +247 -0
- package/dist/backend/utils/file-utils.js.map +1 -0
- package/dist/cli/setup.d.ts +4 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +138 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +14 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +7 -67075
- package/dist/main.js.map +1 -0
- package/dist/mcp/tool-schemas.d.ts +205 -0
- package/dist/mcp/tool-schemas.d.ts.map +1 -0
- package/dist/mcp/tool-schemas.js +391 -0
- package/dist/mcp/tool-schemas.js.map +1 -0
- package/dist/server/logger.d.ts +50 -0
- package/dist/server/logger.d.ts.map +1 -0
- package/dist/server/logger.js +77 -0
- package/dist/server/logger.js.map +1 -0
- package/dist/server/tool-registry.d.ts +64 -0
- package/dist/server/tool-registry.d.ts.map +1 -0
- package/dist/server/tool-registry.js +93 -0
- package/dist/server/tool-registry.js.map +1 -0
- package/dist/server/transports/mcp-transport.d.ts +31 -0
- package/dist/server/transports/mcp-transport.d.ts.map +1 -0
- package/dist/server/transports/mcp-transport.js +331 -0
- package/dist/server/transports/mcp-transport.js.map +1 -0
- package/dist/server/transports/rest-transport.d.ts +36 -0
- package/dist/server/transports/rest-transport.d.ts.map +1 -0
- package/dist/server/transports/rest-transport.js +250 -0
- package/dist/server/transports/rest-transport.js.map +1 -0
- package/docs/API.md +116 -0
- package/docs/ARCHITECTURE.md +101 -0
- package/docs/FILE_WATCHING.md +120 -0
- package/docs/INSTALLATION.md +87 -0
- package/docs/MCP_INTEGRATION.md +108 -0
- package/docs/README.md +288 -0
- package/docs/USAGE.md +123 -0
- package/docs/architecture-design-standards/01_ARCHITECTURE.md +863 -0
- package/docs/architecture-design-standards/02_SEARCH_ENGINE_DESIGN.md +958 -0
- package/docs/architecture-design-standards/03_DATAFLOW.md +1000 -0
- package/docs/architecture-design-standards/04_VISUAL_GUIDE.md +922 -0
- package/docs/architecture-design-standards/05_REPOSITORY_PATTERN_GUIDE.md +503 -0
- package/docs/architecture-design-standards/06_IMPLEMENTATION_PATTERNS.md +1026 -0
- package/docs/architecture-design-standards/07_TYPESCRIPT_GUIDE.md +1027 -0
- package/docs/architecture-design-standards/08_CODING_STANDARDS.md +1274 -0
- package/docs/reference/01_START_HERE.md +108 -0
- package/docs/reference/02_QUICK_REFERENCE.md +363 -0
- package/docs/reference/03_DOCUMENTATION_INDEX.md +293 -0
- package/docs/reference/04_DELIVERY_SUMMARY.md +463 -0
- package/docs/reference/05_IMPLEMENTATION_OVERVIEW.md +319 -0
- package/docs/reference/06_RESEARCH_SUMMARY.md +519 -0
- package/docs/tracking/03_IMPLEMENTATION_ROADMAP.md +788 -0
- package/jest.config.json +12 -0
- package/package.json +46 -53
- package/prepend-shebang.js +18 -0
- package/scripts/setup-mcp.sh +66 -0
- package/src/backend/index.ts +5 -0
- package/src/backend/service-types.ts +219 -0
- package/src/backend/services/file-watcher.ts +79 -0
- package/src/backend/services/ngao-search-service.ts +430 -0
- package/src/backend/services/reindex-manager.ts +90 -0
- package/src/backend/services/session-manager.ts +214 -0
- package/src/cli/setup.ts +122 -0
- package/src/index.ts +6 -0
- package/src/main.ts +225 -0
- package/src/mcp/tool-schemas.ts +439 -0
- package/src/server/logger.ts +88 -0
- package/src/server/tool-registry.ts +117 -0
- package/src/server/transports/mcp-transport.ts +374 -0
- package/src/server/transports/rest-transport.ts +258 -0
- package/tests/unit/agent-tools.test.ts +454 -0
- package/tests/unit/file-watcher.test.d.ts +2 -0
- package/tests/unit/file-watcher.test.d.ts.map +1 -0
- package/tests/unit/file-watcher.test.js +9 -0
- package/tests/unit/file-watcher.test.js.map +1 -0
- package/tests/unit/file-watcher.test.ts +7 -0
- package/tests/unit/search-integration.test.ts +256 -0
- package/tests/unit/services.test.d.ts +2 -0
- package/tests/unit/services.test.d.ts.map +1 -0
- package/tests/unit/services.test.js +9 -0
- package/tests/unit/services.test.js.map +1 -0
- package/tests/unit/services.test.ts +7 -0
- package/tsconfig.json +23 -0
- package/webpack.backend.config.js +60 -0
- package/webpack.config.js +34 -0
- package/models/Xenova/all-MiniLM-L6-v2/config.json +0 -25
- package/models/Xenova/all-MiniLM-L6-v2/onnx/model_quantized.onnx +0 -0
- package/models/Xenova/all-MiniLM-L6-v2/tokenizer.json +0 -30686
- package/models/Xenova/all-MiniLM-L6-v2/tokenizer_config.json +0 -15
package/.env.example
ADDED
package/.eslintrc.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"parser": "@typescript-eslint/parser",
|
|
3
|
+
"parserOptions": {
|
|
4
|
+
"ecmaVersion": 2020,
|
|
5
|
+
"sourceType": "module"
|
|
6
|
+
},
|
|
7
|
+
"extends": [
|
|
8
|
+
"eslint:recommended",
|
|
9
|
+
"plugin:@typescript-eslint/recommended"
|
|
10
|
+
],
|
|
11
|
+
"rules": {
|
|
12
|
+
"@typescript-eslint/no-explicit-any": "warn",
|
|
13
|
+
"@typescript-eslint/explicit-module-boundary-types": "off",
|
|
14
|
+
"no-console": "off"
|
|
15
|
+
},
|
|
16
|
+
"env": {
|
|
17
|
+
"node": true,
|
|
18
|
+
"es6": true
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: Build
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
build:
|
|
11
|
+
runs-on: ${{ matrix.os }}
|
|
12
|
+
|
|
13
|
+
strategy:
|
|
14
|
+
matrix:
|
|
15
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
16
|
+
node-version: [20.x]
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v3
|
|
20
|
+
|
|
21
|
+
- name: Use Node.js ${{ matrix.node-version }}
|
|
22
|
+
uses: actions/setup-node@v3
|
|
23
|
+
with:
|
|
24
|
+
node-version: ${{ matrix.node-version }}
|
|
25
|
+
|
|
26
|
+
- name: Install dependencies
|
|
27
|
+
run: npm ci
|
|
28
|
+
|
|
29
|
+
- name: Build application
|
|
30
|
+
run: npm run build
|
|
31
|
+
|
|
32
|
+
- name: Build CLI binary
|
|
33
|
+
run: npm run build:cli
|
|
34
|
+
|
|
35
|
+
- name: Upload artifacts
|
|
36
|
+
uses: actions/upload-artifact@v3
|
|
37
|
+
with:
|
|
38
|
+
name: ngao-search-${{ matrix.os }}
|
|
39
|
+
path: bin/
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*'
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
release:
|
|
10
|
+
runs-on: ${{ matrix.os }}
|
|
11
|
+
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v3
|
|
18
|
+
|
|
19
|
+
- uses: actions/setup-node@v3
|
|
20
|
+
with:
|
|
21
|
+
node-version: '20'
|
|
22
|
+
|
|
23
|
+
- name: Install dependencies
|
|
24
|
+
run: npm ci
|
|
25
|
+
|
|
26
|
+
- name: Build CLI binary
|
|
27
|
+
run: npm run build:cli
|
|
28
|
+
|
|
29
|
+
- name: Create Release
|
|
30
|
+
uses: softprops/action-gh-release@v1
|
|
31
|
+
with:
|
|
32
|
+
files: bin/ngao-search*
|
|
33
|
+
env:
|
|
34
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
name: Test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main, develop ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main, develop ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
strategy:
|
|
14
|
+
matrix:
|
|
15
|
+
node-version: [18.x, 20.x]
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v3
|
|
19
|
+
|
|
20
|
+
- name: Use Node.js ${{ matrix.node-version }}
|
|
21
|
+
uses: actions/setup-node@v3
|
|
22
|
+
with:
|
|
23
|
+
node-version: ${{ matrix.node-version }}
|
|
24
|
+
|
|
25
|
+
- name: Install dependencies
|
|
26
|
+
run: npm ci
|
|
27
|
+
|
|
28
|
+
- name: Type check
|
|
29
|
+
run: npx tsc --noEmit
|
|
30
|
+
|
|
31
|
+
- name: Run tests
|
|
32
|
+
run: npm test
|
|
33
|
+
|
|
34
|
+
- name: Run linter
|
|
35
|
+
run: npm run lint
|
package/.mcp-config.json
ADDED
package/.prettierrc.json
ADDED
package/LICENSE
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
Copyright 2026 Ngao Search Contributors
|
|
6
|
+
|
|
7
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
you may not use this file except in compliance with the License.
|
|
9
|
+
You may obtain a copy of the License at
|
|
10
|
+
|
|
11
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
|
|
13
|
+
Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
See the License for the specific language governing permissions and
|
|
17
|
+
limitations under the License.
|
package/Makefile
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
.PHONY: all build build-js build-cli clean test dev install
|
|
2
|
+
|
|
3
|
+
all: clean build
|
|
4
|
+
|
|
5
|
+
build: build-js
|
|
6
|
+
|
|
7
|
+
build-js:
|
|
8
|
+
npm run build
|
|
9
|
+
|
|
10
|
+
build-cli:
|
|
11
|
+
npm run build:cli
|
|
12
|
+
|
|
13
|
+
clean:
|
|
14
|
+
rm -rf dist/ bin/
|
|
15
|
+
|
|
16
|
+
test:
|
|
17
|
+
npm test
|
|
18
|
+
|
|
19
|
+
dev:
|
|
20
|
+
npm run dev
|
|
21
|
+
|
|
22
|
+
install:
|
|
23
|
+
npm install
|
|
24
|
+
|
|
25
|
+
start:
|
|
26
|
+
npm start
|
package/README.md
CHANGED
|
@@ -1,219 +1,104 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Ngao Search - MCP Server
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Claude Desktop MCP Server for code search with file watching, REST API, and Model Context Protocol integration.
|
|
4
|
+
|
|
5
|
+
> **Note:** This is the MCP server package for Claude Desktop integration. If you're looking for the core search library to embed in your own applications, see [`@ngao/search-core`](https://www.npmjs.com/package/@ngao/search-core).
|
|
4
6
|
|
|
5
7
|
## Features
|
|
6
8
|
|
|
7
|
-
- 🔍
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
- 💾 **Persistent Storage**: LanceDB integration for data persistence across restarts
|
|
14
|
-
- 🤖 **Vector Search**: Semantic similarity search with embeddings support
|
|
9
|
+
- 🔍 Full-text and semantic code search
|
|
10
|
+
- 👁️ Automatic file watching and reindexing
|
|
11
|
+
- 🌐 REST API server
|
|
12
|
+
- 🔌 Model Context Protocol (MCP) integration
|
|
13
|
+
- 🖥️ Interactive CLI
|
|
14
|
+
- 📊 Session and search history management
|
|
15
15
|
|
|
16
16
|
## Installation
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
npm install
|
|
20
|
-
npm run build
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Usage
|
|
24
|
-
|
|
25
|
-
### As a Library
|
|
26
|
-
|
|
27
|
-
```typescript
|
|
28
|
-
import { SearchEngine } from 'ngao-search-mcp';
|
|
29
|
-
import {
|
|
30
|
-
InMemoryBlockRepository,
|
|
31
|
-
InMemoryMetadataRepository,
|
|
32
|
-
} from 'ngao-search-mcp';
|
|
33
|
-
|
|
34
|
-
// Create repositories
|
|
35
|
-
const blockRepo = new InMemoryBlockRepository();
|
|
36
|
-
const metadataRepo = new InMemoryMetadataRepository();
|
|
37
|
-
|
|
38
|
-
// Create search engine
|
|
39
|
-
const engine = new SearchEngine(blockRepo, metadataRepo);
|
|
40
|
-
|
|
41
|
-
// Index a directory
|
|
42
|
-
const stats = await engine.indexDirectory('./src');
|
|
43
|
-
console.log(`Indexed ${stats.totalBlocks} blocks from ${stats.totalFiles} files`);
|
|
44
|
-
|
|
45
|
-
// Search
|
|
46
|
-
const results = await engine.search('authentication handler');
|
|
47
|
-
console.log(`Found ${results.length} results`);
|
|
19
|
+
npm install -g @ngao/search
|
|
48
20
|
```
|
|
49
21
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
```typescript
|
|
53
|
-
import { McpServer, handleToolCall } from 'ngao-search-mcp';
|
|
22
|
+
Or use directly:
|
|
54
23
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
// Get available tools
|
|
58
|
-
const tools = server.getTools();
|
|
59
|
-
|
|
60
|
-
// Handle tool calls
|
|
61
|
-
const result = await handleToolCall(server, 'search', {
|
|
62
|
-
query: 'authentication',
|
|
63
|
-
maxResults: 10,
|
|
64
|
-
});
|
|
24
|
+
```bash
|
|
25
|
+
npx @ngao/search
|
|
65
26
|
```
|
|
66
27
|
|
|
67
|
-
|
|
28
|
+
### Pre-downloaded Models
|
|
68
29
|
|
|
69
|
-
|
|
30
|
+
Embedding models are **included with @ngao/search-core** dependency.
|
|
70
31
|
|
|
71
|
-
-
|
|
72
|
-
- **Parsers**: File type-specific parsers (Python, Markdown, JavaScript, etc.)
|
|
73
|
-
- **Repositories**: Abstract data access layer
|
|
74
|
-
- **Indexing**: Block extraction and index building
|
|
75
|
-
- **Search**: Query parsing, ranking, and result formatting
|
|
76
|
-
- **MCP Server**: Protocol implementation for tool exposure
|
|
32
|
+
The core library contains pre-downloaded models - no additional downloads needed!
|
|
77
33
|
|
|
78
|
-
|
|
34
|
+
See the [Installation Guide](./docs/INSTALLATION.md) for details.
|
|
79
35
|
|
|
80
|
-
|
|
81
|
-
- **Facade Pattern**: Single entry point via SearchEngine
|
|
82
|
-
- **Factory Pattern**: Parser selection by file type
|
|
83
|
-
- **Dependency Injection**: Explicit dependency management
|
|
36
|
+
## Quick Start
|
|
84
37
|
|
|
85
|
-
|
|
38
|
+
### Setup
|
|
86
39
|
|
|
40
|
+
```bash
|
|
41
|
+
npx @ngao/search --setup
|
|
87
42
|
```
|
|
88
|
-
src/
|
|
89
|
-
├── core/ # Models, types, constants, errors
|
|
90
|
-
├── parsers/ # File type parsers
|
|
91
|
-
├── repositories/ # Data access interfaces & implementations
|
|
92
|
-
├── indexing/ # Block extraction & index building
|
|
93
|
-
├── search/ # Query, ranking, formatting
|
|
94
|
-
├── api/ # SearchEngine facade
|
|
95
|
-
├── mcp/ # MCP server implementation
|
|
96
|
-
└── utils/ # Utility functions
|
|
97
|
-
|
|
98
|
-
tests/
|
|
99
|
-
├── unit/ # Unit tests
|
|
100
|
-
└── integration/ # Integration tests
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
## Coding Standards
|
|
104
|
-
|
|
105
|
-
All code follows strict TypeScript conventions:
|
|
106
43
|
|
|
107
|
-
|
|
108
|
-
- ✅ **Naming**: PascalCase classes, camelCase methods, UPPER_SNAKE_CASE constants
|
|
109
|
-
- ✅ **Architecture**: Clear separation of concerns
|
|
110
|
-
- ✅ **Documentation**: JSDoc comments for public APIs
|
|
111
|
-
- ✅ **Testing**: Unit and integration tests
|
|
112
|
-
|
|
113
|
-
## Configuration
|
|
44
|
+
This will guide you through setting up a search index for your project.
|
|
114
45
|
|
|
115
|
-
|
|
46
|
+
### Search via CLI
|
|
116
47
|
|
|
117
48
|
```bash
|
|
118
|
-
|
|
49
|
+
npx @ngao/search search "function name"
|
|
119
50
|
```
|
|
120
51
|
|
|
121
|
-
###
|
|
122
|
-
|
|
123
|
-
ngao search uses **LanceDB** for persistent storage:
|
|
52
|
+
### Start REST API Server
|
|
124
53
|
|
|
125
54
|
```bash
|
|
126
|
-
|
|
127
|
-
├── blocks.lance # Indexed code blocks with embeddings
|
|
128
|
-
└── metadata.lance # File metadata and statistics
|
|
55
|
+
npx @ngao/search --server --port 3000
|
|
129
56
|
```
|
|
130
57
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
## Development
|
|
58
|
+
Then use the API:
|
|
134
59
|
|
|
135
60
|
```bash
|
|
136
|
-
|
|
137
|
-
npm run build
|
|
138
|
-
|
|
139
|
-
# Type check
|
|
140
|
-
npm run type-check
|
|
141
|
-
|
|
142
|
-
# Lint
|
|
143
|
-
npm run lint
|
|
144
|
-
npm run lint:fix
|
|
145
|
-
|
|
146
|
-
# Format
|
|
147
|
-
npm run format
|
|
148
|
-
npm run format:check
|
|
149
|
-
|
|
150
|
-
# Test
|
|
151
|
-
npm test
|
|
152
|
-
npm run test:watch
|
|
153
|
-
npm run test:coverage
|
|
61
|
+
curl http://localhost:3000/api/search?q=useState
|
|
154
62
|
```
|
|
155
63
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
| Format | Extensions | Features |
|
|
159
|
-
|--------|-----------|----------|
|
|
160
|
-
| Python | `.py`, `.pyi` | Functions, classes, methods, docstrings |
|
|
161
|
-
| Markdown | `.md`, `.markdown`, `.mdx` | Headings, paragraphs, code blocks |
|
|
162
|
-
| JavaScript | `.js`, `.jsx`, `.mjs` | Functions, classes, exports, hooks |
|
|
163
|
-
| TypeScript | `.ts`, `.tsx` | Types, interfaces, classes, functions |
|
|
164
|
-
| JSON | `.json`, `.jsonc` | Keys, nested structures |
|
|
165
|
-
| YAML | `.yaml`, `.yml` | Keys, values, nested structures |
|
|
166
|
-
|
|
167
|
-
## Algorithm Details
|
|
64
|
+
### Start MCP Server
|
|
168
65
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
```
|
|
172
|
-
Score = 0.35 × KeywordMatch + 0.25 × Position + 0.20 × ScopeSpecificity
|
|
173
|
-
+ 0.10 × Recency + 0.10 × Frequency
|
|
66
|
+
```bash
|
|
67
|
+
npx @ngao/search --mcp
|
|
174
68
|
```
|
|
175
69
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
- **Inverted Index**: Maps keywords to source blocks
|
|
179
|
-
- **Block Registry**: Direct block access by ID
|
|
180
|
-
- **Scope Hierarchy**: Quick navigation by scope path
|
|
181
|
-
- **Metadata**: Change detection via file hashing
|
|
182
|
-
|
|
183
|
-
## API Reference
|
|
184
|
-
|
|
185
|
-
### ISearchEngine
|
|
186
|
-
|
|
187
|
-
```typescript
|
|
188
|
-
search(query: string, options?: SearchOptions): Promise<SearchResult[]>
|
|
189
|
-
indexDirectory(dirPath: string, options?: IndexOptions): Promise<IndexStats>
|
|
190
|
-
getStats(): Promise<IndexStats>
|
|
191
|
-
clearIndex(): Promise<void>
|
|
192
|
-
```
|
|
70
|
+
## Configuration
|
|
193
71
|
|
|
194
|
-
|
|
72
|
+
Create a `config.json` file in your project root:
|
|
195
73
|
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"projectRoot": "/path/to/project",
|
|
77
|
+
"language": "typescript",
|
|
78
|
+
"indexDirectory": ".ngao/index",
|
|
79
|
+
"watchMode": true,
|
|
80
|
+
"autoReindex": true
|
|
81
|
+
}
|
|
203
82
|
```
|
|
204
83
|
|
|
205
|
-
##
|
|
84
|
+
## Documentation
|
|
206
85
|
|
|
207
|
-
-
|
|
208
|
-
-
|
|
209
|
-
-
|
|
210
|
-
-
|
|
86
|
+
- [Installation Guide](./docs/INSTALLATION.md)
|
|
87
|
+
- [Usage Guide](./docs/USAGE.md)
|
|
88
|
+
- [API Documentation](./docs/API.md)
|
|
89
|
+
- [MCP Integration](./docs/MCP_INTEGRATION.md)
|
|
90
|
+
- [File Watching](./docs/FILE_WATCHING.md)
|
|
211
91
|
|
|
212
|
-
##
|
|
92
|
+
## Architecture
|
|
213
93
|
|
|
214
|
-
|
|
94
|
+
This application is built on top of [`@ngao/search-core`](https://www.npmjs.com/package/@ngao/search-core), providing additional features:
|
|
215
95
|
|
|
216
|
-
|
|
96
|
+
- File watching (Chokidar)
|
|
97
|
+
- HTTP REST API (Express)
|
|
98
|
+
- MCP protocol transport
|
|
99
|
+
- CLI interface
|
|
100
|
+
- Session management
|
|
217
101
|
|
|
218
|
-
|
|
102
|
+
## License
|
|
219
103
|
|
|
104
|
+
Apache-2.0
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SearchEngine Facade Implementation
|
|
3
|
+
* Main public API for NGAO Search
|
|
4
|
+
* Updated: LanceDB-based storage with vector embeddings
|
|
5
|
+
*/
|
|
6
|
+
import 'reflect-metadata';
|
|
7
|
+
import { ISearchEngine, ILogger } from '../core/types';
|
|
8
|
+
import { SearchResult, IndexStats, SearchOptions, IndexOptions } from '../core/models';
|
|
9
|
+
import { IBlockRepository, IMetadataRepository } from '../repositories/repository.interface';
|
|
10
|
+
/**
|
|
11
|
+
* SearchEngine implements ISearchEngine interface
|
|
12
|
+
* Orchestrates all components for search and indexing
|
|
13
|
+
* Storage: LanceDB (persistent, with vector embeddings)
|
|
14
|
+
*/
|
|
15
|
+
export declare class SearchEngine implements ISearchEngine {
|
|
16
|
+
private _blockRepository;
|
|
17
|
+
private _metadataRepository;
|
|
18
|
+
private _parserFactory;
|
|
19
|
+
private _queryParser;
|
|
20
|
+
private _blockExtractor;
|
|
21
|
+
private _searcher;
|
|
22
|
+
private _rankingEngine;
|
|
23
|
+
private _contextExtractor;
|
|
24
|
+
private _logger;
|
|
25
|
+
private _embeddingService;
|
|
26
|
+
private _quantizationService;
|
|
27
|
+
private _enableVectorSearch;
|
|
28
|
+
constructor(blockRepository: IBlockRepository, metadataRepository: IMetadataRepository, logger?: ILogger, options?: {
|
|
29
|
+
enableVectorSearch?: boolean;
|
|
30
|
+
});
|
|
31
|
+
search(query: string, options?: SearchOptions): Promise<SearchResult[]>;
|
|
32
|
+
indexDirectory(dirPath: string, options?: IndexOptions & {
|
|
33
|
+
includePaths?: string[];
|
|
34
|
+
excludePaths?: string[];
|
|
35
|
+
}): Promise<IndexStats>;
|
|
36
|
+
getStats(): Promise<IndexStats>;
|
|
37
|
+
clearIndex(): Promise<void>;
|
|
38
|
+
private _shouldReindexFile;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=search-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-engine.d.ts","sourceRoot":"","sources":["../../../src/backend/api/search-engine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,OAAO,EAAkC,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAc7F;;;;GAIG;AACH,qBAAa,YAAa,YAAW,aAAa;IAChD,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,oBAAoB,CAAsB;IAClD,OAAO,CAAC,mBAAmB,CAAU;gBAGnC,eAAe,EAAE,gBAAgB,EACjC,kBAAkB,EAAE,mBAAmB,EACvC,MAAM,CAAC,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;QACR,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B;IA8BU,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA2DvE,cAAc,CACzB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,YAAY,GAAG;QAAE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAC5E,OAAO,CAAC,UAAU,CAAC;IA2GT,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAuB/B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAK1B,kBAAkB;CAiBjC"}
|