opentray 0.32.0 → 0.33.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -124,11 +124,43 @@ completed graceful close), the SDK reaches a terminal connection-dead state:
124
124
  immediately with the same message instead of hanging on a dead socket.
125
125
  - Event delivery stops. Eventful tray handles expose
126
126
  `tray.onConnectionDead(handler)` — present on local broker transports — which
127
- fires exactly once with the terminal error; treat it as the fail-loud signal
128
- to exit or supervised-restart an entry whose backend is gone.
127
+ fires exactly once per connection generation; treat it as the fail-loud signal
128
+ for that generation's cleanup.
129
129
  - `destroy()` treats the sentinel as the requested end state, so a Quit issued
130
130
  after broker death still settles.
131
131
 
132
+ ### Transport robustness and supervision
133
+
134
+ The `createTray` runtime path wraps the broker connection in a supervised
135
+ transport. Consumer contract (full guidance in the public
136
+ `skills/opentray` reference `transport-robustness.md`):
137
+
138
+ - Every transport call is deadline-bounded (interactive 5 s, teardown 2 s,
139
+ bootstrap 10 s — exported as `INTERACTIVE_CALL_DEADLINE_MS`,
140
+ `TEARDOWN_CALL_DEADLINE_MS`, `BOOTSTRAP_CALL_DEADLINE_MS`; overridable per
141
+ call through the optional `request(frame, { deadlineMs })` transport
142
+ parameter). A budget that expires settles that one call with the typed
143
+ `TransportTimeoutError`; late replies are discarded statelessly. Deferred
144
+ operations follow the two-phase rule: the deadline bounds
145
+ dispatch-to-acceptance, and an accepted operation (a held modal dialog)
146
+ settles with its terminal or the typed transport-close rejection — never a
147
+ transport deadline.
148
+ - An *uninvited* connection death is detected by socket close/error or an
149
+ idle-gated heartbeat and recovers automatically with zero consumer code:
150
+ cooldown backoff, broker respawn through the same identity-gated connect
151
+ path, declarative journal replay (tray options, last-set mutations,
152
+ extension mounts), registered facade rebuilds, then a full state snapshot
153
+ re-emit. A bounded budget (3 attempts per 10 min, in-memory) caps the
154
+ loop; exhaustion is the terminal `abandoned` state where every call fails
155
+ fast with `TransportAbandonedError` (code `transport_abandoned`) and the
156
+ app keeps running headless. Caller-initiated teardown never recovers.
157
+ - Health projection: `tray.onTransportStateChange(handler)` publishes
158
+ edge-triggered `healthy | recovering | abandoned`. The optional
159
+ `runtimeOptions.recovery` object exposes the policy knobs (`enabled`,
160
+ `maxRestarts`, `windowMs`, `cooldownMs`, `backoffFactor`, `backoffCapMs`)
161
+ and the Tier 2 `restartApp` callback, which replaces in-process recovery
162
+ with exactly one hand-over invocation.
163
+
132
164
  ### Extension commands and deferred operations
133
165
 
