@pipod/cli 0.1.23 → 0.1.25

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.
@@ -1,9 +1,9 @@
1
1
  # Keyboard input in the attached TUI
2
2
 
3
- Three input defects turn one key press into several characters, the same character twice, or
4
- into escape-sequence gibberish. All live in the local byte path — nothing typed crosses the
5
- wire — and all are fixed in `src/client/runtime/` rather than by pinning a different pi-tui,
6
- because the pinned version is what pods and the launcher share.
3
+ Input defects can turn one key press into several characters, the same character twice, or
4
+ into escape-sequence gibberish. These guards run in the local byte path, ahead of both the
5
+ built-in editor and pod-rendered extension editors. They live in `src/client/runtime/` rather
6
+ than pinning a different pi-tui, because pods and the launcher share the pinned version.
7
7
 
8
8
  ## The path
9
9
 
@@ -101,6 +101,25 @@ Left open deliberately: the reversed order (raw text first, then the CSI-u). No
101
101
  terminal writes it, and deduping it would mean dropping a key *event* on suspicion — the one
102
102
  direction where a mistake loses input.
103
103
 
104
+ ## 4. Reconnect must not leave the editor unguarded
105
+
106
+ Session replacement clears Pi's extension UI before asynchronously refreshing the remote
107
+ state. That also removes the launcher's input listeners, even though the same local editor
108
+ continues accepting keys. Previously the guards returned only when the refreshed session
109
+ bound its UI: typing during recovery bypassed both the encoding and repeat guards. A failed
110
+ refresh could leave them absent until a later successful recovery. The socket being connected
111
+ does not mean this refresh has finished.
112
+
113
+ `remote-runtime.ts` now rewires the launcher's listeners synchronously after invalidating the
114
+ old UI, before awaiting any refresh. The normal UI bind still unsubscribes and rewires them
115
+ against the new context. This keeps one set of guards active throughout reconnect, pod switch,
116
+ and session replacement, including refresh failures, without restarting the terminal or
117
+ suppressing deliberate repeated presses.
118
+
119
+ Measured on a live pod with the pinned Pi pair: a single dual-encoded press during the real
120
+ reconnect refresh inserted `bb` before the fix and `b` after it. The terminal retained one stdin
121
+ reader; the defect was a missing guard during recovery, not duplicate stdin subscriptions.
122
+
104
123
  ## Accepted rows
105
124
 
106
125
  Measured with a pty harness against pi 1.0.2 + pi-tui 1.0.2 (the pinned pair), driving
@@ -1,4 +1,4 @@
1
- .TH "PIPOD\-CONFIG" "5" "November 2026" "0.1.23"
1
+ .TH "PIPOD\-CONFIG" "5" "November 2026" "0.1.25"
2
2
  .SH "NAME"
3
3
  \fBpipod-config\fR \- pi pod configuration files
4
4
  .SH SYNOPSIS
package/man/pipod.1 CHANGED
@@ -1,4 +1,4 @@
1
- .TH "PIPOD" "1" "November 2026" "0.1.23"
1
+ .TH "PIPOD" "1" "November 2026" "0.1.25"
2
2
  .SH "NAME"
3
3
  \fBpipod\fR \- run pi coding\-agent sessions in server\-managed pods
4
4
  .SH SYNOPSIS
@@ -713,6 +713,12 @@ Quitting detaches: the pod keeps running until the server's idle policy reaps
713
713
  it or `pipod stop` stops it\. Raw pod shells are not available\.
714
714
  Attaching to an archived pod offers to restore it first\.
715
715
 
716
+ The supervisor identifies the exact Pi executable it launched\. Managed installations do not
717
+ start a second Pi just to check its version\. A failed lookup is retried safely during attach
718
+ when possible, without stopping active work; a discovery failure is reported separately from
719
+ an actual version mismatch\. Older supervisors with a cached failed lookup need a stop/attach
720
+ once idle, keeping the workspace files\.
721
+
716
722
  Holding a character key types it once, and a press the terminal reports in both of its
717
723
  encodings types once too: key repeat stays available for Backspace, Tab and the arrow keys,
718
724
  where it is useful while editing\.
package/man/pipod.1.md CHANGED
@@ -703,6 +703,12 @@ Quitting detaches: the pod keeps running until the server's idle policy reaps
703
703
  it or `pipod stop` stops it. Raw pod shells are not available.
704
704
  Attaching to an archived pod offers to restore it first.
705
705
 
706
+ The supervisor identifies the exact Pi executable it launched. Managed installations do not
707
+ start a second Pi just to check its version. A failed lookup is retried safely during attach
708
+ when possible, without stopping active work; a discovery failure is reported separately from
709
+ an actual version mismatch. Older supervisors with a cached failed lookup need a stop/attach
710
+ once idle, keeping the workspace files.
711
+
706
712
  Holding a character key types it once, and a press the terminal reports in both of its
707
713
  encodings types once too: key repeat stays available for Backspace, Tab and the arrow keys,
708
714
  where it is useful while editing.
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@pipod/cli",
3
- "version": "0.1.23",
3
+ "version": "0.1.25",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@pipod/cli",
9
- "version": "0.1.23",
9
+ "version": "0.1.25",
10
10
  "license": "AGPL-3.0-only",
11
11
  "dependencies": {
12
12
  "@earendil-works/pi-coding-agent": "1.0.2",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pipod/cli",
3
- "version": "0.1.23",
3
+ "version": "0.1.25",
4
4
  "description": "Run pi coding-agent sessions in server-managed pods",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0-only",