@oh-my-pi/pi-tui 17.3.3 → 17.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/package.json +3 -3
- package/src/terminal.ts +15 -8
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [17.3.4] - 2026-08-14
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Fixed a terminal Device-Attributes reply leaking into the composer as literal text (e.g. `1;22;…;52c`) when it arrived after the startup capability-probe sentinel FIFO drained, a race made observable by the added latency of an SSH/zmx PTY chain. DA1 replies (`CSI ? … c`) and split private-CSI responses are now consumed for the whole session lifetime, not only while a probe sentinel is outstanding ([#8542](https://github.com/can1357/oh-my-pi/issues/8542)).
|
|
10
|
+
|
|
5
11
|
## [17.3.3] - 2026-08-14
|
|
6
12
|
|
|
7
13
|
### Fixed
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@oh-my-pi/pi-tui",
|
|
4
|
-
"version": "17.3.
|
|
4
|
+
"version": "17.3.4",
|
|
5
5
|
"description": "Terminal User Interface library with differential rendering for efficient text-based applications",
|
|
6
6
|
"homepage": "https://omp.sh",
|
|
7
7
|
"author": "Can Boluk",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"fmt": "biome format --write ."
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@oh-my-pi/pi-natives": "17.3.
|
|
41
|
-
"@oh-my-pi/pi-utils": "17.3.
|
|
40
|
+
"@oh-my-pi/pi-natives": "17.3.4",
|
|
41
|
+
"@oh-my-pi/pi-utils": "17.3.4"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"ghostty-web": "^0.4.0"
|
package/src/terminal.ts
CHANGED
|
@@ -945,10 +945,11 @@ export class ProcessTerminal implements Terminal {
|
|
|
945
945
|
// flush timeout elapses mid-sequence, the prefix `\x1b[?<digits>` arrives as
|
|
946
946
|
// one event and the tail `;...<terminator>` arrives as individual character
|
|
947
947
|
// events that would otherwise leak into the prompt as keystrokes. See #1238.
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
)
|
|
948
|
+
// A private CSI (`\x1b[?…`) is a terminal->host report, never a keystroke, so
|
|
949
|
+
// reassembly stays armed for the whole session — not just while a probe
|
|
950
|
+
// sentinel is outstanding — otherwise a reply that lands after the sentinel
|
|
951
|
+
// FIFO drains (slow SSH/PTY links) leaks its tail into the composer (#8542).
|
|
952
|
+
if (this.#privateCsiResponseBuffer || privateCsiPartialPattern.test(sequence)) {
|
|
952
953
|
if (this.#privateCsiResponseBuffer && sequence.startsWith("\x1b")) {
|
|
953
954
|
// New escape arrived mid-reassembly — abandon partial and re-process the new sequence.
|
|
954
955
|
this.#privateCsiResponseBuffer = "";
|
|
@@ -1038,10 +1039,16 @@ export class ProcessTerminal implements Terminal {
|
|
|
1038
1039
|
}
|
|
1039
1040
|
|
|
1040
1041
|
// DA1 response: swallow our sentinel reply regardless of whether an
|
|
1041
|
-
// earlier capability-specific response already succeeded.
|
|
1042
|
-
//
|
|
1043
|
-
|
|
1044
|
-
|
|
1042
|
+
// earlier capability-specific response already succeeded. `CSI ? … c` is
|
|
1043
|
+
// exclusively a terminal->host report, so it is swallowed even with no
|
|
1044
|
+
// outstanding sentinel — a reply that arrives after the FIFO drains (slow
|
|
1045
|
+
// SSH/PTY links) must never reach the composer as literal text (#8542).
|
|
1046
|
+
if (da1ResponsePattern.test(sequence)) {
|
|
1047
|
+
const owner = this.#da1SentinelOwners.shift();
|
|
1048
|
+
if (!owner) {
|
|
1049
|
+
// Late/unowned reply: nothing to resolve, just drop the bytes.
|
|
1050
|
+
return;
|
|
1051
|
+
}
|
|
1045
1052
|
switch (owner.kind) {
|
|
1046
1053
|
case "osc11": {
|
|
1047
1054
|
if (this.#osc11Pending) {
|