teamshare-bridge 0.21.84 → 0.21.85

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.
Files changed (80) hide show
  1. package/dist/bridge/daemon-inbox.js +46 -0
  2. package/dist/bridge/daemon-inbox.js.map +1 -1
  3. package/dist/bridge/daemon-instance.d.ts +77 -0
  4. package/dist/bridge/daemon-instance.js +319 -0
  5. package/dist/bridge/daemon-instance.js.map +1 -0
  6. package/dist/bridge/daemon-support.d.ts +15 -0
  7. package/dist/bridge/daemon-support.js +21 -32
  8. package/dist/bridge/daemon-support.js.map +1 -1
  9. package/dist/bridge/daemon.js +214 -109
  10. package/dist/bridge/daemon.js.map +1 -1
  11. package/dist/bridge/local-server.js +17 -1
  12. package/dist/bridge/local-server.js.map +1 -1
  13. package/dist/bridge/service.d.ts +11 -1
  14. package/dist/bridge/service.js +33 -55
  15. package/dist/bridge/service.js.map +1 -1
  16. package/dist/bridge/wake-handler.js +244 -98
  17. package/dist/bridge/wake-handler.js.map +1 -1
  18. package/dist/bridge/wake-lanes.d.ts +125 -0
  19. package/dist/bridge/wake-lanes.js +220 -0
  20. package/dist/bridge/wake-lanes.js.map +1 -0
  21. package/dist/bridge/wake-outbox.d.ts +69 -0
  22. package/dist/bridge/wake-outbox.js +243 -0
  23. package/dist/bridge/wake-outbox.js.map +1 -0
  24. package/dist/cli/commands/board.js +8 -3
  25. package/dist/cli/commands/board.js.map +1 -1
  26. package/dist/cli/commands/cleanup.js +22 -4
  27. package/dist/cli/commands/cleanup.js.map +1 -1
  28. package/dist/cli/commands/doc.js +11 -1
  29. package/dist/cli/commands/doc.js.map +1 -1
  30. package/dist/cli/commands/plan.js +13 -6
  31. package/dist/cli/commands/plan.js.map +1 -1
  32. package/dist/cli/commands/run.js +38 -3
  33. package/dist/cli/commands/run.js.map +1 -1
  34. package/dist/lib/api-tasks.d.ts +19 -0
  35. package/dist/lib/api-tasks.js +18 -0
  36. package/dist/lib/api-tasks.js.map +1 -1
  37. package/dist/lib/auto-run-state.d.ts +10 -2
  38. package/dist/lib/auto-run-state.js +43 -17
  39. package/dist/lib/auto-run-state.js.map +1 -1
  40. package/dist/lib/bridge-notice.d.ts +55 -0
  41. package/dist/lib/bridge-notice.js +124 -0
  42. package/dist/lib/bridge-notice.js.map +1 -0
  43. package/dist/lib/cache-cleaner.js +101 -18
  44. package/dist/lib/cache-cleaner.js.map +1 -1
  45. package/dist/lib/git/git-discovery.js +17 -3
  46. package/dist/lib/git/git-discovery.js.map +1 -1
  47. package/dist/lib/git/git-prepare.js +15 -2
  48. package/dist/lib/git/git-prepare.js.map +1 -1
  49. package/dist/lib/git/git-presence.d.ts +31 -3
  50. package/dist/lib/git/git-presence.js +260 -41
  51. package/dist/lib/git/git-presence.js.map +1 -1
  52. package/dist/lib/git/git-runner.d.ts +19 -0
  53. package/dist/lib/git/git-runner.js +48 -6
  54. package/dist/lib/git/git-runner.js.map +1 -1
  55. package/dist/lib/lock.d.ts +22 -0
  56. package/dist/lib/lock.js +41 -3
  57. package/dist/lib/lock.js.map +1 -1
  58. package/dist/lib/orchestrator/worktree.js +11 -1
  59. package/dist/lib/orchestrator/worktree.js.map +1 -1
  60. package/dist/lib/wake-claim.d.ts +44 -0
  61. package/dist/lib/wake-claim.js +237 -0
  62. package/dist/lib/wake-claim.js.map +1 -0
  63. package/dist/lib/wake-state.js +26 -1
  64. package/dist/lib/wake-state.js.map +1 -1
  65. package/dist/lib/workspace/mirror-lease.d.ts +72 -0
  66. package/dist/lib/workspace/mirror-lease.js +61 -6
  67. package/dist/lib/workspace/mirror-lease.js.map +1 -1
  68. package/dist/lib/workspace/mirror.d.ts +88 -0
  69. package/dist/lib/workspace/mirror.js +208 -14
  70. package/dist/lib/workspace/mirror.js.map +1 -1
  71. package/dist/lib/workspace/presence.d.ts +11 -2
  72. package/dist/lib/workspace/presence.js +52 -7
  73. package/dist/lib/workspace/presence.js.map +1 -1
  74. package/dist/lib/workspace/stop-notice.d.ts +28 -0
  75. package/dist/lib/workspace/stop-notice.js +135 -0
  76. package/dist/lib/workspace/stop-notice.js.map +1 -0
  77. package/dist/lib/workspace/stop-save.d.ts +20 -0
  78. package/dist/lib/workspace/stop-save.js +33 -2
  79. package/dist/lib/workspace/stop-save.js.map +1 -1
  80. package/package.json +1 -1
