@oh-my-pi/pi-tui 15.11.2 → 15.11.3

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 CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [15.11.3] - 2026-06-11
6
+
7
+ ### Fixed
8
+
9
+ - Fixed the root compose letting a lower child's native-scrollback live seam overwrite a higher one: the topmost seam (and its commit-safe extension) now defines the commit boundary, so a status loader below a streaming transcript can no longer cause still-mutable transcript rows to be committed as stale history ([#2328](https://github.com/can1357/oh-my-pi/pull/2328)).
10
+
5
11
  ## [15.11.2] - 2026-06-11
6
12
 
7
13
  ### Fixed
@@ -83,6 +83,10 @@ export interface Component {
83
83
  * of history until it finalizes. Volatile live blocks (tool previews that
84
84
  * collapse) omit it. Defaults to `liveRegionStart` when absent; a root that
85
85
  * reports no seam at all commits everything that scrolls (shell semantics).
86
+ *
87
+ * When several root children report a seam in the same frame, the topmost
88
+ * one (and its commit-safe extension) defines the boundary: commits are
89
+ * prefix-only, so everything below the first seam is already excluded.
86
90
  */
87
91
  export interface NativeScrollbackLiveRegion {
88
92
  getNativeScrollbackLiveRegionStart(): number | undefined;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@oh-my-pi/pi-tui",
4
- "version": "15.11.2",
4
+ "version": "15.11.3",
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": "15.11.2",
41
- "@oh-my-pi/pi-utils": "15.11.2",
40
+ "@oh-my-pi/pi-natives": "15.11.3",
41
+ "@oh-my-pi/pi-utils": "15.11.3",
42
42
  "lru-cache": "11.5.1",
43
43
  "marked": "^18.0.4"
44
44
  },
package/src/tui.ts CHANGED
@@ -185,6 +185,10 @@ export interface Component {
185
185
  * of history until it finalizes. Volatile live blocks (tool previews that
186
186
  * collapse) omit it. Defaults to `liveRegionStart` when absent; a root that
187
187
  * reports no seam at all commits everything that scrolls (shell semantics).
188
+ *
189
+ * When several root children report a seam in the same frame, the topmost
190
+ * one (and its commit-safe extension) defines the boundary: commits are
191
+ * prefix-only, so everything below the first seam is already excluded.
188
192
  */
189
193
  export interface NativeScrollbackLiveRegion {
190
194
  getNativeScrollbackLiveRegionStart(): number | undefined;
@@ -833,7 +837,13 @@ export class TUI extends Container {
833
837
  // the last render the engine actually observed.
834
838
  reported = getRenderStablePrefixRows(child);
835
839
  }
836
- if (liveLocalStart !== undefined) {
840
+ // Topmost seam wins. Commits are prefix-only: the first child that
841
+ // reports a live region (plus its own commit-safe extension) already
842
+ // bounds everything below it, so a lower sibling's seam (e.g. a
843
+ // status loader under a streaming transcript) must never overwrite
844
+ // it — moving the boundary down would commit the earlier child's
845
+ // still-mutable rows as stale history.
846
+ if (liveLocalStart !== undefined && this.#nativeScrollbackLiveRegionStart === undefined) {
837
847
  this.#nativeScrollbackLiveRegionStart = offset + liveLocalStart;
838
848
  if (commitLocalEnd !== undefined) {
839
849
  this.#nativeScrollbackCommitSafeEnd = offset + commitLocalEnd;