From 80cebe07673a4b7d448286f798b9563c47004aba Mon Sep 17 00:00:00 2001
From: rcoenen <753704+rcoenen@users.noreply.github.com>
Date: Sat, 1 Aug 2026 08:34:51 -0400
Subject: [PATCH] fix(tools): document inline SVG path rendering
Document the supported inline SVG path route in the render tool prompt.
Keep coverage focused on separate open and closed stroked vector paths.
---
packages/core/src/tools/create/render.ts | 2 +-
tests/engine/render/jsx/gaps.test.ts | 14 ++++++++++++++
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/packages/core/src/tools/create/render.ts b/packages/core/src/tools/create/render.ts
index 66aca1f3d..11b3f3ce3 100644
--- a/packages/core/src/tools/create/render.ts
+++ b/packages/core/src/tools/create/render.ts
@@ -4,7 +4,7 @@ export const render = defineTool({
name: 'render',
mutates: true,
description:
- 'Render JSX to design nodes. Use replace_id to swap a skeleton placeholder with real content (keeps position in parent). Example: Title',
+ 'Render JSX to design nodes. Supports inline SVG paths, including open stroked paths: . Use replace_id to replace a placeholder while preserving its position.',
params: {
replace_id: {
type: 'string',
diff --git a/tests/engine/render/jsx/gaps.test.ts b/tests/engine/render/jsx/gaps.test.ts
index 8c13c6e61..a019a6df0 100644
--- a/tests/engine/render/jsx/gaps.test.ts
+++ b/tests/engine/render/jsx/gaps.test.ts
@@ -27,6 +27,20 @@ describe('jsx gaps', () => {
expect(vector?.vectorNetwork).toBeTruthy()
})
+ it('renders open and closed SVG paths as separate stroked vectors', async () => {
+ const g = makeSceneGraph()
+ await renderJSX(
+ g,
+ ``
+ )
+ const vectors = [...g.nodes.values()].filter((node) => node.type === 'VECTOR')
+ expect(vectors).toHaveLength(2)
+ for (const vector of vectors) {
+ expect(vector.vectorNetwork?.vertices.length).toBeGreaterThan(0)
+ expect(vector.strokes.length).toBeGreaterThan(0)
+ }
+ })
+
it('instance overrides apply child text by name', async () => {
const g = makeSceneGraph()
await renderJSX(