mcp-local-rag 0.12.0 → 0.13.1

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.
Files changed (43) hide show
  1. package/README.md +14 -3
  2. package/dist/cli/options.d.ts.map +1 -1
  3. package/dist/cli/options.js +1 -0
  4. package/dist/cli/options.js.map +1 -1
  5. package/dist/cli/read-neighbors.d.ts +11 -0
  6. package/dist/cli/read-neighbors.d.ts.map +1 -0
  7. package/dist/cli/read-neighbors.js +222 -0
  8. package/dist/cli/read-neighbors.js.map +1 -0
  9. package/dist/cli-main.d.ts.map +1 -1
  10. package/dist/cli-main.js +5 -1
  11. package/dist/cli-main.js.map +1 -1
  12. package/dist/index.js +9 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/parser/html-parser.js +1 -1
  15. package/dist/parser/html-parser.js.map +1 -1
  16. package/dist/server/index.d.ts +13 -1
  17. package/dist/server/index.d.ts.map +1 -1
  18. package/dist/server/index.js +90 -0
  19. package/dist/server/index.js.map +1 -1
  20. package/dist/server/tool-definitions.d.ts.map +1 -1
  21. package/dist/server/tool-definitions.js +30 -0
  22. package/dist/server/tool-definitions.js.map +1 -1
  23. package/dist/server/types.d.ts +37 -0
  24. package/dist/server/types.d.ts.map +1 -1
  25. package/dist/vectordb/index.d.ts +26 -1
  26. package/dist/vectordb/index.d.ts.map +1 -1
  27. package/dist/vectordb/index.js +48 -1
  28. package/dist/vectordb/index.js.map +1 -1
  29. package/dist/vectordb/types.d.ts +31 -0
  30. package/dist/vectordb/types.d.ts.map +1 -1
  31. package/dist/vectordb/types.js +32 -0
  32. package/dist/vectordb/types.js.map +1 -1
  33. package/package.json +14 -14
  34. package/skills/mcp-local-rag/SKILL.md +21 -1
  35. package/skills/mcp-local-rag/references/cli-reference.md +62 -0
  36. package/dist/bin/ingest.d.ts +0 -53
  37. package/dist/bin/ingest.d.ts.map +0 -1
  38. package/dist/bin/ingest.js +0 -283
  39. package/dist/bin/ingest.js.map +0 -1
  40. package/dist/server/raw-data-utils.d.ts +0 -116
  41. package/dist/server/raw-data-utils.d.ts.map +0 -1
  42. package/dist/server/raw-data-utils.js +0 -202
  43. package/dist/server/raw-data-utils.js.map +0 -1
package/README.md CHANGED
@@ -107,7 +107,7 @@ mcp-local-rag provides two interfaces: an **MCP server** for AI coding tools and
107
107
 
108
108
  ### Using with MCP
109
109
 
110
- The MCP server provides 6 tools: `ingest_file`, `ingest_data`, `query_documents`, `list_files`, `delete_file`, `status`.
110
+ The MCP server provides 7 tools: `ingest_file`, `ingest_data`, `query_documents`, `read_chunk_neighbors`, `list_files`, `delete_file`, `status`.
111
111
 
112
112
  #### Ingesting Documents
113
113
 
@@ -148,6 +148,16 @@ Search uses semantic similarity with keyword boost. This means `useEffect` finds
148
148
 
149
149
  Results include text content, source file, document title, and relevance score. The document title provides context for each chunk, helping identify which document a result belongs to. Adjust result count with `limit` (1-20, default 10).
150
150
 
151
+ #### Expanding Context Around a Result
152
+
153
+ When a search result needs more surrounding context, use `read_chunk_neighbors` to read the chunks before and after it:
154
+
155
+ ```
156
+ "That result about authentication looks relevant — read the surrounding chunks for the full explanation"
157
+ ```
158
+
159
+ Pass the `filePath` and `chunkIndex` from the search result. The response includes the target chunk (marked `isTarget: true`) plus its neighbors, sorted by chunk index. Defaults to 2 chunks before and 2 after (adjustable up to 50 each).
160
+
151
161
  #### Managing Files
152
162
 
153
163
  ```
@@ -163,13 +173,14 @@ All MCP tools are also available as CLI commands — no MCP server needed:
163
173
  ```bash
164
174
  npx mcp-local-rag ingest ./docs/ # Bulk ingest files
165
175
  npx mcp-local-rag query "authentication API" # Search documents
176
+ npx mcp-local-rag read-neighbors --file-path /abs/path.md --chunk-index 5 # Expand context
166
177
  npx mcp-local-rag list # Show ingestion status
167
178
  npx mcp-local-rag status # Database stats
