peertable 0.8.13 → 0.8.15
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.8.
|
|
3
|
+
"version": "0.8.15",
|
|
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.8.
|
|
16
|
+
const MCP_VERSION = '0.8.15'
|
|
17
17
|
const PKG_ROOT = join(dirname(fileURLToPath(import.meta.url)), '..')
|
|
18
18
|
|
|
19
19
|
const USAGE = `usage:
|
|
@@ -91,9 +91,13 @@ async function tick() {
|
|
|
91
91
|
}
|
|
92
92
|
nextDue.set(file, Date.now() + Math.max(2, Number(reg.interval_s) || 10) * 1000)
|
|
93
93
|
let met = false
|
|
94
|
+
let firedOutput = ''
|
|
94
95
|
try {
|
|
95
|
-
await run('bash', ['-c', reg.script], { timeout: 30_000, maxBuffer: 1024 * 1024 })
|
|
96
|
+
const { stdout, stderr } = await run('bash', ['-c', reg.script], { timeout: 30_000, maxBuffer: 1024 * 1024 })
|
|
96
97
|
met = true
|
|
98
|
+
// 発火の証拠を残す: fail-open型の条件は「なぜ成立したか」が出力にしか現れない
|
|
99
|
+
// (実被弾 2026-08-26: statusの一過性失敗で即発火したが、何が失敗したか記録が無く未解明)
|
|
100
|
+
firedOutput = `${stdout ?? ''}${stderr ?? ''}`.trim().slice(0, 300)
|
|
97
101
|
} catch (e) {
|
|
98
102
|
// exit 非0 = 条件未成立(正常)。timeout/spawn 失敗はログへ(成立と区別し、握りつぶさない)
|
|
99
103
|
if (e.killed || e.code === 'ENOENT') log(`条件スクリプトの実行失敗(${entry}): ${e.message}`)
|
|
@@ -103,7 +107,7 @@ async function tick() {
|
|
|
103
107
|
await wake(reg.seat, reg.note || entry)
|
|
104
108
|
unlinkSync(file)
|
|
105
109
|
nextDue.delete(file)
|
|
106
|
-
log(`起床: ${reg.seat} ← ${reg.note || entry}`)
|
|
110
|
+
log(`起床: ${reg.seat} ← ${reg.note || entry}${firedOutput ? `|条件出力: ${firedOutput}` : ''}`)
|
|
107
111
|
} catch (e) {
|
|
108
112
|
log(`起床の投函に失敗(次周期に再試行): ${e.message}`)
|
|
109
113
|
}
|
|
@@ -9,6 +9,12 @@ set -eu
|
|
|
9
9
|
proj="${1:?project_dir}"; seat="${2:?seat}"; note="${3:?note}"; shift 3
|
|
10
10
|
script="$*"
|
|
11
11
|
[ -n "$script" ] || { echo "ALARM_SET_SCRIPT_REQUIRED: 条件スクリプトが空" >&2; exit 2; }
|
|
12
|
+
# 誤った project path を mkdir -p が幻のツリーとして実体化し、誰も読まない場所へ exit 0 で
|
|
13
|
+
# 登録が「成功」する(実被弾 2026-08-28: worktree cwd からの相対 'poly' が poly/poly/.team/ を
|
|
14
|
+
# 生み、席は登録済みと思って15時間停滞)。目覚まし係が読むのは既存卓の .team だけなので、
|
|
15
|
+
# .team が既に在る場所しか受け付けず、path は絶対に解決して返す。
|
|
16
|
+
proj="$(cd -- "$proj" 2>/dev/null && pwd)" || { echo "ALARM_SET_PROJECT_INVALID: project_dir が存在しない" >&2; exit 2; }
|
|
17
|
+
[ -d "$proj/.team" ] || { echo "ALARM_SET_PROJECT_INVALID: ${proj}/.team が無い(卓の project root を渡すこと)" >&2; exit 2; }
|
|
12
18
|
dir="$proj/.team/alarms"
|
|
13
19
|
mkdir -p "$dir"
|
|
14
20
|
id="$(date +%s)-$$"
|