@agent-wiki/mcp-server 0.3.3 → 0.4.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/README.md CHANGED
@@ -30,7 +30,7 @@ The key insight: **LLMs are better editors than search engines.** Let them curat
30
30
  | **Memory** | Stateless — forgets after each query | Persistent — knowledge accumulates |
31
31
  | **Quality** | Raw chunks, often noisy | Curated, structured, interlinked |
32
32
  | **Cost** | Embedding + retrieval every query | One-time compilation, free reads |
33
- | **Contradictions** | Invisible — buried in source docs | Detected automatically by lint |
33
+ | **Contradictions** | Invisible — buried in source docs | Surface-level conflicts flagged by lint (dates, numbers) |
34
34
  | **Source tracking** | Lost after retrieval | Full provenance chain (raw → wiki) |
35
35
 
36
36
  ## Architecture
@@ -119,9 +119,9 @@ Resolution priority: CLI `--workspace` > `AGENT_WIKI_WORKSPACE` env > config fil
119
119
 
120
120
  ### Self-Checking Lint Engine
121
121
 
122
- No human review needed. The lint system catches problems automatically:
122
+ The lint system catches common problems automatically:
123
123
 
124
- - **Contradictions** — conflicting dates, numbers, and claims across pages
124
+ - **Contradictions** — detects conflicting dates and numeric claims across pages (regex + local-context heuristic — useful for catching obvious conflicts, not a substitute for human review)
125
125
  - **Orphan pages** — pages with no incoming links
126
126
  - **Broken links** — `[[page]]` references to non-existent pages
127
127
  - **Missing sources** — wiki claims not traceable to raw documents
@@ -149,7 +149,7 @@ Pure heuristic — no LLM calls, no API keys, zero latency. Supports English and
149
149
  | `raw_add` | Add a source document (content string or local file copy, SHA-256 hashed, .meta.yaml sidecar) |
150
150
  | `raw_fetch` | Download from URL to raw/ (smart arXiv handling, auto-provenance) |
151
151
  | `raw_list` | List all raw documents with metadata (path, source URL, hash, size) |
152
- | `raw_read` | Read a raw document's content and metadata |
152
+ | `raw_read` | Read a raw document — text/SVG return content; PDF/DOCX/XLSX/PPTX extracted via Python preprocessor; other binary files return metadata only |
153
153
  | `raw_verify` | Verify integrity of all raw files via SHA-256 re-check |
154
154
 
155
155
  ### Wiki Layer — Compiled Knowledge
@@ -233,7 +233,7 @@ npx @agent-wiki/mcp-server lint # run health checks
233
233
  1. **Raw is immutable** — Source documents are write-once, SHA-256 verified. The ground truth never changes.
234
234
  2. **Wiki is mutable** — Compiled knowledge improves with every interaction. Pages are refined, not replaced.
235
235
  3. **No LLM dependency** — Zero API keys, zero cost per operation. The agent calling the tools IS the intelligence.
236
- 4. **Self-checking** — Lint catches contradictions, broken links, and integrity issues without human review.
236
+ 4. **Self-checking** — Lint catches structural issues (broken links, orphans, stale pages) and flags potential contradictions via heuristic pattern matching. Semantic review still benefits from human or LLM judgment.
237
237
  5. **Knowledge compounds** — Every write enriches the whole wiki. Synthesis creates higher-order understanding.
238
238
  6. **Provenance matters** — Every wiki claim traces back to raw sources. No hallucination without accountability.
239
239
  7. **Code and data separate** — Configurable workspace keeps your knowledge portable and independent.
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAWnE,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CA6U1E;AAyLD,wBAAsB,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpF"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAWnE,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CA6U1E;AAqMD,wBAAsB,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpF"}
package/dist/server.js CHANGED
@@ -69,7 +69,7 @@ export function createServer(wikiPath, workspace) {
69
69
  },
