@wb200/mgrep 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +288 -0
- package/dist/commands/login.js +28 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/search.js +191 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/watch.js +134 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/commands/watch_mcp.js +77 -0
- package/dist/commands/watch_mcp.js.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/install/claude-code.js +71 -0
- package/dist/install/claude-code.js.map +1 -0
- package/dist/install/codex.js +116 -0
- package/dist/install/codex.js.map +1 -0
- package/dist/install/droid.js +191 -0
- package/dist/install/droid.js.map +1 -0
- package/dist/install/opencode.js +161 -0
- package/dist/install/opencode.js.map +1 -0
- package/dist/lib/config.js +216 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/context.js +35 -0
- package/dist/lib/context.js.map +1 -0
- package/dist/lib/file.js +154 -0
- package/dist/lib/file.js.map +1 -0
- package/dist/lib/git.js +167 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/logger.js +80 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/model-studio.js +205 -0
- package/dist/lib/model-studio.js.map +1 -0
- package/dist/lib/store.js +639 -0
- package/dist/lib/store.js.map +1 -0
- package/dist/lib/sync-helpers.js +51 -0
- package/dist/lib/sync-helpers.js.map +1 -0
- package/dist/lib/utils.js +300 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/warning.js +34 -0
- package/dist/lib/warning.js.map +1 -0
- package/dist/plugins/mgrep/.claude-plugin/plugin.json +9 -0
- package/dist/plugins/mgrep/hooks/hook.json +27 -0
- package/dist/plugins/mgrep/hooks/mgrep_watch.py +55 -0
- package/dist/plugins/mgrep/hooks/mgrep_watch_kill.py +50 -0
- package/dist/plugins/mgrep/skills/mgrep/SKILL.md +59 -0
- package/package.json +74 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { join, normalize } from "node:path";
|
|
2
|
+
import { Command as CommanderCommand, InvalidArgumentError } from "commander";
|
|
3
|
+
import { loadConfig, } from "../lib/config.js";
|
|
4
|
+
import { createFileSystem, createStore } from "../lib/context.js";
|
|
5
|
+
import { DEFAULT_IGNORE_PATTERNS } from "../lib/file.js";
|
|
6
|
+
import { output } from "../lib/logger.js";
|
|
7
|
+
import { createIndexingSpinner, formatDryRunSummary, } from "../lib/sync-helpers.js";
|
|
8
|
+
import { initialSync, isAtOrAboveHomeDirectory, MaxFileCountExceededError, } from "../lib/utils.js";
|
|
9
|
+
function extractSources(response) {
|
|
10
|
+
const sources = {};
|
|
11
|
+
const answer = response.answer;
|
|
12
|
+
// Match ALL cite tags and capture the i="..."
|
|
13
|
+
const citeTags = answer.match(/<cite i="(\d+(?:-\d+)?)"/g) ?? [];
|
|
14
|
+
for (const tag of citeTags) {
|
|
15
|
+
// Extract the index or index range inside the tag.
|
|
16
|
+
const index = tag.match(/i="(\d+(?:-\d+)?)"/)?.[1];
|
|
17
|
+
if (!index)
|
|
18
|
+
continue;
|
|
19
|
+
// Case 1: Single index
|
|
20
|
+
if (!index.includes("-")) {
|
|
21
|
+
const idx = Number(index);
|
|
22
|
+
if (!Number.isNaN(idx) && idx < response.sources.length) {
|
|
23
|
+
sources[idx] = response.sources[idx];
|
|
24
|
+
}
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
// Case 2: Range "start-end"
|
|
28
|
+
const [start, end] = index.split("-").map(Number);
|
|
29
|
+
if (!Number.isNaN(start) &&
|
|
30
|
+
!Number.isNaN(end) &&
|
|
31
|
+
start >= 0 &&
|
|
32
|
+
end >= start &&
|
|
33
|
+
end < response.sources.length) {
|
|
34
|
+
for (let i = start; i <= end; i++) {
|
|
35
|
+
sources[i] = response.sources[i];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return sources;
|
|
40
|
+
}
|
|
41
|
+
function formatAskResponse(response, show_content) {
|
|
42
|
+
const sources = extractSources(response);
|
|
43
|
+
const sourceEntries = Object.entries(sources).map(([index, chunk]) => `${index}: ${formatChunk(chunk, show_content)}`);
|
|
44
|
+
return `${response.answer}\n\n${sourceEntries.join("\n")}`;
|
|
45
|
+
}
|
|
46
|
+
function formatSearchResponse(response, show_content) {
|
|
47
|
+
return response.data
|
|
48
|
+
.map((chunk) => formatChunk(chunk, show_content))
|
|
49
|
+
.join("\n");
|
|
50
|
+
}
|
|
51
|
+
function formatChunk(chunk, show_content) {
|
|
52
|
+
const pwd = process.cwd();
|
|
53
|
+
const path = chunk.metadata?.path?.replace(pwd, "") ?? "Unknown path";
|
|
54
|
+
const start_line = chunk.generated_metadata?.start_line + 1;
|
|
55
|
+
const end_line = start_line + chunk.generated_metadata?.num_lines - 1;
|
|
56
|
+
const line_range = `:${start_line}-${end_line}`;
|
|
57
|
+
const content = show_content ? chunk.text : "";
|
|
58
|
+
return `.${path}${line_range} (${(chunk.score * 100).toFixed(2)}% match)${content ? `\n${content}` : ""}`;
|
|
59
|
+
}
|
|
60
|
+
function parseBooleanEnv(envVar, defaultValue) {
|
|
61
|
+
if (envVar === undefined)
|
|
62
|
+
return defaultValue;
|
|
63
|
+
const lower = envVar.toLowerCase();
|
|
64
|
+
return lower === "1" || lower === "true" || lower === "yes" || lower === "y";
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Syncs local files to the store with progress indication.
|
|
68
|
+
* @returns true if the caller should return early (dry-run mode), false otherwise
|
|
69
|
+
*/
|
|
70
|
+
async function syncFiles(store, storeName, root, dryRun, config) {
|
|
71
|
+
const { spinner, onProgress } = createIndexingSpinner(root);
|
|
72
|
+
try {
|
|
73
|
+
const fileSystem = createFileSystem({
|
|
74
|
+
ignorePatterns: [...DEFAULT_IGNORE_PATTERNS],
|
|
75
|
+
});
|
|
76
|
+
const result = await initialSync(store, fileSystem, storeName, root, dryRun, onProgress, config);
|
|
77
|
+
while (true) {
|
|
78
|
+
const info = await store.getInfo(storeName);
|
|
79
|
+
spinner.text = `Indexing ${info.counts.pending + info.counts.in_progress} file(s)`;
|
|
80
|
+
if (info.counts.pending === 0 && info.counts.in_progress === 0) {
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
84
|
+
}
|
|
85
|
+
spinner.succeed("Indexing complete");
|
|
86
|
+
if (dryRun) {
|
|
87
|
+
output(formatDryRunSummary(result, {
|
|
88
|
+
actionDescription: "would have indexed",
|
|
89
|
+
}));
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
spinner.stop();
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export const search = new CommanderCommand("search")
|
|
100
|
+
.description("File pattern searcher")
|
|
101
|
+
.option("-i", "Makes the search case-insensitive", false)
|
|
102
|
+
.option("-r", "Recursive search", false)
|
|
103
|
+
.option("-m, --max-count <max_count>", "The maximum number of results to return", process.env.MGREP_MAX_COUNT || "10")
|
|
104
|
+
.option("-c, --content", "Show content of the results", parseBooleanEnv(process.env.MGREP_CONTENT, false))
|
|
105
|
+
.option("-a, --answer", "Generate an answer to the question based on the results", parseBooleanEnv(process.env.MGREP_ANSWER, false))
|
|
106
|
+
.option("-s, --sync", "Syncs the local files to the store before searching", parseBooleanEnv(process.env.MGREP_SYNC, false))
|
|
107
|
+
.option("-d, --dry-run", "Dry run the search process (no actual file syncing)", parseBooleanEnv(process.env.MGREP_DRY_RUN, false))
|
|
108
|
+
.option("--no-rerank", "Disable reranking of search results", parseBooleanEnv(process.env.MGREP_RERANK, true))
|
|
109
|
+
.option("--max-file-size <bytes>", "Maximum file size in bytes to upload", (value) => {
|
|
110
|
+
const parsed = Number.parseInt(value, 10);
|
|
111
|
+
if (Number.isNaN(parsed) || parsed <= 0) {
|
|
112
|
+
throw new InvalidArgumentError("Must be a positive integer.");
|
|
113
|
+
}
|
|
114
|
+
return parsed;
|
|
115
|
+
})
|
|
116
|
+
.option("--max-file-count <count>", "Maximum number of files to upload", (value) => {
|
|
117
|
+
const parsed = Number.parseInt(value, 10);
|
|
118
|
+
if (Number.isNaN(parsed) || parsed <= 0) {
|
|
119
|
+
throw new InvalidArgumentError("Must be a positive integer.");
|
|
120
|
+
}
|
|
121
|
+
return parsed;
|
|
122
|
+
})
|
|
123
|
+
.option("--agentic", "Enable agentic search to automatically refine queries and perform multiple searches", parseBooleanEnv(process.env.MGREP_AGENTIC ?? process.env.MGREP_AGENT, false))
|
|
124
|
+
.argument("<pattern>", "The pattern to search for")
|
|
125
|
+
.argument("[path]", "The path to search in")
|
|
126
|
+
.action(async (pattern, exec_path, _options, cmd) => {
|
|
127
|
+
const options = cmd.optsWithGlobals();
|
|
128
|
+
if (exec_path?.startsWith("--")) {
|
|
129
|
+
exec_path = "";
|
|
130
|
+
}
|
|
131
|
+
const root = process.cwd();
|
|
132
|
+
const cliOptions = {
|
|
133
|
+
maxFileSize: options.maxFileSize,
|
|
134
|
+
maxFileCount: options.maxFileCount,
|
|
135
|
+
};
|
|
136
|
+
const config = loadConfig(root, cliOptions);
|
|
137
|
+
const search_path = exec_path?.startsWith("/")
|
|
138
|
+
? exec_path
|
|
139
|
+
: normalize(join(root, exec_path ?? ""));
|
|
140
|
+
if (options.sync && isAtOrAboveHomeDirectory(search_path)) {
|
|
141
|
+
console.error("Error: Cannot sync home directory or any parent directory.");
|
|
142
|
+
console.error("Please run this command from within a specific project subdirectory.");
|
|
143
|
+
process.exitCode = 1;
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
const store = await createStore();
|
|
148
|
+
if (options.sync) {
|
|
149
|
+
const shouldReturn = await syncFiles(store, options.store, search_path, options.dryRun, config);
|
|
150
|
+
if (shouldReturn) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const storeIds = [options.store];
|
|
155
|
+
const filters = {
|
|
156
|
+
all: [
|
|
157
|
+
{
|
|
158
|
+
key: "path",
|
|
159
|
+
operator: "starts_with",
|
|
160
|
+
value: search_path,
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
};
|
|
164
|
+
const searchOptions = {
|
|
165
|
+
rerank: options.rerank,
|
|
166
|
+
...(options.agentic && { agentic: true }),
|
|
167
|
+
};
|
|
168
|
+
let response;
|
|
169
|
+
if (!options.answer) {
|
|
170
|
+
const results = await store.search(storeIds, pattern, parseInt(options.maxCount, 10), searchOptions, filters);
|
|
171
|
+
response = formatSearchResponse(results, options.content);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
const results = await store.ask(storeIds, pattern, parseInt(options.maxCount, 10), searchOptions, filters);
|
|
175
|
+
response = formatAskResponse(results, options.content);
|
|
176
|
+
}
|
|
177
|
+
output(response);
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
if (error instanceof MaxFileCountExceededError) {
|
|
181
|
+
console.error(`${error.message}`);
|
|
182
|
+
console.error(" Increase the limit with --max-file-count or MGREP_MAX_FILE_COUNT environment variable.\n");
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
186
|
+
console.error(`Failed to search: ${message}`);
|
|
187
|
+
}
|
|
188
|
+
process.exitCode = 1;
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { Command, InvalidArgumentError } from "commander";
|
|
4
|
+
import { loadConfig } from "../lib/config.js";
|
|
5
|
+
import { createFileSystem, createStore } from "../lib/context.js";
|
|
6
|
+
import { DEFAULT_IGNORE_PATTERNS } from "../lib/file.js";
|
|
7
|
+
import { output } from "../lib/logger.js";
|
|
8
|
+
import { createIndexingSpinner, formatDryRunSummary, } from "../lib/sync-helpers.js";
|
|
9
|
+
import { deleteFile, initialSync, isAtOrAboveHomeDirectory, MaxFileCountExceededError, uploadFile, } from "../lib/utils.js";
|
|
10
|
+
export async function startWatch(options) {
|
|
11
|
+
try {
|
|
12
|
+
const store = await createStore();
|
|
13
|
+
const fileSystem = createFileSystem({
|
|
14
|
+
ignorePatterns: [...DEFAULT_IGNORE_PATTERNS],
|
|
15
|
+
});
|
|
16
|
+
const watchRoot = process.cwd();
|
|
17
|
+
if (isAtOrAboveHomeDirectory(watchRoot)) {
|
|
18
|
+
console.error("Error: Cannot watch home directory or any parent directory.");
|
|
19
|
+
console.error("Please run this command from within a specific project subdirectory.");
|
|
20
|
+
process.exitCode = 1;
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const cliOptions = {
|
|
24
|
+
maxFileSize: options.maxFileSize,
|
|
25
|
+
maxFileCount: options.maxFileCount,
|
|
26
|
+
};
|
|
27
|
+
const config = loadConfig(watchRoot, cliOptions);
|
|
28
|
+
console.debug("Watching for file changes in", watchRoot);
|
|
29
|
+
const { spinner, onProgress } = createIndexingSpinner(watchRoot);
|
|
30
|
+
try {
|
|
31
|
+
try {
|
|
32
|
+
await store.retrieve(options.store);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
await store.create({
|
|
36
|
+
name: options.store,
|
|
37
|
+
description: "mgrep local LanceDB store",
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const result = await initialSync(store, fileSystem, options.store, watchRoot, options.dryRun, onProgress, config);
|
|
41
|
+
const deletedInfo = result.deleted > 0 ? ` • deleted ${result.deleted}` : "";
|
|
42
|
+
const errorsInfo = result.errors > 0 ? ` • errors ${result.errors}` : "";
|
|
43
|
+
if (result.errors > 0) {
|
|
44
|
+
spinner.warn(`Initial sync complete (${result.processed}/${result.total}) • uploaded ${result.uploaded}${deletedInfo}${errorsInfo}`);
|
|
45
|
+
console.error(`\n⚠️ ${result.errors} file(s) failed to upload. Run with DEBUG=mgrep* for more details.`);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
spinner.succeed(`Initial sync complete (${result.processed}/${result.total}) • uploaded ${result.uploaded}${deletedInfo}`);
|
|
49
|
+
}
|
|
50
|
+
if (options.dryRun) {
|
|
51
|
+
output(formatDryRunSummary(result, {
|
|
52
|
+
actionDescription: "found",
|
|
53
|
+
includeTotal: true,
|
|
54
|
+
}));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
if (e instanceof MaxFileCountExceededError) {
|
|
60
|
+
spinner.fail("File count exceeded");
|
|
61
|
+
console.error(`\n❌ ${e.message}`);
|
|
62
|
+
console.error(" Increase the limit with --max-file-count or MGREP_MAX_FILE_COUNT environment variable.\n");
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
spinner.fail("Initial upload failed");
|
|
66
|
+
throw e;
|
|
67
|
+
}
|
|
68
|
+
console.log("Watching for file changes in", watchRoot);
|
|
69
|
+
fileSystem.loadMgrepignore(watchRoot);
|
|
70
|
+
fs.watch(watchRoot, { recursive: true }, (eventType, rawFilename) => {
|
|
71
|
+
const filename = rawFilename?.toString();
|
|
72
|
+
if (!filename) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const filePath = path.join(watchRoot, filename);
|
|
76
|
+
if (fileSystem.isIgnored(filePath, watchRoot)) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
const stat = fs.statSync(filePath);
|
|
81
|
+
if (!stat.isFile()) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
uploadFile(store, options.store, filePath, filename, config)
|
|
85
|
+
.then((didUpload) => {
|
|
86
|
+
if (didUpload) {
|
|
87
|
+
console.log(`${eventType}: ${filePath}`);
|
|
88
|
+
}
|
|
89
|
+
})
|
|
90
|
+
.catch((err) => {
|
|
91
|
+
console.error("Failed to upload changed file:", filePath, err);
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
if (filePath.startsWith(watchRoot) && !fs.existsSync(filePath)) {
|
|
96
|
+
deleteFile(store, options.store, filePath)
|
|
97
|
+
.then(() => {
|
|
98
|
+
console.log(`delete: ${filePath}`);
|
|
99
|
+
})
|
|
100
|
+
.catch((err) => {
|
|
101
|
+
console.error("Failed to delete file:", filePath, err);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
109
|
+
console.error("Failed to start watcher:", message);
|
|
110
|
+
process.exitCode = 1;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
export const watch = new Command("watch")
|
|
114
|
+
.option("-d, --dry-run", "Dry run the watch process (no actual file syncing)", false)
|
|
115
|
+
.option("--max-file-size <bytes>", "Maximum file size in bytes to upload", (value) => {
|
|
116
|
+
const parsed = Number.parseInt(value, 10);
|
|
117
|
+
if (Number.isNaN(parsed) || parsed <= 0) {
|
|
118
|
+
throw new InvalidArgumentError("Must be a positive integer.");
|
|
119
|
+
}
|
|
120
|
+
return parsed;
|
|
121
|
+
})
|
|
122
|
+
.option("--max-file-count <count>", "Maximum number of files to upload", (value) => {
|
|
123
|
+
const parsed = Number.parseInt(value, 10);
|
|
124
|
+
if (Number.isNaN(parsed) || parsed <= 0) {
|
|
125
|
+
throw new InvalidArgumentError("Must be a positive integer.");
|
|
126
|
+
}
|
|
127
|
+
return parsed;
|
|
128
|
+
})
|
|
129
|
+
.description("Watch for file changes")
|
|
130
|
+
.action(async (_args, cmd) => {
|
|
131
|
+
const options = cmd.optsWithGlobals();
|
|
132
|
+
await startWatch(options);
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
5
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
6
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
7
|
+
import { Command } from "commander";
|
|
8
|
+
import { startWatch } from "./watch.js";
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = path.dirname(__filename);
|
|
11
|
+
export const watchMcp = new Command("mcp")
|
|
12
|
+
.description("Start MCP server for mgrep")
|
|
13
|
+
.action(async (_options, cmd) => {
|
|
14
|
+
process.on("SIGINT", () => {
|
|
15
|
+
console.error("Received SIGINT, shutting down gracefully...");
|
|
16
|
+
process.exit(0);
|
|
17
|
+
});
|
|
18
|
+
process.on("SIGTERM", () => {
|
|
19
|
+
console.error("Received SIGTERM, shutting down gracefully...");
|
|
20
|
+
process.exit(0);
|
|
21
|
+
});
|
|
22
|
+
// Prevent unhandled promise rejections from crashing the MCP server
|
|
23
|
+
process.on("unhandledRejection", (reason, promise) => {
|
|
24
|
+
console.error("[ERROR] Unhandled Rejection at:", promise, "reason:", reason);
|
|
25
|
+
});
|
|
26
|
+
// The MCP server is writing to stdout, so all logs are written to stderr
|
|
27
|
+
console.log = (...args) => {
|
|
28
|
+
process.stderr.write(`[LOG] ${args.join(" ")}\n`);
|
|
29
|
+
};
|
|
30
|
+
console.error = (...args) => {
|
|
31
|
+
process.stderr.write(`[ERROR] ${args.join(" ")}\n`);
|
|
32
|
+
};
|
|
33
|
+
console.debug = (...args) => {
|
|
34
|
+
process.stderr.write(`[DEBUG] ${args.join(" ")}\n`);
|
|
35
|
+
};
|
|
36
|
+
const options = cmd.optsWithGlobals();
|
|
37
|
+
const packageVersion = JSON.parse(fs.readFileSync(path.join(__dirname, "../../package.json"), {
|
|
38
|
+
encoding: "utf-8",
|
|
39
|
+
})).version;
|
|
40
|
+
const transport = new StdioServerTransport();
|
|
41
|
+
const server = new Server({
|
|
42
|
+
name: "mgrep",
|
|
43
|
+
version: packageVersion,
|
|
44
|
+
}, {
|
|
45
|
+
capabilities: {
|
|
46
|
+
tools: {},
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
50
|
+
return {
|
|
51
|
+
tools: [],
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
server.setRequestHandler(CallToolRequestSchema, async (_request) => {
|
|
55
|
+
return {
|
|
56
|
+
result: "Not implemented",
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
await server.connect(transport);
|
|
60
|
+
const startBackgroundSync = async () => {
|
|
61
|
+
console.log("[SYNC] Scheduling initial sync in 5 seconds...");
|
|
62
|
+
setTimeout(async () => {
|
|
63
|
+
console.log("[SYNC] Starting file sync...");
|
|
64
|
+
try {
|
|
65
|
+
await startWatch({ store: options.store, dryRun: false });
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
69
|
+
console.error("[SYNC] Sync failed:", errorMessage);
|
|
70
|
+
}
|
|
71
|
+
}, 1000);
|
|
72
|
+
};
|
|
73
|
+
startBackgroundSync().catch((error) => {
|
|
74
|
+
console.error("[SYNC] Background sync setup failed:", error);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=watch_mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch_mcp.js","sourceRoot":"","sources":["../../src/commands/watch_mcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACvC,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE;IAC9B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,oEAAoE;IACpE,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACnD,OAAO,CAAC,KAAK,CACX,iCAAiC,EACjC,OAAO,EACP,SAAS,EACT,MAAM,CACP,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,yEAAyE;IACzE,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;QACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC;IAEF,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF,MAAM,OAAO,GAET,GAAG,CAAC,eAAe,EAAE,CAAC;IAE1B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAC/B,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE;QAC1D,QAAQ,EAAE,OAAO;KAClB,CAAC,CACH,CAAC,OAAO,CAAC;IAEV,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,cAAc;KACxB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;SACV;KACF,CACF,CAAC;IACF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QAC1D,OAAO;YACL,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QACjE,OAAO;YACL,MAAM,EAAE,iBAAiB;SAC1B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,MAAM,mBAAmB,GAAG,KAAK,IAAI,EAAE;QACrC,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAE9D,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAC5C,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzD,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;YACrD,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC,CAAC;IAEF,mBAAmB,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACpC,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { program } from "commander";
|
|
6
|
+
import { validate } from "./commands/login.js";
|
|
7
|
+
import { search } from "./commands/search.js";
|
|
8
|
+
import { watch } from "./commands/watch.js";
|
|
9
|
+
import { watchMcp } from "./commands/watch_mcp.js";
|
|
10
|
+
import { installClaudeCode, uninstallClaudeCode, } from "./install/claude-code.js";
|
|
11
|
+
import { installCodex, uninstallCodex } from "./install/codex.js";
|
|
12
|
+
import { installDroid, uninstallDroid } from "./install/droid.js";
|
|
13
|
+
import { installOpencode, uninstallOpencode } from "./install/opencode.js";
|
|
14
|
+
import { setupLogger } from "./lib/logger.js";
|
|
15
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
16
|
+
const __dirname = path.dirname(__filename);
|
|
17
|
+
setupLogger();
|
|
18
|
+
program
|
|
19
|
+
.version(JSON.parse(fs.readFileSync(path.join(__dirname, "../package.json"), {
|
|
20
|
+
encoding: "utf-8",
|
|
21
|
+
})).version)
|
|
22
|
+
.option("--store <string>", "The store to use", process.env.MGREP_STORE || "mgrep");
|
|
23
|
+
program.addCommand(search, { isDefault: true });
|
|
24
|
+
program.addCommand(watch);
|
|
25
|
+
program.addCommand(installClaudeCode);
|
|
26
|
+
program.addCommand(uninstallClaudeCode);
|
|
27
|
+
program.addCommand(installCodex);
|
|
28
|
+
program.addCommand(uninstallCodex);
|
|
29
|
+
program.addCommand(installDroid);
|
|
30
|
+
program.addCommand(uninstallDroid);
|
|
31
|
+
program.addCommand(installOpencode);
|
|
32
|
+
program.addCommand(uninstallOpencode);
|
|
33
|
+
program.addCommand(validate);
|
|
34
|
+
program.addCommand(watchMcp);
|
|
35
|
+
program.parse();
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,WAAW,EAAE,CAAC;AAEd,OAAO;KACJ,OAAO,CACN,IAAI,CAAC,KAAK,CACR,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE;IACvD,QAAQ,EAAE,OAAO;CAClB,CAAC,CACH,CAAC,OAAO,CACV;KACA,MAAM,CACL,kBAAkB,EAClB,kBAAkB,EAClB,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CACnC,CAAC;AAEJ,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAChD,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC1B,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC7B,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAE7B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { exec } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
import { Command } from "commander";
|
|
4
|
+
import { ensureAuthenticated } from "../lib/utils.js";
|
|
5
|
+
import { printInstallWarning } from "../lib/warning.js";
|
|
6
|
+
const shell = process.env.SHELL ||
|
|
7
|
+
(process.platform === "win32" ? process.env.COMSPEC || "cmd.exe" : "/bin/sh");
|
|
8
|
+
const execAsync = promisify(exec);
|
|
9
|
+
async function installPlugin() {
|
|
10
|
+
try {
|
|
11
|
+
await execAsync("claude plugin marketplace add mixedbread-ai/mgrep", {
|
|
12
|
+
shell,
|
|
13
|
+
env: process.env,
|
|
14
|
+
});
|
|
15
|
+
console.log("Successfully added the mixedbread-ai/mgrep plugin to the marketplace");
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
console.error(`Error installing plugin: ${error}`);
|
|
19
|
+
console.error(`Do you have claude-code version 2.0.36 or higher installed?`);
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
await execAsync("claude plugin install mgrep", {
|
|
23
|
+
shell,
|
|
24
|
+
env: process.env,
|
|
25
|
+
});
|
|
26
|
+
console.log("Successfully installed the mgrep plugin");
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
console.error(`Error installing plugin: ${error}`);
|
|
30
|
+
console.error(`Do you have claude-code version 2.0.36 or higher installed?`);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
printInstallWarning("Claude Code", "mgrep uninstall-claude-code");
|
|
34
|
+
}
|
|
35
|
+
async function uninstallPlugin() {
|
|
36
|
+
try {
|
|
37
|
+
await execAsync("claude plugin uninstall mgrep", {
|
|
38
|
+
shell,
|
|
39
|
+
env: process.env,
|
|
40
|
+
});
|
|
41
|
+
console.log("Successfully uninstalled the mgrep plugin");
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.error(`Error uninstalling plugin: ${error}`);
|
|
45
|
+
console.error(`Do you have claude-code version 2.0.36 or higher installed?`);
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
await execAsync("claude plugin marketplace remove mixedbread-ai/mgrep", {
|
|
49
|
+
shell,
|
|
50
|
+
env: process.env,
|
|
51
|
+
});
|
|
52
|
+
console.log("Successfully removed the mixedbread-ai/mgrep plugin from the marketplace");
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
console.error(`Error removing plugin from marketplace: ${error}`);
|
|
56
|
+
console.error(`Do you have claude-code version 2.0.36 or higher installed?`);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export const installClaudeCode = new Command("install-claude-code")
|
|
61
|
+
.description("Install the Claude Code plugin")
|
|
62
|
+
.action(async () => {
|
|
63
|
+
await ensureAuthenticated();
|
|
64
|
+
await installPlugin();
|
|
65
|
+
});
|
|
66
|
+
export const uninstallClaudeCode = new Command("uninstall-claude-code")
|
|
67
|
+
.description("Uninstall the Claude Code plugin")
|
|
68
|
+
.action(async () => {
|
|
69
|
+
await uninstallPlugin();
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=claude-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/install/claude-code.ts"],"names":[],"mappings":"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"}
|