@@ -15,6 +15,7 @@ const config_1 = require("../lib/config");
15
15
  const lock_1 = require("../lib/lock");
16
16
  const wake_state_1 = require("../lib/wake-state");
17
17
  const auto_run_state_1 = require("../lib/auto-run-state");
18
+ const wake_claim_1 = require("../lib/wake-claim");
18
19
  const daemon_support_1 = require("./daemon-support");
19
20
  const wake_routing_1 = require("./wake-routing");
20
21
  const wake_handler_1 = require("./wake-handler");
@@ -191,6 +192,30 @@ async function pollInboxMentions(deps) {
191
192
  }
192
193
  if (gate.nextAt > Date.now())
193
194
  continue;
195
+ // ── Cross-daemon admission latch ──────────────────────────────────────
196
+ // Everything above this line is PER-PROCESS: `recentSpawns` is a
197
+ // module-level Map, and `agentLock` is read once per poll - but the CLI
198
+ // writes that lock seconds later (fetch settings, fetch the task, build
199
+ // the mirror first). With more than one daemon polling the same inbox in
200
+ // the same window, every daemon sees "free" and every daemon sweeps the
201
+ // same task; the `agentLock` check above cannot have caught it.
202
+ //
203
+ // `tryClaimWake` is a `wx` file, so exactly one daemon wins regardless of
204
+ // process count. It is taken HERE, after the backoff gates, so a claim is
205
+ // never held across a `continue` that was going to skip the task anyway.
206
+ const admission = (0, wake_claim_1.tryClaimWake)(agent.agentId, taskId, 'task.assigned', {
207
+ ttlMs: Math.max(wake_routing_1.TASK_WAKE_COOLDOWN_MS * 4, 60_000),
208
+ });
209
+ if (!admission.claimed) {
210
+ const key = `claim:${agent.agentId}:${taskId}`;
211
+ if (!gateWarned.has(key)) {
212
+ gateWarned.add(key);
213
+ (0, daemon_support_1.log)(`agent ${agent.agentId}: stranded sweep skipped task ${taskId} - already admitted by ` +
214
+ `pid ${admission.heldBy?.pid ?? 'unknown'} (${admission.heldBy?.wakeType ?? 'unknown wake'})`);
215
+ }
216
+ continue;
217
+ }
218
+ gateWarned.delete(`claim:${agent.agentId}:${taskId}`);
194
219
  const agentApi = api_1.TeamshareApi.forAgent(apiBase, agent);
195
220
  // Claim the orchestrator task (if any) so its status transitions
196
221
  // queued → running. The backend's polling then handles the rest
@@ -212,6 +237,10 @@ async function pollInboxMentions(deps) {
212
237
  }
213
238
  if (claim && typeof claim === "object" && "blocked" in claim) {
214
239
  (0, daemon_support_1.log)(`agent ${agent.agentId}: orchestrator claim for ${taskId} refused (${claim.blocked}) - no wake, retry next cycle`);
240
+ // The wake never happened, so admission must be given back - otherwise
241
+ // this task is unrunnable until the claim TTL lapses, which is a long
242
+ // stall for something that is only waiting on a sibling group.
243
+ (0, wake_claim_1.releaseWake)(agent.agentId, taskId);
215
244
  continue;
216
245
  }
217
246
  (0, daemon_support_1.log)(`agent ${agent.agentId}: stranded-task sweep wake ${taskId} (${String(task.title ?? '')})`);
