diff --git a/apps/ui/src/features/operation-form/operation-form.tsx b/apps/ui/src/features/operation-form/operation-form.tsx index 3ef4902..35c64cc 100644 --- a/apps/ui/src/features/operation-form/operation-form.tsx +++ b/apps/ui/src/features/operation-form/operation-form.tsx @@ -345,158 +345,165 @@ export function OperationForm() { creationMutation.mutate(values); })} > -
-
-
-

1 — Protocol

-

One tool maps to exactly one upstream method.

-
-
-
-
- {protocolCards.map((card) => { - const isSelected = activeProtocol === card.protocol; - const selectedClassName = isSelected - ? `proto-card selected-${card.protocol === "graphql" ? "gql" : card.protocol}` - : "proto-card"; +
+
+
+
+

1 — Protocol

+

One tool maps to exactly one upstream method.

+
+
+
+
+ {protocolCards.map((card) => { + const isSelected = activeProtocol === card.protocol; + const selectedClassName = isSelected + ? `proto-card selected-${card.protocol === "graphql" ? "gql" : card.protocol}` + : "proto-card"; - return ( - - ); - })} +
+

{card.title}

+

{card.description}

+
+ + ); + })} +
-
-
+ -
-
-
-

2 — Tool identity

-

Name and description visible to the LLM at runtime.

+
+
+
+

2 — Tool identity

+

Name and description visible to the LLM at runtime.

+
+ draft +
+
+
{commonFields.map(renderField)}
- draft -
-
-
{commonFields.map(renderField)}
-
-
+ -
-
-
-

3 — Upstream target

-

Protocol-specific target configuration exposed through one MCP tool.

-
- {activeProtocol} -
-
-
- {protocolFields.map(renderField)} - {activeProtocol === "grpc" ? ( - - ) : null} - {activeProtocol === "rest" ? renderField({ - name: "restStaticHeadersText", - label: "Static headers", - description: - "Always sent for this REST target before dynamic request headers are merged.", - rows: 8, - wide: true, - code: true, - }) : null} -
+
+
+
+

3 — Upstream target

+

Protocol-specific target configuration exposed through one MCP tool.

+
+ {activeProtocol} +
+
+
+ {protocolFields.map(renderField)} + {activeProtocol === "grpc" ? ( + + ) : null} + {activeProtocol === "rest" + ? renderField({ + name: "restStaticHeadersText", + label: "Static headers", + description: + "Always sent for this REST target before dynamic request headers are merged.", + rows: 8, + wide: true, + code: true, + }) + : null} +
-
-
-

- Headers and auth stay separate from path and payload mapping. Configure shared - transport headers in the execution section below. -

+
+
+

+ Headers and auth stay separate from path and payload mapping. Configure shared + transport headers in the execution section below. +

+
-
-
+
-
-
-
-

4 — Contract schemas

-

Protocol-agnostic schemas for MCP input and output payloads.

+
+
+
+

4 — Contract schemas

+

Protocol-agnostic schemas for MCP input and output payloads.

+
+
+
+
{schemaFields.map(renderField)}
-
-
-
{schemaFields.map(renderField)}
-
-
+ -
-
-
-

5 — Mapping and execution

-

Translate MCP input to request fields, then map upstream output back to tool output.

-
-
-
-
- Input → Request -
-
-
{mappingFields.slice(0, 1).map(renderField)}
+
+
+
+

5 — Mapping and execution

+

+ Translate MCP input to request fields, then map upstream output back to tool + output. +

+
+
+
+
+ Input → Request +
+
+
{mappingFields.slice(0, 1).map(renderField)}
-
- Response → Output -
-
-
{mappingFields.slice(1).map(renderField)}
+
+ Response → Output +
+
+
{mappingFields.slice(1).map(renderField)}
-
- Headers And Runtime -
+
+ Headers And Runtime +
+
+
{headerFields.map(renderField)}
-
{headerFields.map(renderField)}
-
-
+
- {creationMutation.error ? ( -
- {creationMutation.error instanceof ApiError - ? creationMutation.error.message - : "Failed to create operation"} -
- ) : null} + {creationMutation.error ? ( +
+ {creationMutation.error instanceof ApiError + ? creationMutation.error.message + : "Failed to create operation"} +
+ ) : null} +
diff --git a/apps/ui/src/shared/ui/app-shell.tsx b/apps/ui/src/shared/ui/app-shell.tsx index 7f46509..df826d6 100644 --- a/apps/ui/src/shared/ui/app-shell.tsx +++ b/apps/ui/src/shared/ui/app-shell.tsx @@ -60,6 +60,7 @@ export function AppShell({ children }: AppShellProps) {

Workspace