@abhinav2203/coderag 0.1.1
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 +201 -0
- package/README.md +196 -0
- package/dist/adapters/codeflow-core.d.ts +10 -0
- package/dist/adapters/codeflow-core.js +212 -0
- package/dist/adapters/codeflow-core.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.js +179 -0
- package/dist/cli.js.map +1 -0
- package/dist/errors/index.d.ts +17 -0
- package/dist/errors/index.js +35 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/documents.d.ts +16 -0
- package/dist/indexer/documents.js +148 -0
- package/dist/indexer/documents.js.map +1 -0
- package/dist/indexer/embedder.d.ts +7 -0
- package/dist/indexer/embedder.js +12 -0
- package/dist/indexer/embedder.js.map +1 -0
- package/dist/indexer/git-hook.d.ts +2 -0
- package/dist/indexer/git-hook.js +53 -0
- package/dist/indexer/git-hook.js.map +1 -0
- package/dist/indexer/indexer.d.ts +22 -0
- package/dist/indexer/indexer.js +108 -0
- package/dist/indexer/indexer.js.map +1 -0
- package/dist/llm/context-builder.d.ts +7 -0
- package/dist/llm/context-builder.js +93 -0
- package/dist/llm/context-builder.js.map +1 -0
- package/dist/llm/prompt.d.ts +3 -0
- package/dist/llm/prompt.js +80 -0
- package/dist/llm/prompt.js.map +1 -0
- package/dist/llm/transports.d.ts +23 -0
- package/dist/llm/transports.js +271 -0
- package/dist/llm/transports.js.map +1 -0
- package/dist/mcp/server.d.ts +10 -0
- package/dist/mcp/server.js +70 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/retrieval/page-index.d.ts +3 -0
- package/dist/retrieval/page-index.js +26 -0
- package/dist/retrieval/page-index.js.map +1 -0
- package/dist/retrieval/search.d.ts +20 -0
- package/dist/retrieval/search.js +164 -0
- package/dist/retrieval/search.js.map +1 -0
- package/dist/retrieval/traversal.d.ts +6 -0
- package/dist/retrieval/traversal.js +29 -0
- package/dist/retrieval/traversal.js.map +1 -0
- package/dist/service/coderag.d.ts +58 -0
- package/dist/service/coderag.js +208 -0
- package/dist/service/coderag.js.map +1 -0
- package/dist/service/config.d.ts +13 -0
- package/dist/service/config.js +130 -0
- package/dist/service/config.js.map +1 -0
- package/dist/service/http-metrics.d.ts +8 -0
- package/dist/service/http-metrics.js +36 -0
- package/dist/service/http-metrics.js.map +1 -0
- package/dist/service/http.d.ts +11 -0
- package/dist/service/http.js +262 -0
- package/dist/service/http.js.map +1 -0
- package/dist/store/file-cache.d.ts +6 -0
- package/dist/store/file-cache.js +24 -0
- package/dist/store/file-cache.js.map +1 -0
- package/dist/store/index-lock.d.ts +14 -0
- package/dist/store/index-lock.js +112 -0
- package/dist/store/index-lock.js.map +1 -0
- package/dist/store/manifest-store.d.ts +16 -0
- package/dist/store/manifest-store.js +49 -0
- package/dist/store/manifest-store.js.map +1 -0
- package/dist/store/vector-store.d.ts +18 -0
- package/dist/store/vector-store.js +140 -0
- package/dist/store/vector-store.js.map +1 -0
- package/dist/types.d.ts +251 -0
- package/dist/types.js +63 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/filesystem.d.ts +8 -0
- package/dist/utils/filesystem.js +38 -0
- package/dist/utils/filesystem.js.map +1 -0
- package/dist/utils/logger.d.ts +2 -0
- package/dist/utils/logger.js +19 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/text.d.ts +8 -0
- package/dist/utils/text.js +151 -0
- package/dist/utils/text.js.map +1 -0
- package/package.json +74 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import process from "node:process";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { installPostCommitHook } from "./indexer/git-hook.js";
|
|
5
|
+
import { createCodeRag, loadCodeRagConfig } from "./index.js";
|
|
6
|
+
import { serveStdioMcpServer } from "./mcp/server.js";
|
|
7
|
+
import { serveHttpServer } from "./service/http.js";
|
|
8
|
+
const JSON_FLAG = "--json";
|
|
9
|
+
const FLAGS_WITH_VALUES = new Set(["--config", "--depth"]);
|
|
10
|
+
const printUsage = () => {
|
|
11
|
+
console.log(`Usage:
|
|
12
|
+
coderag init [--config path] [--json]
|
|
13
|
+
coderag index [--config path] [--json]
|
|
14
|
+
coderag reindex [--config path] [--full] [--json]
|
|
15
|
+
coderag query "question" [--config path] [--depth 2] [--json]
|
|
16
|
+
coderag serve-mcp [--config path]
|
|
17
|
+
coderag serve-http [--config path]
|
|
18
|
+
coderag doctor [--config path] [--json]`);
|
|
19
|
+
};
|
|
20
|
+
const readFlagValue = (args, flag) => {
|
|
21
|
+
const index = args.indexOf(flag);
|
|
22
|
+
return index === -1 ? undefined : args[index + 1];
|
|
23
|
+
};
|
|
24
|
+
const hasFlag = (args, flag) => args.includes(flag);
|
|
25
|
+
const readPositionals = (args) => {
|
|
26
|
+
const positionals = [];
|
|
27
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
28
|
+
const argument = args[index];
|
|
29
|
+
if (!argument) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (argument.startsWith("--")) {
|
|
33
|
+
if (FLAGS_WITH_VALUES.has(argument)) {
|
|
34
|
+
index += 1;
|
|
35
|
+
}
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
positionals.push(argument);
|
|
39
|
+
}
|
|
40
|
+
return positionals;
|
|
41
|
+
};
|
|
42
|
+
const printJson = (value) => {
|
|
43
|
+
console.log(JSON.stringify(value, null, 2));
|
|
44
|
+
};
|
|
45
|
+
const printIndexSummary = (label, indexedNodeCount, storageRoot) => {
|
|
46
|
+
console.log(`${label}: indexed ${indexedNodeCount} nodes into ${storageRoot}`);
|
|
47
|
+
};
|
|
48
|
+
const printDoctorStatus = (status) => {
|
|
49
|
+
console.log(`indexed: ${status.indexed ? "yes" : "no"}`);
|
|
50
|
+
console.log(`indexedNodeCount: ${status.indexedNodeCount}`);
|
|
51
|
+
console.log(`generatedAt: ${status.generatedAt ?? "never"}`);
|
|
52
|
+
console.log(`repoPath: ${status.repoPath}`);
|
|
53
|
+
console.log(`storageRoot: ${status.storageRoot}`);
|
|
54
|
+
console.log(`provider: ${status.provider ?? "unknown"}`);
|
|
55
|
+
console.log(`llmEnabled: ${status.llmEnabled ? "yes" : "no"}`);
|
|
56
|
+
};
|
|
57
|
+
const waitForTermination = async (server) => {
|
|
58
|
+
await new Promise((resolve, reject) => {
|
|
59
|
+
const shutdown = () => {
|
|
60
|
+
server.close((error) => {
|
|
61
|
+
if (error) {
|
|
62
|
+
reject(error);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
resolve();
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
process.once("SIGINT", shutdown);
|
|
69
|
+
process.once("SIGTERM", shutdown);
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
export const runCli = async (argv = process.argv) => {
|
|
73
|
+
const [, , command, ...args] = argv;
|
|
74
|
+
if (!command) {
|
|
75
|
+
printUsage();
|
|
76
|
+
process.exitCode = 1;
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const configPath = readFlagValue(args, "--config");
|
|
80
|
+
const config = await loadCodeRagConfig(process.cwd(), configPath);
|
|
81
|
+
const coderag = createCodeRag(config);
|
|
82
|
+
try {
|
|
83
|
+
if (command === "init") {
|
|
84
|
+
const summary = await coderag.index();
|
|
85
|
+
await installPostCommitHook(config.repoPath, configPath ?? null, config.logger);
|
|
86
|
+
if (hasFlag(args, JSON_FLAG)) {
|
|
87
|
+
printJson({ ok: true, indexedNodeCount: summary.indexedNodeCount, storageRoot: config.storageRoot });
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
printIndexSummary("initialized", summary.indexedNodeCount, config.storageRoot);
|
|
91
|
+
}
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (command === "index") {
|
|
95
|
+
const summary = await coderag.index();
|
|
96
|
+
if (hasFlag(args, JSON_FLAG)) {
|
|
97
|
+
printJson(summary);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
printIndexSummary("indexed", summary.indexedNodeCount, config.storageRoot);
|
|
101
|
+
}
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (command === "reindex") {
|
|
105
|
+
const summary = await coderag.reindex({ full: hasFlag(args, "--full") });
|
|
106
|
+
if (hasFlag(args, JSON_FLAG)) {
|
|
107
|
+
printJson(summary);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
printIndexSummary(hasFlag(args, "--full") ? "full reindex completed" : "reindex completed", summary.indexedNodeCount, config.storageRoot);
|
|
111
|
+
}
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (command === "query") {
|
|
115
|
+
const question = readPositionals(args)[0];
|
|
116
|
+
if (!question) {
|
|
117
|
+
throw new Error("query requires a question argument.");
|
|
118
|
+
}
|
|
119
|
+
const depthValue = readFlagValue(args, "--depth");
|
|
120
|
+
const depth = depthValue ? Number(depthValue) : undefined;
|
|
121
|
+
const result = await coderag.query(question, {
|
|
122
|
+
depth,
|
|
123
|
+
onToken: hasFlag(args, JSON_FLAG)
|
|
124
|
+
? undefined
|
|
125
|
+
: (token) => {
|
|
126
|
+
process.stdout.write(token);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
if (hasFlag(args, JSON_FLAG)) {
|
|
130
|
+
printJson(result);
|
|
131
|
+
}
|
|
132
|
+
else if (result.answerMode === "context-only") {
|
|
133
|
+
console.log(result.answer);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
process.stdout.write("\n");
|
|
137
|
+
}
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
if (command === "serve-mcp") {
|
|
141
|
+
await serveStdioMcpServer(coderag);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
if (command === "serve-http") {
|
|
145
|
+
const server = await serveHttpServer(coderag, config);
|
|
146
|
+
await waitForTermination(server);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (command === "doctor") {
|
|
150
|
+
const status = await coderag.status();
|
|
151
|
+
if (hasFlag(args, JSON_FLAG)) {
|
|
152
|
+
printJson(status);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
printDoctorStatus(status);
|
|
156
|
+
}
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
printUsage();
|
|
160
|
+
process.exitCode = 1;
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
await coderag.close();
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
export const exitWithCliError = (error) => {
|
|
167
|
+
const message = error instanceof Error ? error.stack ?? error.message : String(error);
|
|
168
|
+
console.error(message);
|
|
169
|
+
process.exit(1);
|
|
170
|
+
};
|
|
171
|
+
const runAsMain = process.argv[1] ? fileURLToPath(import.meta.url) === process.argv[1] : false;
|
|
172
|
+
export const maybeRunCli = () => {
|
|
173
|
+
if (!runAsMain) {
|
|
174
|
+
return undefined;
|
|
175
|
+
}
|
|
176
|
+
return runCli().catch(exitWithCliError);
|
|
177
|
+
};
|
|
178
|
+
void maybeRunCli();
|
|
179
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare class CodeRagError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
readonly details?: Record<string, unknown>;
|
|
4
|
+
constructor(message: string, code?: string, details?: Record<string, unknown>, options?: ErrorOptions);
|
|
5
|
+
}
|
|
6
|
+
export declare class ConfigurationError extends CodeRagError {
|
|
7
|
+
constructor(message: string, details?: Record<string, unknown>, options?: ErrorOptions);
|
|
8
|
+
}
|
|
9
|
+
export declare class IndexingError extends CodeRagError {
|
|
10
|
+
constructor(message: string, details?: Record<string, unknown>, options?: ErrorOptions);
|
|
11
|
+
}
|
|
12
|
+
export declare class TransportError extends CodeRagError {
|
|
13
|
+
constructor(message: string, details?: Record<string, unknown>, options?: ErrorOptions);
|
|
14
|
+
}
|
|
15
|
+
export declare class NotFoundError extends CodeRagError {
|
|
16
|
+
constructor(message: string, details?: Record<string, unknown>, options?: ErrorOptions);
|
|
17
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export class CodeRagError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
details;
|
|
4
|
+
constructor(message, code = "CODERAG_ERROR", details, options) {
|
|
5
|
+
super(message, options);
|
|
6
|
+
this.name = "CodeRagError";
|
|
7
|
+
this.code = code;
|
|
8
|
+
this.details = details;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class ConfigurationError extends CodeRagError {
|
|
12
|
+
constructor(message, details, options) {
|
|
13
|
+
super(message, "CONFIGURATION_ERROR", details, options);
|
|
14
|
+
this.name = "ConfigurationError";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class IndexingError extends CodeRagError {
|
|
18
|
+
constructor(message, details, options) {
|
|
19
|
+
super(message, "INDEXING_ERROR", details, options);
|
|
20
|
+
this.name = "IndexingError";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class TransportError extends CodeRagError {
|
|
24
|
+
constructor(message, details, options) {
|
|
25
|
+
super(message, "TRANSPORT_ERROR", details, options);
|
|
26
|
+
this.name = "TransportError";
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export class NotFoundError extends CodeRagError {
|
|
30
|
+
constructor(message, details, options) {
|
|
31
|
+
super(message, "NOT_FOUND", details, options);
|
|
32
|
+
this.name = "NotFoundError";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,IAAI,CAAS;IACb,OAAO,CAA2B;IAE3C,YAAY,OAAe,EAAE,IAAI,GAAG,eAAe,EAAE,OAAiC,EAAE,OAAsB;QAC5G,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,YAAY;IAClD,YAAY,OAAe,EAAE,OAAiC,EAAE,OAAsB;QACpF,KAAK,CAAC,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,YAAY;IAC7C,YAAY,OAAe,EAAE,OAAiC,EAAE,OAAsB;QACpF,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,YAAY;IAC9C,YAAY,OAAe,EAAE,OAAiC,EAAE,OAAsB;QACpF,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,YAAY;IAC7C,YAAY,OAAe,EAAE,OAAiC,EAAE,OAAsB;QACpF,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { CodeRagConfig } from "./types.js";
|
|
2
|
+
import { CodeRag } from "./service/coderag.js";
|
|
3
|
+
export { CodeRag } from "./service/coderag.js";
|
|
4
|
+
export { CodeflowCoreGraphProvider, buildGraphSnapshot } from "./adapters/codeflow-core.js";
|
|
5
|
+
export { loadCodeRagConfig, loadSerializableConfig, resolveRuntimeConfig } from "./service/config.js";
|
|
6
|
+
export { createHttpServer, serveHttpServer } from "./service/http.js";
|
|
7
|
+
export { LocalHashEmbeddingProvider } from "./indexer/embedder.js";
|
|
8
|
+
export { LanceVectorStore } from "./store/vector-store.js";
|
|
9
|
+
export { createMcpServer, serveStdioMcpServer } from "./mcp/server.js";
|
|
10
|
+
export * from "./errors/index.js";
|
|
11
|
+
export * from "./types.js";
|
|
12
|
+
/**
|
|
13
|
+
* Creates a CodeRag service instance for the supplied runtime config.
|
|
14
|
+
*/
|
|
15
|
+
export declare const createCodeRag: (config: CodeRagConfig) => CodeRag;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CodeRag } from "./service/coderag.js";
|
|
2
|
+
export { CodeRag } from "./service/coderag.js";
|
|
3
|
+
export { CodeflowCoreGraphProvider, buildGraphSnapshot } from "./adapters/codeflow-core.js";
|
|
4
|
+
export { loadCodeRagConfig, loadSerializableConfig, resolveRuntimeConfig } from "./service/config.js";
|
|
5
|
+
export { createHttpServer, serveHttpServer } from "./service/http.js";
|
|
6
|
+
export { LocalHashEmbeddingProvider } from "./indexer/embedder.js";
|
|
7
|
+
export { LanceVectorStore } from "./store/vector-store.js";
|
|
8
|
+
export { createMcpServer, serveStdioMcpServer } from "./mcp/server.js";
|
|
9
|
+
export * from "./errors/index.js";
|
|
10
|
+
export * from "./types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Creates a CodeRag service instance for the supplied runtime config.
|
|
13
|
+
*/
|
|
14
|
+
export const createCodeRag = (config) => new CodeRag(config);
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACtG,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACvE,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAE3B;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAqB,EAAW,EAAE,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { BlueprintNode } from "@abhinav2203/codeflow-core/schema";
|
|
2
|
+
import type { EmbeddingProvider, GraphSnapshot, IndexManifest, IndexedNodeDocument, SourceSpan } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Builds the natural-language search document stored for a blueprint node.
|
|
5
|
+
*/
|
|
6
|
+
export declare const buildNodeDocument: (node: BlueprintNode, span: SourceSpan | undefined, snapshot: GraphSnapshot) => string;
|
|
7
|
+
/**
|
|
8
|
+
* Embeds graph-node documents so they can be searched and reranked later.
|
|
9
|
+
* If docsPath is provided, reads markdown files from that directory (named by node ID)
|
|
10
|
+
* and uses their content as the embedding text instead of generating thin markdown.
|
|
11
|
+
*/
|
|
12
|
+
export declare const buildIndexedDocuments: (snapshot: GraphSnapshot, embeddingProvider: EmbeddingProvider, docsPath?: string) => Promise<Record<string, IndexedNodeDocument>>;
|
|
13
|
+
/**
|
|
14
|
+
* Builds the manifest used for incremental reindex decisions.
|
|
15
|
+
*/
|
|
16
|
+
export declare const buildIndexManifest: (repoPath: string, snapshot: GraphSnapshot, documents: Record<string, IndexedNodeDocument>) => Promise<IndexManifest>;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { hashContent, hashFile } from "../utils/filesystem.js";
|
|
4
|
+
/**
|
|
5
|
+
* Reads the markdown document for a node from the external docsPath.
|
|
6
|
+
* Files are matched by node ID: `${docsPath}/${nodeId}.md`
|
|
7
|
+
*/
|
|
8
|
+
const readExternalNodeDoc = async (nodeId, docsPath) => {
|
|
9
|
+
const docFilePath = path.join(docsPath, `${nodeId}.md`);
|
|
10
|
+
try {
|
|
11
|
+
return await fs.readFile(docFilePath, "utf8");
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const EMPTY_LIST = "- None";
|
|
18
|
+
const formatList = (items) => (items.length > 0 ? items.map((item) => `- ${item}`).join("\n") : EMPTY_LIST);
|
|
19
|
+
const formatFieldList = (fields) => {
|
|
20
|
+
if (fields.length === 0) {
|
|
21
|
+
return EMPTY_LIST;
|
|
22
|
+
}
|
|
23
|
+
return fields
|
|
24
|
+
.map((field) => `- ${field.name}: ${field.type}${field.description ? ` - ${field.description}` : ""}`)
|
|
25
|
+
.join("\n");
|
|
26
|
+
};
|
|
27
|
+
const findRelatedNode = (currentNodeId, edge, graphNodes) => {
|
|
28
|
+
const relatedNodeId = edge.from === currentNodeId ? edge.to : edge.from;
|
|
29
|
+
return graphNodes.find((node) => node.id === relatedNodeId);
|
|
30
|
+
};
|
|
31
|
+
const summarizeEdges = (currentNodeId, edges, graphNodes) => edges.map((edge) => {
|
|
32
|
+
const relatedNode = findRelatedNode(currentNodeId, edge, graphNodes);
|
|
33
|
+
const relatedLabel = relatedNode?.path ? `${relatedNode.name} (${relatedNode.path})` : relatedNode?.name ?? edge.to;
|
|
34
|
+
return `${edge.kind}: ${relatedLabel}`;
|
|
35
|
+
});
|
|
36
|
+
const formatSourceRefs = (node) => formatList(node.sourceRefs.map((sourceRef) => `${sourceRef.kind}${sourceRef.symbol ? `:${sourceRef.symbol}` : ""}${sourceRef.path ? ` @ ${sourceRef.path}` : ""}`));
|
|
37
|
+
const buildHeader = (node, span) => [
|
|
38
|
+
`# ${node.name}`,
|
|
39
|
+
"",
|
|
40
|
+
`Kind: ${node.kind}`,
|
|
41
|
+
`Path: ${node.path ?? "unknown"}`,
|
|
42
|
+
`File Name: ${node.path ? path.basename(node.path) : "unknown"}`,
|
|
43
|
+
`Lines: ${span ? `${span.startLine}-${span.endLine}` : "unknown"}`,
|
|
44
|
+
`Signature: ${node.signature ?? "N/A"}`
|
|
45
|
+
];
|
|
46
|
+
const readSourceText = async (repoPath, span) => {
|
|
47
|
+
const fileContent = await fs.readFile(path.join(repoPath, span.filePath), "utf8");
|
|
48
|
+
return fileContent.split(/\r?\n/).slice(span.startLine - 1, span.endLine).join("\n");
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Builds the natural-language search document stored for a blueprint node.
|
|
52
|
+
*/
|
|
53
|
+
export const buildNodeDocument = (node, span, snapshot) => {
|
|
54
|
+
const outgoingEdges = snapshot.graph.edges.filter((edge) => edge.from === node.id);
|
|
55
|
+
const incomingEdges = snapshot.graph.edges.filter((edge) => edge.to === node.id);
|
|
56
|
+
return [
|
|
57
|
+
...buildHeader(node, span),
|
|
58
|
+
"",
|
|
59
|
+
"Summary:",
|
|
60
|
+
node.summary,
|
|
61
|
+
"",
|
|
62
|
+
"Responsibilities:",
|
|
63
|
+
formatList(node.contract.responsibilities),
|
|
64
|
+
"",
|
|
65
|
+
"Inputs:",
|
|
66
|
+
formatFieldList(node.contract.inputs),
|
|
67
|
+
"",
|
|
68
|
+
"Outputs:",
|
|
69
|
+
formatFieldList(node.contract.outputs),
|
|
70
|
+
"",
|
|
71
|
+
"Declared Dependencies:",
|
|
72
|
+
formatList(node.contract.dependencies),
|
|
73
|
+
"",
|
|
74
|
+
"Source References:",
|
|
75
|
+
formatSourceRefs(node),
|
|
76
|
+
"",
|
|
77
|
+
"Calls:",
|
|
78
|
+
formatList(summarizeEdges(node.id, outgoingEdges, snapshot.graph.nodes)),
|
|
79
|
+
"",
|
|
80
|
+
"Called By:",
|
|
81
|
+
formatList(summarizeEdges(node.id, incomingEdges, snapshot.graph.nodes))
|
|
82
|
+
].join("\n");
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Embeds graph-node documents so they can be searched and reranked later.
|
|
86
|
+
* If docsPath is provided, reads markdown files from that directory (named by node ID)
|
|
87
|
+
* and uses their content as the embedding text instead of generating thin markdown.
|
|
88
|
+
*/
|
|
89
|
+
export const buildIndexedDocuments = async (snapshot, embeddingProvider, docsPath) => {
|
|
90
|
+
const documents = {};
|
|
91
|
+
for (const node of snapshot.graph.nodes) {
|
|
92
|
+
const span = snapshot.sourceSpans[node.id];
|
|
93
|
+
if (!node.path || !span) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
const doc = buildNodeDocument(node, span, snapshot);
|
|
97
|
+
const sourceText = await readSourceText(snapshot.repoPath, span).catch(() => "");
|
|
98
|
+
let embeddingText;
|
|
99
|
+
if (docsPath) {
|
|
100
|
+
const externalDoc = await readExternalNodeDoc(node.id, docsPath);
|
|
101
|
+
embeddingText = externalDoc ?? [doc, sourceText].filter(Boolean).join("\n\n");
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
embeddingText = [doc, sourceText].filter(Boolean).join("\n\n");
|
|
105
|
+
}
|
|
106
|
+
documents[node.id] = {
|
|
107
|
+
nodeId: node.id,
|
|
108
|
+
name: node.name,
|
|
109
|
+
kind: node.kind,
|
|
110
|
+
filePath: node.path,
|
|
111
|
+
summary: node.summary,
|
|
112
|
+
signature: node.signature ?? "",
|
|
113
|
+
doc,
|
|
114
|
+
sourceText,
|
|
115
|
+
vector: await embeddingProvider.embed(embeddingText),
|
|
116
|
+
startLine: span.startLine,
|
|
117
|
+
endLine: span.endLine
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
return documents;
|
|
121
|
+
};
|
|
122
|
+
const hashIndexedFile = async (repoPath, relativePath) => [
|
|
123
|
+
relativePath,
|
|
124
|
+
await hashFile(path.join(repoPath, relativePath))
|
|
125
|
+
];
|
|
126
|
+
/**
|
|
127
|
+
* Builds the manifest used for incremental reindex decisions.
|
|
128
|
+
*/
|
|
129
|
+
export const buildIndexManifest = async (repoPath, snapshot, documents) => {
|
|
130
|
+
const uniquePaths = [...new Set(Object.values(documents).map((document) => document.filePath))];
|
|
131
|
+
const fileHashes = Object.fromEntries(await Promise.all(uniquePaths.map((relativePath) => hashIndexedFile(repoPath, relativePath))));
|
|
132
|
+
return {
|
|
133
|
+
generatedAt: new Date().toISOString(),
|
|
134
|
+
repoPath: snapshot.repoPath,
|
|
135
|
+
provider: snapshot.provider,
|
|
136
|
+
nodes: Object.fromEntries(Object.values(documents).map((document) => [
|
|
137
|
+
document.nodeId,
|
|
138
|
+
{
|
|
139
|
+
nodeId: document.nodeId,
|
|
140
|
+
filePath: document.filePath,
|
|
141
|
+
docHash: hashContent(document.doc),
|
|
142
|
+
fileHash: fileHashes[document.filePath]
|
|
143
|
+
}
|
|
144
|
+
])),
|
|
145
|
+
fileHashes
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
//# sourceMappingURL=documents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/indexer/documents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { EmbeddingProvider } from "../types.js";
|
|
2
|
+
export declare class LocalHashEmbeddingProvider implements EmbeddingProvider {
|
|
3
|
+
readonly name = "local-hash";
|
|
4
|
+
readonly dimensions: number;
|
|
5
|
+
constructor(dimensions?: number);
|
|
6
|
+
embed(text: string): Promise<number[]>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { embedTextDeterministically } from "../utils/text.js";
|
|
2
|
+
export class LocalHashEmbeddingProvider {
|
|
3
|
+
name = "local-hash";
|
|
4
|
+
dimensions;
|
|
5
|
+
constructor(dimensions = 256) {
|
|
6
|
+
this.dimensions = dimensions;
|
|
7
|
+
}
|
|
8
|
+
async embed(text) {
|
|
9
|
+
return embedTextDeterministically(text, this.dimensions);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=embedder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedder.js","sourceRoot":"","sources":["../../src/indexer/embedder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,OAAO,0BAA0B;IAC5B,IAAI,GAAG,YAAY,CAAC;IACpB,UAAU,CAAS;IAE5B,YAAY,UAAU,GAAG,GAAG;QAC1B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,OAAO,0BAA0B,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC;CACF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { ensureDir } from "../utils/filesystem.js";
|
|
4
|
+
const HOOK_MARKER = "# Added by CodeRag";
|
|
5
|
+
const resolveGitDir = async (repoPath) => {
|
|
6
|
+
const dotGitPath = path.join(repoPath, ".git");
|
|
7
|
+
const stats = await fs.stat(dotGitPath).catch(() => null);
|
|
8
|
+
if (!stats) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
if (stats.isDirectory()) {
|
|
12
|
+
return dotGitPath;
|
|
13
|
+
}
|
|
14
|
+
const content = await fs.readFile(dotGitPath, "utf8");
|
|
15
|
+
const match = content.match(/gitdir:\s*(.+)\s*/i);
|
|
16
|
+
if (!match?.[1]) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
return path.resolve(repoPath, match[1]);
|
|
20
|
+
};
|
|
21
|
+
export const installPostCommitHook = async (repoPath, configPath, logger) => {
|
|
22
|
+
const gitDir = await resolveGitDir(repoPath);
|
|
23
|
+
if (!gitDir) {
|
|
24
|
+
logger?.warn("Skipped git hook installation because no Git directory was found.", {
|
|
25
|
+
repoPath
|
|
26
|
+
});
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const hooksDir = path.join(gitDir, "hooks");
|
|
30
|
+
const hookPath = path.join(hooksDir, "post-commit");
|
|
31
|
+
const backupHookPath = path.join(hooksDir, "post-commit.coderag.previous");
|
|
32
|
+
await ensureDir(hooksDir);
|
|
33
|
+
const existingHook = await fs.readFile(hookPath, "utf8").catch(() => "");
|
|
34
|
+
if (existingHook.includes(HOOK_MARKER)) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (existingHook.trim()) {
|
|
38
|
+
await fs.writeFile(backupHookPath, existingHook, "utf8");
|
|
39
|
+
}
|
|
40
|
+
const configArgument = configPath ? ` --config "${configPath}"` : "";
|
|
41
|
+
const script = `#!/bin/sh
|
|
42
|
+
${HOOK_MARKER}
|
|
43
|
+
set -e
|
|
44
|
+
if [ -f "${backupHookPath}" ]; then
|
|
45
|
+
sh "${backupHookPath}"
|
|
46
|
+
fi
|
|
47
|
+
if command -v npx >/dev/null 2>&1; then
|
|
48
|
+
npx --no-install coderag reindex${configArgument} >/dev/null 2>&1 || true
|
|
49
|
+
fi
|
|
50
|
+
`;
|
|
51
|
+
await fs.writeFile(hookPath, script, { mode: 0o755 });
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=git-hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-hook.js","sourceRoot":"","sources":["../../src/indexer/git-hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAEzC,MAAM,aAAa,GAAG,KAAK,EAAE,QAAgB,EAA0B,EAAE;IACvE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QACxB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACxC,QAAgB,EAChB,UAAyB,EACzB,MAAe,EACA,EAAE;IACjB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,EAAE,IAAI,CAAC,mEAAmE,EAAE;YAChF,QAAQ;SACT,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACpD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,8BAA8B,CAAC,CAAC;IAC3E,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IAE1B,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACzE,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,OAAO;IACT,CAAC;IAED,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;QACxB,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,cAAc,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,MAAM,MAAM,GAAG;EACf,WAAW;;WAEF,cAAc;QACjB,cAAc;;;oCAGc,cAAc;;CAEjD,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACxD,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CodeRagConfig, GraphSnapshot, IndexManifest, IndexSummary, IndexedNodeDocument } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Indexes the repository graph and persists the resulting search documents.
|
|
4
|
+
*/
|
|
5
|
+
export declare class RepoIndexer {
|
|
6
|
+
private readonly config;
|
|
7
|
+
private readonly manifestStore;
|
|
8
|
+
private readonly indexLock;
|
|
9
|
+
constructor(config: CodeRagConfig);
|
|
10
|
+
loadState(): Promise<{
|
|
11
|
+
manifest: IndexManifest | null;
|
|
12
|
+
snapshot: GraphSnapshot | null;
|
|
13
|
+
documents: Record<string, IndexedNodeDocument>;
|
|
14
|
+
}>;
|
|
15
|
+
waitForUnlockedState(): Promise<{
|
|
16
|
+
waited: boolean;
|
|
17
|
+
manifest: IndexManifest | null;
|
|
18
|
+
snapshot: GraphSnapshot | null;
|
|
19
|
+
documents: Record<string, IndexedNodeDocument>;
|
|
20
|
+
}>;
|
|
21
|
+
index(forceFull?: boolean, docsPath?: string): Promise<IndexSummary>;
|
|
22
|
+
}
|