Accept pasted Scattermind concept maps

This commit is contained in:
OpenClaw Bot
2026-05-27 00:19:33 +02:00
parent 771b5e7c02
commit 4b3fb9e7d9
5 changed files with 122 additions and 18 deletions
+27 -2
View File
@@ -51,6 +51,31 @@ function laneClass(lane) {
return `lane-${lane?.id || 'defer'}`;
}
function parsePastedJsonPayload(value) {
const text = String(value || '').trim();
if (!text.startsWith('{') || !text.endsWith('}')) return null;
try {
const parsed = JSON.parse(text);
const looksLikeBridgePayload = parsed && typeof parsed === 'object' && !Array.isArray(parsed) && (
parsed.schema || parsed.featureSet || parsed.conceptMap || parsed.lenses || parsed.reference_code || parsed.referenceCode || parsed.artifactId || parsed.ideaText
);
return looksLikeBridgePayload ? parsed : null;
} catch {
return null;
}
}
function payloadFromForm(formPayload) {
const ideaJson = parsePastedJsonPayload(formPayload.idea);
const optionsJson = parsePastedJsonPayload(formPayload.optionsText);
const embedded = ideaJson || optionsJson;
if (!embedded) return formPayload;
const merged = { ...embedded };
if (!merged.mode && formPayload.mode) merged.mode = formPayload.mode;
if (String(formPayload.context || '').trim() && !merged.context) merged.context = formPayload.context;
return merged;
}
function renderMetrics(metrics = {}) {
const items = [
['Value', metrics.value],
@@ -227,8 +252,8 @@ function renderResults(data) {
async function createFeedbackMap(event) {
event.preventDefault();
const submit = form.querySelector('button[type="submit"]');
const payload = Object.fromEntries(new FormData(form).entries());
if (!String(payload.optionsText || '').trim()) payload.optionsText = payload.idea;
const payload = payloadFromForm(Object.fromEntries(new FormData(form).entries()));
if (!String(payload.optionsText || '').trim() && !payload.conceptMap && !payload.featureSet && !payload.lenses) payload.optionsText = payload.idea;
submit.disabled = true;
submit.textContent = 'Judging…';
try {