ragcode-context-engine 0.1.0
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/LICENSE +21 -0
- package/README.md +366 -0
- package/README.zh-CN.md +363 -0
- package/dist/src/cli/configure/app.d.ts +6 -0
- package/dist/src/cli/configure/app.js +81 -0
- package/dist/src/cli/configure/run.d.ts +5 -0
- package/dist/src/cli/configure/run.js +85 -0
- package/dist/src/cli/configure/state.d.ts +42 -0
- package/dist/src/cli/configure/state.js +174 -0
- package/dist/src/cli/configure.d.ts +31 -0
- package/dist/src/cli/configure.js +101 -0
- package/dist/src/cli/index.d.ts +2 -0
- package/dist/src/cli/index.js +503 -0
- package/dist/src/cli/tui/index-progress.d.ts +12 -0
- package/dist/src/cli/tui/index-progress.js +49 -0
- package/dist/src/cli/tui/watch-status.d.ts +10 -0
- package/dist/src/cli/tui/watch-status.js +27 -0
- package/dist/src/cli/update.d.ts +18 -0
- package/dist/src/cli/update.js +111 -0
- package/dist/src/config/dotenv.d.ts +1 -0
- package/dist/src/config/dotenv.js +14 -0
- package/dist/src/config/graph-runtime.d.ts +13 -0
- package/dist/src/config/graph-runtime.js +29 -0
- package/dist/src/config/runtime-config.d.ts +87 -0
- package/dist/src/config/runtime-config.js +215 -0
- package/dist/src/config/semantic-runtime.d.ts +24 -0
- package/dist/src/config/semantic-runtime.js +89 -0
- package/dist/src/context/context-builder.d.ts +20 -0
- package/dist/src/context/context-builder.js +277 -0
- package/dist/src/context/expansion-policy.d.ts +6 -0
- package/dist/src/context/expansion-policy.js +49 -0
- package/dist/src/context/skeletonizer.d.ts +2 -0
- package/dist/src/context/skeletonizer.js +79 -0
- package/dist/src/context/snippet-renderer.d.ts +2 -0
- package/dist/src/context/snippet-renderer.js +67 -0
- package/dist/src/core/contracts.d.ts +74 -0
- package/dist/src/core/contracts.js +1 -0
- package/dist/src/core/engine.d.ts +64 -0
- package/dist/src/core/engine.js +442 -0
- package/dist/src/core/types.d.ts +490 -0
- package/dist/src/core/types.js +1 -0
- package/dist/src/diagnostics/doctor.d.ts +66 -0
- package/dist/src/diagnostics/doctor.js +193 -0
- package/dist/src/diagnostics/embedding-test.d.ts +24 -0
- package/dist/src/diagnostics/embedding-test.js +83 -0
- package/dist/src/graph/diff-files.d.ts +1 -0
- package/dist/src/graph/diff-files.js +14 -0
- package/dist/src/graph/impact-report.d.ts +10 -0
- package/dist/src/graph/impact-report.js +173 -0
- package/dist/src/graph/in-memory-graph-store.d.ts +36 -0
- package/dist/src/graph/in-memory-graph-store.js +395 -0
- package/dist/src/graph/owner-ranking.d.ts +2 -0
- package/dist/src/graph/owner-ranking.js +41 -0
- package/dist/src/graph/sqlite-graph-store.d.ts +51 -0
- package/dist/src/graph/sqlite-graph-store.js +724 -0
- package/dist/src/graph/sqlite-statements.d.ts +36 -0
- package/dist/src/graph/sqlite-statements.js +105 -0
- package/dist/src/graph/target-matcher.d.ts +13 -0
- package/dist/src/graph/target-matcher.js +64 -0
- package/dist/src/index.d.ts +32 -0
- package/dist/src/index.js +32 -0
- package/dist/src/indexing/analyzers/fallback-analyzer.d.ts +6 -0
- package/dist/src/indexing/analyzers/fallback-analyzer.js +45 -0
- package/dist/src/indexing/analyzers/go-treesitter-analyzer.d.ts +2 -0
- package/dist/src/indexing/analyzers/go-treesitter-analyzer.js +87 -0
- package/dist/src/indexing/analyzers/java-treesitter-analyzer.d.ts +2 -0
- package/dist/src/indexing/analyzers/java-treesitter-analyzer.js +88 -0
- package/dist/src/indexing/analyzers/python-treesitter-analyzer.d.ts +2 -0
- package/dist/src/indexing/analyzers/python-treesitter-analyzer.js +96 -0
- package/dist/src/indexing/analyzers/registry.d.ts +5 -0
- package/dist/src/indexing/analyzers/registry.js +23 -0
- package/dist/src/indexing/analyzers/rust-treesitter-analyzer.d.ts +2 -0
- package/dist/src/indexing/analyzers/rust-treesitter-analyzer.js +96 -0
- package/dist/src/indexing/analyzers/tree-sitter-base.d.ts +30 -0
- package/dist/src/indexing/analyzers/tree-sitter-base.js +163 -0
- package/dist/src/indexing/analyzers/types.d.ts +17 -0
- package/dist/src/indexing/analyzers/types.js +1 -0
- package/dist/src/indexing/analyzers/typescript-analyzer.d.ts +5 -0
- package/dist/src/indexing/analyzers/typescript-analyzer.js +199 -0
- package/dist/src/indexing/ast-analyzer.d.ts +11 -0
- package/dist/src/indexing/ast-analyzer.js +11 -0
- package/dist/src/indexing/chunker.d.ts +11 -0
- package/dist/src/indexing/chunker.js +157 -0
- package/dist/src/indexing/ignore-policy.d.ts +6 -0
- package/dist/src/indexing/ignore-policy.js +40 -0
- package/dist/src/indexing/indexer.d.ts +13 -0
- package/dist/src/indexing/indexer.js +189 -0
- package/dist/src/indexing/language.d.ts +3 -0
- package/dist/src/indexing/language.js +24 -0
- package/dist/src/indexing/scanner.d.ts +13 -0
- package/dist/src/indexing/scanner.js +87 -0
- package/dist/src/lsp/definition-resolver.d.ts +6 -0
- package/dist/src/lsp/definition-resolver.js +60 -0
- package/dist/src/lsp/typescript-language-service.d.ts +21 -0
- package/dist/src/lsp/typescript-language-service.js +82 -0
- package/dist/src/mcp/server.d.ts +11 -0
- package/dist/src/mcp/server.js +64 -0
- package/dist/src/mcp/tools.d.ts +266 -0
- package/dist/src/mcp/tools.js +309 -0
- package/dist/src/project/project-identity.d.ts +2 -0
- package/dist/src/project/project-identity.js +24 -0
- package/dist/src/project/project-registry.d.ts +12 -0
- package/dist/src/project/project-registry.js +49 -0
- package/dist/src/project/workspace-resolver.d.ts +20 -0
- package/dist/src/project/workspace-resolver.js +62 -0
- package/dist/src/retrieval/graph-reranker.d.ts +11 -0
- package/dist/src/retrieval/graph-reranker.js +0 -0
- package/dist/src/retrieval/hybrid-retriever.d.ts +31 -0
- package/dist/src/retrieval/hybrid-retriever.js +111 -0
- package/dist/src/retrieval/path-classification.d.ts +6 -0
- package/dist/src/retrieval/path-classification.js +22 -0
- package/dist/src/retrieval/query-matching.d.ts +22 -0
- package/dist/src/retrieval/query-matching.js +166 -0
- package/dist/src/retrieval/query-planner.d.ts +5 -0
- package/dist/src/retrieval/query-planner.js +77 -0
- package/dist/src/retrieval/ranking-signals.d.ts +19 -0
- package/dist/src/retrieval/ranking-signals.js +97 -0
- package/dist/src/retrieval/topology-distance.d.ts +21 -0
- package/dist/src/retrieval/topology-distance.js +116 -0
- package/dist/src/reuse/reuse-detector.d.ts +12 -0
- package/dist/src/reuse/reuse-detector.js +564 -0
- package/dist/src/semantic/deterministic-embedding.d.ts +7 -0
- package/dist/src/semantic/deterministic-embedding.js +31 -0
- package/dist/src/semantic/in-memory-semantic-store.d.ts +11 -0
- package/dist/src/semantic/in-memory-semantic-store.js +65 -0
- package/dist/src/semantic/lance-semantic-store.d.ts +131 -0
- package/dist/src/semantic/lance-semantic-store.js +623 -0
- package/dist/src/semantic/openai-compatible-embedding.d.ts +19 -0
- package/dist/src/semantic/openai-compatible-embedding.js +75 -0
- package/dist/src/service/service-identity.d.ts +13 -0
- package/dist/src/service/service-identity.js +48 -0
- package/dist/src/service/service-manager.d.ts +29 -0
- package/dist/src/service/service-manager.js +231 -0
- package/dist/src/service/service-templates.d.ts +22 -0
- package/dist/src/service/service-templates.js +101 -0
- package/dist/src/subgraph/impact-explainer.d.ts +2 -0
- package/dist/src/subgraph/impact-explainer.js +54 -0
- package/dist/src/subgraph/node-expander.d.ts +13 -0
- package/dist/src/subgraph/node-expander.js +139 -0
- package/dist/src/subgraph/output-preset.d.ts +3 -0
- package/dist/src/subgraph/output-preset.js +102 -0
- package/dist/src/subgraph/subgraph-builder.d.ts +17 -0
- package/dist/src/subgraph/subgraph-builder.js +688 -0
- package/dist/src/topology/export-index.d.ts +7 -0
- package/dist/src/topology/export-index.js +14 -0
- package/dist/src/topology/framework-topology.d.ts +3 -0
- package/dist/src/topology/framework-topology.js +460 -0
- package/dist/src/topology/import-resolver.d.ts +2 -0
- package/dist/src/topology/import-resolver.js +29 -0
- package/dist/src/topology/orm-topology.d.ts +3 -0
- package/dist/src/topology/orm-topology.js +200 -0
- package/dist/src/topology/runtime-topology.d.ts +3 -0
- package/dist/src/topology/runtime-topology.js +204 -0
- package/dist/src/topology/symbol-resolver.d.ts +6 -0
- package/dist/src/topology/symbol-resolver.js +74 -0
- package/dist/src/topology/test-topology.d.ts +2 -0
- package/dist/src/topology/test-topology.js +82 -0
- package/dist/src/utils/hash.d.ts +2 -0
- package/dist/src/utils/hash.js +7 -0
- package/dist/src/utils/path.d.ts +2 -0
- package/dist/src/utils/path.js +7 -0
- package/dist/src/watch/event-journal.d.ts +17 -0
- package/dist/src/watch/event-journal.js +81 -0
- package/dist/src/watch/file-event-coalescer.d.ts +9 -0
- package/dist/src/watch/file-event-coalescer.js +39 -0
- package/dist/src/watch/index-scheduler.d.ts +52 -0
- package/dist/src/watch/index-scheduler.js +190 -0
- package/dist/src/watch/watch-daemon.d.ts +73 -0
- package/dist/src/watch/watch-daemon.js +368 -0
- package/dist/src/watch/watcher-liveness.d.ts +47 -0
- package/dist/src/watch/watcher-liveness.js +168 -0
- package/dist/src/web/server.d.ts +1 -0
- package/dist/src/web/server.js +375 -0
- package/package.json +94 -0
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="docs/images/eeb4a920-7607-41a7-aa2c-1d897a96a1ee.png" alt="RagCode logo" width="180" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">RagCode ไธไธๆๅผๆ</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://github.com/MarshallEriksen-Neura/ragcode/actions/workflows/ci.yml"><img src="https://github.com/MarshallEriksen-Neura/ragcode/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
|
|
9
|
+
<a href="https://www.npmjs.com/package/ragcode-context-engine"><img src="https://img.shields.io/npm/v/ragcode-context-engine.svg" alt="npm version" /></a>
|
|
10
|
+
<a href="./LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT" /></a>
|
|
11
|
+
<a href="https://nodejs.org/"><img src="https://img.shields.io/badge/node-%3E%3D24-green.svg" alt="Node >= 24" /></a>
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
<p align="center"><a href="./README.md">English</a> ยท <b>็ฎไฝไธญๆ</b></p>
|
|
15
|
+
|
|
16
|
+
**RagCode ๆฏ้ขๅ็ผ็ ๆบ่ฝไฝ็ใๅฏ้ช่ฏไธไธๆๅฑใ๏ผไธๅ
จ็จๅจๆฌๅฐ่ฟ่กใ**
|
|
17
|
+
|
|
18
|
+
็ปๅคงๅคๆฐไปฃ็ ๆบ่ฝๅทฅๅ
ทๆญขๆญฅไบ**ๆฃ็ดข**โโๆ็ธๅ
ณไปฃ็ ็ๆฎตไธข็ปๆบ่ฝไฝๅฐฑๅฎไบไบใRagCode ๅค่ตฐไธๆญฅ๏ผๅฎไผๅ่ฏๆบ่ฝไฝ**ๅฝๅๆๆก็ๅทฒ้ช่ฏไธไธๆๆฏๅฆ่ถณไปฅๅฎๅ
จๅฐๅจๆ**ใๆฏไธไธชๅ็ญ้ฝ้ๅธฆๆ็กฎ็ๆฅๆบๅผ็จใๆฐ้ฒๅบฆใๅฝๅฑ้พใๅฝฑๅๅๅพ๏ผblast-radius๏ผใ่ฆ็ไฟกๅท๏ผcoverage๏ผ๏ผไปฅๅไธไธช `edit-readiness` ๅคๅฎ๏ผ`safe_to_edit_after_reading` / `investigate_only` / `not_enough_context`๏ผโโๅนถ่ฏๅฎๅฐ่ฎฐๅฝ่ฟ็ผบๅชไบ่ฏๆฎใ
|
|
19
|
+
|
|
20
|
+
ๅฎ**ไธ็ผ่พๅจๆ ๅ
ณใMCP ๅ็**๏ผClaude CodeใCodex๏ผๆไปปไฝ MCP ๅฎขๆท็ซฏโโไธ็ปๅฎๅไธ็ผ่พๅจ๏ผ๏ผๅนถ**ๅฎๅ
จๅจไฝ ็ๆบๅจไธ่ฟ่ก**๏ผๆ ้่ดฆๅทใๆ ้ API keyใไปฃ็ ไธๅบๆฌๅฐ๏ผใ้ฆๆฌก่ฟ่ก็จ็กฎๅฎๆงๅตๅ
ฅๅณๅฏ็ฆป็บฟๅทฅไฝ๏ผๅชๆๅฝไฝ ๆณ่ฆๆดๅฅฝ็ๅฌๅๆถ๏ผๆ้่ฆๆขไธ OpenAI ๅ
ผๅฎน็ๅตๅ
ฅproviderใ
|
|
21
|
+
|
|
22
|
+
ๅฎๅ้ดไบ CodeGraphใUnderstand-Anything ็ญ้กน็ฎ็ๆ่ทฏ๏ผๅนถๅจๆญคๅบ็กไธๅ ๅ
ฅไบ LanceDB ่ฏญไนๅฑไปฅๅๆดๅผบ็ไธไธๆๅผๆๅฅ็บฆ๏ผ`get_context` ่ฟๅ็ๆฏๅฝๅๅทฒ็ดขๅผ็ใ่ฝๅคๅธฎๅฉๆบ่ฝไฝๅ็ญใ่ฐ่ฏใไฟฎๆนๆ่ฏๅฎกไปฃ็ ็**ๆๅฐไปปๅกไธไธๆๅ
**ใ
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## ไธบไปไน้ RagCode
|
|
27
|
+
|
|
28
|
+
| ๅฆๆไฝ ้่ฆโฆโฆ | RagCode ้ๅ๏ผๅ ไธบโฆโฆ |
|
|
29
|
+
|---|---|
|
|
30
|
+
| ไธ่ขซๅไธ็ผ่พๅจ้ๅฎ็ไธไธๆ่ฝๅ | MCP ๅ็๏ผ้้
ไปปๆๆบ่ฝไฝๅฎฟไธป๏ผ่้ๆไธไธช IDE |
|
|
31
|
+
| ไปฃ็ ๆฐธไธ็ฆปๅผๆฌๆบ | ๅ
จๆฌๅฐ็ดขๅผ + ็ฆป็บฟๅตๅ
ฅ๏ผๆ ไบ็ซฏๅพ่ฟ |
|
|
32
|
+
| ่ฎฉๆบ่ฝไฝใๆญฃ็กฎๅฐๅจๆใ่้ใ่ชไฟกๅฐ็ฏ้ใ | ๅธฆ่ฆ็ไฟกๅทไธ edit-readiness ๅคๅฎ็้ช่ฏๅผๅญๅพ๏ผ่ไธๆฏๅๅง็ๆฎตๅ ็ |
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## ๆๆฏๆ
|
|
37
|
+
|
|
38
|
+
| ้ขๅ | ๆๆฏ |
|
|
39
|
+
|------|-----------|
|
|
40
|
+
| ่ฏญ่จ / ่ฟ่กๆถ | TypeScript 5.9ใNode.js **>= 24**๏ผไฝฟ็จ `node:sqlite`๏ผใESM ๆจกๅ |
|
|
41
|
+
| ็ปๆๅๅพๅญๅจ | `better-sqlite3`๏ผSQLite + FTS๏ผ๏ผๆต่ฏๅบๆฏไธไฝฟ็จๅ
ๅญๅญๅจ |
|
|
42
|
+
| ่ฏญไน / ๅ้ๅญๅจ | `@lancedb/lancedb` + `apache-arrow`๏ผๅนถๆไพๅ
ๅญๅญๅจๅ
ๅบ |
|
|
43
|
+
| AST / ่งฃๆ | TypeScript Compiler API๏ผTS/JS๏ผใ`tree-sitter`๏ผPythonใGoใRustใJava๏ผ |
|
|
44
|
+
| MCP ้ๆ | `@modelcontextprotocol/sdk`๏ผstdio ๆๅก๏ผ |
|
|
45
|
+
| CLI | `commander`ใ`ink` + `react`๏ผไบคไบๅผๅๅฏผ๏ผ |
|
|
46
|
+
| Web ไปช่กจ็ | `express` + `ws` ๅ็ซฏ๏ผVue ๅ็ซฏ๏ผไฝไบ `web/`๏ผ |
|
|
47
|
+
| ๆไปถ็ๅฌ | `chokidar` |
|
|
48
|
+
| ๆ ก้ช | `zod` |
|
|
49
|
+
| ๅทฅๅ
ท้พ | `tsx`๏ผๅผๅ๏ผใ`vitest`๏ผๆต่ฏ๏ผใ`tsc`๏ผๆๅปบ + ็ฑปๅๆฃๆฅ๏ผ |
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## ้กน็ฎๆถๆ
|
|
54
|
+
|
|
55
|
+
RagCode ้็จๅๅฑ่ฎพ่ฎก๏ผไปปไฝๅ
ทไฝ็ๅญๅจๅฎ็ฐ้ฝไธไผ่ทจ่ถ่พน็ๆณๆผใๆๆๅฏนๅค็ๆฅๅฃๅฑ๏ผCLIใMCPใWeb๏ผ้ฝไพ่ต `src/core` ไธญ็ๅฅ็บฆ๏ผ่ไธไพ่ตไปปไฝ็นๅฎๆฐๆฎๅบใ
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโโโโโ
|
|
59
|
+
ๆฅๅฃๅฑ โ CLI โ โ MCP โ โ Web ไปช่กจ็ โ
|
|
60
|
+
โโโโโโฌโโโโโโ โโโโโโฌโโโโโโ โโโโโโโโฌโโโโโโโโ
|
|
61
|
+
โโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโ
|
|
62
|
+
โ
|
|
63
|
+
โโโโโโโโโโโโโผโโโโโโโโโโโโ
|
|
64
|
+
โ ContextEngine (core) โ ่ง่ๅฅ็บฆ
|
|
65
|
+
โโโโโโโโโโโโโฌโโโโโโโโโโโโ
|
|
66
|
+
โโโโโโโโโโโโโโโโฌโโโโโโโโโผโโโโโโโโโฌโโโโโโโโโโโโโโโ
|
|
67
|
+
โผ โผ โผ โผ โผ
|
|
68
|
+
โโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ
|
|
69
|
+
โindexingโ โ graph โ โ sem. โ โretrievalโ โ context โ
|
|
70
|
+
โ ๆซๆ โ โ SQLite โ โLance โ โ ่งๅๅจ โ โ ๆๅ
ๅจ โ
|
|
71
|
+
โ ๅๅ โ โ +FTS โ โ DB โ โ +่ๅ โ โ +้ข็ฎ โ
|
|
72
|
+
โโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ
|
|
73
|
+
โ
|
|
74
|
+
โโโโโโโผโโโโโโ
|
|
75
|
+
โ watch โ ๅข้ๆฐ้ฒๅบฆ
|
|
76
|
+
โโโโโโโโโโโโโ
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**ๅๅฑ่่ดฃ**๏ผ่ฏฆ่ง [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)๏ผ๏ผ
|
|
80
|
+
|
|
81
|
+
- **core** โ ่ง่ๅฅ็บฆ๏ผ`RepoIndex`ใ`CodeFile`ใ`CodeChunk`ใ`GraphStore`ใ`SemanticStore`ใ`ContextEngine`ใ่ฟๆฏๅ
ถไปไธๅๆไพ่ต็็จณๅฎ่พน็ใ
|
|
82
|
+
- **indexing** โ ๆไปถ็ณป็ปๆซๆใๅฟฝ็ฅ่งๅใๅๅธ่ฎก็ฎใๅๅไปฅๅ็ดขๅผๆตๆฐด็บฟๆญฅ้ชคใๅฎไธๆ็ฅ MCPใ
|
|
83
|
+
- **graph** โ ็ฒพ็กฎ็ไปฃ็ ็ปๆ๏ผๆไปถใ็ฌฆๅทใ่พนใๆฅๆพใ่ฐ็จๆน/่ขซ่ฐ็จๆน/ๅฝฑๅๅๆใๆต่ฏ็จๅ
ๅญๅฎ็ฐ๏ผ็ไบง็จ SQLite + FTSใ
|
|
84
|
+
- **semantic** โ ๅตๅ
ฅไธๅ้ๆฃ็ดข๏ผ่ๅจๆฅๅฃไนๅ๏ผๅ ๆญคๅฏไปฅ่ช็ฑๆฟๆขๆไพๅ๏ผ็กฎๅฎๆงใOpenAI ๅ
ผๅฎนใๆฌๅฐๆจกๅ๏ผๅๅญๅจๅ็ซฏใ
|
|
85
|
+
- **retrieval** โ ๆฅ่ฏข่งๅ๏ผๆๅพ่ฏๅซใๅพ + ่ฏญไนๆฃ็ดขใๅๆฐ่ๅใ็ปๆๅฝไธๅใ
|
|
86
|
+
- **context** โ ้ขๅๆบ่ฝไฝ็่พๅบ๏ผๅจๅญ็ฌฆ/Token ้ข็ฎๅ
ๆ้็ๆฎต๏ผ้ๅธฆ็็ฑใๅๆฐใๆฅๆบๅผ็จไปฅๅ `missingEvidence`ใ
|
|
87
|
+
- **watch** โ ้ฟๆถ้ด่ฟ่ก็็ๅฌๅจใๆไน
ๅไบไปถๆฅๅฟใ่ๆไปถๅๅนถ๏ผไปฅๅๅๅฐๆน้้ๅปบ็ดขๅผ่ฐๅบฆใ
|
|
88
|
+
- **mcp** โ ่ฝป่็ๅ่ฎฎ้้
ๅฑ๏ผๅทฅๅ
ทๅฝๅใ่พๅ
ฅๆ ก้ชใๅค็ๅจๅๅใ่ฟ้ไธๅ
ๅซไปปไฝๆฃ็ดข้ป่พใ
|
|
89
|
+
|
|
90
|
+
**ไธไธๆๅ
ๅฅ็บฆ**ๆฏๆดไธชๅผๆ็ๆ ธๅฟใ`get_context` ่ฟๅ๏ผ
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
brief โ freshness โ ownerChain โ topology โ ่ฏๆฎ็ๆฎต โ missingEvidence โ nextQueries
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
็ๆฎตๆฏ*่ฏๆฎ*๏ผ่้็ปๆ็ไธป่ฆ็ป็ปๆนๅผใๅคงๆไปถ้ป่ฎคไปฅ `skeleton`๏ผ้ชจๆถ๏ผๅฑๅผ็บงๅซ่ฟๅ๏ผ่้ๅฎๆดๆบ็ ๏ผๅนถไธๆฏไธช็ๆฎต้ฝไผๆฅๅ็็ฅไบๅคๅฐ่กใ
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## ๅฟซ้ๅผๅง
|
|
101
|
+
|
|
102
|
+
### ๅ็ฝฎๆกไปถ
|
|
103
|
+
|
|
104
|
+
- **Node.js >= 24.0.0**๏ผๅฟ
้โโSQLite ๅพๅญๅจไฝฟ็จ `node:sqlite`๏ผ
|
|
105
|
+
- WindowsใmacOS ๆ Linux
|
|
106
|
+
- ็บฆ 100 MB ็ฃ็็ฉบ้ด๏ผ็จไบไพ่ตไธ็ดขๅผๆฐๆฎ
|
|
107
|
+
|
|
108
|
+
### ๅฎ่ฃ
ๅนถ่ฟ่ก๏ผ็ป็ซฏไผๅ
ใ็ฆป็บฟไผๅ
๏ผ
|
|
109
|
+
|
|
110
|
+
้ฆๆฌก่ฟ่กๆ ้ไปปไฝๅตๅ
ฅ API keyใๆ ้่ดฆๅทใๆ ้ๆ็ฎกๆๅกใ
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# ๅ
จๅฑๅฎ่ฃ
|
|
114
|
+
npm install -g ragcode-context-engine
|
|
115
|
+
|
|
116
|
+
cd my-project
|
|
117
|
+
ragcode init # ็ฆป็บฟไผๅ
้
็ฝฎ๏ผsqlite + lancedb + ็กฎๅฎๆงๅตๅ
ฅ
|
|
118
|
+
ragcode index . # ๆๅปบ็ปๆๅ + ่ฏญไน็ดขๅผ
|
|
119
|
+
ragcode setup-mcp # ไธบไฝ ็ๆบ่ฝไฝๅฎขๆท็ซฏๆณจๅ MCP ๆๅก
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
ๆ่
ๅ
ๅฎ่ฃ
็ดๆฅ่ฏ็จ๏ผ
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
npx ragcode-context-engine index .
|
|
126
|
+
npx ragcode-context-engine search . "query"
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
ไปๆบ็ ๅผๅ๏ผๆชๅ
จๅฑๅฎ่ฃ
๏ผ๏ผ็จ dev ่ๆฌ่ฟ่กไปปๆๅฝไปคโโๅฎ้่ฟ `tsx` ็ดๆฅๆง่ก TypeScript ๅ
ฅๅฃ๏ผ
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
npm run dev -- index .
|
|
133
|
+
npm run dev -- setup-mcp --client codex --print
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### ๅ็บง่ฏญไนๅฌๅ่ฝๅ๏ผๅฏ้๏ผๆฐธไธ้ปๅก๏ผ
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
ragcode configure # ็ผ่พๅญๅจ / ๆไพๅ / ๆจกๅ / base URL / ็ปดๅบฆ
|
|
140
|
+
ragcode configure --test # ้ช่ฏๆไพๅ๏ผๅคฑ่ดฅๅ็ฑปๆธ
ๆฐ๏ผ็ปไธๆๅฐๅฏ้ฅ๏ผ
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
่ฆไฝฟ็จ OpenAI ๅ
ผๅฎน็ๆไพๅ๏ผ่ฎพ็ฝฎๅตๅ
ฅๆไพๅๅ key๏ผ
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
export RAGCODE_EMBEDDING_PROVIDER=openai
|
|
147
|
+
export OPENAI_API_KEY=your-api-key
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### CLI ๅฝไปค
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
ragcode init [directory] # ๅๅงๅ้
็ฝฎ๏ผไบคไบๅผๅๅฏผ๏ผ
|
|
154
|
+
ragcode index <repoRoot> # ็ดขๅผไธไธชไปๅบ
|
|
155
|
+
ragcode search <repoRoot> <query> # ๆ็ดขไปฃ็
|
|
156
|
+
ragcode status <repoRoot> # ๆฃๆฅ็ดขๅผ็ถๆ
|
|
157
|
+
ragcode context <repoRoot> <query> # ๆๅปบไธไธๆๅ
|
|
158
|
+
ragcode mcp # ๅฏๅจ MCP ๆๅก๏ผstdio๏ผ
|
|
159
|
+
ragcode setup-mcp # ไธบ Claude Desktop ๆณจๅ MCP
|
|
160
|
+
ragcode doctor [repoRoot] # ่ฟ่กๆถ่ฏๆญ
|
|
161
|
+
ragcode watch <repoRoot> # ๆไปถ็ๅฌๅฎๆค่ฟ็จ
|
|
162
|
+
ragcode dashboard # Web ๅฏ่งๆตๅ็ซฏ๏ผ็ซฏๅฃ 3000๏ผ
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
่ฟ่ก `ragcode --help` ๆ `ragcode <command> --help` ๆฅ็ๆดๅค็ป่ใ
|
|
166
|
+
|
|
167
|
+
### MCP ๆๅก้ๆ
|
|
168
|
+
|
|
169
|
+
RagCode ๅฏไฝไธบ MCP ๆๅก่ฟ่ก๏ผ่ฎฉ Claude ็ญๆบ่ฝไฝ็ดๆฅ่ฐ็จๅฎ็ๅทฅๅ
ทใๆๅฎขๆท็ซฏ่ชๅจๆณจๅ๏ผ
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
ragcode setup-mcp # Claude Desktop (~/.../claude_desktop_config.json)
|
|
173
|
+
ragcode setup-mcp --client claude-code # Claude Code (้กน็ฎ ./.mcp.json)
|
|
174
|
+
ragcode setup-mcp --client codex # Codex CLI (~/.codex/config.toml)
|
|
175
|
+
ragcode setup-mcp --client codex --print # ไป
ๆๅฐ้
็ฝฎ๏ผไธๅๆไปถ
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
ๆขๆ้
็ฝฎไผ่ขซๅๅฐๅๅนถ๏ผไฟ็ๅ
ถๅฎๆๅกๅๆ ๅ
ณๅญๆฎต๏ผๅนถๅจ่ฆ็ๅๅคไปฝๅๆไปถ๏ผใๅ `--force`
|
|
179
|
+
ๅฏ่ทณ่ฟๆ็คบ็ดๆฅ่ฆ็ๅทฒๆ็ `ragcode` ๆก็ฎ๏ผๅ `--include-secrets` ๅฏๅๅ
ฅ็ๅฎ API ๅฏ้ฅ่้่ฑๆๅ ไฝ็ฌฆใ
|
|
180
|
+
|
|
181
|
+
ๆๆๅจๆทปๅ ๅฐไฝ ็ MCP ๅฎขๆท็ซฏ้
็ฝฎ๏ผ
|
|
182
|
+
|
|
183
|
+
```json
|
|
184
|
+
{
|
|
185
|
+
"mcpServers": {
|
|
186
|
+
"ragcode": {
|
|
187
|
+
"command": "ragcode",
|
|
188
|
+
"args": ["mcp"],
|
|
189
|
+
"env": {
|
|
190
|
+
"RAGCODE_GRAPH_STORE": "sqlite",
|
|
191
|
+
"RAGCODE_SQLITE_PATH": ".ragcode/graph.sqlite",
|
|
192
|
+
"RAGCODE_SEMANTIC_STORE": "lancedb",
|
|
193
|
+
"RAGCODE_LANCEDB_URI": ".ragcode/lancedb",
|
|
194
|
+
"RAGCODE_EMBEDDING_PROVIDER": "deterministic"
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**ๅฏ็จ็ MCP ๅทฅๅ
ท๏ผๅ
ฑ 19 ไธช๏ผ๏ผ**
|
|
202
|
+
|
|
203
|
+
- *็ดขๅผ็ๅฝๅจๆ* โ `index_repo`ใ`refresh_index`ใ`index_status`ใ`record_file_events`ใ`watch_status`
|
|
204
|
+
- *ๆ็ดขไธไธไธๆ* โ `search_code`ใ`get_context`ใ`topology_map`ใ`expand_node`
|
|
205
|
+
- *็ฌฆๅทไธๆไปถ* โ `find_symbol`ใ`explain_file`ใ`find_owner`ใ`find_reuse_candidates`
|
|
206
|
+
- *ๅฝฑๅไธๆตๅ* โ `impact_analysis`ใ`explain_impact`ใ`related_tests`ใ`trace_flow`ใ`trace_request_flow`
|
|
207
|
+
- *่ฏๅฎก* โ `review_diff`
|
|
208
|
+
|
|
209
|
+
`watch_status` ๆฏๅช่ฏป็๏ผๅฎๆฅๅๆฏๅฆๆๆดป็็ watcher ๅจไฟๆ็ดขๅผๆฐ้ฒ๏ผไฝ็ปไธๅฏๅจ watcher๏ผๅฏๅจๅฑไบ `ragcode watch` ๆ OS ๆๅก็่่ดฃ๏ผใ
|
|
210
|
+
|
|
211
|
+
### Web ไปช่กจ็๏ผ่งๆตไธ่ฐ่ฏ๏ผ
|
|
212
|
+
|
|
213
|
+
ไปช่กจ็ๆฏ RagCode ็ๅฏ่งๆต้ขๆฟโโๅพๅฏ่งๅใๆ็ดข่ฐ่ฏใไธไธๆๅ
ๆฃ่งใ็ๅฌๅจ็ๆง๏ผไปฅๅไธไธชๅธฆ้ๅญๆฎตๆฅๆบๆ ๆณจๅๅฏ้ฅ่ฑๆ็่ฟ่กๆถ้
็ฝฎ่งๅพใ้
็ฝฎไธ่ฎพ็ฝฎไป็ถ็ๅจ็ป็ซฏไธญๅฎๆใ
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
ragcode dashboard # ๅ็ซฏ API๏ผ็ซฏๅฃ 3000๏ผ
|
|
217
|
+
cd web && npm run dev # Vue ๅ็ซฏ๏ผ็ซฏๅฃ 5173๏ผๅผๅๆจกๅผ๏ผ
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
่ฏฆ่ง [docs/DASHBOARD.md](docs/DASHBOARD.md) ไธ [web/README.md](web/README.md)ใ
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## ้กน็ฎ็ปๆ
|
|
225
|
+
|
|
226
|
+
```
|
|
227
|
+
ragcode/
|
|
228
|
+
โโโ src/
|
|
229
|
+
โ โโโ core/ # ่ง่ๅฅ็บฆไธ็ผๆ้จ้ข๏ผ็จณๅฎ่พน็๏ผ
|
|
230
|
+
โ โโโ indexing/ # ๆซๆใๅฟฝ็ฅ่งๅใๅๅธใๅๅใๅๆๅจใๆตๆฐด็บฟ
|
|
231
|
+
โ โโโ graph/ # ็ปๆๅไปฃ็ ๅพ๏ผ็ฌฆๅทใๆไปถใ่พนใๆฅๆพ
|
|
232
|
+
โ โโโ semantic/ # ๅตๅ
ฅ + ๅ้ๅญๅจ๏ผLanceDB / ๅ
ๅญ๏ผ
|
|
233
|
+
โ โโโ retrieval/ # ๆฅ่ฏข่งๅไธๆททๅ๏ผ็ฒพ็กฎ/ๅพ/ๅ
ณ้ฎ่ฏ/่ฏญไน๏ผ่ๅ
|
|
234
|
+
โ โโโ context/ # ๅจ Token/ๅญ็ฌฆ้ข็ฎๅ
ๆๅปบไธไธๆๅ
|
|
235
|
+
โ โโโ subgraph/ # ็ป้ช่ฏ็ไปฃ็ ๅญๅพ๏ผๅฝฑๅ / ๆต็จ / ่ฏๅฎก / ่ฐ่ฏ๏ผ
|
|
236
|
+
โ โโโ topology/ # ๆกๆถ + ๆฐๆฎๆตๆๆ่พน
|
|
237
|
+
โ โโโ reuse/ # ๅค็จ / ้ๅคๆฃๆต
|
|
238
|
+
โ โโโ lsp/ # LSP ่พ
ๅฉ็็ฌฆๅท่งฃๆ
|
|
239
|
+
โ โโโ watch/ # ็ๅฌๅฎๆค่ฟ็จใไบไปถๆฅๅฟใ่ๆไปถๅๅนถใ่ฐๅบฆๅจ
|
|
240
|
+
โ โโโ mcp/ # MCP ๅทฅๅ
ทๅฎไนไธๅค็ๅจ๏ผ่ฝป่้้
ๅฑ๏ผ
|
|
241
|
+
โ โโโ cli/ # ๅฝไปคๅ
ฅๅฃ๏ผcommander + ink ๅๅฏผ๏ผ
|
|
242
|
+
โ โโโ web/ # ไปช่กจ็ๅ็ซฏ๏ผexpress + ws๏ผ
|
|
243
|
+
โ โโโ config/ # ่ฟ่กๆถ้
็ฝฎ่งฃๆ
|
|
244
|
+
โ โโโ project/ # ้กน็ฎ่บซไปฝไธๅทฅไฝๅบ่ชๅจไฝ็จๅ
|
|
245
|
+
โ โโโ diagnostics/ # Doctor / ๅ็ๆฃๆฅ
|
|
246
|
+
โ โโโ types/ # ๅ
ฑไบซ็ฑปๅๅฃฐๆ
|
|
247
|
+
โ โโโ utils/ # ๅฐๅๅ
ฑไบซๅทฅๅ
ท๏ผ้้ขๅๆๆ่
๏ผ
|
|
248
|
+
โโโ tests/ # Vitest ๅๅฝๆต่ฏๅฅไปถ๏ผๅบ็กใๅพใๆฃ็ดขใ็ๅฌโฆโฆ๏ผ
|
|
249
|
+
โโโ docs/ # ๆถๆ็ฌ่ฎฐใๅฅ็บฆไธๅณ็ญ่ฎฐๅฝ
|
|
250
|
+
โโโ integrations/ # Codex/OMX ๆบ่ฝไฝๆ่ฝๆจกๆฟ๏ผragcode-context๏ผ
|
|
251
|
+
โโโ scripts/ # init-configใsetup-mcpใๅบๅๆต่ฏใ่ฏไผฐใๅฎก่ฎก
|
|
252
|
+
โโโ web/ # Vue ไปช่กจ็ๅ็ซฏ
|
|
253
|
+
โโโ benchmarks/ # ๅบๅๆต่ฏๅคนๅ
ทไธ็ปๆ
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## ๆ ธๅฟ็นๆง
|
|
259
|
+
|
|
260
|
+
- **ๆททๅๆฃ็ดข** โ ่ๅ็ฒพ็กฎใๅพใๅ
ณ้ฎ่ฏไธ่ฏญไนไฟกๅท๏ผๅๅบ็จๆๆจกๅผ็ๅ ๆไธๅพ่ท็ฆป้ๆใๆ็ปๅๆฐ้ๆญฃ็ๅ้ไผ่ขซ่ฟๆปคๆใ
|
|
261
|
+
- **ๆจกๅผๆ็ฅ็ไธไธๆๆๅ
** โ ไปๆฅ่ฏขไธญ่งฃๆๆฃ็ดขๆจกๅผ๏ผ`debug`ใ`feature`ใ`refactor`ใ`review` ๆ `explain`๏ผๆฏ็งๆจกๅผไผๅ
ๅ
ณๆณจไธๅ็ฑปๅ็่ฏๆฎใ
|
|
262
|
+
- **ไธไธๆๅ
ๅฅ็บฆ** โ `brief`ใ`freshness`ใ`ownerChain`ใ`topology`ใ่ฏๆฎ็ๆฎตใ`missingEvidence` ไปฅๅ `nextQueries`๏ผ้ๅธฆๆฅๆบๅผ็จไธ็็ฅ็ป่ฎกใ่ฟๅไธ็กฎๅฎๆง๏ผ่่ฟๅคธๅคงๅ
ถ่ฏใ
|
|
263
|
+
- **็ปๆๅไปฃ็ ๅพ** โ ็ฌฆๅทใๆไปถ๏ผไปฅๅ `contains` / `imports` / `exports` / `calls` ่พน๏ผ็ฑ SQLite + FTS ๆๅ
ๅญๅญๅจๆฏๆใ
|
|
264
|
+
- **ๆกๆถ + ๆฐๆฎๆตๆๆ** โ ๆ็็่ทฏ็ฑ/ORM ่ฏๆฎ๏ผNext.jsใExpressใFastifyใPrismaใDrizzle๏ผ๏ผไปฅ `calls_api`ใ`routes_to`ใ`reads_from`ใ`writes_to` ไปฅๅ่ฏทๆฑ่ด่ฝฝ `orm_dataflow` ่พน็ๅฝขๅผไบงๅบใ
|
|
265
|
+
- **ๅค่ฏญ่จๅๆ** โ ้่ฟ TS Compiler API ๅฏน TypeScript/JavaScript ๆไพๅฎๆด AST ๆฏๆ๏ผ้่ฟ tree-sitter ๅฏน PythonใGoใRustใJava ่ฟ่กๅๆ๏ผๅ
ถไปๆไปถ็ฑปๅๅๅ้ๅฐๆ่กๅๅใ
|
|
266
|
+
- **ๅข้ๆฐ้ฒๅบฆ** โ chokidar OS ็ๅฌ โ ๆไน
ๅไบไปถๆฅๅฟ โ ่ๆไปถๅๅนถ โ ๅๅฐๆน้้ๅปบ็ดขๅผใ้ๅฏๆถๅๆพๆฅๅฟ๏ผ็กฎไฟ่ๆไปถๅทฅไฝไธไธขๅคฑใ
|
|
267
|
+
- **็ฆป็บฟไผๅ
** โ ็กฎๅฎๆงๅตๅ
ฅๆ ้ API key๏ผไปปไฝๆถๅ้ฝ่ฝๆขๆ OpenAI ๅ
ผๅฎน็ๆไพๅ๏ผๆ ้้ๆๆถๆใ
|
|
268
|
+
- **MCP ๅ็** โ 19 ไธชๆบ่ฝไฝๅทฅๅ
ท่ฟ่กๅจ่ฝป่็ stdio ๆๅกไนไธ๏ผ็ดขๅผ็ๅฝๅจๆใๆ็ดข/ไธไธๆใๅฝฑๅ/ๆตๅใ่ฏๅฎก๏ผ๏ผๅคๅ ไธไธช Codex/OMX ๆ่ฝๆจกๆฟ๏ผๅผๅฏผๆบ่ฝไฝไผๅ
่ตฐ MCPใCLI ๅ
ๅบใ
|
|
269
|
+
- **Web ๅฏ่งๆตๆง** โ ๅพๅฏ่งๅใๆ็ดข่ฐ่ฏๅจใไธไธๆๅ
ๆฃ่งๅจใ็ๅฌๅจ็ๆง๏ผไปฅๅ่ฑๆ็่ฟ่กๆถ้
็ฝฎ่งๅพใ
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## ๅผๅๆต็จ
|
|
274
|
+
|
|
275
|
+
ๅ
้ๅนถๅๅงๅ๏ผ
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
git clone https://github.com/MarshallEriksen-Neura/ragcode.git
|
|
279
|
+
cd ragcode
|
|
280
|
+
npm install
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
ๅธธ็จไปปๅก๏ผnpm ๆฏ CI ไฝฟ็จ็ๆ ๅๅทฅๅ
ท้พ๏ผๆฌๅฐไนๅฏ็จ `bun`๏ผ๏ผ
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
npm run dev -- doctor # ้่ฟ tsx ไปๆบ็ ่ฟ่ก CLI
|
|
287
|
+
npm run check # TypeScript ไธฅๆ ผ็ฑปๅๆฃๆฅ๏ผไธไบงๅบๆไปถ๏ผ
|
|
288
|
+
npm test # ่ฟ่ก Vitest ๆต่ฏๅฅไปถ
|
|
289
|
+
npm run test:watcher # ไป
่ฟ่ก็ๅฌ็ธๅ
ณๆต่ฏ
|
|
290
|
+
npm run build # ้่ฟ tsconfig.build.json ็ผ่ฏๅฐ dist/
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**ๅๆฏ็ญ็ฅ๏ผ** `main` ๆฏๅไฟๆค็้ป่ฎคๅๆฏใๅจๅ่ฝๅๆฏไธๅทฅไฝ๏ผๅนถๅ `main` ๆไบค Pull Requestโโๅๅฟ็ดๆฅๆจ้ๅฐ `main`ใ
|
|
294
|
+
|
|
295
|
+
**CI**๏ผ[.github/workflows/ci.yml](.github/workflows/ci.yml)๏ผไผๅจๆฏๆฌกๆจ้ๅๅ `main` ๆไบค PR ๆถ๏ผๅจ Node 24 ไธๆ้กบๅบๆง่ก๏ผ`npm ci` โ `npm run check` โ `npm run build` โ `npm test` โ `npm pack --dry-run`ใๆๆๆญฅ้ชคๅฟ
้กป้่ฟๆ่ฝๅๅนถใๅๅธ็ฑ [.github/workflows/publish.yml](.github/workflows/publish.yml) ่ชๅจๅๅฎๆใ
|
|
296
|
+
|
|
297
|
+
ไฝฟ็จ็กฎๅฎๆงๅตๅ
ฅ่ฟ่ก็ฆป็บฟๅ็่ฟ่ก๏ผ
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
export RAGCODE_GRAPH_STORE=sqlite
|
|
301
|
+
export RAGCODE_SQLITE_PATH=.ragcode/graph.sqlite
|
|
302
|
+
export RAGCODE_SEMANTIC_STORE=lancedb
|
|
303
|
+
export RAGCODE_LANCEDB_URI=.ragcode/lancedb
|
|
304
|
+
export RAGCODE_EMBEDDING_PROVIDER=deterministic
|
|
305
|
+
|
|
306
|
+
npm run dev -- doctor . --query "context engine"
|
|
307
|
+
npm run dev -- index .
|
|
308
|
+
npm run dev -- search . "context engine"
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## ็ผ็ ่ง่
|
|
314
|
+
|
|
315
|
+
- **TypeScript ไธฅๆ ผๆจกๅผใ** ไปปไฝๆนๅจๅจ่ขซ่งไธบๅฎๆไนๅ๏ผ`npm run check`๏ผ`tsc --noEmit`๏ผๅฟ
้กป้ถ้่ฏฏ้่ฟใ
|
|
316
|
+
- **ๅ
จ็จ ESMใ** ๅ
ๆฏ `"type": "module"`๏ผไฝฟ็จ ES import/export ไปฅๅ `node:` ๅ็ผ็ๅ
็ฝฎๆจกๅใ
|
|
317
|
+
- **ๅฐ้ๅๅฑ่พน็ใ** ไพ่ต `src/core` ไธญ็ๅฅ็บฆ๏ผ่้ๅ
ทไฝๅญๅจใ`indexing` ไธๅพๆ็ฅ MCP๏ผ`mcp` ๅฟ
้กปไฟๆ่ฝป่ใไธๅซๆฃ็ดข้ป่พ๏ผ`watch` ๅชไพ่ต `ContextEngine` ๅฅ็บฆใ
|
|
318
|
+
- **ๅญๅจๅฏๆฟๆขใ** ไปปไฝ่งฆๅๅพๆ่ฏญไนๅญๅจ็ไปฃ็ ้ฝ่ฆ่ตฐ `GraphStore` / `SemanticStore` ๆฅๅฃ๏ผไปฅไพฟๆต่ฏๅๆชๆฅ็ๅ็ซฏ่ฝๅคๆฟๆขใ
|
|
319
|
+
- **็จณๅฎ็ ID ไธๅๅธใ** ๅๅๆฅๆ็กฎๅฎๆงๅ
ๅฎนๅๅธไธ็จณๅฎ IDโโไฟฎๆนๅๅๆๅๆๅจๆถ่ฆไฟๆ่ฟไธ็นใ
|
|
320
|
+
- **ๅจ่พน็ๅคๆ ก้ช่พๅ
ฅ**๏ผไฝฟ็จ `zod`๏ผๅฐคๅ
ถๆฏ MCP ๅทฅๅ
ท่พๅ
ฅใ
|
|
321
|
+
- **็ปไธๆๅฐๅฏ้ฅใ** ้
็ฝฎ่งๅพไธๆไพๅๆต่ฏไผๅฏน API key ่ฑๆ๏ผๆๆๆไปถ๏ผ`.env`ใๅฏ้ฅใๅญๆฎ๏ผไผไป็ดขๅผไธญ่ฟๆปคๆใ
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## ๆต่ฏ
|
|
326
|
+
|
|
327
|
+
ๆต่ฏไฝฟ็จ **Vitest**๏ผไฝไบ [tests/](tests/)๏ผ38+ ๅฅไปถ๏ผใๅฎไปฌ่ฆ็ๆดไธชๅบ็ก่ฎพๆฝ๏ผๆซๆไธๅข้็ดขๅผใSQLite ไธ LanceDB ๅญๅจใๆททๅๆฃ็ดขไธๅพ้ๆใไธไธๆๆๅ
ไธ้ชจๆถๅใๆๆ่งฃๆใ็ๅฌๅฎๆค่ฟ็จไธๆฅๅฟๅๆพใMCP ๆๅกๅทฅๅ
ท๏ผไปฅๅ onboarding/configure CLI ๅๅฏผใ
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
npm test # ๅฎๆดๅฅไปถ
|
|
331
|
+
npm run test:watcher # ไป
็ๅฌๅฎๆค่ฟ็จ + ็ถๆๆต่ฏ
|
|
332
|
+
npx vitest run tests/foundation.test.ts # ๅไธชๅฅไปถ
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
ๅฝๆปก่ถณไปฅไธๆกไปถๆถ๏ผๅบ็ก่ฎพๆฝ่ขซ่ฎคไธบๆฏ็จณๅบ็๏ผไปๅบๅฏ็กฎๅฎๆงๆซๆใๅๅๆฅๆ็จณๅฎ ID/ๅๅธใๅพไธ่ฏญไนๅญๅจๅฏๆฟๆขใCLI ไธ MCP ่ฐ็จๅไธไธชๅผๆใไธฅๆ ผ็ฑปๅๆฃๆฅ้่ฟ๏ผๅนถไธๆซๆ/็ดขๅผ/ๆ็ดข/ไธไธๆๆๅ
้ฝ่ขซๆต่ฏ่ฆ็ใไปปไฝ่กไธบๅๆด้ฝ่ฆๅๆญฅๅขๅ ๆๆดๆฐๆต่ฏ๏ผๅนถๅฐ็ผๅไธ่ฏๅฎกไฟๆไธบไธคไธช็ฌ็ซ็็ฏ่ใ
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
## ่ดก็ฎๆๅ
|
|
340
|
+
|
|
341
|
+
1. Fork ไปๅบ๏ผๅนถไป `main` ๅๅบไธไธชๅ่ฝๅๆฏใ
|
|
342
|
+
2. ่ฟ่กๆนๅจ๏ผไฟๆๅจ็ธๅ
ณๅฑ็่พน็ๅ
๏ผๅ่ง [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)๏ผใ
|
|
343
|
+
3. ไธบไปปไฝ่กไธบๅๆดๅจ [tests/](tests/) ไธญๅขๅ ๆๆดๆฐๆต่ฏใ
|
|
344
|
+
4. ๆจ้ๅๅจๆฌๅฐ่ฟ่กๅฎๆด็ๆฃๆฅๅ
ณๅก๏ผ
|
|
345
|
+
```bash
|
|
346
|
+
npm run check && npm test && npm run build
|
|
347
|
+
```
|
|
348
|
+
5. ๆจ้ไฝ ็ๅๆฏ๏ผๅนถๅ `main` ๆไบค Pull Request๏ผ้ไธ็ฎๆ็ๅๆด่ฏดๆไธๆต่ฏๆ
ๅตใ
|
|
349
|
+
|
|
350
|
+
ๅฏนไบๆบ่ฝไฝ่พ
ๅฉ่ดก็ฎ๏ผ[integrations/codex/skills/ragcode-context/](integrations/codex/skills/ragcode-context/) ไธญ็ Codex/OMX ๆ่ฝๆจกๆฟไผๅผๅฏผๆบ่ฝไฝไผๅ
ไฝฟ็จ RagCode ็ MCP ๅทฅๅ
ท๏ผๅนถๆไพ CLI ๅ
ๅบไธ็ผบๅคฑ็ดขๅผๆขๅคโโ่ฏฆ่ง [docs/CODEX_SKILL.md](docs/CODEX_SKILL.md)ใ
|
|
351
|
+
|
|
352
|
+
### ๆดๅคๆๆกฃ
|
|
353
|
+
|
|
354
|
+
- [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) โ ๅๅฑไธ่่ดฃ
|
|
355
|
+
- [docs/INDEX_SCHEMA.md](docs/INDEX_SCHEMA.md) โ ็ดขๅผ schema
|
|
356
|
+
- [docs/DASHBOARD.md](docs/DASHBOARD.md) โ Web ไปช่กจ็
|
|
357
|
+
- [docs/CODEX_SKILL.md](docs/CODEX_SKILL.md) โ Codex/OMX ๆบ่ฝไฝๆ่ฝ
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
## ่ฎธๅฏ่ฏ
|
|
362
|
+
|
|
363
|
+
ๅบไบ [MIT ่ฎธๅฏ่ฏ](./LICENSE) ๅๅธใCopyright (c) 2026 RagCode Teamใ
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text, useApp, useInput } from "ink";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { answerCurrentStep, cancelWizard, currentStep } from "./state.js";
|
|
5
|
+
// Pure rendering layer over the wizard state machine. All flow decisions live in state.ts;
|
|
6
|
+
// this component only translates keystrokes into answerCurrentStep/cancelWizard calls.
|
|
7
|
+
export function ConfigureApp({ initialState, onFinish }) {
|
|
8
|
+
const { exit } = useApp();
|
|
9
|
+
const [state, setState] = useState(initialState);
|
|
10
|
+
const step = currentStep(state);
|
|
11
|
+
const submit = (value) => {
|
|
12
|
+
const next = answerCurrentStep(state, value);
|
|
13
|
+
setState(next);
|
|
14
|
+
if (next.done) {
|
|
15
|
+
onFinish(next);
|
|
16
|
+
exit();
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const cancel = () => {
|
|
20
|
+
const next = cancelWizard(state);
|
|
21
|
+
setState(next);
|
|
22
|
+
onFinish(next);
|
|
23
|
+
exit();
|
|
24
|
+
};
|
|
25
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: state.mode === "first_run" ? "๐ง RagCode First-Run Setup" : "๐ RagCode Configure" }), _jsxs(Text, { dimColor: true, children: ["repo: ", state.repoRoot, " (Esc cancels)"] }), _jsx(AnsweredSummary, { state: state }), step ? _jsx(StepView, { step: step, onSubmit: submit, onCancel: cancel }, step.key) : null] }));
|
|
26
|
+
}
|
|
27
|
+
function AnsweredSummary({ state }) {
|
|
28
|
+
const answered = state.steps.filter((step) => state.answers[step.key] !== undefined && !step.skip?.(state.answers));
|
|
29
|
+
return (_jsx(Box, { flexDirection: "column", marginTop: 1, children: answered.map((step) => (_jsxs(Text, { dimColor: true, children: ["\u2713 ", step.title, ": ", step.secret ? (state.answers[step.key] ? "<set>" : "<unchanged>") : state.answers[step.key]] }, step.key))) }));
|
|
30
|
+
}
|
|
31
|
+
function StepView({ step, onSubmit, onCancel }) {
|
|
32
|
+
if (step.kind === "select")
|
|
33
|
+
return _jsx(SelectStep, { step: step, onSubmit: onSubmit, onCancel: onCancel });
|
|
34
|
+
if (step.kind === "confirm")
|
|
35
|
+
return _jsx(ConfirmStep, { step: step, onSubmit: onSubmit, onCancel: onCancel });
|
|
36
|
+
return _jsx(TextStep, { step: step, onSubmit: onSubmit, onCancel: onCancel });
|
|
37
|
+
}
|
|
38
|
+
function SelectStep({ step, onSubmit, onCancel }) {
|
|
39
|
+
const options = step.options ?? [];
|
|
40
|
+
const defaultIndex = Math.max(0, options.findIndex((option) => option.value === step.defaultValue));
|
|
41
|
+
const [cursor, setCursor] = useState(defaultIndex);
|
|
42
|
+
useInput((_input, key) => {
|
|
43
|
+
if (key.escape)
|
|
44
|
+
return onCancel();
|
|
45
|
+
if (key.upArrow)
|
|
46
|
+
setCursor((index) => (index - 1 + options.length) % options.length);
|
|
47
|
+
if (key.downArrow)
|
|
48
|
+
setCursor((index) => (index + 1) % options.length);
|
|
49
|
+
if (key.return)
|
|
50
|
+
onSubmit(options[cursor]?.value ?? step.defaultValue);
|
|
51
|
+
});
|
|
52
|
+
return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, children: step.title }), options.map((option, index) => (_jsxs(Text, { color: index === cursor ? "green" : undefined, children: [index === cursor ? "โฏ " : " ", option.label] }, option.value))), _jsx(Text, { dimColor: true, children: "\u2191/\u2193 to choose, Enter to confirm" })] }));
|
|
53
|
+
}
|
|
54
|
+
function ConfirmStep({ step, onSubmit, onCancel }) {
|
|
55
|
+
useInput((input, key) => {
|
|
56
|
+
if (key.escape)
|
|
57
|
+
return onCancel();
|
|
58
|
+
if (input.toLowerCase() === "y")
|
|
59
|
+
return onSubmit("yes");
|
|
60
|
+
if (input.toLowerCase() === "n")
|
|
61
|
+
return onSubmit("no");
|
|
62
|
+
if (key.return)
|
|
63
|
+
onSubmit(step.defaultValue);
|
|
64
|
+
});
|
|
65
|
+
return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, children: step.title }), _jsxs(Text, { dimColor: true, children: ["y/n, Enter = ", step.defaultValue] })] }));
|
|
66
|
+
}
|
|
67
|
+
function TextStep({ step, onSubmit, onCancel }) {
|
|
68
|
+
const [value, setValue] = useState("");
|
|
69
|
+
useInput((input, key) => {
|
|
70
|
+
if (key.escape)
|
|
71
|
+
return onCancel();
|
|
72
|
+
if (key.return)
|
|
73
|
+
return onSubmit(value);
|
|
74
|
+
if (key.backspace || key.delete)
|
|
75
|
+
return setValue((current) => current.slice(0, -1));
|
|
76
|
+
if (input && !key.ctrl && !key.meta)
|
|
77
|
+
setValue((current) => current + input);
|
|
78
|
+
});
|
|
79
|
+
const display = step.secret ? "*".repeat(value.length) : value;
|
|
80
|
+
return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, children: step.title }), _jsxs(Text, { children: ["> ", display, _jsx(Text, { inverse: true, children: " " })] }), step.defaultValue ? _jsxs(Text, { dimColor: true, children: ["Enter keeps: ", step.secret ? "<existing>" : step.defaultValue] }) : _jsx(Text, { dimColor: true, children: "Enter to skip" })] }));
|
|
81
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { render } from "ink";
|
|
4
|
+
import { createRuntimeComponentsForRepo, loadRuntimeConfig, redactRuntimeConfig } from "../../config/runtime-config.js";
|
|
5
|
+
import { RagCodeEngine } from "../../core/engine.js";
|
|
6
|
+
import { runEmbeddingTest } from "../../diagnostics/embedding-test.js";
|
|
7
|
+
import { setupMCP } from "../../../scripts/setup-mcp.js";
|
|
8
|
+
import { applyConfigureUpdates } from "../configure.js";
|
|
9
|
+
import { ConfigureApp } from "./app.js";
|
|
10
|
+
import { createWizardState, wizardResult } from "./state.js";
|
|
11
|
+
// Orchestrates the Ink wizard: render the UI, then execute the collected actions in PRD
|
|
12
|
+
// order (test embedding -> save -> index -> setup MCP -> summary). All config IO stays in
|
|
13
|
+
// runtime-config/configure; the Ink app only collects answers.
|
|
14
|
+
export async function runInkConfigure(options) {
|
|
15
|
+
const repoRoot = path.resolve(options.repoRoot);
|
|
16
|
+
const current = redactRuntimeConfig(loadRuntimeConfig({ cwd: repoRoot, overrides: { repoRoot } }));
|
|
17
|
+
let finalState;
|
|
18
|
+
const { waitUntilExit } = render(_jsx(ConfigureApp, { initialState: createWizardState(options.mode, repoRoot, current), onFinish: (state) => {
|
|
19
|
+
finalState = state;
|
|
20
|
+
} }));
|
|
21
|
+
await waitUntilExit();
|
|
22
|
+
const result = finalState ? wizardResult(finalState) : undefined;
|
|
23
|
+
if (!result) {
|
|
24
|
+
console.log("Configuration unchanged.");
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (result.actions.testEmbedding) {
|
|
28
|
+
// Test against the would-be config before persisting anything.
|
|
29
|
+
const test = await runEmbeddingTest({ cwd: repoRoot, overrides: { repoRoot, ...result.updates } });
|
|
30
|
+
if (test.ok) {
|
|
31
|
+
console.log(`๐งช Embedding test OK: provider=${test.provider}${test.model ? ` model=${test.model}` : ""} dimensions=${test.dimensions} latency=${test.latencyMs}ms`);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.log(`๐งช Embedding test FAILED (${test.failure?.kind}): ${test.failure?.message}`);
|
|
35
|
+
console.log(" Saving anyway keeps the config editable via `ragcode configure`; the offline deterministic provider always works.");
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (!result.actions.save) {
|
|
39
|
+
console.log("Configuration not saved.");
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const saved = await applyConfigureUpdates({ repoRoot, updates: result.updates });
|
|
43
|
+
console.log(`โ
Configuration saved to: ${saved.configPath}`);
|
|
44
|
+
if (result.actions.indexNow) {
|
|
45
|
+
console.log("๐ฆ Indexing repository...");
|
|
46
|
+
const components = createRuntimeComponentsForRepo({ cwd: repoRoot, overrides: { repoRoot } });
|
|
47
|
+
const engine = new RagCodeEngine({
|
|
48
|
+
cwd: repoRoot,
|
|
49
|
+
graphStore: components.graphStore,
|
|
50
|
+
semanticStore: components.semanticStore,
|
|
51
|
+
embeddingProvider: components.embeddingProvider
|
|
52
|
+
});
|
|
53
|
+
try {
|
|
54
|
+
const index = await engine.indexRepo(repoRoot);
|
|
55
|
+
console.log(`โ
Indexed ${index.files.length} files, ${index.chunks.length} chunks.`);
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
engine.close();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (result.actions.setupMcp) {
|
|
62
|
+
setupMCP({ cwd: repoRoot, env: process.env });
|
|
63
|
+
}
|
|
64
|
+
if (result.actions.installWatcherService) {
|
|
65
|
+
// Loaded lazily so the wizard doesn't pull in the service layer unless the user opts in.
|
|
66
|
+
const { installWatcherService } = await import("../../service/service-manager.js");
|
|
67
|
+
try {
|
|
68
|
+
const service = await installWatcherService(repoRoot);
|
|
69
|
+
console.log(service.ok ? `๐ ${service.message}` : `โ ๏ธ ${service.message}`);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
console.log(`โ ๏ธ Could not install the background watcher service: ${error instanceof Error ? error.message : String(error)}`);
|
|
73
|
+
console.log(" You can still keep the index fresh by running `ragcode watch .` manually.");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
console.log("\n๐ Summary / next steps:");
|
|
77
|
+
if (!result.actions.indexNow)
|
|
78
|
+
console.log(" ragcode index . # build the index");
|
|
79
|
+
if (!result.actions.setupMcp)
|
|
80
|
+
console.log(" ragcode setup-mcp # register the MCP server");
|
|
81
|
+
if (!result.actions.installWatcherService)
|
|
82
|
+
console.log(" ragcode service install . # keep the index fresh automatically");
|
|
83
|
+
console.log(" ragcode configure # adjust storage/embedding later");
|
|
84
|
+
console.log(" ragcode dashboard # observe graph/search/context/watch");
|
|
85
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { RedactedRuntimeConfig } from "../../config/runtime-config.js";
|
|
2
|
+
import type { ConfigureUpdates } from "../configure.js";
|
|
3
|
+
export type WizardMode = "configure" | "first_run";
|
|
4
|
+
export interface SelectOption {
|
|
5
|
+
value: string;
|
|
6
|
+
label: string;
|
|
7
|
+
}
|
|
8
|
+
export interface WizardStep {
|
|
9
|
+
key: string;
|
|
10
|
+
kind: "select" | "text" | "confirm";
|
|
11
|
+
title: string;
|
|
12
|
+
options?: SelectOption[];
|
|
13
|
+
defaultValue: string;
|
|
14
|
+
secret?: boolean;
|
|
15
|
+
skip?: (answers: WizardAnswers) => boolean;
|
|
16
|
+
}
|
|
17
|
+
export type WizardAnswers = Record<string, string>;
|
|
18
|
+
export interface WizardState {
|
|
19
|
+
mode: WizardMode;
|
|
20
|
+
repoRoot: string;
|
|
21
|
+
steps: WizardStep[];
|
|
22
|
+
stepIndex: number;
|
|
23
|
+
answers: WizardAnswers;
|
|
24
|
+
done: boolean;
|
|
25
|
+
cancelled: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface WizardActions {
|
|
28
|
+
testEmbedding: boolean;
|
|
29
|
+
save: boolean;
|
|
30
|
+
indexNow: boolean;
|
|
31
|
+
setupMcp: boolean;
|
|
32
|
+
installWatcherService: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface WizardResult {
|
|
35
|
+
updates: ConfigureUpdates;
|
|
36
|
+
actions: WizardActions;
|
|
37
|
+
}
|
|
38
|
+
export declare function createWizardState(mode: WizardMode, repoRoot: string, current: RedactedRuntimeConfig): WizardState;
|
|
39
|
+
export declare function currentStep(state: WizardState): WizardStep | undefined;
|
|
40
|
+
export declare function answerCurrentStep(state: WizardState, rawValue: string): WizardState;
|
|
41
|
+
export declare function cancelWizard(state: WizardState): WizardState;
|
|
42
|
+
export declare function wizardResult(state: WizardState): WizardResult | undefined;
|