remote-pi 0.4.0 → 0.4.2

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.
@@ -19,11 +19,18 @@ import { homedir } from "node:os";
19
19
  import { join } from "node:path";
20
20
  import { z } from "zod";
21
21
  import { MeshNode } from "../session/mesh_node.js";
22
- import { loadLocalConfig, defaultAgentName } from "../session/local_config.js";
22
+ import { loadLocalConfig, defaultAgentName, localConfigExists } from "../session/local_config.js";
23
23
  import { resolveRelayUrl } from "../config.js";
24
24
  import { acquireCwdLock } from "../session/cwd_lock.js";
25
25
  // ── Args / config ─────────────────────────────────────────────────────────────
26
26
  const _argv = process.argv.slice(2);
27
+ // This agent's folder = the dir the `claude` session was launched in, which
28
+ // Claude sets as this subprocess's `process.cwd()`. We deliberately do NOT use
29
+ // CLAUDE_PROJECT_DIR: that's the git repo root, which would collapse every
30
+ // monorepo subproject (app/, relay/, …) into one identity + one lock. The
31
+ // `remote-pi claude` launcher therefore registers us WITHOUT a baked `--cwd`,
32
+ // so one shared local-scope entry self-identifies per session. `--cwd` and
33
+ // REMOTE_PI_MCP_CWD remain as explicit overrides (tests / manual launches).
27
34
  let _cwd = process.env["REMOTE_PI_MCP_CWD"] ?? process.cwd();
28
35
  let _nameOverride = process.env["REMOTE_PI_MCP_NAME"];
29
36
  let _bridgeEnabled = true;
