unity-open-mcp 0.9.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/asmdef-discovery.d.ts +35 -0
- package/dist/asmdef-discovery.js +171 -0
- package/dist/asmdef-discovery.js.map +1 -0
- package/dist/batch-spawn.d.ts +27 -0
- package/dist/batch-spawn.js +218 -24
- package/dist/batch-spawn.js.map +1 -1
- package/dist/capabilities/build-capabilities.d.ts +10 -0
- package/dist/capabilities/build-capabilities.js +4 -0
- package/dist/capabilities/build-capabilities.js.map +1 -1
- package/dist/capabilities/capabilities-view.d.ts +48 -0
- package/dist/capabilities/capabilities-view.js +93 -0
- package/dist/capabilities/capabilities-view.js.map +1 -0
- package/dist/capabilities/intent-groups.js +42 -0
- package/dist/capabilities/intent-groups.js.map +1 -1
- package/dist/capabilities/rule-catalog.js +7 -1
- package/dist/capabilities/rule-catalog.js.map +1 -1
- package/dist/capabilities/tool-groups.js +37 -2
- package/dist/capabilities/tool-groups.js.map +1 -1
- package/dist/child-supervision.d.ts +34 -0
- package/dist/child-supervision.js +110 -0
- package/dist/child-supervision.js.map +1 -0
- package/dist/cli/cli.js +9 -0
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/commands.js +37 -4
- package/dist/cli/commands.js.map +1 -1
- package/dist/compressible-router.js +12 -1
- package/dist/compressible-router.js.map +1 -1
- package/dist/constants.d.ts +31 -1
- package/dist/constants.js +31 -1
- package/dist/constants.js.map +1 -1
- package/dist/dialog-dismiss.d.ts +11 -0
- package/dist/dialog-dismiss.js +59 -4
- package/dist/dialog-dismiss.js.map +1 -1
- package/dist/editor-wedge.d.ts +45 -0
- package/dist/editor-wedge.js +111 -0
- package/dist/editor-wedge.js.map +1 -0
- package/dist/event-stream.d.ts +19 -6
- package/dist/event-stream.js +139 -17
- package/dist/event-stream.js.map +1 -1
- package/dist/gate-error.d.ts +2 -0
- package/dist/gate-error.js +9 -0
- package/dist/gate-error.js.map +1 -1
- package/dist/instance-discovery.d.ts +23 -0
- package/dist/instance-discovery.js +47 -1
- package/dist/instance-discovery.js.map +1 -1
- package/dist/live-client.d.ts +40 -5
- package/dist/live-client.js +254 -36
- package/dist/live-client.js.map +1 -1
- package/dist/offline/api.js +82 -30
- package/dist/offline/api.js.map +1 -1
- package/dist/offline/index-builders.d.ts +9 -0
- package/dist/offline/index-builders.js +58 -8
- package/dist/offline/index-builders.js.map +1 -1
- package/dist/offline/parse.js +5 -1
- package/dist/offline/parse.js.map +1 -1
- package/dist/process-diagnostics.d.ts +101 -19
- package/dist/process-diagnostics.js +197 -59
- package/dist/process-diagnostics.js.map +1 -1
- package/dist/project-settings.d.ts +36 -0
- package/dist/project-settings.js +96 -0
- package/dist/project-settings.js.map +1 -0
- package/dist/results.d.ts +8 -0
- package/dist/results.js +4 -1
- package/dist/results.js.map +1 -1
- package/dist/routers.js +4 -1
- package/dist/routers.js.map +1 -1
- package/dist/running-unity.d.ts +23 -0
- package/dist/running-unity.js +60 -0
- package/dist/running-unity.js.map +1 -1
- package/dist/server.js +8 -2
- package/dist/server.js.map +1 -1
- package/dist/stale-assembly-cache.d.ts +40 -0
- package/dist/stale-assembly-cache.js +76 -0
- package/dist/stale-assembly-cache.js.map +1 -0
- package/dist/tool-hint.d.ts +36 -0
- package/dist/tool-hint.js +98 -0
- package/dist/tool-hint.js.map +1 -0
- package/dist/tool-router.d.ts +47 -2
- package/dist/tool-router.js +652 -71
- package/dist/tool-router.js.map +1 -1
- package/dist/tools/agent-capabilities.js +27 -1
- package/dist/tools/agent-capabilities.js.map +1 -1
- package/dist/tools/baseline-create.js +1 -1
- package/dist/tools/baseline-create.js.map +1 -1
- package/dist/tools/batch-execute.js +12 -1
- package/dist/tools/batch-execute.js.map +1 -1
- package/dist/tools/bridge-status.js +21 -1
- package/dist/tools/bridge-status.js.map +1 -1
- package/dist/tools/capture-inline.js +4 -3
- package/dist/tools/capture-inline.js.map +1 -1
- package/dist/tools/editor-status.js +7 -2
- package/dist/tools/editor-status.js.map +1 -1
- package/dist/tools/execute-csharp.js +36 -3
- package/dist/tools/execute-csharp.js.map +1 -1
- package/dist/tools/execute-menu.js +33 -2
- package/dist/tools/execute-menu.js.map +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +44 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inputsim-key.d.ts +40 -0
- package/dist/tools/inputsim-key.js +72 -0
- package/dist/tools/inputsim-key.js.map +1 -0
- package/dist/tools/inputsim-pointer.d.ts +40 -0
- package/dist/tools/inputsim-pointer.js +121 -0
- package/dist/tools/inputsim-pointer.js.map +1 -0
- package/dist/tools/inputsim-pointer3d.d.ts +40 -0
- package/dist/tools/inputsim-pointer3d.js +55 -0
- package/dist/tools/inputsim-pointer3d.js.map +1 -0
- package/dist/tools/inputsim-probe.d.ts +40 -0
- package/dist/tools/inputsim-probe.js +43 -0
- package/dist/tools/inputsim-probe.js.map +1 -0
- package/dist/tools/inputsim-step.d.ts +40 -0
- package/dist/tools/inputsim-step.js +50 -0
- package/dist/tools/inputsim-step.js.map +1 -0
- package/dist/tools/inputsim-touch.d.ts +40 -0
- package/dist/tools/inputsim-touch.js +83 -0
- package/dist/tools/inputsim-touch.js.map +1 -0
- package/dist/tools/invoke-method.js +15 -1
- package/dist/tools/invoke-method.js.map +1 -1
- package/dist/tools/memory-snapshot-capture.js +11 -5
- package/dist/tools/memory-snapshot-capture.js.map +1 -1
- package/dist/tools/pull-events.js +18 -10
- package/dist/tools/pull-events.js.map +1 -1
- package/dist/tools/read-compile-errors.js +36 -7
- package/dist/tools/read-compile-errors.js.map +1 -1
- package/dist/tools/regression-check.js +2 -1
- package/dist/tools/regression-check.js.map +1 -1
- package/dist/tools/resource-pressure.js +21 -10
- package/dist/tools/resource-pressure.js.map +1 -1
- package/dist/tools/run-tests.js +11 -2
- package/dist/tools/run-tests.js.map +1 -1
- package/dist/tools/scan-all.js +2 -2
- package/dist/tools/scan-all.js.map +1 -1
- package/dist/tools/screenshot-window.js +18 -12
- package/dist/tools/screenshot-window.js.map +1 -1
- package/dist/tools/screenshot.js +13 -6
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/visual-compare.d.ts +40 -0
- package/dist/tools/visual-compare.js +98 -0
- package/dist/tools/visual-compare.js.map +1 -0
- package/dist/unity-log.d.ts +67 -2
- package/dist/unity-log.js +206 -8
- package/dist/unity-log.js.map +1 -1
- package/package.json +1 -1
package/dist/event-stream.js
CHANGED
|
@@ -12,6 +12,12 @@
|
|
|
12
12
|
// reader once and is a no-op afterwards.
|
|
13
13
|
// - The reader reconnects with the last subscriber id so it keeps its cursor
|
|
14
14
|
// across disconnects (a 10-minute SSE timeout or a Unity domain reload).
|
|
15
|
+
// Reconnects back off exponentially (2s doubling to a 30s cap, reset after
|
|
16
|
+
// a successful connect) so a dead bridge is not hammered forever, and each
|
|
17
|
+
// attempt re-reads the instance lock first: the bridge mints a fresh token
|
|
18
|
+
// on every Acquire (domain reload / editor restart), so the reader must
|
|
19
|
+
// pick up the new port+token instead of going permanently 401 with the
|
|
20
|
+
// construction-time credentials.
|
|
15
21
|
// - On bridge-unavailable (connection refused), ensureSubscription records
|
|
16
22
|
// the failure and the tool surfaces a `bridge_unavailable` error to the
|
|
17
23
|
// agent instead of hanging.
|
|
@@ -19,10 +25,13 @@
|
|
|
19
25
|
// No new runtime deps — uses only `node:crypto`, the global `fetch`, and the
|
|
20
26
|
// `node:events` API.
|
|
21
27
|
import { randomBytes } from "node:crypto";
|
|
28
|
+
import { resolveRefreshedEndpoint } from "./instance-discovery.js";
|
|
22
29
|
const QUEUE_CAPACITY = 500;
|
|
30
|
+
/** First reconnect delay; doubles on each consecutive failure. */
|
|
31
|
+
const RECONNECT_BASE_DELAY_MS = 2000;
|
|
32
|
+
/** Backoff ceiling — consecutive failures never wait longer than this. */
|
|
33
|
+
const RECONNECT_MAX_DELAY_MS = 30_000;
|
|
23
34
|
export class BridgeEventStream {
|
|
24
|
-
baseUrl;
|
|
25
|
-
authToken;
|
|
26
35
|
subscriberId;
|
|
27
36
|
queue = [];
|
|
28
37
|
dropped = 0;
|
|
@@ -31,14 +40,41 @@ export class BridgeEventStream {
|
|
|
31
40
|
abortController = null;
|
|
32
41
|
reconnectTimer = null;
|
|
33
42
|
started = false;
|
|
43
|
+
// Current reconnect delay — doubles in scheduleReconnect() on each
|
|
44
|
+
// consecutive failure and resets to RECONNECT_BASE_DELAY_MS once a connect
|
|
45
|
+
// succeeds. Plain 2s-forever meant a dead/stale-token bridge was retried
|
|
46
|
+
// ~1800 times/hour for the whole process lifetime.
|
|
47
|
+
reconnectDelayMs = RECONNECT_BASE_DELAY_MS;
|
|
34
48
|
// True after stop() so the pump's finally/catch know not to schedule a
|
|
35
49
|
// reconnect for the AbortError they observe when the stream is torn down.
|
|
36
50
|
stopped = false;
|
|
37
|
-
|
|
51
|
+
// feedback #8 (2026-08-10) — per-subscriber read cursors over the shared
|
|
52
|
+
// queue. The bridge SSE reader is a single process-wide subscription (one
|
|
53
|
+
// queue), but each `pull_events` caller can name its own subscriber id.
|
|
54
|
+
// Without a per-subscriber cursor every caller drained the SAME FIFO queue,
|
|
55
|
+
// so a fresh subscriber name replayed the entire accumulated backlog
|
|
56
|
+
// (sometimes hours of history across editor restarts) instead of returning
|
|
57
|
+
// `started:true` with empty events as the contract promises. `cursors` maps
|
|
58
|
+
// a subscriber id → its next-read index into `queue`; a brand-new subscriber
|
|
59
|
+
// is initialised to the current queue tail (the high-water mark) so it only
|
|
60
|
+
// sees events emitted AFTER its first pull.
|
|
61
|
+
cursors = new Map();
|
|
62
|
+
// baseUrl/authToken are mutable: connect() re-resolves them from the
|
|
63
|
+
// instance lock (resolveRefreshedEndpoint) because the bridge rotates its
|
|
64
|
+
// bearer token on every domain reload / editor restart. projectPath/envPort
|
|
65
|
+
// feed that refresh; envPort in force means env is authoritative and the
|
|
66
|
+
// refresh is a no-op (same precedence as LiveClient).
|
|
67
|
+
baseUrl;
|
|
68
|
+
authToken;
|
|
69
|
+
projectPath;
|
|
70
|
+
envPort;
|
|
71
|
+
constructor(baseUrl, subscriberId, authToken, projectPath, envPort) {
|
|
38
72
|
this.baseUrl = baseUrl;
|
|
39
|
-
this.authToken = authToken;
|
|
40
73
|
this.subscriberId =
|
|
41
74
|
subscriberId ?? randomBytes(16).toString("hex");
|
|
75
|
+
this.authToken = authToken;
|
|
76
|
+
this.projectPath = projectPath;
|
|
77
|
+
this.envPort = envPort;
|
|
42
78
|
}
|
|
43
79
|
/**
|
|
44
80
|
* Start the SSE reader if it isn't running. Safe to call repeatedly; returns
|
|
@@ -57,6 +93,17 @@ export class BridgeEventStream {
|
|
|
57
93
|
// (Re)starting after a stop() — clear the stopped flag so genuine failures
|
|
58
94
|
// can drive reconnects again.
|
|
59
95
|
this.stopped = false;
|
|
96
|
+
// The bridge mints a fresh token on every Acquire (domain reload /
|
|
97
|
+
// editor restart), so the construction-time credentials go stale
|
|
98
|
+
// mid-session. Re-read the instance lock so this reconnect targets the
|
|
99
|
+
// CURRENT port+token instead of hammering a live listener with 401s
|
|
100
|
+
// until the process exits. No-op without a projectPath or when an
|
|
101
|
+
// env-port override is in force.
|
|
102
|
+
const refreshed = resolveRefreshedEndpoint(this.projectPath, this.envPort, this.baseUrl, this.authToken);
|
|
103
|
+
if (refreshed) {
|
|
104
|
+
this.baseUrl = refreshed.baseUrl;
|
|
105
|
+
this.authToken = refreshed.authToken;
|
|
106
|
+
}
|
|
60
107
|
this.abortController = new AbortController();
|
|
61
108
|
const url = `${this.baseUrl}/events?subscriber=${encodeURIComponent(this.subscriberId)}&max_per_poll=100`;
|
|
62
109
|
// SSE read is streaming; consume body manually so we can split on
|
|
@@ -72,10 +119,20 @@ export class BridgeEventStream {
|
|
|
72
119
|
})
|
|
73
120
|
.then((res) => {
|
|
74
121
|
if (!res.ok || !res.body) {
|
|
122
|
+
// Cancel the unconsumed body before throwing: undici keeps the
|
|
123
|
+
// socket (and its fd) out of the keep-alive pool until the
|
|
124
|
+
// Response is garbage-collected, so dropping it on every failed
|
|
125
|
+
// reconnect (a stale token yields one 401 per retry) accumulated
|
|
126
|
+
// abandoned sockets for the whole process lifetime.
|
|
127
|
+
if (res.body)
|
|
128
|
+
void res.body.cancel().catch(() => { });
|
|
75
129
|
throw new Error(`HTTP ${res.status}`);
|
|
76
130
|
}
|
|
77
131
|
this.connected = true;
|
|
78
132
|
this.lastError = null;
|
|
133
|
+
// A successful connect ends any backoff streak — the next failure
|
|
134
|
+
// starts again from the base delay.
|
|
135
|
+
this.reconnectDelayMs = RECONNECT_BASE_DELAY_MS;
|
|
79
136
|
this.pump(res.body);
|
|
80
137
|
})
|
|
81
138
|
.catch((err) => {
|
|
@@ -197,41 +254,101 @@ export class BridgeEventStream {
|
|
|
197
254
|
if (excess > 0) {
|
|
198
255
|
this.queue.splice(0, excess);
|
|
199
256
|
this.dropped += excess;
|
|
257
|
+
// feedback #8 — eviction shifts every queue index down by `excess`. Keep
|
|
258
|
+
// per-subscriber cursors valid by subtracting the same amount (floored at
|
|
259
|
+
// 0); a cursor that pointed at an evicted event simply re-aligns to the
|
|
260
|
+
// new head, so the subscriber sees the oldest surviving event next.
|
|
261
|
+
if (this.cursors.size > 0) {
|
|
262
|
+
for (const [id, pos] of this.cursors) {
|
|
263
|
+
this.cursors.set(id, Math.max(0, pos - excess));
|
|
264
|
+
}
|
|
265
|
+
}
|
|
200
266
|
}
|
|
201
267
|
}
|
|
202
268
|
scheduleReconnect() {
|
|
203
269
|
if (this.reconnectTimer)
|
|
204
270
|
return;
|
|
271
|
+
const delay = this.reconnectDelayMs;
|
|
205
272
|
this.reconnectTimer = setTimeout(() => {
|
|
206
273
|
this.reconnectTimer = null;
|
|
207
274
|
this.abortController = null;
|
|
208
275
|
this.connect();
|
|
209
|
-
},
|
|
276
|
+
}, delay);
|
|
277
|
+
// A pending reconnect must not keep the Node event loop alive after the
|
|
278
|
+
// MCP host closes stdio — without the MCP server ever calling stop() on
|
|
279
|
+
// this path, an un-unref'd timer chained forever left an orphaned node
|
|
280
|
+
// process behind every host session.
|
|
281
|
+
this.reconnectTimer.unref?.();
|
|
282
|
+
// Exponential backoff: 2s → 4s → … → 30s cap. The delay resets to the
|
|
283
|
+
// base on the next successful connect (see connect()).
|
|
284
|
+
this.reconnectDelayMs = Math.min(this.reconnectDelayMs * 2, RECONNECT_MAX_DELAY_MS);
|
|
210
285
|
}
|
|
211
286
|
/** Drain all queued events. The subscription keeps running. */
|
|
212
287
|
drain(maxEvents) {
|
|
213
288
|
const cap = maxEvents > 0 && maxEvents <= 1000 ? maxEvents : 100;
|
|
214
289
|
const out = this.queue.slice(0, cap);
|
|
215
290
|
this.queue = this.queue.slice(cap);
|
|
291
|
+
// feedback #8 cursor fix-up, second site: `slice(cap)` removes `cap` items
|
|
292
|
+
// from the FRONT of the queue, shifting every index down — exactly like
|
|
293
|
+
// enqueue()'s eviction `splice(0, excess)`. The eviction path decrements
|
|
294
|
+
// every named-subscriber cursor; this legacy drain path did not, so a
|
|
295
|
+
// legacy `pull()` (no subscriber) interleaved with an active named
|
|
296
|
+
// subscriber left that subscriber's cursor pointing past the new tail and
|
|
297
|
+
// silently skipped/dropped the events the legacy pull drained. Mirror the
|
|
298
|
+
// eviction fix-up so both front-removal sites keep cursors valid.
|
|
299
|
+
if (cap > 0 && this.cursors.size > 0) {
|
|
300
|
+
for (const [id, pos] of this.cursors) {
|
|
301
|
+
this.cursors.set(id, Math.max(0, pos - cap));
|
|
302
|
+
}
|
|
303
|
+
}
|
|
216
304
|
return out;
|
|
217
305
|
}
|
|
218
|
-
/** One-shot pull: start the subscription if needed and drain.
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
306
|
+
/** One-shot pull: start the subscription if needed and drain.
|
|
307
|
+
*
|
|
308
|
+
* feedback #8 — passing an explicit `subscriberId` selects a per-subscriber
|
|
309
|
+
* read cursor over the shared queue. A brand-new named subscriber is
|
|
310
|
+
* initialised to the current queue tail, so its FIRST pull returns
|
|
311
|
+
* `started:true` with an empty event list — it only sees events emitted
|
|
312
|
+
* after it subscribed (no backlog replay). A returning named subscriber
|
|
313
|
+
* resumes from its saved cursor. Omitting `subscriberId` preserves the
|
|
314
|
+
* legacy shared-cursor behaviour (drain whatever has accumulated), used by
|
|
315
|
+
* callers that do not name a subscriber. */
|
|
316
|
+
pull(maxEvents, subscriberId) {
|
|
317
|
+
const subStarted = this.ensureSubscription();
|
|
318
|
+
// Legacy shared-cursor path: no per-subscriber cursor, drain the whole
|
|
319
|
+
// queue as before. Existing callers (and the overflow tests) rely on the
|
|
320
|
+
// first pull returning whatever has accumulated.
|
|
321
|
+
if (!subscriberId || subscriberId.length === 0) {
|
|
322
|
+
const events = this.drain(maxEvents);
|
|
323
|
+
const dropped = this.dropped;
|
|
324
|
+
this.dropped = 0;
|
|
325
|
+
return {
|
|
326
|
+
subscriberId: this.subscriberId,
|
|
327
|
+
events,
|
|
328
|
+
dropped,
|
|
329
|
+
connected: this.connected,
|
|
330
|
+
started: subStarted,
|
|
331
|
+
lastError: this.lastError,
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
// Named-subscriber path: a fresh subscriber starts at the high-water mark
|
|
335
|
+
// (queue tail); history before its first pull is NOT replayed. `started`
|
|
336
|
+
// reflects THIS subscriber's first pull.
|
|
337
|
+
const isNew = !this.cursors.has(subscriberId);
|
|
338
|
+
if (isNew)
|
|
339
|
+
this.cursors.set(subscriberId, this.queue.length);
|
|
340
|
+
const cap = maxEvents > 0 && maxEvents <= 1000 ? maxEvents : 100;
|
|
341
|
+
const from = this.cursors.get(subscriberId) ?? this.queue.length;
|
|
342
|
+
const available = this.queue.slice(from, from + cap);
|
|
343
|
+
this.cursors.set(subscriberId, from + available.length);
|
|
227
344
|
const dropped = this.dropped;
|
|
228
345
|
this.dropped = 0;
|
|
229
346
|
return {
|
|
230
|
-
subscriberId
|
|
231
|
-
events,
|
|
347
|
+
subscriberId,
|
|
348
|
+
events: available,
|
|
232
349
|
dropped,
|
|
233
350
|
connected: this.connected,
|
|
234
|
-
started,
|
|
351
|
+
started: isNew || subStarted,
|
|
235
352
|
lastError: this.lastError,
|
|
236
353
|
};
|
|
237
354
|
}
|
|
@@ -244,6 +361,8 @@ export class BridgeEventStream {
|
|
|
244
361
|
clearTimeout(this.reconnectTimer);
|
|
245
362
|
this.reconnectTimer = null;
|
|
246
363
|
}
|
|
364
|
+
// A stopped→restarted stream starts its backoff from scratch.
|
|
365
|
+
this.reconnectDelayMs = RECONNECT_BASE_DELAY_MS;
|
|
247
366
|
if (this.abortController) {
|
|
248
367
|
this.abortController.abort();
|
|
249
368
|
this.abortController = null;
|
|
@@ -252,6 +371,9 @@ export class BridgeEventStream {
|
|
|
252
371
|
this.connected = false;
|
|
253
372
|
this.queue = [];
|
|
254
373
|
this.dropped = 0;
|
|
374
|
+
// feedback #8 — drop per-subscriber cursors so a post-stop pull re-initialises
|
|
375
|
+
// each subscriber at the (now empty) high-water mark.
|
|
376
|
+
this.cursors.clear();
|
|
255
377
|
}
|
|
256
378
|
get isConnected() {
|
|
257
379
|
return this.connected;
|
package/dist/event-stream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-stream.js","sourceRoot":"","sources":["../src/event-stream.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,0EAA0E;AAC1E,EAAE;AACF,aAAa;AACb,+EAA+E;AAC/E,6CAA6C;AAC7C,+EAA+E;AAC/E,6EAA6E;AAC7E,6EAA6E;AAC7E,4EAA4E;AAC5E,gCAAgC;AAChC,EAAE;AACF,6EAA6E;AAC7E,qBAAqB;AAErB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA2B1C,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,MAAM,OAAO,iBAAiB;IAcT;IAEA;IAfX,YAAY,CAAS;IACrB,KAAK,GAAkB,EAAE,CAAC;IAC1B,OAAO,GAAG,CAAC,CAAC;IACZ,SAAS,GAAG,KAAK,CAAC;IAClB,SAAS,GAAkB,IAAI,CAAC;IAChC,eAAe,GAA2B,IAAI,CAAC;IAC/C,cAAc,GAAyC,IAAI,CAAC;IAC5D,OAAO,GAAG,KAAK,CAAC;IACxB,uEAAuE;IACvE,0EAA0E;IAClE,OAAO,GAAG,KAAK,CAAC;IAExB,YACmB,OAAe,EAChC,YAAqB,EACJ,SAAkB;QAFlB,YAAO,GAAP,OAAO,CAAQ;QAEf,cAAS,GAAT,SAAS,CAAS;QAEnC,IAAI,CAAC,YAAY;YACf,YAAY,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,kBAAkB;QAChB,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,OAAO;QACb,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO;QACjC,2EAA2E;QAC3E,8BAA8B;QAC9B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,sBAAsB,kBAAkB,CACjE,IAAI,CAAC,YAAY,CAClB,mBAAmB,CAAC;QAErB,kEAAkE;QAClE,uEAAuE;QACvE,sDAAsD;QACtD,MAAM,OAAO,GAA2B,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;QACxE,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;QAC1E,KAAK,CAAC,GAAG,EAAE;YACT,MAAM,EAAE,KAAK;YACb,OAAO;YACP,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM;SACpC,CAAC;aACC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACxC,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACtB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,MAAM,OAAO,GACX,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnD,wEAAwE;YACxE,uEAAuE;YACvE,oEAAoE;YACpE,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;YACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,IAAgC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,iDAAiD;YACjD,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAChB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAElD,IAAI,GAAW,CAAC;gBAChB,4CAA4C;gBAC5C,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBACnC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBAC/B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,mEAAmE;YACnE,uEAAuE;YACvE,wDAAwD;YACxD,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO;YACzB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,sEAAsE;YACtE,gDAAgD;YAChD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QAC3D,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC;gBAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC9C,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,KAAa;QAC/B,MAAM,GAAG,GAAG,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,GAAG;YAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,KAAa;QAChC,IAAI,SAAS,GAAG,SAAS,CAAC;QAC1B,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9B,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,MAAM,GAA4B,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;YAC7C,MAAM,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QAED,MAAM,GAAG,GAAgB;YACvB,GAAG,EAAE,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YAC7D,EAAE,EAAE,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACxE,IAAI,EAAE,SAAgC;SACvC,CAAC;QAEF,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACxB,GAAG,CAAC,OAAO,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;YAC1E,GAAG,CAAC,OAAO,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,CAAC;aAAM,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;YACxC,GAAG,CAAC,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC;YAC9C,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC;QAC5C,CAAC;aAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,6EAA6E;YAC7E,GAAG,CAAC,OAAO,GAAG,UAAU,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QACvD,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,OAAO,CAAC,GAAgB;QAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,2EAA2E;QAC3E,8EAA8E;QAC9E,uEAAuE;QACvE,uEAAuE;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC;QAClD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC7B,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO;QAChC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAED,+DAA+D;IAC/D,KAAK,CAAC,SAAiB;QACrB,MAAM,GAAG,GAAG,SAAS,GAAG,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,iEAAiE;IACjE,IAAI,CAAC,SAAiB;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACrC,sEAAsE;QACtE,0EAA0E;QAC1E,2EAA2E;QAC3E,0EAA0E;QAC1E,0DAA0D;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,MAAM;YACN,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;IACJ,CAAC;IAED,kEAAkE;IAClE,IAAI;QACF,sEAAsE;QACtE,oEAAoE;QACpE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"event-stream.js","sourceRoot":"","sources":["../src/event-stream.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,0EAA0E;AAC1E,EAAE;AACF,aAAa;AACb,+EAA+E;AAC/E,6CAA6C;AAC7C,+EAA+E;AAC/E,6EAA6E;AAC7E,+EAA+E;AAC/E,+EAA+E;AAC/E,+EAA+E;AAC/E,4EAA4E;AAC5E,2EAA2E;AAC3E,qCAAqC;AACrC,6EAA6E;AAC7E,4EAA4E;AAC5E,gCAAgC;AAChC,EAAE;AACF,6EAA6E;AAC7E,qBAAqB;AAErB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AA2BnE,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,kEAAkE;AAClE,MAAM,uBAAuB,GAAG,IAAI,CAAC;AACrC,0EAA0E;AAC1E,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAEtC,MAAM,OAAO,iBAAiB;IACpB,YAAY,CAAS;IACrB,KAAK,GAAkB,EAAE,CAAC;IAC1B,OAAO,GAAG,CAAC,CAAC;IACZ,SAAS,GAAG,KAAK,CAAC;IAClB,SAAS,GAAkB,IAAI,CAAC;IAChC,eAAe,GAA2B,IAAI,CAAC;IAC/C,cAAc,GAAyC,IAAI,CAAC;IAC5D,OAAO,GAAG,KAAK,CAAC;IACxB,mEAAmE;IACnE,2EAA2E;IAC3E,yEAAyE;IACzE,mDAAmD;IAC3C,gBAAgB,GAAG,uBAAuB,CAAC;IACnD,uEAAuE;IACvE,0EAA0E;IAClE,OAAO,GAAG,KAAK,CAAC;IAExB,yEAAyE;IACzE,0EAA0E;IAC1E,wEAAwE;IACxE,4EAA4E;IAC5E,qEAAqE;IACrE,2EAA2E;IAC3E,4EAA4E;IAC5E,6EAA6E;IAC7E,4EAA4E;IAC5E,4CAA4C;IAC3B,OAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;IAE1D,qEAAqE;IACrE,0EAA0E;IAC1E,4EAA4E;IAC5E,yEAAyE;IACzE,sDAAsD;IAC9C,OAAO,CAAS;IAChB,SAAS,CAAU;IACV,WAAW,CAAU;IACrB,OAAO,CAAU;IAElC,YACE,OAAe,EACf,YAAqB,EACrB,SAAkB,EAClB,WAAoB,EACpB,OAAgB;QAEhB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,YAAY;YACf,YAAY,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,kBAAkB;QAChB,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,OAAO;QACb,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO;QACjC,2EAA2E;QAC3E,8BAA8B;QAC9B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,mEAAmE;QACnE,iEAAiE;QACjE,uEAAuE;QACvE,oEAAoE;QACpE,kEAAkE;QAClE,iCAAiC;QACjC,MAAM,SAAS,GAAG,wBAAwB,CACxC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,CACf,CAAC;QACF,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;YACjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,sBAAsB,kBAAkB,CACjE,IAAI,CAAC,YAAY,CAClB,mBAAmB,CAAC;QAErB,kEAAkE;QAClE,uEAAuE;QACvE,sDAAsD;QACtD,MAAM,OAAO,GAA2B,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;QACxE,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;QAC1E,KAAK,CAAC,GAAG,EAAE;YACT,MAAM,EAAE,KAAK;YACb,OAAO;YACP,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM;SACpC,CAAC;aACC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACzB,+DAA+D;gBAC/D,2DAA2D;gBAC3D,gEAAgE;gBAChE,iEAAiE;gBACjE,oDAAoD;gBACpD,IAAI,GAAG,CAAC,IAAI;oBAAE,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACrD,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACxC,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,kEAAkE;YAClE,oCAAoC;YACpC,IAAI,CAAC,gBAAgB,GAAG,uBAAuB,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACtB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,MAAM,OAAO,GACX,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnD,wEAAwE;YACxE,uEAAuE;YACvE,oEAAoE;YACpE,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;YACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,IAAgC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,iDAAiD;YACjD,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAChB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAElD,IAAI,GAAW,CAAC;gBAChB,4CAA4C;gBAC5C,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBACnC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBAC/B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,mEAAmE;YACnE,uEAAuE;YACvE,wDAAwD;YACxD,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO;YACzB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,sEAAsE;YACtE,gDAAgD;YAChD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QAC3D,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC;gBAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC9C,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,KAAa;QAC/B,MAAM,GAAG,GAAG,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,GAAG;YAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,KAAa;QAChC,IAAI,SAAS,GAAG,SAAS,CAAC;QAC1B,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9B,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,MAAM,GAA4B,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;YAC7C,MAAM,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QAED,MAAM,GAAG,GAAgB;YACvB,GAAG,EAAE,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YAC7D,EAAE,EAAE,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACxE,IAAI,EAAE,SAAgC;SACvC,CAAC;QAEF,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACxB,GAAG,CAAC,OAAO,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;YAC1E,GAAG,CAAC,OAAO,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,CAAC;aAAM,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;YACxC,GAAG,CAAC,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC;YAC9C,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC;QAC5C,CAAC;aAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,6EAA6E;YAC7E,GAAG,CAAC,OAAO,GAAG,UAAU,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QACvD,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,OAAO,CAAC,GAAgB;QAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,2EAA2E;QAC3E,8EAA8E;QAC9E,uEAAuE;QACvE,uEAAuE;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC;QAClD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC7B,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC;YACvB,yEAAyE;YACzE,0EAA0E;YAC1E,wEAAwE;YACxE,oEAAoE;YACpE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC1B,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,EAAE,KAAK,CAAC,CAAC;QACV,wEAAwE;QACxE,wEAAwE;QACxE,uEAAuE;QACvE,qCAAqC;QACrC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC;QAC9B,sEAAsE;QACtE,uDAAuD;QACvD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAC9B,IAAI,CAAC,gBAAgB,GAAG,CAAC,EACzB,sBAAsB,CACvB,CAAC;IACJ,CAAC;IAED,+DAA+D;IAC/D,KAAK,CAAC,SAAiB;QACrB,MAAM,GAAG,GAAG,SAAS,GAAG,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,2EAA2E;QAC3E,wEAAwE;QACxE,yEAAyE;QACzE,sEAAsE;QACtE,mEAAmE;QACnE,0EAA0E;QAC1E,0EAA0E;QAC1E,kEAAkE;QAClE,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;;;;gDAS4C;IAC5C,IAAI,CAAC,SAAiB,EAAE,YAAqB;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE7C,uEAAuE;QACvE,yEAAyE;QACzE,iDAAiD;QACjD,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACjB,OAAO;gBACL,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,MAAM;gBACN,OAAO;gBACP,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO,EAAE,UAAU;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC;QACJ,CAAC;QAED,0EAA0E;QAC1E,yEAAyE;QACzE,yCAAyC;QACzC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC9C,IAAI,KAAK;YAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE7D,MAAM,GAAG,GAAG,SAAS,GAAG,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAExD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,OAAO;YACL,YAAY;YACZ,MAAM,EAAE,SAAS;YACjB,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,KAAK,IAAI,UAAU;YAC5B,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;IACJ,CAAC;IAED,kEAAkE;IAClE,IAAI;QACF,sEAAsE;QACtE,oEAAoE;QACpE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,8DAA8D;QAC9D,IAAI,CAAC,gBAAgB,GAAG,uBAAuB,CAAC;QAChD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,+EAA+E;QAC/E,sDAAsD;QACtD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CACF"}
|
package/dist/gate-error.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export interface MutationEnvelope {
|
|
|
10
10
|
gate: {
|
|
11
11
|
mode: string;
|
|
12
12
|
skipped: boolean;
|
|
13
|
+
/** Structured outcome token: passed | warned | failed | skipped | validate_scan_failed. */
|
|
14
|
+
outcome?: string;
|
|
13
15
|
validation: unknown;
|
|
14
16
|
delta: Record<string, unknown> | null;
|
|
15
17
|
};
|
package/dist/gate-error.js
CHANGED
|
@@ -12,6 +12,15 @@ export function deriveIsError(envelope) {
|
|
|
12
12
|
}
|
|
13
13
|
if (envelope.mutation.success === false)
|
|
14
14
|
return true;
|
|
15
|
+
// The bridge marks GateFailed=true and outcome "validate_scan_failed" when
|
|
16
|
+
// the mutation committed but the post-mutation health check could not run
|
|
17
|
+
// (the validate scan threw, or a verify rule threw on either side of the
|
|
18
|
+
// delta). The bridge's own activity log records these as Failed; isError
|
|
19
|
+
// must agree, or an agent keying on isError reads "health unknown" as an
|
|
20
|
+
// unqualified success. (A `warned` outcome under warn mode stays non-error —
|
|
21
|
+
// report-only is the operator's explicit choice.)
|
|
22
|
+
if (envelope.gate?.outcome === "validate_scan_failed")
|
|
23
|
+
return true;
|
|
15
24
|
if (envelope.gate?.mode === "enforce" && envelope.gate.delta) {
|
|
16
25
|
const newErrors = envelope.gate.delta.newErrors;
|
|
17
26
|
if (typeof newErrors === "number" && newErrors > 0)
|
package/dist/gate-error.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-error.js","sourceRoot":"","sources":["../src/gate-error.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gate-error.js","sourceRoot":"","sources":["../src/gate-error.ts"],"names":[],"mappings":"AAgCA,MAAM,UAAU,aAAa,CAAC,QAA0B;IACtD,yEAAyE;IACzE,2EAA2E;IAC3E,+EAA+E;IAC/E,qEAAqE;IACrE,gFAAgF;IAChF,IACE,CAAC,QAAQ;QACT,OAAO,QAAQ,KAAK,QAAQ;QAC5B,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ;QACrC,QAAQ,CAAC,QAAQ,KAAK,IAAI,EAC1B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAErD,2EAA2E;IAC3E,0EAA0E;IAC1E,yEAAyE;IACzE,yEAAyE;IACzE,yEAAyE;IACzE,6EAA6E;IAC7E,kDAAkD;IAClD,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,KAAK,sBAAsB;QAAE,OAAO,IAAI,CAAC;IAEnE,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7D,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QAChD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IAClE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -113,6 +113,29 @@ export declare function resolvePort(projectPath: string, envPort?: number): numb
|
|
|
113
113
|
* skips the lock read (no token to discover).
|
|
114
114
|
*/
|
|
115
115
|
export declare function resolveAuthToken(projectPath: string, envPort?: number): string | undefined;
|
|
116
|
+
/**
|
|
117
|
+
* Re-resolve a bridge endpoint (baseUrl + authToken) from the on-disk instance
|
|
118
|
+
* lock, returning the refreshed pair when the live bridge has moved, or null
|
|
119
|
+
* when nothing changed / the lock can't be trusted. Shared by LiveClient and
|
|
120
|
+
* BridgeEventStream so every long-lived bridge client self-heals after a Unity
|
|
121
|
+
* restart or domain reload — the bridge mints a fresh token on every Acquire,
|
|
122
|
+
* so a client that caches the construction-time token forever goes permanently
|
|
123
|
+
* 401 after the first reload.
|
|
124
|
+
*
|
|
125
|
+
* No-op (null) when there is no projectPath, an env-port override is in force
|
|
126
|
+
* (env is authoritative — no lock to read, matching resolvePort/
|
|
127
|
+
* resolveAuthToken), or the lock is missing/its PID is dead/nothing actually
|
|
128
|
+
* changed. Never throws — readInstanceLock/isPidAlive are fault-tolerant.
|
|
129
|
+
*
|
|
130
|
+
* @param projectPath absolute Unity project root
|
|
131
|
+
* @param envPort parsed UNITY_OPEN_MCP_BRIDGE_PORT override, if any
|
|
132
|
+
* @param currentBaseUrl the client's currently cached bridge base URL
|
|
133
|
+
* @param currentToken the client's currently cached bearer token
|
|
134
|
+
*/
|
|
135
|
+
export declare function resolveRefreshedEndpoint(projectPath: string | undefined, envPort: number | undefined, currentBaseUrl: string, currentToken: string | undefined): {
|
|
136
|
+
baseUrl: string;
|
|
137
|
+
authToken: string | undefined;
|
|
138
|
+
} | null;
|
|
116
139
|
/**
|
|
117
140
|
* A heartbeat is considered "stale" once it is this many milliseconds old.
|
|
118
141
|
* The bridge writes every 0.5s (BridgeHeartbeat.HeartbeatIntervalSec), so
|
|
@@ -22,7 +22,7 @@ import { createHash } from "node:crypto";
|
|
|
22
22
|
import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
|
|
23
23
|
import { homedir } from "node:os";
|
|
24
24
|
import { join } from "node:path";
|
|
25
|
-
import { STATUS_DIR_NAME } from "./constants.js";
|
|
25
|
+
import { STATUS_DIR_NAME, bridgeBaseUrl } from "./constants.js";
|
|
26
26
|
export const PORT_RANGE_START = 20000;
|
|
27
27
|
export const PORT_RANGE_SIZE = 10000;
|
|
28
28
|
/**
|
|
@@ -207,6 +207,52 @@ export function resolveAuthToken(projectPath, envPort) {
|
|
|
207
207
|
const token = lock.authToken;
|
|
208
208
|
return typeof token === "string" && token.length > 0 ? token : undefined;
|
|
209
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* Re-resolve a bridge endpoint (baseUrl + authToken) from the on-disk instance
|
|
212
|
+
* lock, returning the refreshed pair when the live bridge has moved, or null
|
|
213
|
+
* when nothing changed / the lock can't be trusted. Shared by LiveClient and
|
|
214
|
+
* BridgeEventStream so every long-lived bridge client self-heals after a Unity
|
|
215
|
+
* restart or domain reload — the bridge mints a fresh token on every Acquire,
|
|
216
|
+
* so a client that caches the construction-time token forever goes permanently
|
|
217
|
+
* 401 after the first reload.
|
|
218
|
+
*
|
|
219
|
+
* No-op (null) when there is no projectPath, an env-port override is in force
|
|
220
|
+
* (env is authoritative — no lock to read, matching resolvePort/
|
|
221
|
+
* resolveAuthToken), or the lock is missing/its PID is dead/nothing actually
|
|
222
|
+
* changed. Never throws — readInstanceLock/isPidAlive are fault-tolerant.
|
|
223
|
+
*
|
|
224
|
+
* @param projectPath absolute Unity project root
|
|
225
|
+
* @param envPort parsed UNITY_OPEN_MCP_BRIDGE_PORT override, if any
|
|
226
|
+
* @param currentBaseUrl the client's currently cached bridge base URL
|
|
227
|
+
* @param currentToken the client's currently cached bearer token
|
|
228
|
+
*/
|
|
229
|
+
export function resolveRefreshedEndpoint(projectPath, envPort, currentBaseUrl, currentToken) {
|
|
230
|
+
if (!projectPath)
|
|
231
|
+
return null;
|
|
232
|
+
if (envPort !== undefined)
|
|
233
|
+
return null; // env override wins
|
|
234
|
+
let lock;
|
|
235
|
+
try {
|
|
236
|
+
lock = readInstanceLock(projectPath);
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
return null;
|
|
240
|
+
}
|
|
241
|
+
if (!lock)
|
|
242
|
+
return null;
|
|
243
|
+
if (!isPidAlive(lock.pid))
|
|
244
|
+
return null;
|
|
245
|
+
const portChanged = typeof lock.port === "number" &&
|
|
246
|
+
lock.port > 0 &&
|
|
247
|
+
currentBaseUrl !== bridgeBaseUrl(lock.port);
|
|
248
|
+
const tokenChanged = lock.authToken !== currentToken;
|
|
249
|
+
if (!portChanged && !tokenChanged)
|
|
250
|
+
return null;
|
|
251
|
+
return {
|
|
252
|
+
baseUrl: portChanged ? bridgeBaseUrl(lock.port) : currentBaseUrl,
|
|
253
|
+
authToken: tokenChanged ? lock.authToken : currentToken,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
210
256
|
// ---------------------------------------------------------------------------
|
|
211
257
|
// Dead-bridge detection
|
|
212
258
|
//
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-discovery.js","sourceRoot":"","sources":["../src/instance-discovery.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,iFAAiF;AACjF,8EAA8E;AAC9E,8EAA8E;AAC9E,UAAU;AACV,EAAE;AACF,0DAA0D;AAC1D,6EAA6E;AAC7E,yEAAyE;AACzE,yEAAyE;AACzE,wEAAwE;AACxE,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,wDAAwD;AACxD,0EAA0E;AAC1E,EAAE;AACF,0EAA0E;AAC1E,sEAAsE;AAEtE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"instance-discovery.js","sourceRoot":"","sources":["../src/instance-discovery.ts"],"names":[],"mappings":"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"}
|
package/dist/live-client.d.ts
CHANGED
|
@@ -44,6 +44,16 @@ export declare class LiveClient implements Router {
|
|
|
44
44
|
* waitForCompile settle) so a reload or compile is observed promptly.
|
|
45
45
|
*/
|
|
46
46
|
private bridgeToolsCache;
|
|
47
|
+
/**
|
|
48
|
+
* feedback-fable-04-08 §5 — short-TTL cache for detectStaleAssembly() used
|
|
49
|
+
* by the `_staleDomain` annotation on execute_csharp / invoke_method.
|
|
50
|
+
* Invalidated alongside bridgeToolsCache on dead-bridge / reload / compile
|
|
51
|
+
* settle so a reload that rebuilt the assembly clears a cached stale signal.
|
|
52
|
+
*/
|
|
53
|
+
private staleAssemblyCache;
|
|
54
|
+
/** specs/feedback.md 2026-08-14 — short-TTL cache for the fd-exhaustion
|
|
55
|
+
* wedge scan behind the `editor_build_wedged` guard. */
|
|
56
|
+
private editorWedgeCache;
|
|
47
57
|
private dismissEnabled;
|
|
48
58
|
private dismissTimeoutMs;
|
|
49
59
|
private dismissIntervalMs;
|
|
@@ -207,11 +217,9 @@ export declare class LiveClient implements Router {
|
|
|
207
217
|
* (because {@link postTool} re-POSTs on recovery) duplicate side-effects
|
|
208
218
|
* once the editor came back. Refreshing here lets a restart self-heal.
|
|
209
219
|
*
|
|
210
|
-
*
|
|
211
|
-
*
|
|
212
|
-
*
|
|
213
|
-
* nothing actually changed. Never throws — readInstanceLock/isPidAlive are
|
|
214
|
-
* already fault-tolerant.
|
|
220
|
+
* Delegates the lock read/comparison to the shared
|
|
221
|
+
* {@link resolveRefreshedEndpoint} helper (also used by BridgeEventStream)
|
|
222
|
+
* — no-op semantics live there.
|
|
215
223
|
*/
|
|
216
224
|
private refreshEndpointFromLock;
|
|
217
225
|
/**
|
|
@@ -292,6 +300,33 @@ export declare class LiveClient implements Router {
|
|
|
292
300
|
* the compiled output.
|
|
293
301
|
*/
|
|
294
302
|
private newestScriptAssembliesMtime;
|
|
303
|
+
/**
|
|
304
|
+
* feedback-fable-04-08 §5 — resolve the stale-assembly signal for the
|
|
305
|
+
* `_staleDomain` annotation, backed by a short-TTL cache so repeated
|
|
306
|
+
* execute_csharp / invoke_method probes in one agent turn reuse one scan.
|
|
307
|
+
* Returns the cached result within the TTL, otherwise runs
|
|
308
|
+
* {@link detectStaleAssembly} against this project's `Assets/` + `Library/
|
|
309
|
+
* ScriptAssemblies`, records it, and returns it. Never throws — any fs error
|
|
310
|
+
* inside detectStaleAssembly degrades to a non-stale result.
|
|
311
|
+
*/
|
|
312
|
+
private resolveStaleAssembly;
|
|
313
|
+
/**
|
|
314
|
+
* specs/feedback.md 2026-08-14 — resolve the `editor_fd_exhaustion` wedge
|
|
315
|
+
* signal for the `editor_build_wedged` guard, behind the same short-TTL
|
|
316
|
+
* caching discipline as the stale-assembly scan.
|
|
317
|
+
*
|
|
318
|
+
* Only reached when the stale-assembly check has ALREADY fired, so the log
|
|
319
|
+
* read costs nothing on the healthy path. The signature is terminal (the
|
|
320
|
+
* Editor never recovers on its own), so a cached "present" can never be a
|
|
321
|
+
* false positive that outlives the condition.
|
|
322
|
+
*/
|
|
323
|
+
private resolveEditorWedge;
|
|
324
|
+
/**
|
|
325
|
+
* The live Unity PID from the instance lock, when one is recorded and alive.
|
|
326
|
+
* Feeds the log-rotation fallback in {@link resolveEditorLogPath} so the
|
|
327
|
+
* wedge scan reads the file the live editor is actually writing.
|
|
328
|
+
*/
|
|
329
|
+
private resolveLiveEditorPid;
|
|
295
330
|
/**
|
|
296
331
|
* Apply the compile-verify annotation to a successful compile-reload result.
|
|
297
332
|
* Reads the after-snapshot, runs the pure detector, and — when flagged —
|