peertable 0.4.24 → 0.4.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.
- package/package.json +1 -1
- package/room/client.mjs +7 -2
- package/room/server.mjs +3 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "peertable",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.25",
|
|
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.4.
|
|
16
|
+
const MCP_VERSION = '0.4.25'
|
|
17
17
|
const PKG_ROOT = join(dirname(fileURLToPath(import.meta.url)), '..')
|
|
18
18
|
|
|
19
19
|
const USAGE = `usage:
|
|
@@ -164,6 +164,11 @@ await mcp.connect(new StdioServerTransport())
|
|
|
164
164
|
// 登録は client の起動ごとに繰り返し起きるので、1回きりの経路に置くと
|
|
165
165
|
// member の状態が失われた時に二度と戻らない(server 側は渡された欄だけ更新する upsert)
|
|
166
166
|
function observeSelf() {
|
|
167
|
+
const named = process.env.PEERTABLE_MEMBER ? `peer-${process.env.PEERTABLE_MEMBER}` : ''
|
|
168
|
+
const handed = process.env.PEERTABLE_TMUX_SOCKET
|
|
169
|
+
if (handed && named) {
|
|
170
|
+
return { tmux_socket: handed, tmux_target: named, tmux_namespace: handed }
|
|
171
|
+
}
|
|
167
172
|
if (!process.env.TMUX) {
|
|
168
173
|
process.stderr.write('peertable-client: observe unavailable: TMUX 不在\n')
|
|
169
174
|
return null
|
|
@@ -212,7 +217,7 @@ const IDENTITY = Object.fromEntries(Object.entries({
|
|
|
212
217
|
mission: process.env.PEERTABLE_MISSION,
|
|
213
218
|
aiterm_session_id: process.env.AITERM_SESSION_ID,
|
|
214
219
|
observe,
|
|
215
|
-
}).filter(([, v]) => v
|
|
220
|
+
}).filter(([, v]) => v != null && v !== '' && !(Array.isArray(v) && v.length === 0)))
|
|
216
221
|
{
|
|
217
222
|
const modelsDoc = findModelsDoc()
|
|
218
223
|
if (!modelsDoc || !existsSync(modelsDoc)) {
|
package/room/server.mjs
CHANGED
|
@@ -193,7 +193,10 @@ http.createServer(async (req, res) => {
|
|
|
193
193
|
// 素性(vendor/model/effort/role)や稼働状態は、名前以外の欄をそのまま任意欄として持つ。
|
|
194
194
|
// **渡された欄だけ更新し、渡されなかった欄は既存を保つ**——席の client は `{name}` だけで
|
|
195
195
|
// 登録するので、これが無いと再接続のたびに素性が消える。`joined_at` は最初の登録を保つ。
|
|
196
|
+
// observe:null は「取れなかった」であって「記述子を消せ」ではない。上書きすると
|
|
197
|
+
// wakeup-bridge が席を飛ばす(2026-08-20 なぎ)。
|
|
196
198
|
const known = room.members.get(name)
|
|
199
|
+
if (meta.observe == null && known?.observe) delete meta.observe
|
|
197
200
|
const merged = { joined_at: known?.joined_at ?? new Date().toISOString(), ...known, ...meta }
|
|
198
201
|
room.members.set(name, merged)
|
|
199
202
|
saveMembers(room)
|