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.
|
|
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.
|
|
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
|
|
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
|
|
323
|
+
if (memberHarness(member) === 'grok') {
|
|
324
324
|
const tail = screen.split('\n').slice(-14).join('\n')
|
|
325
|
-
if (shouldDeferGrokWake((member
|
|
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
|
|
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
|
|
44
|
+
const harness = memberHarness(member)
|
|
40
45
|
return harness === 'codex' || harness === 'grok'
|
|
41
46
|
}
|
|
42
47
|
|