






















@@ -266,7 +266,25 @@ function pickCliSessionId(
266266return undefined;
267267}
268268269-export function parseCliJson(raw: string, backend: CliBackendConfig): CliOutput | null {
269+function shouldUnwrapNestedCliResultText(params: {
270+backend: CliBackendConfig;
271+providerId?: string;
272+parsed: Record<string, unknown>;
273+}): boolean {
274+const isClaudeBackend =
275+(params.providerId && isClaudeCliProvider(params.providerId)) ||
276+/^claude(?:$|[\\/-])/i.test(params.backend.command.trim());
277+if (!isClaudeBackend) {
278+return false;
279+}
280+return !Object.hasOwn(params.parsed, "type") || params.parsed.type === "result";
281+}
282+283+export function parseCliJson(
284+raw: string,
285+backend: CliBackendConfig,
286+providerId?: string,
287+): CliOutput | null {
270288const parsedRecords = parseJsonRecordCandidates(raw);
271289if (parsedRecords.length === 0) {
272290return null;
@@ -285,7 +303,11 @@ export function parseCliJson(raw: string, backend: CliBackendConfig): CliOutput
285303collectCliText(parsed.result) ||
286304collectCliText(parsed.response) ||
287305collectCliText(parsed);
288-const trimmedText = unwrapNestedCliResultText(nextText).trim();
306+const trimmedText = (
307+shouldUnwrapNestedCliResultText({ backend, providerId, parsed })
308+ ? unwrapNestedCliResultText(nextText)
309+ : nextText
310+).trim();
289311if (trimmedText) {
290312text = trimmedText;
291313sawStructuredOutput = true;
@@ -509,7 +531,7 @@ export function parseCliOutput(params: {
509531);
510532}
511533return (
512-parseCliJson(params.raw, params.backend) ?? {
534+parseCliJson(params.raw, params.backend, params.providerId) ?? {
513535text: params.raw.trim(),
514536sessionId: params.fallbackSessionId,
515537}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。