

























@@ -1,6 +1,10 @@
1+import fs from "node:fs/promises";
2+import path from "node:path";
13import { describe, expect, it } from "vitest";
24import type { ResolvedMemoryWikiConfig } from "./config.js";
3-import { createWikiApplyTool } from "./tool.js";
5+import { createWikiApplyTool, createWikiLintTool } from "./tool.js";
6+import { lintMemoryWikiVault } from "./lint.js";
7+import { createMemoryWikiTestHarness } from "./test-helpers.js";
4859function asSchemaObject(value: unknown): Record<string, unknown> {
610if (typeof value !== "object" || value === null || Array.isArray(value)) {
@@ -10,6 +14,8 @@ function asSchemaObject(value: unknown): Record<string, unknown> {
1014}
11151216describe("memory-wiki tools", () => {
17+const harness = createMemoryWikiTestHarness();
18+1319it("allows provenance metadata in wiki_apply claim evidence", () => {
1420const tool = createWikiApplyTool({} as ResolvedMemoryWikiConfig);
1521const applyProperties = asSchemaObject(asSchemaObject(tool.parameters).properties);
@@ -33,4 +39,40 @@ describe("memory-wiki tools", () => {
3339]);
3440expect(evidenceProperties.confidence).toEqual({ type: "number", minimum: 0, maximum: 1 });
3541});
42+43+it("returns tool-safe relative report paths from wiki_lint", async () => {
44+const { rootDir, config } = await harness.createVault({ initialize: true });
45+await fs.mkdir(path.join(rootDir, "syntheses"), { recursive: true });
46+await fs.writeFile(
47+path.join(rootDir, "syntheses", "bad.md"),
48+[
49+"---",
50+"id: synth-bad",
51+"pageType: synthesis",
52+"title: Bad Page",
53+"---",
54+"",
55+"This links to [[Missing Page]].",
56+].join("\n"),
57+"utf8",
58+);
59+60+const tool = createWikiLintTool(config);
61+const result = await tool.execute("lint-call", {});
62+const text = result.content.find((part) => part.type === "text")?.text ?? "";
63+const details = asSchemaObject(result.details);
64+65+expect(text).toContain("Report: reports/lint.md");
66+expect(text).not.toContain(rootDir);
67+expect(details.reportPath).toBe("reports/lint.md");
68+expect(details).not.toHaveProperty("vaultRoot");
69+expect(JSON.stringify(details)).not.toContain(rootDir);
70+expect(asSchemaObject(details.issuesByCategory).links).toEqual(
71+expect.arrayContaining([expect.objectContaining({ code: "broken-wikilink" })]),
72+);
73+74+const lintResult = await lintMemoryWikiVault(config);
75+expect(path.isAbsolute(lintResult.reportPath)).toBe(true);
76+expect(lintResult.reportPath).toContain(rootDir);
77+});
3678});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。