@skillcap/gdh 0.19.6 → 0.21.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/INSTALL-BUNDLE.json +1 -1
  2. package/RELEASE-SPAN-UPDATE-CONTRACTS.json +147 -0
  3. package/node_modules/@gdh/adapters/dist/index.d.ts.map +1 -1
  4. package/node_modules/@gdh/adapters/dist/index.js +53 -10
  5. package/node_modules/@gdh/adapters/dist/index.js.map +1 -1
  6. package/node_modules/@gdh/adapters/dist/skill-rendering.d.ts.map +1 -1
  7. package/node_modules/@gdh/adapters/dist/skill-rendering.js +7 -4
  8. package/node_modules/@gdh/adapters/dist/skill-rendering.js.map +1 -1
  9. package/node_modules/@gdh/adapters/package.json +8 -8
  10. package/node_modules/@gdh/authoring/dist/index.d.ts +1 -1
  11. package/node_modules/@gdh/authoring/dist/index.d.ts.map +1 -1
  12. package/node_modules/@gdh/authoring/dist/index.js +1 -1
  13. package/node_modules/@gdh/authoring/dist/index.js.map +1 -1
  14. package/node_modules/@gdh/authoring/dist/project.d.ts +1 -0
  15. package/node_modules/@gdh/authoring/dist/project.d.ts.map +1 -1
  16. package/node_modules/@gdh/authoring/dist/project.js +4 -0
  17. package/node_modules/@gdh/authoring/dist/project.js.map +1 -1
  18. package/node_modules/@gdh/authoring/package.json +2 -2
  19. package/node_modules/@gdh/cli/dist/bridge-session.d.ts +21 -0
  20. package/node_modules/@gdh/cli/dist/bridge-session.d.ts.map +1 -0
  21. package/node_modules/@gdh/cli/dist/bridge-session.js +442 -0
  22. package/node_modules/@gdh/cli/dist/bridge-session.js.map +1 -0
  23. package/node_modules/@gdh/cli/dist/index.d.ts.map +1 -1
  24. package/node_modules/@gdh/cli/dist/index.js +70 -30
  25. package/node_modules/@gdh/cli/dist/index.js.map +1 -1
  26. package/node_modules/@gdh/cli/dist/migrate.d.ts +13 -0
  27. package/node_modules/@gdh/cli/dist/migrate.d.ts.map +1 -1
  28. package/node_modules/@gdh/cli/dist/migrate.js +20 -0
  29. package/node_modules/@gdh/cli/dist/migrate.js.map +1 -1
  30. package/node_modules/@gdh/cli/package.json +10 -10
  31. package/node_modules/@gdh/core/dist/index.d.ts +22 -2
  32. package/node_modules/@gdh/core/dist/index.d.ts.map +1 -1
  33. package/node_modules/@gdh/core/dist/index.js +2 -2
  34. package/node_modules/@gdh/core/dist/index.js.map +1 -1
  35. package/node_modules/@gdh/core/dist/local-path-hints.d.ts +22 -1
  36. package/node_modules/@gdh/core/dist/local-path-hints.d.ts.map +1 -1
  37. package/node_modules/@gdh/core/dist/local-path-hints.js +139 -4
  38. package/node_modules/@gdh/core/dist/local-path-hints.js.map +1 -1
  39. package/node_modules/@gdh/core/package.json +1 -1
  40. package/node_modules/@gdh/docs/dist/guidance.d.ts.map +1 -1
  41. package/node_modules/@gdh/docs/dist/guidance.js +12 -2
  42. package/node_modules/@gdh/docs/dist/guidance.js.map +1 -1
  43. package/node_modules/@gdh/docs/package.json +2 -2
  44. package/node_modules/@gdh/mcp/dist/bridge-tools.d.ts +15 -0
  45. package/node_modules/@gdh/mcp/dist/bridge-tools.d.ts.map +1 -0
  46. package/node_modules/@gdh/mcp/dist/bridge-tools.js +111 -0
  47. package/node_modules/@gdh/mcp/dist/bridge-tools.js.map +1 -0
  48. package/node_modules/@gdh/mcp/dist/index.d.ts +3 -2
  49. package/node_modules/@gdh/mcp/dist/index.d.ts.map +1 -1
  50. package/node_modules/@gdh/mcp/dist/index.js +13 -44
  51. package/node_modules/@gdh/mcp/dist/index.js.map +1 -1
  52. package/node_modules/@gdh/mcp/package.json +8 -8
  53. package/node_modules/@gdh/observability/package.json +2 -2
  54. package/node_modules/@gdh/runtime/dist/bridge-broker-client.d.ts +32 -0
  55. package/node_modules/@gdh/runtime/dist/bridge-broker-client.d.ts.map +1 -0
  56. package/node_modules/@gdh/runtime/dist/bridge-broker-client.js +118 -0
  57. package/node_modules/@gdh/runtime/dist/bridge-broker-client.js.map +1 -0
  58. package/node_modules/@gdh/runtime/dist/bridge-broker.d.ts +78 -0
  59. package/node_modules/@gdh/runtime/dist/bridge-broker.d.ts.map +1 -0
  60. package/node_modules/@gdh/runtime/dist/bridge-broker.js +587 -0
  61. package/node_modules/@gdh/runtime/dist/bridge-broker.js.map +1 -0
  62. package/node_modules/@gdh/runtime/dist/index.d.ts +3 -0
  63. package/node_modules/@gdh/runtime/dist/index.d.ts.map +1 -1
  64. package/node_modules/@gdh/runtime/dist/index.js +3 -0
  65. package/node_modules/@gdh/runtime/dist/index.js.map +1 -1
  66. package/node_modules/@gdh/runtime/package.json +2 -2
  67. package/node_modules/@gdh/scan/dist/onboard.js +1 -1
  68. package/node_modules/@gdh/scan/dist/onboard.js.map +1 -1
  69. package/node_modules/@gdh/scan/package.json +3 -3
  70. package/node_modules/@gdh/verify/package.json +7 -7
  71. package/package.json +11 -11
