obsbot-mcp 0.6.3 → 0.8.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.
Files changed (71) hide show
  1. package/README.md +97 -20
  2. package/dist/build-info.json +5 -0
  3. package/dist/device/manager.d.ts +8 -0
  4. package/dist/device/manager.js +37 -4
  5. package/dist/device/manager.js.map +1 -1
  6. package/dist/geometry/aim.d.ts +24 -13
  7. package/dist/geometry/aim.js +26 -13
  8. package/dist/geometry/aim.js.map +1 -1
  9. package/dist/ipc/build-id.d.ts +25 -0
  10. package/dist/ipc/build-id.js +60 -0
  11. package/dist/ipc/build-id.js.map +1 -0
  12. package/dist/ipc/client.d.ts +36 -0
  13. package/dist/ipc/client.js +106 -4
  14. package/dist/ipc/client.js.map +1 -1
  15. package/dist/ipc/coordinator.d.ts +91 -12
  16. package/dist/ipc/coordinator.js +293 -57
  17. package/dist/ipc/coordinator.js.map +1 -1
  18. package/dist/ipc/gate.d.ts +14 -0
  19. package/dist/ipc/gate.js +45 -0
  20. package/dist/ipc/gate.js.map +1 -0
  21. package/dist/ipc/owner.d.ts +27 -1
  22. package/dist/ipc/owner.js +67 -4
  23. package/dist/ipc/owner.js.map +1 -1
  24. package/dist/ipc/protocol.d.ts +30 -0
  25. package/dist/ipc/protocol.js +40 -0
  26. package/dist/ipc/protocol.js.map +1 -1
  27. package/dist/ipc/rendezvous.d.ts +37 -11
  28. package/dist/ipc/rendezvous.js +143 -30
  29. package/dist/ipc/rendezvous.js.map +1 -1
  30. package/dist/mcp/server.js +40 -12
  31. package/dist/mcp/server.js.map +1 -1
  32. package/dist/mcp/tools.d.ts +6 -0
  33. package/dist/mcp/tools.js +123 -17
  34. package/dist/mcp/tools.js.map +1 -1
  35. package/dist/tail2/api.d.ts +218 -0
  36. package/dist/tail2/api.js +267 -0
  37. package/dist/tail2/api.js.map +1 -0
  38. package/dist/tail2/mdns.d.ts +48 -0
  39. package/dist/tail2/mdns.js +216 -0
  40. package/dist/tail2/mdns.js.map +1 -0
  41. package/dist/tail2/registry.d.ts +100 -0
  42. package/dist/tail2/registry.js +200 -0
  43. package/dist/tail2/registry.js.map +1 -0
  44. package/dist/tail2/snapshot.d.ts +54 -0
  45. package/dist/tail2/snapshot.js +157 -0
  46. package/dist/tail2/snapshot.js.map +1 -0
  47. package/dist/tail2/tools.d.ts +7 -0
  48. package/dist/tail2/tools.js +370 -0
  49. package/dist/tail2/tools.js.map +1 -0
  50. package/dist/transport/helper-process.d.ts +11 -0
  51. package/dist/transport/helper-process.js +10 -0
  52. package/dist/transport/helper-process.js.map +1 -1
  53. package/dist/transport/linux.d.ts +59 -9
  54. package/dist/transport/linux.js +163 -21
  55. package/dist/transport/linux.js.map +1 -1
  56. package/dist/transport/macos.d.ts +8 -0
  57. package/dist/transport/macos.js +11 -0
  58. package/dist/transport/macos.js.map +1 -1
  59. package/dist/transport/transport.d.ts +22 -0
  60. package/dist/transport/transport.js +20 -0
  61. package/dist/transport/transport.js.map +1 -1
  62. package/dist/transport/windows.d.ts +6 -0
  63. package/dist/transport/windows.js +9 -0
  64. package/dist/transport/windows.js.map +1 -1
  65. package/dist/version.d.ts +1 -1
  66. package/dist/version.js +1 -1
  67. package/native/prebuilt/darwin-arm64/obsbot-helper +0 -0
  68. package/native/prebuilt/darwin-x64/obsbot-helper +0 -0
  69. package/native/prebuilt/linux-x64/obsbot-helper +0 -0
  70. package/native/prebuilt/win32-x64/obsbot-helper.exe +0 -0
  71. package/package.json +4 -1