@@ -226,6 +255,10 @@ async function pollInboxMentions(deps) {
226
255
  sweepOutcome !== 'deferred' &&
227
256
  sweepOutcome !== 'blocked') {
228
257
  (0, wake_state_1.recordProcessed)(agent.agentId, 'task.assigned', taskId);
258
+ // The sweep is done with this task, so admission is released and the
259
+ // next legitimate wake (a retry, a resume, a new comment) can be
260
+ // admitted immediately instead of waiting out the TTL.
261
+ (0, wake_claim_1.releaseWake)(agent.agentId, taskId);
229
262
  }
230
263
  }
231
264
  }
@@ -297,6 +330,18 @@ function resyncInbox(deps) {
297
330
  continue;
298
331
  }
299
332
  (0, daemon_support_1.log)(`agent ${agent.agentId}: re-sync wake task=${taskId} (${String(task.title ?? '')})`);
333
+ // Same cross-daemon latch as the stranded sweep. On a reconnect EVERY
334
+ // daemon re-syncs at once, so without this the same task is woken once
335
+ // per daemon - which is how a reconnect turned into N concurrent runs
336
+ // of one task on a machine with N daemons.
337
+ const resyncAdmission = (0, wake_claim_1.tryClaimWake)(agent.agentId, taskId, 'task.assigned', {
338
+ ttlMs: Math.max(wake_routing_1.TASK_WAKE_COOLDOWN_MS * 4, 60_000),
339
+ });
340
+ if (!resyncAdmission.claimed) {
341
+ (0, daemon_support_1.log)(`agent ${agent.agentId}: re-sync skip task=${taskId} - already admitted by ` +
342
+ `pid ${resyncAdmission.heldBy?.pid ?? 'unknown'}`);
343
+ continue;
344
+ }
300
345
  const resyncTaskOutcome = await (0, wake_handler_1.handleWake)(api_1.TeamshareApi.forAgent(apiBase, agent), agent.agentId, agent.apiKey, {
301
346
  type: 'task.assigned',
302
347
  taskId,
@@ -316,6 +361,7 @@ function resyncInbox(deps) {
316
361
  resyncTaskOutcome !== 'deferred' &&
317
362
  resyncTaskOutcome !== 'blocked') {
318
363
  (0, wake_state_1.recordProcessed)(agent.agentId, 'task.assigned', taskId);
364
+ (0, wake_claim_1.releaseWake)(agent.agentId, taskId);
319
365
  }
320
366
  totalTasks++;
321
367
  }
@@ -1 +1 @@
1
- {"version":3,"file":"daemon-inbox.js","sourceRoot":"","sources":["../../src/bridge/daemon-inbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon-inbox.js","sourceRoot":"","sources":["../../src/bridge/daemon-inbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ export interface DaemonInstance {
2
+ pid: number;
3
+ /** The port the daemon actually BOUND (may differ from config.port). */
4
+ port: number;
5
+ version: string;
6
+ startedAt: string;
7
+ /** Which mechanism produced this answer - for honest diagnostics. */
8
+ source: 'lock' | 'port-scan';
9
+ }
10
+ /** True when `pid` names a live process. EPERM means alive but not ours. */
11
+ export declare function pidAlive(pid: number): boolean;
12
+ /**
13
+ * The live daemon according to `daemon.lock`, or null.
14
+ *
15
+ * A lock whose pid is dead, or which is older than LOCK_STALE_MS, is treated
16
+ * as abandoned and the file is cleared. This is the ONLY path that decides
17
+ * synchronously, which is what lets the watchdog tick stay sync.
18
+ */
19
+ export declare function readLiveDaemonLock(): DaemonInstance | null;
20
+ /**
21
+ * Claim daemon ownership for this process. `wx` makes it genuinely exclusive:
22
+ * exactly one caller can win, and a loser never overwrites the winner.
23
+ *
24
+ * Returns false when a LIVE daemon already owns this machine - the caller
25
+ * must then exit "already running" rather than bind a fallback port.
26
+ */
27
+ export declare function acquireDaemonLock(): boolean;
28
+ /**
29
+ * Record the bound port once `startProbeServer` returns. The lock is written
30
+ * as pid+port+version so `status`/`stop`/`doctor` never need the port scan.
31
+ */
32
+ export declare function updateDaemonLock(port: number, version: string): void;
33
+ /**
34
+ * Adopt a daemon we found by scanning, so the synchronous lock path works
35
+ * again. Never overwrites a lock held by a different live pid.
36
+ */
37
+ export declare function adoptDaemonLock(found: DaemonInstance): void;
38
+ /**
39
+ * Release the lock, but ONLY when this process owns it.
40
+ *
41
+ * The `!current` shortcut that used to live in the pid-file version is
42
+ * deliberately absent: an unreadable or empty lock is not evidence that we
43
+ * hold it, and treating it as such let every transient daemon delete a live
44
+ * daemon's file on `process.on('exit')`.
45
+ */
46
+ export declare function clearDaemonLock(): void;
47
+ /** Clear the legacy pid file, same ownership rule. */
48
+ export declare function clearOwnPidFile(): void;
49
+ /**
50
+ * Ask whoever is on `port` whether they are a TeamShare bridge.
51
+ *
52
+ * This is the tie-breaker between case (a) "another bridge" and case (b)
53
+ * "a foreign squatter". A short timeout is deliberate: it runs on the
54
+ * bind path, where a slow answer must not stall daemon startup.
55
+ */
56
+ export declare function probeBridgePort(port: number, timeoutMs?: number): Promise<{
57
+ version: string;
58
+ } | null>;
59
+ /**
60
+ * The discovery fallback: probe every published candidate port for a live
61
+ * bridge. Used when `daemon.lock` is missing or unreadable - which is the
62
+ * exact state a crashed or externally-cleaned install lands in.
63
+ */
64
+ export declare function scanForBridge(): Promise<DaemonInstance | null>;
65
+ /**
66
+ * The single answer to "is a daemon running?".
67
+ *
68
+ * Lock first (authoritative, synchronous, carries the pid). Only when it is
69
+ * absent or abandoned do we pay for the port scan, and whatever that finds is
70
+ * ADOPTED so the next call is free.
71
+ *
72
+ * A port-scan hit has `pid: 0` because `/ping` does not expose one - callers
73
+ * that need to signal the process must fall back to the legacy pid file.
74
+ */
75
+ export declare function resolveDaemonInstance(): Promise<DaemonInstance | null>;
76
+ /** The live daemon, sync only. The watchdog uses this so its tick stays sync. */
77
+ export declare function resolveDaemonInstanceSync(): DaemonInstance | null;
@@ -0,0 +1,319 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pidAlive = pidAlive;
4
+ exports.readLiveDaemonLock = readLiveDaemonLock;
5
+ exports.acquireDaemonLock = acquireDaemonLock;
6
+ exports.updateDaemonLock = updateDaemonLock;
7
+ exports.adoptDaemonLock = adoptDaemonLock;
8
+ exports.clearDaemonLock = clearDaemonLock;
9
+ exports.clearOwnPidFile = clearOwnPidFile;
10
+ exports.probeBridgePort = probeBridgePort;
11
+ exports.scanForBridge = scanForBridge;
12
+ exports.resolveDaemonInstance = resolveDaemonInstance;
13
+ exports.resolveDaemonInstanceSync = resolveDaemonInstanceSync;
14
+ /**
15
+ * daemon-instance: the ONE place that answers "is a bridge daemon already
16
+ * running on this machine, and which process is it?".
17
+ *
18
+ * WHY THIS FILE EXISTS
19
+ * --------------------
20
+ * That question used to be answered in SEVEN places that disagreed:
21
+ * `detectRunningDaemon` (7 ports), `runningPid` (pid file), `daemonHealthy`
22
+ * (runtime.json + config port, only 2 of 7), `verifyRunningPid`, three
23
+ * `readRuntimeFile` call sites, and the boot guard itself. Because they
24
+ * disagreed, six daemons could coexist on one machine: `local-server.ts`
25
+ * treated `EADDRINUSE` as "try the next candidate port", so the seven
26
+ * candidate ports became a CAPACITY of seven daemons rather than a
27
+ * discovery range. The watchdog could not see them (it probed 2 of 7 ports),
28
+ * so it logged `daemon down (pid none) - starting` every 30 seconds forever.
29
+ *
30
+ * With N daemons, one hub wake fans out N times, every dedupe guard is
31
+ * per-process memory, and N agents work the same linked folder.
32
+ *
33
+ * THE MODEL
34
+ * ---------
35
+ * `BRIDGE_CANDIDATE_PORTS` stays exactly as it is - a published discovery
36
+ * range so a web page with no backend can find a localhost server whose port
37
+ * it cannot know. That is legitimate and load-bearing.
38
+ *
39
+ * What is removed is the conflation of DISCOVERY (which ports should I probe?)
40
+ * with CAPACITY (what do I do when one is busy?). `EADDRINUSE` means two
41
+ * different things:
42
+ *
43
+ * (a) another BRIDGE holds the port -> we must NOT start
44
+ * (b) a FOREIGN program squats it -> we SHOULD fall through
45
+ *
46
+ * The old loop could not tell them apart and always assumed (b). Now:
47
+ *
48
+ * 1. `daemon.lock` is claimed with `wx` BEFORE any bind. If a live daemon
49
+ * holds it, we exit "already running" no matter which ports are free.
50
+ * Case (a) is now fatal.
51
+ * 2. On `EADDRINUSE`, `probeBridgePort` asks the occupant who it is. Only a
52
+ * real bridge is fatal; anything else still falls through silently, so
53
+ * the original resilience goal ("a busy preferred port can never take
54
+ * the whole daemon down") is preserved exactly.
55
+ *
56
+ * `daemon.lock` is authoritative and carries the pid, so `status`, `stop`,
57
+ * `restart` and `doctor` stop re-deriving identity. The port scan is the
58
+ * RECOVERY path for a lost lock file, and it ADOPTS what it finds by writing
59
+ * the lock back, so the synchronous path works from then on.
60
+ *
61
+ * The lock is taken with direct fs calls, never through a PATH shim - the
62
+ * same self-deadlock rule that `git-presence.ts` follows with
63
+ * `envWithoutShims`. An arbiter-mediated singleton would deadlock itself.
64
+ */
65
+ const node_fs_1 = require("node:fs");
66
+ const node_os_1 = require("node:os");
67
+ const node_path_1 = require("node:path");
68
+ const config_1 = require("../lib/config");
69
+ const STATE_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), '.teamshare');
70
+ const LOCK_PATH = (0, node_path_1.join)(STATE_DIR, 'daemon.lock');
71
+ const PID_PATH = (0, node_path_1.join)(STATE_DIR, 'daemon.pid');
72
+ /** How long a lock file may sit unread before we treat it as abandoned. */
73
+ const LOCK_STALE_MS = 24 * 60 * 60 * 1000;
74
+ /** True when `pid` names a live process. EPERM means alive but not ours. */
75
+ function pidAlive(pid) {
76
+ if (!Number.isInteger(pid) || pid <= 0)
77
+ return false;
78
+ try {
79
+ process.kill(pid, 0);
80
+ return true;
81
+ }
82
+ catch (err) {
83
+ return err.code === 'EPERM';
84
+ }
85
+ }
86
+ /** True when a lock/startedAt pair is old enough to be considered abandoned. */
87
+ function isExpired(startedAt) {
88
+ if (!startedAt)
89
+ return true;
90
+ const age = Date.now() - new Date(startedAt).getTime();
91
+ return !Number.isFinite(age) || age > LOCK_STALE_MS;
92
+ }
93
+ function readLockFile() {
94
+ try {
95
+ const raw = JSON.parse((0, node_fs_1.readFileSync)(LOCK_PATH, 'utf8'));
96
+ if (!raw || typeof raw.pid !== 'number' || typeof raw.port !== 'number')
97
+ return null;
98
+ return {
99
+ pid: raw.pid,
100
+ port: raw.port,
101
+ version: typeof raw.version === 'string' ? raw.version : 'unknown',
102
+ startedAt: typeof raw.startedAt === 'string' ? raw.startedAt : '',
103
+ source: 'lock',
104
+ };
105
+ }
106
+ catch {
107
+ return null;
108
+ }
109
+ }
110
+ /**
111
+ * The live daemon according to `daemon.lock`, or null.
112
+ *
113
+ * A lock whose pid is dead, or which is older than LOCK_STALE_MS, is treated
114
+ * as abandoned and the file is cleared. This is the ONLY path that decides
115
+ * synchronously, which is what lets the watchdog tick stay sync.
116
+ */
117
+ function readLiveDaemonLock() {
118
+ const lock = readLockFile();
119
+ if (!lock)
120
+ return null;
121
+ if (!pidAlive(lock.pid) || isExpired(lock.startedAt)) {
122
+ clearDaemonLock();
123
+ return null;
124
+ }
125
+ return lock;
126
+ }
127
+ /**
128
+ * Claim daemon ownership for this process. `wx` makes it genuinely exclusive:
129
+ * exactly one caller can win, and a loser never overwrites the winner.
130
+ *
131
+ * Returns false when a LIVE daemon already owns this machine - the caller
132
+ * must then exit "already running" rather than bind a fallback port.
133
+ */
134
+ function acquireDaemonLock() {
135
+ try {
136
+ (0, node_fs_1.mkdirSync)(STATE_DIR, { recursive: true });
137
+ // A dead holder must not block a legitimate restart.
138
+ const existing = readLockFile();
139
+ if (existing && pidAlive(existing.pid) && !isExpired(existing.startedAt))
140
+ return false;
141
+ clearDaemonLock();
142
+ (0, node_fs_1.writeFileSync)(LOCK_PATH, JSON.stringify({ pid: process.pid, port: 0, version: '', startedAt: new Date().toISOString() }, null, 2), { flag: 'wx' });
143
+ return true;
144
+ }
145
+ catch {
146
+ // EEXIST between our read and our write, or an unwritable home. Treat a
147
+ // failure as "not owner" so the caller falls back to the port scan rather
148
+ // than assuming exclusivity it does not have.
149
+ return false;
150
+ }
151
+ }
152
+ /**
153
+ * Record the bound port once `startProbeServer` returns. The lock is written
154
+ * as pid+port+version so `status`/`stop`/`doctor` never need the port scan.
155
+ */
156
+ function updateDaemonLock(port, version) {
157
+ try {
158
+ const current = readLockFile();
159
+ // Never stamp over another process's lock.
160
+ if (current && current.pid !== process.pid)
161
+ return;
162
+ const payload = {
163
+ pid: process.pid,
164
+ port,
165
+ version,
166
+ startedAt: current?.startedAt || new Date().toISOString(),
167
+ source: 'lock',
168
+ };
169
+ atomicWrite(LOCK_PATH, JSON.stringify(payload, null, 2));
170
+ atomicWrite(PID_PATH, String(process.pid));
171
+ }
172
+ catch {
173
+ /* best-effort */
174
+ }
175
+ }
176
+ /**
177
+ * Adopt a daemon we found by scanning, so the synchronous lock path works
178
+ * again. Never overwrites a lock held by a different live pid.
179
+ */
180
+ function adoptDaemonLock(found) {
181
+ try {
182
+ const current = readLockFile();
183
+ if (current && current.pid !== found.pid && pidAlive(current.pid))
184
+ return;
185
+ atomicWrite(LOCK_PATH, JSON.stringify({ pid: found.pid, port: found.port, version: found.version, startedAt: found.startedAt, source: 'lock' }, null, 2));
186
+ atomicWrite(PID_PATH, String(found.pid));
187
+ }
188
+ catch {
189
+ /* best-effort */
190
+ }
191
+ }
192
+ /**
193
+ * Release the lock, but ONLY when this process owns it.
194
+ *
195
+ * The `!current` shortcut that used to live in the pid-file version is
196
+ * deliberately absent: an unreadable or empty lock is not evidence that we
197
+ * hold it, and treating it as such let every transient daemon delete a live
198
+ * daemon's file on `process.on('exit')`.
199
+ */
200
+ function clearDaemonLock() {
201
+ try {
202
+ const current = readLockFile();
203
+ if (current && current.pid !== process.pid)
204
+ return;
205
+ (0, node_fs_1.rmSync)(LOCK_PATH, { force: true });
206
+ }
207
+ catch {
208
+ /* best-effort */
209
+ }
210
+ }
211
+ /** Clear the legacy pid file, same ownership rule. */
212
+ function clearOwnPidFile() {
213
+ try {
214
+ const raw = (0, node_fs_1.readFileSync)(PID_PATH, 'utf8').trim();
215
+ const pid = Number(raw);
216
+ if (Number.isInteger(pid) && pid !== process.pid)
217
+ return;
218
+ (0, node_fs_1.rmSync)(PID_PATH, { force: true });
219
+ }
220
+ catch {
221
+ /* best-effort */
222
+ }
223
+ }
224
+ /**
225
+ * Ask whoever is on `port` whether they are a TeamShare bridge.
226
+ *
227
+ * This is the tie-breaker between case (a) "another bridge" and case (b)
228
+ * "a foreign squatter". A short timeout is deliberate: it runs on the
229
+ * bind path, where a slow answer must not stall daemon startup.
230
+ */
231
+ async function probeBridgePort(port, timeoutMs = 800) {
232
+ try {
233
+ const res = await fetch(`http://127.0.0.1:${port}/ping`, { signal: AbortSignal.timeout(timeoutMs) });
234
+ if (!res.ok)
235
+ return null;
236
+ const body = (await res.json());
237
+ if (body?.ok === true)
238
+ return { version: typeof body.version === 'string' ? body.version : 'unknown' };
239
+ return null;
240
+ }
241
+ catch {
242
+ return null;
243
+ }
244
+ }
245
+ /**
246
+ * The discovery fallback: probe every published candidate port for a live
247
+ * bridge. Used when `daemon.lock` is missing or unreadable - which is the
248
+ * exact state a crashed or externally-cleaned install lands in.
249
+ */
250
+ async function scanForBridge() {
251
+ for (const port of config_1.BRIDGE_CANDIDATE_PORTS) {
252
+ const hit = await probeBridgePort(port);
253
+ if (hit)
254
+ return { pid: 0, port, version: hit.version, startedAt: '', source: 'port-scan' };
255
+ }
256
+ return null;
257
+ }
258
+ /**
259
+ * The single answer to "is a daemon running?".
260
+ *
261
+ * Lock first (authoritative, synchronous, carries the pid). Only when it is
262
+ * absent or abandoned do we pay for the port scan, and whatever that finds is
263
+ * ADOPTED so the next call is free.
264
+ *
265
+ * A port-scan hit has `pid: 0` because `/ping` does not expose one - callers
266
+ * that need to signal the process must fall back to the legacy pid file.
267
+ */
268
+ async function resolveDaemonInstance() {
269
+ const locked = readLiveDaemonLock();
270
+ if (locked)
271
+ return locked;
272
+ const found = await scanForBridge();
273
+ if (!found)
274
+ return null;
275
+ const legacy = legacyPid();
276
+ const instance = {
277
+ ...found,
278
+ pid: legacy && pidAlive(legacy) ? legacy : found.pid,
279
+ };
280
+ if (instance.pid > 0)
281
+ adoptDaemonLock(instance);
282
+ return instance;
283
+ }
284
+ /** The live daemon, sync only. The watchdog uses this so its tick stays sync. */
285
+ function resolveDaemonInstanceSync() {
286
+ return readLiveDaemonLock();
287
+ }
288
+ /** The pid file's contents when they name a live process, else null. */
289
+ function legacyPid() {
290
+ try {
291
+ const pid = Number((0, node_fs_1.readFileSync)(PID_PATH, 'utf8').trim());
292
+ return pidAlive(pid) ? pid : null;
293
+ }
294
+ catch {
295
+ return null;
296
+ }
297
+ }
298
+ /**
299
+ * Write via temp + rename so a reader never observes a truncated file. The
300
+ * old `writeFileSync` straight onto the target is why `daemon.pid` could be
301
+ * read as EMPTY mid-write and be mistaken for "no daemon".
302
+ */
303
+ function atomicWrite(target, contents) {
304
+ const tmp = `${target}.${process.pid}.tmp`;
305
+ (0, node_fs_1.writeFileSync)(tmp, contents, 'utf8');
306
+ try {
307
+ (0, node_fs_1.renameSync)(tmp, target);
308
+ }
309
+ catch {
310
+ try {
311
+ (0, node_fs_1.rmSync)(tmp, { force: true });
312
+ }
313
+ catch {
314
+ /* best-effort */
315
+ }
316
+ throw new Error(`could not publish ${target}`);
317
+ }
318
+ }
319
+ //# sourceMappingURL=daemon-instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-instance.js","sourceRoot":"","sources":["../../src/bridge/daemon-instance.ts"],"names":[],"mappings":";;AA0EA,4BAQC;AAgCD,gDAQC;AASD,8CAmBC;AAMD,4CAiBC;AAMD,0CAgBC;AAUD,0CAQC;AAGD,0CASC;AASD,0CAUC;AAOD,sCAMC;AAYD,sDAYC;AAGD,8DAEC;AA9RD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,qCAAqF;AACrF,qCAAkC;AAClC,yCAAiC;AACjC,0CAAuD;AAEvD,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,IAAA,iBAAO,GAAE,EAAE,YAAY,CAAC,CAAC;AAChD,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACjD,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAE/C,2EAA2E;AAC3E,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAY1C,4EAA4E;AAC5E,SAAgB,QAAQ,CAAC,GAAW;IAClC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAQ,GAA6B,CAAC,IAAI,KAAK,OAAO,CAAC;IACzD,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,SAAS,SAAS,CAAC,SAA6B;IAC9C,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,aAAa,CAAC;AACtD,CAAC;AAED,SAAS,YAAY;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,SAAS,EAAE,MAAM,CAAC,CAA4B,CAAC;QACnF,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACrF,OAAO;YACL,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YAClE,SAAS,EAAE,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;YACjE,MAAM,EAAE,MAAM;SACf,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB;IAChC,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,eAAe,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,iBAAiB;IAC/B,IAAI,CAAC;QACH,IAAA,mBAAS,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,qDAAqD;QACrD,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,KAAK,CAAC;QACvF,eAAe,EAAE,CAAC;QAClB,IAAA,uBAAa,EACX,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EACxG,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;QACxE,0EAA0E;QAC1E,8CAA8C;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,IAAY,EAAE,OAAe;IAC5D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;QAC/B,2CAA2C;QAC3C,IAAI,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG;YAAE,OAAO;QACnD,MAAM,OAAO,GAAmB;YAC9B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,IAAI;YACJ,OAAO;YACP,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACzD,MAAM,EAAE,MAAM;SACf,CAAC;QACF,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACzD,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAAC,KAAqB;IACnD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;QAC/B,IAAI,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO;QAC1E,WAAW,CACT,SAAS,EACT,IAAI,CAAC,SAAS,CACZ,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,EACxG,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACF,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,eAAe;IAC7B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;QAC/B,IAAI,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG;YAAE,OAAO;QACnD,IAAA,gBAAM,EAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;AACH,CAAC;AAED,sDAAsD;AACtD,SAAgB,eAAe;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,sBAAY,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,OAAO,CAAC,GAAG;YAAE,OAAO;QACzD,IAAA,gBAAM,EAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,SAAS,GAAG,GAAG;IACjE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACrG,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAuC,CAAC;QACtE,IAAI,IAAI,EAAE,EAAE,KAAK,IAAI;YAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QACvG,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,aAAa;IACjC,KAAK,MAAM,IAAI,IAAI,+BAAsB,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,GAAG;YAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC7F,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,qBAAqB;IACzC,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAmB;QAC/B,GAAG,KAAK;QACR,GAAG,EAAE,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG;KACrD,CAAC;IACF,IAAI,QAAQ,CAAC,GAAG,GAAG,CAAC;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAChD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,iFAAiF;AACjF,SAAgB,yBAAyB;IACvC,OAAO,kBAAkB,EAAE,CAAC;AAC9B,CAAC;AAED,wEAAwE;AACxE,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,IAAA,sBAAY,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,MAAc,EAAE,QAAgB;IACnD,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IAC3C,IAAA,uBAAa,EAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,IAAA,oBAAU,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,IAAA,gBAAM,EAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
@@ -52,12 +52,27 @@ export declare function nextAgentLoopSeq(): number;
52
52
  * Detects a healthy bridge daemon already listening on a candidate port.
53
53
  * Works regardless of who started it (autostart, `start`, detached scripts -
54
54
  * none of which reliably leave a pid file behind).
55
+ *
56
+ * Thin delegate to `daemon-instance`, which is the single owner of "is a
57
+ * daemon running". Kept as a named export because `doctor` and the boot guard
58
+ * read better with this name.
55
59
  */
56
60
  export declare function detectRunningDaemon(): Promise<{
57
61
  port: number;
58
62
  version: string;
59
63
  } | null>;
60
64
  export declare function writeDaemonPidFile(): void;
65
+ /**
66
+ * Release daemon ownership on exit.
67
+ *
68
+ * The old condition was `if (!current || current === process.pid) rmSync(...)`.
69
+ * `!current` is true for an EMPTY or unparseable file, so every short-lived
70
+ * daemon the watchdog spawned - which returns before it ever writes a pid and
71
+ * therefore can only ever REMOVE - could delete a live daemon's pid file on
72
+ * `process.on('exit')`. `runningPid()` cannot tell an empty file from a
73
+ * missing one (`Number('') === 0`), so the watchdog then read "not running"
74
+ * and started yet another daemon. Ownership is now positive evidence only.
75
+ */
61
76
  export declare function clearDaemonPidFile(): void;
62
77
  export declare function readFileSyncSafe(): string;
63
78
  export declare function log(line: string): void;