@@ -0,0 +1,587 @@
1
+ import { spawn } from "node:child_process";
2
+ import { randomBytes, randomUUID } from "node:crypto";
3
+ import fs from "node:fs/promises";
4
+ import http from "node:http";
5
+ import path from "node:path";
6
+ import { resolveGdhProductMetadata, } from "@gdh/core";
7
+ import { BROKER_DEFAULT_HEARTBEAT_STALE_AFTER_MS, BROKER_LOOPBACK_HOST, BROKER_PROTOCOL_VERSION, normalizeBrokerTargetIdentity, validateBrokerHandshake, } from "./bridge-broker-contract.js";
8
+ import { stopAllRuntimeBridgeBrokerSessions } from "./bridge-broker-client.js";
9
+ const BROKER_DIRECTORY = "bridge-broker";
10
+ const BROKER_METADATA_FILE = "metadata.json";
11
+ const BROKER_TOKEN_FILE = "token";
12
+ const BROKER_HEARTBEAT_FILE = "heartbeat";
13
+ const DEFAULT_BROKER_START_TIMEOUT_MS = 5_000;
14
+ const DEFAULT_BROKER_POLL_MS = 25;
15
+ export function resolveRuntimeBridgeBrokerPaths(input) {
16
+ const targetRootPath = path.resolve(input.targetPath);
17
+ const godotProjectRootPath = path.resolve(targetRootPath, input.godotProjectRootPath ?? input.projectConfig?.primaryGodotProjectPath ?? ".");
18
+ const stateRootPath = path.resolve(input.stateRootPath ?? path.join(targetRootPath, ".gdh-state"));
19
+ const brokerDirectory = path.join(stateRootPath, BROKER_DIRECTORY);
20
+ const metadataPath = path.join(brokerDirectory, BROKER_METADATA_FILE);
21
+ const tokenFilePath = path.join(brokerDirectory, BROKER_TOKEN_FILE);
22
+ const heartbeatPath = path.join(brokerDirectory, BROKER_HEARTBEAT_FILE);
23
+ const identity = normalizeBrokerTargetIdentity({
24
+ targetRootPath,
25
+ godotProjectRootPath,
26
+ stateRootPath,
27
+ ...(input.pathStyle === undefined ? {} : { pathStyle: input.pathStyle }),
28
+ });
29
+ return {
30
+ targetRootPath,
31
+ godotProjectRootPath,
32
+ stateRootPath,
33
+ brokerDirectory,
34
+ metadataPath,
35
+ tokenFilePath,
36
+ heartbeatPath,
37
+ identity,
38
+ };
39
+ }
40
+ export async function inspectRuntimeBridgeBroker(input) {
41
+ const paths = resolveRuntimeBridgeBrokerPaths(input);
42
+ const metadata = await readBrokerMetadata(paths.metadataPath);
43
+ const tokenPresent = await fileExists(paths.tokenFilePath);
44
+ const pidAlive = metadata === null ? false : (input.isPidAlive ?? isProcessAlive)(metadata.pid);
45
+ const broker = validateBrokerHandshake({
46
+ expectedIdentity: paths.identity,
47
+ metadata,
48
+ expectedGdhVersion: input.expectedGdhVersion ?? resolveGdhProductMetadata().version,
49
+ tokenPresent,
50
+ pidAlive,
51
+ ...(input.nowMs === undefined ? {} : { nowMs: input.nowMs }),
52
+ ...(input.heartbeatStaleAfterMs === undefined
53
+ ? {}
54
+ : { heartbeatStaleAfterMs: input.heartbeatStaleAfterMs }),
55
+ });
56
+ return { paths, broker };
57
+ }
58
+ export async function ensureRuntimeBridgeBroker(input) {
59
+ const first = await inspectRuntimeBridgeBroker(input);
60
+ if (first.broker.lifecycle === "ready") {
61
+ return {
62
+ state: "ready",
63
+ summary: "Runtime bridge broker is already ready.",
64
+ broker: first.broker,
65
+ paths: first.paths,
66
+ spawned: false,
67
+ };
68
+ }
69
+ if (first.broker.lifecycle === "incompatible") {
70
+ return {
71
+ state: "incompatible",
72
+ summary: "Runtime bridge broker metadata belongs to an incompatible target, protocol, or GDH version.",
73
+ broker: first.broker,
74
+ paths: first.paths,
75
+ spawned: false,
76
+ };
77
+ }
78
+ if (first.broker.lifecycle === "stale" || first.broker.lifecycle === "missing") {
79
+ await pruneRuntimeBridgeBroker(input);
80
+ }
81
+ await fs.mkdir(first.paths.brokerDirectory, { recursive: true });
82
+ await writeFileAtomic(first.paths.tokenFilePath, `${randomBytes(32).toString("hex")}\n`, {
83
+ mode: 0o600,
84
+ });
85
+ const command = process.execPath;
86
+ const args = buildBrokerSpawnArgs(input, first.paths);
87
+ const child = (input.spawnBrokerProcess ?? defaultSpawnBrokerProcess)(command, args, {
88
+ detached: true,
89
+ stdio: "ignore",
90
+ windowsHide: true,
91
+ shell: false,
92
+ env: process.env,
93
+ });
94
+ child.unref();
95
+ const deadline = Date.now() + (input.startTimeoutMs ?? DEFAULT_BROKER_START_TIMEOUT_MS);
96
+ let last = await inspectRuntimeBridgeBroker(input);
97
+ while (Date.now() <= deadline) {
98
+ last = await inspectRuntimeBridgeBroker(input);
99
+ if (last.broker.lifecycle === "ready") {
100
+ return {
101
+ state: "ready",
102
+ summary: "Runtime bridge broker started and passed handshake validation.",
103
+ broker: last.broker,
104
+ paths: last.paths,
105
+ spawned: true,
106
+ };
107
+ }
108
+ if (last.broker.lifecycle === "incompatible")
109
+ break;
110
+ await waitMs(input.pollMs ?? DEFAULT_BROKER_POLL_MS);
111
+ }
112
+ return {
113
+ state: last.broker.lifecycle === "incompatible" ? "incompatible" : "failed",
114
+ summary: "Runtime bridge broker did not become ready before startup timeout.",
115
+ broker: last.broker,
116
+ paths: last.paths,
117
+ spawned: true,
118
+ };
119
+ }
120
+ export async function pruneRuntimeBridgeBroker(input) {
121
+ const inspected = await inspectRuntimeBridgeBroker(input);
122
+ if (inspected.broker.lifecycle === "ready") {
123
+ const metadata = inspected.broker.metadata;
124
+ if (metadata !== null) {
125
+ const token = await readBrokerToken(metadata.tokenFilePath);
126
+ if (token !== null) {
127
+ await stopAllRuntimeBridgeBrokerSessions({
128
+ host: metadata.host,
129
+ port: metadata.port,
130
+ token,
131
+ targetIdentity: inspected.paths.identity,
132
+ }).catch(() => { });
133
+ }
134
+ }
135
+ return {
136
+ state: "noop",
137
+ summary: "Runtime bridge broker is live; requested broker-owned session stop and left broker metadata in place.",
138
+ broker: inspected.broker,
139
+ removedPaths: [],
140
+ sessionsStopped: true,
141
+ };
142
+ }
143
+ if (inspected.broker.lifecycle === "incompatible") {
144
+ return {
145
+ state: "blocked",
146
+ summary: "Runtime bridge broker is incompatible; prune skipped to avoid unsafe cleanup.",
147
+ broker: inspected.broker,
148
+ removedPaths: [],
149
+ sessionsStopped: false,
150
+ };
151
+ }
152
+ const removedPaths = [];
153
+ for (const filePath of [
154
+ inspected.paths.metadataPath,
155
+ inspected.paths.tokenFilePath,
156
+ inspected.paths.heartbeatPath,
157
+ ]) {
158
+ if (await removeFileIfExists(filePath))
159
+ removedPaths.push(filePath);
160
+ }
161
+ return {
162
+ state: removedPaths.length > 0 ? "pruned" : "noop",
163
+ summary: removedPaths.length > 0
164
+ ? "Removed stale runtime bridge broker metadata."
165
+ : "No runtime bridge broker metadata needed pruning.",
166
+ broker: inspected.broker,
167
+ removedPaths,
168
+ sessionsStopped: false,
169
+ };
170
+ }
171
+ export async function serveRuntimeBridgeBroker(input) {
172
+ const paths = resolveRuntimeBridgeBrokerPaths(input);
173
+ const tokenFilePath = input.tokenFilePath ?? paths.tokenFilePath;
174
+ const metadataPath = input.metadataPath ?? paths.metadataPath;
175
+ const heartbeatPath = input.heartbeatPath ?? paths.heartbeatPath;
176
+ const token = (await fs.readFile(tokenFilePath, "utf8")).trim();
177
+ const startedAt = new Date().toISOString();
178
+ const bridgeManager = input.bridgeManager ?? null;
179
+ const brokerSessions = new Map();
180
+ const invocationLocks = new Set();
181
+ let idleTimer = null;
182
+ let shuttingDown = false;
183
+ let shutdownResolved = null;
184
+ await fs.mkdir(paths.brokerDirectory, { recursive: true });
185
+ const server = http.createServer(async (request, response) => {
186
+ if (request.method !== "POST") {
187
+ response.writeHead(405).end();
188
+ return;
189
+ }
190
+ if (request.headers.authorization !== `Bearer ${token}`) {
191
+ response.writeHead(401, { "content-type": "application/json" }).end(JSON.stringify({ error: "broker_token_invalid" }));
192
+ return;
193
+ }
194
+ const body = await readRequestBody(request);
195
+ const envelope = JSON.parse(body);
196
+ if (envelope.protocolVersion !== BROKER_PROTOCOL_VERSION) {
197
+ response.writeHead(400, { "content-type": "application/json" }).end(JSON.stringify({ error: "broker_protocol_version_mismatch" }));
198
+ return;
199
+ }
200
+ const metadata = await readBrokerMetadata(metadataPath);
201
+ const broker = validateBrokerHandshake({
202
+ expectedIdentity: paths.identity,
203
+ metadata,
204
+ expectedGdhVersion: resolveGdhProductMetadata().version,
205
+ tokenPresent: true,
206
+ pidAlive: true,
207
+ });
208
+ const responseBody = await handleBrokerRequest({
209
+ envelope,
210
+ bridgeManager,
211
+ brokerSessions,
212
+ invocationLocks,
213
+ onSessionActivity: scheduleIdleShutdown,
214
+ shutdown,
215
+ }).catch((error) => ({
216
+ ok: false,
217
+ body: buildBrokerRequestFailureBody(envelope, error),
218
+ }));
219
+ const responseEnvelope = {
220
+ id: envelope.id,
221
+ protocolVersion: BROKER_PROTOCOL_VERSION,
222
+ ok: responseBody.ok,
223
+ broker,
224
+ body: responseBody.body,
225
+ };
226
+ response
227
+ .writeHead(200, { "content-type": "application/json" })
228
+ .end(`${JSON.stringify(responseEnvelope)}\n`);
229
+ });
230
+ await new Promise((resolve, reject) => {
231
+ server.once("error", reject);
232
+ server.listen(0, BROKER_LOOPBACK_HOST, () => {
233
+ server.off("error", reject);
234
+ resolve();
235
+ });
236
+ });
237
+ const boundAddress = server.address();
238
+ if (boundAddress === null || typeof boundAddress === "string") {
239
+ throw new Error("Runtime bridge broker did not bind to a TCP port.");
240
+ }
241
+ const boundPort = boundAddress.port;
242
+ async function writeHeartbeat() {
243
+ const now = new Date().toISOString();
244
+ await writeFileAtomic(heartbeatPath, `${now}\n`);
245
+ await writeMetadataAtomic(metadataPath, {
246
+ protocolVersion: BROKER_PROTOCOL_VERSION,
247
+ gdhVersion: resolveGdhProductMetadata().version,
248
+ targetIdentity: paths.identity,
249
+ pid: process.pid,
250
+ port: boundPort,
251
+ host: BROKER_LOOPBACK_HOST,
252
+ startedAt,
253
+ lastHeartbeatAt: now,
254
+ metadataPath,
255
+ tokenFilePath,
256
+ heartbeatPath,
257
+ });
258
+ }
259
+ await writeHeartbeat();
260
+ const heartbeat = setInterval(() => void writeHeartbeat(), input.heartbeatIntervalMs ?? Math.max(500, BROKER_DEFAULT_HEARTBEAT_STALE_AFTER_MS / 3));
261
+ function activeSessionCount() {
262
+ return [...brokerSessions.values()].filter((session) => session.state === "ready").length;
263
+ }
264
+ function scheduleIdleShutdown() {
265
+ if (!input.idleTimeoutMs || input.idleTimeoutMs <= 0 || shuttingDown)
266
+ return;
267
+ if (idleTimer !== null) {
268
+ clearTimeout(idleTimer);
269
+ idleTimer = null;
270
+ }
271
+ if (activeSessionCount() > 0)
272
+ return;
273
+ idleTimer = setTimeout(() => void shutdown(), input.idleTimeoutMs);
274
+ idleTimer.unref();
275
+ }
276
+ async function shutdown() {
277
+ if (shuttingDown)
278
+ return;
279
+ shuttingDown = true;
280
+ removeSignalListeners();
281
+ if (idleTimer !== null) {
282
+ clearTimeout(idleTimer);
283
+ idleTimer = null;
284
+ }
285
+ clearInterval(heartbeat);
286
+ if (bridgeManager !== null) {
287
+ await bridgeManager.stopAll().catch(() => { });
288
+ }
289
+ invocationLocks.clear();
290
+ brokerSessions.clear();
291
+ await new Promise((resolve) => {
292
+ clearInterval(heartbeat);
293
+ server.close(() => resolve());
294
+ });
295
+ shutdownResolved?.();
296
+ }
297
+ scheduleIdleShutdown();
298
+ const signalShutdown = () => void shutdown();
299
+ const signals = input.shutdownSignals ?? ["SIGTERM", "SIGINT"];
300
+ for (const signal of signals) {
301
+ process.once(signal, signalShutdown);
302
+ }
303
+ function removeSignalListeners() {
304
+ for (const signal of signals) {
305
+ process.off(signal, signalShutdown);
306
+ }
307
+ }
308
+ await new Promise((resolve) => {
309
+ shutdownResolved = resolve;
310
+ });
311
+ }
312
+ async function handleBrokerRequest(input) {
313
+ const body = toJsonRecord(input.envelope.body);
314
+ const manager = input.bridgeManager;
315
+ if (input.envelope.kind === "broker.handshake") {
316
+ return { ok: true, body: { state: "ready" } };
317
+ }
318
+ if (input.envelope.kind === "broker.session.list") {
319
+ return {
320
+ ok: true,
321
+ body: { sessions: [...input.brokerSessions.values()] },
322
+ };
323
+ }
324
+ if (input.envelope.kind === "broker.session.get") {
325
+ const sessionId = readBodyString(body, "sessionId");
326
+ const session = sessionId === null ? null : input.brokerSessions.get(sessionId) ?? null;
327
+ return {
328
+ ok: true,
329
+ body: {
330
+ sessionId,
331
+ state: session === null ? "missing" : "ready",
332
+ session,
333
+ },
334
+ };
335
+ }
336
+ if (manager === null) {
337
+ return {
338
+ ok: false,
339
+ body: {
340
+ state: "unavailable",
341
+ reasons: ["broker_session_manager_unavailable"],
342
+ summary: "Runtime bridge broker has no session manager.",
343
+ },
344
+ };
345
+ }
346
+ if (input.envelope.kind === "broker.session.start") {
347
+ const result = await manager.startSession(input.envelope.body);
348
+ if (result.session !== null) {
349
+ input.brokerSessions.set(result.session.sessionId, result.session);
350
+ }
351
+ input.onSessionActivity();
352
+ return { ok: result.state === "ready", body: result };
353
+ }
354
+ if (input.envelope.kind === "broker.entry.list") {
355
+ const sessionId = readBodyString(body, "sessionId");
356
+ if (sessionId === null)
357
+ return missingBrokerRequestField("sessionId");
358
+ const result = await manager.listEntries(sessionId);
359
+ return { ok: result.state === "ready", body: result };
360
+ }
361
+ if (input.envelope.kind === "broker.entry.invoke") {
362
+ const sessionId = readBodyString(body, "sessionId");
363
+ const entryId = readBodyString(body, "entryId");
364
+ if (sessionId === null)
365
+ return missingBrokerRequestField("sessionId");
366
+ if (entryId === null)
367
+ return missingBrokerRequestField("entryId");
368
+ return withSessionInvocationLock(input.invocationLocks, sessionId, entryId, async () => {
369
+ const result = await manager.invokeEntry(sessionId, entryId, body["input"] ?? {});
370
+ return { ok: result.state === "ok", body: result };
371
+ });
372
+ }
373
+ if (input.envelope.kind === "broker.screenshot.capture") {
374
+ const sessionId = readBodyString(body, "sessionId");
375
+ if (sessionId === null)
376
+ return missingBrokerRequestField("sessionId");
377
+ return withSessionInvocationLock(input.invocationLocks, sessionId, "screenshot.capture", async () => {
378
+ const result = await manager.invokeEntry(sessionId, "screenshot.capture", body["input"] ?? {});
379
+ return { ok: result.state === "ok", body: result };
380
+ });
381
+ }
382
+ if (input.envelope.kind === "broker.session.stop") {
383
+ const sessionId = readBodyString(body, "sessionId");
384
+ if (sessionId === null)
385
+ return missingBrokerRequestField("sessionId");
386
+ const result = await manager.stopSession(sessionId);
387
+ if (result.session !== null) {
388
+ input.brokerSessions.set(result.session.sessionId, result.session);
389
+ }
390
+ else {
391
+ input.brokerSessions.delete(sessionId);
392
+ }
393
+ input.invocationLocks.delete(sessionId);
394
+ input.onSessionActivity();
395
+ return { ok: result.state === "stopped", body: result };
396
+ }
397
+ if (input.envelope.kind === "broker.session.stop_all") {
398
+ await manager.stopAll();
399
+ input.invocationLocks.clear();
400
+ input.brokerSessions.clear();
401
+ input.onSessionActivity();
402
+ return { ok: true, body: { state: "stopped" } };
403
+ }
404
+ if (input.envelope.kind === "broker.prune") {
405
+ await input.shutdown();
406
+ return {
407
+ ok: true,
408
+ body: { state: "shutdown" },
409
+ };
410
+ }
411
+ return {
412
+ ok: false,
413
+ body: {
414
+ state: "unavailable",
415
+ reasons: ["broker_request_kind_not_supported"],
416
+ kind: input.envelope.kind,
417
+ },
418
+ };
419
+ }
420
+ async function withSessionInvocationLock(invocationLocks, sessionId, entryId, invoke) {
421
+ if (invocationLocks.has(sessionId)) {
422
+ return {
423
+ ok: false,
424
+ body: {
425
+ sessionId,
426
+ entryId,
427
+ state: "busy",
428
+ summary: "Runtime bridge session already has a mutating invocation in progress.",
429
+ reasons: ["bridge_session_busy"],
430
+ result: null,
431
+ waiterEvidence: null,
432
+ transcriptPath: null,
433
+ },
434
+ };
435
+ }
436
+ invocationLocks.add(sessionId);
437
+ try {
438
+ return await invoke();
439
+ }
440
+ finally {
441
+ invocationLocks.delete(sessionId);
442
+ }
443
+ }
444
+ function missingBrokerRequestField(field) {
445
+ return {
446
+ ok: false,
447
+ body: {
448
+ state: "failed",
449
+ reasons: ["broker_request_field_missing"],
450
+ field,
451
+ },
452
+ };
453
+ }
454
+ function buildBrokerRequestFailureBody(envelope, error) {
455
+ const summary = error instanceof Error ? error.message : "Runtime bridge broker request failed.";
456
+ if (envelope.kind === "broker.entry.invoke" || envelope.kind === "broker.screenshot.capture") {
457
+ const body = toJsonRecord(envelope.body);
458
+ const sessionId = readBodyString(body, "sessionId") ?? "";
459
+ const entryId = envelope.kind === "broker.screenshot.capture"
460
+ ? "screenshot.capture"
461
+ : readBodyString(body, "entryId") ?? "";
462
+ return {
463
+ sessionId,
464
+ entryId,
465
+ state: "failed",
466
+ summary,
467
+ reasons: ["broker_request_failed"],
468
+ result: null,
469
+ waiterEvidence: null,
470
+ transcriptPath: null,
471
+ };
472
+ }
473
+ return {
474
+ state: "failed",
475
+ summary,
476
+ reasons: ["broker_request_failed"],
477
+ kind: envelope.kind,
478
+ };
479
+ }
480
+ function buildBrokerSpawnArgs(input, paths) {
481
+ const cliEntrypoint = input.cliEntrypoint ?? process.argv[1];
482
+ if (!cliEntrypoint) {
483
+ throw new Error("Cannot start GDH runtime bridge broker without a CLI entrypoint.");
484
+ }
485
+ return [
486
+ ...process.execArgv,
487
+ cliEntrypoint,
488
+ "__gdh-broker-serve",
489
+ "--target",
490
+ paths.targetRootPath,
491
+ "--godot-project-root",
492
+ paths.godotProjectRootPath,
493
+ "--state-root",
494
+ paths.stateRootPath,
495
+ "--token-file",
496
+ paths.tokenFilePath,
497
+ "--metadata-file",
498
+ paths.metadataPath,
499
+ "--heartbeat-file",
500
+ paths.heartbeatPath,
501
+ ];
502
+ }
503
+ function defaultSpawnBrokerProcess(command, args, options) {
504
+ return spawn(command, args, options);
505
+ }
506
+ async function readBrokerMetadata(metadataPath) {
507
+ try {
508
+ return JSON.parse(await fs.readFile(metadataPath, "utf8"));
509
+ }
510
+ catch (error) {
511
+ if (error.code === "ENOENT")
512
+ return null;
513
+ return null;
514
+ }
515
+ }
516
+ async function readBrokerToken(tokenFilePath) {
517
+ try {
518
+ const token = (await fs.readFile(tokenFilePath, "utf8")).trim();
519
+ return token.length > 0 ? token : null;
520
+ }
521
+ catch {
522
+ return null;
523
+ }
524
+ }
525
+ async function writeMetadataAtomic(metadataPath, metadata) {
526
+ await writeFileAtomic(metadataPath, `${JSON.stringify(metadata, null, 2)}\n`);
527
+ }
528
+ async function writeFileAtomic(filePath, content, options = {}) {
529
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
530
+ const tempPath = path.join(path.dirname(filePath), `.${path.basename(filePath)}.${randomUUID()}.tmp`);
531
+ await fs.writeFile(tempPath, content, { mode: options.mode });
532
+ if (options.mode !== undefined) {
533
+ await fs.chmod(tempPath, options.mode).catch(() => { });
534
+ }
535
+ await fs.rename(tempPath, filePath);
536
+ }
537
+ async function fileExists(filePath) {
538
+ try {
539
+ await fs.access(filePath);
540
+ return true;
541
+ }
542
+ catch {
543
+ return false;
544
+ }
545
+ }
546
+ async function removeFileIfExists(filePath) {
547
+ try {
548
+ await fs.unlink(filePath);
549
+ return true;
550
+ }
551
+ catch (error) {
552
+ if (error.code === "ENOENT")
553
+ return false;
554
+ throw error;
555
+ }
556
+ }
557
+ function isProcessAlive(pid) {
558
+ if (!Number.isInteger(pid) || pid <= 0)
559
+ return false;
560
+ try {
561
+ process.kill(pid, 0);
562
+ return true;
563
+ }
564
+ catch {
565
+ return false;
566
+ }
567
+ }
568
+ function waitMs(ms) {
569
+ return new Promise((resolve) => setTimeout(resolve, ms));
570
+ }
571
+ async function readRequestBody(request) {
572
+ const chunks = [];
573
+ for await (const chunk of request) {
574
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
575
+ }
576
+ return Buffer.concat(chunks).toString("utf8");
577
+ }
578
+ function toJsonRecord(value) {
579
+ if (value === null || Array.isArray(value) || typeof value !== "object")
580
+ return {};
581
+ return value;
582
+ }
583
+ function readBodyString(body, key) {
584
+ const value = body[key];
585
+ return typeof value === "string" && value.length > 0 ? value : null;
586
+ }
587
+ //# sourceMappingURL=bridge-broker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-broker.js","sourceRoot":"","sources":["../src/bridge-broker.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,7 @@
1
1
  import { type GdhJsonValue, type GdhProjectConfig, type GdhRuntimeBridgeEntryListResult, type GdhRuntimeBridgeInvocationResult, type GdhRuntimeBridgeSessionStartResult, type GdhRuntimeBridgeSessionStopResult, type GdhRuntimeInspectionSource, type GdhRuntimeRecipeCheckResult, type GdhRuntimeRecipeListResult, type GdhRuntimeRecipeRunResult, type GdhRuntimeRecipeShowResult, type GdhRuntimeWorkspaceMode } from "@gdh/core";