70
70
  {
71
71
  name: "raw_read",
72
- description: "Read a raw source document's content and metadata. Raw files are immutable — this is read-only.",
72
+ description: "Read a raw source document's content and metadata. Raw files are immutable — this is read-only. Text/SVG files return content as string; document files (PDF, DOCX, XLSX, PPTX) have text extracted automatically; other binary files (images, etc.) return metadata only.",
73
73
  inputSchema: {
74
74
  type: "object",
75
75
  properties: {
@@ -340,14 +340,23 @@ async function handleTool(wiki, name, args) {
340
340
  return JSON.stringify({ documents: docs, count: docs.length }, null, 2);
341
341
  }
342
342
  case "raw_read": {
343
- const result = wiki.rawRead(args.filename);
343
+ const result = await wiki.rawRead(args.filename);
344
344
  if (!result)
345
345
  return `Raw file not found: ${args.filename}`;
346
+ if (result.binary) {
347
+ return JSON.stringify({
348
+ meta: result.meta,
349
+ binary: true,
350
+ note: `Binary file (${result.meta?.mimeType ?? "unknown type"}, ${result.meta?.size != null ? result.meta.size + " bytes" : "unknown size"}). Content cannot be read as text. Use the file path directly if you need to process it.`,
351
+ }, null, 2);
352
+ }
353
+ const content = result.content;
346
354
  return JSON.stringify({
347
355
  meta: result.meta,
348
- content: result.content.length > 10000
349
- ? result.content.slice(0, 10000) + "\n\n... (truncated, " + result.content.length + " chars total)"
350
- : result.content,
356
+ binary: false,
357
+ content: content.length > 10000
358
+ ? content.slice(0, 10000) + "\n\n... (truncated, " + content.length + " chars total)"
359
+ : content,
351
360
  }, null, 2);
352
361
  }
353
362
  case "raw_verify": {
@@ -375,8 +384,11 @@ async function handleTool(wiki, name, args) {
375
384
  const page = wiki.read(args.page);
376
385
  if (!page)
377
386
  return `Page not found: ${args.page}`;
387
+ // wiki.read() already validates the path via safePath, so we
388
+ // reconstruct the full path from wiki.config + validated pagePath
389
+ const fullPath = join(wiki.config.wikiDir, page.path);
378
390
  try {
379
- return readFileSync(join(wiki.config.wikiDir, args.page), "utf-8");
391
+ return readFileSync(fullPath, "utf-8");
380
392
  }
381
393
  catch {
382
394
  return `Page not found: ${args.page}`;
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Tests for MCP server tool handlers.
3
+ *
4
+ * These test the handleTool dispatch and JSON serialization
5
+ * without starting a real MCP transport.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=server.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.test.d.ts","sourceRoot":"","sources":["../src/server.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Tests for MCP server tool handlers.
3
+ *
4
+ * These test the handleTool dispatch and JSON serialization
5
+ * without starting a real MCP transport.
6
+ */
7
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
8
+ import { existsSync, rmSync } from "node:fs";
9
+ import { join } from "node:path";
10
+ import { Wiki } from "./wiki.js";
11
+ const TEST_ROOT = join(import.meta.dirname ?? ".", "__test_server__");
12
+ function freshWiki() {
13
+ return Wiki.init(TEST_ROOT);
14
+ }
15
+ function cleanUp() {
16
+ if (existsSync(TEST_ROOT)) {
17
+ rmSync(TEST_ROOT, { recursive: true, force: true });
18
+ }
19
+ }
20
+ // We test the Wiki methods that the server handlers call,
21
+ // since createServer() requires MCP transport setup.
22
+ // This verifies the data layer that backs every tool.
23
+ describe("server tool: raw_add + raw_list", () => {
24
+ beforeEach(cleanUp);
25
+ afterEach(cleanUp);
26
+ it("add then list returns the document", () => {
27
+ const wiki = freshWiki();
28
+ wiki.rawAdd("article.md", {
29
+ content: "# Article\nBody text.",
30
+ sourceUrl: "https://example.com/article",
31
+ description: "Test article",
32
+ tags: ["test"],
33
+ });
34
+ const docs = wiki.rawList();
35
+ expect(docs).toHaveLength(1);
36
+ expect(docs[0].path).toBe("article.md");
37
+ expect(docs[0].sourceUrl).toBe("https://example.com/article");
38
+ });
39
+ });
40
+ describe("server tool: raw_read", () => {
41
+ beforeEach(cleanUp);
42
+ afterEach(cleanUp);
43
+ it("reads text content", async () => {
44
+ const wiki = freshWiki();
45
+ wiki.rawAdd("text.txt", { content: "Hello MCP" });
46
+ const result = await wiki.rawRead("text.txt");
47
+ expect(result.binary).toBe(false);
48
+ expect(result.content).toBe("Hello MCP");
49
+ });
50
+ });
51
+ describe("server tool: raw_verify", () => {
52
+ beforeEach(cleanUp);
53
+ afterEach(cleanUp);
54
+ it("validates integrity", () => {
55
+ const wiki = freshWiki();
56
+ wiki.rawAdd("ok.txt", { content: "safe" });
57
+ const results = wiki.rawVerify();
58
+ expect(results.every(r => r.status === "ok")).toBe(true);
59
+ });
60
+ });
61
+ describe("server tool: wiki_write + wiki_read", () => {
62
+ beforeEach(cleanUp);
63
+ afterEach(cleanUp);
64
+ it("write then read round-trips", () => {
65
+ const wiki = freshWiki();
66
+ wiki.write("note-test.md", "---\ntitle: Note\ntype: note\n---\nTest body.");
67
+ const page = wiki.read("note-test.md");
68
+ expect(page.title).toBe("Note");
69
+ expect(page.content).toContain("Test body.");
70
+ });
71
+ });
72
+ describe("server tool: wiki_delete", () => {
73
+ beforeEach(cleanUp);
74
+ afterEach(cleanUp);
75
+ it("deletes a page", () => {
76
+ const wiki = freshWiki();
77
+ wiki.write("deleteme.md", "---\ntitle: D\n---\nBody");
78
+ expect(wiki.delete("deleteme.md")).toBe(true);
79
+ expect(wiki.read("deleteme.md")).toBeNull();
80
+ });
81
+ });
82
+ describe("server tool: wiki_list", () => {
83
+ beforeEach(cleanUp);
84
+ afterEach(cleanUp);
85
+ it("lists pages with filter", () => {
86
+ const wiki = freshWiki();
87
+ wiki.write("concept-x.md", "---\ntitle: X\ntype: concept\n---\nX");
88
+ wiki.write("event-y.md", "---\ntitle: Y\ntype: event\n---\nY");
89
+ const concepts = wiki.list("concept");
90
+ expect(concepts).toContain("concept-x.md");
91
+ expect(concepts).not.toContain("event-y.md");
92
+ });
93
+ });
94
+ describe("server tool: wiki_search", () => {
95
+ beforeEach(cleanUp);
96
+ afterEach(cleanUp);
97
+ it("finds by keyword", () => {
98
+ const wiki = freshWiki();
99
+ wiki.write("search-target.md", "---\ntitle: Transformer Architecture\n---\nAttention is all you need.");
100
+ const results = wiki.search("attention");
101
+ expect(results.length).toBeGreaterThan(0);
102
+ expect(results[0].path).toBe("search-target.md");
103
+ });
104
+ });
105
+ describe("server tool: wiki_lint", () => {
106
+ beforeEach(cleanUp);
107
+ afterEach(cleanUp);
108
+ it("returns a valid report", () => {
109
+ const wiki = freshWiki();
110
+ wiki.write("lint-target.md", "---\ntitle: Lint Target\ntype: concept\n---\nSee [[broken-link]].");
111
+ const report = wiki.lint();
112
+ expect(report.pagesChecked).toBeGreaterThan(0);
113
+ expect(report.issues.some(i => i.category === "broken-link")).toBe(true);
114
+ });
115
+ });
116
+ describe("server tool: wiki_classify", () => {
117
+ beforeEach(cleanUp);
118
+ afterEach(cleanUp);
119
+ it("classifies content", () => {
120
+ const wiki = freshWiki();
121
+ const result = wiki.classify("---\ntitle: Step by Step Guide\n---\nStep 1: Do this. Step 2: Do that. Install the software.");
122
+ expect(result.type).toBe("how-to");
123
+ expect(result.confidence).toBeGreaterThan(0);
124
+ });
125
+ });
126
+ describe("server tool: wiki_synthesize", () => {
127
+ beforeEach(cleanUp);
128
+ afterEach(cleanUp);
129
+ it("synthesizes context from pages", () => {
130
+ const wiki = freshWiki();
131
+ wiki.write("src-1.md", "---\ntitle: Source 1\ntags: [ai]\n---\nInsight one.");
132
+ wiki.write("src-2.md", "---\ntitle: Source 2\ntags: [ml]\n---\nInsight two.");
133
+ const ctx = wiki.synthesizeContext(["src-1.md", "src-2.md"]);
134
+ expect(ctx.pages).toHaveLength(2);
135
+ expect(ctx.suggestions.length).toBeGreaterThan(0);
136
+ });
137
+ });
138
+ describe("server tool: wiki_schemas", () => {
139
+ beforeEach(cleanUp);
140
+ afterEach(cleanUp);
141
+ it("returns all schemas", () => {
142
+ const wiki = freshWiki();
143
+ const schemas = wiki.schemas();
144
+ expect(schemas.length).toBe(9);
145
+ });
146
+ });
147
+ describe("server tool: wiki_log", () => {
148
+ beforeEach(cleanUp);
149
+ afterEach(cleanUp);
150
+ it("returns log entries", () => {
151
+ const wiki = freshWiki();
152
+ wiki.write("log-page.md", "---\ntitle: L\n---\nBody");
153
+ const log = wiki.getLog(5);
154
+ expect(log.length).toBeGreaterThan(0);
155
+ });
156
+ });
157
+ describe("server tool: wiki_rebuild_index + wiki_rebuild_timeline", () => {
158
+ beforeEach(cleanUp);
159
+ afterEach(cleanUp);
160
+ it("rebuilds without error", () => {
161
+ const wiki = freshWiki();
162
+ wiki.write("p1.md", "---\ntitle: P1\ntype: concept\n---\nX");
163
+ expect(() => wiki.rebuildIndex()).not.toThrow();
164
+ expect(() => wiki.rebuildTimeline()).not.toThrow();
165
+ });
166
+ });
167
+ describe("server tool: wiki_config", () => {
168
+ beforeEach(cleanUp);
169
+ afterEach(cleanUp);
170
+ it("returns config object", () => {
171
+ const wiki = freshWiki();
172
+ const cfg = wiki.config;
173
+ expect(cfg.configRoot).toBe(TEST_ROOT);
174
+ expect(cfg.wikiDir).toContain("wiki");
175
+ expect(cfg.rawDir).toContain("raw");
176
+ });
177
+ });
178
+ //# sourceMappingURL=server.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.test.js","sourceRoot":"","sources":["../src/server.test.ts"],"names":[],"mappings":"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"}
package/dist/wiki.d.ts CHANGED
@@ -86,6 +86,12 @@ export interface WikiConfig {
86
86
  checkIntegrity: boolean;
87
87
  };
88
88
  }
89
+ /**
90
+ * Validate that a user-supplied relative path stays within the base directory.
91
+ * Prevents directory traversal attacks (e.g. "../../etc/passwd").
92
+ * Returns the resolved absolute path if safe, throws otherwise.
93
+ */
94
+ export declare function safePath(base: string, userPath: string): string;
89
95
  export declare class Wiki {
90
96
  readonly config: WikiConfig;
91
97
  /**
@@ -127,11 +133,16 @@ export declare class Wiki {
127
133
  }): RawDocument;
128
134
  /** List all raw documents with metadata. */
129
135
  rawList(): RawDocument[];
130
- /** Read a raw document's content. */
131
- rawRead(filename: string): {
132
- content: string;
136
+ /** Read a raw document's content and metadata.
137
+ * Text/SVG/JSON/XML files return content as UTF-8 string.
138
+ * Document files (PDF, DOCX, XLSX, PPTX) are extracted via Node.js libraries.
139
+ * Other binary files (images, etc.) return metadata only. */
140
+ rawRead(filename: string): Promise<{
141
+ content: string | null;
133
142
  meta: RawDocument | null;
134
- } | null;
143
+ binary: boolean;
144
+ note?: string;
145
+ } | null>;
135
146
  /** Verify integrity of all raw files against their stored hashes. */
136
147
  rawVerify(): Array<{
137
148
  path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"wiki.d.ts","sourceRoot":"","sources":["../src/wiki.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wiki.d.ts","sourceRoot":"","sources":["../src/wiki.ts"],"names":[],"mappings":"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"}
package/dist/wiki.js CHANGED
@@ -29,6 +29,30 @@ import yaml from "js-yaml";
29
29
  import { VERSION } from "./version.js";
30
30
  // System pages that lint should treat specially
31
31
  const SYSTEM_PAGES = new Set(["index.md", "log.md", "timeline.md"]);
32
+ /**
33
+ * Validate that a user-supplied relative path stays within the base directory.
34
+ * Prevents directory traversal attacks (e.g. "../../etc/passwd").
35
+ * Returns the resolved absolute path if safe, throws otherwise.
36
+ */
37
+ export function safePath(base, userPath) {
38
+ if (!userPath || typeof userPath !== "string") {
39
+ throw new Error("Path must be a non-empty string");
40
+ }
41
+ // Reject absolute paths outright
42
+ if (userPath.startsWith("/") || userPath.startsWith("\\")) {
43
+ throw new Error(`Absolute paths are not allowed: "${userPath}"`);
44
+ }
45
+ // Reject null bytes (poison byte attack)
46
+ if (userPath.includes("\0")) {
47
+ throw new Error("Path contains null bytes");
48
+ }
49
+ const resolved = resolve(base, userPath);
50
+ const normalizedBase = resolve(base);
51
+ if (!resolved.startsWith(normalizedBase + "/")) {
52
+ throw new Error(`Path traversal detected: "${userPath}" escapes the allowed directory`);
53
+ }
54
+ return resolved;
55
+ }
32
56
  // ── Wiki Class ────────────────────────────────────────────────────
33
57
  export class Wiki {
34
58
  config;
@@ -197,7 +221,7 @@ _Chronological view of all knowledge in this wiki._
197
221
  * If sourcePath is an existing file, copies it.
198
222
  * Raw files are IMMUTABLE — re-adding the same path is an error. */
199
223
  rawAdd(filename, opts) {
200
- const rawPath = join(this.config.rawDir, filename);
224
+ const rawPath = safePath(this.config.rawDir, filename);
201
225
  const metaPath = rawPath + ".meta.yaml";
202
226
  // Immutability guard — never overwrite existing raw files
203
227
  if (existsSync(rawPath)) {
@@ -262,17 +286,45 @@ _Chronological view of all knowledge in this wiki._
262
286
  }
263
287
  return docs;
264
288
  }
265
- /** Read a raw document's content. */
266
- rawRead(filename) {
267
- const fullPath = join(this.config.rawDir, filename);
289
+ /** Read a raw document's content and metadata.
290
+ * Text/SVG/JSON/XML files return content as UTF-8 string.
291
+ * Document files (PDF, DOCX, XLSX, PPTX) are extracted via Node.js libraries.
292
+ * Other binary files (images, etc.) return metadata only. */
293
+ async rawRead(filename) {
294
+ const fullPath = safePath(this.config.rawDir, filename);
268
295
  if (!existsSync(fullPath))
269
296
  return null;
270
- const content = readFileSync(fullPath, "utf-8");
271
297
  const metaPath = fullPath + ".meta.yaml";
272
298
  const meta = existsSync(metaPath)
273
299
  ? yaml.load(readFileSync(metaPath, "utf-8"))
274
300
  : null;
275
- return { content, meta };
301
+ const mime = meta?.mimeType ?? guessMime(filename);
302
+ const isText = mime.startsWith("text/")
303
+ || mime === "application/json"
304
+ || mime === "application/xml"
305
+ || mime === "image/svg+xml"; // SVG is XML text
306
+ if (isText) {
307
+ const content = readFileSync(fullPath, "utf-8");
308
+ return { content, meta, binary: false };
309
+ }
310
+ // Document formats — extract text via Node.js libraries
311
+ const ext = extname(filename).toLowerCase();
312
+ const extractable = new Set([".pdf", ".docx", ".xlsx", ".pptx", ".html", ".htm"]);
313
+ if (extractable.has(ext)) {
314
+ try {
315
+ const text = await extractTextNode(fullPath);
316
+ return { content: text, meta, binary: false };
317
+ }
318
+ catch (e) {
319
+ const stat = statSync(fullPath);
320
+ return {
321
+ content: null, meta, binary: true,
322
+ note: `Text extraction failed: ${e.message}. File size: ${formatBytes(stat.size)}.`,
323
+ };
324
+ }
325
+ }
326
+ // Other binary files — metadata only
327
+ return { content: null, meta, binary: true };
276
328
  }
277
329
  /** Verify integrity of all raw files against their stored hashes. */
278
330
  rawVerify() {
@@ -332,7 +384,7 @@ _Chronological view of all knowledge in this wiki._
332
384
  }
333
385
  }
334
386
  // ── Immutability guard ──
335
- const rawPath = join(this.config.rawDir, inferredFilename);
387
+ const rawPath = safePath(this.config.rawDir, inferredFilename);
336
388
  if (existsSync(rawPath)) {
337
389
  throw new Error(`Raw file already exists: ${inferredFilename}. Raw files are immutable.`);
338
390
  }
@@ -369,7 +421,7 @@ _Chronological view of all knowledge in this wiki._
369
421
  }
370
422
  }
371
423
  // Re-check with potentially updated filename
372
- const finalPath = join(this.config.rawDir, inferredFilename);
424
+ const finalPath = safePath(this.config.rawDir, inferredFilename);
373
425
  if (finalPath !== rawPath && existsSync(finalPath)) {
374
426
  throw new Error(`Raw file already exists: ${inferredFilename}. Raw files are immutable.`);
375
427
  }
@@ -406,9 +458,10 @@ _Chronological view of all knowledge in this wiki._
406
458
  // ── CRUD ──────────────────────────────────────────────────────
407
459
  /** Read a wiki page. Returns null if not found. */
408
460
  read(pagePath) {
409
- const fullPath = join(this.config.wikiDir, pagePath);
461
+ const fullPath = safePath(this.config.wikiDir, pagePath);
410
462
  if (!existsSync(fullPath)) {
411
463
  const withMd = fullPath.endsWith(".md") ? fullPath : fullPath + ".md";
464
+ // withMd is derived from already-validated fullPath, so no re-check needed
412
465
  if (!existsSync(withMd))
413
466
  return null;
414
467
  return this.parsePage(relative(this.config.wikiDir, withMd), readFileSync(withMd, "utf-8"));
@@ -418,7 +471,7 @@ _Chronological view of all knowledge in this wiki._
418
471
  /** Write (create or update) a wiki page. Content must include frontmatter.
419
472
  * Automatically injects/updates created and updated timestamps. */
420
473
  write(pagePath, content, source) {
421
- const fullPath = join(this.config.wikiDir, pagePath);
474
+ const fullPath = safePath(this.config.wikiDir, pagePath);
422
475
  const dir = dirname(fullPath);
423
476
  mkdirSync(dir, { recursive: true });
424
477
  const now = new Date().toISOString();
@@ -446,7 +499,7 @@ _Chronological view of all knowledge in this wiki._
446
499
  if (SYSTEM_PAGES.has(pagePath)) {
447
500
  throw new Error(`Cannot delete system page: ${pagePath}`);
448
501
  }
449
- const fullPath = join(this.config.wikiDir, pagePath);
502
+ const fullPath = safePath(this.config.wikiDir, pagePath);
450
503
  if (!existsSync(fullPath))
451
504
  return false;
452
505
  unlinkSync(fullPath);
@@ -1125,6 +1178,66 @@ function listAllFiles(dir, root) {
1125
1178
  }
1126
1179
  return result.sort();
1127
1180
  }
1181
+ /** Extract text from document files using pure Node.js libraries (no Python). */
1182
+ async function extractTextNode(filePath) {
1183
+ const ext = extname(filePath).toLowerCase();
1184
+ if (ext === ".pdf") {
1185
+ const pdfParse = (await import("pdf-parse")).default;
1186
+ const buf = readFileSync(filePath);
1187
+ const data = await pdfParse(buf);
1188
+ return data.text;
1189
+ }
1190
+ if (ext === ".docx") {
1191
+ const mammoth = await import("mammoth");
1192
+ const result = await mammoth.extractRawText({ path: filePath });
1193
+ return result.value;
1194
+ }
1195
+ if (ext === ".xlsx") {
1196
+ const XLSX = await import("xlsx");
1197
+ const wb = XLSX.readFile(filePath);
1198
+ const sheets = [];
1199
+ for (const name of wb.SheetNames) {
1200
+ const ws = wb.Sheets[name];
1201
+ if (!ws)
1202
+ continue;
1203
+ const csv = XLSX.utils.sheet_to_csv(ws);
1204
+ if (csv.trim()) {
1205
+ sheets.push(`--- Sheet: ${name} ---\n${csv.trim()}`);
1206
+ }
1207
+ }
1208
+ return sheets.join("\n\n");
1209
+ }
1210
+ if (ext === ".pptx") {
1211
+ const AdmZip = (await import("adm-zip")).default;
1212
+ const zip = new AdmZip(filePath);
1213
+ const slides = [];
1214
+ const entries = zip.getEntries()
1215
+ .filter(e => /^ppt\/slides\/slide\d+\.xml$/.test(e.entryName))
1216
+ .sort((a, b) => a.entryName.localeCompare(b.entryName, undefined, { numeric: true }));
1217
+ for (const entry of entries) {
1218
+ const xml = entry.getData().toString("utf-8");
1219
+ // Strip XML tags, keep text content
1220
+ const text = xml.replace(/<[^>]+>/g, " ").replace(/\s+/g, " ").trim();
1221
+ if (text) {
1222
+ const num = entry.entryName.match(/slide(\d+)/)?.[1] ?? "?";
1223
+ slides.push(`--- Slide ${num} ---\n${text}`);
1224
+ }
1225
+ }
1226
+ return slides.join("\n\n");
1227
+ }
1228
+ if (ext === ".html" || ext === ".htm") {
1229
+ const html = readFileSync(filePath, "utf-8");
1230
+ // Strip script/style blocks, then tags
1231
+ const cleaned = html
1232
+ .replace(/<script[\s\S]*?<\/script>/gi, "")
1233
+ .replace(/<style[\s\S]*?<\/style>/gi, "")
1234
+ .replace(/<[^>]+>/g, "\n")
1235
+ .replace(/\n{3,}/g, "\n\n")
1236
+ .trim();
1237
+ return cleaned;
1238
+ }
1239
+ throw new Error(`Unsupported document format: ${ext}`);
1240
+ }
1128
1241
  function guessMime(filename) {
1129
1242
  const ext = extname(filename).toLowerCase();
1130
1243
  const map = {