feat(coding-agent): enabled MCP Markdown result rendering by default
mcp.renderMarkdownResults now defaults to true; set false to keep raw text. Non-JSON detection and structured JSON-tree rendering unchanged.
This commit is contained in:
@@ -6,13 +6,11 @@
|
||||
|
||||
- Added per-call `model` selection to the `task` tool, including per-item batch selectors, fallback chains, and explicit reasoning suffixes.
|
||||
- Added Firecrawl keyless mode: explicitly selecting `firecrawl` as the web-search provider now works without `FIRECRAWL_API_KEY` by calling the Firecrawl REST API without an `Authorization` header; the automatic provider chain remains credential-gated (#4332).
|
||||
- Added `mcp.renderMarkdownResults` (enabled by default): non-JSON MCP text results render as Markdown in the terminal transcript; set it to `false` to keep raw text.
|
||||
|
||||
### Changed
|
||||
|
||||
- Adjusted retry fallback handling to recognize discovery-only and runtime extension providers, preventing spurious unknown-provider warnings.
|
||||
### Added
|
||||
|
||||
- Added an opt-in `mcp.renderMarkdownResults` setting that renders non-JSON MCP text results as Markdown in the terminal transcript.
|
||||
|
||||
### Fixed
|
||||
|
||||
|
||||
@@ -3961,7 +3961,7 @@ export const SETTINGS_SCHEMA = {
|
||||
|
||||
"mcp.renderMarkdownResults": {
|
||||
type: "boolean",
|
||||
default: false,
|
||||
default: true,
|
||||
ui: {
|
||||
tab: "tools",
|
||||
group: "Discovery & MCP",
|
||||
|
||||
@@ -29,7 +29,7 @@ describe("ToolExecutionComponent custom renderer failures", () => {
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
settings.set("mcp.renderMarkdownResults", false);
|
||||
settings.set("mcp.renderMarkdownResults", true);
|
||||
});
|
||||
|
||||
it("falls back to the custom tool label when a renderCall child component throws during render", () => {
|
||||
@@ -120,21 +120,10 @@ describe("MCP result Markdown rendering", () => {
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
settings.set("mcp.renderMarkdownResults", false);
|
||||
});
|
||||
|
||||
it("keeps Markdown syntax literal by default", () => {
|
||||
const component = renderMCPResult(
|
||||
{ content: [{ type: "text", text: "**bold result**" }], details },
|
||||
{ expanded: true, isPartial: false },
|
||||
theme,
|
||||
);
|
||||
|
||||
expect(visibleText(component.render(80))).toContain("**bold result**");
|
||||
});
|
||||
|
||||
it("renders inline Markdown when the opt-in setting is enabled", () => {
|
||||
settings.set("mcp.renderMarkdownResults", true);
|
||||
});
|
||||
|
||||
it("renders inline Markdown by default", () => {
|
||||
const component = renderMCPResult(
|
||||
{ content: [{ type: "text", text: "**bold result** and `code`" }], details },
|
||||
{ expanded: true, isPartial: false },
|
||||
@@ -147,6 +136,17 @@ describe("MCP result Markdown rendering", () => {
|
||||
expect(rendered).not.toContain("`code`");
|
||||
});
|
||||
|
||||
it("keeps Markdown syntax literal when the setting is disabled", () => {
|
||||
settings.set("mcp.renderMarkdownResults", false);
|
||||
const component = renderMCPResult(
|
||||
{ content: [{ type: "text", text: "**bold result**" }], details },
|
||||
{ expanded: true, isPartial: false },
|
||||
theme,
|
||||
);
|
||||
|
||||
expect(visibleText(component.render(80))).toContain("**bold result**");
|
||||
});
|
||||
|
||||
it("preserves structured JSON rendering when Markdown is enabled", () => {
|
||||
settings.set("mcp.renderMarkdownResults", true);
|
||||
const component = renderMCPResult(
|
||||
|
||||
Reference in New Issue
Block a user