2
+ export { ensureRuntimeBridgeBroker, inspectRuntimeBridgeBroker, pruneRuntimeBridgeBroker, resolveRuntimeBridgeBrokerPaths, serveRuntimeBridgeBroker, type RuntimeBridgeBrokerEnsureResult, type RuntimeBridgeBrokerPruneResult, } from "./bridge-broker.js";
3
+ export { invokeRuntimeBridgeBroker, type RuntimeBridgeBrokerClientInput, } from "./bridge-broker-client.js";
4
+ export { getRuntimeBridgeBrokerSession, invokeRuntimeBridgeBrokerEntry, listRuntimeBridgeBrokerEntries, listRuntimeBridgeBrokerSessions, startRuntimeBridgeBrokerSession, stopAllRuntimeBridgeBrokerSessions, stopRuntimeBridgeBrokerSession, } from "./bridge-broker-client.js";
2
5
  export { BROKER_DEFAULT_HEARTBEAT_STALE_AFTER_MS, BROKER_LOOPBACK_HOST, BROKER_PROTOCOL_VERSION, type GdhRuntimeBridgeBrokerPathStyle, type NormalizeBrokerTargetIdentityInput, normalizeBrokerTargetIdentity, type ValidateBrokerHandshakeInput, validateBrokerHandshake, } from "./bridge-broker-contract.js";
