@oomkapwn/enquire-mcp 0.7.4
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/CHANGELOG.md +334 -0
- package/LICENSE +21 -0
- package/README.md +358 -0
- package/SECURITY.md +49 -0
- package/assets/social-preview.png +0 -0
- package/dist/dql.d.ts +37 -0
- package/dist/dql.d.ts.map +1 -0
- package/dist/dql.js +342 -0
- package/dist/dql.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +470 -0
- package/dist/index.js.map +1 -0
- package/dist/parser.d.ts +21 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +107 -0
- package/dist/parser.js.map +1 -0
- package/dist/tools.d.ts +143 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +445 -0
- package/dist/tools.js.map +1 -0
- package/dist/vault.d.ts +72 -0
- package/dist/vault.d.ts.map +1 -0
- package/dist/vault.js +424 -0
- package/dist/vault.js.map +1 -0
- package/docs/api.md +262 -0
- package/package.json +82 -0
package/dist/dql.js
ADDED
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
export class DqlParseError extends Error {
|
|
2
|
+
}
|
|
3
|
+
const KEYWORDS = ["FROM", "WHERE", "SORT", "LIMIT"];
|
|
4
|
+
export function parseDql(input) {
|
|
5
|
+
const trimmed = input.trim().replace(/\s+/g, " ");
|
|
6
|
+
if (!trimmed)
|
|
7
|
+
throw new DqlParseError("Empty query");
|
|
8
|
+
const kindMatch = /^(LIST|TABLE)\b\s*(.*)$/i.exec(trimmed);
|
|
9
|
+
if (!kindMatch || kindMatch[1] === undefined)
|
|
10
|
+
throw new DqlParseError("Query must start with LIST or TABLE");
|
|
11
|
+
const kind = kindMatch[1].toUpperCase();
|
|
12
|
+
const rest = kindMatch[2] ?? "";
|
|
13
|
+
const clauses = splitClauses(rest);
|
|
14
|
+
const columnsRaw = clauses.head;
|
|
15
|
+
const columns = kind === "TABLE"
|
|
16
|
+
? columnsRaw
|
|
17
|
+
.split(",")
|
|
18
|
+
.map((c) => c.trim())
|
|
19
|
+
.filter(Boolean)
|
|
20
|
+
: [];
|
|
21
|
+
if (kind === "LIST" && columnsRaw.trim()) {
|
|
22
|
+
throw new DqlParseError(`LIST does not take columns: got "${columnsRaw}"`);
|
|
23
|
+
}
|
|
24
|
+
const source = parseSource(clauses.from ?? "");
|
|
25
|
+
const where = clauses.where ? parseWhere(clauses.where) : [];
|
|
26
|
+
const sort = clauses.sort ? parseSort(clauses.sort) : undefined;
|
|
27
|
+
const limit = clauses.limit !== undefined ? parseLimit(clauses.limit) : undefined;
|
|
28
|
+
return { kind, columns, source, where, sort, limit };
|
|
29
|
+
}
|
|
30
|
+
function splitClauses(input) {
|
|
31
|
+
const out = { head: "" };
|
|
32
|
+
const parts = [{ kw: "HEAD", content: "" }];
|
|
33
|
+
let lastEnd = 0;
|
|
34
|
+
let i = 0;
|
|
35
|
+
while (i < input.length) {
|
|
36
|
+
const ch = input[i];
|
|
37
|
+
if (ch === '"') {
|
|
38
|
+
i++;
|
|
39
|
+
while (i < input.length && input[i] !== '"') {
|
|
40
|
+
if (input[i] === "\\" && i + 1 < input.length)
|
|
41
|
+
i++;
|
|
42
|
+
i++;
|
|
43
|
+
}
|
|
44
|
+
i++;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const prev = i > 0 ? input[i - 1] : undefined;
|
|
48
|
+
if (i === 0 || (prev !== undefined && /\s/.test(prev))) {
|
|
49
|
+
const remaining = input.slice(i);
|
|
50
|
+
const matched = KEYWORDS.find((k) => {
|
|
51
|
+
if (!remaining.toUpperCase().startsWith(k))
|
|
52
|
+
return false;
|
|
53
|
+
const after = remaining[k.length];
|
|
54
|
+
return after === undefined || /\s/.test(after);
|
|
55
|
+
});
|
|
56
|
+
if (matched) {
|
|
57
|
+
const tail = parts[parts.length - 1];
|
|
58
|
+
if (tail)
|
|
59
|
+
tail.content = input.slice(lastEnd, i).trim();
|
|
60
|
+
parts.push({ kw: matched, content: "" });
|
|
61
|
+
i += matched.length;
|
|
62
|
+
lastEnd = i;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
i++;
|
|
67
|
+
}
|
|
68
|
+
const last = parts[parts.length - 1];
|
|
69
|
+
if (last)
|
|
70
|
+
last.content = input.slice(lastEnd).trim();
|
|
71
|
+
for (const p of parts) {
|
|
72
|
+
if (p.kw === "HEAD")
|
|
73
|
+
out.head = p.content;
|
|
74
|
+
else if (p.kw === "FROM")
|
|
75
|
+
out.from = p.content;
|
|
76
|
+
else if (p.kw === "WHERE")
|
|
77
|
+
out.where = p.content;
|
|
78
|
+
else if (p.kw === "SORT")
|
|
79
|
+
out.sort = p.content;
|
|
80
|
+
else if (p.kw === "LIMIT")
|
|
81
|
+
out.limit = p.content;
|
|
82
|
+
}
|
|
83
|
+
return out;
|
|
84
|
+
}
|
|
85
|
+
function parseSource(raw) {
|
|
86
|
+
const s = raw.trim();
|
|
87
|
+
if (!s)
|
|
88
|
+
return { type: "all" };
|
|
89
|
+
const strMatch = /^"([^"]*)"$/.exec(s);
|
|
90
|
+
if (strMatch && strMatch[1] !== undefined) {
|
|
91
|
+
if (!strMatch[1])
|
|
92
|
+
throw new DqlParseError(`FROM "" is not allowed; omit the FROM clause to scan the whole vault`);
|
|
93
|
+
return { type: "folder", path: strMatch[1] };
|
|
94
|
+
}
|
|
95
|
+
if (s.startsWith("#")) {
|
|
96
|
+
const tag = s.slice(1).trim();
|
|
97
|
+
if (!tag)
|
|
98
|
+
throw new DqlParseError(`FROM # requires a tag name (e.g. FROM #idea)`);
|
|
99
|
+
return { type: "tag", tag };
|
|
100
|
+
}
|
|
101
|
+
throw new DqlParseError(`Unsupported FROM source: ${raw}. Use "folder" or #tag.`);
|
|
102
|
+
}
|
|
103
|
+
function parseWhere(raw) {
|
|
104
|
+
const orClauses = splitOnKeyword(raw, "OR");
|
|
105
|
+
if (orClauses.length === 0)
|
|
106
|
+
throw new DqlParseError(`WHERE clause is empty`);
|
|
107
|
+
const groups = [];
|
|
108
|
+
for (const orClause of orClauses) {
|
|
109
|
+
if (!orClause.trim()) {
|
|
110
|
+
throw new DqlParseError(`WHERE has an empty OR group — check for trailing or duplicated OR`);
|
|
111
|
+
}
|
|
112
|
+
const andClauses = splitOnKeyword(orClause, "AND");
|
|
113
|
+
if (andClauses.length === 0) {
|
|
114
|
+
throw new DqlParseError(`WHERE has an empty AND group — check for trailing or duplicated AND`);
|
|
115
|
+
}
|
|
116
|
+
for (const ac of andClauses) {
|
|
117
|
+
if (!ac.trim()) {
|
|
118
|
+
throw new DqlParseError(`WHERE has an empty predicate — check for trailing or duplicated AND`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
groups.push(andClauses.map(parsePredicate));
|
|
122
|
+
}
|
|
123
|
+
return groups;
|
|
124
|
+
}
|
|
125
|
+
function splitOnKeyword(input, keyword) {
|
|
126
|
+
const out = [];
|
|
127
|
+
let last = 0;
|
|
128
|
+
let i = 0;
|
|
129
|
+
let foundAny = false;
|
|
130
|
+
while (i < input.length) {
|
|
131
|
+
const ch = input[i];
|
|
132
|
+
if (ch === '"') {
|
|
133
|
+
i++;
|
|
134
|
+
while (i < input.length && input[i] !== '"') {
|
|
135
|
+
if (input[i] === "\\" && i + 1 < input.length)
|
|
136
|
+
i++;
|
|
137
|
+
i++;
|
|
138
|
+
}
|
|
139
|
+
i++;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
const prev = i > 0 ? input[i - 1] : undefined;
|
|
143
|
+
if (i === 0 || (prev !== undefined && /\s/.test(prev))) {
|
|
144
|
+
const slice = input.slice(i, i + keyword.length).toUpperCase();
|
|
145
|
+
const after = input[i + keyword.length];
|
|
146
|
+
if (slice === keyword.toUpperCase() && (after === undefined || /\s/.test(after))) {
|
|
147
|
+
out.push(input.slice(last, i).trim());
|
|
148
|
+
i += keyword.length;
|
|
149
|
+
last = i;
|
|
150
|
+
foundAny = true;
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
i++;
|
|
155
|
+
}
|
|
156
|
+
// Always push the tail when we saw at least one separator — preserves trailing-empty so
|
|
157
|
+
// validators upstream (parseWhere) can detect malformed `... OR` / `... AND` queries.
|
|
158
|
+
// When no separator was found at all and the whole thing trims to empty, return [].
|
|
159
|
+
const tail = input.slice(last).trim();
|
|
160
|
+
if (foundAny || tail)
|
|
161
|
+
out.push(tail);
|
|
162
|
+
return out;
|
|
163
|
+
}
|
|
164
|
+
function parsePredicate(raw) {
|
|
165
|
+
const m = /^([\w.]+)\s*(=|!=|contains|like)\s*(.+)$/i.exec(raw.trim());
|
|
166
|
+
if (!m || m[1] === undefined || m[2] === undefined || m[3] === undefined) {
|
|
167
|
+
throw new DqlParseError(`Cannot parse predicate: ${raw}`);
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
field: m[1],
|
|
171
|
+
op: m[2].toLowerCase(),
|
|
172
|
+
value: parseValue(m[3].trim())
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function parseValue(raw) {
|
|
176
|
+
const strMatch = /^"([^"]*)"$/.exec(raw);
|
|
177
|
+
if (strMatch && strMatch[1] !== undefined)
|
|
178
|
+
return strMatch[1];
|
|
179
|
+
if (raw === "true")
|
|
180
|
+
return true;
|
|
181
|
+
if (raw === "false")
|
|
182
|
+
return false;
|
|
183
|
+
if (raw === "null")
|
|
184
|
+
return null;
|
|
185
|
+
if (/^-?\d+(?:\.\d+)?$/.test(raw))
|
|
186
|
+
return Number(raw);
|
|
187
|
+
return raw;
|
|
188
|
+
}
|
|
189
|
+
function parseSort(raw) {
|
|
190
|
+
const m = /^([\w.]+)(?:\s+(ASC|DESC))?$/i.exec(raw.trim());
|
|
191
|
+
if (!m || m[1] === undefined)
|
|
192
|
+
throw new DqlParseError(`Cannot parse SORT: ${raw}`);
|
|
193
|
+
return { field: m[1], dir: m[2]?.toUpperCase() ?? "ASC" };
|
|
194
|
+
}
|
|
195
|
+
function parseLimit(raw) {
|
|
196
|
+
const n = Number(raw.trim());
|
|
197
|
+
if (!Number.isFinite(n) || n <= 0)
|
|
198
|
+
throw new DqlParseError(`Invalid LIMIT: ${raw}`);
|
|
199
|
+
return Math.floor(n);
|
|
200
|
+
}
|
|
201
|
+
export const DEFAULT_DQL_ROW_LIMIT = 1000;
|
|
202
|
+
export async function runDql(vault, query, opts = {}) {
|
|
203
|
+
const defaultLimit = opts.defaultLimit ?? DEFAULT_DQL_ROW_LIMIT;
|
|
204
|
+
const folder = query.source.type === "folder" ? query.source.path : undefined;
|
|
205
|
+
const entries = await vault.listMarkdown(folder);
|
|
206
|
+
const wantTag = query.source.type === "tag" ? query.source.tag.toLowerCase() : null;
|
|
207
|
+
const rows = [];
|
|
208
|
+
for (const entry of entries) {
|
|
209
|
+
const { parsed, mtimeMs } = await vault.readNote(entry.absPath, entry.mtimeMs);
|
|
210
|
+
if (wantTag && !parsed.tags.some((t) => t.toLowerCase() === wantTag))
|
|
211
|
+
continue;
|
|
212
|
+
const fieldVal = (field) => resolveField(field, entry, parsed.frontmatter, parsed.tags, mtimeMs);
|
|
213
|
+
if (!evalWhere(query.where, fieldVal))
|
|
214
|
+
continue;
|
|
215
|
+
const out = {
|
|
216
|
+
"file.path": entry.relPath,
|
|
217
|
+
"file.name": stripMd(entry.basename),
|
|
218
|
+
"file.mtime": new Date(mtimeMs).toISOString()
|
|
219
|
+
};
|
|
220
|
+
if (query.kind === "TABLE") {
|
|
221
|
+
for (const col of query.columns)
|
|
222
|
+
out[col] = fieldVal(col);
|
|
223
|
+
}
|
|
224
|
+
rows.push({ entry, frontmatter: parsed.frontmatter, tags: parsed.tags, mtimeMs, values: out });
|
|
225
|
+
}
|
|
226
|
+
if (query.sort) {
|
|
227
|
+
const { field, dir } = query.sort;
|
|
228
|
+
rows.sort((a, b) => {
|
|
229
|
+
const av = resolveField(field, a.entry, a.frontmatter, a.tags, a.mtimeMs);
|
|
230
|
+
const bv = resolveField(field, b.entry, b.frontmatter, b.tags, b.mtimeMs);
|
|
231
|
+
return compare(av, bv) * (dir === "ASC" ? 1 : -1);
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
const cap = query.limit ?? defaultLimit;
|
|
235
|
+
return rows.slice(0, cap).map((r) => r.values);
|
|
236
|
+
}
|
|
237
|
+
function evalWhere(where, fieldVal) {
|
|
238
|
+
if (where.length === 0)
|
|
239
|
+
return true;
|
|
240
|
+
return where.some((group) => group.every((pred) => evalPredicate(pred, fieldVal(pred.field))));
|
|
241
|
+
}
|
|
242
|
+
function resolveField(field, entry, frontmatter, tags, mtimeMs) {
|
|
243
|
+
switch (field) {
|
|
244
|
+
case "file.name":
|
|
245
|
+
return stripMd(entry.basename);
|
|
246
|
+
case "file.path":
|
|
247
|
+
return entry.relPath;
|
|
248
|
+
case "file.mtime":
|
|
249
|
+
return new Date(mtimeMs).toISOString();
|
|
250
|
+
case "file.tags":
|
|
251
|
+
return tags;
|
|
252
|
+
default:
|
|
253
|
+
return frontmatter[field];
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
function evalPredicate(pred, value) {
|
|
257
|
+
switch (pred.op) {
|
|
258
|
+
case "=":
|
|
259
|
+
if (Array.isArray(value))
|
|
260
|
+
return value.some((v) => looseEq(v, pred.value));
|
|
261
|
+
return looseEq(value, pred.value);
|
|
262
|
+
case "!=":
|
|
263
|
+
if (Array.isArray(value))
|
|
264
|
+
return !value.some((v) => looseEq(v, pred.value));
|
|
265
|
+
return !looseEq(value, pred.value);
|
|
266
|
+
case "contains":
|
|
267
|
+
if (Array.isArray(value)) {
|
|
268
|
+
return value.some((v) => typeof v === "string" &&
|
|
269
|
+
typeof pred.value === "string" &&
|
|
270
|
+
v.toLowerCase().includes(pred.value.toLowerCase()));
|
|
271
|
+
}
|
|
272
|
+
if (typeof value === "string" && typeof pred.value === "string") {
|
|
273
|
+
return value.toLowerCase().includes(pred.value.toLowerCase());
|
|
274
|
+
}
|
|
275
|
+
return false;
|
|
276
|
+
case "like": {
|
|
277
|
+
if (typeof pred.value !== "string")
|
|
278
|
+
return false;
|
|
279
|
+
const re = likeToRegex(pred.value);
|
|
280
|
+
if (Array.isArray(value)) {
|
|
281
|
+
return value.some((v) => typeof v === "string" && re.test(v));
|
|
282
|
+
}
|
|
283
|
+
if (typeof value === "string")
|
|
284
|
+
return re.test(value);
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
function likeToRegex(pattern) {
|
|
290
|
+
// Single-pass walker so escaping is unambiguous:
|
|
291
|
+
// * → .* (SQL-LIKE-style wildcard, any run of chars)
|
|
292
|
+
// \* → \* (literal asterisk; the \ is an escape, dropped)
|
|
293
|
+
// \\ → \\ (literal backslash; the \ escapes the next \)
|
|
294
|
+
// anything else regex-special → escaped
|
|
295
|
+
// biome-ignore lint/suspicious/noTemplateCurlyInString: regex meta-chars list, not a template
|
|
296
|
+
const REGEX_SPECIALS = ".+^${}()|[]";
|
|
297
|
+
let out = "";
|
|
298
|
+
for (let i = 0; i < pattern.length; i++) {
|
|
299
|
+
const ch = pattern[i];
|
|
300
|
+
if (ch === "\\" && i + 1 < pattern.length) {
|
|
301
|
+
// Backslash escapes the next char into a regex-literal of itself.
|
|
302
|
+
const next = pattern[i + 1];
|
|
303
|
+
out += `\\${next}`;
|
|
304
|
+
i++;
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
if (ch === "*") {
|
|
308
|
+
out += ".*";
|
|
309
|
+
continue;
|
|
310
|
+
}
|
|
311
|
+
if (ch !== undefined && REGEX_SPECIALS.includes(ch)) {
|
|
312
|
+
out += `\\${ch}`;
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
out += ch;
|
|
316
|
+
}
|
|
317
|
+
return new RegExp(`^${out}$`, "iu");
|
|
318
|
+
}
|
|
319
|
+
function looseEq(a, b) {
|
|
320
|
+
if (a === b)
|
|
321
|
+
return true;
|
|
322
|
+
if (typeof a === "string" && typeof b === "string")
|
|
323
|
+
return a.toLowerCase() === b.toLowerCase();
|
|
324
|
+
if (a == null || b == null)
|
|
325
|
+
return false;
|
|
326
|
+
return String(a) === String(b);
|
|
327
|
+
}
|
|
328
|
+
function compare(a, b) {
|
|
329
|
+
if (a === b)
|
|
330
|
+
return 0;
|
|
331
|
+
if (a == null)
|
|
332
|
+
return -1;
|
|
333
|
+
if (b == null)
|
|
334
|
+
return 1;
|
|
335
|
+
if (typeof a === "number" && typeof b === "number")
|
|
336
|
+
return a - b;
|
|
337
|
+
return String(a).localeCompare(String(b));
|
|
338
|
+
}
|
|
339
|
+
function stripMd(name) {
|
|
340
|
+
return name.replace(/\.md$/i, "");
|
|
341
|
+
}
|
|
342
|
+
//# sourceMappingURL=dql.js.map
|
package/dist/dql.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dql.js","sourceRoot":"","sources":["../src/dql.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
interface ServeOptions {
|
|
3
|
+
vault: string;
|
|
4
|
+
enableWrite?: boolean;
|
|
5
|
+
maxFileBytes?: string;
|
|
6
|
+
cacheSize?: string;
|
|
7
|
+
persistentCache?: boolean;
|
|
8
|
+
cacheFile?: string;
|
|
9
|
+
}
|
|
10
|
+
declare function main(): Promise<void>;
|
|
11
|
+
declare function startServer(opts: ServeOptions): Promise<void>;
|
|
12
|
+
declare function parsePositiveInt(raw: string, flag: string): number;
|
|
13
|
+
export { main, parsePositiveInt, startServer };
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAyBA,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAqCnC;AAED,iBAAe,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAqD5D;AAocD,iBAAS,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAM3D;AAgCD,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC"}
|