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,243 @@
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.registerStructureCommand = registerStructureCommand;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const config_js_1 = require("../../core/config.js");
9
+ const logger_js_1 = require("../../core/logger.js");
10
+ const types_js_1 = require("../../core/types.js");
11
+ const sqlite_js_1 = require("../../storage/sqlite.js");
12
+ const help_text_js_1 = require("../help-text.js");
13
+ const ensure_indexed_js_1 = require("./ensure-indexed.js");
14
+ function parseMaxDepth(value) {
15
+ if (!value) {
16
+ return undefined;
17
+ }
18
+ const parsed = Number.parseInt(value, 10);
19
+ if (!Number.isFinite(parsed) || parsed < 0) {
20
+ throw new Error("--max-depth must be a non-negative integer");
21
+ }
22
+ return parsed;
23
+ }
24
+ function parseMaxFiles(value) {
25
+ if (!value) {
26
+ return undefined;
27
+ }
28
+ const parsed = Number.parseInt(value, 10);
29
+ if (!Number.isFinite(parsed) || parsed <= 0) {
30
+ throw new Error("--max-files must be a positive integer");
31
+ }
32
+ return parsed;
33
+ }
34
+ function createNode() {
35
+ return { files: new Set(), directories: new Map() };
36
+ }
37
+ function insertPath(root, filePath) {
38
+ const parts = filePath.split("/");
39
+ let current = root;
40
+ for (let index = 0; index < parts.length - 1; index += 1) {
41
+ const part = parts[index];
42
+ if (!current.directories.has(part)) {
43
+ current.directories.set(part, createNode());
44
+ }
45
+ current = current.directories.get(part);
46
+ }
47
+ current.files.add(parts[parts.length - 1]);
48
+ }
49
+ function summarizeHiddenChildren(node) {
50
+ return `... (${node.directories.size + node.files.size} children)`;
51
+ }
52
+ function countFiles(node) {
53
+ let total = node.files.size;
54
+ for (const childNode of node.directories.values()) {
55
+ total += countFiles(childNode);
56
+ }
57
+ return total;
58
+ }
59
+ function printTree(node, indent, prefix, symbolsByFile, depth, maxDepth, fileCounter, maxFiles) {
60
+ if (maxDepth !== undefined && depth >= maxDepth) {
61
+ const summary = summarizeHiddenChildren(node);
62
+ if (summary !== "... (0 children)") {
63
+ console.log(`${indent}${summary}`);
64
+ }
65
+ return;
66
+ }
67
+ const directoryEntries = Array.from(node.directories.entries()).sort((a, b) => a[0].localeCompare(b[0]));
68
+ const fileEntries = Array.from(node.files).sort((a, b) => a.localeCompare(b));
69
+ for (const [directoryName, childNode] of directoryEntries) {
70
+ if (maxFiles !== undefined &&
71
+ fileCounter &&
72
+ fileCounter.printed >= maxFiles) {
73
+ fileCounter.hidden += countFiles(childNode);
74
+ continue;
75
+ }
76
+ const nextPrefix = prefix ? `${prefix}/${directoryName}` : directoryName;
77
+ console.log(`${indent}${directoryName}/`);
78
+ printTree(childNode, `${indent} `, nextPrefix, symbolsByFile, depth + 1, maxDepth, fileCounter, maxFiles);
79
+ }
80
+ for (const fileName of fileEntries) {
81
+ if (maxFiles !== undefined &&
82
+ fileCounter &&
83
+ fileCounter.printed >= maxFiles) {
84
+ fileCounter.hidden += 1;
85
+ continue;
86
+ }
87
+ const filePath = prefix ? `${prefix}/${fileName}` : fileName;
88
+ console.log(`${indent}${fileName}`);
89
+ if (fileCounter) {
90
+ fileCounter.printed += 1;
91
+ }
92
+ const symbols = symbolsByFile.get(filePath) ?? [];
93
+ for (const symbol of symbols) {
94
+ const exported = symbol.exported ? ", exported" : "";
95
+ console.log(`${indent} ${symbol.name} (${symbol.kind}${exported})`);
96
+ }
97
+ }
98
+ }
99
+ function treeToJson(node, prefix, symbolsByFile, depth, maxDepth, fileCounter, maxFiles) {
100
+ if (maxDepth !== undefined && depth >= maxDepth) {
101
+ const summary = summarizeHiddenChildren(node);
102
+ return summary === "... (0 children)"
103
+ ? []
104
+ : [{ type: "summary", name: summary }];
105
+ }
106
+ const entries = [];
107
+ const directoryEntries = Array.from(node.directories.entries()).sort((a, b) => a[0].localeCompare(b[0]));
108
+ const fileEntries = Array.from(node.files).sort((a, b) => a.localeCompare(b));
109
+ for (const [directoryName, childNode] of directoryEntries) {
110
+ if (maxFiles !== undefined &&
111
+ fileCounter &&
112
+ fileCounter.printed >= maxFiles) {
113
+ fileCounter.hidden += countFiles(childNode);
114
+ continue;
115
+ }
116
+ const childPrefix = prefix ? `${prefix}/${directoryName}` : directoryName;
117
+ const children = treeToJson(childNode, childPrefix, symbolsByFile, depth + 1, maxDepth, fileCounter, maxFiles);
118
+ if (maxFiles !== undefined && children.length === 0) {
119
+ continue;
120
+ }
121
+ entries.push({
122
+ type: "directory",
123
+ name: directoryName,
124
+ children,
125
+ });
126
+ }
127
+ for (const fileName of fileEntries) {
128
+ if (maxFiles !== undefined &&
129
+ fileCounter &&
130
+ fileCounter.printed >= maxFiles) {
131
+ fileCounter.hidden += 1;
132
+ continue;
133
+ }
134
+ const filePath = prefix ? `${prefix}/${fileName}` : fileName;
135
+ const symbols = (symbolsByFile.get(filePath) ?? []).map((s) => ({
136
+ name: s.name,
137
+ kind: s.kind,
138
+ exported: s.exported,
139
+ }));
140
+ if (fileCounter) {
141
+ fileCounter.printed += 1;
142
+ }
143
+ entries.push({ type: "file", name: fileName, path: filePath, symbols });
144
+ }
145
+ return entries;
146
+ }
147
+ function registerStructureCommand(program) {
148
+ program
149
+ .command("structure")
150
+ .description("Print indexed file and symbol structure")
151
+ .addHelpText("after", `\n${help_text_js_1.PROJECT_ROOT_COMMAND_HELP}\n`)
152
+ .option("--path-prefix <string>", "limit output to a path prefix")
153
+ .option("--kind <string>", "filter symbols by kind")
154
+ .option("--max-depth <number>", "limit directory traversal depth in the rendered tree")
155
+ .option("--max-files <number>", "limit number of files shown in output")
156
+ .option("--json", "output results as JSON")
157
+ .action(async (options) => {
158
+ const resolvedProjectPath = process.cwd();
159
+ const dataDir = node_path_1.default.join(resolvedProjectPath, ".indexer-cli");
160
+ const dbPath = node_path_1.default.join(dataDir, "db.sqlite");
161
+ (0, logger_js_1.initLogger)(dataDir);
162
+ config_js_1.config.load(dataDir);
163
+ const metadata = new sqlite_js_1.SqliteMetadataStore(dbPath);
164
+ try {
165
+ const maxDepth = parseMaxDepth(options?.maxDepth);
166
+ const maxFiles = parseMaxFiles(options?.maxFiles);
167
+ const fileCounter = maxFiles !== undefined ? { printed: 0, hidden: 0 } : undefined;
168
+ await metadata.initialize();
169
+ await (0, ensure_indexed_js_1.ensureIndexed)(metadata, resolvedProjectPath, {
170
+ silent: Boolean(options?.json),
171
+ });
172
+ const snapshot = await metadata.getLatestCompletedSnapshot(types_js_1.DEFAULT_PROJECT_ID);
173
+ if (!snapshot) {
174
+ throw new Error("Auto-indexing did not produce a completed snapshot.");
175
+ }
176
+ const files = await metadata.listFiles(types_js_1.DEFAULT_PROJECT_ID, snapshot.id, {
177
+ pathPrefix: options?.pathPrefix,
178
+ });
179
+ const allSymbols = await metadata.listSymbols(types_js_1.DEFAULT_PROJECT_ID, snapshot.id);
180
+ const symbolsByFile = new Map();
181
+ for (const symbol of allSymbols) {
182
+ if (options?.kind && symbol.kind !== options.kind) {
183
+ continue;
184
+ }
185
+ if (options?.pathPrefix &&
186
+ !symbol.filePath.startsWith(options.pathPrefix)) {
187
+ continue;
188
+ }
189
+ const current = symbolsByFile.get(symbol.filePath) ?? [];
190
+ current.push(symbol);
191
+ symbolsByFile.set(symbol.filePath, current);
192
+ }
193
+ if (files.length === 0) {
194
+ if (options?.json) {
195
+ console.log("[]");
196
+ }
197
+ else {
198
+ console.log("No indexed files found for the requested filters.");
199
+ }
200
+ return;
201
+ }
202
+ const root = createNode();
203
+ for (const file of files) {
204
+ insertPath(root, file.path);
205
+ }
206
+ if (options?.json) {
207
+ let tree = treeToJson(root, "", symbolsByFile, 0, maxDepth, fileCounter, maxFiles);
208
+ if (options?.pathPrefix) {
209
+ const parts = options.pathPrefix.split("/").filter(Boolean);
210
+ let current = tree;
211
+ for (const part of parts) {
212
+ const dir = current.find((entry) => "type" in entry &&
213
+ "name" in entry &&
214
+ entry.type ===
215
+ "directory" &&
216
+ entry.name === part);
217
+ current = dir?.children ?? [];
218
+ }
219
+ tree = current;
220
+ }
221
+ if (fileCounter && fileCounter.hidden > 0) {
222
+ tree.push({ type: "truncated", hiddenFiles: fileCounter.hidden });
223
+ }
224
+ console.log(JSON.stringify(tree, null, 2));
225
+ }
226
+ else {
227
+ printTree(root, "", "", symbolsByFile, 0, maxDepth, fileCounter, maxFiles);
228
+ if (fileCounter && fileCounter.hidden > 0) {
229
+ console.log(`\n... and ${fileCounter.hidden} more files (use --max-files to see more)`);
230
+ }
231
+ }
232
+ }
233
+ catch (error) {
234
+ const message = error instanceof Error ? error.message : String(error);
235
+ console.error(`Structure command failed: ${message}`);
236
+ process.exitCode = 1;
237
+ }
238
+ finally {
239
+ await metadata.close().catch(() => undefined);
240
+ }
241
+ });
242
+ }
243
+ //# sourceMappingURL=structure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structure.js","sourceRoot":"","sources":["../../../src/cli/commands/structure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerUninstallCommand(program: Command): void;
@@ -0,0 +1,138 @@
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.registerUninstallCommand = registerUninstallCommand;
7
+ const node_fs_1 = require("node:fs");
8
+ const promises_1 = require("node:fs/promises");
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const node_process_1 = require("node:process");
11
+ const promises_2 = require("node:readline/promises");
12
+ const help_text_js_1 = require("../help-text.js");
13
+ const HOOK_MARKER_START = "# >>> indexer-cli >>>";
14
+ const HOOK_MARKER_END = "# <<< indexer-cli <<<";
15
+ async function pathExists(targetPath) {
16
+ try {
17
+ await (0, promises_1.access)(targetPath, node_fs_1.constants.F_OK);
18
+ return true;
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ }
24
+ async function isDirEmpty(dirPath) {
25
+ const entries = await (0, promises_1.readdir)(dirPath);
26
+ return entries.length === 0;
27
+ }
28
+ async function removeClaudeSkill(projectRoot) {
29
+ const skillDir = node_path_1.default.join(projectRoot, ".claude", "skills", "repo-discovery");
30
+ if (await pathExists(skillDir)) {
31
+ await (0, promises_1.rm)(skillDir, { recursive: true, force: true });
32
+ console.log(`Removed ${skillDir}`);
33
+ }
34
+ const skillsDir = node_path_1.default.join(projectRoot, ".claude", "skills");
35
+ if (await pathExists(skillsDir)) {
36
+ try {
37
+ if (await isDirEmpty(skillsDir)) {
38
+ await (0, promises_1.rm)(skillsDir, { recursive: true, force: true });
39
+ }
40
+ }
41
+ catch { }
42
+ }
43
+ const claudeDir = node_path_1.default.join(projectRoot, ".claude");
44
+ if (await pathExists(claudeDir)) {
45
+ try {
46
+ if (await isDirEmpty(claudeDir)) {
47
+ await (0, promises_1.rm)(claudeDir, { recursive: true, force: true });
48
+ console.log(`Removed empty ${claudeDir}`);
49
+ }
50
+ }
51
+ catch { }
52
+ }
53
+ }
54
+ async function removeFromGitignore(projectRoot, entries) {
55
+ const gitignorePath = node_path_1.default.join(projectRoot, ".gitignore");
56
+ if (!(await pathExists(gitignorePath)))
57
+ return;
58
+ const current = await (0, promises_1.readFile)(gitignorePath, "utf8");
59
+ const lines = current.split(/\r?\n/);
60
+ const entrySet = new Set(entries);
61
+ const filtered = lines.filter((line) => !entrySet.has(line.trim()));
62
+ while (filtered.length > 0 && filtered[filtered.length - 1] === "") {
63
+ filtered.pop();
64
+ }
65
+ filtered.push("");
66
+ const nextContent = filtered.join("\n");
67
+ if (nextContent !== current) {
68
+ await (0, promises_1.writeFile)(gitignorePath, nextContent, "utf8");
69
+ console.log(`Updated ${gitignorePath}`);
70
+ }
71
+ }
72
+ async function removePostCommitHook(projectRoot) {
73
+ const hookPath = node_path_1.default.join(projectRoot, ".git", "hooks", "post-commit");
74
+ if (!(await pathExists(hookPath)))
75
+ return;
76
+ const current = await (0, promises_1.readFile)(hookPath, "utf8");
77
+ if (!current.includes(HOOK_MARKER_START))
78
+ return;
79
+ const startIdx = current.indexOf(HOOK_MARKER_START);
80
+ const endIdx = current.indexOf(HOOK_MARKER_END);
81
+ if (endIdx === -1)
82
+ return;
83
+ const afterBlock = current.slice(endIdx + HOOK_MARKER_END.length);
84
+ let cleaned = current.slice(0, startIdx) + afterBlock;
85
+ cleaned = cleaned.replace(/^\n+/, "").replace(/\n{3,}/g, "\n\n");
86
+ if (cleaned.trim() === "" || cleaned.trim() === "#!/bin/sh") {
87
+ await (0, promises_1.unlink)(hookPath);
88
+ console.log(`Removed ${hookPath}`);
89
+ }
90
+ else {
91
+ await (0, promises_1.writeFile)(hookPath, cleaned, "utf8");
92
+ console.log(`Cleaned ${hookPath}`);
93
+ }
94
+ }
95
+ function registerUninstallCommand(program) {
96
+ program
97
+ .command("uninstall")
98
+ .description("Remove indexer data for a project")
99
+ .addHelpText("after", `\n${help_text_js_1.PROJECT_ROOT_COMMAND_HELP}\n`)
100
+ .option("-f, --force", "Skip confirmation prompt")
101
+ .action(async (options) => {
102
+ const resolvedProjectPath = process.cwd();
103
+ const dataDir = node_path_1.default.join(resolvedProjectPath, ".indexer-cli");
104
+ try {
105
+ if (!(await pathExists(dataDir))) {
106
+ console.log(`Nothing to remove at ${dataDir}`);
107
+ return;
108
+ }
109
+ if (!options.force) {
110
+ const rl = (0, promises_2.createInterface)({ input: node_process_1.stdin, output: node_process_1.stdout });
111
+ try {
112
+ const answer = await rl.question(`Delete ${dataDir}? [y/N] `);
113
+ if (!/^y(es)?$/i.test(answer.trim())) {
114
+ console.log("Uninstall cancelled.");
115
+ return;
116
+ }
117
+ }
118
+ finally {
119
+ rl.close();
120
+ }
121
+ }
122
+ await (0, promises_1.rm)(dataDir, { recursive: true, force: true });
123
+ console.log(`Removed ${dataDir}`);
124
+ await removeClaudeSkill(resolvedProjectPath);
125
+ await removeFromGitignore(resolvedProjectPath, [
126
+ ".indexer-cli/",
127
+ ".claude/",
128
+ ]);
129
+ await removePostCommitHook(resolvedProjectPath);
130
+ }
131
+ catch (error) {
132
+ const message = error instanceof Error ? error.message : String(error);
133
+ console.error(`Uninstall failed: ${message}`);
134
+ process.exitCode = 1;
135
+ }
136
+ });
137
+ }
138
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../src/cli/commands/uninstall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const commander_1 = require("commander");
4
+ const init_js_1 = require("./commands/init.js");
5
+ const index_js_1 = require("./commands/index.js");
6
+ const search_js_1 = require("./commands/search.js");
7
+ const structure_js_1 = require("./commands/structure.js");
8
+ const architecture_js_1 = require("./commands/architecture.js");
9
+ const uninstall_js_1 = require("./commands/uninstall.js");
10
+ const setup_js_1 = require("./commands/setup.js");
11
+ const context_js_1 = require("./commands/context.js");
12
+ const explain_js_1 = require("./commands/explain.js");
13
+ const deps_js_1 = require("./commands/deps.js");
14
+ const version_js_1 = require("./version.js");
15
+ const update_check_js_1 = require("../core/update-check.js");
16
+ const help_text_js_1 = require("./help-text.js");
17
+ const HANDLED_COMMANDER_EXIT_CODES = new Set([
18
+ "commander.helpDisplayed",
19
+ "commander.help",
20
+ "commander.version",
21
+ "commander.unknownCommand",
22
+ ]);
23
+ function isHandledCommanderExit(error) {
24
+ if (typeof error !== "object" || error === null || !("code" in error)) {
25
+ return false;
26
+ }
27
+ const code = Reflect.get(error, "code");
28
+ return typeof code === "string" && HANDLED_COMMANDER_EXIT_CODES.has(code);
29
+ }
30
+ commander_1.program
31
+ .name("indexer-cli")
32
+ .description("Lightweight project indexer with semantic search. Run project commands from the root of the target project; `setup` can run anywhere.")
33
+ .version(version_js_1.VERSION)
34
+ .addHelpText("after", `\n${help_text_js_1.PROJECT_ROOT_PROGRAM_HELP}\n`)
35
+ .exitOverride();
36
+ (0, setup_js_1.registerSetupCommand)(commander_1.program);
37
+ (0, init_js_1.registerInitCommand)(commander_1.program);
38
+ (0, index_js_1.registerIndexCommand)(commander_1.program);
39
+ (0, search_js_1.registerSearchCommand)(commander_1.program);
40
+ (0, structure_js_1.registerStructureCommand)(commander_1.program);
41
+ (0, architecture_js_1.registerArchitectureCommand)(commander_1.program);
42
+ (0, context_js_1.registerContextCommand)(commander_1.program);
43
+ (0, explain_js_1.registerExplainCommand)(commander_1.program);
44
+ (0, deps_js_1.registerDepsCommand)(commander_1.program);
45
+ (0, uninstall_js_1.registerUninstallCommand)(commander_1.program);
46
+ try {
47
+ commander_1.program.parse();
48
+ }
49
+ catch (error) {
50
+ if (!isHandledCommanderExit(error)) {
51
+ throw error;
52
+ }
53
+ }
54
+ (0, update_check_js_1.checkForUpdates)().catch(() => { });
55
+ //# sourceMappingURL=entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/cli/entry.ts"],"names":[],"mappings":";;AAAA,yCAAoC;AACpC,gDAAyD;AACzD,kDAA2D;AAC3D,oDAA6D;AAC7D,0DAAmE;AACnE,gEAAyE;AACzE,0DAAmE;AACnE,kDAA2D;AAC3D,sDAA+D;AAC/D,sDAA+D;AAC/D,gDAAyD;AACzD,6CAAuC;AACvC,6DAA0D;AAC1D,iDAA2D;AAE3D,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC;IAC5C,yBAAyB;IACzB,gBAAgB;IAChB,mBAAmB;IACnB,0BAA0B;CAC1B,CAAC,CAAC;AAEH,SAAS,sBAAsB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC;QACvE,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3E,CAAC;AAED,mBAAO;KACL,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CACX,uIAAuI,CACvI;KACA,OAAO,CAAC,oBAAO,CAAC;KAChB,WAAW,CAAC,OAAO,EAAE,KAAK,wCAAyB,IAAI,CAAC;KACxD,YAAY,EAAE,CAAC;AACjB,IAAA,+BAAoB,EAAC,mBAAO,CAAC,CAAC;AAC9B,IAAA,6BAAmB,EAAC,mBAAO,CAAC,CAAC;AAC7B,IAAA,+BAAoB,EAAC,mBAAO,CAAC,CAAC;AAC9B,IAAA,iCAAqB,EAAC,mBAAO,CAAC,CAAC;AAC/B,IAAA,uCAAwB,EAAC,mBAAO,CAAC,CAAC;AAClC,IAAA,6CAA2B,EAAC,mBAAO,CAAC,CAAC;AACrC,IAAA,mCAAsB,EAAC,mBAAO,CAAC,CAAC;AAChC,IAAA,mCAAsB,EAAC,mBAAO,CAAC,CAAC;AAChC,IAAA,6BAAmB,EAAC,mBAAO,CAAC,CAAC;AAC7B,IAAA,uCAAwB,EAAC,mBAAO,CAAC,CAAC;AAElC,IAAI,CAAC;IACJ,mBAAO,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AAAC,OAAO,KAAc,EAAE,CAAC;IACzB,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED,IAAA,iCAAe,GAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const PROJECT_ROOT_COMMAND_HELP = "Run this command from the root of the target project.";
2
+ export declare const PROJECT_ROOT_PROGRAM_HELP: string;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PROJECT_ROOT_PROGRAM_HELP = exports.PROJECT_ROOT_COMMAND_HELP = void 0;
4
+ exports.PROJECT_ROOT_COMMAND_HELP = "Run this command from the root of the target project.";
5
+ exports.PROJECT_ROOT_PROGRAM_HELP = [
6
+ "Project commands (`init`, `index`, `search`, `structure`, `architecture`, `context`, `explain`, `deps`, `uninstall`) must be run from the root of the target project.",
7
+ "`setup` only prepares local machine dependencies and can be run from anywhere.",
8
+ ].join("\n");
9
+ //# sourceMappingURL=help-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-text.js","sourceRoot":"","sources":["../../src/cli/help-text.ts"],"names":[],"mappings":";;;AAAa,QAAA,yBAAyB,GACrC,uDAAuD,CAAC;AAE5C,QAAA,yBAAyB,GAAG;IACxC,uKAAuK;IACvK,gFAAgF;CAChF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const VERSION: string;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VERSION = void 0;
4
+ const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
6
+ const packageJsonPath = (0, node_path_1.resolve)(__dirname, "..", "..", "package.json");
7
+ const packageJson = JSON.parse((0, node_fs_1.readFileSync)(packageJsonPath, "utf-8"));
8
+ exports.VERSION = packageJson.version;
9
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":";;;AAAA,qCAAuC;AACvC,yCAAoC;AAEpC,MAAM,eAAe,GAAG,IAAA,mBAAO,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AACvE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;AAE1D,QAAA,OAAO,GAAW,WAAW,CAAC,OAAO,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface IndexerConfig {
2
+ embeddingProvider: string;
3
+ embeddingModel: string;
4
+ embeddingContextSize: number;
5
+ vectorSize: number;
6
+ ollamaBaseUrl: string;
7
+ ollamaNumCtx: number;
8
+ indexConcurrency: number;
9
+ indexBatchSize: number;
10
+ logLevel: string;
11
+ excludePaths: string[];
12
+ }
13
+ export declare const DEFAULT_CONFIG: IndexerConfig;
14
+ export declare class ConfigManager {
15
+ private config;
16
+ constructor();
17
+ load(dataDir: string): void;
18
+ get<K extends keyof IndexerConfig>(key: K): IndexerConfig[K];
19
+ getAll(): Readonly<IndexerConfig>;
20
+ }
21
+ export declare const config: ConfigManager;
@@ -0,0 +1,77 @@
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.config = exports.ConfigManager = exports.DEFAULT_CONFIG = void 0;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ exports.DEFAULT_CONFIG = {
10
+ embeddingProvider: "ollama",
11
+ embeddingModel: "jina-8k",
12
+ embeddingContextSize: 8192,
13
+ vectorSize: 768,
14
+ ollamaBaseUrl: "http://127.0.0.1:11434",
15
+ ollamaNumCtx: 512,
16
+ indexConcurrency: 2,
17
+ indexBatchSize: 8,
18
+ logLevel: "error",
19
+ excludePaths: ["fixtures/**", "**/fixtures/**", "vendor/**"],
20
+ };
21
+ class ConfigManager {
22
+ config;
23
+ constructor() {
24
+ this.config = { ...exports.DEFAULT_CONFIG };
25
+ }
26
+ load(dataDir) {
27
+ const configPath = node_path_1.default.join(dataDir, "config.json");
28
+ if (!node_fs_1.default.existsSync(configPath))
29
+ return;
30
+ try {
31
+ const raw = node_fs_1.default.readFileSync(configPath, "utf-8");
32
+ const parsed = JSON.parse(raw);
33
+ if (typeof parsed.embeddingProvider === "string")
34
+ this.config.embeddingProvider = parsed.embeddingProvider;
35
+ if (typeof parsed.embeddingModel === "string")
36
+ this.config.embeddingModel = parsed.embeddingModel;
37
+ if (typeof parsed.embeddingContextSize === "number" &&
38
+ parsed.embeddingContextSize > 0)
39
+ this.config.embeddingContextSize = parsed.embeddingContextSize;
40
+ if (typeof parsed.vectorSize === "number" && parsed.vectorSize > 0)
41
+ this.config.vectorSize = parsed.vectorSize;
42
+ if (typeof parsed.ollamaBaseUrl === "string")
43
+ this.config.ollamaBaseUrl = parsed.ollamaBaseUrl;
44
+ if (typeof parsed.ollamaNumCtx === "number" && parsed.ollamaNumCtx > 0)
45
+ this.config.ollamaNumCtx = parsed.ollamaNumCtx;
46
+ if (typeof parsed.indexConcurrency === "number" &&
47
+ parsed.indexConcurrency > 0)
48
+ this.config.indexConcurrency = parsed.indexConcurrency;
49
+ if (typeof parsed.indexBatchSize === "number" &&
50
+ parsed.indexBatchSize > 0)
51
+ this.config.indexBatchSize = parsed.indexBatchSize;
52
+ if (typeof parsed.logLevel === "string")
53
+ this.config.logLevel = parsed.logLevel;
54
+ if (Array.isArray(parsed.excludePaths)) {
55
+ const excludePaths = parsed.excludePaths
56
+ .filter((value) => typeof value === "string")
57
+ .map((value) => value.trim())
58
+ .filter((value) => value.length > 0);
59
+ if (excludePaths.length === parsed.excludePaths.length) {
60
+ this.config.excludePaths = excludePaths;
61
+ }
62
+ }
63
+ }
64
+ catch {
65
+ // config unreadable — keep defaults
66
+ }
67
+ }
68
+ get(key) {
69
+ return this.config[key];
70
+ }
71
+ getAll() {
72
+ return { ...this.config };
73
+ }
74
+ }
75
+ exports.ConfigManager = ConfigManager;
76
+ exports.config = new ConfigManager();
77
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export type LogLevel = "error" | "warn" | "info" | "debug";
2
+ export declare function setLogLevel(level: LogLevel): void;
3
+ export declare function getLogLevel(): LogLevel;
4
+ /**
5
+ * Initialize the logger with a project data directory.
6
+ * Reads logLevel from <dataDir>/config.json if present,
7
+ * and sets the log file to <dataDir>/log.txt.
8
+ * Safe to call before the directory exists — falls back to console.
9
+ */
10
+ export declare function initLogger(dataDir: string): void;
11
+ export declare class SystemLogger {
12
+ private serviceName;
13
+ constructor(serviceName: string);
14
+ private sendLog;
15
+ info(message: unknown, details?: any): void;
16
+ warn(message: unknown, details?: any): void;
17
+ error(message: unknown, details?: any): void;
18
+ debug(message: unknown, details?: any): void;
19
+ }