Harden auth/vault path sanitization and clean WeKnora docs
This commit is contained in:
@@ -691,49 +691,49 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
|
||||
function createKnowledgeRagSettingsPanelHtmlV2() {
|
||||
return '' +
|
||||
'<div class="wolai-page-settings-panel mnote-settings-panel mnote-knowledge-rag-settings-panel mnote-weknora-kb-page" role="dialog" aria-modal="false" aria-label="LightRAG 知识库" data-testid="mnote-weknora-knowledge-settings-panel" data-knowledge-rag-default-provider="lightrag" data-knowledge-rag-legacy-fallback-provider="lightrag" data-knowledge-rag-source-registry="mnote" data-knowledge-rag-provider-index="lightrag-source-registry" data-mnote-weknora-page-replacement="false">' +
|
||||
'<div class="mnote-weknora-kb-page-header">' +
|
||||
'<div class="mnote-weknora-kb-page-title">' +
|
||||
'<span class="mnote-weknora-kb-page-eyebrow">LightRAG</span>' +
|
||||
'<div class="wolai-page-settings-panel mnote-settings-panel mnote-knowledge-rag-settings-panel mnote-krag-kb-page" role="dialog" aria-modal="false" aria-label="LightRAG 知识库" data-testid="mnote-krag-knowledge-settings-panel" data-knowledge-rag-default-provider="lightrag" data-knowledge-rag-legacy-fallback-provider="lightrag" data-knowledge-rag-source-registry="mnote" data-knowledge-rag-provider-index="lightrag-source-registry" data-mnote-krag-page-replacement="false">' +
|
||||
'<div class="mnote-krag-kb-page-header">' +
|
||||
'<div class="mnote-krag-kb-page-title">' +
|
||||
'<span class="mnote-krag-kb-page-eyebrow">LightRAG</span>' +
|
||||
'<strong>知识库</strong>' +
|
||||
'<span>资料、索引状态和检索</span>' +
|
||||
'</div>' +
|
||||
'<div class="mnote-weknora-kb-page-actions">' +
|
||||
'<div class="mnote-krag-kb-page-actions">' +
|
||||
'<button type="button" data-knowledge-rag-action="refresh" title="刷新"><span class="material-symbols-outlined" data-icon="refresh" aria-hidden="true"></span></button>' +
|
||||
'<button type="button" data-knowledge-rag-action="open-dashboard" title="打开知识库" aria-label="打开知识库"><span class="material-symbols-outlined" data-icon="open_in_new" aria-hidden="true"></span></button>' +
|
||||
'<button type="button" class="mnote-settings-panel-close" data-settings-action="close" aria-label="关闭知识库"><span class="material-symbols-outlined" data-icon="close" aria-hidden="true"></span></button>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="mnote-weknora-kb-page-status" data-testid="mnote-knowledge-rag-status"></div>' +
|
||||
'<div class="mnote-weknora-kb-page-body" data-kb-list-hidden="true">' +
|
||||
'<aside class="mnote-weknora-kb-list-pane" data-testid="mnote-weknora-kb-list-pane" hidden>' +
|
||||
'<div class="mnote-weknora-kb-list-head">' +
|
||||
'<div><strong>资料库</strong><span data-testid="mnote-weknora-kb-list-count">0</span></div>' +
|
||||
'<div class="mnote-krag-kb-page-status" data-testid="mnote-knowledge-rag-status"></div>' +
|
||||
'<div class="mnote-krag-kb-page-body" data-kb-list-hidden="true">' +
|
||||
'<aside class="mnote-krag-kb-list-pane" data-testid="mnote-krag-kb-list-pane" hidden>' +
|
||||
'<div class="mnote-krag-kb-list-head">' +
|
||||
'<div><strong>资料库</strong><span data-testid="mnote-krag-kb-list-count">0</span></div>' +
|
||||
'<button type="button" data-knowledge-rag-action="toggle-create-kb" title="新建资料库"><span class="material-symbols-outlined" data-icon="create_new_folder" aria-hidden="true"></span></button>' +
|
||||
'</div>' +
|
||||
'<div class="mnote-weknora-kb-card-wrap" data-testid="mnote-weknora-kb-card-list"></div>' +
|
||||
'<div class="mnote-krag-kb-card-wrap" data-testid="mnote-krag-kb-card-list"></div>' +
|
||||
'</aside>' +
|
||||
'<section class="mnote-weknora-kb-detail-pane" data-testid="mnote-weknora-kb-detail-pane">' +
|
||||
'<div class="mnote-weknora-kb-detail-hero" data-testid="mnote-weknora-kb-detail-hero">' +
|
||||
'<section class="mnote-krag-kb-detail-pane" data-testid="mnote-krag-kb-detail-pane">' +
|
||||
'<div class="mnote-krag-kb-detail-hero" data-testid="mnote-krag-kb-detail-hero">' +
|
||||
'<div>' +
|
||||
'<nav class="mnote-weknora-kb-breadcrumb" data-testid="mnote-weknora-kb-breadcrumb" aria-label="知识库面包屑"><span>知识库</span><span>/</span><strong data-testid="mnote-weknora-kb-breadcrumb-current">LightRAG 资料库</strong></nav>' +
|
||||
'<span class="mnote-weknora-kb-type-pill"><span class="material-symbols-outlined" data-icon="folder" aria-hidden="true"></span>资料来源</span>' +
|
||||
'<h2 data-testid="mnote-weknora-kb-detail-title">LightRAG 资料库</h2>' +
|
||||
'<p data-testid="mnote-weknora-kb-detail-description">MNote 管理本地来源、引用定位和权限边界,LightRAG 负责索引与召回。</p>' +
|
||||
'<nav class="mnote-krag-kb-breadcrumb" data-testid="mnote-krag-kb-breadcrumb" aria-label="知识库面包屑"><span>知识库</span><span>/</span><strong data-testid="mnote-krag-kb-breadcrumb-current">LightRAG 资料库</strong></nav>' +
|
||||
'<span class="mnote-krag-kb-type-pill"><span class="material-symbols-outlined" data-icon="folder" aria-hidden="true"></span>资料来源</span>' +
|
||||
'<h2 data-testid="mnote-krag-kb-detail-title">LightRAG 资料库</h2>' +
|
||||
'<p data-testid="mnote-krag-kb-detail-description">MNote 管理本地来源、引用定位和权限边界,LightRAG 负责索引与召回。</p>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<section class="mnote-knowledge-rag-kb-manager" data-testid="mnote-knowledge-rag-kb-manager">' +
|
||||
'<div class="mnote-knowledge-rag-kb-manager-row">' +
|
||||
'<label class="mnote-knowledge-rag-kb-select-field"><span>当前资料库</span><select class="mnote-kb-params-select" data-testid="mnote-weknora-kb-select" data-knowledge-rag-kb-select="true"><option value="">加载中...</option></select></label>' +
|
||||
'<label class="mnote-knowledge-rag-kb-select-field"><span>当前资料库</span><select class="mnote-kb-params-select" data-testid="mnote-krag-kb-select" data-knowledge-rag-kb-select="true"><option value="">加载中...</option></select></label>' +
|
||||
'<button type="button" data-knowledge-rag-action="toggle-create-kb"><span class="material-symbols-outlined" data-icon="folder_add" aria-hidden="true"></span>新建</button>' +
|
||||
'<button type="button" data-knowledge-rag-action="delete-kb" data-knowledge-rag-delete-selected-kb="true"><span class="material-symbols-outlined" data-icon="delete" aria-hidden="true"></span>删除</button>' +
|
||||
'</div>' +
|
||||
'<section class="mnote-weknora-kb-create-card" data-testid="mnote-weknora-kb-controls" hidden>' +
|
||||
'<div class="mnote-weknora-kb-create-title"><span class="material-symbols-outlined" data-icon="folder_add" aria-hidden="true"></span><strong>新建资料库</strong></div>' +
|
||||
'<input type="text" class="wolai-page-settings-index-path" data-testid="mnote-weknora-create-kb-name" data-knowledge-rag-create-kb-name="true" placeholder="知识库名称" spellcheck="false" />' +
|
||||
'<input type="text" class="wolai-page-settings-index-path" data-testid="mnote-weknora-create-kb-description" data-knowledge-rag-create-kb-description="true" placeholder="描述,可留空" spellcheck="false" />' +
|
||||
'<section class="mnote-krag-kb-create-card" data-testid="mnote-krag-kb-controls" hidden>' +
|
||||
'<div class="mnote-krag-kb-create-title"><span class="material-symbols-outlined" data-icon="folder_add" aria-hidden="true"></span><strong>新建资料库</strong></div>' +
|
||||
'<input type="text" class="wolai-page-settings-index-path" data-testid="mnote-krag-create-kb-name" data-knowledge-rag-create-kb-name="true" placeholder="知识库名称" spellcheck="false" />' +
|
||||
'<input type="text" class="wolai-page-settings-index-path" data-testid="mnote-krag-create-kb-description" data-knowledge-rag-create-kb-description="true" placeholder="描述,可留空" spellcheck="false" />' +
|
||||
'<button type="button" class="wolai-page-settings-index-add" data-knowledge-rag-action="create-kb">创建知识库</button>' +
|
||||
'<span class="mnote-knowledge-rag-input-status" data-testid="mnote-weknora-create-kb-status" data-knowledge-rag-create-kb-status hidden></span>' +
|
||||
'<span class="mnote-knowledge-rag-input-status" data-testid="mnote-krag-create-kb-status" data-knowledge-rag-create-kb-status hidden></span>' +
|
||||
'</section>' +
|
||||
'<div class="mnote-knowledge-rag-kb-manager-note" data-testid="mnote-knowledge-rag-kb-manager-note"></div>' +
|
||||
'</section>' +
|
||||
@@ -742,27 +742,27 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
'<div class="mnote-knowledge-rag-meta" data-testid="mnote-knowledge-rag-meta"></div>' +
|
||||
'</details>' +
|
||||
'<div class="mnote-knowledge-rag-detail-tabs" role="tablist" aria-label="当前资料库内容">' +
|
||||
'<button type="button" class="mnote-knowledge-rag-detail-tab is-active" role="tab" aria-selected="true" data-kb-rag-tab="sources" data-testid="mnote-weknora-tab-documents">资料</button>' +
|
||||
'<button type="button" class="mnote-knowledge-rag-detail-tab" role="tab" aria-selected="false" data-kb-rag-tab="wiki" data-testid="mnote-weknora-tab-wiki" hidden>Wiki</button>' +
|
||||
'<button type="button" class="mnote-knowledge-rag-detail-tab" role="tab" aria-selected="false" data-kb-rag-tab="graph" data-testid="mnote-weknora-tab-graph" hidden>Graph</button>' +
|
||||
'<button type="button" class="mnote-knowledge-rag-detail-tab is-active" role="tab" aria-selected="true" data-kb-rag-tab="sources" data-testid="mnote-krag-tab-documents">资料</button>' +
|
||||
'<button type="button" class="mnote-knowledge-rag-detail-tab" role="tab" aria-selected="false" data-kb-rag-tab="wiki" data-testid="mnote-krag-tab-wiki" hidden>Wiki</button>' +
|
||||
'<button type="button" class="mnote-knowledge-rag-detail-tab" role="tab" aria-selected="false" data-kb-rag-tab="graph" data-testid="mnote-krag-tab-graph" hidden>Graph</button>' +
|
||||
'<button type="button" class="mnote-knowledge-rag-detail-tab" role="tab" aria-selected="false" data-kb-rag-tab="search">检索</button>' +
|
||||
'</div>' +
|
||||
'<div class="mnote-knowledge-rag-detail-panel" data-kb-rag-panel="sources">' +
|
||||
'<div class="mnote-weknora-doc-layout" data-testid="mnote-weknora-document-management">' +
|
||||
'<aside class="mnote-weknora-doc-sidebar" data-testid="mnote-weknora-doc-source-sidebar" hidden>' +
|
||||
'<div class="mnote-weknora-doc-sidebar-head"><strong>来源</strong><span>MNote registry</span></div>' +
|
||||
'<div class="mnote-weknora-doc-source-tags" data-testid="mnote-weknora-doc-source-tags">' +
|
||||
'<div class="mnote-krag-doc-layout" data-testid="mnote-krag-document-management">' +
|
||||
'<aside class="mnote-krag-doc-sidebar" data-testid="mnote-krag-doc-source-sidebar" hidden>' +
|
||||
'<div class="mnote-krag-doc-sidebar-head"><strong>来源</strong><span>MNote registry</span></div>' +
|
||||
'<div class="mnote-krag-doc-source-tags" data-testid="mnote-krag-doc-source-tags">' +
|
||||
'<button type="button" data-knowledge-rag-action="filter-sources" data-knowledge-rag-filter="all" data-active="true"><span class="material-symbols-outlined" data-icon="folder" aria-hidden="true"></span>全部资料</button>' +
|
||||
'<button type="button" data-knowledge-rag-action="filter-sources" data-knowledge-rag-filter="indexed"><span class="material-symbols-outlined" data-icon="check_circle" aria-hidden="true"></span>已索引</button>' +
|
||||
'<button type="button" data-knowledge-rag-action="filter-sources" data-knowledge-rag-filter="indexing"><span class="material-symbols-outlined" data-icon="sync" aria-hidden="true"></span>处理中</button>' +
|
||||
'</div>' +
|
||||
'<div class="mnote-weknora-doc-sidebar-head"><strong>标签</strong><span>MNote views</span></div>' +
|
||||
'<div class="mnote-weknora-doc-tags" data-testid="mnote-weknora-doc-tags"><span>PDF</span><span>Markdown</span><span>Folder</span><span>Citation</span></div>' +
|
||||
'<div class="mnote-krag-doc-sidebar-head"><strong>标签</strong><span>MNote views</span></div>' +
|
||||
'<div class="mnote-krag-doc-tags" data-testid="mnote-krag-doc-tags"><span>PDF</span><span>Markdown</span><span>Folder</span><span>Citation</span></div>' +
|
||||
'</aside>' +
|
||||
'<section class="mnote-weknora-doc-main">' +
|
||||
'<div class="mnote-weknora-doc-toolbar">' +
|
||||
'<div class="mnote-weknora-doc-search"><span class="material-symbols-outlined" data-icon="search" aria-hidden="true"></span><input type="text" data-testid="mnote-weknora-doc-filter-input" data-knowledge-rag-doc-filter-input="true" placeholder="搜索或筛选当前资料库内容" spellcheck="false" /></div>' +
|
||||
'<div class="mnote-weknora-view-switch" role="group" aria-label="文档视图切换" data-testid="mnote-weknora-view-switch">' +
|
||||
'<section class="mnote-krag-doc-main">' +
|
||||
'<div class="mnote-krag-doc-toolbar">' +
|
||||
'<div class="mnote-krag-doc-search"><span class="material-symbols-outlined" data-icon="search" aria-hidden="true"></span><input type="text" data-testid="mnote-krag-doc-filter-input" data-knowledge-rag-doc-filter-input="true" placeholder="搜索或筛选当前资料库内容" spellcheck="false" /></div>' +
|
||||
'<div class="mnote-krag-view-switch" role="group" aria-label="文档视图切换" data-testid="mnote-krag-view-switch">' +
|
||||
'<button type="button" class="is-active" data-knowledge-rag-view="list" aria-pressed="true" title="列表视图"><span class="material-symbols-outlined" data-icon="view_list" aria-hidden="true"></span></button>' +
|
||||
'<button type="button" data-knowledge-rag-view="grid" aria-pressed="false" title="网格视图"><span class="material-symbols-outlined" data-icon="grid_view" aria-hidden="true"></span></button>' +
|
||||
'</div>' +
|
||||
@@ -774,24 +774,24 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
'<div class="mnote-knowledge-rag-source-inputs" data-testid="mnote-knowledge-rag-source-inputs">' +
|
||||
knowledgeRagSourceInputRow('') +
|
||||
'</div>' +
|
||||
'<div class="mnote-weknora-doc-actions">' +
|
||||
'<div class="mnote-krag-doc-actions">' +
|
||||
'<button type="button" class="mnote-knowledge-rag-primary-action" data-knowledge-rag-action="ingest">开始索引</button>' +
|
||||
'<button type="button" data-knowledge-rag-action="prune">清除失效记录</button>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="mnote-knowledge-rag-source-filters" data-testid="mnote-knowledge-rag-source-filters"></div>' +
|
||||
'<div class="mnote-weknora-doc-table" data-testid="mnote-knowledge-rag-sources" data-weknora-document-list-view="true"></div>' +
|
||||
'<div class="mnote-krag-doc-table" data-testid="mnote-knowledge-rag-sources" data-krag-document-list-view="true"></div>' +
|
||||
'</section>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="mnote-knowledge-rag-detail-panel" data-kb-rag-panel="wiki" hidden>' +
|
||||
'<div class="mnote-weknora-placeholder-panel" data-testid="mnote-weknora-wiki-panel">' +
|
||||
'<div class="mnote-krag-placeholder-panel" data-testid="mnote-krag-wiki-panel">' +
|
||||
'<strong>Wiki</strong>' +
|
||||
'<span>后续可基于 LightRAG 召回结果生成知识页;当前以 MNote open-reference 边界为准。</span>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="mnote-knowledge-rag-detail-panel" data-kb-rag-panel="graph" hidden>' +
|
||||
'<div class="mnote-weknora-placeholder-panel" data-testid="mnote-weknora-graph-panel">' +
|
||||
'<div class="mnote-krag-placeholder-panel" data-testid="mnote-krag-graph-panel">' +
|
||||
'<strong>Graph</strong>' +
|
||||
'<span>展示 LightRAG 图谱和文档关系入口,本地文件真相仍由 MNote source registry 管理。</span>' +
|
||||
'</div>' +
|
||||
@@ -1255,9 +1255,7 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
|
||||
function knowledgeRagProviderLabel(status) {
|
||||
var providerName = knowledgeRagProviderName(status);
|
||||
if (providerName === 'weknora') return 'WeKnora';
|
||||
if (providerName === 'lightrag') return 'LightRAG';
|
||||
if (providerName === 'lightrag_legacy') return 'LightRAG';
|
||||
if (providerName === 'lightrag' || providerName === 'lightrag_legacy') return 'LightRAG';
|
||||
return providerName;
|
||||
}
|
||||
|
||||
@@ -1371,10 +1369,8 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
}
|
||||
|
||||
function knowledgeRagProviderKnowledgeBaseIds(status) {
|
||||
var config = status && status.providerConfig && typeof status.providerConfig === 'object' ? status.providerConfig : {};
|
||||
var weknora = config.weknora && typeof config.weknora === 'object' ? config.weknora : {};
|
||||
var ids = [];
|
||||
var raw = weknora.knowledgeBaseIds || weknora.knowledge_base_ids || status && status.knowledgeBaseIds || [];
|
||||
var raw = status && status.knowledgeBaseIds || [];
|
||||
if (!Array.isArray(raw) && raw) raw = [raw];
|
||||
(Array.isArray(raw) ? raw : []).forEach(function(id) {
|
||||
var text = String(id || '').trim();
|
||||
@@ -1542,10 +1538,10 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
}
|
||||
|
||||
function renderKnowledgeRagKnowledgeBaseCards(popover, status, entries, providerDocs) {
|
||||
var listNode = popover.querySelector('[data-testid="mnote-weknora-kb-card-list"]');
|
||||
var countNode = popover.querySelector('[data-testid="mnote-weknora-kb-list-count"]');
|
||||
var listPane = popover.querySelector('[data-testid="mnote-weknora-kb-list-pane"]');
|
||||
var pageBody = popover.querySelector('.mnote-weknora-kb-page-body');
|
||||
var listNode = popover.querySelector('[data-testid="mnote-krag-kb-card-list"]');
|
||||
var countNode = popover.querySelector('[data-testid="mnote-krag-kb-list-count"]');
|
||||
var listPane = popover.querySelector('[data-testid="mnote-krag-kb-list-pane"]');
|
||||
var pageBody = popover.querySelector('.mnote-krag-kb-page-body');
|
||||
if (!(listNode instanceof HTMLElement)) return;
|
||||
var bases = knowledgeRagKnowledgeBases(status || {});
|
||||
var selected = selectedKnowledgeRagProviderKnowledgeBaseId(status || {});
|
||||
@@ -1563,9 +1559,9 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
var baseStatus = String(base.status || 'active');
|
||||
var baseStatusLabel = knowledgeRagBaseStatusLabel(baseStatus);
|
||||
return '' +
|
||||
'<button type="button" class="mnote-weknora-kb-card' + (isActive ? ' is-active' : '') + '" data-knowledge-rag-action="select-kb" data-knowledge-rag-kb-id="' + escapeHtml(base.providerKbId) + '" data-knowledge-rag-kb-provider="' + escapeHtml(providerName) + '" data-knowledge-rag-processing-count="' + escapeHtml(String(stats.processingCount)) + '">' +
|
||||
'<span class="mnote-weknora-kb-card-star"><span class="material-symbols-outlined" data-icon="folder" aria-hidden="true"></span></span>' +
|
||||
'<span class="mnote-weknora-kb-card-main">' +
|
||||
'<button type="button" class="mnote-krag-kb-card' + (isActive ? ' is-active' : '') + '" data-knowledge-rag-action="select-kb" data-knowledge-rag-kb-id="' + escapeHtml(base.providerKbId) + '" data-knowledge-rag-kb-provider="' + escapeHtml(providerName) + '" data-knowledge-rag-processing-count="' + escapeHtml(String(stats.processingCount)) + '">' +
|
||||
'<span class="mnote-krag-kb-card-star"><span class="material-symbols-outlined" data-icon="folder" aria-hidden="true"></span></span>' +
|
||||
'<span class="mnote-krag-kb-card-main">' +
|
||||
'<strong title="' + escapeHtml(base.name) + '">' + escapeHtml(base.name) + '</strong>' +
|
||||
'<em title="' + escapeHtml(base.description || '暂无描述') + '">' + escapeHtml(base.description || '暂无描述') + '</em>' +
|
||||
'<span>' +
|
||||
@@ -1574,16 +1570,16 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
(stats.processingCount ? '<i class="is-processing"><span class="material-symbols-outlined" data-icon="sync" aria-hidden="true"></span>' + escapeHtml(String(stats.processingCount)) + '</i>' : '') +
|
||||
'</span>' +
|
||||
'</span>' +
|
||||
'<span class="mnote-weknora-kb-card-status" data-status="' + escapeHtml(baseStatus) + '">' + escapeHtml(baseStatusLabel) + '</span>' +
|
||||
'<span class="mnote-krag-kb-card-status" data-status="' + escapeHtml(baseStatus) + '">' + escapeHtml(baseStatusLabel) + '</span>' +
|
||||
'</button>';
|
||||
}).join('');
|
||||
}
|
||||
|
||||
function renderKnowledgeRagKnowledgeBaseHero(popover, status, entries, providerDocs) {
|
||||
var heroNode = popover.querySelector('[data-testid="mnote-weknora-kb-detail-hero"]');
|
||||
var titleNode = popover.querySelector('[data-testid="mnote-weknora-kb-detail-title"]');
|
||||
var descNode = popover.querySelector('[data-testid="mnote-weknora-kb-detail-description"]');
|
||||
var breadcrumbNode = popover.querySelector('[data-testid="mnote-weknora-kb-breadcrumb-current"]');
|
||||
var heroNode = popover.querySelector('[data-testid="mnote-krag-kb-detail-hero"]');
|
||||
var titleNode = popover.querySelector('[data-testid="mnote-krag-kb-detail-title"]');
|
||||
var descNode = popover.querySelector('[data-testid="mnote-krag-kb-detail-description"]');
|
||||
var breadcrumbNode = popover.querySelector('[data-testid="mnote-krag-kb-breadcrumb-current"]');
|
||||
if (!(titleNode instanceof HTMLElement) || !(descNode instanceof HTMLElement)) return;
|
||||
var bases = knowledgeRagKnowledgeBases(status || {});
|
||||
var selected = selectedKnowledgeRagProviderKnowledgeBaseId(status || {});
|
||||
@@ -1646,14 +1642,11 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
deleteButton.title = canDelete ? '删除当前空资料库' : (selectedValue === 'lightrag-default' ? '默认资料库不能删除' : '请先移除资料后再删除资料库');
|
||||
}
|
||||
if (noteNode instanceof HTMLElement) {
|
||||
var providerName = knowledgeRagProviderName(status || {});
|
||||
var activeName = activeBase.name || '当前资料库';
|
||||
if (selectedValue === 'lightrag-default') {
|
||||
noteNode.textContent = '默认资料库显示当前工作区全部已索引资料;新建资料库可管理独立资料范围。';
|
||||
} else if (activeStats.sourceCount === 0 && activeStats.processingCount === 0) {
|
||||
noteNode.textContent = activeName + ':空资料库,可添加资料或直接删除。';
|
||||
} else if (providerName === 'weknora') {
|
||||
noteNode.textContent = bases.length > 1 ? '已连接多个资料库,可用下拉框切换当前范围。' : '当前只有一个资料库,可新建后切换。';
|
||||
} else {
|
||||
noteNode.textContent = bases.length > 1 ? '当前可切换资料库;删除前需要先移除其中资料。' : '当前使用默认资料库,也可以新建一个资料库管理独立范围。';
|
||||
}
|
||||
@@ -1674,7 +1667,7 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
var activeCount = Object.keys(activeKbIds).length || kbIds.length;
|
||||
var processingCount = knowledgeRagInFlightCount(entries, providerDocs);
|
||||
return '' +
|
||||
'<div class="mnote-weknora-kb-summary-card" data-testid="mnote-weknora-kb-summary" data-knowledge-rag-kb-id="' + escapeHtml(kbIds[0] || '') + '" data-knowledge-rag-kb-ids="' + escapeHtml(kbIds.join(',')) + '" data-knowledge-rag-kb-provider="' + escapeHtml(knowledgeRagProviderName(status || {})) + '" data-knowledge-rag-kb-status="configured">' +
|
||||
'<div class="mnote-krag-kb-summary-card" data-testid="mnote-krag-kb-summary" data-knowledge-rag-kb-id="' + escapeHtml(kbIds[0] || '') + '" data-knowledge-rag-kb-ids="' + escapeHtml(kbIds.join(',')) + '" data-knowledge-rag-kb-provider="' + escapeHtml(knowledgeRagProviderName(status || {})) + '" data-knowledge-rag-kb-status="configured">' +
|
||||
'<div><span>知识库</span><strong>' + escapeHtml(activeCount ? String(activeCount) + ' 个' : '未配置') + '</strong></div>' +
|
||||
'<div><span>文档</span><strong>' + escapeHtml(String((entries || []).length)) + '</strong></div>' +
|
||||
'<div><span>索引文档</span><strong>' + escapeHtml(String((providerDocs || []).length)) + '</strong></div>' +
|
||||
@@ -1928,7 +1921,7 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
|
||||
function renderKnowledgeRagSourceFilters(popover, rows) {
|
||||
var filtersNode = popover.querySelector('[data-testid="mnote-knowledge-rag-source-filters"]');
|
||||
var sourceTagsNode = popover.querySelector('[data-testid="mnote-weknora-doc-source-tags"]');
|
||||
var sourceTagsNode = popover.querySelector('[data-testid="mnote-krag-doc-source-tags"]');
|
||||
if (!(filtersNode instanceof HTMLElement)) return;
|
||||
var counts = rows.reduce(function(acc, row) {
|
||||
acc.all += 1;
|
||||
@@ -1997,7 +1990,7 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
if (filePath) providerDocsByPath.set(filePath, doc);
|
||||
});
|
||||
var listView = String(pageUiState.knowledgeRagDocumentView || 'list') === 'grid' ? 'grid' : 'list';
|
||||
sourcesNode.setAttribute('data-weknora-document-view', listView);
|
||||
sourcesNode.setAttribute('data-krag-document-view', listView);
|
||||
sourcesNode.innerHTML = items.map(function(row) {
|
||||
if (row.kind === 'provider') {
|
||||
var doc = row.doc || {};
|
||||
@@ -2022,7 +2015,7 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
'<div class="mnote-knowledge-rag-source-main">' +
|
||||
'<strong title="' + escapeHtml(providerTitle) + '">' + escapeHtml(providerTitle) + '</strong>' +
|
||||
'<span>' + escapeHtml(providerMeta) + '</span>' +
|
||||
'<span class="mnote-weknora-source-aux"><i>' + escapeHtml(knowledgeId || '索引记录') + '</i><i>' + escapeHtml(providerPath ? '引用可回跳' : '无法直接定位') + '</i></span>' +
|
||||
'<span class="mnote-krag-source-aux"><i>' + escapeHtml(knowledgeId || '索引记录') + '</i><i>' + escapeHtml(providerPath ? '引用可回跳' : '无法直接定位') + '</i></span>' +
|
||||
knowledgeRagSourceProgressHtml(providerProgress) +
|
||||
'</div>' +
|
||||
'<div class="mnote-knowledge-rag-source-actions"></div>' +
|
||||
@@ -2075,7 +2068,7 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
'<div class="mnote-knowledge-rag-source-main">' +
|
||||
'<strong title="' + escapeHtml(title) + '">' + escapeHtml(title || '未命名资料') + '</strong>' +
|
||||
'<span>' + escapeHtml(meta) + '</span>' +
|
||||
'<span class="mnote-weknora-source-aux"><i>' + escapeHtml(kbId || '未绑定 KB') + '</i><i>' + escapeHtml(knowledgeId || '待生成 citation') + '</i></span>' +
|
||||
'<span class="mnote-krag-source-aux"><i>' + escapeHtml(kbId || '未绑定 KB') + '</i><i>' + escapeHtml(knowledgeId || '待生成 citation') + '</i></span>' +
|
||||
knowledgeRagSourceProgressHtml(entryProgress) +
|
||||
'</div>' +
|
||||
'<div class="mnote-knowledge-rag-source-actions">' +
|
||||
@@ -2191,12 +2184,8 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
|
||||
function publicKnowledgeRagDashboardUrl(status) {
|
||||
var config = status && status.providerConfig && typeof status.providerConfig === 'object' ? status.providerConfig : {};
|
||||
var active = knowledgeRagProviderName(status || {});
|
||||
var weknora = config.weknora && typeof config.weknora === 'object' ? config.weknora : {};
|
||||
var lightrag = config.lightrag && typeof config.lightrag === 'object' ? config.lightrag : {};
|
||||
var url = active === 'weknora'
|
||||
? String((weknora && weknora.dashboardUrl) || (status && (status.dashboardUrl || status.endpoint)) || '').trim()
|
||||
: String((status && (status.dashboardUrl || status.endpoint)) || (lightrag && lightrag.dashboardUrl) || '').trim();
|
||||
var url = String((status && (status.dashboardUrl || status.endpoint)) || (lightrag && lightrag.dashboardUrl) || '').trim();
|
||||
if (!url) return '';
|
||||
try {
|
||||
var parsed = new URL(url, window.location.href);
|
||||
@@ -2360,7 +2349,7 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
|
||||
function setKnowledgeRagCreateCardVisible(visible) {
|
||||
var popover = ensureKnowledgeRagSettingsPopover();
|
||||
var card = popover.querySelector('[data-testid="mnote-weknora-kb-controls"]');
|
||||
var card = popover.querySelector('[data-testid="mnote-krag-kb-controls"]');
|
||||
var statusNode = popover.querySelector('[data-knowledge-rag-create-kb-status]');
|
||||
if (card instanceof HTMLElement) card.hidden = !visible;
|
||||
if (statusNode instanceof HTMLElement && visible) statusNode.hidden = true;
|
||||
@@ -2372,7 +2361,7 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
|
||||
function toggleKnowledgeRagCreateCard() {
|
||||
var popover = ensureKnowledgeRagSettingsPopover();
|
||||
var card = popover.querySelector('[data-testid="mnote-weknora-kb-controls"]');
|
||||
var card = popover.querySelector('[data-testid="mnote-krag-kb-controls"]');
|
||||
setKnowledgeRagCreateCardVisible(!(card instanceof HTMLElement) || card.hidden);
|
||||
}
|
||||
|
||||
@@ -2724,7 +2713,10 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
}
|
||||
|
||||
// --- 检索测试 ---
|
||||
function knowledgeRagSearchResultSourcePath(result) {
|
||||
// depth 限制防止恶意/循环 source 对象导致栈溢出
|
||||
function knowledgeRagSearchResultSourcePath(result, depth) {
|
||||
if (depth == null) depth = 0;
|
||||
if (depth > 4) return '';
|
||||
var candidates = [
|
||||
result && result.sourceRootRelativePath,
|
||||
result && result.source_root_relative_path,
|
||||
@@ -2740,7 +2732,7 @@ export function createSidebarPageSettingsRuntime(context) {
|
||||
}
|
||||
var source = result && result.source;
|
||||
if (source && typeof source === 'object') {
|
||||
return knowledgeRagSearchResultSourcePath(source);
|
||||
return knowledgeRagSearchResultSourcePath(source, depth + 1);
|
||||
}
|
||||
if (typeof source === 'string' && source.trim()) return source.trim();
|
||||
return '';
|
||||
|
||||
Reference in New Issue
Block a user