hoomanjs 1.28.1 → 1.28.3

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 (68) hide show
  1. package/README.md +10 -16
  2. package/dist/acp/sessions/config-options.js +2 -2
  3. package/dist/acp/sessions/config-options.js.map +1 -1
  4. package/dist/acp/utils/tool-kind.js +4 -4
  5. package/dist/chat/index.js +1 -1
  6. package/dist/chat/index.js.map +1 -1
  7. package/dist/cli.js +3 -1
  8. package/dist/cli.js.map +1 -1
  9. package/dist/configure/app.js +5 -113
  10. package/dist/configure/app.js.map +1 -1
  11. package/dist/core/agent/index.d.ts +1 -1
  12. package/dist/core/agent/index.js +14 -2
  13. package/dist/core/agent/index.js.map +1 -1
  14. package/dist/core/config.d.ts +10 -36
  15. package/dist/core/config.js +13 -66
  16. package/dist/core/config.js.map +1 -1
  17. package/dist/core/memory/index.d.ts +1 -0
  18. package/dist/core/memory/index.js +1 -0
  19. package/dist/core/memory/index.js.map +1 -1
  20. package/dist/core/memory/ltm/llama-embed.d.ts +28 -0
  21. package/dist/core/memory/ltm/llama-embed.js +204 -0
  22. package/dist/core/memory/ltm/llama-embed.js.map +1 -0
  23. package/dist/core/memory/ltm/sqlite.d.ts +12 -0
  24. package/dist/core/memory/ltm/sqlite.js +101 -0
  25. package/dist/core/memory/ltm/sqlite.js.map +1 -0
  26. package/dist/core/memory/ltm/store.d.ts +13 -6
  27. package/dist/core/memory/ltm/store.js +192 -92
  28. package/dist/core/memory/ltm/store.js.map +1 -1
  29. package/dist/core/memory/ltm/tools.js +4 -4
  30. package/dist/core/memory/ltm/utils.d.ts +9 -11
  31. package/dist/core/memory/ltm/utils.js +14 -15
  32. package/dist/core/memory/ltm/utils.js.map +1 -1
  33. package/dist/core/memory/wiki/index.d.ts +4 -0
  34. package/dist/core/memory/wiki/index.js +4 -0
  35. package/dist/core/memory/wiki/index.js.map +1 -0
  36. package/dist/core/memory/wiki/store.d.ts +37 -0
  37. package/dist/core/memory/wiki/store.js +317 -0
  38. package/dist/core/memory/wiki/store.js.map +1 -0
  39. package/dist/core/memory/wiki/tools.d.ts +11 -0
  40. package/dist/core/memory/wiki/tools.js +291 -0
  41. package/dist/core/memory/wiki/tools.js.map +1 -0
  42. package/dist/core/memory/wiki/types.d.ts +25 -0
  43. package/dist/core/memory/wiki/types.js +2 -0
  44. package/dist/core/memory/wiki/types.js.map +1 -0
  45. package/dist/core/prompts/static/ltm.md +4 -4
  46. package/dist/core/prompts/static/wiki.md +2 -2
  47. package/dist/core/prompts/system.d.ts +4 -0
  48. package/dist/core/prompts/system.js +36 -4
  49. package/dist/core/prompts/system.js.map +1 -1
  50. package/dist/core/skills/built-in/hooman-config/SKILL.md +8 -30
  51. package/dist/core/state/tool-approvals.js +5 -5
  52. package/dist/core/tools/index.d.ts +1 -1
  53. package/dist/core/tools/index.js +1 -1
  54. package/dist/core/tools/index.js.map +1 -1
  55. package/dist/core/tools/plan.d.ts +2 -2
  56. package/dist/core/utils/paths.d.ts +7 -0
  57. package/dist/core/utils/paths.js +9 -0
  58. package/dist/core/utils/paths.js.map +1 -1
  59. package/dist/index.d.ts +4 -5
  60. package/dist/index.js +3 -4
  61. package/dist/index.js.map +1 -1
  62. package/package.json +18 -3
  63. package/dist/core/memory/ltm/embed.d.ts +0 -16
  64. package/dist/core/memory/ltm/embed.js +0 -49
  65. package/dist/core/memory/ltm/embed.js.map +0 -1
  66. package/dist/core/tools/wiki.d.ts +0 -11
  67. package/dist/core/tools/wiki.js +0 -566
  68. package/dist/core/tools/wiki.js.map +0 -1
