fix(simulation): validate semantic click identity (#37808)

This commit is contained in:
Kit Langton 2026-07-19 16:43:53 -04:00 committed by GitHub
commit 71cb419570
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 118 additions and 3 deletions

View file

@ -171,6 +171,7 @@ export namespace Frontend {
"ui.arrow",
"ui.focus",
"ui.click",
"ui.click.semantic",
"ui.resize",
"ui.matches",
"ui.screenshot",
@ -189,13 +190,26 @@ export namespace Frontend {
})
export interface KeyModifiers extends Schema.Schema.Type<typeof KeyModifiers> {}
export const SemanticClickTarget = Schema.Struct({
id: Schema.NonEmptyString,
instance: Schema.optionalKey(Schema.NonEmptyString),
element: Schema.Number.check(Schema.isInt(), Schema.isGreaterThan(0)),
})
export interface SemanticClickTarget extends Schema.Schema.Type<typeof SemanticClickTarget> {}
export const Action = Schema.Union([
Schema.Struct({ type: Schema.Literal("ui.type"), text: Schema.String }),
Schema.Struct({ type: Schema.Literal("ui.press"), key: Schema.String, modifiers: Schema.optional(KeyModifiers) }),
Schema.Struct({ type: Schema.Literal("ui.enter") }),
Schema.Struct({ type: Schema.Literal("ui.arrow"), direction: Schema.Literals(["up", "down", "left", "right"]) }),
Schema.Struct({ type: Schema.Literal("ui.focus"), target: Schema.Number }),
Schema.Struct({ type: Schema.Literal("ui.click"), target: Schema.Number, x: Schema.Number, y: Schema.Number }),
Schema.Struct({
type: Schema.Literal("ui.click"),
target: Schema.Number,
x: Schema.Number,
y: Schema.Number,
semantic: Schema.optionalKey(SemanticClickTarget),
}),
Schema.Struct({ type: Schema.Literal("ui.resize"), cols: Schema.Number, rows: Schema.Number }),
])
export type Action = Schema.Schema.Type<typeof Action>
@ -313,7 +327,12 @@ export namespace Frontend {
export const FocusParams = Schema.Struct({ target: Schema.Number })
export interface FocusParams extends Schema.Schema.Type<typeof FocusParams> {}
export const ClickParams = Schema.Struct({ target: Schema.Number, x: Schema.Number, y: Schema.Number })
export const ClickParams = Schema.Struct({
target: Schema.Number,
x: Schema.Number,
y: Schema.Number,
semantic: Schema.optionalKey(SemanticClickTarget),
})
export interface ClickParams extends Schema.Schema.Type<typeof ClickParams> {}
export const ResizeParams = Schema.Struct({ cols: Schema.Number, rows: Schema.Number })