package/README.md CHANGED
@@ -3,7 +3,8 @@
3
3
  A cross-platform [Model Context Protocol](https://modelcontextprotocol.io) server that controls an
4
4
  **OBSBOT Tiny 2** camera over its standard UVC/USB interface — pan/tilt/roll the gimbal, zoom, AI
5
5
  subject tracking, focus/exposure/white-balance/image controls, HDR and field-of-view, plus snapshot,
6
- preview, and recording — without any vendor SDK.
6
+ preview, and recording — without any vendor SDK. It also controls the **OBSBOT Tail 2** network
7
+ camera over its HTTP/WS API (see [OBSBOT Tail 2](#obsbot-tail-2-network-cameras) below).
7
8
 
8
9
  ## Install
9
10
 
@@ -60,7 +61,11 @@ With the installed binary, use `"command": "obsbot-mcp"` and `"args": ["--debug"
60
61
 
61
62
  ## Tools
62
63
 
63
- 36 tools total. All names below are current as of v0.4.0 — **every tool was renamed in this
64
+ 35 tools on Windows and macOS, 34 on Linux (`obsbot_gimbal_move_speed` is unavailable there — see
65
+ [limitations](#linux-gimbal-position-feedback-is-not-live)). `--debug` adds `obsbot_debug_probe` for
66
+ one more. Every Tail 2 camera on the network adds the 16 `obsbot_tail2_*` tools in
67
+ [OBSBOT Tail 2](#obsbot-tail-2-network-cameras) below (all platforms — they are pure TypeScript).
68
+ All names below are current as of v0.4.0 — **every tool was renamed in this
64
69
  release and there is no backward-compatible alias**; see [CHANGELOG.md](./CHANGELOG.md) for the
65
70
  full old→new mapping if you're updating a caller.
66
71
 
@@ -247,6 +252,66 @@ name, independent of `camera`.
247
252
  on Windows, `brew install ffmpeg` on macOS, `apt install ffmpeg` on Linux). `snapshot` does **not**
248
253
  need ffmpeg — it grabs the frame through the native helper.
249
254
 
255
+ ## OBSBOT Tail 2 (network cameras)
256
+
257
+ The Tail 2 is a different animal: a network PTZ camera (NDI/RTSP/SRT/RTMP output, ethernet + WiFi,
258
+ and a USB-C port that is either MTP for footage offload or a UVC webcam). The tools below use its
259
+ **network control plane** — an HTTP REST API plus a WebSocket status push, documented in
260
+ [`TAIL2-PROTOCOL.md`](./TAIL2-PROTOCOL.md) from on-device reverse engineering. That makes the whole
261
+ module **pure TypeScript with zero platform-specific code**: no native helper, no helper build,
262
+ identical behavior on Windows/Linux/macOS.
263
+
264
+ In UVC mode the camera also answers the standard UVC controls over USB (pan, tilt, zoom, pan/tilt
265
+ speed, focus, exposure, white balance), and its vendor Extension Unit gives tracking on/off, human
266
+ tracking mode, tracking speed and Auto Zoom. This server has no Tail 2 USB transport yet, so none
267
+ of that is exposed as a tool; presets, portrait rotation and roll trim are network only. See
268
+ [TAIL2-PROTOCOL.md §11](./TAIL2-PROTOCOL.md#11-usb-c-uvc-mode-measured-2026-09-26-windows-directshow-2026-09-27-linux-uvcvideo)
269
+ for what was measured.
270
+
271
+ Getting started:
272
+
273
+ 1. Put the Tail 2 on your network (it defaults to DHCP on ethernet).
274
+ 2. Call `obsbot_tail2_scan` once — it listens ~5 s for the camera's own mDNS announcements (it
275
+ multicasts its MAC, name and IPs every few seconds, the same channel OBSBOT Center discovers
276
+ by) and falls back to an HTTP subnet sweep only on multicast-filtered networks. Or set
277
+ `OBSBOT_TAIL2_HOSTS` (comma-separated addresses) in the server's environment, or just pass any
278
+ Tail 2 tool a `camera` parameter holding the camera's IP.
279
+
280
+ The `camera` selector for these tools is the camera's **MAC** (its stable identity), or its
281
+ `device_name`, or its host address — case-insensitive. Omitted with one Tail 2 registered it
282
+ resolves to that one.
283
+
284
+ | Tool | Parameters | Description |
285
+ |------|------------|-------------|
286
+ | `obsbot_tail2_devices` | — | List registered Tail 2 cameras (mac, name, host(s)). Registration is not liveness. |
287
+ | `obsbot_tail2_scan` | — | Discover Tail 2 cameras: ~5 s mDNS listen (the camera's own announcements), HTTP subnet sweep fallback. Registers what it found. |
288
+ | `obsbot_tail2_status` | `camera`? | One WebSocket status push: the full live block — power, rec, portrait, AI mode + tracking settings, zoom ratio, roll bias, focus modes, NDI/RTSP/SRT/RTMP flags, SD card, presets with poses, and per-subsystem health. No live yaw/pitch — Tail 2 gimbal moves are open-loop. |
289
+ | `obsbot_tail2_info` | `camera`? | Identity + static config in one call: device_info, range (zoom **1.0–12.0**, focus 1–100, WB 2000–10000 K), networkconfig (NDI/stream settings). |
290
+ | `obsbot_tail2_zoom` | `ratio` (`1.0`–`12.0`), `speed` (`1`–`10`, default `5`), `camera`? | Absolute zoom on the camera's own ratio scale. `speed` is required by the firmware. Returns `settled` (readback-verified) — see below. |
291
+ | `obsbot_tail2_recenter` | `camera`? | Gimbal recenter (yaw/pitch/roll 0). Open-loop: returns on ack. Can drop AI tracking to `none`; re-enable with `obsbot_tail2_ai_track`. |
292
+ | `obsbot_tail2_portrait` | `enable`, `camera`? | Motorized 90° barrel rotation for portrait framing — no Tiny 2 equivalent. Verified on orientation feedback; retry if `settled:false` (writes can be silently dropped *while the motor is in motion* — measured). |
293
+ | `obsbot_tail2_roll_bias` | `angle` (±90), `camera`? | Roll trim in degrees (horizon correction / deliberate tilt). |
294
+ | `obsbot_tail2_ai_track` | `enabled`, `mode` (default `"humanTrackingSingleMode"`), `camera`? | Enable/disable AI tracking. Modes are the camera's own enum: human (single/group), animal (normal/close-up), object tracking (`objectTracking`/`objectTrackingNormal`/`objectTrackingCloseUp`). While active, tracking owns the gimbal. |
295
+ | `obsbot_tail2_track_speed` | `speed`: `"superLazy" \| "lazy" \| "slow" \| "fast" \| "crazy" \| "customized"`, `camera`? | Tracking follow speed — the Tail 2's own six-speed enum (NOT the Tiny 2's standard/sport pair). |
296
+ | `obsbot_tail2_preset_list` | `camera`? | The three preset slots: occupied/empty, decoded name, pose in degrees + zoom ratio. |
297
+ | `obsbot_tail2_preset_save` | `slot` (`1`–`3`), `name`? (default `P1`/`P2`/`P3`), `camera`? | Save the CURRENT live pose into a slot — aim first, then save. **Overwrites** an occupied slot (unlike the Tiny 2's create-once), and there is no pose-by-value write in this API at all. |
298
+ | `obsbot_tail2_preset_recall` | `slot`, `camera`? | Drive gimbal + zoom to a saved pose. Refuses an empty slot. Arrival verified via the zoom readback (gimbal axes are open-loop — the Tail 2 reports no live pose). Disable AI tracking first or it fights the move. |
299
+ | `obsbot_tail2_preset_delete` | `slot`, `camera`? | Free a slot. |
300
+ | `obsbot_tail2_preset_rename` | `slot`, `name`, `camera`? | Rename a slot (base64 handled transparently). |
301
+ | `obsbot_tail2_snapshot` | `resolution` (`256`–`1920`, default `640`), `quality` (`1`–`100`, default `80`), `camera`? | Grab one still frame and return it as an image. Pulls from the camera's **SRT output** (ffmpeg SRT caller, port 5000) — requires SRT listener mode enabled in OBSBOT Center first (it disables NDI while active and is cleared by a camera reboot; Center only allows changing streaming settings while the output is off, so a failure usually means SRT is off — re-enable and retry). Hardware-verified 2026-09-26. |
302
+
303
+ **Every write is verified by readback** (`settled` in the result): the Tail 2 acknowledges commands
304
+ it may drop while an actuator is mid-motion — `{"code":200}` means *acknowledged*, not *applied*
305
+ (measured 2026-09-26; see TAIL2-PROTOCOL.md §8). `settled:false` means the ladder ran out before
306
+ the readback agreed; the command was still sent — retry it.
307
+
308
+ Known Tail 2 gaps (details in TAIL2-PROTOCOL.md §9): image-control writes via REST
309
+ are unprobed, and snapshot depends on the camera's SRT output being enabled from
310
+ OBSBOT Center (exclusive with NDI, cleared by reboots — the tool explains this when
311
+ SRT is off; on this firmware the RTSP output never serves despite its enable flag).
312
+ The camera's control API is also **unauthenticated** — anyone on your LAN can drive
313
+ it, including poweroff.
314
+
250
315
  ## Supported platforms
251
316
 
252
317
  - **Windows x64** — supported today. The native helper is built from source in `native/windows/`
@@ -471,17 +536,34 @@ node scripts/e2e.mjs
471
536
  Two traps make it easy to test the wrong thing and believe the result. Both cost real time on
472
537
  2026-07-25.
473
538
 
474
- **Rebuilding and reloading is not enough — kill stale server processes first.** The MCP server runs
475
- from `dist/`, so a source change is invisible until `npm run build`. But reloading the server in your
476
- MCP client does *not* guarantee your new code executes: this project coordinates concurrent clients
477
- by electing a single owner process (see `IPC-DESIGN.md`), and a reload spawns a *new* client that
478
- **forwards its tool calls to whatever owner is already running**. An orphaned server from a previous
479
- session stays the owner, so the new process advertises its own up-to-date tool list while every call
480
- is executed by old code.
539
+ **Rebuild, then start one server from the new build.** The MCP server runs from `dist/`, so a
540
+ source change is invisible until `npm run build`. This project coordinates concurrent clients by
541
+ electing a single owner process (see `IPC-DESIGN.md`), and **the owner executes every tool call**,
542
+ whichever session made it. The owner is the newest build alive: when a server starts from a newer
543
+ build than the owner's, the owner finishes the call in flight, releases the camera, and hands the
544
+ endpoint over. Reloading the server in one MCP client is therefore enough. Other sessions stay open
545
+ and their calls are served by the new build.
546
+
547
+ Three things to know:
548
+
549
+ - **The tool list of other sessions does not refresh.** A session that started on an older build
550
+ keeps the list it had; its calls run the new code. Reload that session's server to get new tools.
551
+ - **A server that predates the handover cannot hand over** (0.7.0 and earlier). A newer server
552
+ will not run calls on it, and says so: `an older instance owns the camera endpoint and cannot
553
+ hand it over`. Stop the old process once; after that, rebuilds take over on their own.
554
+ - **Use `npm run build` and `npm run build:helper`.** They stamp the build with its identity
555
+ (`dist/build-info.json`). A bare `tsc`, or a helper copied into place by hand, is not stamped and
556
+ does not count as a newer build.
557
+
558
+ To see which build will run your next call, read the last `ipc role=` line in the server's log.
559
+ `role=owner` means this process; `role=client owner-pid=… owner-build=…` names the one that will.
560
+ Claude Code keeps the log under `~/Library/Caches/claude-cli-nodejs/<project>/mcp-logs-obsbot/` on
561
+ macOS.
481
562
 
482
- That failure is deceptive rather than loud: a newly added tool *appears* in the tool list and can be
483
- called, but behaves like the old build. Two reloads in a row will not fix it. Check for orphans
484
- before concluding anything:
563
+ ```bash
564
+ # Linux / macOS — every server process, with when it started
565
+ ps -o pid,lstart,command -p $(pgrep -f "obsbot.*dist/index.js" | paste -sd, -)
566
+ ```
485
567
 
486
568
  ```powershell
487
569
  # Windows
@@ -490,14 +572,9 @@ Get-CimInstance Win32_Process -Filter "Name='node.exe'" |
490
572
  Select-Object ProcessId, CreationDate
491
573
  ```
492
574
 
493
- ```bash
494
- # Linux / macOS
495
- pgrep -af "obsbot.*dist/index.js"
496
- ```
497
-
498
- Kill everything older than your build, then reload. The cheapest positive confirmation is to call a
499
- tool whose *output* changed — `obsbot_status` gaining a field, say — rather than one whose
500
- description changed, since descriptions come from the new process either way.
575
+ Set `OBSBOT_IPC_NAME` to give a server a rendezvous endpoint of its own (1–64 characters from
576
+ `A-Z a-z 0-9 . _ -`). Test harnesses do this so they leave a live session alone. Two owners on one
577
+ machine can contend for the camera, so it is not for everyday use.
501
578
 
502
579
  **Frame rate selects the field of view, so the preview shows less than snapshots.** At 1920×1080 this
503
580
  camera has two different windows onto the sensor and the *frame rate* picks between them — not the
@@ -0,0 +1,5 @@
1
+ {
2
+ "version": "0.8.0",
3
+ "builtAt": 1790747851685,
4
+ "digest": "158db82ff832ce8bc6f0761d4d3bc0c5a3871cc5a19729f3c240f171d16ac766"
5
+ }
@@ -100,6 +100,14 @@ export declare class DeviceManager {
100
100
  */
101
101
  /** True while an arrival re-bind ladder is running (see handleCameraArrived). */
102
102
  private rebinding;
103
+ /**
104
+ * Bumped by shutdown(). shutdown() is no longer only a way out: an owner
105
+ * that steps down for a newer build calls it and stays alive. Work that was
106
+ * under way before it — a re-bind ladder waiting out its backoff — must not
107
+ * open the camera after it, or this instance takes back what it has just
108
+ * given up.
109
+ */
110
+ private epoch;
103
111
  /**
104
112
  * Delays before each arrival re-bind attempt, in order — so four attempts
105
113
  * spanning ~4.5s, the first immediate.
@@ -4,8 +4,20 @@ import { MacosTransport } from "../transport/macos.js";
4
4
  // USB vendor ID 0x3564 is registered to **Remo Inc.** — the manufacturer. OBSBOT
5
5
  // is a Remo product brand, and Remo ships non-OBSBOT (and non-camera) devices
6
6
  // under the same VID, so candidacy must gate on VID **and** a known model PID —
7
- // never VID alone. Add a PID here (and mirror it in native/macos/helper.m's
8
- // OBSBOT_MODEL_PIDS) when a new OBSBOT camera model is verified on hardware.
7
+ // never VID alone.
8
+ //
9
+ // This table is the list of models that speak the Tiny 2's framed V3 vendor
10
+ // protocol, because being a candidate here means being OPENED AND WRITTEN TO:
11
+ // bind() and listCameras() identify a camera by sending it UG_GET_SN as a V3
12
+ // frame on vendor selector 2. Add a PID only when that query has been verified
13
+ // on the model's hardware.
14
+ //
15
+ // The Tail 2 (0xfefc — one composite PID for both its MTP and UVC USB modes) is
16
+ // deliberately absent. It carries the Tiny 2's Extension Unit GUID but uses
17
+ // flat selectors, not V3 frames (TAIL2-PROTOCOL.md §11), so the serial query
18
+ // would be an untested vendor write. native/macos/helper.m's OBSBOT_MODEL_PIDS
19
+ // does list it: that table only decides what the helper can enumerate and
20
+ // open, which sends the camera nothing. The two tables no longer mirror.
9
21
  const REMO_VID = 0x3564;
10
22
  const OBSBOT_MODEL_PIDS = new Map([
11
23
  [REMO_VID, new Set([0xfef8 /* Tiny 2 */])],
@@ -17,6 +29,10 @@ const OBSBOT_MODEL_PIDS = new Map([
17
29
  // DirectShow filter, which matched this regex and poisoned multi-candidate
18
30
  // binding — are correctly excluded.
19
31
  const OBSBOT_NAME_RE = /obsbot/i;
32
+ // The name fallback's stand-in for the Tail 2's absence from the PID table.
33
+ // Matches both spellings the camera's own USB strings use ("OBSBOT Tail 2
34
+ // Camera", "OBSBOT Tail2 Audio").
35
+ const TAIL2_NAME_RE = /tail\s*2/i;
20
36
  /** Message text from an unknown thrown value, for diagnostics. */
21
37
  const errText = (e) => (e instanceof Error ? e.message : String(e));
22
38
  /**
@@ -25,10 +41,13 @@ const errText = (e) => (e instanceof Error ? e.message : String(e));
25
41
  * VID + known-model PID table (a software "OBSBOT Virtual Camera" has no vid/pid
26
42
  * and is rejected). On Linux the helper does not report vid/pid yet, so fall
27
43
  * back to the name match there until it does.
44
+ *
45
+ * A Tail 2 is never a candidate on any platform — see OBSBOT_MODEL_PIDS.
28
46
  */
29
47
  function isObsbotCamera(d) {
30
- if (process.platform === "linux")
31
- return OBSBOT_NAME_RE.test(d.name);
48
+ if (process.platform === "linux") {
49
+ return OBSBOT_NAME_RE.test(d.name) && !TAIL2_NAME_RE.test(d.name);
50
+ }
32
51
  if (d.vid === undefined || d.pid === undefined)
33
52
  return false;
34
53
  return OBSBOT_MODEL_PIDS.get(d.vid)?.has(d.pid) ?? false;
@@ -124,6 +143,14 @@ export class DeviceManager {
124
143
  */
125
144
  /** True while an arrival re-bind ladder is running (see handleCameraArrived). */
126
145
  rebinding = false;
146
+ /**
147
+ * Bumped by shutdown(). shutdown() is no longer only a way out: an owner
148
+ * that steps down for a newer build calls it and stays alive. Work that was
149
+ * under way before it — a re-bind ladder waiting out its backoff — must not
150
+ * open the camera after it, or this instance takes back what it has just
151
+ * given up.
152
+ */
153
+ epoch = 0;
127
154
  /**
128
155
  * Delays before each arrival re-bind attempt, in order — so four attempts
129
156
  * spanning ~4.5s, the first immediate.
@@ -607,12 +634,17 @@ export class DeviceManager {
607
634
  if (this.rebinding)
608
635
  return;
609
636
  this.rebinding = true;
637
+ const epoch = this.epoch;
610
638
  const total = this.arrivalBackoffMs.length;
611
639
  try {
612
640
  for (let i = 0; i < total; i++) {
613
641
  const delay = this.arrivalBackoffMs[i];
614
642
  if (delay > 0)
615
643
  await new Promise((r) => setTimeout(r, delay));
644
+ // The manager was shut down while we waited: the camera is no longer
645
+ // ours to restore. See `epoch`.
646
+ if (this.epoch !== epoch)
647
+ return;
616
648
  // A tool call may have bound it while we waited — it got there first.
617
649
  if (this.registry.size > 0)
618
650
  return;
@@ -651,6 +683,7 @@ export class DeviceManager {
651
683
  * itself throw is worse than one that leaves a process for the OS to reap.
652
684
  */
653
685
  async shutdown() {
686
+ this.epoch++;
654
687
  const close = async (h) => {
655
688
  if (!h)
656
689
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/device/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/device/manager.ts"],"names":[],"mappings":"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"}
@@ -186,26 +186,37 @@ export interface Offset {
186
186
  */
187
187
  export declare function pixelToOffset(x: number, y: number, frame: Frame, optics: Optics): Offset;
188
188
  /**
189
- * Mechanical limits of the Tiny 2's gimbal, in degrees. Hardware-verified.
189
+ * Limits of the Tiny 2's gimbal, in degrees: the pose the running platform can
190
+ * COMMAND. Hardware-verified.
190
191
  *
191
192
  * These live here rather than in the tool layer so there is exactly one
192
193
  * definition: `obsbot_gimbal_move` imports them for its own clamping. Two copies
193
194
  * of a bound that must agree is a defect waiting to happen.
194
195
  *
195
- * ±150 is the mechanical yaw range on EVERY platform, and these limits are not
196
- * platform-conditional. Measured 2026-07-25: commanded 145 reads back 145, and
197
- * 150 reads back 149. Position feedback comes from the camera's physical
198
- * encoder, which is a property of the hardware and does not vary by OS.
196
+ * ±150 is the mechanical yaw range on every platform. Measured 2026-07-25:
197
+ * commanded 145 reads back 145, and 150 reads back 149. Position feedback comes
198
+ * from the camera's physical encoder, which does not vary by OS.
199
199
  *
200
- * Do not "fix" this to 130. `transport/linux.ts` and `transport/macos.ts` record
201
- * a `CT_PANTILT_ABSOLUTE` range of ±468000 arcsec = ±130°, which reads like a
202
- * conflict and was raised as one during review. It is not: that is the range the
203
- * UVC control *advertises* — a descriptor value that under-reports the mechanism
204
- * it describes — not where the gimbal stops. Nothing clamps to it either;
205
- * `LinuxTransport.gimbalSet` writes `yawDeg * ARCSEC_PER_DEG` unclamped, so the
206
- * arcsec figure lives only in comments. See the spec's §8.
200
+ * The COMMANDABLE range does vary by OS, which is why the yaw limit is resolved
201
+ * per platform. `CT_PANTILT_ABSOLUTE` *advertises* ±468000 arcsec = ±130° — a
202
+ * descriptor value that under-reports the mechanism it describes — and on Linux
203
+ * uvcvideo silently clamps every write to the advertised range. Measured
204
+ * 2026-09-01: writes of 540000 and 504000 arcsec both return success and land
205
+ * at exactly 468000. A limit wider than the platform can command turns every
206
+ * aim past 130° into a guaranteed miss that also burns the closed-loop mover's
207
+ * one retry (`transport/linux.ts`), so on Linux the limit is the kernel's, not
208
+ * the mechanism's. macOS commands the control raw over USB and Windows goes
209
+ * through the vendor protocol; neither clamps, so both keep the mechanical
210
+ * bound. The mechanism still REACHES ±148–149° on every platform — speed moves,
211
+ * hand moves and AI tracking all park it past 130° and Linux live reads report
212
+ * it truthfully (measured -532800/+536400 arcsec at the stops) — so this bounds
213
+ * what may be commanded, never what a read may return. See the spec's §8.
214
+ *
215
+ * Pitch needs no per-platform split: the advertised ±324000 arcsec is exactly
216
+ * the mechanical ±90°.
207
217
  */
208
- export declare const GIMBAL_YAW_LIMIT_DEG = 150;
218
+ export declare function gimbalYawLimitDeg(platform?: string): number;
219
+ export declare const GIMBAL_YAW_LIMIT_DEG: number;
209
220
  export declare const GIMBAL_PITCH_LIMIT_DEG = 90;
210
221
  export interface Aim {
211
222
  target: Pose;
@@ -208,26 +208,39 @@ export function pixelToOffset(x, y, frame, optics) {
208
208
  };
209
209
  }
210
210
  /**
211
- * Mechanical limits of the Tiny 2's gimbal, in degrees. Hardware-verified.
211
+ * Limits of the Tiny 2's gimbal, in degrees: the pose the running platform can
212
+ * COMMAND. Hardware-verified.
212
213
  *
213
214
  * These live here rather than in the tool layer so there is exactly one
214
215
  * definition: `obsbot_gimbal_move` imports them for its own clamping. Two copies
215
216
  * of a bound that must agree is a defect waiting to happen.
216
217
  *
217
- * ±150 is the mechanical yaw range on EVERY platform, and these limits are not
218
- * platform-conditional. Measured 2026-07-25: commanded 145 reads back 145, and
219
- * 150 reads back 149. Position feedback comes from the camera's physical
220
- * encoder, which is a property of the hardware and does not vary by OS.
218
+ * ±150 is the mechanical yaw range on every platform. Measured 2026-07-25:
219
+ * commanded 145 reads back 145, and 150 reads back 149. Position feedback comes
220
+ * from the camera's physical encoder, which does not vary by OS.
221
221
  *
222
- * Do not "fix" this to 130. `transport/linux.ts` and `transport/macos.ts` record
223
- * a `CT_PANTILT_ABSOLUTE` range of ±468000 arcsec = ±130°, which reads like a
224
- * conflict and was raised as one during review. It is not: that is the range the
225
- * UVC control *advertises* — a descriptor value that under-reports the mechanism
226
- * it describes — not where the gimbal stops. Nothing clamps to it either;
227
- * `LinuxTransport.gimbalSet` writes `yawDeg * ARCSEC_PER_DEG` unclamped, so the
228
- * arcsec figure lives only in comments. See the spec's §8.
222
+ * The COMMANDABLE range does vary by OS, which is why the yaw limit is resolved
223
+ * per platform. `CT_PANTILT_ABSOLUTE` *advertises* ±468000 arcsec = ±130° — a
224
+ * descriptor value that under-reports the mechanism it describes — and on Linux
225
+ * uvcvideo silently clamps every write to the advertised range. Measured
226
+ * 2026-09-01: writes of 540000 and 504000 arcsec both return success and land
227
+ * at exactly 468000. A limit wider than the platform can command turns every
228
+ * aim past 130° into a guaranteed miss that also burns the closed-loop mover's
229
+ * one retry (`transport/linux.ts`), so on Linux the limit is the kernel's, not
230
+ * the mechanism's. macOS commands the control raw over USB and Windows goes
231
+ * through the vendor protocol; neither clamps, so both keep the mechanical
232
+ * bound. The mechanism still REACHES ±148–149° on every platform — speed moves,
233
+ * hand moves and AI tracking all park it past 130° and Linux live reads report
234
+ * it truthfully (measured -532800/+536400 arcsec at the stops) — so this bounds
235
+ * what may be commanded, never what a read may return. See the spec's §8.
236
+ *
237
+ * Pitch needs no per-platform split: the advertised ±324000 arcsec is exactly
238
+ * the mechanical ±90°.
229
239
  */
230
- export const GIMBAL_YAW_LIMIT_DEG = 150;
240
+ export function gimbalYawLimitDeg(platform = process.platform) {
241
+ return platform === "linux" ? 130 : 150;
242
+ }
243
+ export const GIMBAL_YAW_LIMIT_DEG = gimbalYawLimitDeg();
231
244
  export const GIMBAL_PITCH_LIMIT_DEG = 90;
232
245
  const clampTo = (value, limit) => Math.min(limit, Math.max(-limit, value));
233
246
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"aim.js","sourceRoot":"","sources":["../../src/geometry/aim.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aim.js","sourceRoot":"","sources":["../../src/geometry/aim.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gFAAgF;AAChF,2DAA2D;AAC3D,EAAE;AACF,2EAA2E;AAC3E,yBAAyB;AAmCzB,MAAM,KAAK,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAC7D,MAAM,KAAK,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAEhC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA4B;IACxD,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,OAAO;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAA4B;IACzD,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACvF,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC3F,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;CAC5F,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAEjD,gFAAgF;AAChF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;AAEnF,gFAAgF;AAChF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAE7E,iFAAiF;AACjF,iFAAiF;AACjF,oEAAoE;AACpE,EAAE;AACF,kFAAkF;AAClF,gFAAgF;AAChF,gFAAgF;AAChF,6EAA6E;AAC7E,+EAA+E;AAC/E,4EAA4E;AAC5E,8EAA8E;AAC9E,kFAAkF;AAClF,4EAA4E;AAC5E,6EAA6E;AAC7E,2EAA2E;AAC3E,WAAW;AACX,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,KAAY,EAAkC,EAAE;IACzF,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC;QACtC,MAAM,CAAC,aAAa,GAAG,iBAAiB;QACxC,MAAM,CAAC,aAAa,GAAG,iBAAiB,EACxC,CAAC;QACD,MAAM,IAAI,UAAU,CAClB,mDAAmD,iBAAiB,KAAK,iBAAiB,UAAU,MAAM,CAAC,aAAa,EAAE,CAC3H,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC;IACvE,8EAA8E;IAC9E,4EAA4E;IAC5E,4EAA4E;IAC5E,2EAA2E;IAC3E,uBAAuB;IACvB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,2BAA2B,EAAE,CAAC;AAC3F,CAAC,CAAC;AAEF,qFAAqF;AACrF,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,KAAY;IACrD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACxD,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AAClE,CAAC;AAOD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,CAAS,EAAE,KAAY,EAAE,MAAc;IAC9E,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO;QACL,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QACpC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB,OAAO,CAAC,QAAQ;IACnE,OAAO,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1C,CAAC;AACD,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,EAAE,CAAC;AACxD,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAuBzC,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,KAAa,EAAU,EAAE,CACvD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,UAAU,CACxB,CAAS,EACT,CAAS,EACT,KAAY,EACZ,MAAc,EACd,OAAa;IAEb,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtC,wEAAwE;IACxE,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,GAAG,CAAC,CAAC;IACb,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAEjD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAE1C,oEAAoE;IACpE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACpC,iEAAiE;IACjE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC7B,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAE7B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,4EAA4E;IAC5E,2EAA2E;IAC3E,2EAA2E;IAC3E,uDAAuD;IACvD,EAAE;IACF,yEAAyE;IACzE,2EAA2E;IAC3E,2EAA2E;IAC3E,yEAAyE;IACzE,0EAA0E;IAC1E,wEAAwE;IACxE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IAE3F,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;IAExD,0EAA0E;IAC1E,6EAA6E;IAC7E,2EAA2E;IAC3E,4EAA4E;IAC5E,4EAA4E;IAC5E,6EAA6E;IAC7E,8DAA8D;IAC9D,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;IACf,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAEzC,OAAO;QACL,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE;QACtB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE;QACxE,OAAO,EAAE,GAAG,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ;QAC7C,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ export interface BuildId {
2
+ /** package.json version. For log lines only — it takes no part in ordering. */
3
+ version: string;
4
+ /** Milliseconds since the epoch, taken when the stamp was written. */
5
+ builtAt: number;
6
+ /** SHA-256 (hex) of the code this build can run, or UNSTAMPED_DIGEST. */
7
+ digest: string;
8
+ }
9
+ export declare const UNSTAMPED_DIGEST = "unstamped";
10
+ /** A build with no stamp file: older than every stamped build, equal to every other unstamped one. */
11
+ export declare function unstampedBuild(): BuildId;
12
+ /** Is this a well-formed identity? Used on the stamp file and on what a peer sends. */
13
+ export declare function isBuildId(x: unknown): x is BuildId;
14
+ /** dist/ipc/build-id.js → dist/build-info.json */
15
+ export declare function defaultBuildInfoPath(): string;
16
+ /** Read the stamp. A missing or malformed file is an unstamped build, never an error. */
17
+ export declare function loadBuildId(path?: string): BuildId;
18
+ /**
19
+ * Order two builds. Positive: `a` is newer. Negative: `b` is newer. Zero: the
20
+ * same build. Both sides of a connection run this on the same two identities,
21
+ * so it must be a total order that cannot disagree with itself.
22
+ */
23
+ export declare function compareBuilds(a: BuildId, b: BuildId): number;
24
+ /** `<version>/<builtAt as ISO 8601>/<first 8 of digest>`, or `<version>/unstamped`. */
25
+ export declare function buildLabel(b: BuildId): string;
@@ -0,0 +1,60 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { fileURLToPath } from "node:url";
3
+ import { dirname, join } from "node:path";
4
+ import { VERSION } from "../version.js";
5
+ export const UNSTAMPED_DIGEST = "unstamped";
6
+ const DIGEST_RE = /^[0-9a-f]{64}$/;
7
+ /** A build with no stamp file: older than every stamped build, equal to every other unstamped one. */
8
+ export function unstampedBuild() {
9
+ return { version: VERSION, builtAt: 0, digest: UNSTAMPED_DIGEST };
10
+ }
11
+ /** Is this a well-formed identity? Used on the stamp file and on what a peer sends. */
12
+ export function isBuildId(x) {
13
+ if (typeof x !== "object" || x === null)
14
+ return false;
15
+ const b = x;
16
+ if (typeof b.version !== "string" || b.version.length === 0)
17
+ return false;
18
+ if (typeof b.builtAt !== "number" || !Number.isFinite(b.builtAt) || b.builtAt < 0)
19
+ return false;
20
+ if (typeof b.digest !== "string")
21
+ return false;
22
+ return b.digest === UNSTAMPED_DIGEST ? b.builtAt === 0 : DIGEST_RE.test(b.digest);
23
+ }
24
+ /** dist/ipc/build-id.js → dist/build-info.json */
25
+ export function defaultBuildInfoPath() {
26
+ return join(dirname(fileURLToPath(import.meta.url)), "..", "build-info.json");
27
+ }
28
+ /** Read the stamp. A missing or malformed file is an unstamped build, never an error. */
29
+ export function loadBuildId(path = defaultBuildInfoPath()) {
30
+ try {
31
+ const raw = JSON.parse(readFileSync(path, "utf8"));
32
+ if (isBuildId(raw) && raw.digest !== UNSTAMPED_DIGEST) {
33
+ return { version: raw.version, builtAt: raw.builtAt, digest: raw.digest };
34
+ }
35
+ }
36
+ catch {
37
+ // missing, unreadable, or not JSON
38
+ }
39
+ return unstampedBuild();
40
+ }
41
+ /**
42
+ * Order two builds. Positive: `a` is newer. Negative: `b` is newer. Zero: the
43
+ * same build. Both sides of a connection run this on the same two identities,
44
+ * so it must be a total order that cannot disagree with itself.
45
+ */
46
+ export function compareBuilds(a, b) {
47
+ if (a.digest === b.digest)
48
+ return 0;
49
+ if (a.builtAt !== b.builtAt)
50
+ return a.builtAt > b.builtAt ? 1 : -1;
51
+ return a.digest > b.digest ? 1 : -1;
52
+ }
53
+ /** `<version>/<builtAt as ISO 8601>/<first 8 of digest>`, or `<version>/unstamped`. */
54
+ export function buildLabel(b) {
55
+ if (b.digest === UNSTAMPED_DIGEST)
56
+ return `${b.version}/unstamped`;
57
+ const iso = new Date(b.builtAt).toISOString().replace(/\.\d{3}Z$/, "Z");
58
+ return `${b.version}/${iso}/${b.digest.slice(0, 8)}`;
59
+ }
60
+ //# sourceMappingURL=build-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-id.js","sourceRoot":"","sources":["../../src/ipc/build-id.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,53 @@
1
1
  import net from "node:net";
2
+ import type { BuildId } from "./build-id.js";
3
+ /** What is on the other end of the connection. */
4
+ export type Peer = {
5
+ kind: "peer";
6
+ build: BuildId;
7
+ pid: number;
8
+ }
9
+ /** An instance that predates the handshake, or one that did not answer it. */
10
+ | {
11
+ kind: "legacy";
12
+ };
2
13
  export declare class OwnerClient {
3
14
  private readonly socket;
4
15
  private nextId;
5
16
  private readonly pending;
6
17
  private readonly dec;
18
+ private readonly closeListeners;
7
19
  private closedErr?;
20
+ private gotNotice;
8
21
  private constructor();
9
22
  /** Wrap an already-connected socket (e.g. the one elect() returned). */
10
23
  static adopt(socket: net.Socket): OwnerClient;
11
24
  static connect(path: string): Promise<OwnerClient>;
12
25
  /** Forward a request to the owner; resolve with its result or throw its error. */
13
26
  request(body: unknown): Promise<unknown>;
27
+ /**
28
+ * Exchange identities with the owner.
29
+ *
30
+ * Anything other than a well-formed hello back means the owner cannot take
31
+ * part in a handover: an error reply (a legacy owner rejecting what it takes
32
+ * for a tool call), a reply that is not a hello, or no reply in `timeoutMs`.
33
+ * Throws only if the connection itself closes first.
34
+ */
35
+ hello(build: BuildId, pid: number, timeoutMs: number): Promise<Peer>;
36
+ /**
37
+ * Ask the owner for the endpoint. True if it agreed to step down.
38
+ *
39
+ * No answer in `timeoutMs` is a no: an owner that stalls between the hello
40
+ * and the takeover must not leave the asker waiting for ever. Throws only if
41
+ * the connection itself closes first.
42
+ */
43
+ takeover(build: BuildId, pid: number, timeoutMs: number): Promise<boolean>;
14
44
  get closed(): boolean;
45
+ /** True once the owner has said it is stepping down for a newer build. */
46
+ get noticed(): boolean;
47
+ /** Call `fn` once, when the connection closes for any reason. */
48
+ onClose(fn: () => void): void;
49
+ /** Resolve true when the connection closes, or false if it is still open after `timeoutMs`. */
50
+ waitClosed(timeoutMs: number): Promise<boolean>;
15
51
  close(): void;
16
52
  private send;
17
53
  private onData;