@@ -1,566 +0,0 @@
1
- import fs from "node:fs/promises";
2
- import path from "node:path";
3
- import { ChromaClient } from "chromadb";
4
- import matter from "gray-matter";
5
- import { tool } from "@strands-agents/sdk";
6
- import { z } from "zod";
7
- import { HFEmbedding } from "../memory/ltm/embed.js";
8
- import { chromaClientArgsFromUrl } from "../memory/ltm/utils.js";
9
- import { getCwd } from "../utils/cwd-context.js";
10
- const WIKI_DIR = "wiki";
11
- const PAGES_DIR = "pages";
12
- const INDEX_FILE = "index.md";
13
- const LOG_FILE = "log.md";
14
- const SCHEMA_FILE = "schema.md";
15
- const DEFAULT_SEARCH_LIMIT = 5;
16
- const MAX_SEARCH_LIMIT = 20;
17
- function toJsonValue(value) {
18
- return JSON.parse(JSON.stringify(value));
19
- }
20
- function wikiRoot() {
21
- return path.join(getCwd(), WIKI_DIR);
22
- }
23
- function stripLeadingSlashes(value) {
24
- return value.replace(/^[/\\]+/, "");
25
- }
26
- function pageRelativePath(inputPath) {
27
- const normalized = stripLeadingSlashes(inputPath.trim().replace(/\\/g, "/"));
28
- if (!normalized) {
29
- throw new Error("Page path is required.");
30
- }
31
- const withPrefix = normalized.startsWith(`${PAGES_DIR}/`)
32
- ? normalized
33
- : `${PAGES_DIR}/${normalized}`;
34
- if (!withPrefix.toLowerCase().endsWith(".md")) {
35
- throw new Error("Page paths must end with .md");
36
- }
37
- return withPrefix;
38
- }
39
- function resolveWithinRoot(root, relativePath) {
40
- const abs = path.resolve(root, relativePath);
41
- const normalizedRoot = path.resolve(root);
42
- if (abs !== normalizedRoot &&
43
- !abs.startsWith(`${normalizedRoot}${path.sep}`) &&
44
- !(process.platform === "win32" &&
45
- abs.toLowerCase().startsWith(`${normalizedRoot.toLowerCase()}${path.sep}`))) {
46
- throw new Error(`Path escapes wiki root: ${relativePath}`);
47
- }
48
- return abs;
49
- }
50
- async function fileExists(filePath) {
51
- try {
52
- await fs.access(filePath);
53
- return true;
54
- }
55
- catch {
56
- return false;
57
- }
58
- }
59
- function firstSentence(value, maxLength = 180) {
60
- const clean = value.replace(/\s+/g, " ").trim();
61
- if (!clean) {
62
- return "";
63
- }
64
- return clean.length > maxLength
65
- ? `${clean.slice(0, maxLength - 1).trimEnd()}…`
66
- : clean;
67
- }
68
- function safeString(value) {
69
- return typeof value === "string" && value.trim().length > 0
70
- ? value.trim()
71
- : null;
72
- }
73
- function safeStringArray(value) {
74
- if (!Array.isArray(value)) {
75
- return [];
76
- }
77
- return value
78
- .filter((item) => typeof item === "string")
79
- .map((item) => item.trim())
80
- .filter((item) => item.length > 0);
81
- }
82
- function parseFrontmatter(content) {
83
- const parsed = matter(content);
84
- const data = parsed.data;
85
- return {
86
- frontmatter: {
87
- title: safeString(data.title) ?? undefined,
88
- summary: safeString(data.summary) ?? undefined,
89
- tags: safeStringArray(data.tags),
90
- related: safeStringArray(data.related),
91
- type: safeString(data.type) ?? undefined,
92
- created: safeString(data.created) ?? undefined,
93
- updated: safeString(data.updated) ?? undefined,
94
- },
95
- body: parsed.content.trim(),
96
- };
97
- }
98
- function wordCount(content) {
99
- const words = content.trim().match(/\S+/g);
100
- return words ? words.length : 0;
101
- }
102
- function normalizeRelatedPath(value) {
103
- let item = value.trim().replace(/\\/g, "/");
104
- item = item.replace(/^\[\[|\]\]$/g, "");
105
- item = stripLeadingSlashes(item);
106
- if (!item.endsWith(".md")) {
107
- item = `${item}.md`;
108
- }
109
- if (!item.startsWith(`${PAGES_DIR}/`)) {
110
- item = `${PAGES_DIR}/${item}`;
111
- }
112
- return item;
113
- }
114
- function deriveTitle(relativePath, frontmatter) {
115
- const fromFrontmatter = safeString(frontmatter.title);
116
- if (fromFrontmatter) {
117
- return fromFrontmatter;
118
- }
119
- return path.basename(relativePath, ".md").replace(/[-_]+/g, " ").trim();
120
- }
121
- function deriveSummary(frontmatter, body, fallback) {
122
- const fromFrontmatter = safeString(frontmatter.summary);
123
- if (fromFrontmatter) {
124
- return firstSentence(fromFrontmatter);
125
- }
126
- const bodySummary = firstSentence(body);
127
- return bodySummary || firstSentence(fallback) || "No summary available.";
128
- }
129
- async function readPageRecord(root, relativePath) {
130
- const absolutePath = resolveWithinRoot(root, relativePath);
131
- const content = await fs.readFile(absolutePath, "utf8");
132
- const stat = await fs.stat(absolutePath);
133
- const parsed = parseFrontmatter(content);
134
- const title = deriveTitle(relativePath, parsed.frontmatter);
135
- const summary = deriveSummary(parsed.frontmatter, parsed.body, title);
136
- return {
137
- path: relativePath.replace(/\\/g, "/"),
138
- absolutePath,
139
- title,
140
- summary,
141
- tags: parsed.frontmatter.tags ?? [],
142
- related: (parsed.frontmatter.related ?? []).map(normalizeRelatedPath),
143
- type: parsed.frontmatter.type ?? null,
144
- created: parsed.frontmatter.created ?? null,
145
- updated: parsed.frontmatter.updated ?? null,
146
- wordCount: wordCount(parsed.body),
147
- mtime: stat.mtime.toISOString(),
148
- content,
149
- body: parsed.body,
150
- frontmatter: parsed.frontmatter,
151
- };
152
- }
153
- async function listPagePaths(root) {
154
- const pagesRoot = resolveWithinRoot(root, PAGES_DIR);
155
- const out = [];
156
- const walk = async (dirPath) => {
157
- const entries = await fs.readdir(dirPath, { withFileTypes: true });
158
- for (const entry of entries) {
159
- const fullPath = path.join(dirPath, entry.name);
160
- if (entry.isDirectory()) {
161
- await walk(fullPath);
162
- continue;
163
- }
164
- if (!entry.isFile() || !entry.name.toLowerCase().endsWith(".md")) {
165
- continue;
166
- }
167
- const relFromRoot = path.relative(root, fullPath).replace(/\\/g, "/");
168
- out.push(relFromRoot);
169
- }
170
- };
171
- if (await fileExists(pagesRoot)) {
172
- await walk(pagesRoot);
173
- }
174
- out.sort((a, b) => a.localeCompare(b));
175
- return out;
176
- }
177
- async function listPages(root) {
178
- const paths = await listPagePaths(root);
179
- return Promise.all(paths.map((relativePath) => readPageRecord(root, relativePath)));
180
- }
181
- function buildIndexMarkdown(pages) {
182
- const sorted = [...pages].sort((a, b) => a.title.localeCompare(b.title));
183
- const lines = [
184
- "# Wiki Index",
185
- "",
186
- "<!-- Auto-generated by wiki_write_file. -->",
187
- "",
188
- `Updated: ${new Date().toISOString()}`,
189
- "",
190
- "## Pages",
191
- ];
192
- if (sorted.length === 0) {
193
- lines.push("- _No wiki pages yet._");
194
- return `${lines.join("\n")}\n`;
195
- }
196
- for (const page of sorted) {
197
- const tags = page.tags.length > 0 ? ` | tags: ${page.tags.join(", ")}` : "";
198
- lines.push(`- [${page.title}](${page.path}): ${page.summary}${tags}`);
199
- }
200
- return `${lines.join("\n")}\n`;
201
- }
202
- function buildLogEntry(operation, details) {
203
- const lines = [
204
- `## [${new Date().toISOString()}] ${operation}`,
205
- ...Object.entries(details).map(([key, value]) => `- ${key}: ${value}`),
206
- "",
207
- ];
208
- return `${lines.join("\n")}\n`;
209
- }
210
- const DEFAULT_SCHEMA = `# Wiki Schema
211
-
212
- This wiki is maintained by the agent through wiki tools.
213
-
214
- ## Structure
215
- - \`pages/\`: markdown knowledge pages
216
- - \`index.md\`: derived index (tool-managed)
217
- - \`log.md\`: append-only activity log (tool-managed)
218
-
219
- ## Page conventions
220
- - Use markdown files under \`pages/\`
221
- - Prefer concise titles and summaries
222
- - Add frontmatter when helpful (\`title\`, \`summary\`, \`tags\`, \`related\`, \`type\`)
223
- - Use relative links to other pages when appropriate
224
- `;
225
- async function ensureWikiLayout(root) {
226
- const pagesRoot = resolveWithinRoot(root, PAGES_DIR);
227
- await fs.mkdir(pagesRoot, { recursive: true });
228
- const indexPath = resolveWithinRoot(root, INDEX_FILE);
229
- const logPath = resolveWithinRoot(root, LOG_FILE);
230
- const schemaPath = resolveWithinRoot(root, SCHEMA_FILE);
231
- if (!(await fileExists(indexPath))) {
232
- await fs.writeFile(indexPath, buildIndexMarkdown([]), "utf8");
233
- }
234
- if (!(await fileExists(logPath))) {
235
- await fs.writeFile(logPath, "# Wiki Log\n\n", "utf8");
236
- }
237
- if (!(await fileExists(schemaPath))) {
238
- await fs.writeFile(schemaPath, `${DEFAULT_SCHEMA}\n`, "utf8");
239
- }
240
- }
241
- async function writeIndex(root, pages) {
242
- const indexPath = resolveWithinRoot(root, INDEX_FILE);
243
- await fs.writeFile(indexPath, buildIndexMarkdown(pages), "utf8");
244
- }
245
- async function appendLog(root, operation, details) {
246
- const logPath = resolveWithinRoot(root, LOG_FILE);
247
- await fs.appendFile(logPath, buildLogEntry(operation, details), "utf8");
248
- }
249
- function pageIndexId(relativePath) {
250
- return `wiki:page:${relativePath}`;
251
- }
252
- function searchMetadata(page) {
253
- return {
254
- kind: "page",
255
- path: page.path,
256
- title: page.title,
257
- summary: page.summary,
258
- tags: page.tags.join(","),
259
- word_count: page.wordCount,
260
- };
261
- }
262
- export function createWikiTools(config) {
263
- const root = wikiRoot();
264
- const client = new ChromaClient({
265
- ...chromaClientArgsFromUrl(config.tools.wiki.chroma.url),
266
- });
267
- let collectionPromise = null;
268
- const collection = async () => {
269
- if (!collectionPromise) {
270
- collectionPromise = client.getOrCreateCollection({
271
- name: config.tools.wiki.chroma.collection.wiki,
272
- embeddingFunction: new HFEmbedding(),
273
- });
274
- }
275
- return collectionPromise;
276
- };
277
- const upsertPageSearch = async (page) => {
278
- const c = await collection();
279
- const id = pageIndexId(page.path);
280
- try {
281
- await c.delete({ ids: [id] });
282
- }
283
- catch {
284
- // best-effort cleanup
285
- }
286
- await c.add({
287
- ids: [id],
288
- documents: [page.body || page.content],
289
- metadatas: [searchMetadata(page)],
290
- });
291
- };
292
- return [
293
- tool({
294
- name: "wiki_list_files",
295
- description: "List wiki files by type. Supports `page` and returns frontmatter-aware summaries.",
296
- inputSchema: z.object({
297
- type: z.enum(["page"]).default("page"),
298
- }),
299
- callback: async () => {
300
- await ensureWikiLayout(root);
301
- const pages = await listPages(root);
302
- return toJsonValue({
303
- root,
304
- type: "page",
305
- count: pages.length,
306
- files: pages.map((page) => ({
307
- path: page.path,
308
- title: page.title,
309
- summary: page.summary,
310
- tags: page.tags,
311
- related: page.related,
312
- type: page.type,
313
- created: page.created,
314
- updated: page.updated,
315
- word_count: page.wordCount,
316
- modified_at: page.mtime,
317
- })),
318
- });
319
- },
320
- }),
321
- tool({
322
- name: "wiki_read_file",
323
- description: "Read wiki files. Kinds: index, log, schema, or a specific page.",
324
- inputSchema: z.object({
325
- kind: z.enum(["index", "log", "schema", "page"]),
326
- path: z.string().optional(),
327
- }),
328
- callback: async (input) => {
329
- await ensureWikiLayout(root);
330
- if (input.kind === "page") {
331
- if (!input.path) {
332
- throw new Error("`path` is required when kind is `page`.");
333
- }
334
- const relativePath = pageRelativePath(input.path);
335
- const page = await readPageRecord(root, relativePath);
336
- return toJsonValue({
337
- root,
338
- kind: input.kind,
339
- path: page.path,
340
- frontmatter: page.frontmatter,
341
- title: page.title,
342
- summary: page.summary,
343
- word_count: page.wordCount,
344
- content: page.content,
345
- });
346
- }
347
- if (input.path) {
348
- throw new Error("`path` is only valid when kind is `page` and should be omitted otherwise.");
349
- }
350
- const target = input.kind === "index"
351
- ? INDEX_FILE
352
- : input.kind === "log"
353
- ? LOG_FILE
354
- : SCHEMA_FILE;
355
- const absolutePath = resolveWithinRoot(root, target);
356
- const content = await fs.readFile(absolutePath, "utf8");
357
- return toJsonValue({
358
- root,
359
- kind: input.kind,
360
- path: target,
361
- content,
362
- });
363
- },
364
- }),
365
- tool({
366
- name: "wiki_write_file",
367
- description: "Write wiki files. Page writes automatically maintain index, log, and search index.",
368
- inputSchema: z.object({
369
- kind: z.enum(["page", "schema"]),
370
- path: z.string().optional(),
371
- content: z.string().min(1),
372
- }),
373
- callback: async (input) => {
374
- await ensureWikiLayout(root);
375
- const content = input.content;
376
- if (input.kind === "schema") {
377
- if (input.path) {
378
- throw new Error("`path` is not valid when kind is `schema`.");
379
- }
380
- const schemaPath = resolveWithinRoot(root, SCHEMA_FILE);
381
- await fs.writeFile(schemaPath, content, "utf8");
382
- await appendLog(root, "schema_update", { path: SCHEMA_FILE });
383
- return toJsonValue({
384
- root,
385
- kind: input.kind,
386
- path: SCHEMA_FILE,
387
- bytes_written: Buffer.byteLength(content, "utf8"),
388
- index_updated: false,
389
- log_updated: true,
390
- search_index_updated: false,
391
- });
392
- }
393
- if (!input.path) {
394
- throw new Error("`path` is required when kind is `page`.");
395
- }
396
- const relativePath = pageRelativePath(input.path);
397
- const absolutePath = resolveWithinRoot(root, relativePath);
398
- const existed = await fileExists(absolutePath);
399
- await fs.mkdir(path.dirname(absolutePath), { recursive: true });
400
- await fs.writeFile(absolutePath, content, "utf8");
401
- const page = await readPageRecord(root, relativePath);
402
- await upsertPageSearch(page);
403
- const pages = await listPages(root);
404
- await writeIndex(root, pages);
405
- await appendLog(root, existed ? "page_update" : "page_create", {
406
- path: page.path,
407
- title: page.title,
408
- });
409
- return toJsonValue({
410
- root,
411
- kind: input.kind,
412
- path: page.path,
413
- title: page.title,
414
- summary: page.summary,
415
- bytes_written: Buffer.byteLength(content, "utf8"),
416
- index_updated: true,
417
- log_updated: true,
418
- search_index_updated: true,
419
- });
420
- },
421
- }),
422
- tool({
423
- name: "wiki_knowledge_graph",
424
- description: "Build the wiki knowledge graph from page frontmatter links and shared tags.",
425
- inputSchema: z.object({}),
426
- callback: async () => {
427
- await ensureWikiLayout(root);
428
- const pages = await listPages(root);
429
- const nodes = pages.map((page) => ({
430
- path: page.path,
431
- title: page.title,
432
- tags: page.tags,
433
- type: page.type ?? "page",
434
- word_count: page.wordCount,
435
- }));
436
- const edges = [];
437
- const inbound = new Map();
438
- const relatedOut = new Map();
439
- for (const page of pages) {
440
- relatedOut.set(page.path, page.related.length);
441
- for (const related of page.related) {
442
- edges.push({
443
- source: page.path,
444
- target: related,
445
- type: "related",
446
- });
447
- inbound.set(related, (inbound.get(related) ?? 0) + 1);
448
- }
449
- }
450
- const tagClusters = new Map();
451
- for (const page of pages) {
452
- for (const tag of page.tags) {
453
- if (!tagClusters.has(tag)) {
454
- tagClusters.set(tag, []);
455
- }
456
- tagClusters.get(tag).push(page.path);
457
- }
458
- }
459
- for (const [tag, members] of tagClusters.entries()) {
460
- if (members.length < 2) {
461
- continue;
462
- }
463
- for (let i = 0; i < members.length; i += 1) {
464
- for (let j = i + 1; j < members.length; j += 1) {
465
- const source = members[i];
466
- const target = members[j];
467
- edges.push({ source, target, type: "shared-tag", tag });
468
- }
469
- }
470
- }
471
- const orphans = pages.filter((page) => {
472
- const incoming = inbound.get(page.path) ?? 0;
473
- const outgoing = relatedOut.get(page.path) ?? 0;
474
- return incoming === 0 && outgoing === 0;
475
- });
476
- return toJsonValue({
477
- nodes,
478
- edges,
479
- tag_clusters: Object.fromEntries(tagClusters.entries()),
480
- stats: {
481
- pages: pages.length,
482
- links: edges.length,
483
- orphans: orphans.length,
484
- },
485
- });
486
- },
487
- }),
488
- tool({
489
- name: "wiki_stats",
490
- description: "Return wiki health and usage statistics for page content.",
491
- inputSchema: z.object({}),
492
- callback: async () => {
493
- await ensureWikiLayout(root);
494
- const pages = await listPages(root);
495
- const totalWords = pages.reduce((sum, page) => sum + page.wordCount, 0);
496
- const tags = new Set();
497
- const types = {};
498
- const inbound = new Map();
499
- for (const page of pages) {
500
- for (const tag of page.tags) {
501
- tags.add(tag);
502
- }
503
- const type = page.type ?? "page";
504
- types[type] = (types[type] ?? 0) + 1;
505
- for (const related of page.related) {
506
- inbound.set(related, (inbound.get(related) ?? 0) + 1);
507
- }
508
- }
509
- const orphans = pages.filter((page) => (inbound.get(page.path) ?? 0) === 0 && page.related.length === 0);
510
- const lastActivity = pages
511
- .map((page) => page.mtime)
512
- .sort()
513
- .at(-1);
514
- return toJsonValue({
515
- pages: pages.length,
516
- links: pages.reduce((sum, page) => sum + page.related.length, 0),
517
- orphans: orphans.length,
518
- total_words: totalWords,
519
- avg_words_per_page: pages.length > 0 ? totalWords / pages.length : 0,
520
- tags: tags.size,
521
- types,
522
- last_activity: lastActivity ?? null,
523
- });
524
- },
525
- }),
526
- tool({
527
- name: "wiki_search",
528
- description: "Semantic search over indexed wiki pages using the configured wiki Chroma collection.",
529
- inputSchema: z.object({
530
- query: z.string().min(1),
531
- k: z.number().int().min(1).max(MAX_SEARCH_LIMIT).optional(),
532
- }),
533
- callback: async (input) => {
534
- await ensureWikiLayout(root);
535
- const c = await collection();
536
- const result = await c.query({
537
- queryTexts: [input.query],
538
- nResults: input.k ?? DEFAULT_SEARCH_LIMIT,
539
- include: ["documents", "metadatas", "distances"],
540
- });
541
- const rows = result.rows()[0] ?? [];
542
- const matches = rows
543
- .filter((row) => typeof row.document === "string" && !!row.metadata)
544
- .map((row) => ({
545
- id: row.id,
546
- path: typeof row.metadata.path === "string" ? row.metadata.path : null,
547
- title: typeof row.metadata.title === "string"
548
- ? row.metadata.title
549
- : null,
550
- summary: typeof row.metadata.summary === "string"
551
- ? row.metadata.summary
552
- : null,
553
- tags: typeof row.metadata.tags === "string" ? row.metadata.tags : "",
554
- distance: row.distance ?? null,
555
- content: row.document,
556
- }));
557
- return toJsonValue({
558
- query: input.query,
559
- count: matches.length,
560
- matches,
561
- });
562
- },
563
- }),
564
- ];
565
- }
566
- //# sourceMappingURL=wiki.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wiki.js","sourceRoot":"","sources":["../../../src/core/tools/wiki.ts"],"names":[],"mappings":"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"}