authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-04-29 17:09:00-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-04-30 00:09:00+00:00
log02903f2db870a8fba8e7d6eadc48cfccb68754da
tree6e976c4252386ffb798b71a76e6eba666088ccec
parent22b7d8c524b3841cd50c1bb0927cdc472dd7902e
signature Signed by PGP key B5690EEEBB952194

[codex] fix terminal dimension validation (#2411)

Co-authored-by: codex <codex@users.noreply.github.com>

2 files changed, 16 insertions(+), 5 deletions(-)

packages/contracts/src/terminal.test.ts+12-1
......@@ -38,13 +38,24 @@ describe("TerminalOpenInput", () => {
3838 ).toBe(true);
3939 });
4040
41 it("accepts ultrawide terminal dimensions from xterm fit", () => {
42 expect(
43 decodes(TerminalOpenInput, {
44 threadId: "thread-1",
45 cwd: "/tmp/project",
46 cols: 423,
47 rows: 40,
48 }),
49 ).toBe(true);
50 });
51
4152 it("rejects invalid bounds", () => {
4253 expect(
4354 decodes(TerminalOpenInput, {
4455 threadId: "thread-1",
4556 cwd: "/tmp/project",
4657 cols: 10,
47 rows: 2,
58 rows: 0,
4859 }),
4960 ).toBe(false);
5061 });
packages/contracts/src/terminal.ts+4-4
......@@ -4,11 +4,11 @@ import { TrimmedNonEmptyString } from "./baseSchemas.ts";
44export const DEFAULT_TERMINAL_ID = "default";
55
66const TrimmedNonEmptyStringSchema = TrimmedNonEmptyString;
7const TerminalColsSchema = Schema.Int.check(Schema.isGreaterThanOrEqualTo(20)).check(
8 Schema.isLessThanOrEqualTo(400),
7const TerminalColsSchema = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)).check(
8 Schema.isLessThanOrEqualTo(1000),
99);
10const TerminalRowsSchema = Schema.Int.check(Schema.isGreaterThanOrEqualTo(5)).check(
11 Schema.isLessThanOrEqualTo(200),
10const TerminalRowsSchema = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)).check(
11 Schema.isLessThanOrEqualTo(500),
1212);
1313const TerminalIdSchema = TrimmedNonEmptyStringSchema.check(Schema.isMaxLength(128));
1414const TerminalEnvKeySchema = Schema.String.check(