Accept stored Scattermind concept map rows

This commit is contained in:
OpenClaw Bot
2026-05-27 16:17:12 +02:00
parent 421913dc2c
commit ca186f2a01
3 changed files with 81 additions and 3 deletions
+43 -1
View File
@@ -656,6 +656,48 @@ function expandEmbeddedRankPayload(body = {}) {
return original;
}
function parseObjectJsonString(value = '') {
if (typeof value !== 'string' || !value.trim()) return null;
try {
const parsed = JSON.parse(value);
return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : null;
} catch {
return null;
}
}
function expandStoredScattermindReading(body = {}) {
const original = objectFrom(body);
const storedReading = original.fullReadingJson
|| original.full_reading_json
|| original.fullReading
|| original.full_reading
|| original.conceptMapJson
|| original.concept_map_json
|| '';
const parsedReading = typeof storedReading === 'string'
? parseObjectJsonString(storedReading)
: objectFrom(storedReading);
if (!parsedReading || !Object.keys(parsedReading).length) return original;
const expanded = {
...parsedReading,
...original,
lenses: original.lenses || parsedReading.lenses,
threads_to_hold: original.threads_to_hold || original.threadsToHold || parsedReading.threads_to_hold || parsedReading.threadsToHold,
questions_to_sit_with: original.questions_to_sit_with || original.questionsToSitWith || parsedReading.questions_to_sit_with || parsedReading.questionsToSitWith,
closing_note: original.closing_note || original.closingNote || parsedReading.closing_note || parsedReading.closingNote,
reference_code: original.reference_code || original.referenceCode || parsedReading.reference_code || parsedReading.referenceCode,
working_name: original.working_name || original.workingName || parsedReading.working_name || parsedReading.workingName,
opening_reflection: original.opening_reflection || original.openingReflection || parsedReading.opening_reflection || parsedReading.openingReflection,
restated_idea: original.restated_idea || original.restatedIdea || parsedReading.restated_idea || parsedReading.restatedIdea,
ideaText: original.ideaText || original.idea_text || parsedReading.ideaText || parsedReading.idea_text,
context: original.context || parsedReading.context || '',
};
expanded._storedScattermindReading = true;
return expanded;
}
function cleanProvenance(input = {}) {
const envelope = bridgeEnvelopeFrom(input);
const featureSet = featureSetFrom(input);
@@ -1595,7 +1637,7 @@ function createHandoffContract({ ranked, provenance, decisionContext }) {
}
app.post('/api/rank-feedback', (req, res) => {
const body = expandEmbeddedRankPayload(req.body || {});
const body = expandStoredScattermindReading(expandEmbeddedRankPayload(req.body || {}));
const envelope = bridgeEnvelopeFrom(body);
const idea = cleanMultiline(body?.idea || body?.ideaText || body?.idea_text || body?.opening_reflection || body?.restated_idea || envelope.idea || envelope.ideaText || envelope.idea_text || envelope.opening_reflection || envelope.restated_idea || '', 3000);
const context = cleanContextText(body?.context || envelope.context || '');