ЮИ - Упростить карточки автопрогонов до названия даты id режима и типа

This commit is contained in:
2026-04-17 14:09:38 +03:00
parent 9f0f7f3e79
commit 6223062b37
17 changed files with 896 additions and 37 deletions
+80 -3
View File
@@ -10,6 +10,7 @@ const path_1 = __importDefault(require("path"));
const express_1 = require("express");
const iconv_lite_1 = __importDefault(require("iconv-lite"));
const config_1 = require("../config");
const agentSemanticRunRegistry_1 = require("../services/agentSemanticRunRegistry");
const http_1 = require("../utils/http");
const capabilitiesRegistry_1 = require("../services/capabilitiesRegistry");
const openaiResponsesClient_1 = require("../services/openaiResponsesClient");
@@ -189,7 +190,14 @@ function readAutoGenHistory() {
? repairAutogenMojibake(String(toRecord(item.context)?.agent_focus))
: null,
architecture_phase: toStringSafe(toRecord(item.context)?.architecture_phase),
source_spec_file: toStringSafe(toRecord(item.context)?.source_spec_file)
source_spec_file: toStringSafe(toRecord(item.context)?.source_spec_file),
scenario_id: toStringSafe(toRecord(item.context)?.scenario_id),
semantic_tags: Array.isArray(toRecord(item.context)?.semantic_tags)
? Array.from(new Set((toRecord(item.context)?.semantic_tags)
.map((tag) => toStringSafe(tag))
.filter((tag) => Boolean(tag))))
: null,
latest_acceptance: null
}
: null
}))
@@ -207,6 +215,75 @@ function writeAutoGenHistory(records) {
}
fs_1.default.writeFileSync(config_1.AUTORUN_GENERATOR_HISTORY_FILE, JSON.stringify(records, null, 2), "utf-8");
}
function isAgentSemanticHistoryRecord(record) {
if (record.context?.agent_run === true) {
return true;
}
if (record.context?.saved_case_set_kind === "agent_semantic_scenario") {
return true;
}
return typeof record.title === "string" && record.title.trim().toUpperCase().startsWith("AGENT");
}
function hydrateAutoGenHistoryForApi(records) {
const specSummaryCache = new Map();
const acceptanceCache = new Map();
const readSpecSummary = (sourceSpecFile) => {
const normalizedPath = toStringSafe(sourceSpecFile);
if (!normalizedPath) {
return null;
}
if (specSummaryCache.has(normalizedPath)) {
return specSummaryCache.get(normalizedPath) ?? null;
}
const summary = (0, agentSemanticRunRegistry_1.readAgentSemanticSpecSummaryFromFile)(normalizedPath);
specSummaryCache.set(normalizedPath, summary);
return summary;
};
const readAcceptanceSummary = (scenarioId) => {
const normalizedScenarioId = toStringSafe(scenarioId);
if (!normalizedScenarioId) {
return null;
}
if (acceptanceCache.has(normalizedScenarioId)) {
return acceptanceCache.get(normalizedScenarioId) ?? null;
}
const summary = (0, agentSemanticRunRegistry_1.findLatestAgentSemanticAcceptanceSummary)({
artifactsRootDir: path_1.default.resolve(config_1.ARTIFACTS_DIR, "domain_runs"),
repoRootDir: config_1.PROJECT_ROOT,
scenarioId: normalizedScenarioId
});
acceptanceCache.set(normalizedScenarioId, summary);
return summary;
};
return records.map((record) => {
if (!isAgentSemanticHistoryRecord(record)) {
return record;
}
const specSummary = readSpecSummary(record.context?.source_spec_file);
const scenarioId = toStringSafe(record.context?.scenario_id) ?? specSummary?.scenario_id ?? null;
const semanticTags = Array.isArray(record.context?.semantic_tags) && record.context?.semantic_tags.length > 0
? Array.from(new Set(record.context?.semantic_tags.map((item) => String(item).trim()).filter((item) => item.length > 0)))
: specSummary?.semantic_tags ?? [];
const latestAcceptance = readAcceptanceSummary(scenarioId);
return {
...record,
context: {
...(record.context ?? {
llm_provider: null,
model: null,
assistant_prompt_version: null,
decomposition_prompt_version: null,
prompt_fingerprint: null,
autogen_personality_id: null,
autogen_personality_prompt: null
}),
scenario_id: scenarioId,
semantic_tags: semanticTags,
latest_acceptance: latestAcceptance
}
};
});
}
function readEvalDatasetCases(filePath) {
try {
const parsed = JSON.parse(fs_1.default.readFileSync(filePath, "utf-8"));
@@ -2015,9 +2092,9 @@ function buildAutoRunsRouter(services, openaiClient = new openaiResponsesClient_
const rawMode = toStringSafe(req.query.mode);
const includeAllModes = !rawMode || !isAutoGenMode(rawMode);
const modeFilter = rawMode ?? "codex_creative";
const items = readAutoGenHistory()
const items = hydrateAutoGenHistoryForApi(readAutoGenHistory()
.filter((item) => (includeAllModes ? true : item.mode === modeFilter))
.slice(0, limit);
.slice(0, limit));
(0, http_1.ok)(res, {
ok: true,
generated_at: new Date().toISOString(),