{"version":3,"names":["SystemClock","parseKeypress","MouseParser","DEFAULT_TIMEOUT_MS","DEFAULT_MAX_PENDING_BYTES","INITIAL_PENDING_CAPACITY","ESC","BEL","BRACKETED_PASTE_START","Buffer","from","BRACKETED_PASTE_END","EMPTY_BYTES","Uint8Array","KEY_DECODER","TextDecoder","DEFAULT_PROTOCOL_CONTEXT","kittyKeyboardEnabled","privateCapabilityRepliesActive","pixelResolutionQueryActive","explicitWidthCprActive","RXVT_DOLLAR_CSI_RE","SYSTEM_CLOCK","ByteQueue","start","end","constructor","capacity","buf","length","view","subarray","take","chunk","append","ensureCapacity","set","consume","count","copyWithin","clear","reset","requiredLength","currentLength","availableAtEnd","nextCapacity","next","normalizePositiveOption","value","fallback","Number","isFinite","Math","floor","utf8SequenceLength","first","bytesEqual","left","right","index","isMouseSgrSequence","sequence","final","part","hasDigit","byte","isAsciiDigit","parsePositiveDecimalPrefix","endExclusive","sawDigit","parseKittyFirstFieldCodepoint","firstColon","codepoint","canStillBeKittyU","state","semicolons","canStillBeKittySpecial","segments","canStillBeExplicitWidthCpr","firstParamValue","canStillBePixelResolution","canDeferParametricCsi","context","canCompleteDeferredParametricCsi","canDeferPrivateReplyCsi","canCompleteDeferredPrivateReplyCsi","sawDollar","concatBytes","combined","indexOfBytes","haystack","needle","limit","offset","matched","decodeLatin1","bytes","buffer","byteOffset","byteLength","toString","decodeUtf8","decode","createPasteCollector","tail","parts","totalLength","joinPasteBytes","StdinParser","pending","events","mouseParser","timeoutId","destroyed","pendingSinceMs","forceFlush","justFlushedEsc","tag","cursor","unitStart","paste","options","timeoutMs","maxPendingBytes","armTimeouts","onTimeoutFlush","useKittyKeyboard","clock","protocolContext","bufferCapacity","updateProtocolContext","patch","ensureAlive","reconcileDeferredStateWithProtocolContext","reconcileTimeoutState","push","data","emitKeyOrResponse","remainder","consumePasteBytes","immediatePasteStartIndex","appendEnd","scanPending","takePendingBytes","flushPendingOverflow","read","shift","drain","onEvent","event","flushTimeout","nowMsValue","now","tryForceFlush","clearTimeout","resetState","resetMouseState","destroy","Error","consumePrefix","expected","markPending","emitLegacyHighByte","seen","nextSeen","flushedLoneEsc","sawEsc","emitOpaqueResponse","emitMouse","candidateEnd","candidate","test","firstParamStart","firstParamEnd","rawBytes","protocol","raw","parsed","type","key","encoding","parseMouseEvent","String","fromCharCode","buffered","endIndex","pushPasteBytes","keep","min","stableLength","setTimeout","error","console"],"sources":["stdin-parser.ts"],"sourcesContent":["/** biome-ignore-all lint/style/noNonNullAssertion: vendored from OpenTUI — byte-indexed array access with known-valid bounds */\n/** biome-ignore-all lint/suspicious/noControlCharactersInRegex: intentional ESC/CSI pattern matching in terminal escape sequences */\n// Byte-level stdin parser that turns raw terminal input into typed StdinEvents.\n//\n// This replaces a two-phase token -> decode pipeline with a single state machine\n// that produces fully typed events (key, mouse, paste, response) directly from\n// bytes. The parser owns all byte framing and protocol recognition. It does NOT\n// own event dispatch — that belongs to KeyHandler and the renderer.\n\nimport { type Clock, SystemClock, type TimerHandle } from \"./clock.ts\";\nimport { type ParsedKey, parseKeypress } from \"./parse-keypress.ts\";\nimport { MouseParser, type RawMouseEvent } from \"./parse-mouse.ts\";\nimport type { PasteMetadata } from \"./paste.ts\";\n\nexport { type Clock, SystemClock, type TimerHandle } from \"./clock.ts\";\n\nexport type StdinResponseProtocol = \"csi\" | \"osc\" | \"dcs\" | \"apc\" | \"unknown\";\n\n// The four event types the parser produces. Everything stdin sends becomes\n// exactly one of these.\nexport type StdinEvent =\n\t| {\n\t\t\ttype: \"key\";\n\t\t\traw: string;\n\t\t\tkey: ParsedKey;\n\t  }\n\t| {\n\t\t\ttype: \"mouse\";\n\t\t\traw: string;\n\t\t\tencoding: \"sgr\" | \"x10\";\n\t\t\tevent: RawMouseEvent;\n\t  }\n\t| {\n\t\t\ttype: \"paste\";\n\t\t\tbytes: Uint8Array;\n\t\t\tmetadata?: PasteMetadata;\n\t  }\n\t| {\n\t\t\ttype: \"response\";\n\t\t\tprotocol: StdinResponseProtocol;\n\t\t\tsequence: string;\n\t  };\n\nexport interface StdinParserProtocolContext {\n\texplicitWidthCprActive: boolean;\n\tkittyKeyboardEnabled: boolean;\n\tpixelResolutionQueryActive: boolean;\n\tprivateCapabilityRepliesActive: boolean;\n}\n\nexport interface StdinParserOptions {\n\tarmTimeouts?: boolean;\n\tclock?: Clock;\n\tmaxPendingBytes?: number;\n\tonTimeoutFlush?: () => void;\n\tprotocolContext?: Partial<StdinParserProtocolContext>;\n\ttimeoutMs?: number;\n\tuseKittyKeyboard?: boolean;\n}\n\n// State machine tags for the byte scanner. Each tag represents which protocol\n// framing mode the parser is currently inside. The sawEsc flag in osc/dcs/apc\n// tracks whether the previous byte was ESC, since the two-byte ST terminator\n// (ESC \\) can split across push() calls.\ntype ParserState =\n\t| { tag: \"ground\" }\n\t| { tag: \"utf8\"; expected: number; seen: number }\n\t| { tag: \"esc\" }\n\t| { tag: \"ss3\" }\n\t| { tag: \"csi\" }\n\t| { tag: \"csi_sgr_mouse\"; part: number; hasDigit: boolean }\n\t| { tag: \"csi_sgr_mouse_deferred\"; part: number; hasDigit: boolean }\n\t| {\n\t\t\ttag: \"csi_parametric\";\n\t\t\tsemicolons: number;\n\t\t\tsegments: number;\n\t\t\thasDigit: boolean;\n\t\t\tfirstParamValue: number | null;\n\t  }\n\t| {\n\t\t\ttag: \"csi_parametric_deferred\";\n\t\t\tsemicolons: number;\n\t\t\tsegments: number;\n\t\t\thasDigit: boolean;\n\t\t\tfirstParamValue: number | null;\n\t  }\n\t| {\n\t\t\ttag: \"csi_private_reply\";\n\t\t\tsemicolons: number;\n\t\t\thasDigit: boolean;\n\t\t\tsawDollar: boolean;\n\t  }\n\t| {\n\t\t\ttag: \"csi_private_reply_deferred\";\n\t\t\tsemicolons: number;\n\t\t\thasDigit: boolean;\n\t\t\tsawDollar: boolean;\n\t  }\n\t| { tag: \"osc\"; sawEsc: boolean }\n\t| { tag: \"dcs\"; sawEsc: boolean }\n\t| { tag: \"apc\"; sawEsc: boolean }\n\t| { tag: \"esc_recovery\" }\n\t| { tag: \"esc_less_mouse\" }\n\t| { tag: \"esc_less_x10_mouse\" };\n\n// Collects paste body incrementally, bypassing the main ByteQueue so large\n// pastes don't grow the parser buffer. Keeps only a small tail for end-marker\n// detection across chunk boundaries.\ninterface PasteCollector {\n\tparts: Uint8Array[];\n\ttail: Uint8Array;\n\ttotalLength: number;\n}\n\n// 20ms is to distinguish a lone ESC keypress from the start of an\n// escape sequence. Gemini/Claude uses 50ms, Codex uses 20ms, trying\n// this as a balanced default for now.\nconst DEFAULT_TIMEOUT_MS = 20;\nconst DEFAULT_MAX_PENDING_BYTES = 64 * 1024;\nconst INITIAL_PENDING_CAPACITY = 256;\nconst ESC = 0x1b;\nconst BEL = 0x07;\nconst BRACKETED_PASTE_START = Buffer.from(\"\\x1b[200~\");\nconst BRACKETED_PASTE_END = Buffer.from(\"\\x1b[201~\");\nconst EMPTY_BYTES = new Uint8Array(0);\nconst KEY_DECODER = new TextDecoder();\nconst DEFAULT_PROTOCOL_CONTEXT: StdinParserProtocolContext = {\n\tkittyKeyboardEnabled: false,\n\tprivateCapabilityRepliesActive: false,\n\tpixelResolutionQueryActive: false,\n\texplicitWidthCprActive: false,\n};\n// rxvt uses $-terminated CSI sequences for shifted function keys (e.g. ESC[2$).\n// Standard CSI treats $ as an intermediate byte, not a final, so we match these\n// explicitly to avoid waiting for a \"real\" final byte that never arrives.\nconst RXVT_DOLLAR_CSI_RE = /^\\x1b\\[\\d+\\$$/;\n\nconst SYSTEM_CLOCK = new SystemClock();\n\n// Byte buffer for pending input. Uses start/end offsets so consume() just\n// advances the start pointer without copying. Compacts (via copyWithin) only\n// when the consumed prefix exceeds half the buffer, keeping amortized cost low.\nclass ByteQueue {\n\tprivate buf: Uint8Array;\n\tprivate start = 0;\n\tprivate end = 0;\n\n\tconstructor(capacity = INITIAL_PENDING_CAPACITY) {\n\t\tthis.buf = new Uint8Array(capacity);\n\t}\n\n\tget length(): number {\n\t\treturn this.end - this.start;\n\t}\n\n\tget capacity(): number {\n\t\treturn this.buf.length;\n\t}\n\n\tview(): Uint8Array {\n\t\treturn this.buf.subarray(this.start, this.end);\n\t}\n\n\t// Returns a view of the contents and resets the queue. The view shares\n\t// the underlying buffer, so it becomes invalid on the next append().\n\ttake(): Uint8Array {\n\t\tconst chunk = this.view();\n\t\tthis.start = 0;\n\t\tthis.end = 0;\n\t\treturn chunk;\n\t}\n\n\tappend(chunk: Uint8Array): void {\n\t\tif (chunk.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.ensureCapacity(this.length + chunk.length);\n\t\tthis.buf.set(chunk, this.end);\n\t\tthis.end += chunk.length;\n\t}\n\n\t// Drops the first `count` bytes. Compacts when the consumed prefix\n\t// exceeds half the buffer to reclaim wasted space at the front.\n\tconsume(count: number): void {\n\t\tif (count <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (count >= this.length) {\n\t\t\tthis.start = 0;\n\t\t\tthis.end = 0;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.start += count;\n\t\tif (this.start >= this.buf.length / 2) {\n\t\t\tthis.buf.copyWithin(0, this.start, this.end);\n\t\t\tthis.end -= this.start;\n\t\t\tthis.start = 0;\n\t\t}\n\t}\n\n\tclear(): void {\n\t\tthis.start = 0;\n\t\tthis.end = 0;\n\t}\n\n\treset(capacity = INITIAL_PENDING_CAPACITY): void {\n\t\tthis.buf = new Uint8Array(capacity);\n\t\tthis.start = 0;\n\t\tthis.end = 0;\n\t}\n\n\t// Tries reclaiming space by compacting data to the front first.\n\t// Doubles the allocation if that still isn't enough.\n\tprivate ensureCapacity(requiredLength: number): void {\n\t\tconst currentLength = this.length;\n\t\tif (requiredLength <= this.buf.length) {\n\t\t\tconst availableAtEnd = this.buf.length - this.end;\n\t\t\tif (availableAtEnd >= requiredLength - currentLength) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.buf.copyWithin(0, this.start, this.end);\n\t\t\tthis.end = currentLength;\n\t\t\tthis.start = 0;\n\t\t\tif (requiredLength <= this.buf.length) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tlet nextCapacity = this.buf.length;\n\t\twhile (nextCapacity < requiredLength) {\n\t\t\tnextCapacity *= 2;\n\t\t}\n\n\t\tconst next = new Uint8Array(nextCapacity);\n\t\tnext.set(this.view(), 0);\n\t\tthis.buf = next;\n\t\tthis.start = 0;\n\t\tthis.end = currentLength;\n\t}\n}\n\nfunction normalizePositiveOption(\n\tvalue: number | undefined,\n\tfallback: number,\n): number {\n\tif (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) {\n\t\treturn fallback;\n\t}\n\n\treturn Math.floor(value);\n}\n\n// Returns the expected byte count for a UTF-8 sequence given its lead byte,\n// or 0 for bytes that aren't valid UTF-8 leads. Returning 0 tells the parser\n// this is a legacy high-byte character (0x80–0xBF, 0xC0–0xC1, 0xF5+) that\n// goes through the parseKeypress() meta-key path instead.\nfunction utf8SequenceLength(first: number): number {\n\tif (first < 0x80) return 1;\n\tif (first >= 0xc2 && first <= 0xdf) return 2;\n\tif (first >= 0xe0 && first <= 0xef) return 3;\n\tif (first >= 0xf0 && first <= 0xf4) return 4;\n\treturn 0;\n}\n\nfunction bytesEqual(left: Uint8Array, right: Uint8Array): boolean {\n\tif (left.length !== right.length) {\n\t\treturn false;\n\t}\n\n\tfor (let index = 0; index < left.length; index += 1) {\n\t\tif (left[index] !== right[index]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n// Checks whether a byte sequence is a complete SGR mouse report:\n// ESC [ < Ps ; Ps ; Ps M/m  (three semicolon-separated digit groups).\nfunction isMouseSgrSequence(sequence: Uint8Array): boolean {\n\tif (sequence.length < 7) {\n\t\treturn false;\n\t}\n\n\tif (sequence[0] !== ESC || sequence[1] !== 0x5b || sequence[2] !== 0x3c) {\n\t\treturn false;\n\t}\n\n\tconst final = sequence[sequence.length - 1];\n\tif (final !== 0x4d && final !== 0x6d) {\n\t\treturn false;\n\t}\n\n\tlet part = 0;\n\tlet hasDigit = false;\n\tfor (let index = 3; index < sequence.length - 1; index += 1) {\n\t\tconst byte = sequence[index]!;\n\t\tif (byte >= 0x30 && byte <= 0x39) {\n\t\t\thasDigit = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (byte === 0x3b && hasDigit && part < 2) {\n\t\t\tpart += 1;\n\t\t\thasDigit = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\treturn part === 2 && hasDigit;\n}\n\nfunction isAsciiDigit(byte: number): boolean {\n\treturn byte >= 0x30 && byte <= 0x39;\n}\n\ninterface ParametricCsiLike {\n\tfirstParamValue: number | null;\n\thasDigit: boolean;\n\tsegments: number;\n\tsemicolons: number;\n}\n\ninterface PrivateReplyCsiLike {\n\thasDigit: boolean;\n\tsawDollar: boolean;\n\tsemicolons: number;\n}\n\nfunction parsePositiveDecimalPrefix(\n\tsequence: Uint8Array,\n\tstart: number,\n\tendExclusive: number,\n): number | null {\n\tif (start >= endExclusive) return null;\n\n\tlet value = 0;\n\tlet sawDigit = false;\n\tfor (let index = start; index < endExclusive; index += 1) {\n\t\tconst byte = sequence[index]!;\n\t\tif (!isAsciiDigit(byte)) return null;\n\t\tsawDigit = true;\n\t\tvalue = value * 10 + (byte - 0x30);\n\t}\n\n\treturn sawDigit ? value : null;\n}\n\n// Returns the leading kitty codepoint from field 1, like `97` in `97:65`.\n// The CSI scanner uses this at `;` boundaries to recognize alternate-key\n// forms (`codepoint[:shifted[:base]]`). That keeps split kitty sequences\n// pending, instead of flushing them as unknown on timeout.\nfunction parseKittyFirstFieldCodepoint(\n\tsequence: Uint8Array,\n\tstart: number,\n\tendExclusive: number,\n): number | null {\n\tif (start >= endExclusive) return null;\n\n\tlet firstColon = -1;\n\tfor (let index = start; index < endExclusive; index += 1) {\n\t\tif (sequence[index] === 0x3a) {\n\t\t\tfirstColon = index;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (firstColon === -1) return null;\n\n\tconst codepoint = parsePositiveDecimalPrefix(sequence, start, firstColon);\n\tif (codepoint === null) return null;\n\n\t// Remaining bytes in field 1 must stay kitty-compatible: digits or colons.\n\tfor (let index = firstColon + 1; index < endExclusive; index += 1) {\n\t\tconst byte = sequence[index]!;\n\t\tif (byte !== 0x3a && !isAsciiDigit(byte)) return null;\n\t}\n\n\treturn codepoint;\n}\n\nfunction canStillBeKittyU(state: ParametricCsiLike): boolean {\n\treturn state.semicolons >= 1;\n}\n\nfunction canStillBeKittySpecial(state: ParametricCsiLike): boolean {\n\treturn state.semicolons === 1 && state.segments > 1;\n}\n\nfunction canStillBeExplicitWidthCpr(state: ParametricCsiLike): boolean {\n\treturn state.firstParamValue === 1 && state.semicolons === 1;\n}\n\nfunction canStillBePixelResolution(state: ParametricCsiLike): boolean {\n\treturn state.firstParamValue === 4 && state.semicolons === 2;\n}\n\nfunction canDeferParametricCsi(\n\tstate: ParametricCsiLike,\n\tcontext: StdinParserProtocolContext,\n): boolean {\n\treturn (\n\t\t(context.kittyKeyboardEnabled &&\n\t\t\t(canStillBeKittyU(state) || canStillBeKittySpecial(state))) ||\n\t\t(context.explicitWidthCprActive && canStillBeExplicitWidthCpr(state)) ||\n\t\t(context.pixelResolutionQueryActive && canStillBePixelResolution(state))\n\t);\n}\n\nfunction canCompleteDeferredParametricCsi(\n\tstate: ParametricCsiLike,\n\tbyte: number,\n\tcontext: StdinParserProtocolContext,\n): boolean {\n\tif (context.kittyKeyboardEnabled) {\n\t\tif (state.hasDigit && byte === 0x75) return true;\n\t\tif (\n\t\t\tstate.hasDigit &&\n\t\t\tstate.semicolons === 1 &&\n\t\t\tstate.segments > 1 &&\n\t\t\t(byte === 0x7e || (byte >= 0x41 && byte <= 0x5a))\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tif (\n\t\tcontext.explicitWidthCprActive &&\n\t\tstate.hasDigit &&\n\t\tstate.firstParamValue === 1 &&\n\t\tstate.semicolons === 1 &&\n\t\tbyte === 0x52\n\t) {\n\t\treturn true;\n\t}\n\n\tif (\n\t\tcontext.pixelResolutionQueryActive &&\n\t\tstate.hasDigit &&\n\t\tstate.firstParamValue === 4 &&\n\t\tstate.semicolons === 2 &&\n\t\tbyte === 0x74\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction canDeferPrivateReplyCsi(context: StdinParserProtocolContext): boolean {\n\treturn context.privateCapabilityRepliesActive;\n}\n\nfunction canCompleteDeferredPrivateReplyCsi(\n\tstate: PrivateReplyCsiLike,\n\tbyte: number,\n\tcontext: StdinParserProtocolContext,\n): boolean {\n\tif (!context.privateCapabilityRepliesActive) return false;\n\tif (state.sawDollar) return state.hasDigit && byte === 0x79;\n\tif (byte === 0x63) return state.hasDigit || state.semicolons > 0;\n\treturn state.hasDigit && byte === 0x75;\n}\n\nfunction concatBytes(left: Uint8Array, right: Uint8Array): Uint8Array {\n\tif (left.length === 0) {\n\t\treturn right;\n\t}\n\n\tif (right.length === 0) {\n\t\treturn left;\n\t}\n\n\tconst combined = new Uint8Array(left.length + right.length);\n\tcombined.set(left, 0);\n\tcombined.set(right, left.length);\n\treturn combined;\n}\n\nfunction indexOfBytes(haystack: Uint8Array, needle: Uint8Array): number {\n\tif (needle.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst limit = haystack.length - needle.length;\n\tfor (let offset = 0; offset <= limit; offset += 1) {\n\t\tlet matched = true;\n\t\tfor (let index = 0; index < needle.length; index += 1) {\n\t\t\tif (haystack[offset + index] !== needle[index]) {\n\t\t\t\tmatched = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (matched) {\n\t\t\treturn offset;\n\t\t}\n\t}\n\n\treturn -1;\n}\n\n// Decodes raw protocol bytes as latin1. Used for mouse and response events\n// where the wire bytes may not be valid UTF-8 but need a lossless string\n// form for downstream sequence handlers.\nfunction decodeLatin1(bytes: Uint8Array): string {\n\treturn Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString(\n\t\t\"latin1\",\n\t);\n}\n\nfunction decodeUtf8(bytes: Uint8Array): string {\n\treturn KEY_DECODER.decode(bytes);\n}\n\nfunction createPasteCollector(): PasteCollector {\n\treturn {\n\t\ttail: EMPTY_BYTES,\n\t\tparts: [],\n\t\ttotalLength: 0,\n\t};\n}\n\nfunction joinPasteBytes(parts: Uint8Array[], totalLength: number): Uint8Array {\n\tif (totalLength === 0) {\n\t\treturn EMPTY_BYTES;\n\t}\n\n\tif (parts.length === 1) {\n\t\treturn parts[0]!;\n\t}\n\n\tconst bytes = new Uint8Array(totalLength);\n\tlet offset = 0;\n\tfor (const part of parts) {\n\t\tbytes.set(part, offset);\n\t\toffset += part.length;\n\t}\n\n\treturn bytes;\n}\n\n// Push-driven stdin parser. Callers feed raw bytes via push(), then read\n// typed events via read() or drain(). At most one incomplete protocol unit\n// is buffered at a time; everything else is immediately converted to events.\n//\n// The parser guarantees chunk-shape invariance: the same bytes always produce\n// the same events, regardless of chunk boundaries. A lone ESC resolves via\n// timeout, split UTF-8 codepoints reassemble correctly, and bracketed paste\n// markers may split across any chunk boundary.\nexport class StdinParser {\n\tprivate readonly pending = new ByteQueue(INITIAL_PENDING_CAPACITY);\n\tprivate readonly events: StdinEvent[] = [];\n\tprivate readonly timeoutMs: number;\n\tprivate readonly maxPendingBytes: number;\n\tprivate readonly armTimeouts: boolean;\n\tprivate readonly onTimeoutFlush: (() => void) | null;\n\tprivate readonly useKittyKeyboard: boolean;\n\tprivate readonly mouseParser = new MouseParser();\n\tprivate readonly clock: Clock;\n\tprivate protocolContext: StdinParserProtocolContext;\n\tprivate timeoutId: TimerHandle | null = null;\n\tprivate destroyed = false;\n\t// When the current incomplete unit first appeared. Null when nothing is pending.\n\tprivate pendingSinceMs: number | null = null;\n\t// When true, the state machine treats the current incomplete prefix as\n\t// final and emits it as one atomic event (e.g. a lone ESC becomes an\n\t// Escape key). Set by the timeout, consumed by the next read() or drain().\n\tprivate forceFlush = false;\n\t// True only immediately after a timeout flush emits a lone ESC key. The next\n\t// `[` may begin a delayed `[<...M/m` mouse continuation recovery path.\n\tprivate justFlushedEsc = false;\n\tprivate state: ParserState = { tag: \"ground\" };\n\t// Scan position within pending.view() during scanPending().\n\tprivate cursor = 0;\n\t// Start of the protocol unit currently being parsed. The bytes from\n\t// unitStart through cursor all belong to one atomic unit.\n\tprivate unitStart = 0;\n\t// When non-null, the parser is inside a bracketed paste. All incoming\n\t// bytes flow through consumePasteBytes() instead of the normal state machine.\n\tprivate paste: PasteCollector | null = null;\n\n\tconstructor(options: StdinParserOptions = {}) {\n\t\tthis.timeoutMs = normalizePositiveOption(\n\t\t\toptions.timeoutMs,\n\t\t\tDEFAULT_TIMEOUT_MS,\n\t\t);\n\t\tthis.maxPendingBytes = normalizePositiveOption(\n\t\t\toptions.maxPendingBytes,\n\t\t\tDEFAULT_MAX_PENDING_BYTES,\n\t\t);\n\t\tthis.armTimeouts = options.armTimeouts ?? true;\n\t\tthis.onTimeoutFlush = options.onTimeoutFlush ?? null;\n\t\tthis.useKittyKeyboard = options.useKittyKeyboard ?? true;\n\t\tthis.clock = options.clock ?? SYSTEM_CLOCK;\n\t\tthis.protocolContext = {\n\t\t\t...DEFAULT_PROTOCOL_CONTEXT,\n\t\t\tkittyKeyboardEnabled:\n\t\t\t\toptions.protocolContext?.kittyKeyboardEnabled ?? false,\n\t\t\tprivateCapabilityRepliesActive:\n\t\t\t\toptions.protocolContext?.privateCapabilityRepliesActive ?? false,\n\t\t\tpixelResolutionQueryActive:\n\t\t\t\toptions.protocolContext?.pixelResolutionQueryActive ?? false,\n\t\t\texplicitWidthCprActive:\n\t\t\t\toptions.protocolContext?.explicitWidthCprActive ?? false,\n\t\t};\n\t}\n\n\tpublic get bufferCapacity(): number {\n\t\treturn this.pending.capacity;\n\t}\n\n\tpublic updateProtocolContext(\n\t\tpatch: Partial<StdinParserProtocolContext>,\n\t): void {\n\t\tthis.ensureAlive();\n\t\tthis.protocolContext = { ...this.protocolContext, ...patch };\n\t\tthis.reconcileDeferredStateWithProtocolContext();\n\t\tthis.reconcileTimeoutState();\n\t}\n\n\t// Feeds raw stdin bytes into the parser. Converts as much as possible into\n\t// queued events and leaves at most one incomplete unit behind in pending.\n\t//\n\t// When a chunk contains a paste start marker, bytes before the marker go\n\t// through normal parsing, then paste mode takes over for the rest. This\n\t// prevents large pastes from growing the main buffer.\n\tpublic push(data: Uint8Array): void {\n\t\tthis.ensureAlive();\n\t\tif (data.length === 0) {\n\t\t\t// Preserve the existing empty-chunk -> empty-keypress behavior.\n\t\t\tthis.emitKeyOrResponse(\"unknown\", \"\");\n\t\t\treturn;\n\t\t}\n\n\t\tlet remainder = data;\n\t\twhile (remainder.length > 0) {\n\t\t\tif (this.paste) {\n\t\t\t\tremainder = this.consumePasteBytes(remainder);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If we're in ground state with nothing pending, scan the incoming\n\t\t\t// chunk for a paste start marker. Only append through the marker so\n\t\t\t// scanPending() enters paste mode without buffering the full paste.\n\t\t\tconst immediatePasteStartIndex =\n\t\t\t\tthis.state.tag === \"ground\" && this.pending.length === 0\n\t\t\t\t\t? indexOfBytes(remainder, BRACKETED_PASTE_START)\n\t\t\t\t\t: -1;\n\t\t\tconst appendEnd =\n\t\t\t\timmediatePasteStartIndex === -1\n\t\t\t\t\t? remainder.length\n\t\t\t\t\t: immediatePasteStartIndex + BRACKETED_PASTE_START.length;\n\n\t\t\tthis.pending.append(remainder.subarray(0, appendEnd));\n\t\t\tremainder = remainder.subarray(appendEnd);\n\t\t\tthis.scanPending();\n\n\t\t\tif (this.paste && this.pending.length > 0) {\n\t\t\t\tremainder = this.consumePasteBytes(this.takePendingBytes());\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!this.paste && this.pending.length > this.maxPendingBytes) {\n\t\t\t\tthis.flushPendingOverflow();\n\t\t\t\tthis.scanPending();\n\n\t\t\t\tif (this.paste && this.pending.length > 0) {\n\t\t\t\t\tremainder = this.consumePasteBytes(this.takePendingBytes());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.reconcileTimeoutState();\n\t}\n\n\t// Pops one event from the queue. If the queue is empty and a timeout has\n\t// set forceFlush, re-scans pending to convert the timed-out incomplete\n\t// unit into one final event before returning it.\n\tpublic read(): StdinEvent | null {\n\t\tthis.ensureAlive();\n\n\t\tif (this.events.length === 0 && this.forceFlush) {\n\t\t\tthis.scanPending();\n\t\t\tthis.reconcileTimeoutState();\n\t\t}\n\n\t\treturn this.events.shift() ?? null;\n\t}\n\n\t// Delivers all queued events. Stops early if the parser is destroyed\n\t// during a callback (e.g. an event handler triggers teardown).\n\tpublic drain(onEvent: (event: StdinEvent) => void): void {\n\t\tthis.ensureAlive();\n\n\t\twhile (true) {\n\t\t\tif (this.destroyed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst event = this.read();\n\t\t\tif (!event) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tonEvent(event);\n\t\t}\n\t}\n\n\t// Marks the parser for forced flush if enough time has passed since\n\t// incomplete data arrived. Does not immediately emit events — the next\n\t// read() or drain() does the actual flush. This separation keeps the\n\t// timer callback from emitting events mid-flight in user code.\n\tpublic flushTimeout(nowMsValue: number = this.clock.now()): void {\n\t\tthis.ensureAlive();\n\n\t\tif (\n\t\t\tthis.pendingSinceMs !== null &&\n\t\t\t(nowMsValue < this.pendingSinceMs ||\n\t\t\t\tnowMsValue - this.pendingSinceMs < this.timeoutMs)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.tryForceFlush();\n\t}\n\n\t// Sets forceFlush when there are pending bytes outside of a paste.\n\t// Extracted so the setTimeout callback in reconcileTimeoutState() can\n\t// bypass flushTimeout()'s elapsed-time comparison. Timer scheduling and\n\t// clock.now() sampling can disagree by a small amount; re-checking elapsed\n\t// time in the callback can skip a flush and leave pending bytes stuck.\n\tprivate tryForceFlush(): void {\n\t\tif (\n\t\t\tthis.paste ||\n\t\t\tthis.pendingSinceMs === null ||\n\t\t\tthis.pending.length === 0\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.forceFlush = true;\n\t}\n\n\tpublic reset(): void {\n\t\tif (this.destroyed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clearTimeout();\n\t\tthis.resetState();\n\t}\n\n\tpublic resetMouseState(): void {\n\t\tthis.ensureAlive();\n\t\tthis.mouseParser.reset();\n\t}\n\n\tpublic destroy(): void {\n\t\tif (this.destroyed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clearTimeout();\n\t\tthis.destroyed = true;\n\t\tthis.resetState();\n\t}\n\n\tprivate ensureAlive(): void {\n\t\tif (this.destroyed) {\n\t\t\tthrow new Error(\"StdinParser has been destroyed\");\n\t\t}\n\t}\n\n\t// Scans the pending byte buffer one byte at a time, dispatching on the\n\t// current parser state. All protocol framing lives in this single switch\n\t// — intentionally not split into per-mode scan helpers.\n\t//\n\t// Exits when: all bytes consumed (ground), more bytes needed (incomplete\n\t// unit), or paste mode entered (body handled by consumePasteBytes).\n\tprivate scanPending(): void {\n\t\twhile (!this.paste) {\n\t\t\tconst bytes = this.pending.view();\n\t\t\tif (this.state.tag === \"ground\" && this.cursor >= bytes.length) {\n\t\t\t\tthis.pending.clear();\n\t\t\t\tthis.cursor = 0;\n\t\t\t\tthis.unitStart = 0;\n\t\t\t\tthis.pendingSinceMs = null;\n\t\t\t\tthis.forceFlush = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst byte = this.cursor < bytes.length ? bytes[this.cursor]! : -1;\n\t\t\tswitch (this.state.tag) {\n\t\t\t\tcase \"ground\": {\n\t\t\t\t\tthis.unitStart = this.cursor;\n\n\t\t\t\t\t// After a timeout-flushed lone ESC, a following `[` may be the start\n\t\t\t\t\t// of a delayed `[<...M/m` mouse continuation. Recover only this narrow\n\t\t\t\t\t// case; otherwise clear the recovery flag and parse bytes normally.\n\t\t\t\t\tif (this.justFlushedEsc) {\n\t\t\t\t\t\tif (byte === 0x5b) {\n\t\t\t\t\t\t\tthis.justFlushedEsc = false;\n\t\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\t\tthis.state = { tag: \"esc_recovery\" };\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.justFlushedEsc = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === ESC) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tthis.state = { tag: \"esc\" };\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte < 0x80) {\n\t\t\t\t\t\tthis.emitKeyOrResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tdecodeUtf8(bytes.subarray(this.cursor, this.cursor + 1)),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.consumePrefix(this.cursor + 1);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Invalid UTF-8 lead byte. Could be a legacy high-byte from an\n\t\t\t\t\t// older terminal. If it's the last byte in the buffer, wait for\n\t\t\t\t\t// more data or a timeout before committing. On timeout, emit\n\t\t\t\t\t// through parseKeypress() which handles meta-key behavior.\n\t\t\t\t\tconst expected = utf8SequenceLength(byte);\n\t\t\t\t\tif (expected === 0) {\n\t\t\t\t\t\tif (!this.forceFlush && this.cursor + 1 === bytes.length) {\n\t\t\t\t\t\t\tthis.markPending();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.emitLegacyHighByte(byte);\n\t\t\t\t\t\tthis.consumePrefix(this.cursor + 1);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\tthis.state = { tag: \"utf8\", expected, seen: 1 };\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcase \"utf8\": {\n\t\t\t\t\tif (this.cursor >= bytes.length) {\n\t\t\t\t\t\tif (!this.forceFlush) {\n\t\t\t\t\t\t\tthis.markPending();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.emitLegacyHighByte(bytes[this.unitStart]!);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.unitStart + 1);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Not a valid continuation byte. Treat the lead byte as a legacy\n\t\t\t\t\t// high-byte character and restart parsing from this position.\n\t\t\t\t\tif ((byte & 0xc0) !== 0x80) {\n\t\t\t\t\t\tthis.emitLegacyHighByte(bytes[this.unitStart]!);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.unitStart + 1);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst nextSeen = this.state.seen + 1;\n\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\tif (nextSeen < this.state.expected) {\n\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\ttag: \"utf8\",\n\t\t\t\t\t\t\texpected: this.state.expected,\n\t\t\t\t\t\t\tseen: nextSeen,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.emitKeyOrResponse(\n\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\tdecodeUtf8(bytes.subarray(this.unitStart, this.cursor)),\n\t\t\t\t\t);\n\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcase \"esc\": {\n\t\t\t\t\tif (this.cursor >= bytes.length) {\n\t\t\t\t\t\tif (!this.forceFlush) {\n\t\t\t\t\t\t\tthis.markPending();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst flushedLoneEsc =\n\t\t\t\t\t\t\tthis.cursor === this.unitStart + 1 &&\n\t\t\t\t\t\t\tbytes[this.unitStart] === ESC;\n\t\t\t\t\t\tthis.emitKeyOrResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tdecodeUtf8(bytes.subarray(this.unitStart, this.cursor)),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.justFlushedEsc = flushedLoneEsc;\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// The byte after ESC determines the sub-protocol:\n\t\t\t\t\t// [  ->  CSI, O  ->  SS3, ]  ->  OSC, P  ->  DCS, _  ->  APC.\n\t\t\t\t\tswitch (byte) {\n\t\t\t\t\t\tcase 0x5b:\n\t\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\t\tthis.state = { tag: \"csi\" };\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tcase 0x4f:\n\t\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\t\tthis.state = { tag: \"ss3\" };\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tcase 0x5d:\n\t\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\t\tthis.state = { tag: \"osc\", sawEsc: false };\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tcase 0x50:\n\t\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\t\tthis.state = { tag: \"dcs\", sawEsc: false };\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tcase 0x5f:\n\t\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\t\tthis.state = { tag: \"apc\", sawEsc: false };\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t// ESC ESC: stay in esc state. Terminals encode Alt+ESC and\n\t\t\t\t\t\t// similar sequences as ESC ESC [...], so we keep scanning.\n\t\t\t\t\t\tcase ESC:\n\t\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\t\tthis.emitKeyOrResponse(\n\t\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\t\tdecodeUtf8(bytes.subarray(this.unitStart, this.cursor)),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcase \"ss3\": {\n\t\t\t\t\tif (this.cursor >= bytes.length) {\n\t\t\t\t\t\tif (!this.forceFlush) {\n\t\t\t\t\t\t\tthis.markPending();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === ESC) {\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\tthis.emitKeyOrResponse(\n\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\tdecodeUtf8(bytes.subarray(this.unitStart, this.cursor)),\n\t\t\t\t\t);\n\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Narrow recovery path for delayed mouse continuations after a\n\t\t\t\t// timeout-flushed lone ESC. Wait for either `<` (SGR) or `M` (X10); if\n\t\t\t\t// neither arrives, flush `[` as a normal key.\n\t\t\t\tcase \"esc_recovery\": {\n\t\t\t\t\tif (this.cursor >= bytes.length) {\n\t\t\t\t\t\tif (!this.forceFlush) {\n\t\t\t\t\t\t\tthis.markPending();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.emitKeyOrResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tdecodeUtf8(bytes.subarray(this.unitStart, this.cursor)),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === 0x3c) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tthis.state = { tag: \"esc_less_mouse\" };\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === 0x4d) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tthis.state = { tag: \"esc_less_x10_mouse\" };\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.emitKeyOrResponse(\n\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\tdecodeUtf8(bytes.subarray(this.unitStart, this.unitStart + 1)),\n\t\t\t\t\t);\n\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\tthis.consumePrefix(this.unitStart + 1);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcase \"csi\": {\n\t\t\t\t\tif (this.cursor >= bytes.length) {\n\t\t\t\t\t\tif (!this.forceFlush) {\n\t\t\t\t\t\t\tthis.markPending();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// A new ESC inside an incomplete CSI means the previous sequence\n\t\t\t\t\t// was interrupted. Flush everything before the new ESC as one\n\t\t\t\t\t// opaque response, then restart parsing at the new ESC.\n\t\t\t\t\tif (byte === ESC) {\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// X10 mouse: ESC [ M plus 3 raw payload bytes (button, x, y).\n\t\t\t\t\t// cursor === unitStart + 2 confirms M comes right after ESC[,\n\t\t\t\t\t// not as a later final byte in a different CSI sequence.\n\t\t\t\t\tif (byte === 0x4d && this.cursor === this.unitStart + 2) {\n\t\t\t\t\t\tconst end = this.cursor + 4;\n\t\t\t\t\t\tif (bytes.length < end) {\n\t\t\t\t\t\t\tif (!this.forceFlush) {\n\t\t\t\t\t\t\t\tthis.markPending();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\t\tbytes.subarray(this.unitStart, bytes.length),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\t\tthis.consumePrefix(bytes.length);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.emitMouse(bytes.subarray(this.unitStart, end), \"x10\");\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(end);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === 0x24) {\n\t\t\t\t\t\tconst candidateEnd = this.cursor + 1;\n\t\t\t\t\t\tconst candidate = decodeUtf8(\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, candidateEnd),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (RXVT_DOLLAR_CSI_RE.test(candidate)) {\n\t\t\t\t\t\t\tthis.emitKeyOrResponse(\"csi\", candidate);\n\t\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\t\tthis.consumePrefix(candidateEnd);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!this.forceFlush && candidateEnd >= bytes.length) {\n\t\t\t\t\t\t\tthis.markPending();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === 0x3c && this.cursor === this.unitStart + 2) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tthis.state = { tag: \"csi_sgr_mouse\", part: 0, hasDigit: false };\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Some terminals use ESC [[A..E / ESC [[5~ / ESC [[6~ variants.\n\t\t\t\t\t// Treat the second `[` immediately after ESC[ as part of the CSI\n\t\t\t\t\t// payload instead of as a final byte so parseKeypress() can match\n\t\t\t\t\t// `[[A`, `[[B`, `[[5~`, etc.\n\t\t\t\t\tif (byte === 0x5b && this.cursor === this.unitStart + 2) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === 0x3f && this.cursor === this.unitStart + 2) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\ttag: \"csi_private_reply\",\n\t\t\t\t\t\t\tsemicolons: 0,\n\t\t\t\t\t\t\thasDigit: false,\n\t\t\t\t\t\t\tsawDollar: false,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === 0x3b) {\n\t\t\t\t\t\tconst firstParamStart = this.unitStart + 2;\n\t\t\t\t\t\tconst firstParamEnd = this.cursor;\n\t\t\t\t\t\tlet firstParamValue = parsePositiveDecimalPrefix(\n\t\t\t\t\t\t\tbytes,\n\t\t\t\t\t\t\tfirstParamStart,\n\t\t\t\t\t\t\tfirstParamEnd,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tfirstParamValue === null &&\n\t\t\t\t\t\t\tthis.protocolContext.kittyKeyboardEnabled\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tfirstParamValue = parseKittyFirstFieldCodepoint(\n\t\t\t\t\t\t\t\tbytes,\n\t\t\t\t\t\t\t\tfirstParamStart,\n\t\t\t\t\t\t\t\tfirstParamEnd,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (firstParamValue !== null) {\n\t\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\t\ttag: \"csi_parametric\",\n\t\t\t\t\t\t\t\tsemicolons: 1,\n\t\t\t\t\t\t\t\tsegments: 1,\n\t\t\t\t\t\t\t\thasDigit: false,\n\t\t\t\t\t\t\t\tfirstParamValue,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Standard CSI final byte (0x40–0x7E). Check for bracketed paste\n\t\t\t\t\t// start, SGR mouse, or a regular CSI key/response.\n\t\t\t\t\tif (byte >= 0x40 && byte <= 0x7e) {\n\t\t\t\t\t\tconst end = this.cursor + 1;\n\t\t\t\t\t\tconst rawBytes = bytes.subarray(this.unitStart, end);\n\n\t\t\t\t\t\tif (bytesEqual(rawBytes, BRACKETED_PASTE_START)) {\n\t\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\t\tthis.consumePrefix(end);\n\t\t\t\t\t\t\tthis.paste = createPasteCollector();\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (isMouseSgrSequence(rawBytes)) {\n\t\t\t\t\t\t\tthis.emitMouse(rawBytes, \"sgr\");\n\t\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\t\tthis.consumePrefix(end);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.emitKeyOrResponse(\"csi\", decodeUtf8(rawBytes));\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(end);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcase \"csi_sgr_mouse\": {\n\t\t\t\t\tif (this.cursor >= bytes.length) {\n\t\t\t\t\t\tif (!this.forceFlush) {\n\t\t\t\t\t\t\tthis.markPending();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\ttag: \"csi_sgr_mouse_deferred\",\n\t\t\t\t\t\t\tpart: this.state.part,\n\t\t\t\t\t\t\thasDigit: this.state.hasDigit,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tthis.pendingSinceMs = null;\n\t\t\t\t\t\tthis.forceFlush = false;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === ESC) {\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isAsciiDigit(byte)) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\ttag: \"csi_sgr_mouse\",\n\t\t\t\t\t\t\tpart: this.state.part,\n\t\t\t\t\t\t\thasDigit: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === 0x3b && this.state.hasDigit && this.state.part < 2) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\ttag: \"csi_sgr_mouse\",\n\t\t\t\t\t\t\tpart: this.state.part + 1,\n\t\t\t\t\t\t\thasDigit: false,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte >= 0x40 && byte <= 0x7e) {\n\t\t\t\t\t\tconst end = this.cursor + 1;\n\t\t\t\t\t\tconst rawBytes = bytes.subarray(this.unitStart, end);\n\t\t\t\t\t\tif (isMouseSgrSequence(rawBytes)) {\n\t\t\t\t\t\t\tthis.emitMouse(rawBytes, \"sgr\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.emitKeyOrResponse(\"csi\", decodeUtf8(rawBytes));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(end);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.state = { tag: \"csi\" };\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcase \"csi_sgr_mouse_deferred\": {\n\t\t\t\t\tif (this.cursor >= bytes.length) {\n\t\t\t\t\t\tthis.pendingSinceMs = null;\n\t\t\t\t\t\tthis.forceFlush = false;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === ESC) {\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tisAsciiDigit(byte) ||\n\t\t\t\t\t\tbyte === 0x3b ||\n\t\t\t\t\t\tbyte === 0x4d ||\n\t\t\t\t\t\tbyte === 0x6d\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\ttag: \"csi_sgr_mouse\",\n\t\t\t\t\t\t\tpart: this.state.part,\n\t\t\t\t\t\t\thasDigit: this.state.hasDigit,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t);\n\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcase \"csi_parametric\": {\n\t\t\t\t\tif (this.cursor >= bytes.length) {\n\t\t\t\t\t\tif (!this.forceFlush) {\n\t\t\t\t\t\t\tthis.markPending();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (canDeferParametricCsi(this.state, this.protocolContext)) {\n\t\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\t\ttag: \"csi_parametric_deferred\",\n\t\t\t\t\t\t\t\tsemicolons: this.state.semicolons,\n\t\t\t\t\t\t\t\tsegments: this.state.segments,\n\t\t\t\t\t\t\t\thasDigit: this.state.hasDigit,\n\t\t\t\t\t\t\t\tfirstParamValue: this.state.firstParamValue,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tthis.pendingSinceMs = null;\n\t\t\t\t\t\t\tthis.forceFlush = false;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === ESC) {\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isAsciiDigit(byte)) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\ttag: \"csi_parametric\",\n\t\t\t\t\t\t\tsemicolons: this.state.semicolons,\n\t\t\t\t\t\t\tsegments: this.state.segments,\n\t\t\t\t\t\t\thasDigit: true,\n\t\t\t\t\t\t\tfirstParamValue: this.state.firstParamValue,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === 0x3a && this.state.hasDigit && this.state.segments < 3) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\ttag: \"csi_parametric\",\n\t\t\t\t\t\t\tsemicolons: this.state.semicolons,\n\t\t\t\t\t\t\tsegments: this.state.segments + 1,\n\t\t\t\t\t\t\thasDigit: false,\n\t\t\t\t\t\t\tfirstParamValue: this.state.firstParamValue,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === 0x3b && this.state.semicolons < 2) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\ttag: \"csi_parametric\",\n\t\t\t\t\t\t\tsemicolons: this.state.semicolons + 1,\n\t\t\t\t\t\t\tsegments: 1,\n\t\t\t\t\t\t\thasDigit: false,\n\t\t\t\t\t\t\tfirstParamValue: this.state.firstParamValue,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte >= 0x40 && byte <= 0x7e) {\n\t\t\t\t\t\tconst end = this.cursor + 1;\n\t\t\t\t\t\tthis.emitKeyOrResponse(\n\t\t\t\t\t\t\t\"csi\",\n\t\t\t\t\t\t\tdecodeUtf8(bytes.subarray(this.unitStart, end)),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(end);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.state = { tag: \"csi\" };\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcase \"csi_parametric_deferred\": {\n\t\t\t\t\tif (this.cursor >= bytes.length) {\n\t\t\t\t\t\tthis.pendingSinceMs = null;\n\t\t\t\t\t\tthis.forceFlush = false;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === ESC) {\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isAsciiDigit(byte) || byte === 0x3a || byte === 0x3b) {\n\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\ttag: \"csi_parametric\",\n\t\t\t\t\t\t\tsemicolons: this.state.semicolons,\n\t\t\t\t\t\t\tsegments: this.state.segments,\n\t\t\t\t\t\t\thasDigit: this.state.hasDigit,\n\t\t\t\t\t\t\tfirstParamValue: this.state.firstParamValue,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tcanCompleteDeferredParametricCsi(\n\t\t\t\t\t\t\tthis.state,\n\t\t\t\t\t\t\tbyte,\n\t\t\t\t\t\t\tthis.protocolContext,\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\ttag: \"csi_parametric\",\n\t\t\t\t\t\t\tsemicolons: this.state.semicolons,\n\t\t\t\t\t\t\tsegments: this.state.segments,\n\t\t\t\t\t\t\thasDigit: this.state.hasDigit,\n\t\t\t\t\t\t\tfirstParamValue: this.state.firstParamValue,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t);\n\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcase \"csi_private_reply\": {\n\t\t\t\t\tif (this.cursor >= bytes.length) {\n\t\t\t\t\t\tif (!this.forceFlush) {\n\t\t\t\t\t\t\tthis.markPending();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (canDeferPrivateReplyCsi(this.protocolContext)) {\n\t\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\t\ttag: \"csi_private_reply_deferred\",\n\t\t\t\t\t\t\t\tsemicolons: this.state.semicolons,\n\t\t\t\t\t\t\t\thasDigit: this.state.hasDigit,\n\t\t\t\t\t\t\t\tsawDollar: this.state.sawDollar,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tthis.pendingSinceMs = null;\n\t\t\t\t\t\t\tthis.forceFlush = false;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === ESC) {\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isAsciiDigit(byte)) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\ttag: \"csi_private_reply\",\n\t\t\t\t\t\t\tsemicolons: this.state.semicolons,\n\t\t\t\t\t\t\thasDigit: true,\n\t\t\t\t\t\t\tsawDollar: this.state.sawDollar,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === 0x3b) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\ttag: \"csi_private_reply\",\n\t\t\t\t\t\t\tsemicolons: this.state.semicolons + 1,\n\t\t\t\t\t\t\thasDigit: false,\n\t\t\t\t\t\t\tsawDollar: false,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === 0x24 && this.state.hasDigit && !this.state.sawDollar) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\ttag: \"csi_private_reply\",\n\t\t\t\t\t\t\tsemicolons: this.state.semicolons,\n\t\t\t\t\t\t\thasDigit: true,\n\t\t\t\t\t\t\tsawDollar: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte >= 0x40 && byte <= 0x7e) {\n\t\t\t\t\t\tconst end = this.cursor + 1;\n\t\t\t\t\t\tthis.emitKeyOrResponse(\n\t\t\t\t\t\t\t\"csi\",\n\t\t\t\t\t\t\tdecodeUtf8(bytes.subarray(this.unitStart, end)),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(end);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.state = { tag: \"csi\" };\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcase \"csi_private_reply_deferred\": {\n\t\t\t\t\tif (this.cursor >= bytes.length) {\n\t\t\t\t\t\tthis.pendingSinceMs = null;\n\t\t\t\t\t\tthis.forceFlush = false;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === ESC) {\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isAsciiDigit(byte) || byte === 0x3b || byte === 0x24) {\n\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\ttag: \"csi_private_reply\",\n\t\t\t\t\t\t\tsemicolons: this.state.semicolons,\n\t\t\t\t\t\t\thasDigit: this.state.hasDigit,\n\t\t\t\t\t\t\tsawDollar: this.state.sawDollar,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tcanCompleteDeferredPrivateReplyCsi(\n\t\t\t\t\t\t\tthis.state,\n\t\t\t\t\t\t\tbyte,\n\t\t\t\t\t\t\tthis.protocolContext,\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.state = {\n\t\t\t\t\t\t\ttag: \"csi_private_reply\",\n\t\t\t\t\t\t\tsemicolons: this.state.semicolons,\n\t\t\t\t\t\t\thasDigit: this.state.hasDigit,\n\t\t\t\t\t\t\tsawDollar: this.state.sawDollar,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t);\n\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// OSC sequences end at BEL or ESC \\. DCS and APC end at ESC \\\n\t\t\t\t// only. The sawEsc flag tracks whether the previous byte was ESC,\n\t\t\t\t// since the two-byte ESC \\ can split across push() calls.\n\t\t\t\tcase \"osc\": {\n\t\t\t\t\tif (this.cursor >= bytes.length) {\n\t\t\t\t\t\tif (!this.forceFlush) {\n\t\t\t\t\t\t\tthis.markPending();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.state.sawEsc) {\n\t\t\t\t\t\tif (byte === 0x5c) {\n\t\t\t\t\t\t\tconst end = this.cursor + 1;\n\t\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\t\"osc\",\n\t\t\t\t\t\t\t\tbytes.subarray(this.unitStart, end),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\t\tthis.consumePrefix(end);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.state = { tag: \"osc\", sawEsc: false };\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === BEL) {\n\t\t\t\t\t\tconst end = this.cursor + 1;\n\t\t\t\t\t\tthis.emitOpaqueResponse(\"osc\", bytes.subarray(this.unitStart, end));\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(end);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === ESC) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tthis.state = { tag: \"osc\", sawEsc: true };\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcase \"dcs\": {\n\t\t\t\t\tif (this.cursor >= bytes.length) {\n\t\t\t\t\t\tif (!this.forceFlush) {\n\t\t\t\t\t\t\tthis.markPending();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.state.sawEsc) {\n\t\t\t\t\t\tif (byte === 0x5c) {\n\t\t\t\t\t\t\tconst end = this.cursor + 1;\n\t\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\t\"dcs\",\n\t\t\t\t\t\t\t\tbytes.subarray(this.unitStart, end),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\t\tthis.consumePrefix(end);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.state = { tag: \"dcs\", sawEsc: false };\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === ESC) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tthis.state = { tag: \"dcs\", sawEsc: true };\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcase \"apc\": {\n\t\t\t\t\tif (this.cursor >= bytes.length) {\n\t\t\t\t\t\tif (!this.forceFlush) {\n\t\t\t\t\t\t\tthis.markPending();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.state.sawEsc) {\n\t\t\t\t\t\tif (byte === 0x5c) {\n\t\t\t\t\t\t\tconst end = this.cursor + 1;\n\t\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\t\"apc\",\n\t\t\t\t\t\t\t\tbytes.subarray(this.unitStart, end),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\t\tthis.consumePrefix(end);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.state = { tag: \"apc\", sawEsc: false };\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === ESC) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tthis.state = { tag: \"apc\", sawEsc: true };\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Delayed SGR mouse continuation after `esc_recovery` has consumed the\n\t\t\t\t// leading `[`. Consume the rest of `<digits;digits;digitsM/m` as one\n\t\t\t\t// opaque response so split mouse bytes never leak into text.\n\t\t\t\tcase \"esc_less_mouse\": {\n\t\t\t\t\tif (this.cursor >= bytes.length) {\n\t\t\t\t\t\tif (!this.forceFlush) {\n\t\t\t\t\t\t\tthis.markPending();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ((byte >= 0x30 && byte <= 0x39) || byte === 0x3b) {\n\t\t\t\t\t\tthis.cursor += 1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (byte === 0x4d || byte === 0x6d) {\n\t\t\t\t\t\tconst end = this.cursor + 1;\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, end),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(end);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\tbytes.subarray(this.unitStart, this.cursor),\n\t\t\t\t\t);\n\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Delayed X10 mouse continuation after `esc_recovery` has consumed the\n\t\t\t\t// leading `[`. Consume `[M` plus its three raw payload bytes as one\n\t\t\t\t// opaque response so split mouse bytes never leak into text.\n\t\t\t\tcase \"esc_less_x10_mouse\": {\n\t\t\t\t\tconst end = this.unitStart + 5;\n\n\t\t\t\t\tif (bytes.length < end) {\n\t\t\t\t\t\tif (!this.forceFlush) {\n\t\t\t\t\t\t\tthis.markPending();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\t\tbytes.subarray(this.unitStart, bytes.length),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\t\tthis.consumePrefix(bytes.length);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\tbytes.subarray(this.unitStart, end),\n\t\t\t\t\t);\n\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\tthis.consumePrefix(end);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Tries to parse the raw string as a key via parseKeypress(). If it\n\t// recognizes the sequence (printable char, arrow, function key, etc.),\n\t// emits a key event. Otherwise emits a response event — this is how\n\t// capability responses, focus sequences, and other non-key CSI traffic\n\t// avoids becoming text.\n\tprivate emitKeyOrResponse(\n\t\tprotocol: StdinResponseProtocol,\n\t\traw: string,\n\t): void {\n\t\tconst parsed = parseKeypress(raw, {\n\t\t\tuseKittyKeyboard: this.useKittyKeyboard,\n\t\t});\n\t\tif (parsed) {\n\t\t\tthis.events.push({\n\t\t\t\ttype: \"key\",\n\t\t\t\traw: parsed.raw,\n\t\t\t\tkey: parsed,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tthis.events.push({\n\t\t\ttype: \"response\",\n\t\t\tprotocol,\n\t\t\tsequence: raw,\n\t\t});\n\t}\n\n\tprivate emitMouse(rawBytes: Uint8Array, encoding: \"sgr\" | \"x10\"): void {\n\t\tconst event = this.mouseParser.parseMouseEvent(rawBytes);\n\t\tif (!event) {\n\t\t\tthis.emitOpaqueResponse(\"unknown\", rawBytes);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.events.push({\n\t\t\ttype: \"mouse\",\n\t\t\traw: decodeLatin1(rawBytes),\n\t\t\tencoding,\n\t\t\tevent,\n\t\t});\n\t}\n\n\t// Handles single bytes in the 0x80–0xFF range that aren't valid UTF-8\n\t// leads. Passes them through parseKeypress() which maps them to the\n\t// existing meta-key behavior (e.g. Alt+letter in terminals that send\n\t// high bytes instead of ESC-prefixed sequences).\n\tprivate emitLegacyHighByte(byte: number): void {\n\t\tconst parsed = parseKeypress(Buffer.from([byte]), {\n\t\t\tuseKittyKeyboard: this.useKittyKeyboard,\n\t\t});\n\t\tif (parsed) {\n\t\t\tthis.events.push({\n\t\t\t\ttype: \"key\",\n\t\t\t\traw: parsed.raw,\n\t\t\t\tkey: parsed,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tthis.events.push({\n\t\t\ttype: \"response\",\n\t\t\tprotocol: \"unknown\",\n\t\t\tsequence: String.fromCharCode(byte),\n\t\t});\n\t}\n\n\tprivate emitOpaqueResponse(\n\t\tprotocol: StdinResponseProtocol,\n\t\trawBytes: Uint8Array,\n\t): void {\n\t\tthis.events.push({\n\t\t\ttype: \"response\",\n\t\t\tprotocol,\n\t\t\tsequence: decodeLatin1(rawBytes),\n\t\t});\n\t}\n\n\t// Advances past a completed protocol unit. Resets cursor, unitStart,\n\t// and timeout state so the next scan iteration starts clean.\n\tprivate consumePrefix(endExclusive: number): void {\n\t\tthis.pending.consume(endExclusive);\n\t\tthis.cursor = 0;\n\t\tthis.unitStart = 0;\n\t\tthis.pendingSinceMs = null;\n\t\tthis.forceFlush = false;\n\t}\n\n\t// Removes all bytes from the pending queue and returns them. Used when\n\t// entering paste mode — leftover bytes after the paste start marker\n\t// need to flow through consumePasteBytes() instead.\n\tprivate takePendingBytes(): Uint8Array {\n\t\tconst buffered = this.pending.take();\n\t\tthis.cursor = 0;\n\t\tthis.unitStart = 0;\n\t\tthis.pendingSinceMs = null;\n\t\tthis.forceFlush = false;\n\t\treturn buffered;\n\t}\n\n\t// Emits all pending bytes as one opaque response and clears the buffer.\n\t// This keeps the parser buffer bounded at maxPendingBytes without\n\t// dropping data or splitting it into per-character events.\n\tprivate flushPendingOverflow(): void {\n\t\tif (this.pending.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.emitOpaqueResponse(\"unknown\", this.pending.view());\n\t\tthis.pending.clear();\n\t\tthis.cursor = 0;\n\t\tthis.unitStart = 0;\n\t\tthis.pendingSinceMs = null;\n\t\tthis.forceFlush = false;\n\t\tthis.state = { tag: \"ground\" };\n\t}\n\n\t// Records when incomplete data first appeared so flushTimeout() can\n\t// decide whether enough time has elapsed to force-flush it.\n\tprivate markPending(): void {\n\t\tthis.pendingSinceMs = this.clock.now();\n\t}\n\n\t// Processes bytes during an active bracketed paste. Searches for the end\n\t// marker (ESC[201~) using a sliding tail window so the marker can split\n\t// across chunk boundaries. Bytes that can't be part of the end marker are\n\t// appended to the paste collector without decoding.\n\t//\n\t// Returns any bytes that follow the end marker — those go back through\n\t// normal parsing in the push() loop.\n\tprivate consumePasteBytes(chunk: Uint8Array): Uint8Array {\n\t\tconst paste = this.paste!;\n\t\tconst combined = concatBytes(paste.tail, chunk);\n\t\tconst endIndex = indexOfBytes(combined, BRACKETED_PASTE_END);\n\n\t\tif (endIndex !== -1) {\n\t\t\tthis.pushPasteBytes(combined.subarray(0, endIndex));\n\n\t\t\tthis.events.push({\n\t\t\t\ttype: \"paste\",\n\t\t\t\tbytes: joinPasteBytes(paste.parts, paste.totalLength),\n\t\t\t});\n\n\t\t\tthis.paste = null;\n\t\t\treturn combined.subarray(endIndex + BRACKETED_PASTE_END.length);\n\t\t}\n\n\t\t// Keep enough trailing bytes to detect an end marker split across chunks.\n\t\t// Everything before that point is safe to retain immediately.\n\t\tconst keep = Math.min(BRACKETED_PASTE_END.length - 1, combined.length);\n\t\tconst stableLength = combined.length - keep;\n\t\tif (stableLength > 0) {\n\t\t\tthis.pushPasteBytes(combined.subarray(0, stableLength));\n\t\t}\n\n\t\tpaste.tail = Uint8Array.from(combined.subarray(stableLength));\n\t\treturn EMPTY_BYTES;\n\t}\n\n\tprivate pushPasteBytes(bytes: Uint8Array): void {\n\t\tif (bytes.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Copy here because subarray() inputs may alias the caller's chunk or the\n\t\t// parser's pending buffer across pushes. The emitted paste event must keep\n\t\t// the original bytes even if those backing buffers are later reused.\n\t\tthis.paste!.parts.push(Uint8Array.from(bytes));\n\t\tthis.paste!.totalLength += bytes.length;\n\t}\n\n\tprivate reconcileDeferredStateWithProtocolContext(): void {\n\t\tswitch (this.state.tag) {\n\t\t\tcase \"csi_parametric_deferred\":\n\t\t\t\tif (!canDeferParametricCsi(this.state, this.protocolContext)) {\n\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\tthis.pending.view().subarray(this.unitStart, this.cursor),\n\t\t\t\t\t);\n\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t}\n\t\t\t\treturn;\n\n\t\t\tcase \"csi_private_reply_deferred\":\n\t\t\t\tif (!canDeferPrivateReplyCsi(this.protocolContext)) {\n\t\t\t\t\tthis.emitOpaqueResponse(\n\t\t\t\t\t\t\"unknown\",\n\t\t\t\t\t\tthis.pending.view().subarray(this.unitStart, this.cursor),\n\t\t\t\t\t);\n\t\t\t\t\tthis.state = { tag: \"ground\" };\n\t\t\t\t\tthis.consumePrefix(this.cursor);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\t// Arms or disarms the timeout after every push(). If there's an incomplete\n\t// unit in the buffer, starts a timer. When the timer fires, it sets\n\t// forceFlush so the next read() converts the incomplete unit into one\n\t// atomic event (e.g. a lone ESC becoming an Escape key).\n\tprivate reconcileTimeoutState(): void {\n\t\tif (!this.armTimeouts) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tthis.paste ||\n\t\t\tthis.pendingSinceMs === null ||\n\t\t\tthis.pending.length === 0\n\t\t) {\n\t\t\tthis.clearTimeout();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clearTimeout();\n\t\tthis.timeoutId = this.clock.setTimeout(() => {\n\t\t\tthis.timeoutId = null;\n\t\t\tif (this.destroyed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.tryForceFlush();\n\t\t\t\tthis.onTimeoutFlush?.();\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"stdin parser timeout flush failed\", error);\n\t\t\t}\n\t\t}, this.timeoutMs);\n\t}\n\n\tprivate clearTimeout(): void {\n\t\tif (!this.timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clock.clearTimeout(this.timeoutId);\n\t\tthis.timeoutId = null;\n\t}\n\n\t// Clears all parser state: pending bytes, queued events, timeout tracking,\n\t// and any active paste collector. Called by both reset() (suspend/resume)\n\t// and destroy() to ensure no stale state survives.\n\tprivate resetState(): void {\n\t\tthis.pending.reset(INITIAL_PENDING_CAPACITY);\n\t\tthis.events.length = 0;\n\t\tthis.pendingSinceMs = null;\n\t\tthis.forceFlush = false;\n\t\tthis.justFlushedEsc = false;\n\t\tthis.state = { tag: \"ground\" };\n\t\tthis.cursor = 0;\n\t\tthis.unitStart = 0;\n\t\tthis.paste = null;\n\t\tthis.mouseParser.reset();\n\t}\n}\n"],"mappings":"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","ignoreList":[]}