agent-coord-mcp 0.14.0 → 0.16.0
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/README.md +49 -5
- package/dist/server.js +45 -5
- package/dist/server.js.map +1 -1
- package/dist/store.js +58 -0
- package/dist/store.js.map +1 -1
- package/dist/tools/admin.js +296 -0
- package/dist/tools/admin.js.map +1 -0
- package/dist/tools/index.js +7 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/messaging.js +317 -0
- package/dist/tools/messaging.js.map +1 -0
- package/dist/tools/registry.js +237 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/rooms.js +136 -0
- package/dist/tools/rooms.js.map +1 -0
- package/dist/tools/shared.js +61 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/tools/transport.js +1003 -0
- package/dist/tools/transport.js.map +1 -0
- package/hooks/tier.mjs +23 -3
- package/hooks/tmux-pusher.mjs +50 -6
- package/package.json +1 -1
- package/scripts/coord-chat.mjs +1 -1
- package/scripts/coord-node.sh +98 -0
- package/scripts/coord-pusher.mjs +37 -4
- package/scripts/coord-token.mjs +126 -0
- package/src/server.ts +54 -5
- package/src/store.ts +62 -0
- package/src/tools/admin.ts +347 -0
- package/src/tools/index.ts +6 -0
- package/src/tools/messaging.ts +425 -0
- package/src/tools/registry.ts +329 -0
- package/src/tools/rooms.ts +215 -0
- package/src/tools/shared.ts +167 -0
- package/src/{tools.ts → tools/transport.ts} +23 -1008
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/tools/transport.ts"],"names":[],"mappings":"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"}
|
package/hooks/tier.mjs
CHANGED
|
@@ -51,18 +51,38 @@ export function isGateRunnerRole(role) {
|
|
|
51
51
|
// returns the batch to deliver (trigger(s) + entire queued routine backlog)
|
|
52
52
|
// or null when nothing urgent arrived — the caller then leaves cursors alone
|
|
53
53
|
// so the backlog stays unread and cannot be lost.
|
|
54
|
+
//
|
|
55
|
+
// maxAgeMs bounds how long routine traffic can sit without an urgent trigger:
|
|
56
|
+
// once the OLDEST queued message exceeds it, flushOverdue() drains the whole
|
|
57
|
+
// backlog as a routine-only digest. 0 (default) disables age-based flushing.
|
|
58
|
+
// Callers pass `now` explicitly so the class stays clock-free and testable.
|
|
54
59
|
export class TierQueue {
|
|
55
|
-
constructor() {
|
|
60
|
+
constructor(opts = {}) {
|
|
56
61
|
this.routine = [];
|
|
62
|
+
this.maxAgeMs = opts.maxAgeMs ?? 0;
|
|
63
|
+
this.oldestAt = null;
|
|
57
64
|
}
|
|
58
|
-
ingest(msgs) {
|
|
65
|
+
ingest(msgs, now = 0) {
|
|
59
66
|
const urgent = msgs.filter((m) => m.tier === "urgent");
|
|
60
|
-
|
|
67
|
+
const routine = msgs.filter((m) => m.tier !== "urgent");
|
|
68
|
+
if (routine.length > 0 && this.oldestAt === null) this.oldestAt = now;
|
|
69
|
+
this.routine.push(...routine);
|
|
61
70
|
if (urgent.length === 0) return null;
|
|
62
71
|
const batch = [...urgent, ...this.routine];
|
|
63
72
|
this.routine = [];
|
|
73
|
+
this.oldestAt = null;
|
|
64
74
|
return batch;
|
|
65
75
|
}
|
|
76
|
+
// Drain the backlog when its oldest entry has waited past maxAgeMs.
|
|
77
|
+
// Returns the routine-only batch to deliver, or null if nothing is overdue.
|
|
78
|
+
flushOverdue(now) {
|
|
79
|
+
if (this.maxAgeMs <= 0 || this.oldestAt === null) return null;
|
|
80
|
+
if (now - this.oldestAt < this.maxAgeMs) return null;
|
|
81
|
+
const batch = this.routine;
|
|
82
|
+
this.routine = [];
|
|
83
|
+
this.oldestAt = null;
|
|
84
|
+
return batch.length > 0 ? batch : null;
|
|
85
|
+
}
|
|
66
86
|
size() {
|
|
67
87
|
return this.routine.length;
|
|
68
88
|
}
|
package/hooks/tmux-pusher.mjs
CHANGED
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
* AGENT_COORD_DEBOUNCE_MS coalesce window for bursts (default 1000)
|
|
20
20
|
* AGENT_COORD_POLL_MS fallback poll interval (default 1000)
|
|
21
21
|
* AGENT_COORD_TARGET_GRACE missed pane probes before self-exit (default 3)
|
|
22
|
+
* AGENT_COORD_MAX_QUEUE_MS max time routine traffic may queue without an
|
|
23
|
+
* urgent trigger before it flushes as a digest
|
|
24
|
+
* (default 300000 = 5min; 0 disables)
|
|
22
25
|
*
|
|
23
26
|
* Safety:
|
|
24
27
|
* - drops messages where from === AGENT_COORD_ID (no self-echo)
|
|
@@ -83,6 +86,11 @@ const TARGET_GRACE = parseInt(process.env.AGENT_COORD_TARGET_GRACE || "3", 10);
|
|
|
83
86
|
// agent; everything else queues unread and rides the next push as a coalesced
|
|
84
87
|
// digest. AGENT_COORD_TIERS=0 restores legacy push-everything.
|
|
85
88
|
const TIERS_ENABLED = process.env.AGENT_COORD_TIERS !== "0";
|
|
89
|
+
// Max-age flush: routine traffic never waits longer than this for an urgent
|
|
90
|
+
// trigger — once the oldest queued message is overdue, the backlog flushes as
|
|
91
|
+
// a routine-only digest. Bounds the silent-fleet failure mode where FYI:/DONE:
|
|
92
|
+
// chatter queues forever because nothing urgent ever arrives.
|
|
93
|
+
const MAX_QUEUE_MS = parseInt(process.env.AGENT_COORD_MAX_QUEUE_MS || "300000", 10);
|
|
86
94
|
// Gate runners (QA/coordinator) receive DONE: as push-now; countersigned
|
|
87
95
|
// SCOPE: changes are honored only from these trusted ids. Re-resolved from
|
|
88
96
|
// the registry every 30s so a role change doesn't strand a stale pusher;
|
|
@@ -171,6 +179,24 @@ function readJsonl(file) {
|
|
|
171
179
|
// sender can't smuggle an arbitrary slash command past the guard below.
|
|
172
180
|
const CONTROL_COMMANDS = new Set(["/clear", "/compact"]);
|
|
173
181
|
|
|
182
|
+
// Shells we refuse to inject into: if the pane's foreground command is one of
|
|
183
|
+
// these, the agent CLI has exited and typing would run pasted text as commands.
|
|
184
|
+
const SHELL_COMMANDS = new Set(["bash", "zsh", "sh", "fish", "dash", "ksh"]);
|
|
185
|
+
|
|
186
|
+
// Foreground command of the target pane, or null if it can't be determined
|
|
187
|
+
// (in which case we do NOT block — fall back to the bracketed-paste protection).
|
|
188
|
+
function paneCurrentCommand() {
|
|
189
|
+
const r = spawnSync("tmux", [
|
|
190
|
+
"display-message",
|
|
191
|
+
"-p",
|
|
192
|
+
"-t",
|
|
193
|
+
TMUX_TARGET,
|
|
194
|
+
"#{pane_current_command}",
|
|
195
|
+
]);
|
|
196
|
+
if (r.status !== 0) return null;
|
|
197
|
+
return (r.stdout ?? "").toString().trim() || null;
|
|
198
|
+
}
|
|
199
|
+
|
|
174
200
|
function isControl(m) {
|
|
175
201
|
return (
|
|
176
202
|
!!m &&
|
|
@@ -197,7 +223,7 @@ function shouldInject(m) {
|
|
|
197
223
|
// never lost. Routine messages wait in tierQueue until a push-now trigger
|
|
198
224
|
// coalesces them; their offset commits travel in pendingCommits alongside.
|
|
199
225
|
const stagedOffsets = {};
|
|
200
|
-
const tierQueue = new TierQueue();
|
|
226
|
+
const tierQueue = new TierQueue({ maxAgeMs: TIERS_ENABLED ? MAX_QUEUE_MS : 0 });
|
|
201
227
|
let pendingCommits = [];
|
|
202
228
|
|
|
203
229
|
function collectSource(label, file, cursorKey, cur, staged) {
|
|
@@ -280,8 +306,10 @@ function checkOnce() {
|
|
|
280
306
|
}
|
|
281
307
|
// Tiered delivery: push only when the fresh batch contains a push-now
|
|
282
308
|
// trigger. A routine-only backlog stays queued (on-disk cursor untouched)
|
|
283
|
-
// so an idle agent is never woken — it rides the digest of the next trigger
|
|
284
|
-
|
|
309
|
+
// so an idle agent is never woken — it rides the digest of the next trigger,
|
|
310
|
+
// or flushes on its own once the oldest queued message exceeds MAX_QUEUE_MS.
|
|
311
|
+
const now = Date.now();
|
|
312
|
+
const batch = tierQueue.ingest(staged.msgs, now) ?? tierQueue.flushOverdue(now);
|
|
285
313
|
if (!batch) return;
|
|
286
314
|
pending.push(...batch);
|
|
287
315
|
scheduleFlush();
|
|
@@ -328,17 +356,28 @@ async function flush() {
|
|
|
328
356
|
// its own as a RAW line so the TUI runs it as a slash command — a banner or
|
|
329
357
|
// `[DM …]` prefix would turn it into plain chat text instead.
|
|
330
358
|
async function injectViaTmux(batch) {
|
|
359
|
+
// Fail-closed pane guard: never type into a pane that has dropped to a shell
|
|
360
|
+
// (crashed/exited agent CLI). Bracketed paste protects a compliant TUI, but a
|
|
361
|
+
// raw shell would execute pasted lines — so refuse and let the at-least-once
|
|
362
|
+
// cursor redeliver once the agent CLI is back.
|
|
363
|
+
const cmd = paneCurrentCommand();
|
|
364
|
+
if (cmd !== null && SHELL_COMMANDS.has(cmd)) {
|
|
365
|
+
process.stderr.write(
|
|
366
|
+
`[tmux-pusher] pane '${TMUX_TARGET}' is at a shell ('${cmd}'), not the agent CLI — skipping inject (will redeliver)\n`,
|
|
367
|
+
);
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
331
370
|
let run = [];
|
|
332
371
|
const flushRun = async () => {
|
|
333
372
|
if (run.length === 0) return;
|
|
334
|
-
await pasteAndSubmit(formatBatch(run));
|
|
373
|
+
await pasteAndSubmit(formatBatch(run), true); // peer content: inert bracketed paste
|
|
335
374
|
writeReceipts(run); // stamp only AFTER the paste+submit resolves
|
|
336
375
|
run = [];
|
|
337
376
|
};
|
|
338
377
|
for (const m of batch) {
|
|
339
378
|
if (isControl(m)) {
|
|
340
379
|
await flushRun();
|
|
341
|
-
await pasteAndSubmit(m.text.trim());
|
|
380
|
+
await pasteAndSubmit(m.text.trim(), false); // validated control: raw slash command
|
|
342
381
|
writeReceipts([m]);
|
|
343
382
|
} else {
|
|
344
383
|
run.push(m);
|
|
@@ -373,7 +412,11 @@ function writeReceipts(msgs) {
|
|
|
373
412
|
}
|
|
374
413
|
}
|
|
375
414
|
|
|
376
|
-
|
|
415
|
+
// bracketed=true wraps the paste in bracketed-paste markers (paste-buffer -p) so
|
|
416
|
+
// a compliant TUI treats the payload as inert data — embedded newlines can't
|
|
417
|
+
// submit lines or smuggle a "/command". Control commands (/clear, /compact) must
|
|
418
|
+
// paste RAW (bracketed=false) so the TUI still runs them as slash commands.
|
|
419
|
+
function pasteAndSubmit(payload, bracketed = false) {
|
|
377
420
|
return new Promise((resolve, reject) => {
|
|
378
421
|
const load = spawn("tmux", ["load-buffer", "-b", BUFFER_NAME, "-"]);
|
|
379
422
|
load.on("error", reject);
|
|
@@ -381,6 +424,7 @@ function pasteAndSubmit(payload) {
|
|
|
381
424
|
if (code !== 0) return reject(new Error(`tmux load-buffer exit ${code}`));
|
|
382
425
|
const paste = spawnSync("tmux", [
|
|
383
426
|
"paste-buffer",
|
|
427
|
+
...(bracketed ? ["-p"] : []),
|
|
384
428
|
"-b",
|
|
385
429
|
BUFFER_NAME,
|
|
386
430
|
"-t",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-coord-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.0",
|
|
4
4
|
"description": "File-backed MCP server for coordinating multiple AI coding agents (Claude Code, Cursor, Cline, etc.). Local stdio or networked over Streamable HTTP.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
package/scripts/coord-chat.mjs
CHANGED
|
@@ -762,7 +762,7 @@ async function postStatus(status) {
|
|
|
762
762
|
async function runDoctor(fix, emit) {
|
|
763
763
|
let doctorTool;
|
|
764
764
|
try {
|
|
765
|
-
({ doctorTool } = await import(new URL("../dist/tools.js", import.meta.url)));
|
|
765
|
+
({ doctorTool } = await import(new URL("../dist/tools/index.js", import.meta.url)));
|
|
766
766
|
} catch (e) {
|
|
767
767
|
emit(A.red(`/doctor unavailable: could not load the doctor tool (${e?.message ?? e}).`));
|
|
768
768
|
emit(A.dim(" This build may be missing dist/ — run `npm run build` in the package."));
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# coord-node.sh — one-command onboarding for a REMOTE machine to join the coord bus.
|
|
3
|
+
#
|
|
4
|
+
# The networked counterpart to spawn-agent.sh. spawn-agent.sh wires a LOCAL agent
|
|
5
|
+
# to a bus on the same box (hooks/tmux-pusher.mjs, reads the filesystem);
|
|
6
|
+
# coord-node wires a REMOTE agent to a networked bus over HTTP
|
|
7
|
+
# (scripts/coord-pusher.mjs). It:
|
|
8
|
+
# 1. starts a tmux session running your agent CLI,
|
|
9
|
+
# 2. auto-resolves that pane's tmux target,
|
|
10
|
+
# 3. launches the coord-pusher daemon pointed at the bus with this node's token.
|
|
11
|
+
#
|
|
12
|
+
# MVP daemon: per-node token. The operator mints a per-agent entry in the bus's
|
|
13
|
+
# tokens.json and passes that token here (single-use enrollment tokens + mTLS are
|
|
14
|
+
# a later step). It reuses spawn-agent.sh's tmux/pid conventions, so
|
|
15
|
+
# `scripts/stop-agent.sh --id <id>` also tears a coord-node down.
|
|
16
|
+
#
|
|
17
|
+
# Usage:
|
|
18
|
+
# scripts/coord-node.sh --server <url> --token <tok> --id <agent-id> \
|
|
19
|
+
# [--cmd 'claude'] [--allowlist a,b] [--no-room] [--dir <coord-dir>]
|
|
20
|
+
#
|
|
21
|
+
# Prefer the AGENT_COORD_TOKEN env var over --token so the secret never lands in
|
|
22
|
+
# your shell history or this script's argv:
|
|
23
|
+
# AGENT_COORD_TOKEN=tk_abc scripts/coord-node.sh --server https://bus:8765/mcp --id worker-2
|
|
24
|
+
|
|
25
|
+
set -euo pipefail
|
|
26
|
+
|
|
27
|
+
SERVER="${AGENT_COORD_SERVER:-}"
|
|
28
|
+
TOKEN="${AGENT_COORD_TOKEN:-}"
|
|
29
|
+
ID=""
|
|
30
|
+
CMD="claude"
|
|
31
|
+
ALLOWLIST=""
|
|
32
|
+
NO_ROOM=""
|
|
33
|
+
COORD_DIR=""
|
|
34
|
+
|
|
35
|
+
# tolerate an optional leading 'up' verb for symmetry with future subcommands
|
|
36
|
+
[[ "${1:-}" == "up" ]] && shift
|
|
37
|
+
|
|
38
|
+
while [[ $# -gt 0 ]]; do
|
|
39
|
+
case "$1" in
|
|
40
|
+
--server) SERVER="$2"; shift 2 ;;
|
|
41
|
+
--token) TOKEN="$2"; shift 2 ;;
|
|
42
|
+
--id|--agent) ID="$2"; shift 2 ;;
|
|
43
|
+
--cmd) CMD="$2"; shift 2 ;;
|
|
44
|
+
--allowlist) ALLOWLIST="$2"; shift 2 ;;
|
|
45
|
+
--no-room) NO_ROOM=1; shift ;;
|
|
46
|
+
--dir) COORD_DIR="$2"; shift 2 ;;
|
|
47
|
+
-h|--help) sed -n '2,29p' "$0"; exit 0 ;;
|
|
48
|
+
*) echo "unknown arg: $1" >&2; exit 2 ;;
|
|
49
|
+
esac
|
|
50
|
+
done
|
|
51
|
+
|
|
52
|
+
[[ -z "$SERVER" ]] && { echo "--server (or AGENT_COORD_SERVER) required" >&2; exit 2; }
|
|
53
|
+
[[ -z "$TOKEN" ]] && { echo "--token (or AGENT_COORD_TOKEN) required" >&2; exit 2; }
|
|
54
|
+
[[ -z "$ID" ]] && { echo "--id required" >&2; exit 2; }
|
|
55
|
+
|
|
56
|
+
command -v tmux >/dev/null || { echo "tmux not installed" >&2; exit 1; }
|
|
57
|
+
command -v node >/dev/null || { echo "node not installed" >&2; exit 1; }
|
|
58
|
+
|
|
59
|
+
REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
60
|
+
PUSHER="$REPO_DIR/scripts/coord-pusher.mjs"
|
|
61
|
+
[[ -f "$PUSHER" ]] || { echo "missing $PUSHER" >&2; exit 1; }
|
|
62
|
+
|
|
63
|
+
ROOT="${COORD_DIR:-${AGENT_COORD_DIR:-$HOME/agent-coord}}"
|
|
64
|
+
LOGDIR="$ROOT/logs"
|
|
65
|
+
PIDDIR="$ROOT/pids"
|
|
66
|
+
mkdir -p "$LOGDIR" "$PIDDIR"
|
|
67
|
+
|
|
68
|
+
SESSION="coord-$ID"
|
|
69
|
+
PID_FILE="$PIDDIR/pusher-$ID.pid"
|
|
70
|
+
|
|
71
|
+
if [[ -f "$PID_FILE" ]] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
|
|
72
|
+
echo "node daemon already running for '$ID' (pid $(cat "$PID_FILE"))" >&2
|
|
73
|
+
exit 0
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
if tmux has-session -t "$SESSION" 2>/dev/null; then
|
|
77
|
+
echo "tmux session '$SESSION' already exists — attach with: tmux attach -t $SESSION" >&2
|
|
78
|
+
else
|
|
79
|
+
tmux new-session -d -s "$SESSION" -n agent "$CMD"
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
TARGET="$(tmux display-message -p -t "$SESSION:agent" '#{pane_id}')"
|
|
83
|
+
[[ -n "$TARGET" ]] || { echo "failed to resolve tmux pane id" >&2; exit 1; }
|
|
84
|
+
|
|
85
|
+
# Token travels via env, not argv, so it does not appear in `ps` for the daemon.
|
|
86
|
+
ARGS=(--server "$SERVER" --agent "$ID" --tmux "$TARGET")
|
|
87
|
+
[[ -n "$ALLOWLIST" ]] && ARGS+=(--allowlist "$ALLOWLIST")
|
|
88
|
+
[[ -n "$NO_ROOM" ]] && ARGS+=(--no-room)
|
|
89
|
+
|
|
90
|
+
AGENT_COORD_TOKEN="$TOKEN" nohup node "$PUSHER" "${ARGS[@]}" \
|
|
91
|
+
>> "$LOGDIR/pusher-$ID.log" 2>&1 &
|
|
92
|
+
echo $! > "$PID_FILE"
|
|
93
|
+
|
|
94
|
+
echo "coord-node '$ID' up:"
|
|
95
|
+
echo " agent: tmux attach -t $SESSION (running: $CMD)"
|
|
96
|
+
echo " bus: $SERVER"
|
|
97
|
+
echo " daemon: pid $(cat "$PID_FILE") log: $LOGDIR/pusher-$ID.log"
|
|
98
|
+
echo " stop: scripts/stop-agent.sh --id $ID"
|
package/scripts/coord-pusher.mjs
CHANGED
|
@@ -128,6 +128,24 @@ let sending = false;
|
|
|
128
128
|
// Allowlisted control commands (mirrors CONTROL_COMMANDS in src/tools.ts).
|
|
129
129
|
const CONTROL_COMMANDS = new Set(["/clear", "/compact"]);
|
|
130
130
|
|
|
131
|
+
// Shells we refuse to inject into: if the pane's foreground command is one of
|
|
132
|
+
// these, the agent CLI has exited and typing would run pasted text as commands.
|
|
133
|
+
const SHELL_COMMANDS = new Set(["bash", "zsh", "sh", "fish", "dash", "ksh"]);
|
|
134
|
+
|
|
135
|
+
// Foreground command of the target pane, or null if it can't be determined
|
|
136
|
+
// (in which case we do NOT block — fall back to the bracketed-paste protection).
|
|
137
|
+
function paneCurrentCommand() {
|
|
138
|
+
const r = spawnSync("tmux", [
|
|
139
|
+
"display-message",
|
|
140
|
+
"-p",
|
|
141
|
+
"-t",
|
|
142
|
+
TMUX_TARGET,
|
|
143
|
+
"#{pane_current_command}",
|
|
144
|
+
]);
|
|
145
|
+
if (r.status !== 0) return null;
|
|
146
|
+
return (r.stdout ?? "").toString().trim() || null;
|
|
147
|
+
}
|
|
148
|
+
|
|
131
149
|
function isControl(m) {
|
|
132
150
|
return (
|
|
133
151
|
!!m &&
|
|
@@ -193,16 +211,27 @@ function formatBatch(batch) {
|
|
|
193
211
|
// control command (/clear, /compact) goes in on its own as a RAW line so the
|
|
194
212
|
// CLI runs it as a slash command rather than echoing it as chat text.
|
|
195
213
|
async function injectViaTmux(batch) {
|
|
214
|
+
// Fail-closed pane guard: never type into a pane that has dropped to a shell
|
|
215
|
+
// (crashed/exited agent CLI). Bracketed paste protects a compliant TUI, but a
|
|
216
|
+
// raw shell would execute pasted lines — so refuse and let the at-least-once
|
|
217
|
+
// cursor redeliver once the agent CLI is back.
|
|
218
|
+
const cmd = paneCurrentCommand();
|
|
219
|
+
if (cmd !== null && SHELL_COMMANDS.has(cmd)) {
|
|
220
|
+
process.stderr.write(
|
|
221
|
+
`[coord-pusher] pane '${TMUX_TARGET}' is at a shell ('${cmd}'), not the agent CLI — skipping inject (will redeliver)\n`,
|
|
222
|
+
);
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
196
225
|
let run = [];
|
|
197
226
|
const flushRun = async () => {
|
|
198
227
|
if (run.length === 0) return;
|
|
199
|
-
await pasteAndSubmit(formatBatch(run));
|
|
228
|
+
await pasteAndSubmit(formatBatch(run), true); // peer content: inert bracketed paste
|
|
200
229
|
run = [];
|
|
201
230
|
};
|
|
202
231
|
for (const m of batch) {
|
|
203
232
|
if (isControl(m)) {
|
|
204
233
|
await flushRun();
|
|
205
|
-
await pasteAndSubmit(m.text.trim());
|
|
234
|
+
await pasteAndSubmit(m.text.trim(), false); // validated control: raw slash command
|
|
206
235
|
} else {
|
|
207
236
|
run.push(m);
|
|
208
237
|
}
|
|
@@ -210,13 +239,17 @@ async function injectViaTmux(batch) {
|
|
|
210
239
|
await flushRun();
|
|
211
240
|
}
|
|
212
241
|
|
|
213
|
-
|
|
242
|
+
// bracketed=true wraps the paste in bracketed-paste markers (paste-buffer -p) so
|
|
243
|
+
// a compliant TUI treats the payload as inert data — embedded newlines can't
|
|
244
|
+
// submit lines or smuggle a "/command". Control commands (/clear, /compact) must
|
|
245
|
+
// paste RAW (bracketed=false) so the TUI still runs them as slash commands.
|
|
246
|
+
function pasteAndSubmit(payload, bracketed = false) {
|
|
214
247
|
return new Promise((resolve, reject) => {
|
|
215
248
|
const load = spawn("tmux", ["load-buffer", "-b", BUFFER_NAME, "-"]);
|
|
216
249
|
load.on("error", reject);
|
|
217
250
|
load.on("exit", (code) => {
|
|
218
251
|
if (code !== 0) return reject(new Error(`tmux load-buffer exit ${code}`));
|
|
219
|
-
const paste = spawnSync("tmux", ["paste-buffer", "-b", BUFFER_NAME, "-t", TMUX_TARGET, "-d"]);
|
|
252
|
+
const paste = spawnSync("tmux", ["paste-buffer", ...(bracketed ? ["-p"] : []), "-b", BUFFER_NAME, "-t", TMUX_TARGET, "-d"]);
|
|
220
253
|
if (paste.status !== 0) return reject(new Error(`tmux paste-buffer: ${(paste.stderr ?? "").toString().trim()}`));
|
|
221
254
|
const enter = spawnSync("tmux", ["send-keys", "-t", TMUX_TARGET, "Enter"]);
|
|
222
255
|
if (enter.status !== 0) return reject(new Error(`tmux send-keys: ${(enter.stderr ?? "").toString().trim()}`));
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// coord-token — mint / list / revoke per-agent bearer tokens in tokens.json.
|
|
3
|
+
//
|
|
4
|
+
// Closes the operator side of low-barrier node onboarding: instead of
|
|
5
|
+
// hand-editing tokens.json (and getting its perms right), mint a token for a
|
|
6
|
+
// node in one command, then paste it into coord-node on that machine.
|
|
7
|
+
//
|
|
8
|
+
// Usage:
|
|
9
|
+
// scripts/coord-token.mjs add <agent-id> mint (or rotate) a token, print it
|
|
10
|
+
// scripts/coord-token.mjs list list agent ids (never prints tokens)
|
|
11
|
+
// scripts/coord-token.mjs revoke <agent-id> remove a token
|
|
12
|
+
// [--dir <coord-dir>] override AGENT_COORD_DIR
|
|
13
|
+
//
|
|
14
|
+
// tokens.json is created 0600 (and re-chmod'd on every write) so secrets are
|
|
15
|
+
// never group/other-readable. After add/revoke, SIGHUP the running bus to
|
|
16
|
+
// reload its token map (kill -HUP <bus-pid>).
|
|
17
|
+
|
|
18
|
+
import { randomBytes } from "node:crypto";
|
|
19
|
+
import {
|
|
20
|
+
readFileSync,
|
|
21
|
+
writeFileSync,
|
|
22
|
+
existsSync,
|
|
23
|
+
chmodSync,
|
|
24
|
+
mkdirSync,
|
|
25
|
+
} from "node:fs";
|
|
26
|
+
import { homedir } from "node:os";
|
|
27
|
+
import path from "node:path";
|
|
28
|
+
|
|
29
|
+
const argv = process.argv.slice(2);
|
|
30
|
+
function opt(name) {
|
|
31
|
+
const i = argv.indexOf(name);
|
|
32
|
+
return i >= 0 ? argv[i + 1] : undefined;
|
|
33
|
+
}
|
|
34
|
+
function die(msg) {
|
|
35
|
+
process.stderr.write(`coord-token: ${msg}\n`);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Must match store.ts ROOT/TOKENS_FILE resolution exactly, or we'd write a file
|
|
40
|
+
// the bus never reads.
|
|
41
|
+
const ROOT =
|
|
42
|
+
opt("--dir") ??
|
|
43
|
+
process.env.AGENT_COORD_DIR ??
|
|
44
|
+
process.env.CLAUDE_COORD_DIR ??
|
|
45
|
+
path.join(homedir(), "agent-coord");
|
|
46
|
+
const TOKENS_FILE = path.join(ROOT, "tokens.json");
|
|
47
|
+
|
|
48
|
+
const AGENT_ID_RE = /^[a-zA-Z0-9._-]{1,64}$/;
|
|
49
|
+
|
|
50
|
+
function load() {
|
|
51
|
+
if (!existsSync(TOKENS_FILE)) return {};
|
|
52
|
+
let parsed;
|
|
53
|
+
try {
|
|
54
|
+
parsed = JSON.parse(readFileSync(TOKENS_FILE, "utf8"));
|
|
55
|
+
} catch (e) {
|
|
56
|
+
die(`${TOKENS_FILE} is not valid JSON: ${e.message}`);
|
|
57
|
+
}
|
|
58
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
59
|
+
die(`${TOKENS_FILE} must be a JSON object of { "agent-id": "token" }`);
|
|
60
|
+
}
|
|
61
|
+
return parsed;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function save(map) {
|
|
65
|
+
mkdirSync(ROOT, { recursive: true, mode: 0o700 });
|
|
66
|
+
writeFileSync(TOKENS_FILE, JSON.stringify(map, null, 2) + "\n", {
|
|
67
|
+
mode: 0o600,
|
|
68
|
+
});
|
|
69
|
+
chmodSync(TOKENS_FILE, 0o600); // enforce even when the file pre-existed looser
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const positional = argv.filter((a) => !a.startsWith("--"));
|
|
73
|
+
const cmd = positional[0];
|
|
74
|
+
const id = positional[1];
|
|
75
|
+
|
|
76
|
+
switch (cmd) {
|
|
77
|
+
case "add": {
|
|
78
|
+
if (!id || !AGENT_ID_RE.test(id)) {
|
|
79
|
+
die("usage: coord-token add <agent-id> (id: [a-zA-Z0-9._-], <=64 chars)");
|
|
80
|
+
}
|
|
81
|
+
const map = load();
|
|
82
|
+
const rotating = id in map;
|
|
83
|
+
const token = "tk_" + randomBytes(24).toString("base64url");
|
|
84
|
+
// Guard the astronomically unlikely collision that would collapse two
|
|
85
|
+
// identities onto one token in the bus's reverse map.
|
|
86
|
+
if (Object.values(map).includes(token)) die("token collision — rerun");
|
|
87
|
+
map[id] = token;
|
|
88
|
+
save(map);
|
|
89
|
+
process.stderr.write(
|
|
90
|
+
`${rotating ? "rotated" : "minted"} token for '${id}' in ${TOKENS_FILE}\n`,
|
|
91
|
+
);
|
|
92
|
+
process.stderr.write(
|
|
93
|
+
`SIGHUP the running bus to load it (kill -HUP <bus-pid>), then on the node:\n` +
|
|
94
|
+
` AGENT_COORD_TOKEN=${token} scripts/coord-node.sh --server <url> --id ${id} --cmd claude\n`,
|
|
95
|
+
);
|
|
96
|
+
process.stdout.write(token + "\n"); // token alone on stdout, pipe/capture-friendly
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
case "list": {
|
|
100
|
+
const ids = Object.keys(load());
|
|
101
|
+
if (ids.length === 0) {
|
|
102
|
+
process.stderr.write("no tokens configured\n");
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
for (const a of ids) process.stdout.write(a + "\n");
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
case "revoke": {
|
|
109
|
+
if (!id) die("usage: coord-token revoke <agent-id>");
|
|
110
|
+
const map = load();
|
|
111
|
+
if (!(id in map)) die(`no token for '${id}'`);
|
|
112
|
+
delete map[id];
|
|
113
|
+
save(map);
|
|
114
|
+
process.stderr.write(`revoked '${id}'. SIGHUP the bus to apply.\n`);
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
default:
|
|
118
|
+
process.stderr.write(
|
|
119
|
+
"coord-token — per-agent bus tokens\n" +
|
|
120
|
+
" coord-token add <agent-id> mint/rotate a token (prints it)\n" +
|
|
121
|
+
" coord-token list list agent ids\n" +
|
|
122
|
+
" coord-token revoke <agent-id> remove a token\n" +
|
|
123
|
+
" [--dir <coord-dir>]\n",
|
|
124
|
+
);
|
|
125
|
+
process.exit(cmd ? 1 : 0);
|
|
126
|
+
}
|