wikimem 0.2.3 → 0.8.0
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 +138 -29
- package/README.md +173 -311
- package/dist/cli/commands/ask.d.ts +3 -0
- package/dist/cli/commands/ask.d.ts.map +1 -0
- package/dist/cli/commands/ask.js +63 -0
- package/dist/cli/commands/ask.js.map +1 -0
- package/dist/cli/commands/export.d.ts +3 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +108 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/history.d.ts +3 -0
- package/dist/cli/commands/history.d.ts.map +1 -0
- package/dist/cli/commands/history.js +61 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/improve.d.ts.map +1 -1
- package/dist/cli/commands/improve.js +4 -3
- package/dist/cli/commands/improve.js.map +1 -1
- package/dist/cli/commands/ingest.d.ts.map +1 -1
- package/dist/cli/commands/ingest.js +5 -4
- package/dist/cli/commands/ingest.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +246 -79
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +4 -3
- package/dist/cli/commands/lint.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts +3 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +11 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/open.d.ts +3 -0
- package/dist/cli/commands/open.d.ts.map +1 -0
- package/dist/cli/commands/open.js +36 -0
- package/dist/cli/commands/open.js.map +1 -0
- package/dist/cli/commands/query.d.ts.map +1 -1
- package/dist/cli/commands/query.js +5 -4
- package/dist/cli/commands/query.js.map +1 -1
- package/dist/cli/commands/search.d.ts +3 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +61 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/serve.js +41 -2
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/watch.d.ts.map +1 -1
- package/dist/cli/commands/watch.js +4 -3
- package/dist/cli/commands/watch.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +27 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/core/audit-trail.d.ts +15 -0
- package/dist/core/audit-trail.d.ts.map +1 -0
- package/dist/core/audit-trail.js +43 -0
- package/dist/core/audit-trail.js.map +1 -0
- package/dist/core/claude-code.d.ts +10 -0
- package/dist/core/claude-code.d.ts.map +1 -0
- package/dist/core/claude-code.js +81 -0
- package/dist/core/claude-code.js.map +1 -0
- package/dist/core/config.d.ts +23 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/connectors.d.ts +58 -0
- package/dist/core/connectors.d.ts.map +1 -0
- package/dist/core/connectors.js +189 -0
- package/dist/core/connectors.js.map +1 -0
- package/dist/core/folder-scanner.d.ts +10 -0
- package/dist/core/folder-scanner.d.ts.map +1 -0
- package/dist/core/folder-scanner.js +84 -0
- package/dist/core/folder-scanner.js.map +1 -0
- package/dist/core/git.d.ts +137 -0
- package/dist/core/git.d.ts.map +1 -0
- package/dist/core/git.js +520 -0
- package/dist/core/git.js.map +1 -0
- package/dist/core/history.d.ts +21 -0
- package/dist/core/history.d.ts.map +1 -0
- package/dist/core/history.js +107 -0
- package/dist/core/history.js.map +1 -0
- package/dist/core/improve.d.ts.map +1 -1
- package/dist/core/improve.js +9 -0
- package/dist/core/improve.js.map +1 -1
- package/dist/core/ingest.d.ts +1 -0
- package/dist/core/ingest.d.ts.map +1 -1
- package/dist/core/ingest.js +78 -5
- package/dist/core/ingest.js.map +1 -1
- package/dist/core/observer.d.ts +71 -0
- package/dist/core/observer.d.ts.map +1 -0
- package/dist/core/observer.js +350 -0
- package/dist/core/observer.js.map +1 -0
- package/dist/core/pipeline-events.d.ts +63 -0
- package/dist/core/pipeline-events.d.ts.map +1 -0
- package/dist/core/pipeline-events.js +109 -0
- package/dist/core/pipeline-events.js.map +1 -0
- package/dist/core/query.d.ts.map +1 -1
- package/dist/core/query.js +16 -8
- package/dist/core/query.js.map +1 -1
- package/dist/core/scraper.d.ts +41 -0
- package/dist/core/scraper.d.ts.map +1 -0
- package/dist/core/scraper.js +277 -0
- package/dist/core/scraper.js.map +1 -0
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp-entry.d.ts +10 -0
- package/dist/mcp-entry.d.ts.map +1 -0
- package/dist/mcp-entry.js +21 -0
- package/dist/mcp-entry.js.map +1 -0
- package/dist/mcp-server.d.ts +15 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +390 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/processors/audio.d.ts.map +1 -1
- package/dist/processors/audio.js +42 -4
- package/dist/processors/audio.js.map +1 -1
- package/dist/processors/pdf.d.ts.map +1 -1
- package/dist/processors/pdf.js +2 -3
- package/dist/processors/pdf.js.map +1 -1
- package/dist/processors/url.js +4 -1
- package/dist/processors/url.js.map +1 -1
- package/dist/providers/claude.d.ts +1 -0
- package/dist/providers/claude.d.ts.map +1 -1
- package/dist/providers/claude.js +5 -3
- package/dist/providers/claude.js.map +1 -1
- package/dist/providers/index.d.ts +17 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +144 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai.d.ts +1 -0
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +5 -3
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/types.d.ts +18 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/templates/config-yaml.d.ts.map +1 -1
- package/dist/templates/config-yaml.js +13 -2
- package/dist/templates/config-yaml.js.map +1 -1
- package/dist/web/public/index.html +8157 -745
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +2101 -29
- package/dist/web/server.js.map +1 -1
- package/package.json +7 -4
- package/scripts/install.sh +54 -0
- package/src/web/public/index.html +8157 -745
- package/templates/mcp-config.json +9 -0
- package/dist/web/public/public/index.html +0 -946
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WikiMem MCP Server — JSON-RPC 2.0 over stdin/stdout.
|
|
3
|
+
*
|
|
4
|
+
* Implements the Model Context Protocol without the SDK dependency.
|
|
5
|
+
* Reads newline-delimited JSON from stdin, writes responses to stdout.
|
|
6
|
+
*
|
|
7
|
+
* Tools exposed:
|
|
8
|
+
* wikimem_search — BM25 keyword search over wiki pages
|
|
9
|
+
* wikimem_read — Read a specific wiki page by title or filename
|
|
10
|
+
* wikimem_list — List all wiki pages with metadata
|
|
11
|
+
* wikimem_status — Vault statistics (page count, words, orphans, …)
|
|
12
|
+
* wikimem_ingest — Ingest a file or URL into the vault (async)
|
|
13
|
+
*/
|
|
14
|
+
import { createInterface } from 'node:readline';
|
|
15
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
16
|
+
import { basename, dirname, join, resolve } from 'node:path';
|
|
17
|
+
import { fileURLToPath } from 'node:url';
|
|
18
|
+
import { getVaultConfig, getVaultStats, listWikiPages, readWikiPage } from './core/vault.js';
|
|
19
|
+
import { searchPages } from './search/index.js';
|
|
20
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
21
|
+
const __dirname = dirname(__filename);
|
|
22
|
+
// ─── MCP Tool definitions ──────────────────────────────────────────────────
|
|
23
|
+
const TOOLS = [
|
|
24
|
+
{
|
|
25
|
+
name: 'wikimem_search',
|
|
26
|
+
description: 'Search wiki pages using BM25 keyword ranking. Returns ranked results with title, path, and a content snippet.',
|
|
27
|
+
inputSchema: {
|
|
28
|
+
type: 'object',
|
|
29
|
+
properties: {
|
|
30
|
+
query: { type: 'string', description: 'Search query' },
|
|
31
|
+
limit: { type: 'number', description: 'Maximum results to return (default 10)' },
|
|
32
|
+
},
|
|
33
|
+
required: ['query'],
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'wikimem_read',
|
|
38
|
+
description: 'Read a specific wiki page by title or filename. Returns frontmatter, full content, wikilinks, and word count.',
|
|
39
|
+
inputSchema: {
|
|
40
|
+
type: 'object',
|
|
41
|
+
properties: {
|
|
42
|
+
title: { type: 'string', description: 'Page title or filename (without .md extension)' },
|
|
43
|
+
},
|
|
44
|
+
required: ['title'],
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'wikimem_list',
|
|
49
|
+
description: 'List all wiki pages in the vault with their title, type, tags, and summary from frontmatter.',
|
|
50
|
+
inputSchema: {
|
|
51
|
+
type: 'object',
|
|
52
|
+
properties: {
|
|
53
|
+
type: {
|
|
54
|
+
type: 'string',
|
|
55
|
+
description: 'Filter by page type (sources | entities | concepts | syntheses). Omit for all pages.',
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'wikimem_status',
|
|
62
|
+
description: 'Get vault statistics: page count, word count, source count, wikilink count, orphan pages, last updated.',
|
|
63
|
+
inputSchema: {
|
|
64
|
+
type: 'object',
|
|
65
|
+
properties: {},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'wikimem_ingest',
|
|
70
|
+
description: 'Ingest a file, folder, or URL into the vault. Spawns the wikimem ingest CLI process.',
|
|
71
|
+
inputSchema: {
|
|
72
|
+
type: 'object',
|
|
73
|
+
properties: {
|
|
74
|
+
source: { type: 'string', description: 'File path, directory path, or URL to ingest' },
|
|
75
|
+
},
|
|
76
|
+
required: ['source'],
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
];
|
|
80
|
+
// ─── Server state ──────────────────────────────────────────────────────────
|
|
81
|
+
let vaultRoot = process.cwd();
|
|
82
|
+
let initialized = false;
|
|
83
|
+
// ─── Tool handlers ─────────────────────────────────────────────────────────
|
|
84
|
+
async function handleToolCall(name, args) {
|
|
85
|
+
const config = getVaultConfig(vaultRoot);
|
|
86
|
+
switch (name) {
|
|
87
|
+
case 'wikimem_search': {
|
|
88
|
+
const query = args['query'];
|
|
89
|
+
const limit = typeof args['limit'] === 'number' ? args['limit'] : 10;
|
|
90
|
+
if (typeof query !== 'string' || !query.trim()) {
|
|
91
|
+
throw { code: -32602, message: 'query must be a non-empty string' };
|
|
92
|
+
}
|
|
93
|
+
const allPages = listWikiPages(config.wikiDir);
|
|
94
|
+
const ranked = await searchPages(query, allPages, { mode: 'bm25', limit });
|
|
95
|
+
const results = ranked.map((path) => {
|
|
96
|
+
try {
|
|
97
|
+
const page = readWikiPage(path);
|
|
98
|
+
const snippet = page.content.slice(0, 300).replace(/\n+/g, ' ').trim();
|
|
99
|
+
return {
|
|
100
|
+
title: page.title,
|
|
101
|
+
path,
|
|
102
|
+
snippet: snippet + (page.content.length > 300 ? '…' : ''),
|
|
103
|
+
type: page.frontmatter['type'] ?? 'unknown',
|
|
104
|
+
tags: page.frontmatter['tags'] ?? [],
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return { title: basename(path, '.md'), path, snippet: '', type: 'unknown', tags: [] };
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
return {
|
|
112
|
+
query,
|
|
113
|
+
count: results.length,
|
|
114
|
+
results,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
case 'wikimem_read': {
|
|
118
|
+
const titleArg = args['title'];
|
|
119
|
+
if (typeof titleArg !== 'string' || !titleArg.trim()) {
|
|
120
|
+
throw { code: -32602, message: 'title must be a non-empty string' };
|
|
121
|
+
}
|
|
122
|
+
const allPages = listWikiPages(config.wikiDir);
|
|
123
|
+
const target = titleArg.toLowerCase();
|
|
124
|
+
// Match by frontmatter title, then by filename stem
|
|
125
|
+
const match = allPages.find((p) => {
|
|
126
|
+
const stem = basename(p, '.md').toLowerCase();
|
|
127
|
+
if (stem === target)
|
|
128
|
+
return true;
|
|
129
|
+
try {
|
|
130
|
+
const page = readWikiPage(p);
|
|
131
|
+
return page.title.toLowerCase() === target;
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
if (!match) {
|
|
138
|
+
// Try fuzzy: find page whose title/stem includes the query
|
|
139
|
+
const fuzzy = allPages.find((p) => {
|
|
140
|
+
const stem = basename(p, '.md').toLowerCase();
|
|
141
|
+
if (stem.includes(target))
|
|
142
|
+
return true;
|
|
143
|
+
try {
|
|
144
|
+
const page = readWikiPage(p);
|
|
145
|
+
return page.title.toLowerCase().includes(target);
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
if (!fuzzy) {
|
|
152
|
+
return {
|
|
153
|
+
found: false,
|
|
154
|
+
message: `No wiki page found matching "${titleArg}"`,
|
|
155
|
+
hint: 'Use wikimem_list to see all available pages or wikimem_search for fuzzy matching',
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
const page = readWikiPage(fuzzy);
|
|
159
|
+
return {
|
|
160
|
+
found: true,
|
|
161
|
+
title: page.title,
|
|
162
|
+
path: fuzzy,
|
|
163
|
+
frontmatter: page.frontmatter,
|
|
164
|
+
content: page.content,
|
|
165
|
+
wikilinks: page.wikilinks,
|
|
166
|
+
wordCount: page.wordCount,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
const page = readWikiPage(match);
|
|
170
|
+
return {
|
|
171
|
+
found: true,
|
|
172
|
+
title: page.title,
|
|
173
|
+
path: match,
|
|
174
|
+
frontmatter: page.frontmatter,
|
|
175
|
+
content: page.content,
|
|
176
|
+
wikilinks: page.wikilinks,
|
|
177
|
+
wordCount: page.wordCount,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
case 'wikimem_list': {
|
|
181
|
+
const typeFilter = typeof args['type'] === 'string' ? args['type'].toLowerCase() : null;
|
|
182
|
+
const allPages = listWikiPages(config.wikiDir);
|
|
183
|
+
const pages = allPages.flatMap((p) => {
|
|
184
|
+
try {
|
|
185
|
+
const page = readWikiPage(p);
|
|
186
|
+
const pageType = typeof page.frontmatter['type'] === 'string'
|
|
187
|
+
? page.frontmatter['type'].toLowerCase()
|
|
188
|
+
: 'unknown';
|
|
189
|
+
if (typeFilter && pageType !== typeFilter)
|
|
190
|
+
return [];
|
|
191
|
+
return [{
|
|
192
|
+
title: page.title,
|
|
193
|
+
path: p,
|
|
194
|
+
type: pageType,
|
|
195
|
+
tags: page.frontmatter['tags'] ?? [],
|
|
196
|
+
summary: page.frontmatter['summary'] ?? '',
|
|
197
|
+
wordCount: page.wordCount,
|
|
198
|
+
updated: page.frontmatter['updated'] ?? '',
|
|
199
|
+
}];
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return [];
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
return {
|
|
206
|
+
vault: vaultRoot,
|
|
207
|
+
count: pages.length,
|
|
208
|
+
filter: typeFilter ?? 'all',
|
|
209
|
+
pages,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
case 'wikimem_status': {
|
|
213
|
+
if (!existsSync(config.schemaPath)) {
|
|
214
|
+
return {
|
|
215
|
+
initialized: false,
|
|
216
|
+
message: 'Not a wikimem vault. Run `wikimem init` first.',
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
const stats = getVaultStats(config);
|
|
220
|
+
return {
|
|
221
|
+
initialized: true,
|
|
222
|
+
vault: vaultRoot,
|
|
223
|
+
pages: stats.pageCount,
|
|
224
|
+
words: stats.wordCount,
|
|
225
|
+
sources: stats.sourceCount,
|
|
226
|
+
wikilinks: stats.wikilinks,
|
|
227
|
+
orphanPages: stats.orphanPages,
|
|
228
|
+
lastUpdated: stats.lastUpdated,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
case 'wikimem_ingest': {
|
|
232
|
+
const source = args['source'];
|
|
233
|
+
if (typeof source !== 'string' || !source.trim()) {
|
|
234
|
+
throw { code: -32602, message: 'source must be a non-empty string' };
|
|
235
|
+
}
|
|
236
|
+
// Spawn the CLI ingest command in a child process
|
|
237
|
+
const { spawn } = await import('node:child_process');
|
|
238
|
+
const wikimemBin = join(__dirname, 'index.js');
|
|
239
|
+
const result = await new Promise((res) => {
|
|
240
|
+
const proc = spawn(process.execPath, [wikimemBin, 'ingest', source, '--vault', vaultRoot], { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
241
|
+
let output = '';
|
|
242
|
+
proc.stdout?.on('data', (d) => { output += d.toString(); });
|
|
243
|
+
proc.stderr?.on('data', (d) => { output += d.toString(); });
|
|
244
|
+
proc.on('close', (code) => res({ success: code === 0, output }));
|
|
245
|
+
proc.on('error', (err) => res({ success: false, output: err.message }));
|
|
246
|
+
});
|
|
247
|
+
return {
|
|
248
|
+
source,
|
|
249
|
+
success: result.success,
|
|
250
|
+
output: result.output.trim(),
|
|
251
|
+
message: result.success
|
|
252
|
+
? `Successfully ingested: ${source}`
|
|
253
|
+
: `Ingest failed. See output for details.`,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
default:
|
|
257
|
+
throw { code: -32601, message: `Unknown tool: ${name}` };
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// ─── JSON-RPC request dispatcher ───────────────────────────────────────────
|
|
261
|
+
async function handleRequest(req) {
|
|
262
|
+
const { id, method, params } = req;
|
|
263
|
+
// Notifications (no id) don't require a response
|
|
264
|
+
if (id === undefined || id === null) {
|
|
265
|
+
if (method === 'notifications/initialized') {
|
|
266
|
+
initialized = true;
|
|
267
|
+
}
|
|
268
|
+
return null;
|
|
269
|
+
}
|
|
270
|
+
try {
|
|
271
|
+
switch (method) {
|
|
272
|
+
case 'initialize': {
|
|
273
|
+
const p = params;
|
|
274
|
+
const clientProtocol = p?.['protocolVersion'] ?? '2024-11-05';
|
|
275
|
+
void clientProtocol; // we accept any version
|
|
276
|
+
return {
|
|
277
|
+
jsonrpc: '2.0',
|
|
278
|
+
id,
|
|
279
|
+
result: {
|
|
280
|
+
protocolVersion: '2024-11-05',
|
|
281
|
+
capabilities: { tools: {} },
|
|
282
|
+
serverInfo: { name: 'wikimem', version: getVersion() },
|
|
283
|
+
},
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
case 'tools/list':
|
|
287
|
+
return {
|
|
288
|
+
jsonrpc: '2.0',
|
|
289
|
+
id,
|
|
290
|
+
result: { tools: TOOLS },
|
|
291
|
+
};
|
|
292
|
+
case 'tools/call': {
|
|
293
|
+
const p = params;
|
|
294
|
+
if (!p?.name) {
|
|
295
|
+
return {
|
|
296
|
+
jsonrpc: '2.0',
|
|
297
|
+
id,
|
|
298
|
+
error: { code: -32602, message: 'Missing tool name in params' },
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
const toolResult = await handleToolCall(p.name, p.arguments ?? {});
|
|
302
|
+
return {
|
|
303
|
+
jsonrpc: '2.0',
|
|
304
|
+
id,
|
|
305
|
+
result: {
|
|
306
|
+
content: [
|
|
307
|
+
{ type: 'text', text: JSON.stringify(toolResult, null, 2) },
|
|
308
|
+
],
|
|
309
|
+
},
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
// Gracefully handle ping and other optional lifecycle methods
|
|
313
|
+
case 'ping':
|
|
314
|
+
return { jsonrpc: '2.0', id, result: {} };
|
|
315
|
+
default:
|
|
316
|
+
return {
|
|
317
|
+
jsonrpc: '2.0',
|
|
318
|
+
id,
|
|
319
|
+
error: { code: -32601, message: `Method not found: ${method}` },
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
catch (err) {
|
|
324
|
+
const rpcErr = err;
|
|
325
|
+
if (typeof rpcErr.code === 'number') {
|
|
326
|
+
return { jsonrpc: '2.0', id, error: { code: rpcErr.code, message: rpcErr.message ?? 'Unknown error' } };
|
|
327
|
+
}
|
|
328
|
+
return {
|
|
329
|
+
jsonrpc: '2.0',
|
|
330
|
+
id,
|
|
331
|
+
error: { code: -32603, message: err instanceof Error ? err.message : String(err) },
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
// ─── Helpers ───────────────────────────────────────────────────────────────
|
|
336
|
+
function getVersion() {
|
|
337
|
+
try {
|
|
338
|
+
const pkgPath = join(__dirname, '..', 'package.json');
|
|
339
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
340
|
+
return pkg.version;
|
|
341
|
+
}
|
|
342
|
+
catch {
|
|
343
|
+
return '0.0.0';
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
function send(response) {
|
|
347
|
+
process.stdout.write(JSON.stringify(response) + '\n');
|
|
348
|
+
}
|
|
349
|
+
// ─── Main entrypoint ───────────────────────────────────────────────────────
|
|
350
|
+
export async function startMcpServer(vault) {
|
|
351
|
+
vaultRoot = resolve(vault);
|
|
352
|
+
// MCP servers must NOT write anything to stdout before receiving initialize.
|
|
353
|
+
// All startup noise goes to stderr.
|
|
354
|
+
process.stderr.write(`[wikimem-mcp] Starting. Vault: ${vaultRoot}\n`);
|
|
355
|
+
const rl = createInterface({ input: process.stdin, terminal: false });
|
|
356
|
+
rl.on('line', (line) => {
|
|
357
|
+
const trimmed = line.trim();
|
|
358
|
+
if (!trimmed)
|
|
359
|
+
return;
|
|
360
|
+
let req;
|
|
361
|
+
try {
|
|
362
|
+
req = JSON.parse(trimmed);
|
|
363
|
+
}
|
|
364
|
+
catch {
|
|
365
|
+
send({
|
|
366
|
+
jsonrpc: '2.0',
|
|
367
|
+
id: null,
|
|
368
|
+
error: { code: -32700, message: 'Parse error: invalid JSON' },
|
|
369
|
+
});
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
handleRequest(req)
|
|
373
|
+
.then((response) => {
|
|
374
|
+
if (response)
|
|
375
|
+
send(response);
|
|
376
|
+
})
|
|
377
|
+
.catch((err) => {
|
|
378
|
+
send({
|
|
379
|
+
jsonrpc: '2.0',
|
|
380
|
+
id: req.id ?? null,
|
|
381
|
+
error: { code: -32603, message: err instanceof Error ? err.message : String(err) },
|
|
382
|
+
});
|
|
383
|
+
});
|
|
384
|
+
});
|
|
385
|
+
rl.on('close', () => {
|
|
386
|
+
process.stderr.write('[wikimem-mcp] stdin closed, shutting down.\n');
|
|
387
|
+
process.exit(0);
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAkBtC,8EAA8E;AAE9E,MAAM,KAAK,GAAG;IACZ;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,+GAA+G;QAC5H,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;gBACtD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE;aACjF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,+GAA+G;QAC5H,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gDAAgD,EAAE;aACzF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,8FAA8F;QAC3G,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sFAAsF;iBACpG;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,yGAAyG;QACtH,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,sFAAsF;QACnG,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE;aACvF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;CACF,CAAC;AAEF,8EAA8E;AAE9E,IAAI,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAC9B,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB,8EAA8E;AAE9E,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,IAA6B;IACvE,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAEzC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC/C,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAC;YACtE,CAAC;YAED,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAE3E,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAClC,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;oBAChC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;oBACvE,OAAO;wBACL,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,IAAI;wBACJ,OAAO,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;wBACzD,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,SAAS;wBAC3C,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE;qBACrC,CAAC;gBACJ,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBACxF,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,OAAO;gBACL,KAAK;gBACL,KAAK,EAAE,OAAO,CAAC,MAAM;gBACrB,OAAO;aACR,CAAC;QACJ,CAAC;QAED,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrD,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAC;YACtE,CAAC;YAED,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;YAEtC,oDAAoD;YACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC9C,IAAI,IAAI,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAC;gBACjC,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;oBAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;gBAC7C,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,2DAA2D;gBAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;oBAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;wBAAE,OAAO,IAAI,CAAC;oBACvC,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;wBAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACnD,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,KAAK,CAAC;oBACf,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO;wBACL,KAAK,EAAE,KAAK;wBACZ,OAAO,EAAE,gCAAgC,QAAQ,GAAG;wBACpD,IAAI,EAAE,kFAAkF;qBACzF,CAAC;gBACJ,CAAC;gBAED,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;gBACjC,OAAO;oBACL,KAAK,EAAE,IAAI;oBACX,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,IAAI,EAAE,KAAK;oBACX,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACjC,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,KAAK;gBACX,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC;QACJ,CAAC;QAED,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACxF,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAE/C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACnC,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;oBAC7B,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,QAAQ;wBAC3D,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;wBACxC,CAAC,CAAC,SAAS,CAAC;oBAEd,IAAI,UAAU,IAAI,QAAQ,KAAK,UAAU;wBAAE,OAAO,EAAE,CAAC;oBAErD,OAAO,CAAC;4BACN,KAAK,EAAE,IAAI,CAAC,KAAK;4BACjB,IAAI,EAAE,CAAC;4BACP,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE;4BACpC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE;4BAC1C,SAAS,EAAE,IAAI,CAAC,SAAS;4BACzB,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE;yBAC3C,CAAC,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,OAAO;gBACL,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,MAAM,EAAE,UAAU,IAAI,KAAK;gBAC3B,KAAK;aACN,CAAC;QACJ,CAAC;QAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnC,OAAO;oBACL,WAAW,EAAE,KAAK;oBAClB,OAAO,EAAE,gDAAgD;iBAC1D,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACpC,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,KAAK,CAAC,SAAS;gBACtB,KAAK,EAAE,KAAK,CAAC,SAAS;gBACtB,OAAO,EAAE,KAAK,CAAC,WAAW;gBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;aAC/B,CAAC;QACJ,CAAC;QAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjD,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC;YACvE,CAAC;YAED,kDAAkD;YAClD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACrD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAuC,CAAC,GAAG,EAAE,EAAE;gBAC7E,MAAM,IAAI,GAAG,KAAK,CAChB,OAAO,CAAC,QAAQ,EAChB,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,EACpD,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CACtC,CAAC;gBAEF,IAAI,MAAM,GAAG,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;gBACjE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;YAEH,OAAO;gBACL,MAAM;gBACN,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;gBAC5B,OAAO,EAAE,MAAM,CAAC,OAAO;oBACrB,CAAC,CAAC,0BAA0B,MAAM,EAAE;oBACpC,CAAC,CAAC,wCAAwC;aAC7C,CAAC;QACJ,CAAC;QAED;YACE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,8EAA8E;AAE9E,KAAK,UAAU,aAAa,CAAC,GAAmB;IAC9C,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEnC,iDAAiD;IACjD,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QACpC,IAAI,MAAM,KAAK,2BAA2B,EAAE,CAAC;YAC3C,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,CAAC,GAAG,MAA6C,CAAC;gBACxD,MAAM,cAAc,GAAI,CAAC,EAAE,CAAC,iBAAiB,CAAY,IAAI,YAAY,CAAC;gBAC1E,KAAK,cAAc,CAAC,CAAC,wBAAwB;gBAE7C,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,EAAE;oBACF,MAAM,EAAE;wBACN,eAAe,EAAE,YAAY;wBAC7B,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;wBAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE;qBACvD;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,YAAY;gBACf,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,EAAE;oBACF,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;iBACzB,CAAC;YAEJ,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,CAAC,GAAG,MAA2E,CAAC;gBACtF,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;oBACb,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,EAAE;wBACF,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,6BAA6B,EAAE;qBAChE,CAAC;gBACJ,CAAC;gBAED,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;gBAEnE,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,EAAE;oBACF,MAAM,EAAE;wBACN,OAAO,EAAE;4BACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;yBAC5D;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,8DAA8D;YAC9D,KAAK,MAAM;gBACT,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAE5C;gBACE,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,EAAE;oBACF,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,qBAAqB,MAAM,EAAE,EAAE;iBAChE,CAAC;QACN,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,GAA0C,CAAC;QAC1D,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,eAAe,EAAE,EAAE,CAAC;QAC1G,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,EAAE;YACF,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SACnF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,8EAA8E;AAE9E,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAwB,CAAC;QAC9E,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAC,QAAyB;IACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa;IAChD,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAE3B,6EAA6E;IAC7E,oCAAoC;IACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,SAAS,IAAI,CAAC,CAAC;IAEtE,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAEtE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,IAAI,GAAmB,CAAC;QACxB,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC;gBACH,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,2BAA2B,EAAE;aAC9D,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,aAAa,CAAC,GAAG,CAAC;aACf,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YACjB,IAAI,QAAQ;gBAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,IAAI,CAAC;gBACH,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,IAAI;gBAClB,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;aACnF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../src/processors/audio.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../src/processors/audio.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAgCzE"}
|
package/dist/processors/audio.js
CHANGED
|
@@ -12,12 +12,17 @@ export async function processAudio(filePath) {
|
|
|
12
12
|
if (!SUPPORTED_EXTENSIONS.has(ext)) {
|
|
13
13
|
throw new Error(`Unsupported audio format: ${ext}. Supported: ${[...SUPPORTED_EXTENSIONS].join(', ')}`);
|
|
14
14
|
}
|
|
15
|
-
// Try
|
|
15
|
+
// Try OpenAI Whisper API first (recommended)
|
|
16
|
+
const openaiKey = process.env['OPENAI_API_KEY'];
|
|
17
|
+
if (openaiKey) {
|
|
18
|
+
return await transcribeWithOpenAIWhisper(filePath, title, openaiKey);
|
|
19
|
+
}
|
|
20
|
+
// Try Deepgram API
|
|
16
21
|
const deepgramKey = process.env['DEEPGRAM_API_KEY'];
|
|
17
22
|
if (deepgramKey) {
|
|
18
23
|
return await transcribeWithDeepgram(filePath, title, deepgramKey);
|
|
19
24
|
}
|
|
20
|
-
// Try local Whisper CLI
|
|
25
|
+
// Try local Whisper CLI (pip install openai-whisper)
|
|
21
26
|
if (isWhisperAvailable()) {
|
|
22
27
|
return await transcribeWithWhisper(filePath, title);
|
|
23
28
|
}
|
|
@@ -29,6 +34,39 @@ export async function processAudio(filePath) {
|
|
|
29
34
|
sourcePath: filePath,
|
|
30
35
|
};
|
|
31
36
|
}
|
|
37
|
+
async function transcribeWithOpenAIWhisper(filePath, title, apiKey) {
|
|
38
|
+
const { createReadStream } = await import('node:fs');
|
|
39
|
+
const FormData = (await import('node:buffer')).Blob ? null : null;
|
|
40
|
+
const audioData = readFileSync(filePath);
|
|
41
|
+
const ext = extname(filePath).toLowerCase();
|
|
42
|
+
const boundary = '----WikiMemBoundary' + Date.now();
|
|
43
|
+
const filename = basename(filePath);
|
|
44
|
+
const contentType = getContentType(ext);
|
|
45
|
+
const prefix = Buffer.from(`--${boundary}\r\nContent-Disposition: form-data; name="file"; filename="${filename}"\r\nContent-Type: ${contentType}\r\n\r\n`);
|
|
46
|
+
const suffix = Buffer.from(`\r\n--${boundary}\r\nContent-Disposition: form-data; name="model"\r\n\r\nwhisper-1\r\n--${boundary}\r\nContent-Disposition: form-data; name="response_format"\r\n\r\ntext\r\n--${boundary}--\r\n`);
|
|
47
|
+
const body = Buffer.concat([prefix, audioData, suffix]);
|
|
48
|
+
const response = await fetch('https://api.openai.com/v1/audio/transcriptions', {
|
|
49
|
+
method: 'POST',
|
|
50
|
+
headers: {
|
|
51
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
52
|
+
'Content-Type': `multipart/form-data; boundary=${boundary}`,
|
|
53
|
+
},
|
|
54
|
+
body,
|
|
55
|
+
});
|
|
56
|
+
if (!response.ok) {
|
|
57
|
+
const errText = await response.text().catch(() => '');
|
|
58
|
+
throw new Error(`OpenAI Whisper API error: ${response.status} ${errText.substring(0, 200)}`);
|
|
59
|
+
}
|
|
60
|
+
const transcript = (await response.text()).trim();
|
|
61
|
+
const duration = getDuration(filePath);
|
|
62
|
+
return {
|
|
63
|
+
title,
|
|
64
|
+
transcript,
|
|
65
|
+
markdown: buildMarkdown(title, filePath, transcript, duration),
|
|
66
|
+
duration,
|
|
67
|
+
sourcePath: filePath,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
32
70
|
async function transcribeWithWhisper(filePath, title) {
|
|
33
71
|
const tmpOutput = join(tmpdir(), `wikimem-whisper-${Date.now()}`);
|
|
34
72
|
const result = spawnSync('whisper', [
|
|
@@ -71,8 +109,8 @@ async function transcribeWithDeepgram(filePath, title, apiKey) {
|
|
|
71
109
|
throw new Error(`Deepgram API error: ${response.status} ${response.statusText}`);
|
|
72
110
|
}
|
|
73
111
|
const data = (await response.json());
|
|
74
|
-
const transcript = data.results
|
|
75
|
-
const durationSec = data.metadata
|
|
112
|
+
const transcript = data.results?.channels?.[0]?.alternatives?.[0]?.transcript ?? '';
|
|
113
|
+
const durationSec = data.metadata?.duration;
|
|
76
114
|
const duration = durationSec ? formatDuration(durationSec) : undefined;
|
|
77
115
|
return {
|
|
78
116
|
title,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio.js","sourceRoot":"","sources":["../../src/processors/audio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAUjC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhG,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAEtC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,gBAAgB,CAAC,GAAG,oBAAoB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1G,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"audio.js","sourceRoot":"","sources":["../../src/processors/audio.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../src/processors/pdf.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../src/processors/pdf.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAyBrE"}
|
package/dist/processors/pdf.js
CHANGED
|
@@ -7,9 +7,8 @@ export async function processPdf(filePath) {
|
|
|
7
7
|
const title = basename(filePath, '.pdf');
|
|
8
8
|
const buffer = readFileSync(filePath);
|
|
9
9
|
try {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const pdfParse = require('pdf-parse');
|
|
10
|
+
const pdfParseModule = await import('pdf-parse');
|
|
11
|
+
const pdfParse = (pdfParseModule.default ?? pdfParseModule);
|
|
13
12
|
const data = await pdfParse(buffer);
|
|
14
13
|
const content = data.text.trim();
|
|
15
14
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../src/processors/pdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAUrC,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAEtC,IAAI,CAAC;QACH,
|
|
1
|
+
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../src/processors/pdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAUrC,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,CAAC,cAAc,CAAC,OAAO,IAAI,cAAc,CAAgG,CAAC;QAC3J,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAEjC,OAAO;YACL,KAAK;YACL,OAAO;YACP,QAAQ,EAAE,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;YAChE,SAAS,EAAE,IAAI,CAAC,QAAQ;YACxB,UAAU,EAAE,QAAQ;SACrB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,KAAK;YACL,OAAO,EAAE,SAAS,KAAK,4BAA4B;YACnD,QAAQ,EAAE,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,0DAA0D,CAAC;YACpG,UAAU,EAAE,QAAQ;SACrB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,QAAgB,EAAE,OAAe,EAAE,SAAkB;IACzF,OAAO,KAAK,KAAK;;iBAEF,QAAQ,CAAC,QAAQ,CAAC,KAAK,QAAQ;iBAC/B,SAAS,CAAC,CAAC,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;mBAC5C,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;;;EAIvD,OAAO;CACR,CAAC;AACF,CAAC"}
|
package/dist/processors/url.js
CHANGED
|
@@ -23,8 +23,11 @@ async function processWithFirecrawl(url, apiKey) {
|
|
|
23
23
|
throw new Error(`Firecrawl API error: ${response.status}`);
|
|
24
24
|
}
|
|
25
25
|
const data = (await response.json());
|
|
26
|
+
if (!data.data?.markdown) {
|
|
27
|
+
throw new Error(`Firecrawl returned no content for ${url}`);
|
|
28
|
+
}
|
|
26
29
|
return {
|
|
27
|
-
title: data.data.metadata
|
|
30
|
+
title: data.data.metadata?.title ?? new URL(url).hostname,
|
|
28
31
|
content: data.data.markdown,
|
|
29
32
|
url,
|
|
30
33
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/processors/url.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,8CAA8C;IAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACtD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,MAAM,oBAAoB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACvD,CAAC;IAED,qCAAqC;IACrC,OAAO,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,GAAW,EAAE,MAAc;IAC7D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,qCAAqC,EAAE;QAClE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,UAAU,MAAM,EAAE;SACpC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,GAAG;YACH,OAAO,EAAE,CAAC,UAAU,CAAC;SACtB,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/processors/url.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ export declare class ClaudeProvider implements LLMProvider {
|
|
|
3
3
|
name: string;
|
|
4
4
|
private client;
|
|
5
5
|
private defaultModel;
|
|
6
|
+
private readonly resolvedApiKey;
|
|
6
7
|
constructor(model?: string, apiKey?: string);
|
|
7
8
|
chat(messages: LLMMessage[], options?: LLMOptions): Promise<LLMResponse>;
|
|
8
9
|
isAvailable(): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/providers/claude.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnF,qBAAa,cAAe,YAAW,WAAW;IAChD,IAAI,SAAY;IAChB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,YAAY,CAAS;
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/providers/claude.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnF,qBAAa,cAAe,YAAW,WAAW;IAChD,IAAI,SAAY;IAChB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;gBAExC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAQrC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAkExE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAGtC"}
|
package/dist/providers/claude.js
CHANGED
|
@@ -3,14 +3,16 @@ export class ClaudeProvider {
|
|
|
3
3
|
name = 'claude';
|
|
4
4
|
client;
|
|
5
5
|
defaultModel;
|
|
6
|
+
resolvedApiKey;
|
|
6
7
|
constructor(model, apiKey) {
|
|
8
|
+
this.resolvedApiKey = apiKey ?? process.env['ANTHROPIC_API_KEY'];
|
|
7
9
|
this.client = new Anthropic({
|
|
8
|
-
apiKey:
|
|
10
|
+
apiKey: this.resolvedApiKey,
|
|
9
11
|
});
|
|
10
12
|
this.defaultModel = model ?? 'claude-sonnet-4-20250514';
|
|
11
13
|
}
|
|
12
14
|
async chat(messages, options) {
|
|
13
|
-
if (!
|
|
15
|
+
if (!this.resolvedApiKey) {
|
|
14
16
|
throw new Error('Anthropic API key not found.\n' +
|
|
15
17
|
'Set it via: export ANTHROPIC_API_KEY=sk-ant-...\n' +
|
|
16
18
|
'Or add to config.yaml: api_key: sk-ant-...\n' +
|
|
@@ -63,7 +65,7 @@ export class ClaudeProvider {
|
|
|
63
65
|
}
|
|
64
66
|
}
|
|
65
67
|
async isAvailable() {
|
|
66
|
-
return !!
|
|
68
|
+
return !!this.resolvedApiKey;
|
|
67
69
|
}
|
|
68
70
|
}
|
|
69
71
|
//# sourceMappingURL=claude.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/providers/claude.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAG1C,MAAM,OAAO,cAAc;IACzB,IAAI,GAAG,QAAQ,CAAC;IACR,MAAM,CAAY;IAClB,YAAY,CAAS;
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/providers/claude.ts"],"names":[],"mappings":"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"}
|