dorkos 0.25.0 → 0.26.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.
@@ -29626,10 +29626,10 @@ var require_composer = __commonJS({
29626
29626
  * @param routeHandlers Handlers for every route
29627
29627
  * @param fallback Optional fallback middleware if no route matches
29628
29628
  */
29629
- route(router13, routeHandlers, fallback = pass) {
29629
+ route(router14, routeHandlers, fallback = pass) {
29630
29630
  return this.lazy(async (ctx) => {
29631
29631
  var _a;
29632
- const route = await router13(ctx);
29632
+ const route = await router14(ctx);
29633
29633
  return (_a = route === void 0 || !routeHandlers[route] ? fallback : routeHandlers[route]) !== null && _a !== void 0 ? _a : [];
29634
29634
  });
29635
29635
  }
@@ -70954,7 +70954,7 @@ var require_ExpressReceiver = __commonJS({
70954
70954
  processEventErrorHandler;
70955
70955
  unhandledRequestHandler;
70956
70956
  unhandledRequestTimeoutMillis;
70957
- constructor({ signingSecret = "", logger: logger3 = void 0, logLevel = logger_1.LogLevel.INFO, endpoints = { events: "/slack/events" }, processBeforeResponse = false, signatureVerification = true, clientId = void 0, clientSecret = void 0, stateSecret = void 0, redirectUri = void 0, installationStore = void 0, scopes = void 0, installerOptions = {}, app = void 0, router: router13 = void 0, customPropertiesExtractor = (_req) => ({}), dispatchErrorHandler = httpFunc.defaultAsyncDispatchErrorHandler, processEventErrorHandler = httpFunc.defaultProcessEventErrorHandler, unhandledRequestHandler = httpFunc.defaultUnhandledRequestHandler, unhandledRequestTimeoutMillis = 3001 }) {
70957
+ constructor({ signingSecret = "", logger: logger3 = void 0, logLevel = logger_1.LogLevel.INFO, endpoints = { events: "/slack/events" }, processBeforeResponse = false, signatureVerification = true, clientId = void 0, clientSecret = void 0, stateSecret = void 0, redirectUri = void 0, installationStore = void 0, scopes = void 0, installerOptions = {}, app = void 0, router: router14 = void 0, customPropertiesExtractor = (_req) => ({}), dispatchErrorHandler = httpFunc.defaultAsyncDispatchErrorHandler, processEventErrorHandler = httpFunc.defaultProcessEventErrorHandler, unhandledRequestHandler = httpFunc.defaultUnhandledRequestHandler, unhandledRequestTimeoutMillis = 3001 }) {
70958
70958
  this.app = app !== void 0 ? app : (0, express_1.default)();
70959
70959
  if (typeof logger3 !== "undefined") {
70960
70960
  this.logger = logger3;
@@ -70972,7 +70972,7 @@ var require_ExpressReceiver = __commonJS({
70972
70972
  ];
70973
70973
  this.processBeforeResponse = processBeforeResponse;
70974
70974
  const endpointList = typeof endpoints === "string" ? [endpoints] : Object.values(endpoints);
70975
- this.router = router13 !== void 0 ? router13 : (0, express_1.Router)();
70975
+ this.router = router14 !== void 0 ? router14 : (0, express_1.Router)();
70976
70976
  for (const endpoint of endpointList) {
70977
70977
  this.router.post(endpoint, ...expressMiddleware);
70978
70978
  }
@@ -81890,7 +81890,7 @@ var UiCommandSchema = z.discriminatedUnion("action", [
81890
81890
  // Canvas commands
81891
81891
  z.object({
81892
81892
  action: z.literal("open_canvas"),
81893
- content: UiCanvasContentSchema,
81893
+ content: UiCanvasContentSchema.optional(),
81894
81894
  preferredWidth: z.number().min(20).max(80).optional()
81895
81895
  }),
81896
81896
  z.object({
@@ -82737,7 +82737,7 @@ var SERVER_VERSION = resolveVersion();
82737
82737
  var IS_DEV_BUILD = checkDevBuild(SERVER_VERSION);
82738
82738
  function resolveVersion() {
82739
82739
  if (env.DORKOS_VERSION_OVERRIDE) return env.DORKOS_VERSION_OVERRIDE;
82740
- if (true) return "0.25.0";
82740
+ if (true) return "0.26.0";
82741
82741
  const pkgPath = path5.join(path5.dirname(fileURLToPath2(import.meta.url)), "../../package.json");
82742
82742
  return JSON.parse(readFileSync(pkgPath, "utf-8")).version;
82743
82743
  }
@@ -84231,6 +84231,7 @@ async function verifyPasscode(passcode, storedHash, storedSalt) {
84231
84231
  }
84232
84232
 
84233
84233
  // ../../apps/server/src/routes/tunnel.ts
84234
+ init_logger();
84234
84235
  var router8 = Router8();
84235
84236
  function resolveTunnelPort() {
84236
84237
  if (process.env.TUNNEL_PORT) return Number(process.env.TUNNEL_PORT);
@@ -84242,6 +84243,7 @@ router8.get("/status", (_req, res) => {
84242
84243
  res.json(tunnelManager.status);
84243
84244
  });
84244
84245
  router8.get("/stream", (req, res) => {
84246
+ logger.warn("[DEPRECATED] GET /api/tunnel/stream \u2014 use GET /api/events instead");
84245
84247
  res.writeHead(200, {
84246
84248
  "Content-Type": "text/event-stream",
84247
84249
  "Cache-Control": "no-cache",
@@ -84554,6 +84556,85 @@ router12.get("/", async (req, res) => {
84554
84556
  });
84555
84557
  var mcp_config_default = router12;
84556
84558
 
84559
+ // ../../apps/server/src/routes/events.ts
84560
+ import { Router as Router13 } from "express";
84561
+
84562
+ // ../../apps/server/src/services/core/event-fan-out.ts
84563
+ init_logger();
84564
+ var EventFanOut = class {
84565
+ clients = /* @__PURE__ */ new Set();
84566
+ /** Register an SSE client. Returns an unsubscribe function. */
84567
+ addClient(res) {
84568
+ if (this.clients.size >= SSE.MAX_TOTAL_CLIENTS) {
84569
+ logger.warn(`[EventFanOut] Max clients reached (${SSE.MAX_TOTAL_CLIENTS}), rejecting`);
84570
+ res.status(503).json({ error: "Too many SSE clients" });
84571
+ return () => {
84572
+ };
84573
+ }
84574
+ this.clients.add(res);
84575
+ return () => {
84576
+ this.clients.delete(res);
84577
+ };
84578
+ }
84579
+ /** Broadcast an SSE event to all connected clients. */
84580
+ broadcast(eventName, data) {
84581
+ const payload = `event: ${eventName}
84582
+ data: ${JSON.stringify(data)}
84583
+
84584
+ `;
84585
+ for (const client of this.clients) {
84586
+ if (client.writableEnded) {
84587
+ this.clients.delete(client);
84588
+ continue;
84589
+ }
84590
+ try {
84591
+ const canContinue = client.write(payload);
84592
+ if (!canContinue) {
84593
+ client.once("drain", () => {
84594
+ });
84595
+ }
84596
+ } catch {
84597
+ this.clients.delete(client);
84598
+ }
84599
+ }
84600
+ }
84601
+ /** Number of currently connected clients. */
84602
+ get clientCount() {
84603
+ return this.clients.size;
84604
+ }
84605
+ };
84606
+ var eventFanOut = new EventFanOut();
84607
+
84608
+ // ../../apps/server/src/routes/events.ts
84609
+ var router13 = Router13();
84610
+ router13.get("/", (req, res) => {
84611
+ const unsubscribe = eventFanOut.addClient(res);
84612
+ if (res.writableEnded) return;
84613
+ initSSEStream(res);
84614
+ res.write(
84615
+ `event: connected
84616
+ data: ${JSON.stringify({ connectedAt: (/* @__PURE__ */ new Date()).toISOString() })}
84617
+
84618
+ `
84619
+ );
84620
+ const heartbeat = setInterval(() => {
84621
+ if (res.writableEnded) {
84622
+ clearInterval(heartbeat);
84623
+ return;
84624
+ }
84625
+ try {
84626
+ res.write("event: heartbeat\ndata: \n\n");
84627
+ } catch {
84628
+ clearInterval(heartbeat);
84629
+ }
84630
+ }, SSE.HEARTBEAT_INTERVAL_MS);
84631
+ req.on("close", () => {
84632
+ clearInterval(heartbeat);
84633
+ unsubscribe();
84634
+ });
84635
+ });
84636
+ var events_default = router13;
84637
+
84557
84638
  // ../../apps/server/src/services/core/openapi-registry.ts
84558
84639
  init_env();
84559
84640
  import { OpenAPIRegistry, OpenApiGeneratorV31 } from "@asteasolutions/zod-to-openapi";
@@ -86184,7 +86265,7 @@ function tunnelPasscodeAuth(req, res, next) {
86184
86265
  }
86185
86266
 
86186
86267
  // ../../apps/server/src/routes/test-control.ts
86187
- import { Router as Router13 } from "express";
86268
+ import { Router as Router14 } from "express";
86188
86269
  import os2 from "os";
86189
86270
  import path12 from "path";
86190
86271
  import { z as z16 } from "zod";
@@ -86491,7 +86572,7 @@ async function removeManifest(projectPath) {
86491
86572
 
86492
86573
  // ../../apps/server/src/routes/test-control.ts
86493
86574
  init_scenario_store();
86494
- var testControlRouter = Router13();
86575
+ var testControlRouter = Router14();
86495
86576
  var scenarioSchema = z16.object({
86496
86577
  name: z16.string().min(1),
86497
86578
  sessionId: z16.string().uuid().optional()
@@ -86598,6 +86679,7 @@ function createApp() {
86598
86679
  app.use("/api/capabilities", capabilities_default);
86599
86680
  app.use("/api/uploads", uploads_default);
86600
86681
  app.use("/api/mcp-config", mcp_config_default);
86682
+ app.use("/api/events", events_default);
86601
86683
  if (env.DORKOS_TEST_RUNTIME) {
86602
86684
  app.use("/api/test", testControlRouter);
86603
86685
  }
@@ -93148,7 +93230,7 @@ import { z as z28 } from "zod";
93148
93230
 
93149
93231
  // ../../apps/server/src/routes/extensions.ts
93150
93232
  init_logger();
93151
- import { Router as Router14 } from "express";
93233
+ import { Router as Router15 } from "express";
93152
93234
  import fs14 from "fs/promises";
93153
93235
  import path20 from "path";
93154
93236
  import { z as z27 } from "zod";
@@ -93159,6 +93241,11 @@ function broadcastExtensionReloaded(extensionIds) {
93159
93241
  extensionIds,
93160
93242
  timestamp: Date.now()
93161
93243
  });
93244
+ eventFanOut.broadcast("extension_reloaded", {
93245
+ type: "extension_reloaded",
93246
+ extensionIds,
93247
+ timestamp: Date.now()
93248
+ });
93162
93249
  for (const client of sseClients) {
93163
93250
  try {
93164
93251
  client.write(`event: extension_reloaded
@@ -93175,8 +93262,9 @@ var CwdChangedBodySchema = z27.object({
93175
93262
  });
93176
93263
  var SAFE_EXT_ID = /^[a-z0-9][a-z0-9-]*$/;
93177
93264
  function createExtensionsRouter(extensionManager2, dorkHome, getCwd) {
93178
- const router13 = Router14();
93179
- router13.get("/events", (_req, res) => {
93265
+ const router14 = Router15();
93266
+ router14.get("/events", (_req, res) => {
93267
+ logger.warn("[DEPRECATED] GET /api/extensions/events \u2014 use GET /api/events instead");
93180
93268
  res.set({
93181
93269
  "Content-Type": "text/event-stream",
93182
93270
  "Cache-Control": "no-cache",
@@ -93189,7 +93277,7 @@ function createExtensionsRouter(extensionManager2, dorkHome, getCwd) {
93189
93277
  sseClients.delete(res);
93190
93278
  });
93191
93279
  });
93192
- router13.get("/", async (_req, res) => {
93280
+ router14.get("/", async (_req, res) => {
93193
93281
  try {
93194
93282
  const extensions = extensionManager2.listPublic();
93195
93283
  res.json(extensions);
@@ -93198,7 +93286,7 @@ function createExtensionsRouter(extensionManager2, dorkHome, getCwd) {
93198
93286
  res.status(500).json({ error: "Failed to list extensions" });
93199
93287
  }
93200
93288
  });
93201
- router13.post("/:id/enable", async (req, res) => {
93289
+ router14.post("/:id/enable", async (req, res) => {
93202
93290
  try {
93203
93291
  const { id } = req.params;
93204
93292
  if (!SAFE_EXT_ID.test(id)) return res.status(400).json({ error: "Invalid extension ID" });
@@ -93212,7 +93300,7 @@ function createExtensionsRouter(extensionManager2, dorkHome, getCwd) {
93212
93300
  res.status(500).json({ error: "Failed to enable extension" });
93213
93301
  }
93214
93302
  });
93215
- router13.post("/:id/disable", async (req, res) => {
93303
+ router14.post("/:id/disable", async (req, res) => {
93216
93304
  try {
93217
93305
  const { id } = req.params;
93218
93306
  if (!SAFE_EXT_ID.test(id)) return res.status(400).json({ error: "Invalid extension ID" });
@@ -93226,7 +93314,7 @@ function createExtensionsRouter(extensionManager2, dorkHome, getCwd) {
93226
93314
  res.status(500).json({ error: "Failed to disable extension" });
93227
93315
  }
93228
93316
  });
93229
- router13.post("/reload", async (_req, res) => {
93317
+ router14.post("/reload", async (_req, res) => {
93230
93318
  try {
93231
93319
  const extensions = await extensionManager2.reload();
93232
93320
  res.json(extensions);
@@ -93235,7 +93323,7 @@ function createExtensionsRouter(extensionManager2, dorkHome, getCwd) {
93235
93323
  res.status(500).json({ error: "Failed to reload extensions" });
93236
93324
  }
93237
93325
  });
93238
- router13.post("/cwd-changed", async (req, res) => {
93326
+ router14.post("/cwd-changed", async (req, res) => {
93239
93327
  try {
93240
93328
  const parsed = CwdChangedBodySchema.safeParse(req.body);
93241
93329
  if (!parsed.success) {
@@ -93255,7 +93343,7 @@ function createExtensionsRouter(extensionManager2, dorkHome, getCwd) {
93255
93343
  res.status(500).json({ error: "Failed to handle CWD change" });
93256
93344
  }
93257
93345
  });
93258
- router13.get("/:id/bundle", async (req, res) => {
93346
+ router14.get("/:id/bundle", async (req, res) => {
93259
93347
  try {
93260
93348
  const { id } = req.params;
93261
93349
  if (!SAFE_EXT_ID.test(id)) return res.status(400).json({ error: "Invalid extension ID" });
@@ -93271,7 +93359,7 @@ function createExtensionsRouter(extensionManager2, dorkHome, getCwd) {
93271
93359
  res.status(500).json({ error: "Failed to serve bundle" });
93272
93360
  }
93273
93361
  });
93274
- router13.get("/:id/data", async (req, res) => {
93362
+ router14.get("/:id/data", async (req, res) => {
93275
93363
  try {
93276
93364
  const { id } = req.params;
93277
93365
  if (!SAFE_EXT_ID.test(id)) return res.status(400).json({ error: "Invalid extension ID" });
@@ -93290,7 +93378,7 @@ function createExtensionsRouter(extensionManager2, dorkHome, getCwd) {
93290
93378
  res.status(500).json({ error: "Failed to read extension data" });
93291
93379
  }
93292
93380
  });
93293
- router13.put("/:id/data", async (req, res) => {
93381
+ router14.put("/:id/data", async (req, res) => {
93294
93382
  try {
93295
93383
  const { id } = req.params;
93296
93384
  if (!SAFE_EXT_ID.test(id)) return res.status(400).json({ error: "Invalid extension ID" });
@@ -93308,7 +93396,7 @@ function createExtensionsRouter(extensionManager2, dorkHome, getCwd) {
93308
93396
  res.status(500).json({ error: "Failed to write extension data" });
93309
93397
  }
93310
93398
  });
93311
- return router13;
93399
+ return router14;
93312
93400
  }
93313
93401
  function resolveDataPath(id, manager, dorkHome, getCwd) {
93314
93402
  const record2 = manager.get(id);
@@ -100105,7 +100193,7 @@ var SchedulerService = class {
100105
100193
  };
100106
100194
 
100107
100195
  // ../../apps/server/src/routes/pulse.ts
100108
- import { Router as Router15 } from "express";
100196
+ import { Router as Router16 } from "express";
100109
100197
 
100110
100198
  // ../../apps/server/src/services/pulse/pulse-presets.ts
100111
100199
  import { readFile as readFile5, writeFile as writeFile3, mkdir as mkdir2 } from "node:fs/promises";
@@ -100177,19 +100265,19 @@ async function loadPresets(dorkHome) {
100177
100265
 
100178
100266
  // ../../apps/server/src/routes/pulse.ts
100179
100267
  function createPulseRouter(store, scheduler, dorkHome, meshCore2) {
100180
- const router13 = Router15();
100181
- router13.get("/presets", async (_req, res) => {
100268
+ const router14 = Router16();
100269
+ router14.get("/presets", async (_req, res) => {
100182
100270
  const presets = await loadPresets(dorkHome);
100183
100271
  return res.json(presets);
100184
100272
  });
100185
- router13.get("/schedules", (_req, res) => {
100273
+ router14.get("/schedules", (_req, res) => {
100186
100274
  const schedules = store.getSchedules().map((s3) => ({
100187
100275
  ...s3,
100188
100276
  nextRun: scheduler.getNextRun(s3.id)?.toISOString() ?? null
100189
100277
  }));
100190
100278
  res.json(schedules);
100191
100279
  });
100192
- router13.post("/schedules", async (req, res) => {
100280
+ router14.post("/schedules", async (req, res) => {
100193
100281
  const data = parseBody(CreateScheduleRequestSchema, req.body, res);
100194
100282
  if (!data) return;
100195
100283
  if (data.cwd) {
@@ -100210,7 +100298,7 @@ function createPulseRouter(store, scheduler, dorkHome, meshCore2) {
100210
100298
  }
100211
100299
  return res.status(201).json(schedule);
100212
100300
  });
100213
- router13.patch("/schedules/:id", async (req, res) => {
100301
+ router14.patch("/schedules/:id", async (req, res) => {
100214
100302
  const data = parseBody(UpdateScheduleRequestSchema, req.body, res);
100215
100303
  if (!data) return;
100216
100304
  if (data.cwd) {
@@ -100236,7 +100324,7 @@ function createPulseRouter(store, scheduler, dorkHome, meshCore2) {
100236
100324
  }
100237
100325
  return res.json(updated);
100238
100326
  });
100239
- router13.delete("/schedules/:id", (_req, res) => {
100327
+ router14.delete("/schedules/:id", (_req, res) => {
100240
100328
  const { id } = _req.params;
100241
100329
  scheduler.unregisterSchedule(id);
100242
100330
  const deleted = store.deleteSchedule(id);
@@ -100245,14 +100333,14 @@ function createPulseRouter(store, scheduler, dorkHome, meshCore2) {
100245
100333
  }
100246
100334
  return res.json({ success: true });
100247
100335
  });
100248
- router13.post("/schedules/:id/trigger", async (_req, res) => {
100336
+ router14.post("/schedules/:id/trigger", async (_req, res) => {
100249
100337
  const run = await scheduler.triggerManualRun(_req.params.id);
100250
100338
  if (!run) {
100251
100339
  return res.status(404).json({ error: "Schedule not found" });
100252
100340
  }
100253
100341
  return res.status(201).json({ runId: run.id });
100254
100342
  });
100255
- router13.get("/runs", (req, res) => {
100343
+ router14.get("/runs", (req, res) => {
100256
100344
  const data = parseBody(ListRunsQuerySchema, req.query, res);
100257
100345
  if (!data) return;
100258
100346
  const runs = store.listRuns({
@@ -100263,21 +100351,21 @@ function createPulseRouter(store, scheduler, dorkHome, meshCore2) {
100263
100351
  });
100264
100352
  return res.json(runs);
100265
100353
  });
100266
- router13.get("/runs/:id", (req, res) => {
100354
+ router14.get("/runs/:id", (req, res) => {
100267
100355
  const run = store.getRun(req.params.id);
100268
100356
  if (!run) {
100269
100357
  return res.status(404).json({ error: "Run not found" });
100270
100358
  }
100271
100359
  res.json(run);
100272
100360
  });
100273
- router13.post("/runs/:id/cancel", (req, res) => {
100361
+ router14.post("/runs/:id/cancel", (req, res) => {
100274
100362
  const cancelled = scheduler.cancelRun(req.params.id);
100275
100363
  if (!cancelled) {
100276
100364
  return res.status(404).json({ error: "Run not found or not active" });
100277
100365
  }
100278
100366
  return res.json({ success: true });
100279
100367
  });
100280
- return router13;
100368
+ return router14;
100281
100369
  }
100282
100370
 
100283
100371
  // ../relay/dist/relay-core.js
@@ -125816,7 +125904,7 @@ function validateAdapterShape(obj, id) {
125816
125904
  }
125817
125905
 
125818
125906
  // ../../apps/server/src/routes/relay.ts
125819
- import { Router as Router17 } from "express";
125907
+ import { Router as Router18 } from "express";
125820
125908
 
125821
125909
  // ../../apps/server/src/services/relay/subject-resolver.ts
125822
125910
  var SESSION_ID_PREVIEW_LENGTH = 7;
@@ -125858,7 +125946,7 @@ async function resolveSubjectLabels(subjects, deps) {
125858
125946
  }
125859
125947
 
125860
125948
  // ../../apps/server/src/routes/relay-adapters.ts
125861
- import { Router as Router16 } from "express";
125949
+ import { Router as Router17 } from "express";
125862
125950
  import express2 from "express";
125863
125951
  import { z as z31 } from "zod";
125864
125952
 
@@ -127295,8 +127383,8 @@ function sendAdapterError(res, err) {
127295
127383
  res.status(status).json({ error: err.message, code: err.code });
127296
127384
  }
127297
127385
  function createAdapterRouter(adapterManager2, traceStore2) {
127298
- const router13 = Router16();
127299
- router13.get("/adapters/catalog", (_req, res) => {
127386
+ const router14 = Router17();
127387
+ router14.get("/adapters/catalog", (_req, res) => {
127300
127388
  try {
127301
127389
  res.json(adapterManager2.getCatalog());
127302
127390
  } catch (err) {
@@ -127304,7 +127392,7 @@ function createAdapterRouter(adapterManager2, traceStore2) {
127304
127392
  res.status(500).json({ error: message });
127305
127393
  }
127306
127394
  });
127307
- router13.post("/adapters/reload", async (_req, res) => {
127395
+ router14.post("/adapters/reload", async (_req, res) => {
127308
127396
  try {
127309
127397
  await adapterManager2.reload();
127310
127398
  return res.json({ ok: true });
@@ -127313,13 +127401,13 @@ function createAdapterRouter(adapterManager2, traceStore2) {
127313
127401
  return res.status(500).json({ error: message });
127314
127402
  }
127315
127403
  });
127316
- router13.get("/adapters", (_req, res) => res.json(adapterManager2.listAdapters()));
127317
- router13.get("/adapters/:id", (req, res) => {
127404
+ router14.get("/adapters", (_req, res) => res.json(adapterManager2.listAdapters()));
127405
+ router14.get("/adapters/:id", (req, res) => {
127318
127406
  const adapter = adapterManager2.getAdapter(req.params.id);
127319
127407
  if (!adapter) return res.status(404).json({ error: "Adapter not found" });
127320
127408
  return res.json(adapter);
127321
127409
  });
127322
- router13.post("/adapters/test", async (req, res) => {
127410
+ router14.post("/adapters/test", async (req, res) => {
127323
127411
  const result2 = AdapterTestRequestSchema.safeParse(req.body);
127324
127412
  if (!result2.success) {
127325
127413
  return res.status(400).json({ error: "Validation failed", details: result2.error.flatten() });
@@ -127332,7 +127420,7 @@ function createAdapterRouter(adapterManager2, traceStore2) {
127332
127420
  return res.status(500).json({ error: message });
127333
127421
  }
127334
127422
  });
127335
- router13.post("/adapters", async (req, res) => {
127423
+ router14.post("/adapters", async (req, res) => {
127336
127424
  const result2 = AdapterCreateRequestSchema.safeParse(req.body);
127337
127425
  if (!result2.success) {
127338
127426
  return res.status(400).json({ error: "Validation failed", details: result2.error.flatten() });
@@ -127348,7 +127436,7 @@ function createAdapterRouter(adapterManager2, traceStore2) {
127348
127436
  return res.status(500).json({ error: message });
127349
127437
  }
127350
127438
  });
127351
- router13.delete("/adapters/:id", async (req, res) => {
127439
+ router14.delete("/adapters/:id", async (req, res) => {
127352
127440
  try {
127353
127441
  await adapterManager2.removeAdapter(req.params.id);
127354
127442
  return res.json({ ok: true });
@@ -127358,7 +127446,7 @@ function createAdapterRouter(adapterManager2, traceStore2) {
127358
127446
  return res.status(500).json({ error: message });
127359
127447
  }
127360
127448
  });
127361
- router13.patch("/adapters/:id/config", async (req, res) => {
127449
+ router14.patch("/adapters/:id/config", async (req, res) => {
127362
127450
  const result2 = AdapterConfigUpdateSchema.safeParse(req.body);
127363
127451
  if (!result2.success) {
127364
127452
  return res.status(400).json({ error: "Validation failed", details: result2.error.flatten() });
@@ -127372,7 +127460,7 @@ function createAdapterRouter(adapterManager2, traceStore2) {
127372
127460
  return res.status(500).json({ error: message });
127373
127461
  }
127374
127462
  });
127375
- router13.post("/adapters/:id/enable", async (req, res) => {
127463
+ router14.post("/adapters/:id/enable", async (req, res) => {
127376
127464
  try {
127377
127465
  await adapterManager2.enable(req.params.id);
127378
127466
  return res.json({ ok: true });
@@ -127380,7 +127468,7 @@ function createAdapterRouter(adapterManager2, traceStore2) {
127380
127468
  return res.status(400).json({ error: err instanceof Error ? err.message : "Enable failed" });
127381
127469
  }
127382
127470
  });
127383
- router13.post("/adapters/:id/disable", async (req, res) => {
127471
+ router14.post("/adapters/:id/disable", async (req, res) => {
127384
127472
  try {
127385
127473
  await adapterManager2.disable(req.params.id);
127386
127474
  return res.json({ ok: true });
@@ -127388,7 +127476,7 @@ function createAdapterRouter(adapterManager2, traceStore2) {
127388
127476
  return res.status(400).json({ error: err instanceof Error ? err.message : "Disable failed" });
127389
127477
  }
127390
127478
  });
127391
- router13.get("/adapters/:id/events", (_req, res) => {
127479
+ router14.get("/adapters/:id/events", (_req, res) => {
127392
127480
  if (!traceStore2) return res.status(404).json({ error: "Tracing not available" });
127393
127481
  const { id } = _req.params;
127394
127482
  const limitParam = parseInt(_req.query.limit);
@@ -127396,7 +127484,7 @@ function createAdapterRouter(adapterManager2, traceStore2) {
127396
127484
  const events = traceStore2.getAdapterEvents(id, limit);
127397
127485
  return res.json({ events });
127398
127486
  });
127399
- router13.get("/adapters/:id/chats", (_req, res) => {
127487
+ router14.get("/adapters/:id/chats", (_req, res) => {
127400
127488
  if (!traceStore2) return res.status(404).json({ error: "Tracing not available" });
127401
127489
  const { id } = _req.params;
127402
127490
  const limitParam = parseInt(_req.query.limit);
@@ -127404,19 +127492,19 @@ function createAdapterRouter(adapterManager2, traceStore2) {
127404
127492
  const chats = traceStore2.getObservedChats(id, limit);
127405
127493
  return res.json({ chats });
127406
127494
  });
127407
- router13.get("/bindings", (_req, res) => {
127495
+ router14.get("/bindings", (_req, res) => {
127408
127496
  const bindingStore = adapterManager2.getBindingStore();
127409
127497
  if (!bindingStore) return res.status(503).json({ error: "Binding subsystem not available" });
127410
127498
  return res.json({ bindings: bindingStore.getAll() });
127411
127499
  });
127412
- router13.get("/bindings/:id", (req, res) => {
127500
+ router14.get("/bindings/:id", (req, res) => {
127413
127501
  const bindingStore = adapterManager2.getBindingStore();
127414
127502
  if (!bindingStore) return res.status(503).json({ error: "Binding subsystem not available" });
127415
127503
  const binding = bindingStore.getById(req.params.id);
127416
127504
  if (!binding) return res.status(404).json({ error: "Binding not found" });
127417
127505
  return res.json({ binding });
127418
127506
  });
127419
- router13.post("/bindings", async (req, res) => {
127507
+ router14.post("/bindings", async (req, res) => {
127420
127508
  const bindingStore = adapterManager2.getBindingStore();
127421
127509
  if (!bindingStore) return res.status(503).json({ error: "Binding subsystem not available" });
127422
127510
  const result2 = CreateBindingRequestSchema.safeParse(req.body);
@@ -127446,7 +127534,7 @@ function createAdapterRouter(adapterManager2, traceStore2) {
127446
127534
  return res.status(500).json({ error: message });
127447
127535
  }
127448
127536
  });
127449
- router13.patch("/bindings/:id", async (req, res) => {
127537
+ router14.patch("/bindings/:id", async (req, res) => {
127450
127538
  const bindingStore = adapterManager2.getBindingStore();
127451
127539
  if (!bindingStore) {
127452
127540
  return res.status(503).json({ error: "Binding subsystem not available" });
@@ -127477,7 +127565,7 @@ function createAdapterRouter(adapterManager2, traceStore2) {
127477
127565
  }
127478
127566
  return res.json({ binding: updated });
127479
127567
  });
127480
- router13.delete("/bindings/:id", async (req, res) => {
127568
+ router14.delete("/bindings/:id", async (req, res) => {
127481
127569
  const bindingStore = adapterManager2.getBindingStore();
127482
127570
  if (!bindingStore) return res.status(503).json({ error: "Binding subsystem not available" });
127483
127571
  const deleted = await bindingStore.delete(req.params.id);
@@ -127489,7 +127577,7 @@ function createAdapterRouter(adapterManager2, traceStore2) {
127489
127577
  }
127490
127578
  return res.json({ ok: true });
127491
127579
  });
127492
- router13.post("/webhooks/:adapterId", express2.raw({ type: "*/*" }), async (req, res) => {
127580
+ router14.post("/webhooks/:adapterId", express2.raw({ type: "*/*" }), async (req, res) => {
127493
127581
  const adapterInfo = adapterManager2.getAdapter(req.params.adapterId);
127494
127582
  if (!adapterInfo || adapterInfo.config.type !== "webhook") {
127495
127583
  return res.status(404).json({ error: "Webhook adapter not found" });
@@ -127508,10 +127596,11 @@ function createAdapterRouter(adapterManager2, traceStore2) {
127508
127596
  if (result2.ok) return res.status(200).json({ ok: true });
127509
127597
  return res.status(401).json({ error: result2.error });
127510
127598
  });
127511
- return router13;
127599
+ return router14;
127512
127600
  }
127513
127601
 
127514
127602
  // ../../apps/server/src/routes/relay.ts
127603
+ init_logger();
127515
127604
  var ALLOWED_PREFIXES = ["relay.human.console.", "relay.system.", "relay.signal."];
127516
127605
  var PREVIEW_MAX_CHARS = 120;
127517
127606
  function validateSubscriptionPattern(pattern) {
@@ -127578,8 +127667,8 @@ function buildConversations(messages, deadLetters, labelMap) {
127578
127667
  });
127579
127668
  }
127580
127669
  function createRelayRouter(relayCore2, adapterManager2, traceStore2) {
127581
- const router13 = Router17();
127582
- router13.post("/messages", async (req, res) => {
127670
+ const router14 = Router18();
127671
+ router14.post("/messages", async (req, res) => {
127583
127672
  const result2 = SendMessageRequestSchema2.safeParse(req.body);
127584
127673
  if (!result2.success) {
127585
127674
  return res.status(400).json({ error: "Validation failed", details: result2.error.flatten() });
@@ -127599,7 +127688,7 @@ function createRelayRouter(relayCore2, adapterManager2, traceStore2) {
127599
127688
  });
127600
127689
  }
127601
127690
  });
127602
- router13.get("/messages", (_req, res) => {
127691
+ router14.get("/messages", (_req, res) => {
127603
127692
  const result2 = MessageListQuerySchema.safeParse(_req.query);
127604
127693
  if (!result2.success) {
127605
127694
  return res.status(400).json({ error: "Validation failed", details: result2.error.flatten() });
@@ -127607,7 +127696,7 @@ function createRelayRouter(relayCore2, adapterManager2, traceStore2) {
127607
127696
  const messages = relayCore2.listMessages(result2.data);
127608
127697
  return res.json(messages);
127609
127698
  });
127610
- router13.get("/conversations", async (_req, res) => {
127699
+ router14.get("/conversations", async (_req, res) => {
127611
127700
  try {
127612
127701
  const messages = relayCore2.listMessages({});
127613
127702
  const deadLetters = await relayCore2.getDeadLetters();
@@ -127628,15 +127717,15 @@ function createRelayRouter(relayCore2, adapterManager2, traceStore2) {
127628
127717
  return res.status(500).json({ error: message });
127629
127718
  }
127630
127719
  });
127631
- router13.get("/messages/:id", (_req, res) => {
127720
+ router14.get("/messages/:id", (_req, res) => {
127632
127721
  const message = relayCore2.getMessage(_req.params.id);
127633
127722
  if (!message) return res.status(404).json({ error: "Message not found" });
127634
127723
  return res.json(message);
127635
127724
  });
127636
- router13.get("/endpoints", (_req, res) => {
127725
+ router14.get("/endpoints", (_req, res) => {
127637
127726
  return res.json(relayCore2.listEndpoints());
127638
127727
  });
127639
- router13.post("/endpoints", async (req, res) => {
127728
+ router14.post("/endpoints", async (req, res) => {
127640
127729
  const result2 = EndpointRegistrationSchema.safeParse(req.body);
127641
127730
  if (!result2.success) {
127642
127731
  return res.status(400).json({ error: "Validation failed", details: result2.error.flatten() });
@@ -127649,12 +127738,12 @@ function createRelayRouter(relayCore2, adapterManager2, traceStore2) {
127649
127738
  return res.status(422).json({ error: message });
127650
127739
  }
127651
127740
  });
127652
- router13.delete(/^\/endpoints\/(.+)$/, async (req, res) => {
127741
+ router14.delete(/^\/endpoints\/(.+)$/, async (req, res) => {
127653
127742
  const removed = await relayCore2.unregisterEndpoint(req.params[0]);
127654
127743
  if (!removed) return res.status(404).json({ error: "Endpoint not found" });
127655
127744
  return res.json({ success: true });
127656
127745
  });
127657
- router13.get(/^\/endpoints\/(.+)\/inbox$/, (_req, res) => {
127746
+ router14.get(/^\/endpoints\/(.+)\/inbox$/, (_req, res) => {
127658
127747
  const result2 = InboxQuerySchema.safeParse(_req.query);
127659
127748
  if (!result2.success) {
127660
127749
  return res.status(400).json({ error: "Validation failed", details: result2.error.flatten() });
@@ -127669,12 +127758,12 @@ function createRelayRouter(relayCore2, adapterManager2, traceStore2) {
127669
127758
  throw err;
127670
127759
  }
127671
127760
  });
127672
- router13.get("/dead-letters", async (_req, res) => {
127761
+ router14.get("/dead-letters", async (_req, res) => {
127673
127762
  const endpointHash = _req.query.endpointHash;
127674
127763
  const deadLetters = await relayCore2.getDeadLetters(endpointHash ? { endpointHash } : void 0);
127675
127764
  return res.json(deadLetters);
127676
127765
  });
127677
- router13.get("/dead-letters/aggregated", async (_req, res) => {
127766
+ router14.get("/dead-letters/aggregated", async (_req, res) => {
127678
127767
  const deadLetters = await relayCore2.getDeadLetters();
127679
127768
  const groups = /* @__PURE__ */ new Map();
127680
127769
  for (const dl of deadLetters) {
@@ -127698,7 +127787,7 @@ function createRelayRouter(relayCore2, adapterManager2, traceStore2) {
127698
127787
  }
127699
127788
  return res.json({ groups: [...groups.values()] });
127700
127789
  });
127701
- router13.delete("/dead-letters", async (req, res) => {
127790
+ router14.delete("/dead-letters", async (req, res) => {
127702
127791
  const { source, reason } = req.body;
127703
127792
  if (!source || !reason) {
127704
127793
  return res.status(400).json({ error: "source and reason are required" });
@@ -127712,19 +127801,20 @@ function createRelayRouter(relayCore2, adapterManager2, traceStore2) {
127712
127801
  }
127713
127802
  return res.json({ removed: toRemove.length });
127714
127803
  });
127715
- router13.get("/metrics", (_req, res) => res.json(relayCore2.getMetrics()));
127716
- router13.get("/messages/:id/trace", (_req, res) => {
127804
+ router14.get("/metrics", (_req, res) => res.json(relayCore2.getMetrics()));
127805
+ router14.get("/messages/:id/trace", (_req, res) => {
127717
127806
  if (!traceStore2) return res.status(404).json({ error: "Tracing not available" });
127718
127807
  const span = traceStore2.getSpanByMessageId(_req.params.id);
127719
127808
  if (!span) return res.status(404).json({ error: "Trace not found" });
127720
127809
  const spans = traceStore2.getTrace(span.traceId);
127721
127810
  return res.json({ traceId: span.traceId, spans });
127722
127811
  });
127723
- router13.get("/trace/metrics", (_req, res) => {
127812
+ router14.get("/trace/metrics", (_req, res) => {
127724
127813
  if (!traceStore2) return res.status(404).json({ error: "Tracing not available" });
127725
127814
  return res.json(traceStore2.getMetrics());
127726
127815
  });
127727
- router13.get("/stream", (req, res) => {
127816
+ router14.get("/stream", (req, res) => {
127817
+ logger.warn("[DEPRECATED] GET /api/relay/stream \u2014 use GET /api/events instead");
127728
127818
  const pattern = req.query.subject || "relay.human.console.>";
127729
127819
  if (!validateSubscriptionPattern(pattern)) {
127730
127820
  return res.status(400).json({ error: "Invalid subscription pattern", allowedPrefixes: ALLOWED_PREFIXES });
@@ -127793,9 +127883,9 @@ function createRelayRouter(relayCore2, adapterManager2, traceStore2) {
127793
127883
  });
127794
127884
  });
127795
127885
  if (adapterManager2) {
127796
- router13.use("/", createAdapterRouter(adapterManager2, traceStore2));
127886
+ router14.use("/", createAdapterRouter(adapterManager2, traceStore2));
127797
127887
  }
127798
- return router13;
127888
+ return router14;
127799
127889
  }
127800
127890
 
127801
127891
  // ../../apps/server/src/services/relay/trace-store.ts
@@ -129525,7 +129615,7 @@ var MeshCore = class {
129525
129615
  };
129526
129616
 
129527
129617
  // ../../apps/server/src/routes/mesh.ts
129528
- import { Router as Router18 } from "express";
129618
+ import { Router as Router19 } from "express";
129529
129619
  function enrichTopology(topology, deps) {
129530
129620
  const scheduleCounts = /* @__PURE__ */ new Map();
129531
129621
  if (deps.pulseStore) {
@@ -129608,8 +129698,8 @@ function enrichAgent(agent, namespace, deps, scheduleCounts, relayEndpoints) {
129608
129698
  function createMeshRouter(deps) {
129609
129699
  const resolvedDeps = "meshCore" in deps ? deps : { meshCore: deps };
129610
129700
  const meshCore2 = resolvedDeps.meshCore;
129611
- const router13 = Router18();
129612
- router13.post("/discover", async (req, res) => {
129701
+ const router14 = Router19();
129702
+ router14.post("/discover", async (req, res) => {
129613
129703
  const result2 = DiscoverRequestSchema.safeParse(req.body);
129614
129704
  if (!result2.success) {
129615
129705
  return res.status(400).json({ error: "Validation failed", details: result2.error.flatten() });
@@ -129640,7 +129730,7 @@ function createMeshRouter(deps) {
129640
129730
  return res.status(500).json({ error: message });
129641
129731
  }
129642
129732
  });
129643
- router13.post("/agents", async (req, res) => {
129733
+ router14.post("/agents", async (req, res) => {
129644
129734
  const result2 = RegisterAgentRequestSchema.safeParse(req.body);
129645
129735
  if (!result2.success) {
129646
129736
  return res.status(400).json({ error: "Validation failed", details: result2.error.flatten() });
@@ -129671,13 +129761,13 @@ function createMeshRouter(deps) {
129671
129761
  return res.status(422).json({ error: message });
129672
129762
  }
129673
129763
  });
129674
- router13.get("/topology", (req, res) => {
129764
+ router14.get("/topology", (req, res) => {
129675
129765
  const namespace = req.query.namespace ?? "*";
129676
129766
  const topology = meshCore2.getTopology(namespace);
129677
129767
  const enriched = enrichTopology(topology, resolvedDeps);
129678
129768
  return res.json(enriched);
129679
129769
  });
129680
- router13.put("/topology/access", (req, res) => {
129770
+ router14.put("/topology/access", (req, res) => {
129681
129771
  const result2 = UpdateAccessRuleRequestSchema.safeParse(req.body);
129682
129772
  if (!result2.success) {
129683
129773
  return res.status(400).json({ error: "Validation failed", details: result2.error.flatten() });
@@ -129690,15 +129780,15 @@ function createMeshRouter(deps) {
129690
129780
  }
129691
129781
  return res.json({ sourceNamespace, targetNamespace, action });
129692
129782
  });
129693
- router13.get("/status", (_req, res) => {
129783
+ router14.get("/status", (_req, res) => {
129694
129784
  const status = meshCore2.getStatus();
129695
129785
  res.json(status);
129696
129786
  });
129697
- router13.get("/agents/paths", (_req, res) => {
129787
+ router14.get("/agents/paths", (_req, res) => {
129698
129788
  const agents2 = meshCore2.listWithPaths();
129699
129789
  return res.json({ agents: agents2 });
129700
129790
  });
129701
- router13.get("/agents", (req, res) => {
129791
+ router14.get("/agents", (req, res) => {
129702
129792
  const result2 = AgentListQuerySchema.safeParse(req.query);
129703
129793
  if (!result2.success) {
129704
129794
  return res.status(400).json({ error: "Validation failed", details: result2.error.flatten() });
@@ -129707,17 +129797,17 @@ function createMeshRouter(deps) {
129707
129797
  const agents2 = callerNamespace ? meshCore2.list({ ...filters, callerNamespace }) : meshCore2.listWithHealth(filters);
129708
129798
  return res.json({ agents: agents2 });
129709
129799
  });
129710
- router13.get("/agents/:id/access", (req, res) => {
129800
+ router14.get("/agents/:id/access", (req, res) => {
129711
129801
  const agents2 = meshCore2.getAgentAccess(req.params.id);
129712
129802
  if (!agents2) return res.status(404).json({ error: "Agent not found" });
129713
129803
  return res.json({ agents: agents2 });
129714
129804
  });
129715
- router13.get("/agents/:id/health", (req, res) => {
129805
+ router14.get("/agents/:id/health", (req, res) => {
129716
129806
  const health = meshCore2.getAgentHealth(req.params.id);
129717
129807
  if (!health) return res.status(404).json({ error: "Agent not found" });
129718
129808
  return res.json(health);
129719
129809
  });
129720
- router13.post("/agents/:id/heartbeat", (req, res) => {
129810
+ router14.post("/agents/:id/heartbeat", (req, res) => {
129721
129811
  const parsed = HeartbeatRequestSchema.safeParse(req.body ?? {});
129722
129812
  const event = parsed.success ? parsed.data.event ?? "heartbeat" : "heartbeat";
129723
129813
  const health = meshCore2.getAgentHealth(req.params.id);
@@ -129725,14 +129815,14 @@ function createMeshRouter(deps) {
129725
129815
  meshCore2.updateLastSeen(req.params.id, event);
129726
129816
  return res.json({ success: true });
129727
129817
  });
129728
- router13.get("/agents/:id", (req, res) => {
129818
+ router14.get("/agents/:id", (req, res) => {
129729
129819
  const agent = meshCore2.get(req.params.id);
129730
129820
  if (!agent) {
129731
129821
  return res.status(404).json({ error: "Agent not found" });
129732
129822
  }
129733
129823
  return res.json(agent);
129734
129824
  });
129735
- router13.patch("/agents/:id", async (req, res) => {
129825
+ router14.patch("/agents/:id", async (req, res) => {
129736
129826
  const result2 = UpdateAgentRequestSchema.safeParse(req.body);
129737
129827
  if (!result2.success) {
129738
129828
  return res.status(400).json({ error: "Validation failed", details: result2.error.flatten() });
@@ -129746,7 +129836,7 @@ function createMeshRouter(deps) {
129746
129836
  }
129747
129837
  return res.json(updated);
129748
129838
  });
129749
- router13.delete("/agents/:id", async (req, res) => {
129839
+ router14.delete("/agents/:id", async (req, res) => {
129750
129840
  const agent = meshCore2.get(req.params.id);
129751
129841
  if (!agent) {
129752
129842
  return res.status(404).json({ error: "Agent not found" });
@@ -129754,7 +129844,7 @@ function createMeshRouter(deps) {
129754
129844
  await meshCore2.unregister(req.params.id);
129755
129845
  return res.json({ success: true });
129756
129846
  });
129757
- router13.post("/deny", async (req, res) => {
129847
+ router14.post("/deny", async (req, res) => {
129758
129848
  const result2 = DenyRequestSchema.safeParse(req.body);
129759
129849
  if (!result2.success) {
129760
129850
  return res.status(400).json({ error: "Validation failed", details: result2.error.flatten() });
@@ -129772,11 +129862,11 @@ function createMeshRouter(deps) {
129772
129862
  return res.status(422).json({ error: message });
129773
129863
  }
129774
129864
  });
129775
- router13.get("/denied", (_req, res) => {
129865
+ router14.get("/denied", (_req, res) => {
129776
129866
  const denied = meshCore2.listDenied();
129777
129867
  return res.json({ denied });
129778
129868
  });
129779
- router13.delete("/denied/:encodedPath", async (req, res) => {
129869
+ router14.delete("/denied/:encodedPath", async (req, res) => {
129780
129870
  const filePath = decodeURIComponent(req.params.encodedPath);
129781
129871
  if (filePath.includes("..") || filePath.includes("\0")) {
129782
129872
  return res.status(400).json({ error: "Invalid path" });
@@ -129789,11 +129879,11 @@ function createMeshRouter(deps) {
129789
129879
  await meshCore2.undeny(filePath);
129790
129880
  return res.json({ success: true });
129791
129881
  });
129792
- return router13;
129882
+ return router14;
129793
129883
  }
129794
129884
 
129795
129885
  // ../../apps/server/src/routes/a2a.ts
129796
- import { Router as Router19 } from "express";
129886
+ import { Router as Router20 } from "express";
129797
129887
 
129798
129888
  // ../a2a-gateway/dist/agent-card-generator.js
129799
129889
  var DEFAULT_INPUT_MODES = ["text/plain"];
@@ -131426,9 +131516,9 @@ import express22 from "express";
131426
131516
  import express42 from "express";
131427
131517
  function jsonRpcHandler(options) {
131428
131518
  const jsonRpcTransportHandler = new JsonRpcTransportHandler(options.requestHandler);
131429
- const router13 = express4.Router();
131430
- router13.use(express4.json(), jsonErrorHandler);
131431
- router13.post("/", async (req, res) => {
131519
+ const router14 = express4.Router();
131520
+ router14.use(express4.json(), jsonErrorHandler);
131521
+ router14.post("/", async (req, res) => {
131432
131522
  try {
131433
131523
  const user = await options.userBuilder(req);
131434
131524
  const context = new ServerCallContext(
@@ -131494,7 +131584,7 @@ function jsonRpcHandler(options) {
131494
131584
  }
131495
131585
  }
131496
131586
  });
131497
- return router13;
131587
+ return router14;
131498
131588
  }
131499
131589
  var jsonErrorHandler = (err, _req, res, next) => {
131500
131590
  if (err instanceof SyntaxError && "body" in err) {
@@ -131547,7 +131637,7 @@ function createA2aHandlers(deps) {
131547
131637
 
131548
131638
  // ../../apps/server/src/routes/a2a.ts
131549
131639
  function createA2aRouter(deps) {
131550
- const router13 = Router19();
131640
+ const router14 = Router20();
131551
131641
  const config = { baseUrl: deps.baseUrl, version: deps.version };
131552
131642
  const handlers = createA2aHandlers({
131553
131643
  agentRegistry: deps.meshCore,
@@ -131555,18 +131645,18 @@ function createA2aRouter(deps) {
131555
131645
  db: deps.db,
131556
131646
  config
131557
131647
  });
131558
- router13.get("/agents/:id/card", handlers.agentCard);
131559
- router13.post("/", handlers.jsonRpc);
131560
- return { router: router13, fleetCardHandler: handlers.fleetCard };
131648
+ router14.get("/agents/:id/card", handlers.agentCard);
131649
+ router14.post("/", handlers.jsonRpc);
131650
+ return { router: router14, fleetCardHandler: handlers.fleetCard };
131561
131651
  }
131562
131652
 
131563
131653
  // ../../apps/server/src/routes/agents.ts
131564
- import { Router as Router20 } from "express";
131654
+ import { Router as Router21 } from "express";
131565
131655
  import path36 from "path";
131566
131656
  init_logger();
131567
131657
  function createAgentsRouter(meshCore2) {
131568
- const router13 = Router20();
131569
- router13.get("/current", async (req, res) => {
131658
+ const router14 = Router21();
131659
+ router14.get("/current", async (req, res) => {
131570
131660
  try {
131571
131661
  const agentPath = req.query.path;
131572
131662
  if (!agentPath) {
@@ -131588,7 +131678,7 @@ function createAgentsRouter(meshCore2) {
131588
131678
  return res.status(500).json({ error: "Internal server error" });
131589
131679
  }
131590
131680
  });
131591
- router13.post("/resolve", async (req, res) => {
131681
+ router14.post("/resolve", async (req, res) => {
131592
131682
  try {
131593
131683
  const result2 = ResolveAgentsRequestSchema.safeParse(req.body);
131594
131684
  if (!result2.success) {
@@ -131611,7 +131701,7 @@ function createAgentsRouter(meshCore2) {
131611
131701
  return res.status(500).json({ error: "Internal server error" });
131612
131702
  }
131613
131703
  });
131614
- router13.post("/", async (req, res) => {
131704
+ router14.post("/", async (req, res) => {
131615
131705
  try {
131616
131706
  const result2 = CreateAgentRequestSchema.safeParse(req.body);
131617
131707
  if (!result2.success) {
@@ -131655,7 +131745,7 @@ function createAgentsRouter(meshCore2) {
131655
131745
  return res.status(500).json({ error: "Internal server error" });
131656
131746
  }
131657
131747
  });
131658
- router13.post("/create", async (req, res) => {
131748
+ router14.post("/create", async (req, res) => {
131659
131749
  try {
131660
131750
  const result2 = await createAgentWorkspace(req.body, meshCore2);
131661
131751
  return res.status(201).json({
@@ -131676,7 +131766,7 @@ function createAgentsRouter(meshCore2) {
131676
131766
  return res.status(500).json({ error: "Internal server error" });
131677
131767
  }
131678
131768
  });
131679
- router13.patch("/current", async (req, res) => {
131769
+ router14.patch("/current", async (req, res) => {
131680
131770
  try {
131681
131771
  const agentPath = req.query.path;
131682
131772
  if (!agentPath) {
@@ -131714,7 +131804,7 @@ function createAgentsRouter(meshCore2) {
131714
131804
  return res.status(500).json({ error: "Internal server error" });
131715
131805
  }
131716
131806
  });
131717
- router13.post("/current/migrate-persona", async (req, res) => {
131807
+ router14.post("/current/migrate-persona", async (req, res) => {
131718
131808
  try {
131719
131809
  const agentPath = req.query.path;
131720
131810
  if (!agentPath) {
@@ -131750,11 +131840,11 @@ function createAgentsRouter(meshCore2) {
131750
131840
  return res.status(500).json({ error: "Internal server error" });
131751
131841
  }
131752
131842
  });
131753
- return router13;
131843
+ return router14;
131754
131844
  }
131755
131845
 
131756
131846
  // ../../apps/server/src/routes/discovery.ts
131757
- import { Router as Router21 } from "express";
131847
+ import { Router as Router22 } from "express";
131758
131848
  import { z as z32 } from "zod";
131759
131849
  var ScanRequestSchema = z32.object({
131760
131850
  root: z32.string().optional(),
@@ -131763,8 +131853,8 @@ var ScanRequestSchema = z32.object({
131763
131853
  timeout: z32.number().int().min(1e3).max(12e4).optional()
131764
131854
  });
131765
131855
  function createDiscoveryRouter(meshCore2) {
131766
- const router13 = Router21();
131767
- router13.post("/scan", async (req, res) => {
131856
+ const router14 = Router22();
131857
+ router14.post("/scan", async (req, res) => {
131768
131858
  const data = parseBody(ScanRequestSchema, req.body, res);
131769
131859
  if (!data) return;
131770
131860
  const roots = data.roots && data.roots.length > 0 ? data.roots : data.root ? [data.root] : [getBoundary()];
@@ -131808,11 +131898,11 @@ function createDiscoveryRouter(meshCore2) {
131808
131898
  }
131809
131899
  }
131810
131900
  });
131811
- return router13;
131901
+ return router14;
131812
131902
  }
131813
131903
 
131814
131904
  // ../../apps/server/src/routes/templates.ts
131815
- import { Router as Router22 } from "express";
131905
+ import { Router as Router23 } from "express";
131816
131906
  import fs24 from "fs/promises";
131817
131907
  import path37 from "path";
131818
131908
 
@@ -131939,9 +132029,9 @@ async function writeUserTemplates(catalogPath, templates) {
131939
132029
  await fs24.writeFile(catalogPath, JSON.stringify(catalog, null, 2), "utf-8");
131940
132030
  }
131941
132031
  function createTemplateRouter(dorkHome) {
131942
- const router13 = Router22();
132032
+ const router14 = Router23();
131943
132033
  const catalogPath = path37.join(dorkHome, USER_CATALOG_FILENAME);
131944
- router13.get("/", async (_req, res) => {
132034
+ router14.get("/", async (_req, res) => {
131945
132035
  try {
131946
132036
  const userTemplates = await readUserTemplates(catalogPath);
131947
132037
  const templates = [...DEFAULT_TEMPLATES, ...userTemplates];
@@ -131951,7 +132041,7 @@ function createTemplateRouter(dorkHome) {
131951
132041
  return res.status(500).json({ error: "Internal server error" });
131952
132042
  }
131953
132043
  });
131954
- router13.post("/", async (req, res) => {
132044
+ router14.post("/", async (req, res) => {
131955
132045
  try {
131956
132046
  const result2 = TemplateEntrySchema.safeParse({ ...req.body, builtin: false });
131957
132047
  if (!result2.success) {
@@ -131975,7 +132065,7 @@ function createTemplateRouter(dorkHome) {
131975
132065
  return res.status(500).json({ error: "Internal server error" });
131976
132066
  }
131977
132067
  });
131978
- router13.delete("/:id", async (req, res) => {
132068
+ router14.delete("/:id", async (req, res) => {
131979
132069
  try {
131980
132070
  const { id } = req.params;
131981
132071
  const isBuiltin = DEFAULT_TEMPLATES.some((t2) => t2.id === id);
@@ -131995,11 +132085,11 @@ function createTemplateRouter(dorkHome) {
131995
132085
  return res.status(500).json({ error: "Internal server error" });
131996
132086
  }
131997
132087
  });
131998
- return router13;
132088
+ return router14;
131999
132089
  }
132000
132090
 
132001
132091
  // ../../apps/server/src/routes/admin.ts
132002
- import { Router as Router23 } from "express";
132092
+ import { Router as Router24 } from "express";
132003
132093
  import { spawn as spawn3 } from "child_process";
132004
132094
  import fs25 from "fs/promises";
132005
132095
  init_env();
@@ -132018,15 +132108,15 @@ function triggerRestart() {
132018
132108
  }
132019
132109
  }
132020
132110
  function createAdminRouter(deps) {
132021
- const router13 = Router23();
132111
+ const router14 = Router24();
132022
132112
  const adminLimiter = rate_limit_default({
132023
132113
  windowMs: 5 * 60 * 1e3,
132024
132114
  // 5 minutes
132025
132115
  max: 3,
132026
132116
  message: { error: "Too many admin requests. Try again later." }
132027
132117
  });
132028
- router13.use(adminLimiter);
132029
- router13.post("/reset", (req, res) => {
132118
+ router14.use(adminLimiter);
132119
+ router14.post("/reset", (req, res) => {
132030
132120
  const { confirm } = req.body ?? {};
132031
132121
  if (confirm !== "reset") {
132032
132122
  res.status(400).json({
@@ -132045,7 +132135,7 @@ function createAdminRouter(deps) {
132045
132135
  triggerRestart();
132046
132136
  });
132047
132137
  });
132048
- router13.post("/restart", (_req, res) => {
132138
+ router14.post("/restart", (_req, res) => {
132049
132139
  res.status(200).json({ message: "Restart initiated." });
132050
132140
  setImmediate(async () => {
132051
132141
  try {
@@ -132055,7 +132145,7 @@ function createAdminRouter(deps) {
132055
132145
  triggerRestart();
132056
132146
  });
132057
132147
  });
132058
- return router13;
132148
+ return router14;
132059
132149
  }
132060
132150
 
132061
132151
  // ../../apps/server/src/services/extensions/extension-manager.ts
@@ -138920,7 +139010,7 @@ function createExternalMcpServer(deps) {
138920
139010
  }
138921
139011
 
138922
139012
  // ../../apps/server/src/routes/mcp.ts
138923
- import { Router as Router24 } from "express";
139013
+ import { Router as Router25 } from "express";
138924
139014
 
138925
139015
  // ../../node_modules/.pnpm/@hono+node-server@1.19.11_hono@4.12.5/node_modules/@hono/node-server/dist/index.mjs
138926
139016
  import { Http2ServerRequest as Http2ServerRequest2 } from "http2";
@@ -140180,8 +140270,8 @@ var StreamableHTTPServerTransport = class {
140180
140270
  // ../../apps/server/src/routes/mcp.ts
140181
140271
  init_logger();
140182
140272
  function createMcpRouter(serverFactory) {
140183
- const router13 = Router24();
140184
- router13.post("/", async (req, res) => {
140273
+ const router14 = Router25();
140274
+ router14.post("/", async (req, res) => {
140185
140275
  try {
140186
140276
  const server = serverFactory();
140187
140277
  const transport = new StreamableHTTPServerTransport({
@@ -140207,7 +140297,7 @@ function createMcpRouter(serverFactory) {
140207
140297
  }
140208
140298
  }
140209
140299
  });
140210
- router13.get("/", (_req, res) => {
140300
+ router14.get("/", (_req, res) => {
140211
140301
  res.status(405).json({
140212
140302
  jsonrpc: "2.0",
140213
140303
  error: {
@@ -140217,7 +140307,7 @@ function createMcpRouter(serverFactory) {
140217
140307
  id: null
140218
140308
  });
140219
140309
  });
140220
- router13.delete("/", (_req, res) => {
140310
+ router14.delete("/", (_req, res) => {
140221
140311
  res.status(405).json({
140222
140312
  jsonrpc: "2.0",
140223
140313
  error: {
@@ -140227,7 +140317,7 @@ function createMcpRouter(serverFactory) {
140227
140317
  id: null
140228
140318
  });
140229
140319
  });
140230
- return router13;
140320
+ return router14;
140231
140321
  }
140232
140322
 
140233
140323
  // ../../apps/server/src/middleware/mcp-auth.ts
@@ -140490,6 +140580,17 @@ async function start() {
140490
140580
  app.use("/api/relay", createRelayRouter(relayCore, adapterManager, traceStore));
140491
140581
  setRelayEnabled(true);
140492
140582
  app.locals.relayCore = relayCore;
140583
+ relayCore.subscribe("relay.human.console.>", (envelope) => {
140584
+ eventFanOut.broadcast("relay_message", envelope);
140585
+ });
140586
+ relayCore.onSignal("relay.human.console.>", (_subject, signal) => {
140587
+ const eventType = signal.type === "backpressure" ? "relay_backpressure" : "relay_signal";
140588
+ eventFanOut.broadcast(eventType, signal);
140589
+ });
140590
+ eventFanOut.broadcast("relay_connected", {
140591
+ pattern: "relay.human.console.>",
140592
+ connectedAt: (/* @__PURE__ */ new Date()).toISOString()
140593
+ });
140493
140594
  logger.info("[Relay] Routes mounted");
140494
140595
  }
140495
140596
  if (meshCore) {
@@ -140577,6 +140678,9 @@ async function start() {
140577
140678
  );
140578
140679
  }
140579
140680
  }
140681
+ tunnelManager.on("status_change", (status) => {
140682
+ eventFanOut.broadcast("tunnel_status", status);
140683
+ });
140580
140684
  }
140581
140685
  async function shutdownServices() {
140582
140686
  logger.info("Shutting down services...");