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.
- package/dist/bin/cli.js +5 -5
- package/dist/client/assets/{TopologyGraph-B2YngNpo.js → TopologyGraph-DUezNsm-.js} +1 -1
- package/dist/client/assets/{highlighted-body-TPN3WLV5-B-rIF8ZF.js → highlighted-body-TPN3WLV5-C60XBdum.js} +1 -1
- package/dist/client/assets/index-Bv8dGtOW.css +1 -0
- package/dist/client/assets/{index-BiwuozVD.js → index-BveJmYuj.js} +1 -1
- package/dist/client/assets/{index-D3yIhkQ-.js → index-BwtKEXCM.js} +1 -1
- package/dist/client/assets/{index-BXAcUhba.js → index-GYKzCHRN.js} +256 -248
- package/dist/client/index.html +2 -2
- package/dist/server/index.js +235 -131
- package/dist/server/index.js.map +4 -4
- package/package.json +1 -1
- package/dist/client/assets/index-_d9oi8Tf.css +0 -1
package/dist/server/index.js
CHANGED
|
@@ -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(
|
|
29629
|
+
route(router14, routeHandlers, fallback = pass) {
|
|
29630
29630
|
return this.lazy(async (ctx) => {
|
|
29631
29631
|
var _a;
|
|
29632
|
-
const route = await
|
|
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:
|
|
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 =
|
|
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.
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
93179
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
100181
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
127299
|
-
|
|
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
|
-
|
|
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
|
-
|
|
127317
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
127582
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
127725
|
+
router14.get("/endpoints", (_req, res) => {
|
|
127637
127726
|
return res.json(relayCore2.listEndpoints());
|
|
127638
127727
|
});
|
|
127639
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
127716
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
127886
|
+
router14.use("/", createAdapterRouter(adapterManager2, traceStore2));
|
|
127797
127887
|
}
|
|
127798
|
-
return
|
|
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
|
|
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
|
|
129612
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
129783
|
+
router14.get("/status", (_req, res) => {
|
|
129694
129784
|
const status = meshCore2.getStatus();
|
|
129695
129785
|
res.json(status);
|
|
129696
129786
|
});
|
|
129697
|
-
|
|
129787
|
+
router14.get("/agents/paths", (_req, res) => {
|
|
129698
129788
|
const agents2 = meshCore2.listWithPaths();
|
|
129699
129789
|
return res.json({ agents: agents2 });
|
|
129700
129790
|
});
|
|
129701
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
129865
|
+
router14.get("/denied", (_req, res) => {
|
|
129776
129866
|
const denied = meshCore2.listDenied();
|
|
129777
129867
|
return res.json({ denied });
|
|
129778
129868
|
});
|
|
129779
|
-
|
|
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
|
|
129882
|
+
return router14;
|
|
129793
129883
|
}
|
|
129794
129884
|
|
|
129795
129885
|
// ../../apps/server/src/routes/a2a.ts
|
|
129796
|
-
import { Router as
|
|
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
|
|
131430
|
-
|
|
131431
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
131559
|
-
|
|
131560
|
-
return { router:
|
|
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
|
|
131654
|
+
import { Router as Router21 } from "express";
|
|
131565
131655
|
import path36 from "path";
|
|
131566
131656
|
init_logger();
|
|
131567
131657
|
function createAgentsRouter(meshCore2) {
|
|
131568
|
-
const
|
|
131569
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
131843
|
+
return router14;
|
|
131754
131844
|
}
|
|
131755
131845
|
|
|
131756
131846
|
// ../../apps/server/src/routes/discovery.ts
|
|
131757
|
-
import { Router as
|
|
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
|
|
131767
|
-
|
|
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
|
|
131901
|
+
return router14;
|
|
131812
131902
|
}
|
|
131813
131903
|
|
|
131814
131904
|
// ../../apps/server/src/routes/templates.ts
|
|
131815
|
-
import { Router as
|
|
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
|
|
132032
|
+
const router14 = Router23();
|
|
131943
132033
|
const catalogPath = path37.join(dorkHome, USER_CATALOG_FILENAME);
|
|
131944
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
132088
|
+
return router14;
|
|
131999
132089
|
}
|
|
132000
132090
|
|
|
132001
132091
|
// ../../apps/server/src/routes/admin.ts
|
|
132002
|
-
import { Router as
|
|
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
|
|
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
|
-
|
|
132029
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
140184
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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...");
|