diff --git a/frontend/src/features/model-servers/ModelServersPanel.tsx b/frontend/src/features/model-servers/ModelServersPanel.tsx index e5236c1..c24f41b 100644 --- a/frontend/src/features/model-servers/ModelServersPanel.tsx +++ b/frontend/src/features/model-servers/ModelServersPanel.tsx @@ -661,6 +661,7 @@ function ServerEditor({ value={argsText} placeholder="--flash-attn --parallel 2" onChange={(e) => setArgsText(e.target.value)} + onKeyDown={(e) => e.stopPropagation()} onBlur={commitArgs} /> {reservedHits.length > 0 && ( diff --git a/frontend/src/features/model-servers/modelServers.test.tsx b/frontend/src/features/model-servers/modelServers.test.tsx index 872f941..0c78e3a 100644 --- a/frontend/src/features/model-servers/modelServers.test.tsx +++ b/frontend/src/features/model-servers/modelServers.test.tsx @@ -211,6 +211,30 @@ function renderPanel(modelServer = new MockModelServerGateway()) { }; } +function renderPanelInsideSpaceTrap(modelServer = new MockModelServerGateway()) { + const gateways = { modelServer } as unknown as Gateways; + function Harness() { + const vm = useModelServers(); + return ( +
{ + if (event.key === " ") event.preventDefault(); + }} + > + +
+ ); + } + return { + modelServer, + ...render( + + + , + ), + }; +} + describe("ModelServersPanel wizard (F35 V2)", () => { it("declares a Hugging Face server end-to-end with a V2 payload", async () => { const { modelServer } = renderPanel(); @@ -303,6 +327,20 @@ describe("ModelServersPanel wizard (F35 V2)", () => { }); }); + it("does not let surrounding keyboard handlers swallow spaces in the extra args field", () => { + renderPanelInsideSpaceTrap(); + fireEvent.click(screen.getByLabelText("add model server")); + + const args = screen.getByLabelText("extra arguments") as HTMLInputElement; + const accepted = fireEvent.keyDown(args, { + key: " ", + code: "Space", + charCode: 32, + }); + + expect(accepted).toBe(true); + }); + it("blocks auto-start until a model source is set", () => { renderPanel(); fireEvent.click(screen.getByLabelText("add model server"));