@@ -45,6 +52,25 @@ const AUDIT_PATH = join(homedir(), ".pi", "remote", "sessions", "local", "audit.
45
52
  const inbox = [];
46
53
  // ── Mesh node ─────────────────────────────────────────────────────────────────
47
54
  const { url: relayUrl } = resolveRelayUrl();
55
+ // Diagnostics go to STDERR — stdout is the JSON-RPC channel, so writing there
56
+ // would corrupt the MCP protocol. Claude Code captures an MCP server's stderr
57
+ // into its mcp-logs, which is where these land for debugging.
58
+ function logErr(msg) {
59
+ process.stderr.write(`[remote-pi-mesh ${isoNow()}] ${msg}\n`);
60
+ }
61
+ // Survive stray async failures. This process runs background work (relay WS
62
+ // churn, UDS failover, the MCP SDK) whose errors previously had NO global
63
+ // handler — a single unhandled rejection or exception silently killed this
64
+ // stdio subprocess, and Claude surfaced the MCP as "disconnected" with no
65
+ // trace. None of that background work is fatal to serving tools over stdio, so
66
+ // log loudly and keep running instead of dying. (We intentionally do NOT
67
+ // process.exit here: the tools stay available even if the mesh is degraded.)
68
+ process.on("unhandledRejection", (reason) => {
69
+ logErr(`unhandledRejection: ${reason instanceof Error ? (reason.stack ?? reason.message) : String(reason)}`);
70
+ });
71
+ process.on("uncaughtException", (err) => {
72
+ logErr(`uncaughtException: ${err.stack ?? err.message}`);
73
+ });
48
74
  const mesh = new MeshNode({
49
75
  sockPath: BROKER_SOCK,
50
76
  name: AGENT_NAME,
@@ -53,11 +79,16 @@ const mesh = new MeshNode({
53
79
  // daemon already hosting the broker for this cwd). As a follower the
54
80
  // bridge stays dormant and cross-PC rides the existing leader.
55
81
  ...(_bridgeEnabled ? { bridge: { relayUrl, cwd: _cwd } } : {}),
56
- log: (_msg) => { },
82
+ // Silent: stdout is the MCP JSON-RPC channel and stderr noise isn't wanted.
83
+ // Real failures still surface via the global handlers / fail-loud below.
84
+ log: () => { },
57
85
  });
58
86
  let meshReady = false;
87
+ // When the mesh isn't joined, this explains why (folder busy / connecting), so
88
+ // the tools return something actionable instead of a generic "not connected".
89
+ let degradedReason = "connecting to the mesh…";
59
90
  // ── MCP server setup ──────────────────────────────────────────────────────────
60
- const mcp = new McpServer({ name: "remote-pi-mesh", version: "0.2.1" }, {
91
+ const mcp = new McpServer({ name: "remote-pi-mesh", version: "0.4.2" }, {
61
92
  capabilities: { experimental: { "claude/channel": {} } },
62
93
  instructions: [
63
94
  `You are connected to the remote-pi agent mesh as "${AGENT_NAME}".`,
@@ -65,12 +96,12 @@ const mcp = new McpServer({ name: "remote-pi-mesh", version: "0.2.1" }, {
65
96
  "Use list_peers to discover available agents.",
66
97
  "Use agent_send to send messages — use the exact peer name returned by list_peers.",
67
98
  'Use "broadcast" as the target to send to all peers at once.',
68
- "Follow the 'agent-network' skill for the full protocol (ACK statuses, replies via re, cross-PC <pc>:<peer> addressing).",
99
+ "Follow the agent-network protocol (in your system prompt) for the full details (ACK statuses, replies via re, cross-PC <pc>:<peer> addressing).",
69
100
  ].join("\n"),
70
101
  });
71
102
  function notReady() {
72
103
  return {
73
- content: [{ type: "text", text: "Not connected to the mesh. Is remote-pi running in this folder?" }],
104
+ content: [{ type: "text", text: `Mesh not available yet ${degradedReason}` }],
74
105
  isError: true,
75
106
  };
76
107
  }
@@ -108,7 +139,16 @@ mcp.registerTool("agent_send", {
108
139
  }
109
140
  const ack = await mesh.sendWithAck(to, body, re ?? null);
110
141
  const note = ack.status === "received" ? `Delivered to ${ack.target ?? to}` :
111
- ack.status === "busy" ? `${to} is busy (mid-turn) message dropped, retry later` :
142
+ // plan/34 removed busy-drop: the current broker NEVER returns `busy`. So
143
+ // if we still see it, the broker LEADER in this mesh is an out-of-date
144
+ // process (e.g. a long-running Pi/agent that leads the local broker and
145
+ // predates the new build) — and that old code DROPPED this message. Be
146
+ // honest: this was NOT delivered. Fix = restart the leader agent.
147
+ ack.status === "busy" ?
148
+ `NOT delivered — "${to}" came back BUSY, which only happens when an ` +
149
+ `OUT-OF-DATE broker leader dropped the message (busy was removed in the ` +
150
+ `current version). Restart the agent that leads the local broker (the ` +
151
+ `oldest Pi/remote-pi process) so it picks up the new build, then resend.` :
112
152
  ack.status === "denied" ? `${to} denied the message` :
113
153
  `No ACK from ${to} (timeout) — peer may be offline`;
114
154
  return {
@@ -134,25 +174,36 @@ mcp.registerTool("get_messages", {
134
174
  function isoNow() {
135
175
  return new Date().toISOString();
136
176
  }
177
+ // Background lock+join state. The cwd lock enforces the per-folder singleton
178
+ // (at most one remote-pi agent — Pi OR Claude — per folder; a second peer with
179
+ // the same cwd-derived name would be a ghost).
180
+ //
181
+ // We retry only briefly — just enough to ride out a restart RACE (the previous
182
+ // MCP for this folder is still tearing down when Claude respawns us). After a
183
+ // short grace we FAIL LOUD (exit non-zero) rather than degrade forever: a
184
+ // silent connected-but-idle MCP hides the real problem (you launched claude in
185
+ // the wrong folder, or this folder already has a live agent — a duplicate
186
+ // session). Failing makes Claude show the MCP as errored so you actually see it.
187
+ const JOIN_RETRY_MS = 2_000;
188
+ const MAX_JOIN_ATTEMPTS = 4; // ~6–8s grace for a restart race, then fail loud
189
+ let _lock = null;
190
+ let _lockRetryTimer = null;
191
+ let _lockAttempt = 0;
192
+ let _joined = false;
193
+ let _shuttingDown = false;
137
194
  async function main() {
138
- // Per-cwd singleton — same kernel-enforced UDS lock the Pi extension's
139
- // `/remote-pi` takes (see cwd_lock.ts). At most one remote-pi agent (Pi OR
140
- // Claude) may own a folder. Without this, a second MCP in the same cwd joins
141
- // the global broker under the same cwd-derived name and the broker
142
- // disambiguates it to `Name#2` — an unresponsive ghost peer. We acquire the
143
- // lock BEFORE touching the mesh and hard-fail if refused: the process exits
144
- // before connecting the stdio transport, so Claude Code surfaces this MCP as
145
- // failed (the session keeps working, just without mesh tools).
146
- const lock = await acquireCwdLock(_cwd);
147
- if (!lock.ok) {
148
- process.stderr.write(`[remote-pi-mesh] folder already owned by another remote-pi agent ` +
149
- `(lock: ${lock.lockPath}). Refusing to start a duplicate mesh peer.\n`);
150
- process.exit(1);
151
- }
152
195
  // Subscribe BEFORE connecting so we don't miss early envelopes. The
153
196
  // SessionPeer swallows broker ACKs / system events itself, so handlers
154
197
  // only see real peer messages (and replies, which carry `re`).
155
198
  mesh.onMessage((env) => {
199
+ // plan/34 (passive presence): broker control/system envelopes
200
+ // (`peer_joined` / `peer_left` / `list_peers_reply`) are presence signals,
201
+ // NOT agent messages. Never push them to the inbox or the claude/channel —
202
+ // otherwise a peer joining/leaving would wake this agent's turn. Discovery
203
+ // is pull-based via `list_peers`. (Real broker ACKs and `re` replies are
204
+ // already swallowed upstream by SessionPeer.)
205
+ if (env.from === "broker" || env.from.endsWith(":broker"))
206
+ return;
156
207
  const msg = {
157
208
  from: env.from,
158
209
  body: env.body,
@@ -168,37 +219,112 @@ async function main() {
168
219
  params: { content: `📨 Message from ${msg.from}:\n${JSON.stringify(msg.body, null, 2)}` },
169
220
  }).catch(() => { });
170
221
  });
222
+ // Connect the stdio transport FIRST and unconditionally, so Claude Code
223
+ // always sees this server as connected and the tools stay reachable — even
224
+ // before (or entirely without) a mesh join. The mesh join is layered on
225
+ // best-effort below; a busy folder no longer kills the MCP.
226
+ const transport = new StdioServerTransport();
227
+ transport.onclose = shutdown;
228
+ process.stdin.on("end", shutdown);
229
+ process.stdin.on("close", shutdown);
230
+ await mcp.connect(transport);
231
+ // Only join the mesh if this folder is an actual remote-pi agent — i.e. it
232
+ // has a local config (written by the `remote-pi claude` wizard) or an
233
+ // explicit name override. `-s local` MCP registrations are inherited by
234
+ // EVERY claude session in the git repo, so without this gate a plain claude
235
+ // opened in any subfolder would auto-grab that folder's lock and join as a
236
+ // stray agent — colliding with the real agent. No config ⇒ stay connected
237
+ // but idle (tools report why); don't lock, don't join, don't retry.
238
+ if (localConfigExists(_cwd) || _nameOverride !== undefined) {
239
+ // Kick off the lock+join in the background. Never awaited — the MCP is
240
+ // already serving; mesh availability arrives (and recovers) asynchronously.
241
+ void tryJoinMesh();
242
+ }
243
+ else {
244
+ degradedReason =
245
+ `this folder is not a remote-pi agent (no config). Run "remote-pi claude" ` +
246
+ `here to make it one. Mesh tools are idle.`;
247
+ }
248
+ }
249
+ /** Acquire the per-cwd lock, then join the mesh. Retries briefly to absorb a
250
+ * restart race; if the lock or join still fails after MAX_JOIN_ATTEMPTS, FAIL
251
+ * LOUD (exit) so the failure is visible instead of silently degrading. */
252
+ async function tryJoinMesh() {
253
+ if (_joined || _shuttingDown)
254
+ return;
255
+ const res = await acquireCwdLock(_cwd);
256
+ if (!res.ok) {
257
+ _lockAttempt++;
258
+ if (_lockAttempt >= MAX_JOIN_ATTEMPTS) {
259
+ _failLoud(`folder already served by another remote-pi agent (lock: ${res.lockPath})`);
260
+ }
261
+ degradedReason = `folder busy (lock ${res.lockPath}); attempt ${_lockAttempt}/${MAX_JOIN_ATTEMPTS}`;
262
+ _scheduleJoinRetry(JOIN_RETRY_MS);
263
+ return;
264
+ }
265
+ _lock = res;
171
266
  try {
172
267
  await mesh.connect();
173
268
  meshReady = true;
269
+ _joined = true;
270
+ _lockAttempt = 0;
174
271
  }
175
272
  catch (e) {
176
- process.stderr.write(`[remote-pi-mesh] mesh offline: ${String(e)}\n`);
177
- }
178
- // Exit cleanly when Claude Code disconnects. The MeshNode keeps a UDS
179
- // socket (and, when leader, a relay WS) open, so without this the process
180
- // would linger forever after Claude exits — orphaning the mesh peer (it
181
- // keeps showing "online" with nothing actually attached). We leave the
182
- // mesh, then exit. Triggered by either the MCP transport closing or stdin
183
- // hitting EOF (whichever the host does first).
184
- let shuttingDown = false;
185
- const shutdown = () => {
186
- if (shuttingDown)
187
- return;
188
- shuttingDown = true;
273
+ // Got the lock but the broker join failed (e.g. socket churn). Release the
274
+ // lock so another contender isn't starved, then retry / fail loud.
275
+ _lockAttempt++;
189
276
  try {
190
- lock.release();
277
+ _lock.release();
191
278
  }
192
- catch { /* OS frees the UDS lock on exit anyway */ }
193
- void Promise.resolve(mesh.close())
194
- .catch(() => { })
195
- .finally(() => process.exit(0));
196
- };
197
- const transport = new StdioServerTransport();
198
- transport.onclose = shutdown;
199
- process.stdin.on("end", shutdown);
200
- process.stdin.on("close", shutdown);
201
- await mcp.connect(transport);
279
+ catch { /* best-effort */ }
280
+ _lock = null;
281
+ if (_lockAttempt >= MAX_JOIN_ATTEMPTS) {
282
+ _failLoud(`mesh join failed: ${String(e)}`);
283
+ }
284
+ degradedReason = `mesh join failed (attempt ${_lockAttempt}/${MAX_JOIN_ATTEMPTS}): ${String(e)}`;
285
+ _scheduleJoinRetry(JOIN_RETRY_MS);
286
+ }
287
+ }
288
+ function _scheduleJoinRetry(delayMs) {
289
+ if (_lockRetryTimer || _joined || _shuttingDown)
290
+ return;
291
+ const t = setTimeout(() => {
292
+ _lockRetryTimer = null;
293
+ void tryJoinMesh();
294
+ }, delayMs);
295
+ // Don't let the retry timer alone keep the process alive past stdin close.
296
+ t.unref?.();
297
+ _lockRetryTimer = t;
298
+ }
299
+ /** Exit non-zero with a loud, specific reason so Claude surfaces the MCP as
300
+ * errored (visible) instead of a silent connected-but-idle peer. */
301
+ function _failLoud(reason) {
302
+ logErr(`FATAL: ${reason}. Exiting so the failure is visible. cwd=${_cwd}. ` +
303
+ `Most likely you launched claude in the WRONG FOLDER, or this folder ` +
304
+ `already has a running remote-pi agent (a duplicate session). ` +
305
+ `Launch one agent per folder via "remote-pi claude" from the project dir.`);
306
+ process.exit(1);
307
+ }
308
+ // Exit cleanly when Claude Code disconnects. The MeshNode keeps a UDS socket
309
+ // (and, when leader, a relay WS) open, so without this the process would linger
310
+ // after Claude exits — orphaning the mesh peer (it keeps showing "online" with
311
+ // nothing attached). We leave the mesh, then exit. Triggered by the MCP
312
+ // transport closing or stdin hitting EOF (whichever the host does first).
313
+ function shutdown() {
314
+ if (_shuttingDown)
315
+ return;
316
+ _shuttingDown = true;
317
+ if (_lockRetryTimer) {
318
+ clearTimeout(_lockRetryTimer);
319
+ _lockRetryTimer = null;
320
+ }
321
+ try {
322
+ _lock?.release();
323
+ }
324
+ catch { /* OS frees the UDS lock on exit anyway */ }
325
+ void Promise.resolve(mesh.close())
326
+ .catch(() => { })
327
+ .finally(() => process.exit(0));
202
328
  }
203
329
  main().catch((err) => {
204
330
  process.stderr.write(`[remote-pi-mesh] fatal: ${String(err)}\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"mesh_server.js","sourceRoot":"","sources":["../../src/mcp/mesh_server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mesh_server.js","sourceRoot":"","sources":["../../src/mcp/mesh_server.ts"],"names":[],"mappings":"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"}
@@ -205,7 +205,7 @@ export type ServerMessage = {
205
205
  export type ActionName = "session_new" | "session_compact" | "model_set" | "thinking_set";
206
206
  /**
207
207
  * Plan/28 — Mirror of the SDK's `ThinkingLevel` (defined in
208
- * `@mariozechner/pi-agent-core/types`). Re-declared locally so the wire
208
+ * `@earendil-works/pi-agent-core/types`). Re-declared locally so the wire
209
209
  * protocol owns its own enum and we don't leak SDK-internal types onto
210
210
  * the app's network surface.
211
211
  *
@@ -8,26 +8,25 @@ import { type Envelope } from "./envelope.js";
8
8
  * Auto-suffix on name collision: when a peer registers a name already taken,
9
9
  * the broker assigns `<name>#N` and returns it in the register ack.
10
10
  *
11
- * ## ACK protocol (plan/25 Wave 0)
11
+ * ## ACK protocol (plan/25 Wave 0; reliable delivery per plan/34)
12
12
  *
13
13
  * For **unicast non-broker** envelopes the broker synchronously emits an ACK
14
- * envelope back to the sender after deciding delivery:
14
+ * envelope back to the sender once it has delivered:
15
15
  *
16
- * - target idle mark target busy, deliver envelope, ACK `received`
17
- * - target busy → drop envelope, ACK `busy`
16
+ * - target online → deliver envelope, ACK `received`
17
+ * - no such peersilent drop (sender times out)
18
18
  *
19
- * "Busy" tracking is driven by control envelopes `{type:"turn_state", busy}`
20
- * the peer wrappers send on `turn_start`/`turn_end`. The broker also flips a
21
- * peer to busy at the moment it delivers an envelope to it — this is the
22
- * "received = commitment" rule: delivery itself is the promise the peer will
23
- * handle the message in its upcoming turn. The wrapper's own turn_end clears
24
- * it again. Atomicity between busy-check and busy-set is guaranteed by Node's
25
- * single-threaded event loop the block in `_route` does no `await` between
26
- * the two.
19
+ * plan/34 removed the busy-drop: a message that arrives while the target is
20
+ * mid-turn is **always delivered**, never dropped. The Pi harness
21
+ * (`sendMessage(triggerTurn:true)`) enqueues mid-turn messages and processes
22
+ * them in the upcoming turn, so the broker needs no busy gate or mailbox.
23
+ * Consequently `busy` is no longer a possible ACK status for unicast new
24
+ * work the sender always gets `received`. (Turn-lifecycle / working
25
+ * indicators live in `index.ts` via room_meta over the relay, not here.)
27
26
  *
28
27
  * Broadcast/multicast/broker-addressed envelopes are not ACKed (no single
29
28
  * authoritative recipient or no semantic match). The audit log carries the
30
- * ACK status (`received | busy | dropped | none`) per envelope.
29
+ * ACK status (`received | denied | none`) per envelope.
31
30
  */
32
31
  export interface BrokerOptions {
33
32
  server: Server;
@@ -56,13 +55,11 @@ export interface RemoteRouter {
56
55
  listRemotePeers(): string[];
57
56
  }
58
57
  /** Local outcome of a cross-PC envelope injection. broker_remote uses this
59
- * to construct the ACK envelope it sends back via the relay. */
60
- export type RemoteInjectStatus = "received" | "busy" | "denied";
58
+ * to construct the ACK envelope it sends back via the relay. plan/34: `busy`
59
+ * is gone injection always delivers when the peer exists. */
60
+ export type RemoteInjectStatus = "received" | "denied";
61
61
  export declare class Broker {
62
62
  private readonly peers;
63
- /** Peers whose wrapper has signaled they are mid-turn, or to whom the
64
- * broker has just delivered an envelope (received = commitment). */
65
- private readonly busyPeers;
66
63
  private readonly auditPath?;
67
64
  private readonly onRouted?;
68
65
  private readonly server;
@@ -79,10 +76,9 @@ export declare class Broker {
79
76
  *
80
77
  * Returns the ACK status so the caller (broker_remote) can pack and
81
78
  * forward an ACK envelope back across the relay:
82
- * - `received` — target was idle (or `env.re != null`, see Wave 0
83
- * bypass rule), envelope delivered, broker marked target busy if
84
- * this is new work
85
- * - `busy` — target mid-turn, envelope dropped
79
+ * - `received` — target exists, envelope delivered (plan/34: always
80
+ * delivered when the peer is online the Pi harness enqueues mid-turn
81
+ * messages, so there is no busy-drop)
86
82
  * - `denied` — no such local peer (or write failed) — caller maps to
87
83
  * transport_error or denied ACK as it sees fit
88
84
  */
@@ -4,9 +4,6 @@ import { parse, serialize, uuidv7, EnvelopeError } from "./envelope.js";
4
4
  const BROKER_NAME = "broker";
5
5
  export class Broker {
6
6
  peers = new Map();
7
- /** Peers whose wrapper has signaled they are mid-turn, or to whom the
8
- * broker has just delivered an envelope (received = commitment). */
9
- busyPeers = new Set();
10
7
  auditPath;
11
8
  onRouted;
12
9
  server;
@@ -30,10 +27,9 @@ export class Broker {
30
27
  *
31
28
  * Returns the ACK status so the caller (broker_remote) can pack and
32
29
  * forward an ACK envelope back across the relay:
33
- * - `received` — target was idle (or `env.re != null`, see Wave 0
34
- * bypass rule), envelope delivered, broker marked target busy if
35
- * this is new work
36
- * - `busy` — target mid-turn, envelope dropped
30
+ * - `received` — target exists, envelope delivered (plan/34: always
31
+ * delivered when the peer is online the Pi harness enqueues mid-turn
32
+ * messages, so there is no busy-drop)
37
33
  * - `denied` — no such local peer (or write failed) — caller maps to
38
34
  * transport_error or denied ACK as it sees fit
39
35
  */
@@ -46,13 +42,6 @@ export class Broker {
46
42
  const peer = this.peers.get(targetName);
47
43
  if (!peer)
48
44
  return "denied";
49
- // Replies (re != null) bypass the busy gate (plan/25 Wave 0 rule —
50
- // replies resolve pending state, not new LLM turns).
51
- const isReply = env.re !== null;
52
- if (!isReply && this.busyPeers.has(targetName)) {
53
- void this._appendAudit(env, [], "busy", "relay");
54
- return "busy";
55
- }
56
45
  const line = serialize(env);
57
46
  try {
58
47
  peer.socket.write(line);
@@ -60,8 +49,6 @@ export class Broker {
60
49
  catch {
61
50
  return "denied";
62
51
  }
63
- if (!isReply)
64
- this.busyPeers.add(targetName);
65
52
  void this._appendAudit(env, [targetName], "received", "relay");
66
53
  this.onRouted?.(env, [targetName]);
67
54
  return "received";
@@ -74,7 +61,6 @@ export class Broker {
74
61
  for (const p of this.peers.values())
75
62
  p.socket.destroy();
76
63
  this.peers.clear();
77
- this.busyPeers.clear();
78
64
  await new Promise((resolve) => this.server.close(() => resolve()));
79
65
  }
80
66
  // ── connection lifecycle ──────────────────────────────────────────────────
@@ -158,7 +144,6 @@ export class Broker {
158
144
  if (!conn.name)
159
145
  return;
160
146
  this.peers.delete(conn.name);
161
- this.busyPeers.delete(conn.name);
162
147
  this._broadcastSystem({ type: "peer_left", name: conn.name }, conn.name);
163
148
  }
164
149
  // ── routing ───────────────────────────────────────────────────────────────
@@ -181,38 +166,19 @@ export class Broker {
181
166
  const delivered = [];
182
167
  const line = serialize(env);
183
168
  const isUnicast = typeof env.to === "string" && env.to !== "broadcast";
184
- // Replies (envelope.re != null) are answers the recipient was already
185
- // expecting they resolve pending state at the application layer rather
186
- // than starting a new LLM turn. Always deliverable; never trigger the
187
- // busy-on-delivery flip. New work (re == null) keeps the original
188
- // "received = commitment" semantics.
189
- const isReply = env.re !== null;
190
- // Synchronous block — Node's single-threaded loop gives atomicity between
191
- // busy-check and busy-mark (no await between them). Multiple deliveries in
192
- // the same `for` iteration may interleave with another peer's writes only
193
- // at await points; the busy-set transition itself is atomic.
169
+ // plan/34: reliable delivery always write to the target's socket. The
170
+ // Pi harness enqueues messages that arrive mid-turn, so there is no
171
+ // busy-drop and `busy` is no longer a possible ACK status. Unicast sends
172
+ // to an online peer always ACK `received`.
194
173
  let ackStatus = "none";
195
174
  for (const targetName of targets) {
196
175
  const peer = this.peers.get(targetName);
197
176
  if (!peer)
198
177
  continue; // unknown peer: silent drop (sender times out)
199
- if (isUnicast && !isReply && this.busyPeers.has(targetName)) {
200
- // New work for a busy peer → drop + ACK busy. Audit logged below
201
- // captures the rejection via `ackStatus = "busy"` + delivered=[].
202
- ackStatus = "busy";
203
- this._sendAckToSender(env, "busy", targetName);
204
- continue;
205
- }
206
178
  try {
207
179
  peer.socket.write(line);
208
180
  delivered.push(targetName);
209
181
  if (isUnicast) {
210
- if (!isReply) {
211
- // "received = commitment" for new work: peer now owns this
212
- // envelope and will process it in its upcoming turn. Wrapper's
213
- // turn_end clears the busy flag.
214
- this.busyPeers.add(targetName);
215
- }
216
182
  ackStatus = "received";
217
183
  this._sendAckToSender(env, "received", targetName);
218
184
  }
@@ -286,16 +252,9 @@ export class Broker {
286
252
  }
287
253
  return;
288
254
  }
289
- if (body.type === "turn_state" && typeof body.busy === "boolean") {
290
- // Peer wrapper notifies its own turn lifecycle. We use `env.from`
291
- // (forced to conn.name by `_handleLine`) so a peer can never set
292
- // someone else's busy state.
293
- if (body.busy)
294
- this.busyPeers.add(env.from);
295
- else
296
- this.busyPeers.delete(env.from);
297
- return;
298
- }
255
+ // plan/34: `turn_state` is no longer consumed the broker doesn't gate
256
+ // delivery on busy state. The Pi extension still publishes working state
257
+ // as room_meta over the relay (index.ts), independent of the broker.
299
258
  }
300
259
  _broadcastSystem(body, excludeName) {
301
260
  for (const [name, peer] of this.peers) {
@@ -1 +1 @@
1
- {"version":3,"file":"broker.js","sourceRoot":"","sources":["../../src/session/broker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAiB,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAqEvF,MAAM,WAAW,GAAG,QAAQ,CAAC;AA0B7B,MAAM,OAAO,MAAM;IACA,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IACrD;yEACqE;IACpD,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,SAAS,CAAU;IACnB,QAAQ,CAA6B;IACrC,MAAM,CAAS;IAChC,gFAAgF;IACxE,YAAY,GAAwB,IAAI,CAAC;IAEjD,YAAY,IAAmB;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,kEAAkE;IAClE,eAAe,CAAC,MAA2B;QACzC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;IAC7B,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,GAAa;QAC5B,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,KAAK,WAAW,IAAI,GAAG,CAAC,EAAE,KAAK,WAAW,EAAE,CAAC;YACnF,mDAAmD;YACnD,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,UAAU,GAAG,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO,QAAQ,CAAC;QAE3B,mEAAmE;QACnE,qDAAqD;QACrD,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC;QAChC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/C,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACjD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7C,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QACnC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,0DAA0D;IAC1D,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,6EAA6E;IAErE,iBAAiB,CAAC,MAAc;QACtC,MAAM,IAAI,GAAa,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAqC,CAAC,CAAC,CAAC;IAClE,CAAC;IAEO,OAAO,CAAC,IAAc,EAAE,KAAa;QAC3C,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC;QAClB,IAAI,EAAU,CAAC;QACf,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,IAAc,EAAE,IAAY;QACpD,kEAAkE;QAClE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QACD,mDAAmD;QACnD,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACH,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,aAAa;gBAAE,OAAO,CAAE,2BAA2B;YACpE,MAAM,CAAC,CAAC;QACV,CAAC;QACD,oEAAoE;QACpE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAEO,eAAe,CAAC,IAAc,EAAE,IAAY;QAClD,IAAI,GAAgB,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;YAC3C,IACE,CAAC,MAAM;gBACP,OAAO,MAAM,KAAK,QAAQ;gBACzB,MAA6B,CAAC,IAAI,KAAK,UAAU;gBAClD,OAAQ,MAA6B,CAAC,IAAI,KAAK,QAAQ,EACvD,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,GAAG,GAAG,MAAqB,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAE/B,MAAM,GAAG,GAAgB,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;QAC3E,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAE9B,yCAAyC;QACzC,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3E,CAAC;IAEO,WAAW,CAAC,SAAiB;QACnC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,GAAG,SAAS,IAAI,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAC;QACnD,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;IAC3D,CAAC;IAEO,QAAQ,CAAC,IAAc;QAC7B,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;IAED,6EAA6E;IAErE,KAAK,CAAC,MAAM,CAAC,GAAa;QAChC,gEAAgE;QAChE,IAAI,GAAG,CAAC,EAAE,KAAK,WAAW,EAAE,CAAC;YAC3B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,kEAAkE;QAClE,uEAAuE;QACvE,sEAAsE;QACtE,qEAAqE;QACrE,2BAA2B;QAC3B,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACpD,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBAAE,OAAO;QACtD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,KAAK,WAAW,CAAC;QACvE,sEAAsE;QACtE,yEAAyE;QACzE,sEAAsE;QACtE,kEAAkE;QAClE,qCAAqC;QACrC,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC;QAEhC,0EAA0E;QAC1E,2EAA2E;QAC3E,0EAA0E;QAC1E,6DAA6D;QAC7D,IAAI,SAAS,GAAuB,MAAM,CAAC;QAC3C,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxC,IAAI,CAAC,IAAI;gBAAE,SAAS,CAAE,+CAA+C;YAErE,IAAI,SAAS,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5D,iEAAiE;gBACjE,kEAAkE;gBAClE,SAAS,GAAG,MAAM,CAAC;gBACnB,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;gBAC/C,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACxB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC3B,IAAI,SAAS,EAAE,CAAC;oBACd,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,2DAA2D;wBAC3D,+DAA+D;wBAC/D,iCAAiC;wBACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBACjC,CAAC;oBACD,SAAS,GAAG,UAAU,CAAC;oBACvB,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,oEAAoE;YACtE,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACvE,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAClC,CAAC;IAEO,eAAe,CAAC,GAAa;QACnC,IAAI,GAAG,CAAC,EAAE,KAAK,WAAW,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,OAAO,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;QACD,sEAAsE;QACtE,mEAAmE;QACnE,yEAAyE;QACzE,oEAAoE;QACpE,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACK,gBAAgB,CAAC,GAAa,EAAE,MAAiB,EAAE,MAAc;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,OAAO,CAAE,4BAA4B;QAClD,MAAM,IAAI,GAAY,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACtD,MAAM,MAAM,GAAa;YACvB,IAAI,EAAE,WAAW;YACjB,EAAE,EAAE,GAAG,CAAC,IAAI;YACZ,EAAE,EAAE,MAAM,EAAE;YACZ,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI;SACL,CAAC;QACF,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC,CAAC,6CAA6C,CAAC,CAAC;IAC3D,CAAC;IAEO,oBAAoB,CAAC,GAAa;QACxC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAiE,CAAC;QACnF,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO;QAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAa;gBACtB,IAAI,EAAE,WAAW;gBACjB,EAAE,EAAE,GAAG,CAAC,IAAI;gBACZ,EAAE,EAAE,MAAM,EAAE;gBACZ,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAgB;aACxD,CAAC;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC;oBAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;YACtE,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACjE,kEAAkE;YAClE,iEAAiE;YACjE,6BAA6B;YAC7B,IAAI,IAAI,CAAC,IAAI;gBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;gBACvC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,IAAgB,EAAE,WAAmB;QAC5D,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,IAAI,KAAK,WAAW;gBAAE,SAAS;YACnC,MAAM,GAAG,GAAa;gBACpB,IAAI,EAAE,WAAW;gBACjB,EAAE,EAAE,IAAI;gBACR,EAAE,EAAE,MAAM,EAAE;gBACZ,EAAE,EAAE,IAAI;gBACR,IAAI;aACL,CAAC;YACF,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,GAAa,EACb,SAAmB,EACnB,SAA6B;IAC7B;;;;;OAKG;IACH,MAAuB,KAAK;QAE5B,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,SAAS;YACT,UAAU,EAAE,SAAS;YACrB,GAAG;SACJ,CAAC,GAAG,IAAI,CAAC;QACV,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC,CAAC,uBAAuB,CAAC,CAAC;IACrC,CAAC;CACF"}
1
+ {"version":3,"file":"broker.js","sourceRoot":"","sources":["../../src/session/broker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAiB,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAqEvF,MAAM,WAAW,GAAG,QAAQ,CAAC;AA0B7B,MAAM,OAAO,MAAM;IACA,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IACpC,SAAS,CAAU;IACnB,QAAQ,CAA6B;IACrC,MAAM,CAAS;IAChC,gFAAgF;IACxE,YAAY,GAAwB,IAAI,CAAC;IAEjD,YAAY,IAAmB;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,kEAAkE;IAClE,eAAe,CAAC,MAA2B;QACzC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;IAC7B,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,gBAAgB,CAAC,GAAa;QAC5B,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,KAAK,WAAW,IAAI,GAAG,CAAC,EAAE,KAAK,WAAW,EAAE,CAAC;YACnF,mDAAmD;YACnD,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,UAAU,GAAG,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO,QAAQ,CAAC;QAE3B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QACnC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,0DAA0D;IAC1D,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,6EAA6E;IAErE,iBAAiB,CAAC,MAAc;QACtC,MAAM,IAAI,GAAa,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAqC,CAAC,CAAC,CAAC;IAClE,CAAC;IAEO,OAAO,CAAC,IAAc,EAAE,KAAa;QAC3C,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC;QAClB,IAAI,EAAU,CAAC;QACf,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,IAAc,EAAE,IAAY;QACpD,kEAAkE;QAClE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QACD,mDAAmD;QACnD,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACH,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,aAAa;gBAAE,OAAO,CAAE,2BAA2B;YACpE,MAAM,CAAC,CAAC;QACV,CAAC;QACD,oEAAoE;QACpE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAEO,eAAe,CAAC,IAAc,EAAE,IAAY;QAClD,IAAI,GAAgB,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;YAC3C,IACE,CAAC,MAAM;gBACP,OAAO,MAAM,KAAK,QAAQ;gBACzB,MAA6B,CAAC,IAAI,KAAK,UAAU;gBAClD,OAAQ,MAA6B,CAAC,IAAI,KAAK,QAAQ,EACvD,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,GAAG,GAAG,MAAqB,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAE/B,MAAM,GAAG,GAAgB,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;QAC3E,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAE9B,yCAAyC;QACzC,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3E,CAAC;IAEO,WAAW,CAAC,SAAiB;QACnC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,GAAG,SAAS,IAAI,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAC;QACnD,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;IAC3D,CAAC;IAEO,QAAQ,CAAC,IAAc;QAC7B,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;IAED,6EAA6E;IAErE,KAAK,CAAC,MAAM,CAAC,GAAa;QAChC,gEAAgE;QAChE,IAAI,GAAG,CAAC,EAAE,KAAK,WAAW,EAAE,CAAC;YAC3B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,kEAAkE;QAClE,uEAAuE;QACvE,sEAAsE;QACtE,qEAAqE;QACrE,2BAA2B;QAC3B,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACpD,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBAAE,OAAO;QACtD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,KAAK,WAAW,CAAC;QAEvE,wEAAwE;QACxE,oEAAoE;QACpE,yEAAyE;QACzE,2CAA2C;QAC3C,IAAI,SAAS,GAAuB,MAAM,CAAC;QAC3C,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxC,IAAI,CAAC,IAAI;gBAAE,SAAS,CAAE,+CAA+C;YAErE,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACxB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC3B,IAAI,SAAS,EAAE,CAAC;oBACd,SAAS,GAAG,UAAU,CAAC;oBACvB,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,oEAAoE;YACtE,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACvE,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAClC,CAAC;IAEO,eAAe,CAAC,GAAa;QACnC,IAAI,GAAG,CAAC,EAAE,KAAK,WAAW,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,OAAO,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;QACD,sEAAsE;QACtE,mEAAmE;QACnE,yEAAyE;QACzE,oEAAoE;QACpE,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACK,gBAAgB,CAAC,GAAa,EAAE,MAAiB,EAAE,MAAc;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,OAAO,CAAE,4BAA4B;QAClD,MAAM,IAAI,GAAY,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACtD,MAAM,MAAM,GAAa;YACvB,IAAI,EAAE,WAAW;YACjB,EAAE,EAAE,GAAG,CAAC,IAAI;YACZ,EAAE,EAAE,MAAM,EAAE;YACZ,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI;SACL,CAAC;QACF,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC,CAAC,6CAA6C,CAAC,CAAC;IAC3D,CAAC;IAEO,oBAAoB,CAAC,GAAa;QACxC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAiD,CAAC;QACnE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO;QAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAa;gBACtB,IAAI,EAAE,WAAW;gBACjB,EAAE,EAAE,GAAG,CAAC,IAAI;gBACZ,EAAE,EAAE,MAAM,EAAE;gBACZ,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAgB;aACxD,CAAC;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC;oBAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;YACtE,CAAC;YACD,OAAO;QACT,CAAC;QACD,wEAAwE;QACxE,yEAAyE;QACzE,qEAAqE;IACvE,CAAC;IAEO,gBAAgB,CAAC,IAAgB,EAAE,WAAmB;QAC5D,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,IAAI,KAAK,WAAW;gBAAE,SAAS;YACnC,MAAM,GAAG,GAAa;gBACpB,IAAI,EAAE,WAAW;gBACjB,EAAE,EAAE,IAAI;gBACR,EAAE,EAAE,MAAM,EAAE;gBACZ,EAAE,EAAE,IAAI;gBACR,IAAI;aACL,CAAC;YACF,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,GAAa,EACb,SAAmB,EACnB,SAA6B;IAC7B;;;;;OAKG;IACH,MAAuB,KAAK;QAE5B,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,SAAS;YACT,UAAU,EAAE,SAAS;YACrB,GAAG;SACJ,CAAC,GAAG,IAAI,CAAC;QACV,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC,CAAC,uBAAuB,CAAC,CAAC;IACrC,CAAC;CACF"}
@@ -23,8 +23,9 @@ import { envelope, uuidv7 } from "./envelope.js";
23
23
  * `broker.injectFromRemote`. Build a one-way ACK envelope back via
24
24
  * the relay so the cross-PC sender's `sendWithAck` resolves.
25
25
  *
26
- * The replies-bypass-busy rule from Wave 0 is honoured at injection time
27
- * by the broker itself; `broker_remote` does not duplicate the check.
26
+ * plan/34: cross-PC injection always delivers when the local peer exists
27
+ * (no busy-drop); `broker_remote` just forwards the broker's `received |
28
+ * denied` status in the ACK it sends back.
28
29
  *
29
30
  * Siblings (`Map<pc_label, pc_pubkey>`) are seeded externally by the
30
31
  * extension at bootstrap (typically from `mesh_versions` of every paired
@@ -291,9 +292,8 @@ export class BrokerRemote {
291
292
  // ── control: ack ───────────────────────────────────────────────────────
292
293
  // ACK envelopes from a remote wrapper are addressed to our local
293
294
  // sender. Strip prefix from `to` and inject so the sender's
294
- // `sendWithAck` pending resolves. ACK envelopes carry `re` (always)
295
- // and bypass busy via the `isReply` rule in `injectFromRemote`.
296
- // (No special-casing needed — generic injection below covers them.)
295
+ // `sendWithAck` pending resolves. (No special-casing needed generic
296
+ // injection below covers them; plan/34 made injection always-deliver.)
297
297
  // ── regular envelope: strip `to` prefix and inject ─────────────────────
298
298
  if (typeof env.to !== "string") {
299
299
  this.log("[broker_remote] drop: cross-PC envelope must be unicast string");