134
166
  `tray.requestExtension(ext, data)` (and the `TrayExtensionContext.request`
package/dist/index.d.mts CHANGED
@@ -98,12 +98,69 @@ declare const resolveNativeExtensionArtifact: (artifact: NativeExtensionArtifact
98
98
  declare const EMBEDDED_STAGING_MANIFEST_PATH = "platforms/manifest.json";
99
99
  //#endregion
100
100
  //#region src/client.d.ts
101
+ /**
102
+ * Optional per-call transport budget (W1, harden-transport-robustness): a
103
+ * transport that enforces deadlines settles the call with a typed
104
+ * `TransportTimeoutError` when no correlated reply arrives within
105
+ * `deadlineMs`. The parameter is also the teardown-class marking channel
106
+ * later phases read to keep caller-initiated teardown out of recovery — the
107
+ * budget class, not a new protocol flag, distinguishes the call.
108
+ */
109
+ interface TransportRequestOptions {
110
+ /** Per-call deadline budget in milliseconds; transports default to the interactive class. */
111
+ deadlineMs?: number;
112
+ }
101
113
  interface OpenTrayTransport {
102
- request(frame: ClientRequestFrame$1): Promise<ServerFrame$1>;
114
+ request(frame: ClientRequestFrame$1, options?: TransportRequestOptions): Promise<ServerFrame$1>;
115
+ }
116
+ /**
117
+ * Default per-call deadline classes (W1, harden-transport-robustness;
118
+ * field-validated against the pnpm-pub silent-wedge incident): interactive
119
+ * calls settle or reject within 5 s, teardown-class frames within 2 s, and
120
+ * bootstrap-class round-trips (connection init and first bring-up) within
121
+ * 10 s. They live beside `OpenTrayTransport` because they are part of the
122
+ * generic transport call contract, not of one broker implementation.
123
+ */
124
+ declare const INTERACTIVE_CALL_DEADLINE_MS = 5000;
125
+ declare const TEARDOWN_CALL_DEADLINE_MS = 2000;
126
+ declare const BOOTSTRAP_CALL_DEADLINE_MS = 10000;
127
+ /**
128
+ * Typed per-call deadline rejection: the transport's budget for one
129
+ * round-trip expired without a correlated reply. This is the third
130
+ * rejection class, distinct from transport-lost (the plain
131
+ * `BROKER_CONNECTION_CLOSED_MESSAGE` sentinel family, or the typed
132
+ * `extension_transport_closed` for accepted deferred operations) and from
133
+ * broker-rejected (`BrokerServerError` / `ExtensionOperationError`). An
134
+ * expiry settles exactly one call; it never declares the transport dead —
135
+ * death stays a socket-close/error (and, later, heartbeat) verdict.
136
+ */
137
+ declare class TransportTimeoutError extends Error {
138
+ readonly requestId: RequestId;
139
+ readonly deadlineMs: number;
140
+ constructor(requestId: RequestId, deadlineMs: number);
103
141
  }
104
142
  type OpenTrayEventFrame = Extract<ServerFrame$1, {
105
143
  type: "event" | "app-event" | "ext-event";
106
144
  }>;
145
+ /**
146
+ * Supervision state vocabulary (W6 Tier 1, harden-transport-robustness):
147
+ * `healthy` (a live generation is serving), `recovering` (uninvited death was
148
+ * declared and in-process recovery is running), `abandoned` (terminal — the
149
+ * recovery budget is exhausted and every later call fails fast with the
150
+ * typed `TransportAbandonedError`). Edge-triggered through
151
+ * `onTransportStateChange`; the initial `healthy` state never fires.
152
+ */
153
+ type TransportState = "healthy" | "recovering" | "abandoned";
154
+ /**
155
+ * Context handed to a facade rebuild callback after a supervised recovery
156
+ * (W4): the fresh generation number and the new generation's broker session
157
+ * id, so extension facades can re-create session-attributed native state
158
+ * against the live session instead of the dead one.
159
+ */
160
+ interface TransportRebuildContext {
161
+ readonly generation: number;
162
+ readonly sessionId: string | undefined;
163
+ }
107
164
  interface OpenTrayEventSource {
108
165
  onEvent(listener: (frame: OpenTrayEventFrame) => void): () => void;
109
166
  }
@@ -152,8 +209,8 @@ interface TrayHandle {
152
209
  setTooltip(tooltip: Tooltip$1): Promise<void>;
153
210
  setIcon(icon: Icon$1): Promise<void>;
154
211
  loadExtension(options: ExtensionLoadOptions): Promise<void>;
155
- commandExtension(ext: string, data: unknown): Promise<void>;
156
- requestExtension<TValue = unknown>(ext: string, data: unknown): Promise<ExtensionRequestResult<TValue>>;
212
+ commandExtension(ext: string, data: unknown, callOptions?: TransportRequestOptions): Promise<void>;
213
+ requestExtension<TValue = unknown>(ext: string, data: unknown, callOptions?: TransportRequestOptions): Promise<ExtensionRequestResult<TValue>>;
157
214
  extend<TCapability extends object, TOptions = undefined>(extension: TrayExtension<TCapability, TOptions>, options?: TOptions): TrayHandle & TCapability;
158
215
  destroy(): Promise<void>;
159
216
  }
@@ -190,6 +247,22 @@ interface EventfulTrayHandle extends TrayHandle {
190
247
  * stopped, and every later request rejects instead of hanging.
191
248
  */
192
249
  onConnectionDead?(handler: (error: Error) => void): () => void;
250
+ /**
251
+ * Tier 1 transport-supervision state projection (W6,
252
+ * harden-transport-robustness). Present when the underlying transport is
253
+ * supervised (the `createTray` runtime path always supervises): fires
254
+ * edge-triggered `healthy | recovering | abandoned` transitions across
255
+ * connection generations; the current value is not replayed.
256
+ */
257
+ onTransportStateChange?(handler: (state: TransportState) => void): () => void;
258
+ /**
259
+ * Facade rebuild registration (W4, harden-transport-robustness). Present
260
+ * on supervised transports: extension facades register one callback that
261
+ * re-creates their declarative native state (windows, styles,
262
+ * subscriptions) after the supervisor recovered a fresh generation.
263
+ * Callbacks run in registration order after the core journal replay.
264
+ */
265
+ registerTransportRebuild?(rebuild: (context: TransportRebuildContext) => Promise<void>): void;
193
266
  }
194
267
  interface ExtensionLoadOptions {
195
268
  name: string;
@@ -216,8 +289,8 @@ interface TrayExtensionContext {
216
289
  readonly artifact: NativeExtensionArtifact;
217
290
  readonly mountId: string;
218
291
  ensureLoaded(): Promise<void>;
219
- command(data: unknown): Promise<void>;
220
- request<TValue = unknown>(data: unknown): Promise<ExtensionRequestResult<TValue>>;
292
+ command(data: unknown, callOptions?: TransportRequestOptions): Promise<void>;
293
+ request<TValue = unknown>(data: unknown, callOptions?: TransportRequestOptions): Promise<ExtensionRequestResult<TValue>>;
221
294
  }
222
295
  interface TrayExtension<TCapability extends object, TOptions = undefined> {
223
296
  readonly name: string;
@@ -238,6 +311,367 @@ declare function createClient(transport: OpenTrayTransport, options?: CreateClie
238
311
  declare function createTrayHandle(transport: OpenTrayConnection, appId: string, trayId: TrayId$1, nextRequestId?: () => RequestId): EventfulTrayHandle;
239
312
  declare function createTrayHandle(transport: OpenTrayTransport, appId: string, trayId: TrayId$1, nextRequestId?: () => RequestId): TrayHandle;
240
313
  //#endregion
314
+ //#region src/local-broker.d.ts
315
+ type LocalRuntimeEventFrame = Extract<ServerFrame$1, {
316
+ type: "event" | "app-event" | "ext-event";
317
+ }>;
318
+ /**
319
+ * Transport-close sentinel every pending request rejects with when the
320
+ * broker socket closes (the broker exits once its last session closes, so a
321
+ * caller racing its own teardown against that exit sees this message).
322
+ * Exported so the tray-handle destroy path can treat it as the desired end
323
+ * state instead of a failure (P3.6 quit-path finding, 2026-09-12).
324
+ */
325
+ declare const BROKER_CONNECTION_CLOSED_MESSAGE = "broker connection closed";
326
+ /**
327
+ * Generic transport-close rejection code for every pending deferred operation
328
+ * (add-ext-dialog section 5.1 frozen): the core client carries no extension-specific
329
+ * branch. Extension facades map this shared code onto their public surface
330
+ * (e.g. ext-dialog's `dialog_transport_closed`) - that mapping is facade work,
331
+ * never core work.
332
+ */
333
+ declare const EXTENSION_TRANSPORT_CLOSED_CODE = "extension_transport_closed";
334
+ /**
335
+ * Typed rejection every deferred operation settles with: the `error` payload
336
+ * branch of an `ext-operation-terminal` frame, or the generic
337
+ * `extension_transport_closed` rejection when the transport dies while an
338
+ * operation is pending. Consumers match on `code`; the human `message` is not
339
+ * a contract. `details` carries the wire error's structured payload when the
340
+ * extension supplied one.
341
+ */
342
+ declare class ExtensionOperationError extends Error {
343
+ readonly code: string;
344
+ readonly details?: unknown;
345
+ constructor(code: string, message: string, options?: {
346
+ details?: unknown;
347
+ cause?: unknown;
348
+ });
349
+ }
350
+ /**
351
+ * Typed handshake rejection for a Ready frame whose protocol version does not
352
+ * equal the version this client sent in its Init frame: a structurally valid
353
+ * Ready frame alone must never accept the session (add-ext-dialog batch A
354
+ * review P1-9). The message names both sides; consumers may match
355
+ * `instanceof` or the two numeric fields.
356
+ */
357
+ declare class BrokerProtocolVersionError extends Error {
358
+ readonly clientProtocolVersion: number;
359
+ readonly brokerProtocolVersion: number;
360
+ constructor(clientProtocolVersion: number, brokerProtocolVersion: number);
361
+ }
362
+ interface LocalBrokerClient extends OpenTrayTransport {
363
+ readonly endpoint: string;
364
+ readonly callerLabel: string;
365
+ readonly sessionId: string;
366
+ /**
367
+ * Terminal connection-death state (D3, harden-lifecycle-ownership): true
368
+ * once the broker socket errored or closed. Pending and future requests
369
+ * reject; event delivery has stopped.
370
+ */
371
+ readonly connectionDead: boolean;
372
+ /**
373
+ * Terminal connection-death notification; fires exactly once, either for a
374
+ * transport error or the transport-close sentinel, and also after a
375
+ * caller-initiated graceful `close()` completes.
376
+ */
377
+ onConnectionDead(listener: (error: Error) => void): () => void;
378
+ /**
379
+ * Internal deadline-expiry observation seam (W1, harden-transport-robustness):
380
+ * not consumer API. A supervision layer (Phase C heartbeat) subscribes to
381
+ * attribute probe failures — an expiry settles one call and never declares
382
+ * the transport dead, but it counts as one liveness-failure signal.
383
+ */
384
+ onDeadlineExpiry(listener: (expiry: TransportDeadlineExpiry) => void): () => void;
385
+ onEvent(listener: (frame: LocalRuntimeEventFrame) => void): () => void;
386
+ close(): Promise<void>;
387
+ }
388
+ /** Payload of the internal deadline-expiry seam: which call class budget expired. */
389
+ interface TransportDeadlineExpiry {
390
+ readonly requestId: RequestId;
391
+ readonly deadlineMs: number;
392
+ }
393
+ //#endregion
394
+ //#region src/transport-supervision.d.ts
395
+ /**
396
+ * Typed fail-fast rejection for every call issued after supervision reached
397
+ * its terminal `abandoned` state: the recovery budget is exhausted and the
398
+ * runtime stays headless by design (the consumer process keeps running).
399
+ * Consumers match on `code` (`transport_abandoned`); `details` carries the
400
+ * budget facts `{ recoveries, windowMs }`.
401
+ */
402
+ declare class TransportAbandonedError extends Error {
403
+ readonly code = "transport_abandoned";
404
+ readonly details: {
405
+ readonly recoveries: number;
406
+ readonly windowMs: number;
407
+ };
408
+ constructor(recoveries: number, windowMs: number);
409
+ }
410
+ /**
411
+ * Tier 0/2 recovery policy (W6). Every key has a working default; the whole
412
+ * object is optional — not configuring it means full default protection.
413
+ * Policy stays in the app; mechanism stays in the SDK.
414
+ */
415
+ interface TransportRecoveryOptions {
416
+ /**
417
+ * Master switch (default `true`). `false` degrades supervision to today's
418
+ * behavior plus heartbeat death detection: declared death stays terminal
419
+ * per connection, no respawn, no `recovering`/`abandoned` transitions.
420
+ */
421
+ enabled?: boolean;
422
+ /** Recovery attempts allowed per sliding `windowMs` (default 3). */
423
+ maxRestarts?: number;
424
+ /** Sliding budget window in milliseconds (default 600_000 = 10 min). */
425
+ windowMs?: number;
426
+ /** Cooldown before the first respawn attempt (default 1_000). */
427
+ cooldownMs?: number;
428
+ /** Multiplier applied to the cooldown after each failed attempt (default 2). */
429
+ backoffFactor?: number;
430
+ /** Backoff ceiling in milliseconds (default 30_000). */
431
+ backoffCapMs?: number;
432
+ /**
433
+ * Budget for one reconnect attempt (default 10 s). A connect factory that
434
+ * never settles counts as a failed attempt instead of parking the
435
+ * recovery loop; its late-resolving connection is closed on arrival.
436
+ */
437
+ connectTimeoutMs?: number;
438
+ /**
439
+ * Tier 2 hand-over (default: absent). When provided, an uninvited death
440
+ * performs a bounded teardown, invokes this callback exactly once, and goes
441
+ * terminal — the supervisor never performs in-process rebuild and never
442
+ * loops. The SDK never embeds app-process restart vectors itself.
443
+ */
444
+ restartApp?: () => void | Promise<void>;
445
+ }
446
+ /** Constructor tuning for {@link createTransportSupervisor}. */
447
+ interface CreateTransportSupervisorOptions {
448
+ /**
449
+ * Establishes one broker connection generation. Production callers close
450
+ * over `connectLocalBroker` with the caller's original options so a
451
+ * respawn is exactly a reconnect: daemon lifecycle, identity gates, and
452
+ * lock reclaim all reapply unchanged.
453
+ */
454
+ connect(): Promise<LocalBrokerClient>;
455
+ /** Idle gap before a health probe is sent (default 30 s). */
456
+ heartbeatIntervalMs?: number;
457
+ /** Per-probe deadline budget (default 3 s). */
458
+ probeDeadlineMs?: number;
459
+ /** Consecutive probe failures that declare death (default 3). */
460
+ heartbeatFailureThreshold?: number;
461
+ /** Recovery policy; every key defaulted (Tier 0). */
462
+ recovery?: TransportRecoveryOptions;
463
+ }
464
+ /**
465
+ * Supervised transport (W2/W4/W5/W6): a stable `OpenTrayConnection`-shaped
466
+ * proxy for the layers above (createClient, tray handles) that owns one
467
+ * broker connection per generation underneath. Consumer event subscriptions
468
+ * and the supervision state machine survive generation changes;
469
+ * per-connection surfaces (`onConnectionDead`) stay per-generation truth.
470
+ */
471
+ declare class SupervisedLocalBrokerConnection {
472
+ private readonly connectFactory;
473
+ private readonly heartbeatIntervalMs;
474
+ private readonly probeDeadlineMs;
475
+ private readonly heartbeatFailureThreshold;
476
+ private readonly recoveryEnabled;
477
+ private readonly maxRestarts;
478
+ private readonly recoveryWindowMs;
479
+ private readonly cooldownMs;
480
+ private readonly backoffFactor;
481
+ private readonly backoffCapMs;
482
+ private readonly connectTimeoutMs;
483
+ private readonly restartApp;
484
+ private connection;
485
+ private generation;
486
+ private state;
487
+ private journal;
488
+ private readonly eventListeners;
489
+ private readonly deadListeners;
490
+ private readonly stateListeners;
491
+ private readonly rebuildCallbacks;
492
+ private unwireGeneration;
493
+ private heartbeatTimer;
494
+ private heartbeatOrdinal;
495
+ private heartbeatInFlight;
496
+ private consecutiveHeartbeatFailures;
497
+ private lastSettledAt;
498
+ private restartTimestamps;
499
+ private callerInitiated;
500
+ /**
501
+ * Monotonic teardown epoch: `shutdown()` bumps it so an in-flight recovery
502
+ * attempt can detect that it raced caller-initiated teardown and abort
503
+ * instead of resurrecting a destroyed runtime (no candidate adoption, no
504
+ * `healthy` transition, no restarted heartbeat).
505
+ */
506
+ private teardownEpoch;
507
+ private shutdownPromise;
508
+ constructor(connectFactory: () => Promise<LocalBrokerClient>, options: CreateTransportSupervisorOptions);
509
+ /** Current supervision state; edge events go to {@link onTransportStateChange}. */
510
+ get transportState(): TransportState;
511
+ /** Monotonic generation counter; each respawn/replay increments it once. */
512
+ get transportGeneration(): number;
513
+ /** Current generation's endpoint (proxy; absent before the first connect). */
514
+ get endpoint(): string;
515
+ /** Current generation's caller label (proxy; absent before the first connect). */
516
+ get callerLabel(): string;
517
+ /**
518
+ * Current generation's broker session id. Read dynamically so extension
519
+ * contexts and rebuild callbacks can attribute session-owned state to the
520
+ * live generation (the id changes on every respawn).
521
+ */
522
+ get sessionId(): string;
523
+ /** True once the current generation's connection died (or none exists). */
524
+ get connectionDead(): boolean;
525
+ /**
526
+ * Establishes generation 0. A failure here propagates to the caller
527
+ * unchanged — supervision (heartbeat, recovery) only guards a connection
528
+ * that once existed; an app that never started is a plain startup failure.
529
+ */
530
+ connect(): Promise<void>;
531
+ /**
532
+ * Forwards one request to the current generation. After the terminal
533
+ * `abandoned` state every call fails fast with {@link TransportAbandonedError}.
534
+ * A teardown-budget call (`deadlineMs === TEARDOWN_CALL_DEADLINE_MS`) marks
535
+ * the supervision caller-initiated: Phase A froze the budget class as the
536
+ * caller-intent channel, so a socket close racing caller-initiated destroy
537
+ * can never be misread as uninvited death.
538
+ */
539
+ request(frame: ClientRequestFrame$1, options?: TransportRequestOptions): Promise<ServerFrame$1>;
540
+ /**
541
+ * Consumer event subscription that survives generation changes: each new
542
+ * generation's event stream fans out to the same listeners.
543
+ */
544
+ onEvent(listener: (frame: OpenTrayEventFrame) => void): () => void;
545
+ /**
546
+ * Per-connection death notification, forwarded for every generation (D3
547
+ * semantics preserved: consumers using it for per-connection cleanup keep
548
+ * working; the supervision state machine is the new higher-level truth).
549
+ */
550
+ onConnectionDead(listener: (error: Error) => void): () => void;
551
+ /**
552
+ * Tier 1 health projection (W6): edge-triggered `healthy | recovering |
553
+ * abandoned` transitions. The initial `healthy` state never fires —
554
+ * consumers reading the current state use `transportState`.
555
+ */
556
+ onTransportStateChange(listener: (state: TransportState) => void): () => void;
557
+ /**
558
+ * Registers one facade rebuild callback (W4). Callbacks run in
559
+ * registration order after the core journal replay on every successful
560
+ * recovery, receiving the fresh generation number and session id so
561
+ * session-attributed native state can be re-created against the live
562
+ * broker session.
563
+ */
564
+ registerTransportRebuild(rebuild: (context: TransportRebuildContext) => Promise<void>): void;
565
+ /**
566
+ * Graceful teardown channel (W4/W3): idempotent, marks the supervision
567
+ * caller-initiated synchronously (so the close-driven death event can
568
+ * never trigger recovery), bumps the teardown epoch (so an in-flight
569
+ * recovery attempt aborts instead of resurrecting the runtime), stops the
570
+ * heartbeat, then closes the current generation — including an
571
+ * adoption-in-progress candidate routed through `this.connection` —
572
+ * within its bounded graceful-close budget.
573
+ */
574
+ shutdown(): Promise<void>;
575
+ /** LocalBrokerClient structural compatibility: graceful close == shutdown. */
576
+ close(): Promise<void>;
577
+ private startHeartbeat;
578
+ private stopHeartbeat;
579
+ /**
580
+ * Idle-gated heartbeat (W2): a transport that keeps settling requests
581
+ * proves its own liveness, so the probe budget is spent only on silence.
582
+ * A probe failure of any rejection class (typed timeout, transport-lost,
583
+ * broker error frame) counts; a successful settlement resets the streak.
584
+ * Single-flight with a generation token: at most one probe per generation
585
+ * is outstanding (a configured interval shorter than the probe deadline
586
+ * must not run concurrent probes whose completions double-count), and a
587
+ * probe that outlives its generation settles nothing.
588
+ */
589
+ private heartbeatTick;
590
+ private noteSuccessfulSettlement;
591
+ /**
592
+ * Subscribes this supervisor's stable listener sets to one generation.
593
+ * Event fanout and the death/expiry seams are wired before the generation
594
+ * becomes `this.connection` (recovery candidates are wired before replay)
595
+ * so no observable event window opens between adoption steps.
596
+ */
597
+ private wireGeneration;
598
+ /**
599
+ * Death funnel: forwards the per-connection event first (D3 truth), stops
600
+ * this generation's wiring, then decides the supervision reaction. The
601
+ * state guard makes the reaction single-flight — deaths of candidates
602
+ * during an ongoing recovery only forward, they never nest recoveries.
603
+ */
604
+ private handleGenerationDeath;
605
+ /**
606
+ * Tier 2 hand-over: bounded teardown of the current generation, the app's
607
+ * restart vector invoked exactly once, then terminal. No in-process
608
+ * rebuild, no loop — restart ownership belongs to the callback.
609
+ */
610
+ private handOverToRestartApp;
611
+ /**
612
+ * In-process recovery (W4/W5): cooldown backoff → reconnect through the
613
+ * original connect options → journal replay → facade rebuilds → healthy.
614
+ * Every attempt consumes budget up front; a failed attempt (connect,
615
+ * replay, or rebuild — including artifact identity mismatches) retries
616
+ * inside the remaining budget until exhaustion abandons the runtime. Each
617
+ * reconnect attempt is bounded by the connect budget, and every step
618
+ * re-checks the teardown epoch so a shutdown racing the loop aborts it
619
+ * instead of resurrecting the runtime.
620
+ */
621
+ private runRecovery;
622
+ /**
623
+ * One reconnect attempt under the connect budget. A factory that never
624
+ * settles counts as a failed attempt; a connection arriving after the
625
+ * budget expired is closed on arrival so no orphan generation leaks.
626
+ */
627
+ private connectWithBudget;
628
+ private cooldownForBackoff;
629
+ /**
630
+ * Sliding-window budget: one timestamp per respawn attempt (successful or
631
+ * not — both are respawns the consumer experienced). In-memory per
632
+ * supervisor by ruling; a fresh `createTray` starts a fresh budget.
633
+ */
634
+ private consumeRestartBudget;
635
+ /**
636
+ * Wires the candidate generation, replays the journal, and runs the
637
+ * facade rebuild callbacks. The candidate becomes `this.connection` for
638
+ * the adoption's duration — facade rebuild callbacks route their
639
+ * re-creation commands through this supervisor, so they must reach the
640
+ * candidate, not the dead generation (the rebuild-routing law). A failure
641
+ * rolls the candidate back out (unwired, closed) and restores the dead
642
+ * previous connection so consumer calls keep failing fast; a teardown
643
+ * racing the adoption aborts without resurrecting anything.
644
+ */
645
+ private adoptGeneration;
646
+ /**
647
+ * Removes a failed (or torn-down) adoption candidate: stop its wiring,
648
+ * close it bounded, and restore the previous dead connection unless a
649
+ * caller-initiated shutdown already dissolved the runtime (shutdown's own
650
+ * close handled the candidate in that window; the restore must not undo
651
+ * the torn-down state).
652
+ */
653
+ private rollbackAdoption;
654
+ /**
655
+ * Replays the declarative journal in record order with fresh request ids
656
+ * under the bootstrap deadline class. The resolved default app of the new
657
+ * generation becomes the appId authority: replayed frames are rewritten
658
+ * onto it, so app-scoped state follows broker truth instead of a stale
659
+ * generation's identity.
660
+ */
661
+ private replayJournal;
662
+ private setState;
663
+ private commitJournalEntry;
664
+ /**
665
+ * Keyed entries replace in place at first-occurrence position (last-write-
666
+ * wins value, stable ordering); first occurrences append. Tray creations
667
+ * and mount declarations keep their creation order by construction.
668
+ */
669
+ private upsertJournal;
670
+ private evictJournalTray;
671
+ }
672
+ /** Constructs a supervised transport around one connect factory. */
673
+ declare const createTransportSupervisor: (options: CreateTransportSupervisorOptions) => SupervisedLocalBrokerConnection;
674
+ //#endregion
241
675
  //#region src/menu-input.d.ts
242
676
  type CreateTrayMenuClickHandler = (event: TrayEventByType<"menuClick">) => void;
243
677
  /** App-facing menu input accepted by top-level createTray and setMenu. */
@@ -296,6 +730,15 @@ interface OpenTrayRuntimeOptions {
296
730
  /** Stable app-entry launch vector. Omitted/null snapshots the current invocation. */
297
731
  appLaunch?: OpenTrayAppLaunchOptions$1 | null;
298
732
  autoStart?: boolean;
733
+ /**
734
+ * Optional transport supervision policy (Tier 0/2,
735
+ * harden-transport-robustness). Every key has a working default; omitting
736
+ * the object entirely means full default protection: heartbeat death
737
+ * detection, automatic in-process recovery with journal replay, and a
738
+ * bounded restart budget. `enabled: false` keeps death detection but
739
+ * degrades to today's fail-fast behavior.
740
+ */
741
+ recovery?: TransportRecoveryOptions;
299
742
  }
300
743
  /** App-facing tray options accepted by top-level createTray. */
301
744
  interface CreateTrayOptions {
@@ -312,52 +755,6 @@ interface CreateTrayHandle extends Omit<EventfulTrayHandle, "setMenu" | "extend"
312
755
  }
313
756
  declare const createTray: (options: CreateTrayOptions, runtimeOptions?: OpenTrayRuntimeOptions) => Promise<CreateTrayHandle>;
314
757
  //#endregion
315
- //#region src/local-broker.d.ts
316
- /**
317
- * Transport-close sentinel every pending request rejects with when the
318
- * broker socket closes (the broker exits once its last session closes, so a
319
- * caller racing its own teardown against that exit sees this message).
320
- * Exported so the tray-handle destroy path can treat it as the desired end
321
- * state instead of a failure (P3.6 quit-path finding, 2026-09-12).
322
- */
323
- declare const BROKER_CONNECTION_CLOSED_MESSAGE = "broker connection closed";
324
- /**
325
- * Generic transport-close rejection code for every pending deferred operation
326
- * (add-ext-dialog section 5.1 frozen): the core client carries no extension-specific
327
- * branch. Extension facades map this shared code onto their public surface
328
- * (e.g. ext-dialog's `dialog_transport_closed`) - that mapping is facade work,
329
- * never core work.
330
- */
331
- declare const EXTENSION_TRANSPORT_CLOSED_CODE = "extension_transport_closed";
332
- /**
333
- * Typed rejection every deferred operation settles with: the `error` payload
334
- * branch of an `ext-operation-terminal` frame, or the generic
335
- * `extension_transport_closed` rejection when the transport dies while an
336
- * operation is pending. Consumers match on `code`; the human `message` is not
337
- * a contract. `details` carries the wire error's structured payload when the
338
- * extension supplied one.
339
- */
340
- declare class ExtensionOperationError extends Error {
341
- readonly code: string;
342
- readonly details?: unknown;
343
- constructor(code: string, message: string, options?: {
344
- details?: unknown;
345
- cause?: unknown;
346
- });
347
- }
348
- /**
349
- * Typed handshake rejection for a Ready frame whose protocol version does not
350
- * equal the version this client sent in its Init frame: a structurally valid
351
- * Ready frame alone must never accept the session (add-ext-dialog batch A
352
- * review P1-9). The message names both sides; consumers may match
353
- * `instanceof` or the two numeric fields.
354
- */
355
- declare class BrokerProtocolVersionError extends Error {
356
- readonly clientProtocolVersion: number;
357
- readonly brokerProtocolVersion: number;
358
- constructor(clientProtocolVersion: number, brokerProtocolVersion: number);
359
- }
360
- //#endregion
361
758
  //#region src/app-icon.d.ts
362
759
  declare const DEFAULT_APP_ICON_VARIANT: "default";
363
760
  declare class InvalidAppIconError extends Error {
@@ -373,5 +770,5 @@ declare class AppIconVariantNotFoundError extends Error {
373
770
  /** Validate an explicit AppIcon, including native file signatures, before broker startup. */
374
771
  declare const validateAppIcon: (icon: unknown, platform?: NodeJS.Platform) => Promise<void>;
375
772
  //#endregion
376
- export { type AppEvent, type AppHandle, type AppIcon, type AppIconAsset, type AppIconSource, type AppIconVariant, AppIconVariantNotFoundError, type AppIconVariantOf, type AppId, type AppIdentity, type AppOptions, type AppRef, BROKER_CONNECTION_CLOSED_MESSAGE, type BrokerEndpointIdentity, type BrokerEndpointIdentityOptions, BrokerProtocolVersionError, BrokerServerError, type ClientFrame, type ClientRequestFrame, type CommandScope, type CreateClientOptions, type CreateTrayCheckItem, type CreateTrayHandle, type CreateTrayItem, type CreateTrayMenu, type CreateTrayMenu as TrayMenu, type CreateTrayMenuClickHandler, type CreateTrayMenuItem, type CreateTrayOptions, type CreateTrayRadioItem, type CreateTraySeparatorItem, type CreateTraySubmenuItem, DEFAULT_APP_ICON_VARIANT, type DarwinIcon, type DarwinIconText, EMBEDDED_STAGING_MANIFEST_PATH, EXTENSION_EVENT_RECORD_MAX_BYTES, EXTENSION_TRANSPORT_CLOSED_CODE, type EventfulTrayHandle, type ExpectedExtensionIdentity, type ExtOperationPayload, type ExtensionArtifactTarget, type ExtensionEnvelope, type ExtensionLoadOptions, ExtensionOperationError, type ExtensionRequestResult, type Icon, type IconCandidates, type IconImage, type IconText, InvalidAppIconError, type LinuxIcon, type Menu, type MenuItem, type MenuItemId, type MouseButton, NATIVE_EXTENSION_EMBEDDED_ERROR_CODES, NATIVE_EXTENSION_EMBEDDED_TARGET_MATRIX, type NativeExtensionArch, type NativeExtensionArtifact, NativeExtensionArtifactResolutionError, type NativeExtensionEmbeddedArtifact, NativeExtensionEmbeddedArtifactError, type NativeExtensionEmbeddedErrorReason, type NativeExtensionEmbeddedMatrixTarget, type NativeExtensionEmbeddedTarget, type NativeExtensionExpectedIdentity, type NativeExtensionFileArtifact, type NativeExtensionIdentitySource, type NativeExtensionPackageArtifact, type NativeExtensionPackageTarget, type NativeExtensionTarget, type OpenTrayAppBundleOptions, type OpenTrayAppLaunchOptions, type OpenTrayClient, type OpenTrayConnection, type OpenTrayEventFrame, type OpenTrayEventSource, type OpenTrayRuntimeOptions, type OpenTrayTransport, PROTOCOL_VERSION, type Rect, type ResolvedNativeExtensionArtifact, type ServerFrame, type SimpleIcon, type Tooltip, type TrayBoundsKind, type TrayBoundsResult, type TrayEvent, type TrayEventByType, type TrayEventType, type TrayExtension, type TrayExtensionContext, type TrayExtensionMountSpec, type TrayHandle, type TrayIcon, type TrayId, type TrayOptions, type TrayTooltip, type TypedExtensionError, type Win32Icon, createBrokerEndpointIdentity, createClient, createInitFrame, createTray, createTrayHandle, formatBrokerEndpointName, formatBrokerStateRoot, formatUnixSocketPath, formatWindowsPipeName, isSupportedProtocolVersion, resolveNativeExtensionArtifact, validateAppIcon };
773
+ export { type AppEvent, type AppHandle, type AppIcon, type AppIconAsset, type AppIconSource, type AppIconVariant, AppIconVariantNotFoundError, type AppIconVariantOf, type AppId, type AppIdentity, type AppOptions, type AppRef, BOOTSTRAP_CALL_DEADLINE_MS, BROKER_CONNECTION_CLOSED_MESSAGE, type BrokerEndpointIdentity, type BrokerEndpointIdentityOptions, BrokerProtocolVersionError, BrokerServerError, type ClientFrame, type ClientRequestFrame, type CommandScope, type CreateClientOptions, type CreateTransportSupervisorOptions, type CreateTrayCheckItem, type CreateTrayHandle, type CreateTrayItem, type CreateTrayMenu, type CreateTrayMenu as TrayMenu, type CreateTrayMenuClickHandler, type CreateTrayMenuItem, type CreateTrayOptions, type CreateTrayRadioItem, type CreateTraySeparatorItem, type CreateTraySubmenuItem, DEFAULT_APP_ICON_VARIANT, type DarwinIcon, type DarwinIconText, EMBEDDED_STAGING_MANIFEST_PATH, EXTENSION_EVENT_RECORD_MAX_BYTES, EXTENSION_TRANSPORT_CLOSED_CODE, type EventfulTrayHandle, type ExpectedExtensionIdentity, type ExtOperationPayload, type ExtensionArtifactTarget, type ExtensionEnvelope, type ExtensionLoadOptions, ExtensionOperationError, type ExtensionRequestResult, INTERACTIVE_CALL_DEADLINE_MS, type Icon, type IconCandidates, type IconImage, type IconText, InvalidAppIconError, type LinuxIcon, type Menu, type MenuItem, type MenuItemId, type MouseButton, NATIVE_EXTENSION_EMBEDDED_ERROR_CODES, NATIVE_EXTENSION_EMBEDDED_TARGET_MATRIX, type NativeExtensionArch, type NativeExtensionArtifact, NativeExtensionArtifactResolutionError, type NativeExtensionEmbeddedArtifact, NativeExtensionEmbeddedArtifactError, type NativeExtensionEmbeddedErrorReason, type NativeExtensionEmbeddedMatrixTarget, type NativeExtensionEmbeddedTarget, type NativeExtensionExpectedIdentity, type NativeExtensionFileArtifact, type NativeExtensionIdentitySource, type NativeExtensionPackageArtifact, type NativeExtensionPackageTarget, type NativeExtensionTarget, type OpenTrayAppBundleOptions, type OpenTrayAppLaunchOptions, type OpenTrayClient, type OpenTrayConnection, type OpenTrayEventFrame, type OpenTrayEventSource, type OpenTrayRuntimeOptions, type OpenTrayTransport, PROTOCOL_VERSION, type Rect, type ResolvedNativeExtensionArtifact, type ServerFrame, type SimpleIcon, type SupervisedLocalBrokerConnection, TEARDOWN_CALL_DEADLINE_MS, type Tooltip, TransportAbandonedError, type TransportRebuildContext, type TransportRecoveryOptions, type TransportRequestOptions, type TransportState, TransportTimeoutError, type TrayBoundsKind, type TrayBoundsResult, type TrayEvent, type TrayEventByType, type TrayEventType, type TrayExtension, type TrayExtensionContext, type TrayExtensionMountSpec, type TrayHandle, type TrayIcon, type TrayId, type TrayOptions, type TrayTooltip, type TypedExtensionError, type Win32Icon, createBrokerEndpointIdentity, createClient, createInitFrame, createTransportSupervisor, createTray, createTrayHandle, formatBrokerEndpointName, formatBrokerStateRoot, formatUnixSocketPath, formatWindowsPipeName, isSupportedProtocolVersion, resolveNativeExtensionArtifact, validateAppIcon };
377
774
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/native-extension-artifact.ts","../src/client.ts","../src/menu-input.ts","../src/sdk.ts","../src/local-broker.ts","../src/app-icon.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/native-extension-artifact.ts","../src/client.ts","../src/local-broker.ts","../src/transport-supervision.ts","../src/menu-input.ts","../src/sdk.ts","../src/app-icon.ts"],"mappings":"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"}