peertable 0.8.51 → 0.8.52

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/README.md CHANGED
@@ -149,7 +149,7 @@ It interviews you, names the members, scaffolds `.team/` (charter + roles, isola
149
149
 
150
150
  Working, and used to build itself. First verified end-to-end on 2026-08-08 with a full no-orchestrator loop: two members consulted, claimed, negotiated an interface, shared a discovered pitfall, and shipped a small project with **zero external intervention**. A 2026-08-13 real-seat lifecycle verified in-place model/effort changes and restart recovery. On 2026-08-14, a Grok 4.6 seat joined the room, changed 4.6↔4.5 in the same session, and woke on a direct message in a live acceptance run. On 2026-08-17 the wake-up path was corrected so Grok seats wait for idle, broadcasts keep their body, and a parent without a tmux seat cannot stall the bridge cursor.
151
151
 
152
- The current npm release is **peertable 0.8.51**.
152
+ The current npm release is **peertable 0.8.52**.
153
153
 
154
154
  The current product contract is [docs/current-design.md](https://github.com/kitepon/peertable/blob/main/docs/current-design.md). Completed plans and the cumulative decision log are kept under `docs/archive/`; the current document map is [docs/00_overview.md](https://github.com/kitepon/peertable/blob/main/docs/00_overview.md).
155
155
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "peertable",
3
- "version": "0.8.51",
3
+ "version": "0.8.52",
4
4
  "description": "A round table of peer agents. No orchestrator at the head. Turn Claude Code, Codex, and Grok sessions into a team of equal, long-lived peers.",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/room/client.mjs CHANGED
@@ -14,7 +14,7 @@ import { boundedRecent, boundedUnread } from './message-bounds.mjs'
14
14
 
15
15
  // client.mjs 側のハードコード版数。package.json の version と一致していることを
16
16
  // diagnostics の version_consistency が見る(2 つの版数源の drift 検出。決定45)
17
- const MCP_VERSION = '0.8.51'
17
+ const MCP_VERSION = '0.8.52'
18
18
  const PKG_ROOT = join(dirname(fileURLToPath(import.meta.url)), '..')
19
19
 
20
20
  const USAGE = `usage:
@@ -481,6 +481,20 @@ async function wake(seat, msgs) {
481
481
  error.code = 'SEAT_TUI_GONE'
482
482
  throw error
483
483
  }
484
+ // **tty が cooked(icanon/echo)のままなら raw -echo へ戻す。** Codex 0.153 はツール実行後に
485
+ // 前面を取り戻しても tty 属性を子 shell の cooked のまま放置することがあり、その状態では
486
+ // 打鍵が行バッファに溜まって生で echo され(`^L` `^[[201~` が画面に残る)、TUI には届かない
487
+ // (実測 2026-09-04: tsumugi。`stty -f <tty> raw -echo` で即座に TUI が復帰した)。
488
+ // agent TUI は raw で動く前提なので、前面が agent である限りこの正規化は無害。
489
+ if (paneTty) {
490
+ const sttyOut = await run('/bin/stty', ['-f', `/dev/${paneTty}`, '-a'], { env: { ...process.env, LC_ALL: 'C' } })
491
+ const lflags = String(sttyOut.stdout ?? '')
492
+ const cooked = /(^|\s)icanon(\s|$)/u.test(lflags) || /(^|\s)echo(\s|$)/u.test(lflags)
493
+ if (cooked) {
494
+ await run('/bin/stty', ['-f', `/dev/${paneTty}`, 'raw', '-echo'], { env: { ...process.env, LC_ALL: 'C' } })
495
+ log(`SEAT_TTY_COOKED: ${seat} の tty が icanon/echo のままだった。raw -echo へ戻した`)
496
+ }
497
+ }
484
498
  if (await passKnownCodexDialog(member)) return 'deferred'
485
499
  const pane = await run('tmux', tmuxArgv(['capture-pane', '-t', observation.target, '-p'], { socket: observation.socket }))
486
500
  const screen = String(pane.stdout ?? '')