peertable 0.4.18 → 0.4.19

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.4.18",
3
+ "version": "0.4.19",
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.18'
16
+ const MCP_VERSION = '0.4.19'
17
17
  const PKG_ROOT = join(dirname(fileURLToPath(import.meta.url)), '..')
18
18
 
19
19
  const USAGE = `usage:
@@ -606,28 +606,8 @@ fi
606
606
 
607
607
  # 席の素性(roles / settings / mission)を room へ渡す。一覧チップと席の名簿が同じ欄を見る。
608
608
  tmux_ns=$(node "$(dirname "$0")/tmux-socket.mjs" --namespace)
609
- meta=$(python3 - "$name" "$vendor" "$model" "$effort" "$sock" "$sess" "$role" "$mission" "$aiterm_session_id" "$tmux_ns" <<'PY'
610
- import json, sys
611
- name, vendor, model, effort, sock, sess, roles_raw, mission, aiterm_session_id, tmux_ns = sys.argv[1:11]
612
- observe = {'tmux_socket': sock, 'tmux_target': sess}
613
- if tmux_ns:
614
- observe['tmux_namespace'] = tmux_ns
615
- roles = [item for item in roles_raw.split(',') if item]
616
- settings = {'vendor': vendor, 'model': model}
617
- if effort:
618
- settings['effort'] = effort
619
- body = {
620
- 'name': name, 'vendor': vendor, 'model': model, 'role': roles[0] if roles else '',
621
- 'roles': roles, 'settings': settings, 'aiterm_session_id': aiterm_session_id,
622
- 'observe': observe,
623
- }
624
- if effort:
625
- body['effort'] = effort
626
- if mission:
627
- body['mission'] = mission
628
- print(json.dumps(body, ensure_ascii=False))
629
- PY
630
- )
609
+ # python stdout Windows cp932 になり 実装 が壊れる。Node UTF-8 JSON を出す。
610
+ meta=$(node "$(dirname "$0")/seat-metadata.mjs" "$name" "$vendor" "$model" "$effort" "$sock" "$sess" "$role" "$mission" "$aiterm_session_id" "$tmux_ns")
631
611
  if env -u PEERTABLE_POST_TOKEN node "$credential_helper" request "$credential_file" POST \
632
612
  "$url/api/$room/members" "$meta" >/dev/null; then
633
613
  # **200 は保存の証拠にならない**。素性欄を知らない server も 200 {"ok":true} を返して黙って捨てる
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+ // 着席 metadata を UTF-8 JSON で出す。python stdout の cp932 経由は日本語 roles を壊す。
3
+ const [name, vendor, model, effort, sock, sess, rolesRaw, mission, aitermSessionId, tmuxNs] = process.argv.slice(2)
4
+ const roles = String(rolesRaw || '').split(',').map((item) => item.trim()).filter(Boolean)
5
+ const settings = { vendor, model }
6
+ if (effort) settings.effort = effort
7
+ const observe = { tmux_socket: sock, tmux_target: sess }
8
+ if (tmuxNs) observe.tmux_namespace = tmuxNs
9
+ const body = {
10
+ name,
11
+ vendor,
12
+ model,
13
+ role: roles[0] || '',
14
+ roles,
15
+ settings,
16
+ aiterm_session_id: aitermSessionId,
17
+ observe,
18
+ }
19
+ if (effort) body.effort = effort
20
+ if (mission) body.mission = mission
21
+ process.stdout.write(`${JSON.stringify(body)}\n`)