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,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":";;;;;AA8NA,4DA2JC;AAzXD,0DAA6B;AAE7B,oDAA8C;AAC9C,oDAAkD;AAClD,kDAA4E;AAC5E,uDAA8D;AAC9D,kDAA4D;AAC5D,2DAAoD;AAOpD,SAAS,aAAa,CAAC,KAAc;IACpC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACpC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,UAAU;IAClB,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAU,EAAE,WAAW,EAAE,IAAI,GAAG,EAAoB,EAAE,CAAC;AAC/E,CAAC;AAED,SAAS,UAAU,CAAC,IAAc,EAAE,QAAgB;IACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAc;IAC9C,OAAO,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC;AACpE,CAAC;AAED,SAAS,UAAU,CAAC,IAAc;IACjC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAE5B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;QACnD,KAAK,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CACjB,IAAc,EACd,MAAc,EACd,MAAc,EACd,aAA0C,EAC1C,KAAa,EACb,QAAiB,EACjB,WAAiD,EACjD,QAAiB;IAEjB,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,OAAO,KAAK,kBAAkB,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,OAAO;IACR,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC7E,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACxB,CAAC;IACF,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9E,KAAK,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,IAAI,gBAAgB,EAAE,CAAC;QAC3D,IACC,QAAQ,KAAK,SAAS;YACtB,WAAW;YACX,WAAW,CAAC,OAAO,IAAI,QAAQ,EAC9B,CAAC;YACF,WAAW,CAAC,MAAM,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;YAC5C,SAAS;QACV,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,aAAa,GAAG,CAAC,CAAC;QAC1C,SAAS,CACR,SAAS,EACT,GAAG,MAAM,IAAI,EACb,UAAU,EACV,aAAa,EACb,KAAK,GAAG,CAAC,EACT,QAAQ,EACR,WAAW,EACX,QAAQ,CACR,CAAC;IACH,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;QACpC,IACC,QAAQ,KAAK,SAAS;YACtB,WAAW;YACX,WAAW,CAAC,OAAO,IAAI,QAAQ,EAC9B,CAAC;YACF,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC;YACxB,SAAS;QACV,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,QAAQ,EAAE,CAAC,CAAC;QACpC,IAAI,WAAW,EAAE,CAAC;YACjB,WAAW,CAAC,OAAO,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC;QACtE,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,UAAU,CAClB,IAAc,EACd,MAAc,EACd,aAA0C,EAC1C,KAAa,EACb,QAAiB,EACjB,WAAiD,EACjD,QAAiB;IAEjB,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,OAAO,KAAK,kBAAkB;YACpC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC7E,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACxB,CAAC;IACF,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9E,KAAK,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,IAAI,gBAAgB,EAAE,CAAC;QAC3D,IACC,QAAQ,KAAK,SAAS;YACtB,WAAW;YACX,WAAW,CAAC,OAAO,IAAI,QAAQ,EAC9B,CAAC;YACF,WAAW,CAAC,MAAM,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;YAC5C,SAAS;QACV,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;QAC1E,MAAM,QAAQ,GAAG,UAAU,CAC1B,SAAS,EACT,WAAW,EACX,aAAa,EACb,KAAK,GAAG,CAAC,EACT,QAAQ,EACR,WAAW,EACX,QAAQ,CACR,CAAC;QACF,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrD,SAAS;QACV,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,aAAa;YACnB,QAAQ;SACR,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;QACpC,IACC,QAAQ,KAAK,SAAS;YACtB,WAAW;YACX,WAAW,CAAC,OAAO,IAAI,QAAQ,EAC9B,CAAC;YACF,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC;YACxB,SAAS;QACV,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC7D,MAAM,OAAO,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/D,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;SACpB,CAAC,CAAC,CAAC;QACJ,IAAI,WAAW,EAAE,CAAC;YACjB,WAAW,CAAC,OAAO,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAgB,wBAAwB,CAAC,OAAgB;IACxD,OAAO;SACL,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,yCAAyC,CAAC;SACtD,WAAW,CAAC,OAAO,EAAE,KAAK,wCAAyB,IAAI,CAAC;SACxD,MAAM,CAAC,wBAAwB,EAAE,+BAA+B,CAAC;SACjE,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;SACnD,MAAM,CACN,sBAAsB,EACtB,sDAAsD,CACtD;SACA,MAAM,CAAC,sBAAsB,EAAE,uCAAuC,CAAC;SACvE,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;SAC1C,MAAM,CACN,KAAK,EAAE,OAMN,EAAE,EAAE;QACJ,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAE/C,IAAA,sBAAU,EAAC,OAAO,CAAC,CAAC;QACpB,kBAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAErB,MAAM,QAAQ,GAAG,IAAI,+BAAmB,CAAC,MAAM,CAAC,CAAC;QAEjD,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClD,MAAM,WAAW,GAChB,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAEhE,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC5B,MAAM,IAAA,iCAAa,EAAC,QAAQ,EAAE,mBAAmB,EAAE;gBAClD,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;aAC9B,CAAC,CAAC;YACH,MAAM,QAAQ,GACb,MAAM,QAAQ,CAAC,0BAA0B,CAAC,6BAAkB,CAAC,CAAC;YAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACd,qDAAqD,CACrD,CAAC;YACH,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,SAAS,CACrC,6BAAkB,EAClB,QAAQ,CAAC,EAAE,EACX;gBACC,UAAU,EAAE,OAAO,EAAE,UAAU;aAC/B,CACD,CAAC;YACF,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,WAAW,CAC5C,6BAAkB,EAClB,QAAQ,CAAC,EAAE,CACX,CAAC;YACF,MAAM,aAAa,GAAG,IAAI,GAAG,EAA0B,CAAC;YAExD,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;gBACjC,IAAI,OAAO,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;oBACnD,SAAS;gBACV,CAAC;gBACD,IACC,OAAO,EAAE,UAAU;oBACnB,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,EAC9C,CAAC;oBACF,SAAS;gBACV,CAAC;gBACD,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACzD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrB,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC7C,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;oBACnB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;qBAAM,CAAC;oBACP,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;gBAClE,CAAC;gBACD,OAAO;YACR,CAAC;YAED,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;YAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBAC1B,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;YAED,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;gBACnB,IAAI,IAAI,GAAG,UAAU,CACpB,IAAI,EACJ,EAAE,EACF,aAAa,EACb,CAAC,EACD,QAAQ,EACR,WAAW,EACX,QAAQ,CACR,CAAC;gBAEF,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;oBACzB,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAC5D,IAAI,OAAO,GAAa,IAAI,CAAC;oBAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CACvB,CACC,KAAK,EAKJ,EAAE,CACH,MAAM,IAAI,KAAK;4BACf,MAAM,IAAI,KAAK;4BACd,KAAwC,CAAC,IAAI;gCAC7C,WAAW;4BACX,KAAwC,CAAC,IAAI,KAAK,IAAI,CACxD,CAAC;wBACF,OAAO,GAAG,GAAG,EAAE,QAAQ,IAAI,EAAE,CAAC;oBAC/B,CAAC;oBACD,IAAI,GAAG,OAAO,CAAC;gBAChB,CAAC;gBAED,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC3C,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;gBACnE,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACP,SAAS,CACR,IAAI,EACJ,EAAE,EACF,EAAE,EACF,aAAa,EACb,CAAC,EACD,QAAQ,EACR,WAAW,EACX,QAAQ,CACR,CAAC;gBACF,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC3C,OAAO,CAAC,GAAG,CACV,aAAa,WAAW,CAAC,MAAM,2CAA2C,CAC1E,CAAC;gBACH,CAAC;YACF,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GACZ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACtB,CAAC;gBAAS,CAAC;YACV,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;IACF,CAAC,CACD,CAAC;AACJ,CAAC"}
|
|
@@ -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,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":";;;;;;AAAA,sDAAyB;AACzB,0DAA6B;AAehB,QAAA,cAAc,GAAkB;IAC5C,iBAAiB,EAAE,QAAQ;IAC3B,cAAc,EAAE,SAAS;IACzB,oBAAoB,EAAE,IAAI;IAC1B,UAAU,EAAE,GAAG;IACf,aAAa,EAAE,wBAAwB;IACvC,YAAY,EAAE,GAAG;IACjB,gBAAgB,EAAE,CAAC;IACnB,cAAc,EAAE,CAAC;IACjB,QAAQ,EAAE,OAAO;IACjB,YAAY,EAAE,CAAC,aAAa,EAAE,gBAAgB,EAAE,WAAW,CAAC;CAC5D,CAAC;AAEF,MAAa,aAAa;IACjB,MAAM,CAAgB;IAE9B;QACC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,sBAAc,EAAE,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,OAAe;QACnB,MAAM,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACrD,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO;QAEvC,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,iBAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA2B,CAAC;YAEzD,IAAI,OAAO,MAAM,CAAC,iBAAiB,KAAK,QAAQ;gBAC/C,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;YAC1D,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ;gBAC5C,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;YACpD,IACC,OAAO,MAAM,CAAC,oBAAoB,KAAK,QAAQ;gBAC/C,MAAM,CAAC,oBAAoB,GAAG,CAAC;gBAE/B,IAAI,CAAC,MAAM,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;YAChE,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC;gBACjE,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YAC5C,IAAI,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ;gBAC3C,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;YAClD,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC;gBACrE,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;YAChD,IACC,OAAO,MAAM,CAAC,gBAAgB,KAAK,QAAQ;gBAC3C,MAAM,CAAC,gBAAgB,GAAG,CAAC;gBAE3B,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;YACxD,IACC,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ;gBACzC,MAAM,CAAC,cAAc,GAAG,CAAC;gBAEzB,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;YACpD,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;gBACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YACxC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;gBACxC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY;qBACtC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;qBAC7D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;qBAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACtC,IAAI,YAAY,CAAC,MAAM,KAAK,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;oBACxD,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;gBACzC,CAAC;YACF,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,oCAAoC;QACrC,CAAC;IACF,CAAC;IAEM,GAAG,CAAgC,GAAM;QAC/C,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAEM,MAAM;QACZ,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC3B,CAAC;CACD;AA/DD,sCA+DC;AAEY,QAAA,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC"}
|
|
@@ -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
|
+
}
|