indexer-cli 0.2.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/README.md +156 -0
- package/bin/indexer-cli.js +97 -0
- package/dist/_temp_test.d.ts +1 -0
- package/dist/_temp_test.js +4 -0
- package/dist/_temp_test.js.map +1 -0
- package/dist/chunking/adaptive.d.ts +15 -0
- package/dist/chunking/adaptive.js +43 -0
- package/dist/chunking/adaptive.js.map +1 -0
- package/dist/chunking/function.d.ts +6 -0
- package/dist/chunking/function.js +96 -0
- package/dist/chunking/function.js.map +1 -0
- package/dist/chunking/index.d.ts +5 -0
- package/dist/chunking/index.js +22 -0
- package/dist/chunking/index.js.map +1 -0
- package/dist/chunking/module.d.ts +6 -0
- package/dist/chunking/module.js +33 -0
- package/dist/chunking/module.js.map +1 -0
- package/dist/chunking/single.d.ts +4 -0
- package/dist/chunking/single.js +19 -0
- package/dist/chunking/single.js.map +1 -0
- package/dist/chunking/types.d.ts +17 -0
- package/dist/chunking/types.js +3 -0
- package/dist/chunking/types.js.map +1 -0
- package/dist/cli/commands/architecture.d.ts +2 -0
- package/dist/cli/commands/architecture.js +162 -0
- package/dist/cli/commands/architecture.js.map +1 -0
- package/dist/cli/commands/context.d.ts +2 -0
- package/dist/cli/commands/context.js +241 -0
- package/dist/cli/commands/context.js.map +1 -0
- package/dist/cli/commands/deps.d.ts +2 -0
- package/dist/cli/commands/deps.js +129 -0
- package/dist/cli/commands/deps.js.map +1 -0
- package/dist/cli/commands/enrich.d.ts +2 -0
- package/dist/cli/commands/ensure-indexed.d.ts +4 -0
- package/dist/cli/commands/ensure-indexed.js +168 -0
- package/dist/cli/commands/ensure-indexed.js.map +1 -0
- package/dist/cli/commands/explain.d.ts +2 -0
- package/dist/cli/commands/explain.js +165 -0
- package/dist/cli/commands/explain.js.map +1 -0
- package/dist/cli/commands/index.d.ts +2 -0
- package/dist/cli/commands/index.js +271 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.js +132 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/search.d.ts +2 -0
- package/dist/cli/commands/search.js +206 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +2 -0
- package/dist/cli/commands/setup.js +425 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/skill-template.d.ts +6 -0
- package/dist/cli/commands/skill-template.js +72 -0
- package/dist/cli/commands/skill-template.js.map +1 -0
- package/dist/cli/commands/structure.d.ts +2 -0
- package/dist/cli/commands/structure.js +243 -0
- package/dist/cli/commands/structure.js.map +1 -0
- package/dist/cli/commands/uninstall.d.ts +2 -0
- package/dist/cli/commands/uninstall.js +138 -0
- package/dist/cli/commands/uninstall.js.map +1 -0
- package/dist/cli/entry.d.ts +1 -0
- package/dist/cli/entry.js +55 -0
- package/dist/cli/entry.js.map +1 -0
- package/dist/cli/help-text.d.ts +2 -0
- package/dist/cli/help-text.js +9 -0
- package/dist/cli/help-text.js.map +1 -0
- package/dist/cli/version.d.ts +1 -0
- package/dist/cli/version.js +9 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/core/config.d.ts +21 -0
- package/dist/core/config.js +77 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/logger.d.ts +19 -0
- package/dist/core/logger.js +116 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/types.d.ts +194 -0
- package/dist/core/types.js +5 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/update-check.d.ts +1 -0
- package/dist/core/update-check.js +61 -0
- package/dist/core/update-check.js.map +1 -0
- package/dist/embedding/ollama.d.ts +29 -0
- package/dist/embedding/ollama.js +264 -0
- package/dist/embedding/ollama.js.map +1 -0
- package/dist/engine/architecture.d.ts +55 -0
- package/dist/engine/architecture.js +359 -0
- package/dist/engine/architecture.js.map +1 -0
- package/dist/engine/dependency-resolver.d.ts +4 -0
- package/dist/engine/dependency-resolver.js +69 -0
- package/dist/engine/dependency-resolver.js.map +1 -0
- package/dist/engine/git.d.ts +11 -0
- package/dist/engine/git.js +246 -0
- package/dist/engine/git.js.map +1 -0
- package/dist/engine/indexer.d.ts +86 -0
- package/dist/engine/indexer.js +933 -0
- package/dist/engine/indexer.js.map +1 -0
- package/dist/engine/scanner.d.ts +1 -0
- package/dist/engine/scanner.js +42 -0
- package/dist/engine/scanner.js.map +1 -0
- package/dist/engine/searcher.d.ts +26 -0
- package/dist/engine/searcher.js +70 -0
- package/dist/engine/searcher.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/languages/csharp.d.ts +25 -0
- package/dist/languages/csharp.js +311 -0
- package/dist/languages/csharp.js.map +1 -0
- package/dist/languages/gdscript.d.ts +25 -0
- package/dist/languages/gdscript.js +382 -0
- package/dist/languages/gdscript.js.map +1 -0
- package/dist/languages/plugin.d.ts +73 -0
- package/dist/languages/plugin.js +35 -0
- package/dist/languages/plugin.js.map +1 -0
- package/dist/languages/python.d.ts +24 -0
- package/dist/languages/python.js +292 -0
- package/dist/languages/python.js.map +1 -0
- package/dist/languages/ruby.d.ts +25 -0
- package/dist/languages/ruby.js +328 -0
- package/dist/languages/ruby.js.map +1 -0
- package/dist/languages/typescript.d.ts +21 -0
- package/dist/languages/typescript.js +439 -0
- package/dist/languages/typescript.js.map +1 -0
- package/dist/storage/sqlite.d.ts +51 -0
- package/dist/storage/sqlite.js +726 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/storage/vectors.d.ts +39 -0
- package/dist/storage/vectors.js +450 -0
- package/dist/storage/vectors.js.map +1 -0
- package/dist/utils/gitignore.d.ts +4 -0
- package/dist/utils/gitignore.js +85 -0
- package/dist/utils/gitignore.js.map +1 -0
- package/dist/utils/hash.d.ts +1 -0
- package/dist/utils/hash.js +12 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/token-estimator.d.ts +3 -0
- package/dist/utils/token-estimator.js +13 -0
- package/dist/utils/token-estimator.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SystemLogger = void 0;
|
|
7
|
+
exports.setLogLevel = setLogLevel;
|
|
8
|
+
exports.getLogLevel = getLogLevel;
|
|
9
|
+
exports.initLogger = initLogger;
|
|
10
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
11
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
12
|
+
const LOG_LEVEL_PRIORITY = {
|
|
13
|
+
error: 0,
|
|
14
|
+
warn: 1,
|
|
15
|
+
info: 2,
|
|
16
|
+
debug: 3,
|
|
17
|
+
};
|
|
18
|
+
const VALID_LEVELS = new Set(["error", "warn", "info", "debug"]);
|
|
19
|
+
const MAX_LOG_LINES = 100;
|
|
20
|
+
let currentLogLevel = "error";
|
|
21
|
+
let logFilePath = null;
|
|
22
|
+
function setLogLevel(level) {
|
|
23
|
+
currentLogLevel = level;
|
|
24
|
+
}
|
|
25
|
+
function getLogLevel() {
|
|
26
|
+
return currentLogLevel;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Initialize the logger with a project data directory.
|
|
30
|
+
* Reads logLevel from <dataDir>/config.json if present,
|
|
31
|
+
* and sets the log file to <dataDir>/log.txt.
|
|
32
|
+
* Safe to call before the directory exists — falls back to console.
|
|
33
|
+
*/
|
|
34
|
+
function initLogger(dataDir) {
|
|
35
|
+
const configPath = node_path_1.default.join(dataDir, "config.json");
|
|
36
|
+
try {
|
|
37
|
+
if (node_fs_1.default.existsSync(configPath)) {
|
|
38
|
+
const raw = node_fs_1.default.readFileSync(configPath, "utf-8");
|
|
39
|
+
const cfg = JSON.parse(raw);
|
|
40
|
+
if (typeof cfg.logLevel === "string" && VALID_LEVELS.has(cfg.logLevel)) {
|
|
41
|
+
currentLogLevel = cfg.logLevel;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// config unreadable — keep default level
|
|
47
|
+
}
|
|
48
|
+
logFilePath = node_path_1.default.join(dataDir, "log.txt");
|
|
49
|
+
}
|
|
50
|
+
function rotateIfNeeded() {
|
|
51
|
+
if (!logFilePath)
|
|
52
|
+
return;
|
|
53
|
+
try {
|
|
54
|
+
if (!node_fs_1.default.existsSync(logFilePath))
|
|
55
|
+
return;
|
|
56
|
+
const contents = node_fs_1.default.readFileSync(logFilePath, "utf-8");
|
|
57
|
+
const lines = contents.split("\n");
|
|
58
|
+
const nonEmpty = lines[lines.length - 1] === "" ? lines.length - 1 : lines.length;
|
|
59
|
+
if (nonEmpty > MAX_LOG_LINES) {
|
|
60
|
+
const trimmed = lines.slice(nonEmpty - MAX_LOG_LINES).join("\n");
|
|
61
|
+
node_fs_1.default.writeFileSync(logFilePath, trimmed.endsWith("\n") ? trimmed : trimmed + "\n");
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// rotation failed — non-fatal
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function writeLine(line) {
|
|
69
|
+
if (!logFilePath) {
|
|
70
|
+
// not initialized — fall back to console
|
|
71
|
+
console.log(line);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
const dir = node_path_1.default.dirname(logFilePath);
|
|
76
|
+
if (!node_fs_1.default.existsSync(dir)) {
|
|
77
|
+
console.log(line);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
node_fs_1.default.appendFileSync(logFilePath, line + "\n");
|
|
81
|
+
rotateIfNeeded();
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
console.log(line);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const shouldLog = (level) => LOG_LEVEL_PRIORITY[level] <= LOG_LEVEL_PRIORITY[currentLogLevel];
|
|
88
|
+
class SystemLogger {
|
|
89
|
+
serviceName;
|
|
90
|
+
constructor(serviceName) {
|
|
91
|
+
this.serviceName = serviceName;
|
|
92
|
+
}
|
|
93
|
+
sendLog(level, message, details) {
|
|
94
|
+
if (!shouldLog(level)) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const text = typeof message === "string" ? message : String(message);
|
|
98
|
+
const timestamp = new Date().toISOString();
|
|
99
|
+
const detailsStr = details ? ` ${JSON.stringify(details)}` : "";
|
|
100
|
+
writeLine(`[${timestamp}] [${this.serviceName}] [${level.toUpperCase()}] ${text}${detailsStr}`);
|
|
101
|
+
}
|
|
102
|
+
info(message, details) {
|
|
103
|
+
this.sendLog("info", message, details);
|
|
104
|
+
}
|
|
105
|
+
warn(message, details) {
|
|
106
|
+
this.sendLog("warn", message, details);
|
|
107
|
+
}
|
|
108
|
+
error(message, details) {
|
|
109
|
+
this.sendLog("error", message, details);
|
|
110
|
+
}
|
|
111
|
+
debug(message, details) {
|
|
112
|
+
this.sendLog("debug", message, details);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.SystemLogger = SystemLogger;
|
|
116
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
export type ProjectId = string;
|
|
2
|
+
export declare const DEFAULT_PROJECT_ID: ProjectId;
|
|
3
|
+
export type SnapshotId = string;
|
|
4
|
+
export type ChunkId = string;
|
|
5
|
+
export type SymbolId = string;
|
|
6
|
+
export type DependencyId = string;
|
|
7
|
+
export type SnapshotStatus = "pending" | "indexing" | "completed" | "failed";
|
|
8
|
+
export interface Snapshot {
|
|
9
|
+
id: SnapshotId;
|
|
10
|
+
projectId: ProjectId;
|
|
11
|
+
status: SnapshotStatus;
|
|
12
|
+
createdAt: number;
|
|
13
|
+
meta: SnapshotMeta;
|
|
14
|
+
processedFiles?: number;
|
|
15
|
+
totalFiles?: number;
|
|
16
|
+
error?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface SnapshotMeta {
|
|
19
|
+
headCommit?: string;
|
|
20
|
+
isDirty?: boolean;
|
|
21
|
+
indexedAt: number;
|
|
22
|
+
changedFiles?: string[];
|
|
23
|
+
[key: string]: unknown;
|
|
24
|
+
}
|
|
25
|
+
export interface FileRecord {
|
|
26
|
+
snapshotId: SnapshotId;
|
|
27
|
+
path: string;
|
|
28
|
+
sha256: string;
|
|
29
|
+
mtimeMs: number;
|
|
30
|
+
size: number;
|
|
31
|
+
languageId: string;
|
|
32
|
+
}
|
|
33
|
+
export interface ChunkRecord {
|
|
34
|
+
snapshotId: SnapshotId;
|
|
35
|
+
chunkId: ChunkId;
|
|
36
|
+
filePath: string;
|
|
37
|
+
startLine: number;
|
|
38
|
+
endLine: number;
|
|
39
|
+
contentHash: string;
|
|
40
|
+
tokenEstimate: number;
|
|
41
|
+
chunkType?: "full_file" | "imports" | "preamble" | "declaration" | "module_section" | "impl" | "types";
|
|
42
|
+
primarySymbol?: string;
|
|
43
|
+
hasOverlap?: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface SymbolRecord {
|
|
46
|
+
snapshotId: SnapshotId;
|
|
47
|
+
id: SymbolId;
|
|
48
|
+
filePath: string;
|
|
49
|
+
kind: string;
|
|
50
|
+
name: string;
|
|
51
|
+
containerName?: string;
|
|
52
|
+
exported: boolean;
|
|
53
|
+
range: Range;
|
|
54
|
+
signature?: string;
|
|
55
|
+
docComment?: string;
|
|
56
|
+
metadata?: Record<string, unknown>;
|
|
57
|
+
}
|
|
58
|
+
export interface Range {
|
|
59
|
+
start: {
|
|
60
|
+
line: number;
|
|
61
|
+
character: number;
|
|
62
|
+
};
|
|
63
|
+
end: {
|
|
64
|
+
line: number;
|
|
65
|
+
character: number;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
export interface DependencyRecord {
|
|
69
|
+
snapshotId: SnapshotId;
|
|
70
|
+
id: DependencyId;
|
|
71
|
+
fromPath: string;
|
|
72
|
+
toSpecifier: string;
|
|
73
|
+
toPath?: string;
|
|
74
|
+
kind: "import" | "require" | "dynamic_import";
|
|
75
|
+
dependencyType?: "internal" | "external" | "builtin" | "unresolved";
|
|
76
|
+
}
|
|
77
|
+
export interface ArtifactRecord {
|
|
78
|
+
projectId: ProjectId;
|
|
79
|
+
snapshotId: SnapshotId;
|
|
80
|
+
artifactType: string;
|
|
81
|
+
scope: string;
|
|
82
|
+
dataJson: string;
|
|
83
|
+
updatedAt: number;
|
|
84
|
+
}
|
|
85
|
+
export interface FileMetricsRecord {
|
|
86
|
+
snapshotId: SnapshotId;
|
|
87
|
+
filePath: string;
|
|
88
|
+
metrics: {
|
|
89
|
+
complexity: number;
|
|
90
|
+
maintainability: number;
|
|
91
|
+
churn: number;
|
|
92
|
+
testCoverage?: number;
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
export interface VectorRecord {
|
|
96
|
+
projectId: ProjectId;
|
|
97
|
+
chunkId: ChunkId;
|
|
98
|
+
snapshotId: SnapshotId;
|
|
99
|
+
filePath: string;
|
|
100
|
+
startLine: number;
|
|
101
|
+
endLine: number;
|
|
102
|
+
embedding: number[];
|
|
103
|
+
contentHash: string;
|
|
104
|
+
chunkType?: string;
|
|
105
|
+
primarySymbol?: string;
|
|
106
|
+
}
|
|
107
|
+
export interface VectorSearchFilters {
|
|
108
|
+
projectId: ProjectId;
|
|
109
|
+
snapshotId?: SnapshotId;
|
|
110
|
+
filePath?: string;
|
|
111
|
+
pathPrefix?: string;
|
|
112
|
+
chunkTypes?: string[];
|
|
113
|
+
}
|
|
114
|
+
export interface VectorSearchResult {
|
|
115
|
+
chunkId: ChunkId;
|
|
116
|
+
snapshotId: SnapshotId;
|
|
117
|
+
filePath: string;
|
|
118
|
+
startLine: number;
|
|
119
|
+
endLine: number;
|
|
120
|
+
contentHash: string;
|
|
121
|
+
score: number;
|
|
122
|
+
distance?: number;
|
|
123
|
+
chunkType?: string;
|
|
124
|
+
primarySymbol?: string;
|
|
125
|
+
}
|
|
126
|
+
export interface EmbeddingProvider {
|
|
127
|
+
readonly id: string;
|
|
128
|
+
initialize(): Promise<void>;
|
|
129
|
+
close(): Promise<void>;
|
|
130
|
+
getDimension(): number;
|
|
131
|
+
embed(texts: string[]): Promise<number[][]>;
|
|
132
|
+
}
|
|
133
|
+
export interface MetadataStore {
|
|
134
|
+
initialize(): Promise<void>;
|
|
135
|
+
close(): Promise<void>;
|
|
136
|
+
transaction<T>(callback: () => Promise<T>): Promise<T>;
|
|
137
|
+
createSnapshot(projectId: ProjectId, meta: SnapshotMeta): Promise<Snapshot>;
|
|
138
|
+
getSnapshot(id: SnapshotId): Promise<Snapshot | null>;
|
|
139
|
+
getLatestSnapshot(projectId: ProjectId): Promise<Snapshot | null>;
|
|
140
|
+
getLatestCompletedSnapshot(projectId: ProjectId): Promise<Snapshot | null>;
|
|
141
|
+
listSnapshots(projectId: ProjectId, options?: {
|
|
142
|
+
limit?: number;
|
|
143
|
+
offset?: number;
|
|
144
|
+
}): Promise<Snapshot[]>;
|
|
145
|
+
updateSnapshotStatus(id: SnapshotId, status: SnapshotStatus, error?: string): Promise<void>;
|
|
146
|
+
updateSnapshotProgress(id: SnapshotId, processedFiles: number, totalFiles: number): Promise<void>;
|
|
147
|
+
upsertFile(projectId: ProjectId, file: FileRecord): Promise<void>;
|
|
148
|
+
listFiles(projectId: ProjectId, snapshotId: SnapshotId, options?: {
|
|
149
|
+
pathPrefix?: string;
|
|
150
|
+
}): Promise<FileRecord[]>;
|
|
151
|
+
getFile(projectId: ProjectId, snapshotId: SnapshotId, path: string): Promise<FileRecord | null>;
|
|
152
|
+
replaceChunks(projectId: ProjectId, snapshotId: SnapshotId, filePath: string, chunks: Omit<ChunkRecord, "snapshotId" | "filePath">[]): Promise<void>;
|
|
153
|
+
listChunks(projectId: ProjectId, snapshotId: SnapshotId, filePath?: string): Promise<ChunkRecord[]>;
|
|
154
|
+
replaceSymbols(projectId: ProjectId, snapshotId: SnapshotId, filePath: string, symbols: Omit<SymbolRecord, "snapshotId" | "filePath">[]): Promise<void>;
|
|
155
|
+
listSymbols(projectId: ProjectId, snapshotId: SnapshotId, filePath?: string): Promise<SymbolRecord[]>;
|
|
156
|
+
searchSymbols(projectId: ProjectId, snapshotId: SnapshotId, namePattern: string): Promise<SymbolRecord[]>;
|
|
157
|
+
replaceDependencies(projectId: ProjectId, snapshotId: SnapshotId, filePath: string, dependencies: Omit<DependencyRecord, "snapshotId" | "fromPath">[]): Promise<void>;
|
|
158
|
+
listDependencies(projectId: ProjectId, snapshotId: SnapshotId, filePath?: string): Promise<DependencyRecord[]>;
|
|
159
|
+
getDependents(projectId: ProjectId, snapshotId: SnapshotId, targetPath: string): Promise<DependencyRecord[]>;
|
|
160
|
+
upsertFileMetrics(projectId: ProjectId, metrics: FileMetricsRecord): Promise<void>;
|
|
161
|
+
getFileMetrics(projectId: ProjectId, snapshotId: SnapshotId, filePath: string): Promise<FileMetricsRecord | null>;
|
|
162
|
+
listFileMetrics(projectId: ProjectId, snapshotId: SnapshotId): Promise<FileMetricsRecord[]>;
|
|
163
|
+
upsertArtifact(projectId: ProjectId, artifact: Omit<ArtifactRecord, "updatedAt">): Promise<void>;
|
|
164
|
+
getArtifact(projectId: ProjectId, snapshotId: SnapshotId, artifactType: string, scope: string): Promise<ArtifactRecord | null>;
|
|
165
|
+
listArtifacts(projectId: ProjectId, snapshotId: SnapshotId, artifactType?: string): Promise<ArtifactRecord[]>;
|
|
166
|
+
copyUnchangedFileData(projectId: ProjectId, fromSnapshotId: SnapshotId, toSnapshotId: SnapshotId, unchangedPaths: string[]): Promise<void>;
|
|
167
|
+
clearProjectMetadata(id: ProjectId, keepSnapshotId?: SnapshotId, options?: {
|
|
168
|
+
preserveActiveIndexing?: boolean;
|
|
169
|
+
}): Promise<void>;
|
|
170
|
+
}
|
|
171
|
+
export interface VectorStore {
|
|
172
|
+
initialize(): Promise<void>;
|
|
173
|
+
close(): Promise<void>;
|
|
174
|
+
upsert(vectors: VectorRecord[]): Promise<void>;
|
|
175
|
+
search(queryEmbedding: number[], topK: number, filters: VectorSearchFilters): Promise<VectorSearchResult[]>;
|
|
176
|
+
countVectors(filters: VectorSearchFilters): Promise<number>;
|
|
177
|
+
deleteBySnapshot(projectId: ProjectId, snapshotId: SnapshotId): Promise<void>;
|
|
178
|
+
copyVectors(projectId: ProjectId, fromSnapshotId: SnapshotId, toSnapshotId: SnapshotId, excludeFilePaths: string[]): Promise<void>;
|
|
179
|
+
deleteByProject(projectId: ProjectId): Promise<void>;
|
|
180
|
+
}
|
|
181
|
+
export interface GitDiff {
|
|
182
|
+
added: string[];
|
|
183
|
+
modified: string[];
|
|
184
|
+
deleted: string[];
|
|
185
|
+
}
|
|
186
|
+
export interface GitOperations {
|
|
187
|
+
getHeadCommit(repoRoot: string): Promise<string | null>;
|
|
188
|
+
isDirty(repoRoot: string): Promise<boolean>;
|
|
189
|
+
getChangedFiles(repoRoot: string, sinceCommit: string): Promise<GitDiff>;
|
|
190
|
+
getWorkingTreeChanges(repoRoot: string): Promise<GitDiff>;
|
|
191
|
+
getChurnByFile(repoRoot: string, options?: {
|
|
192
|
+
sinceDays?: number;
|
|
193
|
+
}): Promise<Record<string, number>>;
|
|
194
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":";;;AACa,QAAA,kBAAkB,GAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function checkForUpdates(): Promise<void>;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkForUpdates = checkForUpdates;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
const node_os_1 = require("node:os");
|
|
7
|
+
const version_js_1 = require("../cli/version.js");
|
|
8
|
+
const CACHE_FILE = (0, node_path_1.join)((0, node_os_1.homedir)(), ".indexer-cli", ".update-check.json");
|
|
9
|
+
const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
10
|
+
async function fetchLatestVersion() {
|
|
11
|
+
const response = await fetch("https://registry.npmjs.org/indexer-cli/latest");
|
|
12
|
+
const data = (await response.json());
|
|
13
|
+
return data.version;
|
|
14
|
+
}
|
|
15
|
+
function readCache() {
|
|
16
|
+
if (!(0, node_fs_1.existsSync)(CACHE_FILE))
|
|
17
|
+
return null;
|
|
18
|
+
try {
|
|
19
|
+
return JSON.parse((0, node_fs_1.readFileSync)(CACHE_FILE, "utf-8"));
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function writeCache(cache) {
|
|
26
|
+
const dir = (0, node_path_1.join)((0, node_os_1.homedir)(), ".indexer-cli");
|
|
27
|
+
if (!(0, node_fs_1.existsSync)(dir)) {
|
|
28
|
+
(0, node_fs_1.mkdirSync)(dir, { recursive: true });
|
|
29
|
+
}
|
|
30
|
+
(0, node_fs_1.writeFileSync)(CACHE_FILE, JSON.stringify(cache));
|
|
31
|
+
}
|
|
32
|
+
function isNewerVersion(current, latest) {
|
|
33
|
+
const c = current.split(".").map(Number);
|
|
34
|
+
const l = latest.split(".").map(Number);
|
|
35
|
+
return l[0] > c[0] || l[1] > c[1] || l[2] > c[2];
|
|
36
|
+
}
|
|
37
|
+
function showUpdateNotification(current, latest) {
|
|
38
|
+
console.error(`\n\u001b[33m\u26A0 Update available: ${current} \u2192 ${latest}\u001b[0m`);
|
|
39
|
+
console.error(` Run: npm update -g indexer-cli\n`);
|
|
40
|
+
}
|
|
41
|
+
async function checkForUpdates() {
|
|
42
|
+
const cache = readCache();
|
|
43
|
+
const now = Date.now();
|
|
44
|
+
if (cache && now - cache.lastChecked < CHECK_INTERVAL_MS) {
|
|
45
|
+
if (isNewerVersion(version_js_1.VERSION, cache.latestVersion)) {
|
|
46
|
+
showUpdateNotification(version_js_1.VERSION, cache.latestVersion);
|
|
47
|
+
}
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const latest = await fetchLatestVersion();
|
|
52
|
+
writeCache({ lastChecked: now, latestVersion: latest });
|
|
53
|
+
if (isNewerVersion(version_js_1.VERSION, latest)) {
|
|
54
|
+
showUpdateNotification(version_js_1.VERSION, latest);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Network error — silent fail, not critical
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=update-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/core/update-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { EmbeddingProvider } from "../core/types.js";
|
|
2
|
+
export declare class OllamaEmbeddingProvider implements EmbeddingProvider {
|
|
3
|
+
readonly id = "ollama";
|
|
4
|
+
readonly dimension = 768;
|
|
5
|
+
private baseUrl;
|
|
6
|
+
private model;
|
|
7
|
+
private batchSize;
|
|
8
|
+
private concurrency;
|
|
9
|
+
private numCtx;
|
|
10
|
+
private reconnectInFlight;
|
|
11
|
+
private readonly requestTimeoutMs;
|
|
12
|
+
constructor(baseUrl: string, model?: string, batchSize?: number, concurrency?: number, numCtx?: number);
|
|
13
|
+
initialize(): Promise<void>;
|
|
14
|
+
close(): Promise<void>;
|
|
15
|
+
getDimension(): number;
|
|
16
|
+
embed(texts: string[]): Promise<number[][]>;
|
|
17
|
+
private createBatches;
|
|
18
|
+
private embedBatch;
|
|
19
|
+
private isConnectionError;
|
|
20
|
+
private isNotFoundError;
|
|
21
|
+
private performEmbedRequest;
|
|
22
|
+
private fallbackSequentialEmbed;
|
|
23
|
+
private pullModel;
|
|
24
|
+
private checkOllamaRunning;
|
|
25
|
+
private waitForOllama;
|
|
26
|
+
private startOllama;
|
|
27
|
+
private ensureOllamaAvailable;
|
|
28
|
+
private fetchWithTimeout;
|
|
29
|
+
}
|