Accept stringified Ranker bridge envelopes

This commit is contained in:
OpenClaw Bot
2026-05-27 19:45:52 +02:00
parent 13622de5a0
commit fae434391b
3 changed files with 88 additions and 9 deletions
+48 -7
View File
@@ -520,8 +520,6 @@ function featureSetFrom(input = {}) {
|| body.candidate_feature_set
|| body.rankReadyFeatureSet
|| body.rank_ready_feature_set
|| body.buildOrderPreview
|| body.build_order_preview
|| envelope.featureSet
|| envelope.feature_set
|| envelope.candidateSet
@@ -530,8 +528,6 @@ function featureSetFrom(input = {}) {
|| envelope.candidate_feature_set
|| envelope.rankReadyFeatureSet
|| envelope.rank_ready_feature_set
|| envelope.buildOrderPreview
|| envelope.build_order_preview
);
}
@@ -699,14 +695,59 @@ function parseEmbeddedRankPayload(value = '') {
function expandEmbeddedRankPayload(body = {}) {
const original = objectFrom(body);
for (const key of ['payload', 'rankPayload', 'scattermindPayload', 'conceptMapJson', 'concept_map_json', 'fullReadingJson', 'full_reading_json', 'fullReading', 'full_reading', 'idea', 'ideaText', 'optionsText']) {
const stringOnlyEmbeddedKeys = new Set([
'rankerInput',
'ranker_input',
'rankerHandoff',
'ranker_handoff',
'rankerBridge',
'ranker_bridge',
'rankReady',
'rank_ready',
'bridge',
'bridgePayload',
'bridge_payload',
'continuation',
'continuationPlan',
'continuation_plan',
]);
for (const key of [
'payload',
'rankPayload',
'scattermindPayload',
'rankerInput',
'ranker_input',
'rankerHandoff',
'ranker_handoff',
'rankerBridge',
'ranker_bridge',
'rankReady',
'rank_ready',
'bridge',
'bridgePayload',
'bridge_payload',
'continuation',
'continuationPlan',
'continuation_plan',
'conceptMapJson',
'concept_map_json',
'fullReadingJson',
'full_reading_json',
'fullReading',
'full_reading',
'idea',
'ideaText',
'optionsText',
]) {
const embedded = typeof original[key] === 'string'
? parseEmbeddedRankPayload(original[key])
: looksLikeRankPayload(original[key])
: !stringOnlyEmbeddedKeys.has(key) && looksLikeRankPayload(original[key])
? original[key]
: null;
if (!embedded) continue;
const expanded = { ...original, ...embedded };
const expanded = stringOnlyEmbeddedKeys.has(key)
? { ...original, [key]: embedded }
: { ...original, ...embedded };
if (key === 'idea' && !embedded.idea && !embedded.ideaText) expanded.idea = '';
if (key === 'optionsText' && !embedded.optionsText) expanded.optionsText = '';
if (original.mode && !embedded.mode) expanded.mode = original.mode;