Parse fenced EJClaw output envelopes

This commit is contained in:
ejclaw
2026-04-25 10:14:33 +09:00
parent 5ee0859a53
commit cd7e35a8b0
3 changed files with 108 additions and 1 deletions

View File

@@ -124,6 +124,13 @@ function normalizeAttachments(value: unknown): RunnerOutputAttachment[] {
return attachments;
}
function extractStructuredJsonCandidate(trimmed: string): string {
const fencedJson = trimmed.match(
/^```(?:json|JSON)?[ \t]*\r?\n([\s\S]*?)\r?\n```[ \t]*$/,
);
return fencedJson?.[1]?.trim() ?? trimmed;
}
export function normalizeEjclawStructuredOutput(
result: string | null,
): NormalizedRunnerOutput {
@@ -132,8 +139,9 @@ export function normalizeEjclawStructuredOutput(
}
const trimmed = result.trim();
const jsonCandidate = extractStructuredJsonCandidate(trimmed);
try {
const parsed = JSON.parse(trimmed) as {
const parsed = JSON.parse(jsonCandidate) as {
ejclaw?: {
visibility?: unknown;
text?: unknown;