Files
mnote/scripts/task769-weknora-knowledge-settings-ui-static-smoke.js
T

118 lines
3.8 KiB
JavaScript

#!/usr/bin/env node
"use strict";
const assert = require("node:assert");
const fs = require("node:fs");
const path = require("node:path");
const ROOT = process.cwd();
const OUTPUT_DIR = path.join(ROOT, "tmp", "task769-weknora-knowledge-settings-ui-static-smoke");
const RESULT_PATH = path.join(OUTPUT_DIR, "result.json");
const UI_PATH = "rust/crates/mnote-web/browser/sidebar-page-settings-runtime.js";
function read(relativePath) {
return fs.readFileSync(path.join(ROOT, relativePath), "utf8");
}
function assertContains(content, needle, label) {
assert(content.includes(needle), `${label} 缺少: ${needle}`);
}
function assertNotContains(content, needle, label) {
assert(!content.includes(needle), `${label} 不应包含: ${needle}`);
}
function assertOrdered(content, first, second, label) {
const firstIndex = content.indexOf(first);
const secondIndex = content.indexOf(second);
assert(firstIndex >= 0, `${label} 缺少: ${first}`);
assert(secondIndex >= 0, `${label} 缺少: ${second}`);
assert(firstIndex < secondIndex, `${label} 顺序错误: ${first} 应优先于 ${second}`);
}
function main() {
fs.mkdirSync(OUTPUT_DIR, { recursive: true });
const ui = read(UI_PATH);
for (const forbidden of [
"打开 LightRAG",
"相似度阈值",
"相关度:",
"本地 (Local)",
"全局 (Global)",
"朴素 (Naive)",
"混合模式 (Mix)",
"正在读取 LightRAG 状态",
"无法连接 LightRAG 服务",
]) {
assertNotContains(ui, forbidden, "WeKnora knowledge settings UI");
}
for (const required of [
"WeKnora",
"WeKnora hybrid",
"data-testid=\"mnote-weknora-knowledge-settings-panel\"",
"data-knowledge-rag-default-provider=\"weknora\"",
"data-knowledge-rag-legacy-fallback-provider=\"lightrag\"",
"data-knowledge-rag-source-registry=\"mnote\"",
"data-knowledge-rag-provider-index=\"weknora-kb-chunk-index\"",
"data-knowledge-rag-active-provider",
"data-knowledge-rag-reference-boundary",
"data-knowledge-rag-provider=\"weknora\"",
"data-knowledge-rag-provider-id",
"data-knowledge-rag-provider-ids",
"data-knowledge-rag-knowledge-id",
"data-knowledge-rag-chunk-count",
"data-knowledge-rag-processing-status",
"data-knowledge-rag-open-reference-mode",
"data-knowledge-rag-delete-local-file-policy=\"preserve-local-file\"",
"data-kb-rag-score-label=\"provider-ranking-score\"",
"data-kb-rag-score-is-similarity-percent=\"false\"",
"provider 排序分",
"MNote source registry",
"WeKnora KB chunk index",
"provider=weknora",
"provider ids",
"knowledgeId",
"chunkCount",
"processingStatus",
"定位降级",
"删除 provider index 与 registry 映射,不删除本地文件",
"打开知识库",
"Provider 检索策略",
"兼容阈值字段保留在请求层,不作为默认主控",
]) {
assertContains(ui, required, "WeKnora knowledge settings UI");
}
assertOrdered(
ui,
"(weknora && weknora.dashboardUrl)",
"status && (status.dashboardUrl || status.endpoint)",
"dashboardUrl 优先级"
);
const result = {
ok: true,
checkedFiles: [UI_PATH],
assertions: {
noDefaultLightRagCopy: true,
noSimilarityThresholdPrimaryControl: true,
noRelevancePercentCopy: true,
weknoraHybridSearchCopy: true,
providerSelectorCoverage: true,
sourceRegistrySelectorCoverage: true,
processingSelectorCoverage: true,
citationOpenReferenceSelectorCoverage: true,
providerRankingScoreCopy: true,
sourceRegistryBoundaryCopy: true,
deleteIndexDoesNotDeleteLocalFileCopy: true,
dashboardUrlPriority: true,
},
};
fs.writeFileSync(RESULT_PATH, `${JSON.stringify(result, null, 2)}\n`, "utf8");
console.log(JSON.stringify(result, null, 2));
}
main();