feat(authority): export diagnostics bundle

This commit is contained in:
Youzini-afk
2026-04-28 15:15:59 +08:00
parent 6693a036dd
commit 217573e8bb
7 changed files with 625 additions and 0 deletions

View File

@@ -0,0 +1,170 @@
import assert from "node:assert/strict";
import {
buildAuthorityDiagnosticsBundle,
buildAuthorityDiagnosticsBundlePath,
sanitizeDiagnosticsSettings,
writeAuthorityDiagnosticsBundle,
} from "../maintenance/authority-diagnostics-bundle.js";
function createMockAdapter() {
const calls = [];
return {
calls,
async writeJson(path, payload, options = {}) {
calls.push([path, payload, options]);
return {
ok: true,
path,
size: JSON.stringify(payload).length,
};
},
};
}
{
const sanitized = sanitizeDiagnosticsSettings({
authorityBaseUrl: "https://example.test",
authorityApiKey: "secret-1",
nested: {
embeddingApiKey: "secret-2",
label: "ok",
},
models: [
{ name: "a", token: "secret-3" },
{ name: "b", enabled: true },
],
});
assert.equal(sanitized.authorityBaseUrl, "https://example.test");
assert.equal(sanitized.authorityApiKey, "[REDACTED]");
assert.equal(sanitized.nested.embeddingApiKey, "[REDACTED]");
assert.equal(sanitized.nested.label, "ok");
assert.equal(sanitized.models[0].token, "[REDACTED]");
}
{
const bundle = buildAuthorityDiagnosticsBundle({
chatId: "chat/main",
reason: "manual-export",
settings: {
authorityApiKey: "secret-1",
authorityBlobEnabled: true,
},
runtimeStatus: {
text: "待命",
meta: "准备就绪",
level: "idle",
updatedAt: 1,
},
runtimeDebug: {
runtimeDebug: {
injections: {
recall: {
retrievalMeta: {
authorityCandidateUsed: true,
},
},
},
},
},
graphPersistence: {
authorityBlobState: "active",
authorityLastBlobPath: "user/files/demo.json",
},
graph: {
nodes: [
{ id: "n1", type: "memory", archived: false },
{ id: "n2", type: "summary", archived: true },
],
edges: [{ id: "e1" }],
historyState: {
chatId: "chat/main",
extractionCount: 4,
lastProcessedAssistantFloor: 12,
activeRegion: "archive",
activeRecallOwnerKeys: ["character:Alice"],
},
vectorIndexState: {
mode: "authority",
source: "authority-trivium",
dirty: false,
collectionId: "collection-1",
hashToNodeId: {
a: "n1",
},
},
summaryState: {
enabled: true,
lastSummarizedExtractionCount: 3,
},
},
lastExtractionStatus: {
text: "提取完成",
meta: "ok",
level: "success",
updatedAt: 2,
},
lastVectorStatus: {
text: "向量完成",
meta: "ok",
level: "success",
updatedAt: 3,
},
lastRecallStatus: {
text: "召回完成",
meta: "ok",
level: "success",
updatedAt: 4,
},
lastBatchStatus: {
ok: true,
stage: "finalize",
},
lastInjection: "A".repeat(4500),
lastExtract: [{ id: "n1" }],
lastRecall: [{ id: "n2" }],
});
assert.equal(bundle.kind, "st-bme-authority-diagnostics");
assert.equal(bundle.chatId, "chat/main");
assert.equal(bundle.settings.authorityApiKey, "[REDACTED]");
assert.equal(bundle.graphSummary.nodeCount, 2);
assert.equal(bundle.graphSummary.activeNodeCount, 1);
assert.equal(bundle.graphSummary.archivedNodeCount, 1);
assert.equal(bundle.graphSummary.edgeCount, 1);
assert.equal(bundle.lastInjection.textLength, 4500);
assert.equal(bundle.lastInjection.textPreview.length, 4000);
assert.equal(bundle.recentExtractedItems.length, 1);
assert.equal(bundle.recentRecalledItems.length, 1);
}
{
const path = buildAuthorityDiagnosticsBundlePath("chat/main", "manual-export");
assert.match(
path,
/^user\/files\/ST-BME_diagnostics_chat_main-manual-export-[a-z0-9]+-\d{8}-\d{6}\.json$/,
);
}
{
const adapter = createMockAdapter();
const bundle = buildAuthorityDiagnosticsBundle({
chatId: "chat-main",
reason: "manual-export",
settings: {},
});
const result = await writeAuthorityDiagnosticsBundle(adapter, bundle, {
chatId: "chat-main",
reason: "manual-export",
});
assert.equal(result.ok, true);
assert.match(
result.path,
/^user\/files\/ST-BME_diagnostics_chat-main-manual-export-[a-z0-9]+-\d{8}-\d{6}\.json$/,
);
assert.equal(adapter.calls.length, 1);
assert.equal(adapter.calls[0][2]?.metadata?.kind, "diagnostics-bundle");
assert.equal(adapter.calls[0][2]?.metadata?.chatId, "chat-main");
}
console.log("authority-diagnostics-bundle tests passed");