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.
Files changed (139) hide show
  1. package/README.md +156 -0
  2. package/bin/indexer-cli.js +97 -0
  3. package/dist/_temp_test.d.ts +1 -0
  4. package/dist/_temp_test.js +4 -0
  5. package/dist/_temp_test.js.map +1 -0
  6. package/dist/chunking/adaptive.d.ts +15 -0
  7. package/dist/chunking/adaptive.js +43 -0
  8. package/dist/chunking/adaptive.js.map +1 -0
  9. package/dist/chunking/function.d.ts +6 -0
  10. package/dist/chunking/function.js +96 -0
  11. package/dist/chunking/function.js.map +1 -0
  12. package/dist/chunking/index.d.ts +5 -0
  13. package/dist/chunking/index.js +22 -0
  14. package/dist/chunking/index.js.map +1 -0
  15. package/dist/chunking/module.d.ts +6 -0
  16. package/dist/chunking/module.js +33 -0
  17. package/dist/chunking/module.js.map +1 -0
  18. package/dist/chunking/single.d.ts +4 -0
  19. package/dist/chunking/single.js +19 -0
  20. package/dist/chunking/single.js.map +1 -0
  21. package/dist/chunking/types.d.ts +17 -0
  22. package/dist/chunking/types.js +3 -0
  23. package/dist/chunking/types.js.map +1 -0
  24. package/dist/cli/commands/architecture.d.ts +2 -0
  25. package/dist/cli/commands/architecture.js +162 -0
  26. package/dist/cli/commands/architecture.js.map +1 -0
  27. package/dist/cli/commands/context.d.ts +2 -0
  28. package/dist/cli/commands/context.js +241 -0
  29. package/dist/cli/commands/context.js.map +1 -0
  30. package/dist/cli/commands/deps.d.ts +2 -0
  31. package/dist/cli/commands/deps.js +129 -0
  32. package/dist/cli/commands/deps.js.map +1 -0
  33. package/dist/cli/commands/enrich.d.ts +2 -0
  34. package/dist/cli/commands/ensure-indexed.d.ts +4 -0
  35. package/dist/cli/commands/ensure-indexed.js +168 -0
  36. package/dist/cli/commands/ensure-indexed.js.map +1 -0
  37. package/dist/cli/commands/explain.d.ts +2 -0
  38. package/dist/cli/commands/explain.js +165 -0
  39. package/dist/cli/commands/explain.js.map +1 -0
  40. package/dist/cli/commands/index.d.ts +2 -0
  41. package/dist/cli/commands/index.js +271 -0
  42. package/dist/cli/commands/index.js.map +1 -0
  43. package/dist/cli/commands/init.d.ts +2 -0
  44. package/dist/cli/commands/init.js +132 -0
  45. package/dist/cli/commands/init.js.map +1 -0
  46. package/dist/cli/commands/search.d.ts +2 -0
  47. package/dist/cli/commands/search.js +206 -0
  48. package/dist/cli/commands/search.js.map +1 -0
  49. package/dist/cli/commands/setup.d.ts +2 -0
  50. package/dist/cli/commands/setup.js +425 -0
  51. package/dist/cli/commands/setup.js.map +1 -0
  52. package/dist/cli/commands/skill-template.d.ts +6 -0
  53. package/dist/cli/commands/skill-template.js +72 -0
  54. package/dist/cli/commands/skill-template.js.map +1 -0
  55. package/dist/cli/commands/structure.d.ts +2 -0
  56. package/dist/cli/commands/structure.js +243 -0
  57. package/dist/cli/commands/structure.js.map +1 -0
  58. package/dist/cli/commands/uninstall.d.ts +2 -0
  59. package/dist/cli/commands/uninstall.js +138 -0
  60. package/dist/cli/commands/uninstall.js.map +1 -0
  61. package/dist/cli/entry.d.ts +1 -0
  62. package/dist/cli/entry.js +55 -0
  63. package/dist/cli/entry.js.map +1 -0
  64. package/dist/cli/help-text.d.ts +2 -0
  65. package/dist/cli/help-text.js +9 -0
  66. package/dist/cli/help-text.js.map +1 -0
  67. package/dist/cli/version.d.ts +1 -0
  68. package/dist/cli/version.js +9 -0
  69. package/dist/cli/version.js.map +1 -0
  70. package/dist/core/config.d.ts +21 -0
  71. package/dist/core/config.js +77 -0
  72. package/dist/core/config.js.map +1 -0
  73. package/dist/core/logger.d.ts +19 -0
  74. package/dist/core/logger.js +116 -0
  75. package/dist/core/logger.js.map +1 -0
  76. package/dist/core/types.d.ts +194 -0
  77. package/dist/core/types.js +5 -0
  78. package/dist/core/types.js.map +1 -0
  79. package/dist/core/update-check.d.ts +1 -0
  80. package/dist/core/update-check.js +61 -0
  81. package/dist/core/update-check.js.map +1 -0
  82. package/dist/embedding/ollama.d.ts +29 -0
  83. package/dist/embedding/ollama.js +264 -0
  84. package/dist/embedding/ollama.js.map +1 -0
  85. package/dist/engine/architecture.d.ts +55 -0
  86. package/dist/engine/architecture.js +359 -0
  87. package/dist/engine/architecture.js.map +1 -0
  88. package/dist/engine/dependency-resolver.d.ts +4 -0
  89. package/dist/engine/dependency-resolver.js +69 -0
  90. package/dist/engine/dependency-resolver.js.map +1 -0
  91. package/dist/engine/git.d.ts +11 -0
  92. package/dist/engine/git.js +246 -0
  93. package/dist/engine/git.js.map +1 -0
  94. package/dist/engine/indexer.d.ts +86 -0
  95. package/dist/engine/indexer.js +933 -0
  96. package/dist/engine/indexer.js.map +1 -0
  97. package/dist/engine/scanner.d.ts +1 -0
  98. package/dist/engine/scanner.js +42 -0
  99. package/dist/engine/scanner.js.map +1 -0
  100. package/dist/engine/searcher.d.ts +26 -0
  101. package/dist/engine/searcher.js +70 -0
  102. package/dist/engine/searcher.js.map +1 -0
  103. package/dist/index.d.ts +1 -0
  104. package/dist/index.js +4 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/languages/csharp.d.ts +25 -0
  107. package/dist/languages/csharp.js +311 -0
  108. package/dist/languages/csharp.js.map +1 -0
  109. package/dist/languages/gdscript.d.ts +25 -0
  110. package/dist/languages/gdscript.js +382 -0
  111. package/dist/languages/gdscript.js.map +1 -0
  112. package/dist/languages/plugin.d.ts +73 -0
  113. package/dist/languages/plugin.js +35 -0
  114. package/dist/languages/plugin.js.map +1 -0
  115. package/dist/languages/python.d.ts +24 -0
  116. package/dist/languages/python.js +292 -0
  117. package/dist/languages/python.js.map +1 -0
  118. package/dist/languages/ruby.d.ts +25 -0
  119. package/dist/languages/ruby.js +328 -0
  120. package/dist/languages/ruby.js.map +1 -0
  121. package/dist/languages/typescript.d.ts +21 -0
  122. package/dist/languages/typescript.js +439 -0
  123. package/dist/languages/typescript.js.map +1 -0
  124. package/dist/storage/sqlite.d.ts +51 -0
  125. package/dist/storage/sqlite.js +726 -0
  126. package/dist/storage/sqlite.js.map +1 -0
  127. package/dist/storage/vectors.d.ts +39 -0
  128. package/dist/storage/vectors.js +450 -0
  129. package/dist/storage/vectors.js.map +1 -0
  130. package/dist/utils/gitignore.d.ts +4 -0
  131. package/dist/utils/gitignore.js +85 -0
  132. package/dist/utils/gitignore.js.map +1 -0
  133. package/dist/utils/hash.d.ts +1 -0
  134. package/dist/utils/hash.js +12 -0
  135. package/dist/utils/hash.js.map +1 -0
  136. package/dist/utils/token-estimator.d.ts +3 -0
  137. package/dist/utils/token-estimator.js +13 -0
  138. package/dist/utils/token-estimator.js.map +1 -0
  139. 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,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_PROJECT_ID = void 0;
4
+ exports.DEFAULT_PROJECT_ID = "default";
5
+ //# sourceMappingURL=types.js.map
@@ -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
+ }