168
179
  npx mcp-local-rag delete ./docs/old.pdf # Remove content
169
180
  npx mcp-local-rag delete --source "https://..." # Remove by source URL
170
181
  ```
171
182
 
172
- `query`, `list`, `status`, and `delete` output JSON to stdout for piping (e.g., `| jq`). `ingest` outputs progress to stderr. Global options (`--db-path`, `--cache-dir`, `--model-name`) go before the subcommand. Run `npx mcp-local-rag --help` for details.
183
+ `query`, `read-neighbors`, `list`, `status`, and `delete` output JSON to stdout for piping (e.g., `| jq`). `ingest` outputs progress to stderr. Global options (`--db-path`, `--cache-dir`, `--model-name`) go before the subcommand. Run `npx mcp-local-rag --help` for details.
173
184
 
174
185
  > ⚠️ The CLI does **not** read your MCP client config (`mcp.json`, `config.toml`, etc.). Configure the CLI via flags or environment variables as shown below.
175
186
 
@@ -476,7 +487,7 @@ pnpm run check:all # Full quality check
476
487
  src/
477
488
  index.ts # Entry point
478
489
  server/ # MCP tool handlers
479
- cli/ # CLI subcommands (ingest)
490
+ cli/ # CLI subcommands (ingest, query, list, delete, read-neighbors, etc.)
480
491
  parser/ # PDF, DOCX, TXT, MD parsing
481
492
  chunker/ # Text splitting
482
493
  embedder/ # Transformers.js embeddings
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAuBhF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASnE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKrE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKxE;AAMD,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,aAAa,CAAA;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAMD,eAAO,MAAM,eAAe;;;;CAIlB,CAAA;AAMV,eAAO,MAAM,cAAc,QAciC,CAAA;AAM5D;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAqErE;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,oBAAoB,CA0BhF"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAuBhF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASnE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKrE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKxE;AAMD,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,aAAa,CAAA;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAMD,eAAO,MAAM,eAAe;;;;CAIlB,CAAA;AAMV,eAAO,MAAM,cAAc,QAeiC,CAAA;AAM5D;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAqErE;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,oBAAoB,CA0BhF"}
@@ -89,6 +89,7 @@ Options:
89
89
  Commands:
90
90
  ingest <path> Ingest files into the vector database
91
91
  query <text> Search ingested documents
92
+ read-neighbors Read N chunks before and after a target chunk within the same document
92
93
  list List files and ingestion status
93
94
  status Show database status
94
95
  delete <path> Delete ingested content
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { GlobalOptions } from './options.js';
2
+ /**
3
+ * Run the read-neighbors CLI subcommand.
4
+ * Reads chunks adjacent to a target chunkIndex within a single document.
5
+ * Does NOT perform any search; this is an index-adjacent retrieval utility.
6
+ *
7
+ * @param args - Arguments after "read-neighbors"
8
+ * @param globalOptions - Global options parsed before the subcommand
9
+ */
10
+ export declare function runReadNeighbors(args: string[], globalOptions?: GlobalOptions): Promise<void>;
11
+ //# sourceMappingURL=read-neighbors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-neighbors.d.ts","sourceRoot":"","sources":["../../src/cli/read-neighbors.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAqIjD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EAAE,EACd,aAAa,GAAE,aAAkB,GAChC,OAAO,CAAC,IAAI,CAAC,CAsGf"}
@@ -0,0 +1,222 @@
1
+ // CLI read-neighbors subcommand — read N chunks before/after a target chunk within one document
2
+ import { resolve } from 'node:path';
3
+ import { extractSourceFromPath, generateRawDataPath, isRawDataPath, } from '../utils/raw-data-utils.js';
4
+ import { createVectorStore } from './common.js';
5
+ import { resolveGlobalConfig, validatePath } from './options.js';
6
+ // ============================================
7
+ // Defaults
8
+ // ============================================
9
+ const READ_NEIGHBORS_DEFAULTS = {
10
+ before: 2,
11
+ after: 2,
12
+ };
13
+ // ============================================
14
+ // Help
15
+ // ============================================
16
+ const HELP_TEXT = `Usage: mcp-local-rag [global-options] read-neighbors [options]
17
+
18
+ Read N chunks before and after a target chunk within the same document.
19
+
20
+ Either --file-path or --source is required, not both.
21
+
22
+ Options:
23
+ --file-path <abs-path> File path of ingested content (absolute path)
24
+ --source <id> Source identifier (for content ingested via ingest_data)
25
+ --chunk-index <n> Target chunk index (zero-based, required, non-negative integer)
26
+ --before <n> Number of chunks before the target (default: ${READ_NEIGHBORS_DEFAULTS.before}, non-negative integer)
27
+ --after <n> Number of chunks after the target (default: ${READ_NEIGHBORS_DEFAULTS.after}, non-negative integer)
28
+ -h, --help Show this help
29
+
30
+ Defaults: before=${READ_NEIGHBORS_DEFAULTS.before}, after=${READ_NEIGHBORS_DEFAULTS.after} (grep -C 2 convention)
31
+
32
+ Example:
33
+ npx mcp-local-rag read-neighbors --file-path /abs/path/file.md --chunk-index 12 --before 3 --after 3
34
+
35
+ Global options (must appear before "read-neighbors"):
36
+ --db-path <path> LanceDB database path
37
+ --cache-dir <path> Model cache directory
38
+ --model-name <name> Embedding model`;
39
+ /**
40
+ * Parse a value expected to be a non-negative integer flag value.
41
+ * Throws a descriptive Error on malformed input; the outer runReadNeighbors
42
+ * try/catch converts this into `console.error` + `process.exit(1)`.
43
+ */
44
+ function parseNonNegativeInteger(flag, rawValue) {
45
+ if (rawValue === undefined || rawValue.startsWith('-')) {
46
+ throw new Error(`Missing value for ${flag}`);
47
+ }
48
+ const parsed = Number.parseInt(rawValue, 10);
49
+ if (!Number.isInteger(parsed) || parsed < 0 || String(parsed) !== rawValue) {
50
+ throw new Error(`${flag} must be a non-negative integer`);
51
+ }
52
+ return parsed;
53
+ }
54
+ /**
55
+ * Parse read-neighbors CLI arguments.
56
+ * Flags: --file-path, --source, --chunk-index, --before, --after, -h/--help.
57
+ * Integer flags are validated syntactically (must be non-negative integer).
58
+ * Semantic validation (required-ness, XOR) is performed in runReadNeighbors.
59
+ */
60
+ function parseArgs(args) {
61
+ let help = false;
62
+ let filePath;
63
+ let source;
64
+ let chunkIndex;
65
+ let before;
66
+ let after;
67
+ let i = 0;
68
+ while (i < args.length) {
69
+ const arg = args[i];
70
+ if (arg === '-h' || arg === '--help') {
71
+ help = true;
72
+ i++;
73
+ }
74
+ else if (arg === '--file-path') {
75
+ const value = args[++i];
76
+ if (value === undefined || value.startsWith('-')) {
77
+ throw new Error('Missing value for --file-path');
78
+ }
79
+ filePath = value;
80
+ i++;
81
+ }
82
+ else if (arg === '--source') {
83
+ const value = args[++i];
84
+ if (value === undefined || value.startsWith('-')) {
85
+ throw new Error('Missing value for --source');
86
+ }
87
+ source = value;
88
+ i++;
89
+ }
90
+ else if (arg === '--chunk-index') {
91
+ chunkIndex = parseNonNegativeInteger('--chunk-index', args[++i]);
92
+ i++;
93
+ }
94
+ else if (arg === '--before') {
95
+ before = parseNonNegativeInteger('--before', args[++i]);
96
+ i++;
97
+ }
98
+ else if (arg === '--after') {
99
+ after = parseNonNegativeInteger('--after', args[++i]);
100
+ i++;
101
+ }
102
+ else if (arg.startsWith('-')) {
103
+ throw new Error(`Unknown option: ${arg}`);
104
+ }
105
+ else {
106
+ throw new Error(`Unexpected argument: ${arg}`);
107
+ }
108
+ }
109
+ const result = { help };
110
+ if (filePath !== undefined)
111
+ result.filePath = filePath;
112
+ if (source !== undefined)
113
+ result.source = source;
114
+ if (chunkIndex !== undefined)
115
+ result.chunkIndex = chunkIndex;
116
+ if (before !== undefined)
117
+ result.before = before;
118
+ if (after !== undefined)
119
+ result.after = after;
120
+ return result;
121
+ }
122
+ // ============================================
123
+ // Main Entry Point
124
+ // ============================================
125
+ /**
126
+ * Run the read-neighbors CLI subcommand.
127
+ * Reads chunks adjacent to a target chunkIndex within a single document.
128
+ * Does NOT perform any search; this is an index-adjacent retrieval utility.
129
+ *
130
+ * @param args - Arguments after "read-neighbors"
131
+ * @param globalOptions - Global options parsed before the subcommand
132
+ */
133
+ export async function runReadNeighbors(args, globalOptions = {}) {
134
+ // Parse CLI options (parse errors are caught and converted to exit(1) below).
135
+ let parsed;
136
+ try {
137
+ parsed = parseArgs(args);
138
+ }
139
+ catch (error) {
140
+ const reason = error instanceof Error ? error.message : String(error);
141
+ console.error(`Error: ${reason}`);
142
+ process.exit(1);
143
+ }
144
+ // Handle --help OUTSIDE the main try/catch so exit(0) is not converted to exit(1).
145
+ // Mirrors src/cli/delete.ts and src/cli/query.ts.
146
+ if (parsed.help) {
147
+ console.error(HELP_TEXT);
148
+ process.exit(0);
149
+ }
150
+ try {
151
+ // Validation order: chunkIndex → before → after → XOR (matches handler per Design Doc).
152
+ if (parsed.chunkIndex === undefined) {
153
+ throw new Error('--chunk-index is required and must be a non-negative integer');
154
+ }
155
+ const chunkIndex = parsed.chunkIndex;
156
+ const before = parsed.before ?? READ_NEIGHBORS_DEFAULTS.before;
157
+ if (before > 50) {
158
+ throw new Error(`before must be between 0 and 50 (got ${before})`);
159
+ }
160
+ const after = parsed.after ?? READ_NEIGHBORS_DEFAULTS.after;
161
+ if (after > 50) {
162
+ throw new Error(`after must be between 0 and 50 (got ${after})`);
163
+ }
164
+ // XOR: exactly one of --file-path / --source
165
+ const hasFilePath = parsed.filePath !== undefined;
166
+ const hasSource = parsed.source !== undefined;
167
+ if (!hasFilePath && !hasSource) {
168
+ throw new Error('Either --file-path or --source is required');
169
+ }
170
+ if (hasFilePath && hasSource) {
171
+ throw new Error('Cannot specify both --file-path and --source');
172
+ }
173
+ // Resolve global config
174
+ const globalConfig = resolveGlobalConfig(globalOptions);
175
+ // Determine target file path (dual-input resolution).
176
+ let targetPath;
177
+ if (parsed.source !== undefined) {
178
+ // Generate raw-data path from source identifier.
179
+ targetPath = generateRawDataPath(globalConfig.dbPath, parsed.source, 'markdown');
180
+ }
181
+ else {
182
+ // Resolve to absolute path and validate (mirrors runDelete).
183
+ targetPath = resolve(parsed.filePath);
184
+ const pathError = validatePath(targetPath, '--file-path');
185
+ if (pathError) {
186
+ console.error(pathError);
187
+ process.exit(1);
188
+ }
189
+ }
190
+ // Create and initialize VectorStore (no embedder needed for index-only read).
191
+ const vectorStore = createVectorStore(globalConfig);
192
+ await vectorStore.initialize();
193
+ // Range composition (handler-side clamp; primitive stays feature-agnostic).
194
+ const minIdx = Math.max(0, chunkIndex - before);
195
+ const maxIdx = chunkIndex + after;
196
+ // Primitive call.
197
+ const rows = await vectorStore.getChunksByRange(targetPath, minIdx, maxIdx);
198
+ // Post-fetch marking: isTarget per item; source attached for raw-data rows.
199
+ const isRaw = isRawDataPath(targetPath);
200
+ const sourceForAll = isRaw ? extractSourceFromPath(targetPath) : null;
201
+ const items = rows.map((row) => {
202
+ const item = {
203
+ filePath: row.filePath,
204
+ chunkIndex: row.chunkIndex,
205
+ text: row.text,
206
+ isTarget: row.chunkIndex === chunkIndex,
207
+ fileTitle: row.fileTitle ?? null,
208
+ };
209
+ if (sourceForAll)
210
+ item.source = sourceForAll;
211
+ return item;
212
+ });
213
+ // Output JSON to stdout (2-space indent per query.ts convention).
214
+ process.stdout.write(`${JSON.stringify(items, null, 2)}\n`);
215
+ }
216
+ catch (error) {
217
+ const reason = error instanceof Error ? error.message : String(error);
218
+ console.error(`Error: ${reason}`);
219
+ process.exit(1);
220
+ }
221
+ }
222
+ //# sourceMappingURL=read-neighbors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-neighbors.js","sourceRoot":"","sources":["../../src/cli/read-neighbors.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAEhG,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,GACd,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE/C,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhE,+CAA+C;AAC/C,WAAW;AACX,+CAA+C;AAE/C,MAAM,uBAAuB,GAAG;IAC9B,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;CACA,CAAA;AAEV,+CAA+C;AAC/C,OAAO;AACP,+CAA+C;AAE/C,MAAM,SAAS,GAAG;;;;;;;;;;0EAUwD,uBAAuB,CAAC,MAAM;yEAC/B,uBAAuB,CAAC,KAAK;;;mBAGnF,uBAAuB,CAAC,MAAM,WAAW,uBAAuB,CAAC,KAAK;;;;;;;;2CAQ9C,CAAA;AAe3C;;;;GAIG;AACH,SAAS,uBAAuB,CAAC,IAAY,EAAE,QAA4B;IACzE,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAA;IAC9C,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,iCAAiC,CAAC,CAAA;IAC3D,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,IAAc;IAC/B,IAAI,IAAI,GAAG,KAAK,CAAA;IAChB,IAAI,QAA4B,CAAA;IAChC,IAAI,MAA0B,CAAA;IAC9B,IAAI,UAA8B,CAAA;IAClC,IAAI,MAA0B,CAAA;IAC9B,IAAI,KAAyB,CAAA;IAE7B,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;QAEpB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,GAAG,IAAI,CAAA;YACX,CAAC,EAAE,CAAA;QACL,CAAC;aAAM,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;YACvB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;YAClD,CAAC;YACD,QAAQ,GAAG,KAAK,CAAA;YAChB,CAAC,EAAE,CAAA;QACL,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;YACvB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;YAC/C,CAAC;YACD,MAAM,GAAG,KAAK,CAAA;YACd,CAAC,EAAE,CAAA;QACL,CAAC;aAAM,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YACnC,UAAU,GAAG,uBAAuB,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAChE,CAAC,EAAE,CAAA;QACL,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,MAAM,GAAG,uBAAuB,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YACvD,CAAC,EAAE,CAAA;QACL,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,KAAK,GAAG,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YACrD,CAAC,EAAE,CAAA;QACL,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAA;QAC3C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAA;QAChD,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAsB,EAAE,IAAI,EAAE,CAAA;IAC1C,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACtD,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;IAChD,IAAI,UAAU,KAAK,SAAS;QAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAA;IAC5D,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;IAChD,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;IAC7C,OAAO,MAAM,CAAA;AACf,CAAC;AAED,+CAA+C;AAC/C,mBAAmB;AACnB,+CAA+C;AAE/C;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAc,EACd,gBAA+B,EAAE;IAEjC,8EAA8E;IAC9E,IAAI,MAAyB,CAAA;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACrE,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,EAAE,CAAC,CAAA;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,mFAAmF;IACnF,kDAAkD;IAClD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,IAAI,CAAC;QACH,wFAAwF;QACxF,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;QACjF,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;QAEpC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,uBAAuB,CAAC,MAAM,CAAA;QAC9D,IAAI,MAAM,GAAG,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,wCAAwC,MAAM,GAAG,CAAC,CAAA;QACpE,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,uBAAuB,CAAC,KAAK,CAAA;QAC3D,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,GAAG,CAAC,CAAA;QAClE,CAAC;QAED,6CAA6C;QAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAA;QACjD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,CAAA;QAC7C,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;QAC/D,CAAC;QACD,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;QACjE,CAAC;QAED,wBAAwB;QACxB,MAAM,YAAY,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAA;QAEvD,sDAAsD;QACtD,IAAI,UAAkB,CAAA;QACtB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,iDAAiD;YACjD,UAAU,GAAG,mBAAmB,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QAClF,CAAC;aAAM,CAAC;YACN,6DAA6D;YAC7D,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,QAAS,CAAC,CAAA;YACtC,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;YACzD,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;gBACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;QACH,CAAC;QAED,8EAA8E;QAC9E,MAAM,WAAW,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAA;QACnD,MAAM,WAAW,CAAC,UAAU,EAAE,CAAA;QAE9B,4EAA4E;QAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,UAAU,GAAG,KAAK,CAAA;QAEjC,kBAAkB;QAClB,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QAE3E,4EAA4E;QAC5E,MAAM,KAAK,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;QACvC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7B,MAAM,IAAI,GAON;gBACF,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,QAAQ,EAAE,GAAG,CAAC,UAAU,KAAK,UAAU;gBACvC,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI;aACjC,CAAA;YACD,IAAI,YAAY;gBAAE,IAAI,CAAC,MAAM,GAAG,YAAY,CAAA;YAC5C,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,CAAA;QAEF,kEAAkE;QAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACrE,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,EAAE,CAAC,CAAA;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"cli-main.d.ts","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAIrD;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0ChG"}
1
+ {"version":3,"file":"cli-main.d.ts","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAKrD;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDhG"}
package/dist/cli-main.js CHANGED
@@ -4,6 +4,7 @@ import { runDelete } from './cli/delete.js';
4
4
  import { runIngest } from './cli/ingest.js';
5
5
  import { runList } from './cli/list.js';
6
6
  import { runQuery } from './cli/query.js';
7
+ import { runReadNeighbors } from './cli/read-neighbors.js';
7
8
  import { runStatus } from './cli/status.js';
8
9
  /**
9
10
  * Handle CLI subcommands
@@ -39,9 +40,12 @@ export async function handleCli(args, globalOptions = {}) {
39
40
  case 'delete':
40
41
  await runDelete(args.slice(1), globalOptions);
41
42
  break;
43
+ case 'read-neighbors':
44
+ await runReadNeighbors(args.slice(1), globalOptions);
45
+ break;
42
46
  default:
43
47
  console.error(`Unknown command: ${subcommand}`);
44
- console.error('Available commands: skills, ingest, list, query, status, delete');
48
+ console.error('Available commands: skills, ingest, list, query, status, delete, read-neighbors');
45
49
  process.exit(1);
46
50
  }
47
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cli-main.js","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,OAAO,EAAE,GAAG,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc,EAAE,gBAA+B,EAAE;IAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IAE1B,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,QAAQ;YACX,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC1B,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CACX,8EAA8E,CAC/E,CAAA;gBACD,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAA;gBACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;YACD,MAAK;QAEP,KAAK,QAAQ;YACX,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;YAC7C,MAAK;QAEP,KAAK,MAAM;YACT,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;YAC3C,MAAK;QAEP,KAAK,OAAO;YACV,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;YAC5C,MAAK;QAEP,KAAK,QAAQ;YACX,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;YAC7C,MAAK;QAEP,KAAK,QAAQ;YACX,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;YAC7C,MAAK;QAEP;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,UAAU,EAAE,CAAC,CAAA;YAC/C,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAA;YAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cli-main.js","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,OAAO,EAAE,GAAG,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc,EAAE,gBAA+B,EAAE;IAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IAE1B,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,QAAQ;YACX,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC1B,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CACX,8EAA8E,CAC/E,CAAA;gBACD,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAA;gBACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;YACD,MAAK;QAEP,KAAK,QAAQ;YACX,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;YAC7C,MAAK;QAEP,KAAK,MAAM;YACT,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;YAC3C,MAAK;QAEP,KAAK,OAAO;YACV,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;YAC5C,MAAK;QAEP,KAAK,QAAQ;YACX,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;YAC7C,MAAK;QAEP,KAAK,QAAQ;YACX,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;YAC7C,MAAK;QAEP,KAAK,gBAAgB;YACnB,MAAM,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;YACpD,MAAK;QAEP;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,UAAU,EAAE,CAAC,CAAA;YAC/C,OAAO,CAAC,KAAK,CACX,iFAAiF,CAClF,CAAA;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;AACH,CAAC"}
package/dist/index.js CHANGED
@@ -7,7 +7,15 @@ import { startServer } from './server-main.js';
7
7
  // ============================================
8
8
  // Routing
9
9
  // ============================================
10
- const SUBCOMMANDS = new Set(['skills', 'ingest', 'list', 'query', 'status', 'delete']);
10
+ const SUBCOMMANDS = new Set([
11
+ 'skills',
12
+ 'ingest',
13
+ 'list',
14
+ 'query',
15
+ 'status',
16
+ 'delete',
17
+ 'read-neighbors',
18
+ ]);
11
19
  const { globalOptions, remainingArgs } = parseGlobalOptions(process.argv.slice(2));
12
20
  const firstArg = remainingArgs[0];
13
21
  if (firstArg && SUBCOMMANDS.has(firstArg)) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,gCAAgC;AAChC,qDAAqD;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,+CAA+C;AAC/C,UAAU;AACV,+CAA+C;AAE/C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;AAEtF,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AAClF,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;AAEjC,IAAI,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC1C,iBAAiB;IACjB,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACtD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC;KAAM,CAAC;IACN,4BAA4B;IAC5B,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACnD,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;QACxC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAA;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,WAAW,EAAE,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,gCAAgC;AAChC,qDAAqD;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,+CAA+C;AAC/C,UAAU;AACV,+CAA+C;AAE/C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,gBAAgB;CACjB,CAAC,CAAA;AAEF,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AAClF,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;AAEjC,IAAI,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC1C,iBAAiB;IACjB,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACtD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC;KAAM,CAAC;IACN,4BAA4B;IAC5B,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACnD,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;QACxC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAA;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,WAAW,EAAE,CAAA;AACf,CAAC"}
@@ -67,7 +67,7 @@ export async function parseHtml(html, url) {
67
67
  });
68
68
  const article = reader.parse();
69
69
  // If Readability couldn't extract content, fall back to body text
70
- if (!article || !article.content) {
70
+ if (!article?.content) {
71
71
  // Try to get body content directly
72
72
  const bodyContent = document.body?.innerHTML || '';
73
73
  if (!bodyContent.trim()) {
@@ -1 +1 @@
1
- {"version":3,"file":"html-parser.js","sourceRoot":"","sources":["../../src/parser/html-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"html-parser.js","sourceRoot":"","sources":["../../src/parser/html-parser.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { type Annotations } from '@modelcontextprotocol/sdk/types.js';
2
- import type { DeleteFileInput, IngestDataInput, IngestFileInput, QueryDocumentsInput, RAGServerConfig } from './types.js';
2
+ import type { DeleteFileInput, IngestDataInput, IngestFileInput, QueryDocumentsInput, RAGServerConfig, ReadChunkNeighborsInput } from './types.js';
3
3
  /** RAG server compliant with MCP Protocol */
4
4
  export declare class RAGServer {
5
5
  private readonly server;
@@ -92,6 +92,18 @@ export declare class RAGServer {
92
92
  text: string;
93
93
  }];
94
94
  }>;
95
+ /**
96
+ * read_chunk_neighbors tool handler
97
+ * Returns chunks around a target chunkIndex within a single ingested document.
98
+ * Context-expansion utility — not a search tool. Mirrors handleDeleteFile's
99
+ * dual-input (filePath XOR source) resolution pattern.
100
+ */
101
+ handleReadChunkNeighbors(args: ReadChunkNeighborsInput): Promise<{
102
+ content: [{
103
+ type: 'text';
104
+ text: string;
105
+ }];
106
+ }>;
95
107
  /**
96
108
  * Start the server
97
109
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,WAAW,EAKjB,MAAM,oCAAoC,CAAA;AAmB3C,OAAO,KAAK,EACV,eAAe,EAEf,eAAe,EACf,eAAe,EAGf,mBAAmB,EAEnB,eAAe,EAEhB,MAAM,YAAY,CAAA;AAEnB,6CAA6C;AAC7C,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,kBAAkB,CAAQ;gBAEtB,MAAM,EAAE,eAAe;IA8CnC;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAkBjC;;OAEG;IACH,OAAO,CAAC,aAAa;IAsCrB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;OAEG;IACG,oBAAoB,CACxB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,WAAW,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAiDzF;;OAEG;IACG,gBAAgB,CACpB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IA4JzD;;;;;;;;OAQG;IACG,gBAAgB,CACpB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAyEzD;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAmD/E;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC;QAC5B,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,WAAW,CAAA;SAAE,CAAC,CAAA;KAC1E,CAAC;IAoBF;;;;OAIG;IACG,gBAAgB,CACpB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAiEzD;;OAEG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAK3B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,WAAW,EAKjB,MAAM,oCAAoC,CAAA;AAoB3C,OAAO,KAAK,EACV,eAAe,EAEf,eAAe,EACf,eAAe,EAGf,mBAAmB,EAEnB,eAAe,EACf,uBAAuB,EAGxB,MAAM,YAAY,CAAA;AAEnB,6CAA6C;AAC7C,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,kBAAkB,CAAQ;gBAEtB,MAAM,EAAE,eAAe;IA8CnC;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAkBjC;;OAEG;IACH,OAAO,CAAC,aAAa;IA0CrB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;OAEG;IACG,oBAAoB,CACxB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,WAAW,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAiDzF;;OAEG;IACG,gBAAgB,CACpB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IA4JzD;;;;;;;;OAQG;IACG,gBAAgB,CACpB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAyEzD;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAmD/E;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC;QAC5B,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,WAAW,CAAA;SAAE,CAAC,CAAA;KAC1E,CAAC;IAoBF;;;;OAIG;IACG,gBAAgB,CACpB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAiEzD;;;;;OAKG;IACG,wBAAwB,CAC5B,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IA0FzD;;OAEG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAK3B"}
@@ -12,6 +12,7 @@ import { DocumentParser, SUPPORTED_EXTENSIONS } from '../parser/index.js';
12
12
  import { extractMarkdownTitle, extractTxtTitle } from '../parser/title-extractor.js';
13
13
  import { extractSourceFromPath, generateMetaJsonPath, generateRawDataPath, isRawDataPath, loadMetaJson, saveMetaJson, saveRawData, } from '../utils/raw-data-utils.js';
14
14
  import { VectorStore } from '../vectordb/index.js';
15
+ import { DatabaseError } from '../vectordb/types.js';
15
16
  import { formatErrorMessage } from './error-utils.js';
16
17
  import { toolDefinitions } from './tool-definitions.js';
17
18
  /** RAG server compliant with MCP Protocol */
@@ -103,6 +104,8 @@ export class RAGServer {
103
104
  return await this.handleIngestData(request.params.arguments);
104
105
  case 'delete_file':
105
106
  return await this.handleDeleteFile(request.params.arguments);
107
+ case 'read_chunk_neighbors':
108
+ return await this.handleReadChunkNeighbors(request.params.arguments);
106
109
  case 'list_files':
107
110
  return await this.handleListFiles();
108
111
  case 'status':
@@ -513,6 +516,93 @@ export class RAGServer {
513
516
  throw new Error(`Failed to delete file: ${errorMessage}`);
514
517
  }
515
518
  }
519
+ /**
520
+ * read_chunk_neighbors tool handler
521
+ * Returns chunks around a target chunkIndex within a single ingested document.
522
+ * Context-expansion utility — not a search tool. Mirrors handleDeleteFile's
523
+ * dual-input (filePath XOR source) resolution pattern.
524
+ */
525
+ async handleReadChunkNeighbors(args) {
526
+ try {
527
+ // Validation (all before DB access, per Design Doc §Main Components → Handler).
528
+ // Intentional: use McpError(InvalidParams) (upgrade from handleDeleteFile's plain Error).
529
+ // See Design Doc §Main Components → Handler and §Risks — this asymmetry is documented;
530
+ // do not "fix" it.
531
+ if (!Number.isInteger(args.chunkIndex) || args.chunkIndex < 0) {
532
+ throw new McpError(ErrorCode.InvalidParams, 'chunkIndex must be a non-negative integer');
533
+ }
534
+ const before = args.before ?? 2;
535
+ if (!Number.isInteger(before) || before < 0) {
536
+ throw new McpError(ErrorCode.InvalidParams, 'before must be a non-negative integer');
537
+ }
538
+ if (before > 50) {
539
+ throw new McpError(ErrorCode.InvalidParams, `before must be between 0 and 50 (got ${before})`);
540
+ }
541
+ const after = args.after ?? 2;
542
+ if (!Number.isInteger(after) || after < 0) {
543
+ throw new McpError(ErrorCode.InvalidParams, 'after must be a non-negative integer');
544
+ }
545
+ if (after > 50) {
546
+ throw new McpError(ErrorCode.InvalidParams, `after must be between 0 and 50 (got ${after})`);
547
+ }
548
+ const hasFilePath = args.filePath !== undefined;
549
+ const hasSource = args.source !== undefined;
550
+ if (hasFilePath === hasSource) {
551
+ throw new McpError(ErrorCode.InvalidParams, 'Either filePath or source must be provided, not both');
552
+ }
553
+ // Dual-input resolution (mirrors handleDeleteFile).
554
+ let targetPath;
555
+ let skipValidation = false;
556
+ if (args.source !== undefined) {
557
+ targetPath = generateRawDataPath(this.dbPath, args.source, 'markdown');
558
+ skipValidation = true;
559
+ }
560
+ else {
561
+ // XOR above guarantees filePath is defined here.
562
+ targetPath = args.filePath;
563
+ }
564
+ if (!skipValidation) {
565
+ await this.parser.validateFilePath(targetPath);
566
+ }
567
+ // Range composition (handler-side clamp; primitive stays feature-agnostic).
568
+ const minIdx = Math.max(0, args.chunkIndex - before);
569
+ const maxIdx = args.chunkIndex + after;
570
+ // Primitive call.
571
+ const rows = await this.vectorStore.getChunksByRange(targetPath, minIdx, maxIdx);
572
+ // Post-fetch marking: isTarget per item; source attached for raw-data rows.
573
+ const isRaw = isRawDataPath(targetPath);
574
+ const sourceForAll = isRaw ? extractSourceFromPath(targetPath) : null;
575
+ const items = rows.map((row) => {
576
+ const item = {
577
+ filePath: row.filePath,
578
+ chunkIndex: row.chunkIndex,
579
+ text: row.text,
580
+ isTarget: row.chunkIndex === args.chunkIndex,
581
+ fileTitle: row.fileTitle ?? null,
582
+ };
583
+ if (sourceForAll)
584
+ item.source = sourceForAll;
585
+ return item;
586
+ });
587
+ return {
588
+ content: [
589
+ {
590
+ type: 'text',
591
+ text: JSON.stringify(items, null, 2),
592
+ },
593
+ ],
594
+ };
595
+ }
596
+ catch (error) {
597
+ // Re-throw McpError / DatabaseError as-is to preserve semantics.
598
+ if (error instanceof McpError || error instanceof DatabaseError) {
599
+ throw error;
600
+ }
601
+ const errorMessage = formatErrorMessage(error);
602
+ console.error('Failed to read chunk neighbors:', errorMessage);
603
+ throw new Error(`Failed to read chunk neighbors: ${errorMessage}`);
604
+ }
605
+ }
516
606
  /**
517
607
  * Start the server
518
608
  */