@optiqcode/cli 0.1.12 → 0.1.14
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/dist/mcp-server.js +54 -5
- package/dist/mcp-server.js.map +1 -1
- package/dist/utils.js +10 -3
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
package/dist/mcp-server.js
CHANGED
|
@@ -1,26 +1,69 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
3
|
import { z } from "zod";
|
|
4
|
+
import { watch } from "node:fs";
|
|
5
|
+
import { resolve } from "node:path";
|
|
4
6
|
import * as api from "./api-client.js";
|
|
5
7
|
import { deriveRepoId, collectFiles } from "./utils.js";
|
|
8
|
+
// Track watched directories: repoId -> { path, watcher, debounceTimer }
|
|
9
|
+
const watchers = new Map();
|
|
10
|
+
function startWatching(dirPath, repoId) {
|
|
11
|
+
if (watchers.has(repoId))
|
|
12
|
+
return; // Already watching
|
|
13
|
+
const absPath = resolve(dirPath);
|
|
14
|
+
try {
|
|
15
|
+
const fsWatcher = watch(absPath, { recursive: true }, (_event, filename) => {
|
|
16
|
+
if (!filename)
|
|
17
|
+
return;
|
|
18
|
+
// Skip non-source files
|
|
19
|
+
const lower = filename.toLowerCase();
|
|
20
|
+
if (lower.includes("node_modules") || lower.includes(".git") || lower.startsWith("."))
|
|
21
|
+
return;
|
|
22
|
+
const entry = watchers.get(repoId);
|
|
23
|
+
if (!entry)
|
|
24
|
+
return;
|
|
25
|
+
// Debounce — wait 3s after last change before re-indexing
|
|
26
|
+
if (entry.timer)
|
|
27
|
+
clearTimeout(entry.timer);
|
|
28
|
+
entry.timer = setTimeout(async () => {
|
|
29
|
+
try {
|
|
30
|
+
const files = collectFiles(absPath);
|
|
31
|
+
if (files.length === 0)
|
|
32
|
+
return;
|
|
33
|
+
await api.indexFiles(files, repoId, true, true, false);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// Silent — background reindex failure shouldn't crash MCP
|
|
37
|
+
}
|
|
38
|
+
}, 3000);
|
|
39
|
+
});
|
|
40
|
+
watchers.set(repoId, { path: absPath, watcher: fsWatcher, timer: null });
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Can't watch this directory — skip silently
|
|
44
|
+
}
|
|
45
|
+
}
|
|
6
46
|
export async function startMcpServer() {
|
|
7
47
|
const server = new McpServer({
|
|
8
48
|
name: "optiq",
|
|
9
49
|
version: "0.1.0",
|
|
10
50
|
});
|
|
11
|
-
server.tool("optiq_index", "Index a directory for code search. Reads all source files and uploads them for indexing.", {
|
|
51
|
+
server.tool("optiq_index", "Index a directory for code search. Reads all source files and uploads them for indexing. After first index, the directory is watched for changes and auto-reindexed.", {
|
|
12
52
|
path: z.string().describe("Directory path to index"),
|
|
13
|
-
repo_id: z.string().optional().describe("Repository identifier"),
|
|
14
53
|
fresh: z.boolean().optional().describe("Re-index from scratch"),
|
|
15
54
|
incremental: z.boolean().optional().describe("Incremental indexing"),
|
|
16
|
-
}, async ({ path,
|
|
17
|
-
const repoId =
|
|
55
|
+
}, async ({ path, fresh, incremental }) => {
|
|
56
|
+
const repoId = deriveRepoId(path);
|
|
18
57
|
const files = collectFiles(path);
|
|
19
58
|
if (files.length === 0) {
|
|
20
59
|
return { content: [{ type: "text", text: JSON.stringify({ error: "No indexable files found in " + path }, null, 2) }] };
|
|
21
60
|
}
|
|
22
61
|
const result = await api.indexFiles(files, repoId, true, incremental ?? true, fresh ?? false);
|
|
23
|
-
|
|
62
|
+
// Start watching after successful index
|
|
63
|
+
if (result.status === "queued" || result.status === "running") {
|
|
64
|
+
startWatching(path, repoId);
|
|
65
|
+
}
|
|
66
|
+
return { content: [{ type: "text", text: JSON.stringify({ ...result, files_sent: files.length, watching: watchers.has(repoId) }, null, 2) }] };
|
|
24
67
|
});
|
|
25
68
|
server.tool("optiq_search", "Search indexed code using natural language. Describe what you're looking for in plain English — e.g. 'how does the auth middleware validate tokens' or 'where are database connections configured'. Supports semantic search, symbol filters (symbol:, file:, type:, def:, uses:), and intent hints.", {
|
|
26
69
|
query: z.string().describe("Natural language search query — describe what you're looking for in plain English"),
|
|
@@ -41,6 +84,12 @@ export async function startMcpServer() {
|
|
|
41
84
|
const result = await api.repos();
|
|
42
85
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
43
86
|
});
|
|
87
|
+
// Cleanup watchers on exit
|
|
88
|
+
process.on("exit", () => {
|
|
89
|
+
for (const { watcher } of watchers.values()) {
|
|
90
|
+
watcher.close();
|
|
91
|
+
}
|
|
92
|
+
});
|
|
44
93
|
const transport = new StdioServerTransport();
|
|
45
94
|
await server.connect(transport);
|
|
46
95
|
}
|
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,GAAG,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.js
CHANGED
|
@@ -6,7 +6,14 @@ const IGNORE_DIRS = new Set([
|
|
|
6
6
|
"node_modules", ".git", ".hg", ".svn", "__pycache__", ".next", ".nuxt",
|
|
7
7
|
"dist", "build", "out", ".cache", ".venv", "venv", "env",
|
|
8
8
|
".tox", ".mypy_cache", ".pytest_cache", "coverage", ".turbo",
|
|
9
|
-
"target", "vendor", ".gradle", ".idea", ".vscode",
|
|
9
|
+
"target", "vendor", ".gradle", ".idea", ".vscode", ".vs",
|
|
10
|
+
"DerivedData", "Pods", "Carthage", ".build", ".swiftpm",
|
|
11
|
+
"xcuserdata", "xcshareddata",
|
|
12
|
+
".expo", ".metro",
|
|
13
|
+
"bower_components", ".parcel-cache", ".webpack",
|
|
14
|
+
".serverless", ".terraform", ".pulumi",
|
|
15
|
+
"bin", "obj", "packages", "TestResults",
|
|
16
|
+
".angular", ".sass-cache", "tmp", "temp",
|
|
10
17
|
]);
|
|
11
18
|
const IGNORE_EXTENSIONS = new Set([
|
|
12
19
|
".png", ".jpg", ".jpeg", ".gif", ".bmp", ".ico", ".svg", ".webp",
|
|
@@ -19,8 +26,8 @@ const IGNORE_EXTENSIONS = new Set([
|
|
|
19
26
|
".db", ".sqlite", ".sqlite3",
|
|
20
27
|
".lock", ".map",
|
|
21
28
|
]);
|
|
22
|
-
const MAX_FILE_SIZE =
|
|
23
|
-
const MAX_TOTAL_FILES =
|
|
29
|
+
const MAX_FILE_SIZE = 512 * 1024; // 512KB per file
|
|
30
|
+
const MAX_TOTAL_FILES = 10000;
|
|
24
31
|
function normalizePath(p) {
|
|
25
32
|
let abs = resolve(p);
|
|
26
33
|
const msysMatch = abs.match(/^\/([a-zA-Z])\/(.*)/);
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO;IACtE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK;IACxD,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ;IAC5D,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|