3
6
  export { inspectRuntimeBridgeSurface, installRuntimeBridgeSurface, removeRuntimeBridgeSurface, repairRuntimeBridgeSurface, resolveRuntimeBridgeConfig, } from "./bridge-surface.js";
4
7
  export { inspectRuntimeKnowledgeSurface } from "./knowledge-surface.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,9 @@ import WebSocket, {} from "ws";
10
10
  import { parse } from "yaml";
11
11
  import { inspectRuntimeBridgeSurface } from "./bridge-surface.js";
12
12
  import { buildDockerRuntimeLaunchPreview, ensureDockerRuntimeImagePlan, inspectDockerRuntimeProvider, toDockerContainerPath, } from "./docker-provider.js";
13
+ export { ensureRuntimeBridgeBroker, inspectRuntimeBridgeBroker, pruneRuntimeBridgeBroker, resolveRuntimeBridgeBrokerPaths, serveRuntimeBridgeBroker, } from "./bridge-broker.js";
14
+ export { invokeRuntimeBridgeBroker, } from "./bridge-broker-client.js";
15
+ export { getRuntimeBridgeBrokerSession, invokeRuntimeBridgeBrokerEntry, listRuntimeBridgeBrokerEntries, listRuntimeBridgeBrokerSessions, startRuntimeBridgeBrokerSession, stopAllRuntimeBridgeBrokerSessions, stopRuntimeBridgeBrokerSession, } from "./bridge-broker-client.js";
13
16
  export { BROKER_DEFAULT_HEARTBEAT_STALE_AFTER_MS, BROKER_LOOPBACK_HOST, BROKER_PROTOCOL_VERSION, normalizeBrokerTargetIdentity, validateBrokerHandshake, } from "./bridge-broker-contract.js";
14
17
  export { inspectRuntimeBridgeSurface, installRuntimeBridgeSurface, removeRuntimeBridgeSurface, repairRuntimeBridgeSurface, resolveRuntimeBridgeConfig, } from "./bridge-surface.js";
15
18
  export { inspectRuntimeKnowledgeSurface } from "./knowledge-surface.js";