peertable 0.6.0 → 0.6.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "peertable",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
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
@@ -13,7 +13,7 @@ import { findModelsDoc, resolveSeatIdentity } from '../skill/scripts/resolve-sea
13
13
 
14
14
  // client.mjs 側のハードコード版数。package.json の version と一致していることを
15
15
  // diagnostics の version_consistency が見る(2 つの版数源の drift 検出。決定45)
16
- const MCP_VERSION = '0.6.0'
16
+ const MCP_VERSION = '0.6.1'
17
17
  const PKG_ROOT = join(dirname(fileURLToPath(import.meta.url)), '..')
18
18
 
19
19
  const USAGE = `usage:
@@ -18,7 +18,7 @@ import { join } from 'node:path'
18
18
  import { promisify } from 'node:util'
19
19
  import { resolveSeatObservation, tmuxArgv } from './seat-usage.mjs'
20
20
  import { keysForCodexPane } from './codex-dialog.mjs'
21
- import { BROADCAST_RECIPIENT, formatWakeNotice, isIdleSelfWake, isWakeupBridgeTarget, shouldDeferGrokWake } from './wakeup-delivery.mjs'
21
+ import { BROADCAST_RECIPIENT, formatWakeNotice, isIdleSelfWake, isWakeupBridgeTarget, memberHarness, shouldDeferGrokWake } from './wakeup-delivery.mjs'
22
22
  import { bridgeRecordLive } from './bridge-record-live.mjs'
23
23
 
24
24
  const run = promisify(execFile)
@@ -310,7 +310,7 @@ async function wake(seat, msgs) {
310
310
  }
311
311
  const pane = await run('tmux', tmuxArgv(['capture-pane', '-t', observation.target, '-p'], { socket: observation.socket }))
312
312
  const screen = String(pane.stdout ?? '')
313
- if ((member.harness ?? member.vendor) === 'codex') {
313
+ if (memberHarness(member) === 'codex') {
314
314
  const dialog = keysForCodexPane(screen)
315
315
  if (dialog) {
316
316
  for (const key of dialog.keys) {
@@ -320,9 +320,9 @@ async function wake(seat, msgs) {
320
320
  return 'deferred'
321
321
  }
322
322
  }
323
- if ((member.harness ?? member.vendor) === 'grok') {
323
+ if (memberHarness(member) === 'grok') {
324
324
  const tail = screen.split('\n').slice(-14).join('\n')
325
- if (shouldDeferGrokWake((member.harness ?? member.vendor), tail)) {
325
+ if (shouldDeferGrokWake(memberHarness(member), tail)) {
326
326
  if (!deferredBusy.has(seat)) {
327
327
  log(`Grok席が実行中なのでidleまで待つ: ${seat} ← ${msgs.length} 件`)
328
328
  deferredBusy.add(seat)
@@ -352,7 +352,7 @@ async function wake(seat, msgs) {
352
352
  // ターンを中断**していた(実被弾 2026-08-22: 監査席が2秒ごとに中断され、監査が進まなかった)。
353
353
  // Claude 席は「受理された兆候」を成功とみなし、回復キーに Escape を使わない。
354
354
  const CLAUDE_ACCEPTED = /paste again to expand|\[Pasted text|esc to interrupt|✻|✽|✳|·\s*\w+ing…/u
355
- const isClaude = (member.harness ?? member.vendor) === 'claude'
355
+ const isClaude = memberHarness(member) === 'claude'
356
356
  for (let attempt = 0; attempt < 3; attempt++) {
357
357
  await sleep(1200)
358
358
  const after = await run('tmux', tmuxArgv(['capture-pane', '-t', observation.target, '-p'], { socket: observation.socket }))
@@ -4,6 +4,11 @@ export const BROADCAST_RECIPIENT = 'all'
4
4
  export const ROOM_UPDATE_FALLBACK =
5
5
  'room全体の状況が更新された。room.read_logで部屋を読み、状況を把握して次の行動を判断する。'
6
6
 
7
+ /** member素性の正本はharness。旧server応答(vendorだけ)も受ける。 */
8
+ export function memberHarness(member) {
9
+ return member?.harness ?? member?.vendor
10
+ }
11
+
7
12
  export function collapseWakeBody(body) {
8
13
  return String(body ?? '').replace(/\s*\n+\s*/gu, ' / ')
9
14
  }
@@ -36,7 +41,7 @@ export function isWakeupBridgeTarget(member, options = {}) {
36
41
  && observe.tmux_target,
37
42
  )
38
43
  if (hasPane) return true
39
- const harness = member.harness ?? member.vendor // 旧server互換
44
+ const harness = memberHarness(member)
40
45
  return harness === 'codex' || harness === 'grok'
41
46
  }
42
47