@masons/runtime-broker 0.2.9 → 0.2.11
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/broker/broker-daemon.d.ts.map +1 -1
- package/dist/broker/broker-daemon.js +317 -2
- package/dist/broker/endpoint-registry.d.ts +4 -0
- package/dist/broker/endpoint-registry.d.ts.map +1 -1
- package/dist/broker/endpoint-registry.js +2 -0
- package/dist/broker/entry.d.ts.map +1 -1
- package/dist/broker/entry.js +7 -1
- package/dist/broker/ipc-server.d.ts +21 -0
- package/dist/broker/ipc-server.d.ts.map +1 -1
- package/dist/broker/ipc-server.js +13 -0
- package/dist/broker/runtime-endpoint-port.d.ts +3 -1
- package/dist/broker/runtime-endpoint-port.d.ts.map +1 -1
- package/dist/broker/undispatched-inbox.d.ts.map +1 -1
- package/dist/broker/version-handshake.d.ts +1 -0
- package/dist/broker/version-handshake.d.ts.map +1 -1
- package/dist/broker/version-handshake.js +1 -0
- package/dist/broker-client/broker-client.d.ts +22 -1
- package/dist/broker-client/broker-client.d.ts.map +1 -1
- package/dist/broker-client/broker-client.js +37 -1
- package/dist/runtime-endpoint-client.d.ts +45 -0
- package/dist/runtime-endpoint-client.d.ts.map +1 -1
- package/dist/runtime-endpoint-client.js +170 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker-daemon.d.ts","sourceRoot":"","sources":["../../src/broker/broker-daemon.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAqB,KAAK,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAQjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,KAAK,sBAAsB,EAE5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACV,UAAU,EAIX,MAAM,0BAA0B,CAAC;AAKlC,OAAO,EACL,KAAK,eAAe,EAKrB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"broker-daemon.d.ts","sourceRoot":"","sources":["../../src/broker/broker-daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,6 +47,52 @@ function buildLocalDispatchTargetRef(targetEndpointId, target) {
|
|
|
47
47
|
background_exchange_mode: "resident_endpoint",
|
|
48
48
|
};
|
|
49
49
|
}
|
|
50
|
+
function buildRuntimeAssignmentTargetRef(entry) {
|
|
51
|
+
if (!entry.runtime_capabilities?.includes("background_exchange_v1")) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
if (entry.background_exchange_mode === "resident_endpoint") {
|
|
55
|
+
return {
|
|
56
|
+
kind: "projection_endpoint",
|
|
57
|
+
projection_endpoint_id: entry.endpoint_id,
|
|
58
|
+
background_exchange_mode: "resident_endpoint",
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if (entry.background_exchange_mode === "adapter_managed_turn" &&
|
|
62
|
+
typeof entry.runtime_session_id === "string" &&
|
|
63
|
+
entry.runtime_session_id.trim().length > 0) {
|
|
64
|
+
return {
|
|
65
|
+
kind: "projection_endpoint",
|
|
66
|
+
projection_endpoint_id: entry.endpoint_id,
|
|
67
|
+
runtime_session_id: entry.runtime_session_id,
|
|
68
|
+
background_exchange_mode: "adapter_managed_turn",
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
function sameRuntimeWorkTargetRef(left, right) {
|
|
74
|
+
return (left.kind === right.kind &&
|
|
75
|
+
left.projection_endpoint_id === right.projection_endpoint_id &&
|
|
76
|
+
left.background_exchange_mode === right.background_exchange_mode &&
|
|
77
|
+
(left.background_exchange_mode !== "adapter_managed_turn" ||
|
|
78
|
+
right.background_exchange_mode !== "adapter_managed_turn" ||
|
|
79
|
+
left.runtime_session_id === right.runtime_session_id));
|
|
80
|
+
}
|
|
81
|
+
function tokenMatches(left, right) {
|
|
82
|
+
if (left.length !== right.length)
|
|
83
|
+
return false;
|
|
84
|
+
let mismatch = 0;
|
|
85
|
+
for (let i = 0; i < left.length; i++) {
|
|
86
|
+
mismatch |= left.charCodeAt(i) ^ right.charCodeAt(i);
|
|
87
|
+
}
|
|
88
|
+
return mismatch === 0;
|
|
89
|
+
}
|
|
90
|
+
function assertEndpointOwnerToken(entry, candidate) {
|
|
91
|
+
if (typeof candidate !== "string" ||
|
|
92
|
+
!tokenMatches(candidate, entry.endpoint_owner_token)) {
|
|
93
|
+
throw new BrokerHttpError(403, "endpoint_owner_token_mismatch", "endpoint_owner_token does not own endpoint_id");
|
|
94
|
+
}
|
|
95
|
+
}
|
|
50
96
|
function derivePublicDisplayLabel(body) {
|
|
51
97
|
const parts = [
|
|
52
98
|
body.kind,
|
|
@@ -1141,9 +1187,11 @@ export async function startBrokerDaemon(opts) {
|
|
|
1141
1187
|
? Array.from(runtimeCapabilitiesSet)
|
|
1142
1188
|
: undefined;
|
|
1143
1189
|
const runtimeSessionId = body.runtime_session_id?.trim() || undefined;
|
|
1190
|
+
const endpointNonce = randomUUID();
|
|
1191
|
+
const endpointOwnerToken = randomUUID();
|
|
1144
1192
|
const apiResp = await apiPort.register({
|
|
1145
1193
|
runtime_kind: body.kind,
|
|
1146
|
-
endpoint_nonce:
|
|
1194
|
+
endpoint_nonce: endpointNonce,
|
|
1147
1195
|
display_label: derivePublicDisplayLabel(body),
|
|
1148
1196
|
workspace: body.workspace
|
|
1149
1197
|
? { root: body.workspace, cwd: body.workspace }
|
|
@@ -1158,6 +1206,8 @@ export async function startBrokerDaemon(opts) {
|
|
|
1158
1206
|
});
|
|
1159
1207
|
registry.register({
|
|
1160
1208
|
endpoint_id: apiResp.endpoint_id,
|
|
1209
|
+
endpoint_nonce: endpointNonce,
|
|
1210
|
+
endpoint_owner_token: endpointOwnerToken,
|
|
1161
1211
|
agent_id: body.agent_id,
|
|
1162
1212
|
plugin_pid: body.plugin_pid,
|
|
1163
1213
|
ipc_ws: boundWs,
|
|
@@ -1206,7 +1256,10 @@ export async function startBrokerDaemon(opts) {
|
|
|
1206
1256
|
plugin_pid: body.plugin_pid,
|
|
1207
1257
|
kind: body.kind,
|
|
1208
1258
|
});
|
|
1209
|
-
return {
|
|
1259
|
+
return {
|
|
1260
|
+
endpoint_id: apiResp.endpoint_id,
|
|
1261
|
+
endpoint_owner_token: endpointOwnerToken,
|
|
1262
|
+
};
|
|
1210
1263
|
},
|
|
1211
1264
|
async heartbeatEndpoint(endpoint_id) {
|
|
1212
1265
|
const entry = registry.get(endpoint_id);
|
|
@@ -1286,6 +1339,266 @@ export async function startBrokerDaemon(opts) {
|
|
|
1286
1339
|
}
|
|
1287
1340
|
return { messageId: ack.messageId, status: ack.status };
|
|
1288
1341
|
},
|
|
1342
|
+
async claimRuntimeAssignment(body) {
|
|
1343
|
+
const entry = registry.get(body.endpoint_id);
|
|
1344
|
+
if (!entry) {
|
|
1345
|
+
throw new BrokerHttpError(404, "unknown_endpoint", `unknown endpoint_id: ${body.endpoint_id}`);
|
|
1346
|
+
}
|
|
1347
|
+
if (entry.plugin_pid !== body.plugin_pid) {
|
|
1348
|
+
throw new BrokerHttpError(403, "endpoint_pid_mismatch", "plugin_pid does not own endpoint_id");
|
|
1349
|
+
}
|
|
1350
|
+
assertEndpointOwnerToken(entry, body.endpoint_owner_token);
|
|
1351
|
+
if (entry.state !== "active") {
|
|
1352
|
+
throw new BrokerHttpError(409, "endpoint_not_active", `endpoint ${body.endpoint_id} is ${entry.state}; assignment claim is only allowed from Active`);
|
|
1353
|
+
}
|
|
1354
|
+
const expectedTargetRef = buildRuntimeAssignmentTargetRef(entry);
|
|
1355
|
+
if (!expectedTargetRef) {
|
|
1356
|
+
throw new BrokerHttpError(409, "missing_background_exchange_v1", "endpoint does not expose an assignment-capable runtime work target");
|
|
1357
|
+
}
|
|
1358
|
+
if (typeof body.undispatched_id !== "string" ||
|
|
1359
|
+
body.undispatched_id.length === 0) {
|
|
1360
|
+
throw new BrokerHttpError(400, "undispatched_id_invalid", "undispatched_id is required");
|
|
1361
|
+
}
|
|
1362
|
+
const existingAssignment = Array.from(runtimeAssignments.values()).find((assignment) => assignment.context.undispatchedId === body.undispatched_id &&
|
|
1363
|
+
assignment.context.targetRef.projection_endpoint_id ===
|
|
1364
|
+
body.endpoint_id);
|
|
1365
|
+
if (existingAssignment) {
|
|
1366
|
+
if (body.recover_existing !== true || existingAssignment.accepted) {
|
|
1367
|
+
throw new BrokerHttpError(409, "runtime_assignment_in_progress", "runtime assignment already exists for this undispatched message and endpoint");
|
|
1368
|
+
}
|
|
1369
|
+
return {
|
|
1370
|
+
assignment: existingAssignment.context,
|
|
1371
|
+
message: {
|
|
1372
|
+
from: existingAssignment.message.sender_address,
|
|
1373
|
+
content: existingAssignment.message.content,
|
|
1374
|
+
contentType: existingAssignment.message.content_type,
|
|
1375
|
+
metadata: existingAssignment.message.metadata,
|
|
1376
|
+
...(existingAssignment.message.source_message_id !== undefined && {
|
|
1377
|
+
sourceMessageId: existingAssignment.message.source_message_id,
|
|
1378
|
+
}),
|
|
1379
|
+
},
|
|
1380
|
+
};
|
|
1381
|
+
}
|
|
1382
|
+
if (!apiPort.claimRuntimeSelfAssignment) {
|
|
1383
|
+
throw new BrokerHttpError(503, "runtime_self_claim_unsupported", "apps/api self-claim route is not available", { retryable: true });
|
|
1384
|
+
}
|
|
1385
|
+
const claimOutcome = await apiPort.claimRuntimeSelfAssignment({
|
|
1386
|
+
undispatched_id: body.undispatched_id,
|
|
1387
|
+
target_endpoint_id: body.endpoint_id,
|
|
1388
|
+
endpoint_nonce: entry.endpoint_nonce,
|
|
1389
|
+
...(body.recover_existing === true && { recover_existing: true }),
|
|
1390
|
+
});
|
|
1391
|
+
if (!claimOutcome.ok && claimOutcome.postCasInvalidClaim !== undefined) {
|
|
1392
|
+
const invalidClaim = claimOutcome.postCasInvalidClaim;
|
|
1393
|
+
if (typeof invalidClaim.undispatched_id === "string" &&
|
|
1394
|
+
typeof invalidClaim.source_message_id === "string" &&
|
|
1395
|
+
typeof invalidClaim.assignment_id === "string" &&
|
|
1396
|
+
typeof invalidClaim.broker_projection_token === "string" &&
|
|
1397
|
+
invalidClaim.target_ref !== undefined) {
|
|
1398
|
+
const released = apiPort.releaseRuntimeSelfAssignment
|
|
1399
|
+
? await apiPort
|
|
1400
|
+
.releaseRuntimeSelfAssignment({
|
|
1401
|
+
undispatched_id: invalidClaim.undispatched_id,
|
|
1402
|
+
source_message_id: invalidClaim.source_message_id,
|
|
1403
|
+
assignment_id: invalidClaim.assignment_id,
|
|
1404
|
+
target_ref: invalidClaim.target_ref,
|
|
1405
|
+
endpoint_nonce: entry.endpoint_nonce,
|
|
1406
|
+
broker_projection_token: invalidClaim.broker_projection_token,
|
|
1407
|
+
})
|
|
1408
|
+
.catch((err) => ({
|
|
1409
|
+
ok: false,
|
|
1410
|
+
terminal: false,
|
|
1411
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
1412
|
+
}))
|
|
1413
|
+
: { ok: false, terminal: false };
|
|
1414
|
+
if (!released.ok) {
|
|
1415
|
+
logger.error("runtime_self_claim_compensation_failed", {
|
|
1416
|
+
reason_code: "invalid_2xx_claim_response",
|
|
1417
|
+
release_detail: released.detail,
|
|
1418
|
+
undispatched_id: invalidClaim.undispatched_id,
|
|
1419
|
+
source_message_id: invalidClaim.source_message_id,
|
|
1420
|
+
assignment_id: invalidClaim.assignment_id,
|
|
1421
|
+
target_endpoint_id: body.endpoint_id,
|
|
1422
|
+
});
|
|
1423
|
+
throw new BrokerHttpError(503, "runtime_self_claim_outcome_unknown", "runtime self-claim returned an invalid post-CAS response and the broker could not release it; retry the claim", {
|
|
1424
|
+
retryable: true,
|
|
1425
|
+
outcome_unknown: true,
|
|
1426
|
+
reason_code: "invalid_2xx_claim_response",
|
|
1427
|
+
});
|
|
1428
|
+
}
|
|
1429
|
+
}
|
|
1430
|
+
else {
|
|
1431
|
+
logger.error("runtime_self_claim_invalid_response_unreleasable", {
|
|
1432
|
+
target_endpoint_id: body.endpoint_id,
|
|
1433
|
+
detail: claimOutcome.detail,
|
|
1434
|
+
});
|
|
1435
|
+
throw new BrokerHttpError(503, "runtime_self_claim_outcome_unknown", "runtime self-claim returned an invalid post-CAS response without enough release data; retry the claim", {
|
|
1436
|
+
retryable: true,
|
|
1437
|
+
outcome_unknown: true,
|
|
1438
|
+
reason_code: "invalid_2xx_claim_response_unreleasable",
|
|
1439
|
+
});
|
|
1440
|
+
}
|
|
1441
|
+
}
|
|
1442
|
+
if (!claimOutcome.ok) {
|
|
1443
|
+
const rejectedStatus = claimOutcome.status !== undefined && claimOutcome.status >= 400
|
|
1444
|
+
? claimOutcome.status
|
|
1445
|
+
: 502;
|
|
1446
|
+
throw new BrokerHttpError(claimOutcome.terminal ? rejectedStatus : 503, "runtime_self_claim_rejected", claimOutcome.detail ?? "runtime self-claim was rejected", { retryable: !claimOutcome.terminal });
|
|
1447
|
+
}
|
|
1448
|
+
const claim = claimOutcome.claim;
|
|
1449
|
+
const releaseClaimAfterFailure = async (reasonCode, detail) => {
|
|
1450
|
+
if (!apiPort.releaseRuntimeSelfAssignment) {
|
|
1451
|
+
logger.error("runtime_self_claim_compensation_unavailable", {
|
|
1452
|
+
reason_code: reasonCode,
|
|
1453
|
+
detail,
|
|
1454
|
+
undispatched_id: claim.undispatched_id,
|
|
1455
|
+
source_message_id: claim.source_message_id,
|
|
1456
|
+
assignment_id: claim.assignment_id,
|
|
1457
|
+
target_endpoint_id: body.endpoint_id,
|
|
1458
|
+
});
|
|
1459
|
+
return false;
|
|
1460
|
+
}
|
|
1461
|
+
try {
|
|
1462
|
+
const released = await apiPort.releaseRuntimeSelfAssignment({
|
|
1463
|
+
undispatched_id: claim.undispatched_id,
|
|
1464
|
+
source_message_id: claim.source_message_id,
|
|
1465
|
+
assignment_id: claim.assignment_id,
|
|
1466
|
+
target_ref: claim.target_ref,
|
|
1467
|
+
endpoint_nonce: entry.endpoint_nonce,
|
|
1468
|
+
broker_projection_token: claim.broker_projection_token,
|
|
1469
|
+
});
|
|
1470
|
+
if (!released.ok) {
|
|
1471
|
+
logger.error("runtime_self_claim_compensation_failed", {
|
|
1472
|
+
reason_code: reasonCode,
|
|
1473
|
+
detail,
|
|
1474
|
+
terminal: released.terminal,
|
|
1475
|
+
release_detail: released.detail,
|
|
1476
|
+
undispatched_id: claim.undispatched_id,
|
|
1477
|
+
source_message_id: claim.source_message_id,
|
|
1478
|
+
assignment_id: claim.assignment_id,
|
|
1479
|
+
target_endpoint_id: body.endpoint_id,
|
|
1480
|
+
});
|
|
1481
|
+
return false;
|
|
1482
|
+
}
|
|
1483
|
+
logger.warn("runtime_self_claim_compensated", {
|
|
1484
|
+
reason_code: reasonCode,
|
|
1485
|
+
detail,
|
|
1486
|
+
undispatched_id: claim.undispatched_id,
|
|
1487
|
+
source_message_id: claim.source_message_id,
|
|
1488
|
+
assignment_id: claim.assignment_id,
|
|
1489
|
+
target_endpoint_id: body.endpoint_id,
|
|
1490
|
+
});
|
|
1491
|
+
return true;
|
|
1492
|
+
}
|
|
1493
|
+
catch (err) {
|
|
1494
|
+
logger.error("runtime_self_claim_compensation_error", {
|
|
1495
|
+
reason_code: reasonCode,
|
|
1496
|
+
detail,
|
|
1497
|
+
err: err instanceof Error ? err.message : String(err),
|
|
1498
|
+
undispatched_id: claim.undispatched_id,
|
|
1499
|
+
source_message_id: claim.source_message_id,
|
|
1500
|
+
assignment_id: claim.assignment_id,
|
|
1501
|
+
target_endpoint_id: body.endpoint_id,
|
|
1502
|
+
});
|
|
1503
|
+
return false;
|
|
1504
|
+
}
|
|
1505
|
+
};
|
|
1506
|
+
const throwAfterClaimFailure = async (error, reasonCode) => {
|
|
1507
|
+
const released = await releaseClaimAfterFailure(reasonCode, error.message);
|
|
1508
|
+
if (!released) {
|
|
1509
|
+
throw new BrokerHttpError(503, "runtime_self_claim_outcome_unknown", "runtime self-claim was durably assigned but the broker could not expose or release it; retry the claim", {
|
|
1510
|
+
retryable: true,
|
|
1511
|
+
outcome_unknown: true,
|
|
1512
|
+
reason_code: reasonCode,
|
|
1513
|
+
original_error: error.code,
|
|
1514
|
+
});
|
|
1515
|
+
}
|
|
1516
|
+
throw error;
|
|
1517
|
+
};
|
|
1518
|
+
if (claim.undispatched_id !== body.undispatched_id) {
|
|
1519
|
+
await throwAfterClaimFailure(new BrokerHttpError(502, "runtime_self_claim_response_invalid", "self-claim response undispatched_id does not match request", { retryable: false }), "response_undispatched_id_mismatch");
|
|
1520
|
+
}
|
|
1521
|
+
if (!sameRuntimeWorkTargetRef(claim.target_ref, expectedTargetRef)) {
|
|
1522
|
+
await throwAfterClaimFailure(new BrokerHttpError(502, "runtime_self_claim_response_invalid", "self-claim response target_ref does not match registered endpoint work target", { retryable: false }), "response_target_ref_mismatch");
|
|
1523
|
+
}
|
|
1524
|
+
if (claim.message.sourceMessageId !== claim.source_message_id) {
|
|
1525
|
+
await throwAfterClaimFailure(new BrokerHttpError(502, "runtime_self_claim_response_invalid", "self-claim response message sourceMessageId does not match source_message_id", { retryable: false }), "response_message_source_mismatch");
|
|
1526
|
+
}
|
|
1527
|
+
const cached = undispatchedInbox.take(claim.undispatched_id);
|
|
1528
|
+
if (cached && cached.source_message_id !== claim.source_message_id) {
|
|
1529
|
+
logger.warn("runtime_self_claim_cache_mismatch", {
|
|
1530
|
+
undispatched_id: claim.undispatched_id,
|
|
1531
|
+
claimed_source_message_id: claim.source_message_id,
|
|
1532
|
+
cached_source_message_id: cached.source_message_id,
|
|
1533
|
+
});
|
|
1534
|
+
}
|
|
1535
|
+
const message = {
|
|
1536
|
+
id: claim.undispatched_id,
|
|
1537
|
+
source_message_id: claim.source_message_id,
|
|
1538
|
+
arrived_at: new Date(claim.assigned_at).toISOString(),
|
|
1539
|
+
sender_address: claim.message.from,
|
|
1540
|
+
content: claim.message.content,
|
|
1541
|
+
content_type: claim.message.contentType,
|
|
1542
|
+
metadata: claim.message.metadata ?? {},
|
|
1543
|
+
reason: "unaddressed",
|
|
1544
|
+
};
|
|
1545
|
+
const runtimeAssignment = {
|
|
1546
|
+
undispatchedId: claim.undispatched_id,
|
|
1547
|
+
sourceMessageId: claim.source_message_id,
|
|
1548
|
+
assignmentId: claim.assignment_id,
|
|
1549
|
+
targetRef: claim.target_ref,
|
|
1550
|
+
deliveryIntent: "external_handoff",
|
|
1551
|
+
...(typeof message.metadata.correlation_id === "string" && {
|
|
1552
|
+
replyCorrelationId: message.metadata.correlation_id,
|
|
1553
|
+
}),
|
|
1554
|
+
};
|
|
1555
|
+
const assignmentKey = runtimeAssignmentKey(claim.source_message_id, claim.assignment_id);
|
|
1556
|
+
const processingEvent = {
|
|
1557
|
+
type: "runtime_processing_state",
|
|
1558
|
+
version: 1,
|
|
1559
|
+
source_message_id: claim.source_message_id,
|
|
1560
|
+
assignment_id: claim.assignment_id,
|
|
1561
|
+
state_event_id: `${claim.assignment_id}:assigned`,
|
|
1562
|
+
state_sequence: 1,
|
|
1563
|
+
target_ref: claim.target_ref,
|
|
1564
|
+
state: "assigned_to_runtime_target",
|
|
1565
|
+
occurred_at: claim.assigned_at,
|
|
1566
|
+
undispatched_id: claim.undispatched_id,
|
|
1567
|
+
broker_projection_token: claim.broker_projection_token,
|
|
1568
|
+
};
|
|
1569
|
+
const processingResult = await emitRuntimeProcessingState(processingEvent);
|
|
1570
|
+
if (!processingResult.ok) {
|
|
1571
|
+
await throwAfterClaimFailure(new BrokerHttpError(processingResult.terminal ? 409 : 503, "runtime_self_claim_assignment_projection_failed", processingResult.detail ??
|
|
1572
|
+
"assigned_to_runtime_target projection was not accepted", { retryable: !processingResult.terminal }), "assigned_state_projection_failed");
|
|
1573
|
+
}
|
|
1574
|
+
runtimeAssignments.set(assignmentKey, {
|
|
1575
|
+
context: runtimeAssignment,
|
|
1576
|
+
message,
|
|
1577
|
+
brokerProjectionToken: claim.broker_projection_token,
|
|
1578
|
+
accepted: false,
|
|
1579
|
+
assignedAt: claim.assigned_at,
|
|
1580
|
+
lastStateSequence: processingEvent.state_sequence,
|
|
1581
|
+
});
|
|
1582
|
+
scheduleAcceptanceTimeout(assignmentKey);
|
|
1583
|
+
rememberRuntimeAssignmentCorrelation(entry.endpoint_id, message.metadata.correlation_id, assignmentKey);
|
|
1584
|
+
recordInboundCorrelation(entry.endpoint_id, message.metadata);
|
|
1585
|
+
logger.info("runtime_self_claimed", {
|
|
1586
|
+
undispatched_id: claim.undispatched_id,
|
|
1587
|
+
source_message_id: claim.source_message_id,
|
|
1588
|
+
assignment_id: claim.assignment_id,
|
|
1589
|
+
target_endpoint_id: entry.endpoint_id,
|
|
1590
|
+
});
|
|
1591
|
+
return {
|
|
1592
|
+
assignment: runtimeAssignment,
|
|
1593
|
+
message: {
|
|
1594
|
+
from: message.sender_address,
|
|
1595
|
+
content: message.content,
|
|
1596
|
+
contentType: message.content_type,
|
|
1597
|
+
metadata: message.metadata,
|
|
1598
|
+
sourceMessageId: message.source_message_id,
|
|
1599
|
+
},
|
|
1600
|
+
};
|
|
1601
|
+
},
|
|
1289
1602
|
async sendRuntimeAssignmentReply(body) {
|
|
1290
1603
|
const entry = registry.get(body.endpoint_id);
|
|
1291
1604
|
if (!entry) {
|
|
@@ -1294,6 +1607,7 @@ export async function startBrokerDaemon(opts) {
|
|
|
1294
1607
|
if (entry.plugin_pid !== body.plugin_pid) {
|
|
1295
1608
|
throw new BrokerHttpError(403, "endpoint_pid_mismatch", "plugin_pid does not own endpoint_id");
|
|
1296
1609
|
}
|
|
1610
|
+
assertEndpointOwnerToken(entry, body.endpoint_owner_token);
|
|
1297
1611
|
if (entry.state !== "active") {
|
|
1298
1612
|
throw new BrokerHttpError(409, "endpoint_not_active", `endpoint ${body.endpoint_id} is ${entry.state}; assignment reply is only allowed from Active`);
|
|
1299
1613
|
}
|
|
@@ -1463,6 +1777,7 @@ export async function startBrokerDaemon(opts) {
|
|
|
1463
1777
|
if (entry.plugin_pid !== body.plugin_pid) {
|
|
1464
1778
|
throw new BrokerHttpError(403, "endpoint_pid_mismatch", "plugin_pid does not own endpoint_id");
|
|
1465
1779
|
}
|
|
1780
|
+
assertEndpointOwnerToken(entry, body.endpoint_owner_token);
|
|
1466
1781
|
const key = runtimeAssignmentKey(body.source_message_id, body.assignment_id);
|
|
1467
1782
|
const assignment = runtimeAssignments.get(key);
|
|
1468
1783
|
if (!assignment) {
|
|
@@ -11,6 +11,8 @@ export interface DisplayMetadata {
|
|
|
11
11
|
}
|
|
12
12
|
export interface BrokerEndpointEntry {
|
|
13
13
|
endpoint_id: string;
|
|
14
|
+
endpoint_nonce: string;
|
|
15
|
+
endpoint_owner_token: string;
|
|
14
16
|
agent_id: string;
|
|
15
17
|
plugin_pid: number;
|
|
16
18
|
ipc_ws: WebSocket;
|
|
@@ -26,6 +28,8 @@ export interface BrokerEndpointEntry {
|
|
|
26
28
|
}
|
|
27
29
|
export interface RegisterArgs {
|
|
28
30
|
endpoint_id: string;
|
|
31
|
+
endpoint_nonce?: string;
|
|
32
|
+
endpoint_owner_token?: string;
|
|
29
33
|
agent_id: string;
|
|
30
34
|
plugin_pid: number;
|
|
31
35
|
ipc_ws: WebSocket;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint-registry.d.ts","sourceRoot":"","sources":["../../src/broker/endpoint-registry.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,SAAS,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,QAAQ,GAAG,cAAc,CAAC;IACjC,WAAW,EAAE,IAAI,CAAC;IAElB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,oBAAoB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACnD,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wBAAwB,CAAC,EAAE,8BAA8B,CAAC;IAC1D,gBAAgB,EAAE,eAAe,CAAC;IAClC,gBAAgB,EAAE,qBAAqB,CAAC;CACzC;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,oBAAoB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACnD,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wBAAwB,CAAC,EAAE,8BAA8B,CAAC;IAC1D,gBAAgB,EAAE,eAAe,CAAC;CACnC;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0C;IAG/D,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,mBAAmB;
|
|
1
|
+
{"version":3,"file":"endpoint-registry.d.ts","sourceRoot":"","sources":["../../src/broker/endpoint-registry.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,SAAS,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,QAAQ,GAAG,cAAc,CAAC;IACjC,WAAW,EAAE,IAAI,CAAC;IAElB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,oBAAoB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACnD,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wBAAwB,CAAC,EAAE,8BAA8B,CAAC;IAC1D,gBAAgB,EAAE,eAAe,CAAC;IAClC,gBAAgB,EAAE,qBAAqB,CAAC;CACzC;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,oBAAoB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACnD,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wBAAwB,CAAC,EAAE,8BAA8B,CAAC;IAC1D,gBAAgB,EAAE,eAAe,CAAC;CACnC;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0C;IAG/D,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,mBAAmB;IAyBjD,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAKzD,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAWhE,gBAAgB,CACd,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,IAAI,GACnB,mBAAmB;IAoBtB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,mBAAmB;IA8BvE,uBAAuB,CACrB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,mBAAmB,GAAG,SAAS;IAYlC,iBAAiB,CACf,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GAEhB;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,mBAAmB,CAAA;KAAE,GACxC;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,kBAAkB,CAAA;KAAE,GACzC;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,uBAAuB,CAAA;KAAE,GAC9C;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,2BAA2B,CAAA;KAAE;IAWtD,IAAI,IAAI,mBAAmB,EAAE;IAK7B,IAAI,IAAI,MAAM;CAGf"}
|
|
@@ -7,6 +7,8 @@ export class EndpointRegistry {
|
|
|
7
7
|
}
|
|
8
8
|
const entry = {
|
|
9
9
|
endpoint_id: args.endpoint_id,
|
|
10
|
+
endpoint_nonce: args.endpoint_nonce ?? `broker-local:${args.endpoint_id}`,
|
|
11
|
+
endpoint_owner_token: args.endpoint_owner_token ?? `broker-local-owner:${args.endpoint_id}`,
|
|
10
12
|
agent_id: args.agent_id,
|
|
11
13
|
plugin_pid: args.plugin_pid,
|
|
12
14
|
ipc_ws: args.ipc_ws,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../../src/broker/entry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../../src/broker/entry.ts"],"names":[],"mappings":"AAwFA,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,aAAa,CAAC;AAEpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAOtE,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,gBAAgB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAUD,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CA8F9B;AA2DD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,OAAO,UAAU,CAAC,KAAwB,GACpD,OAAO,CAAC,gBAAgB,CAAC,CA4B3B;AAaD,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,GACnB,mBAAmB,CA2IrB;AAyCD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAenE;AAED,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAiG1C"}
|
package/dist/broker/entry.js
CHANGED
|
@@ -2,7 +2,7 @@ import { readFile } from "node:fs/promises";
|
|
|
2
2
|
import { pathToFileURL } from "node:url";
|
|
3
3
|
import { readConfig } from "../config-fs.js";
|
|
4
4
|
import { DEFAULT_API_HOST } from "../platform-client.js";
|
|
5
|
-
import { claimRuntimeInboundRoute, emitRuntimeInboundRouted, emitRuntimeNetworkPresenceChanged, emitRuntimeProcessingState, emitRuntimeUndispatchedChanged, heartbeatRuntimeEndpoint, registerRuntimeEndpoint, transitionRuntimeEndpointState, unregisterRuntimeEndpoint, updateRuntimeEndpointDisplayMetadata, } from "../runtime-endpoint-client.js";
|
|
5
|
+
import { claimRuntimeInboundRoute, claimRuntimeSelfAssignment, emitRuntimeInboundRouted, emitRuntimeNetworkPresenceChanged, emitRuntimeProcessingState, emitRuntimeUndispatchedChanged, heartbeatRuntimeEndpoint, registerRuntimeEndpoint, releaseRuntimeSelfAssignment, transitionRuntimeEndpointState, unregisterRuntimeEndpoint, updateRuntimeEndpointDisplayMetadata, } from "../runtime-endpoint-client.js";
|
|
6
6
|
import { BrokerAlreadyRunningError, startBrokerDaemon, } from "./broker-daemon.js";
|
|
7
7
|
import { ClaudeCodeSpawnDriver } from "./claude-code-spawn-driver.js";
|
|
8
8
|
import { CodexSpawnDriverStub } from "./codex-spawn-driver-stub.js";
|
|
@@ -175,6 +175,12 @@ export function buildApiPort(apiHost, runtimeKey, logger) {
|
|
|
175
175
|
async claimRuntimeInboundRoute(event) {
|
|
176
176
|
return claimRuntimeInboundRoute({ apiHost }, runtimeKey, event);
|
|
177
177
|
},
|
|
178
|
+
async claimRuntimeSelfAssignment(params) {
|
|
179
|
+
return claimRuntimeSelfAssignment({ apiHost }, runtimeKey, params);
|
|
180
|
+
},
|
|
181
|
+
async releaseRuntimeSelfAssignment(params) {
|
|
182
|
+
return releaseRuntimeSelfAssignment({ apiHost }, runtimeKey, params);
|
|
183
|
+
},
|
|
178
184
|
async emitRuntimeInboundRouted(event) {
|
|
179
185
|
return emitRuntimeInboundRouted({ apiHost }, runtimeKey, event);
|
|
180
186
|
},
|
|
@@ -10,6 +10,7 @@ export interface IPCServerHandlers {
|
|
|
10
10
|
unregisterEndpoint(endpoint_id: string): Promise<void>;
|
|
11
11
|
send(body: SendBody): Promise<SendResponse>;
|
|
12
12
|
sendRuntimeAssignmentReply(body: RuntimeAssignmentReplyBody): Promise<SendResponse>;
|
|
13
|
+
claimRuntimeAssignment(body: RuntimeAssignmentClaimBody): Promise<RuntimeAssignmentClaimResponse>;
|
|
13
14
|
reportProcessingState(body: ProcessingStateBody): Promise<void>;
|
|
14
15
|
reattachEndpoint(endpoint_id: string, plugin_pid: number, ipcWs: WebSocket): Promise<ReattachResponse>;
|
|
15
16
|
listUndispatched(): Promise<UndispatchedListResponse>;
|
|
@@ -45,6 +46,7 @@ export interface TaskHintBody {
|
|
|
45
46
|
}
|
|
46
47
|
export interface RegisterEndpointResponse {
|
|
47
48
|
endpoint_id: string;
|
|
49
|
+
endpoint_owner_token?: string;
|
|
48
50
|
}
|
|
49
51
|
export interface SendBody {
|
|
50
52
|
endpoint_id: string;
|
|
@@ -61,15 +63,34 @@ export interface SendResponse {
|
|
|
61
63
|
export interface RuntimeAssignmentReplyBody {
|
|
62
64
|
endpoint_id: string;
|
|
63
65
|
plugin_pid: number;
|
|
66
|
+
endpoint_owner_token?: string;
|
|
64
67
|
source_message_id: string;
|
|
65
68
|
assignment_id: string;
|
|
66
69
|
reply_request_id: string;
|
|
67
70
|
content: string;
|
|
68
71
|
contentType?: string;
|
|
69
72
|
}
|
|
73
|
+
export interface RuntimeAssignmentClaimBody {
|
|
74
|
+
endpoint_id: string;
|
|
75
|
+
plugin_pid: number;
|
|
76
|
+
endpoint_owner_token?: string;
|
|
77
|
+
undispatched_id: string;
|
|
78
|
+
recover_existing?: boolean;
|
|
79
|
+
}
|
|
80
|
+
export interface RuntimeAssignmentClaimResponse {
|
|
81
|
+
assignment: RuntimeAssignmentContext;
|
|
82
|
+
message: {
|
|
83
|
+
from: string;
|
|
84
|
+
content: string;
|
|
85
|
+
contentType: string;
|
|
86
|
+
metadata: Record<string, unknown>;
|
|
87
|
+
sourceMessageId?: string;
|
|
88
|
+
};
|
|
89
|
+
}
|
|
70
90
|
export interface ProcessingStateBody {
|
|
71
91
|
endpoint_id: string;
|
|
72
92
|
plugin_pid: number;
|
|
93
|
+
endpoint_owner_token?: string;
|
|
73
94
|
source_message_id: string;
|
|
74
95
|
assignment_id: string;
|
|
75
96
|
state_event_id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipc-server.d.ts","sourceRoot":"","sources":["../../src/broker/ipc-server.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,KAAK,OAAO,EAAE,SAAS,EAAmB,MAAM,IAAI,CAAC;AAC9D,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,iBAAiB;IAEhC,gBAAgB,CACd,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAErC,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtD,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAE5C,0BAA0B,CACxB,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGhE,gBAAgB,CACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE7B,gBAAgB,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAItD,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAI7E,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,IAAI,CAAC;IACf,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,MAAM,wBAAwB,GAClC,OAAO,yBAAyB,EAAE,mBAAmB,EAAE,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACnD,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,wBAAwB,CAAC,EAAE,8BAA8B,CAAC;IAK1D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ipc-server.d.ts","sourceRoot":"","sources":["../../src/broker/ipc-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -150,6 +150,19 @@ async function routeHttp(req, res, bearerToken, handlers, logger, getNetworkPres
|
|
|
150
150
|
sendJson(res, 200, out);
|
|
151
151
|
return;
|
|
152
152
|
}
|
|
153
|
+
if (method === "POST" && url === "/v1/runtime/assignment-claim") {
|
|
154
|
+
const body = await readJson(req);
|
|
155
|
+
const callerPid = readPluginPid(req);
|
|
156
|
+
if (callerPid === null) {
|
|
157
|
+
throw new BrokerHttpError(400, "plugin_pid_invalid", "x-plugin-pid header is required for assignment claim");
|
|
158
|
+
}
|
|
159
|
+
if (callerPid !== body.plugin_pid) {
|
|
160
|
+
throw new BrokerHttpError(403, "plugin_pid_mismatch", "x-plugin-pid header does not match claim body");
|
|
161
|
+
}
|
|
162
|
+
const out = await handlers.claimRuntimeAssignment(body);
|
|
163
|
+
sendJson(res, 200, out);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
153
166
|
if (method === "POST" && url === "/v1/runtime/processing-state") {
|
|
154
167
|
const body = await readJson(req);
|
|
155
168
|
await handlers.reportProcessingState(body);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { RegisterRuntimeEndpointParams, RegisterRuntimeEndpointResponse, RuntimeInboundRouteClaimOutcome, TransitionRuntimeEndpointStateParams, UpdateRuntimeEndpointDisplayMetadataParams } from "../runtime-endpoint-client.js";
|
|
1
|
+
import type { RegisterRuntimeEndpointParams, RegisterRuntimeEndpointResponse, RuntimeInboundRouteClaimOutcome, RuntimeSelfClaimOutcome, RuntimeSelfClaimParams, RuntimeSelfClaimReleaseParams, TransitionRuntimeEndpointStateParams, UpdateRuntimeEndpointDisplayMetadataParams } from "../runtime-endpoint-client.js";
|
|
2
2
|
import type { NetworkPresenceChangedEvent } from "./network-presence-changed-event-types.js";
|
|
3
3
|
import type { RuntimeInboundRouteClaimEvent, RuntimeInboundRoutedEvent } from "./runtime-inbound-routed-event-types.js";
|
|
4
4
|
import type { RuntimeProcessingStateEvent } from "./runtime-processing-state-event-types.js";
|
|
@@ -20,6 +20,8 @@ export interface RuntimeEndpointPort {
|
|
|
20
20
|
emitUndispatchedChanged?(event: UndispatchedChangedEvent): Promise<EmitOutcome>;
|
|
21
21
|
emitNetworkPresenceChanged?(event: NetworkPresenceChangedEvent): Promise<EmitOutcome>;
|
|
22
22
|
claimRuntimeInboundRoute?(event: RuntimeInboundRouteClaimEvent): Promise<RuntimeInboundRouteClaimOutcome>;
|
|
23
|
+
claimRuntimeSelfAssignment?(params: RuntimeSelfClaimParams): Promise<RuntimeSelfClaimOutcome>;
|
|
24
|
+
releaseRuntimeSelfAssignment?(params: RuntimeSelfClaimReleaseParams): Promise<EmitOutcome>;
|
|
23
25
|
emitRuntimeInboundRouted?(event: RuntimeInboundRoutedEvent): Promise<EmitOutcome>;
|
|
24
26
|
emitRuntimeProcessingState?(event: RuntimeProcessingStateEvent): Promise<EmitOutcome>;
|
|
25
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-endpoint-port.d.ts","sourceRoot":"","sources":["../../src/broker/runtime-endpoint-port.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,6BAA6B,EAC7B,+BAA+B,EAC/B,+BAA+B,EAC/B,oCAAoC,EACpC,0CAA0C,EAC3C,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AAC7F,OAAO,KAAK,EACV,6BAA6B,EAC7B,yBAAyB,EAC1B,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AAC7F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAWtF,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CACN,MAAM,EAAE,6BAA6B,GACpC,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC5C,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAO7C,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAQjE,eAAe,CACb,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,oCAAoC,GAC3C,OAAO,CAAC,IAAI,CAAC,CAAC;IAKjB,qBAAqB,CAAC,CACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,0CAA0C,GACjD,OAAO,CAAC,IAAI,CAAC,CAAC;IAqBjB,uBAAuB,CAAC,CACtB,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,WAAW,CAAC,CAAC;IAYxB,0BAA0B,CAAC,CACzB,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,WAAW,CAAC,CAAC;IAMxB,wBAAwB,CAAC,CACvB,KAAK,EAAE,6BAA6B,GACnC,OAAO,CAAC,+BAA+B,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-endpoint-port.d.ts","sourceRoot":"","sources":["../../src/broker/runtime-endpoint-port.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,6BAA6B,EAC7B,+BAA+B,EAC/B,+BAA+B,EAC/B,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,oCAAoC,EACpC,0CAA0C,EAC3C,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AAC7F,OAAO,KAAK,EACV,6BAA6B,EAC7B,yBAAyB,EAC1B,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AAC7F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAWtF,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CACN,MAAM,EAAE,6BAA6B,GACpC,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC5C,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAO7C,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAQjE,eAAe,CACb,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,oCAAoC,GAC3C,OAAO,CAAC,IAAI,CAAC,CAAC;IAKjB,qBAAqB,CAAC,CACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,0CAA0C,GACjD,OAAO,CAAC,IAAI,CAAC,CAAC;IAqBjB,uBAAuB,CAAC,CACtB,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,WAAW,CAAC,CAAC;IAYxB,0BAA0B,CAAC,CACzB,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,WAAW,CAAC,CAAC;IAMxB,wBAAwB,CAAC,CACvB,KAAK,EAAE,6BAA6B,GACnC,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAO5C,0BAA0B,CAAC,CACzB,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAKpC,4BAA4B,CAAC,CAC3B,MAAM,EAAE,6BAA6B,GACpC,OAAO,CAAC,WAAW,CAAC,CAAC;IAMxB,wBAAwB,CAAC,CACvB,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,WAAW,CAAC,CAAC;IAMxB,0BAA0B,CAAC,CACzB,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,WAAW,CAAC,CAAC;CACzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"undispatched-inbox.d.ts","sourceRoot":"","sources":["../../src/broker/undispatched-inbox.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IAEX,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAMlC,MAAM,EAAE,aAAa,GAAG,6BAA6B,CAAC;IAEtD,2BAA2B,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"undispatched-inbox.d.ts","sourceRoot":"","sources":["../../src/broker/undispatched-inbox.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IAEX,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAMlC,MAAM,EAAE,aAAa,GAAG,6BAA6B,CAAC;IAEtD,2BAA2B,CAAC,EAAE,MAAM,CAAC;IAQrC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,iBAAiB;IAMhC,MAAM,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC;IAE1C,IAAI,IAAI,mBAAmB,EAAE,CAAC;IAE9B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAC;IAKjD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAC;IAElD,IAAI,IAAI,MAAM,CAAC;IAEf,QAAQ,IAAI,MAAM,CAAC;IAEnB,eAAe,IAAI,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,uBAAuB,CACrC,IAAI,GAAE,wBAA6B,GAClC,iBAAiB,CAkDnB"}
|
|
@@ -5,6 +5,7 @@ export interface IpcCapabilities {
|
|
|
5
5
|
remote_spawn_v1?: boolean;
|
|
6
6
|
undispatched_inbox_v1?: boolean;
|
|
7
7
|
runtime_assignment_reply_v1?: boolean;
|
|
8
|
+
runtime_assignment_claim_v1?: boolean;
|
|
8
9
|
push_receipt_ack_v1?: boolean;
|
|
9
10
|
}
|
|
10
11
|
export declare const SERVER_CAPABILITIES: Readonly<IpcCapabilities>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-handshake.d.ts","sourceRoot":"","sources":["../../src/broker/version-handshake.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAM1C,MAAM,WAAW,eAAe;IAE9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAG1B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IAMtC,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAGD,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,eAAe,
|
|
1
|
+
{"version":3,"file":"version-handshake.d.ts","sourceRoot":"","sources":["../../src/broker/version-handshake.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAM1C,MAAM,WAAW,eAAe;IAE9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAG1B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IAEtC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IAMtC,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAGD,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,eAAe,CAOxD,CAAC;AAEH,MAAM,WAAW,qBAAqB;IAEpC,uBAAuB,EAAE,MAAM,CAAC;IAEhC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,eAAe,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,eAAe,CAAC;IAErC,UAAU,EAAE,MAAM,CAAC;IAanB,gBAAgB,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,2BAA2B,GAAG,aAAa,CAAC;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB;AAUD,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,qBAAqB,EAC1B,GAAG,EAAE;IAAE,eAAe,EAAE,eAAe,CAAA;CAAE,GAEvC;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,sBAAsB,CAAA;CAAE,GAC7C;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,mBAAmB,CAAA;CAAE,CA2C7C"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
2
|
import type { NetworkPresence } from "../broker/network-presence.js";
|
|
3
3
|
import type { RuntimeProcessingState, RuntimeWorkTargetRef } from "../broker/runtime-processing-state-event-types.js";
|
|
4
|
+
import type { UndispatchedMessage } from "../broker/undispatched-inbox.js";
|
|
4
5
|
import { type InitializeResponseBody, type IpcCapabilities } from "../broker/version-handshake.js";
|
|
5
6
|
import type { EndpointBackgroundExchangeMode, EndpointExecutionSurface, RuntimeEndpointCapability } from "../runtime-endpoint-client.js";
|
|
6
7
|
export declare class ConnectorUnavailableError extends Error {
|
|
@@ -45,6 +46,7 @@ export interface RegisterEndpointArgs {
|
|
|
45
46
|
}
|
|
46
47
|
export interface RegisterEndpointOutcome {
|
|
47
48
|
endpoint_id: string;
|
|
49
|
+
endpoint_owner_token?: string;
|
|
48
50
|
}
|
|
49
51
|
export interface BrokerInboundMessage {
|
|
50
52
|
from: string;
|
|
@@ -70,6 +72,22 @@ export interface SendRuntimeAssignmentReplyArgs {
|
|
|
70
72
|
content: string;
|
|
71
73
|
contentType?: string;
|
|
72
74
|
}
|
|
75
|
+
export interface ClaimRuntimeAssignmentArgs {
|
|
76
|
+
endpointId: string;
|
|
77
|
+
undispatchedId: string;
|
|
78
|
+
recoverExisting?: boolean;
|
|
79
|
+
}
|
|
80
|
+
export interface ClaimRuntimeAssignmentResponse {
|
|
81
|
+
assignment: BrokerRuntimeAssignmentContext;
|
|
82
|
+
message: {
|
|
83
|
+
from: string;
|
|
84
|
+
content: string;
|
|
85
|
+
contentType: string;
|
|
86
|
+
metadata: Record<string, unknown>;
|
|
87
|
+
sourceMessageId?: string;
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export type { UndispatchedMessage };
|
|
73
91
|
export type AdapterRuntimeProcessingState = Exclude<RuntimeProcessingState, "assigned_to_runtime_target" | "reply_requested" | "reply_emitted">;
|
|
74
92
|
export interface ReportRuntimeProcessingStateArgs {
|
|
75
93
|
endpointId: string;
|
|
@@ -106,6 +124,7 @@ export declare class BrokerClient extends EventEmitter {
|
|
|
106
124
|
private _serverCapabilities;
|
|
107
125
|
private _clientKind;
|
|
108
126
|
private _clientVersion;
|
|
127
|
+
private readonly endpointOwnerTokens;
|
|
109
128
|
private constructor();
|
|
110
129
|
static discover(opts: BrokerClientDiscoverOptions): Promise<BrokerClient>;
|
|
111
130
|
get spawnedNew(): boolean;
|
|
@@ -123,6 +142,8 @@ export declare class BrokerClient extends EventEmitter {
|
|
|
123
142
|
messageId: string;
|
|
124
143
|
status: string;
|
|
125
144
|
}>;
|
|
145
|
+
claimRuntimeAssignment(args: ClaimRuntimeAssignmentArgs): Promise<ClaimRuntimeAssignmentResponse>;
|
|
146
|
+
listUndispatched(): Promise<UndispatchedMessage[]>;
|
|
126
147
|
reportRuntimeProcessingState(args: ReportRuntimeProcessingStateArgs): Promise<void>;
|
|
127
148
|
close(endpointId?: string): Promise<void>;
|
|
128
149
|
on<K extends keyof Events>(event: K, listener: Events[K]): this;
|
|
@@ -134,6 +155,7 @@ export declare class BrokerClient extends EventEmitter {
|
|
|
134
155
|
emit<K extends keyof Events>(event: K, ...args: Parameters<Events[K]>): boolean;
|
|
135
156
|
emit(event: string | symbol, ...args: unknown[]): boolean;
|
|
136
157
|
private httpJson;
|
|
158
|
+
private requireEndpointOwnerToken;
|
|
137
159
|
private handleFrame;
|
|
138
160
|
private sendPushAck;
|
|
139
161
|
private startHeartbeat;
|
|
@@ -141,5 +163,4 @@ export declare class BrokerClient extends EventEmitter {
|
|
|
141
163
|
private markHeartbeatAlive;
|
|
142
164
|
private clearHeartbeat;
|
|
143
165
|
}
|
|
144
|
-
export {};
|
|
145
166
|
//# sourceMappingURL=broker-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker-client.d.ts","sourceRoot":"","sources":["../../src/broker-client/broker-client.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EACL,KAAK,sBAAsB,EAE3B,KAAK,eAAe,EACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AAcvC,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,IAAI,EAAG,uBAAuB,CAAU;IACjD,QAAQ,CAAC,SAAS,EAAG,IAAI,CAAU;gBACvB,OAAO,EAAE,MAAM;CAI5B;AAOD,qBAAa,gCAAiC,SAAQ,KAAK;IACzD,QAAQ,CAAC,IAAI,EAAG,gCAAgC,CAAU;IAC1D,QAAQ,CAAC,SAAS,EAAG,KAAK,CAAU;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAgBD,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IAErB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IAMtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,+BAA+B,CAAC,EAAE,MAAM,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAClD,gBAAgB,CAAC,EAAE,wBAAwB,CAAC;IAC5C,sBAAsB,CAAC,EAAE,8BAA8B,CAAC;IAQxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"broker-client.d.ts","sourceRoot":"","sources":["../../src/broker-client/broker-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,7 @@ export class BrokerClient extends EventEmitter {
|
|
|
41
41
|
_serverCapabilities = {};
|
|
42
42
|
_clientKind = null;
|
|
43
43
|
_clientVersion = null;
|
|
44
|
+
endpointOwnerTokens = new Map();
|
|
44
45
|
constructor(handle) {
|
|
45
46
|
super();
|
|
46
47
|
this.handle = handle;
|
|
@@ -142,7 +143,7 @@ export class BrokerClient extends EventEmitter {
|
|
|
142
143
|
if (this.pluginPid === null) {
|
|
143
144
|
throw new Error("BrokerClient.connect must be called before registerEndpoint");
|
|
144
145
|
}
|
|
145
|
-
|
|
146
|
+
const outcome = await this.httpJson("POST", "/v1/endpoint/register", {
|
|
146
147
|
agent_id: args.agentId,
|
|
147
148
|
plugin_pid: this.pluginPid,
|
|
148
149
|
kind: args.kind,
|
|
@@ -158,6 +159,10 @@ export class BrokerClient extends EventEmitter {
|
|
|
158
159
|
background_exchange_mode: args.backgroundExchangeMode,
|
|
159
160
|
spawn_token: args.spawnToken,
|
|
160
161
|
});
|
|
162
|
+
if (typeof outcome.endpoint_owner_token === "string") {
|
|
163
|
+
this.endpointOwnerTokens.set(outcome.endpoint_id, outcome.endpoint_owner_token);
|
|
164
|
+
}
|
|
165
|
+
return outcome;
|
|
161
166
|
}
|
|
162
167
|
async send(endpointId, to, content, contentType = "text", metadata) {
|
|
163
168
|
return this.httpJson("POST", "/v1/send", {
|
|
@@ -175,6 +180,7 @@ export class BrokerClient extends EventEmitter {
|
|
|
175
180
|
return this.httpJson("POST", "/v1/runtime/assignment-reply", {
|
|
176
181
|
endpoint_id: args.endpointId,
|
|
177
182
|
plugin_pid: this.pluginPid,
|
|
183
|
+
endpoint_owner_token: this.requireEndpointOwnerToken(args.endpointId),
|
|
178
184
|
source_message_id: args.sourceMessageId,
|
|
179
185
|
assignment_id: args.assignmentId,
|
|
180
186
|
reply_request_id: args.replyRequestId,
|
|
@@ -182,6 +188,25 @@ export class BrokerClient extends EventEmitter {
|
|
|
182
188
|
contentType: args.contentType,
|
|
183
189
|
});
|
|
184
190
|
}
|
|
191
|
+
async claimRuntimeAssignment(args) {
|
|
192
|
+
if (this.pluginPid === null) {
|
|
193
|
+
throw new Error("BrokerClient.connect must be called before claimRuntimeAssignment");
|
|
194
|
+
}
|
|
195
|
+
return this.httpJson("POST", "/v1/runtime/assignment-claim", {
|
|
196
|
+
endpoint_id: args.endpointId,
|
|
197
|
+
plugin_pid: this.pluginPid,
|
|
198
|
+
endpoint_owner_token: this.requireEndpointOwnerToken(args.endpointId),
|
|
199
|
+
undispatched_id: args.undispatchedId,
|
|
200
|
+
...(args.recoverExisting === true && { recover_existing: true }),
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
async listUndispatched() {
|
|
204
|
+
if (this.pluginPid === null) {
|
|
205
|
+
throw new Error("BrokerClient.connect must be called before listUndispatched");
|
|
206
|
+
}
|
|
207
|
+
const res = await this.httpJson("GET", "/v1/undispatched");
|
|
208
|
+
return res.items ?? [];
|
|
209
|
+
}
|
|
185
210
|
async reportRuntimeProcessingState(args) {
|
|
186
211
|
if (this.pluginPid === null) {
|
|
187
212
|
throw new Error("BrokerClient.connect must be called before reportRuntimeProcessingState");
|
|
@@ -189,6 +214,7 @@ export class BrokerClient extends EventEmitter {
|
|
|
189
214
|
await this.httpJson("POST", "/v1/runtime/processing-state", {
|
|
190
215
|
endpoint_id: args.endpointId,
|
|
191
216
|
plugin_pid: this.pluginPid,
|
|
217
|
+
endpoint_owner_token: this.requireEndpointOwnerToken(args.endpointId),
|
|
192
218
|
source_message_id: args.sourceMessageId,
|
|
193
219
|
assignment_id: args.assignmentId,
|
|
194
220
|
state_event_id: args.stateEventId,
|
|
@@ -236,6 +262,9 @@ export class BrokerClient extends EventEmitter {
|
|
|
236
262
|
method,
|
|
237
263
|
headers: {
|
|
238
264
|
Authorization: `Bearer ${this.handle.record.bearerToken}`,
|
|
265
|
+
...(this.pluginPid !== null
|
|
266
|
+
? { "x-plugin-pid": String(this.pluginPid) }
|
|
267
|
+
: {}),
|
|
239
268
|
...(body ? { "Content-Type": "application/json" } : {}),
|
|
240
269
|
},
|
|
241
270
|
body: body ? JSON.stringify(body) : undefined,
|
|
@@ -268,6 +297,13 @@ export class BrokerClient extends EventEmitter {
|
|
|
268
297
|
}
|
|
269
298
|
return (await res.json());
|
|
270
299
|
}
|
|
300
|
+
requireEndpointOwnerToken(endpointId) {
|
|
301
|
+
const token = this.endpointOwnerTokens.get(endpointId);
|
|
302
|
+
if (!token) {
|
|
303
|
+
throw new Error("endpoint_owner_token missing; endpoint must be registered through this BrokerClient before endpoint-scoped operations");
|
|
304
|
+
}
|
|
305
|
+
return token;
|
|
306
|
+
}
|
|
271
307
|
handleFrame(raw) {
|
|
272
308
|
let parsed;
|
|
273
309
|
try {
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { PlatformApiError, type PlatformClientConfig } from "./platform-client.js";
|
|
2
|
+
type PartialRuntimeSelfClaimResponse = Omit<Partial<RuntimeSelfClaimResponse>, "target_ref"> & {
|
|
3
|
+
target_ref?: RuntimeWorkTargetRef;
|
|
4
|
+
};
|
|
2
5
|
export { PlatformApiError, type PlatformClientConfig };
|
|
3
6
|
export type RuntimeKind = "claude-code" | "openclaw" | "codex" | "passport" | "custom" | (string & {});
|
|
4
7
|
export type RuntimeEndpointCapability = "remote_spawn_v1" | "background_exchange_v1" | "foreground_channel_v1" | (string & {});
|
|
@@ -84,6 +87,36 @@ export interface UpdateRuntimeEndpointDisplayMetadataParams {
|
|
|
84
87
|
session_name?: string;
|
|
85
88
|
task_hint?: string;
|
|
86
89
|
}
|
|
90
|
+
export interface RuntimeSelfClaimParams {
|
|
91
|
+
undispatched_id: string;
|
|
92
|
+
target_endpoint_id: string;
|
|
93
|
+
endpoint_nonce: string;
|
|
94
|
+
recover_existing?: boolean;
|
|
95
|
+
}
|
|
96
|
+
export interface RuntimeSelfClaimResponse {
|
|
97
|
+
assignment_id: string;
|
|
98
|
+
undispatched_id: string;
|
|
99
|
+
source_message_id: string;
|
|
100
|
+
target_ref: RuntimeWorkTargetRef;
|
|
101
|
+
broker_projection_token: string;
|
|
102
|
+
assigned_at: number;
|
|
103
|
+
claimed: boolean;
|
|
104
|
+
message: {
|
|
105
|
+
from: string;
|
|
106
|
+
content: string;
|
|
107
|
+
contentType: string;
|
|
108
|
+
metadata?: Record<string, unknown>;
|
|
109
|
+
sourceMessageId: string;
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export interface RuntimeSelfClaimReleaseParams {
|
|
113
|
+
undispatched_id: string;
|
|
114
|
+
source_message_id: string;
|
|
115
|
+
assignment_id: string;
|
|
116
|
+
target_ref: RuntimeWorkTargetRef;
|
|
117
|
+
endpoint_nonce: string;
|
|
118
|
+
broker_projection_token: string;
|
|
119
|
+
}
|
|
87
120
|
export declare function registerRuntimeEndpoint(cfg: PlatformClientConfig, runtimeKey: string, params: RegisterRuntimeEndpointParams): Promise<RegisterRuntimeEndpointResponse>;
|
|
88
121
|
export declare function heartbeatRuntimeEndpoint(cfg: PlatformClientConfig, runtimeKey: string, endpointId: string): Promise<HeartbeatRuntimeEndpointResponse>;
|
|
89
122
|
export declare function transitionRuntimeEndpointState(cfg: PlatformClientConfig, runtimeKey: string, endpointId: string, params: TransitionRuntimeEndpointStateParams): Promise<TransitionRuntimeEndpointStateResponse>;
|
|
@@ -109,8 +142,20 @@ export type RuntimeInboundRouteClaimOutcome = {
|
|
|
109
142
|
status?: number;
|
|
110
143
|
detail?: string;
|
|
111
144
|
};
|
|
145
|
+
export type RuntimeSelfClaimOutcome = {
|
|
146
|
+
ok: true;
|
|
147
|
+
claim: RuntimeSelfClaimResponse;
|
|
148
|
+
} | {
|
|
149
|
+
ok: false;
|
|
150
|
+
terminal: boolean;
|
|
151
|
+
status?: number;
|
|
152
|
+
detail?: string;
|
|
153
|
+
postCasInvalidClaim?: PartialRuntimeSelfClaimResponse;
|
|
154
|
+
};
|
|
112
155
|
export declare function emitRuntimeNetworkPresenceChanged(cfg: PlatformClientConfig, runtimeKey: string, event: Readonly<Record<string, unknown>>): Promise<EmitUndispatchedChangedOutcome>;
|
|
113
156
|
export declare function claimRuntimeInboundRoute(cfg: PlatformClientConfig, runtimeKey: string, event: Readonly<Record<string, unknown>>): Promise<RuntimeInboundRouteClaimOutcome>;
|
|
157
|
+
export declare function claimRuntimeSelfAssignment(cfg: PlatformClientConfig, runtimeKey: string, params: RuntimeSelfClaimParams): Promise<RuntimeSelfClaimOutcome>;
|
|
158
|
+
export declare function releaseRuntimeSelfAssignment(cfg: PlatformClientConfig, runtimeKey: string, params: RuntimeSelfClaimReleaseParams): Promise<EmitUndispatchedChangedOutcome>;
|
|
114
159
|
export declare function emitRuntimeInboundRouted(cfg: PlatformClientConfig, runtimeKey: string, event: Readonly<Record<string, unknown>>): Promise<EmitUndispatchedChangedOutcome>;
|
|
115
160
|
export declare function emitRuntimeProcessingState(cfg: PlatformClientConfig, runtimeKey: string, event: Readonly<Record<string, unknown>>): Promise<EmitUndispatchedChangedOutcome>;
|
|
116
161
|
//# sourceMappingURL=runtime-endpoint-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-endpoint-client.d.ts","sourceRoot":"","sources":["../src/runtime-endpoint-client.ts"],"names":[],"mappings":"AAuBA,OAAO,EACL,gBAAgB,EAChB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-endpoint-client.d.ts","sourceRoot":"","sources":["../src/runtime-endpoint-client.ts"],"names":[],"mappings":"AAuBA,OAAO,EACL,gBAAgB,EAChB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAE9B,KAAK,+BAA+B,GAAG,IAAI,CACzC,OAAO,CAAC,wBAAwB,CAAC,EACjC,YAAY,CACb,GAAG;IACF,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC,CAAC;AAMF,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,CAAC;AAmBvD,MAAM,MAAM,WAAW,GACnB,aAAa,GACb,UAAU,GACV,OAAO,GACP,UAAU,GACV,QAAQ,GACR,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,yBAAyB,GACjC,iBAAiB,GACjB,wBAAwB,GACxB,uBAAuB,GACvB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,wBAAwB,GAChC,gBAAgB,GAChB,UAAU,GACV,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,8BAA8B,GACtC,mBAAmB,GACnB,sBAAsB,GACtB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,oBAAoB,GAC5B;IACE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,wBAAwB,EAAE,mBAAmB,CAAC;CAC/C,GACD;IACE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,wBAAwB,EAAE,sBAAsB,CAAC;CAClD,CAAC;AAaN,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAaD,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,cAAc,GACd,aAAa,GACb,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAWlB,MAAM,WAAW,6BAA6B;IAQ5C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,WAAW,CAAC;IAO1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,cAAc,EAAE,MAAM,CAAC;IAEvB,aAAa,EAAE,MAAM,CAAC;IAEtB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAE9B,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,oBAAoB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAEnD,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAE7C,wBAAwB,CAAC,EAAE,8BAA8B,CAAC;IAK1D,eAAe,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACxC;AAcD,MAAM,WAAW,+BAA+B;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACnD,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,wBAAwB,CAAC,EAAE,8BAA8B,CAAC;IAC1D,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;CACvB;AAeD,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IAKpB,OAAO,EAAE,MAAM,CAAC;IAUhB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,WAAW,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAQ5B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IAYtB,WAAW,CAAC,EAAE;QACZ,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClD,CAAC;IACF,oBAAoB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACnD,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,wBAAwB,CAAC,EAAE,8BAA8B,CAAC;IAC1D,uBAAuB,CAAC,EAAE,oBAAoB,CAAC;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IAOpB,OAAO,EAAE,OAAO,CAAC;CAClB;AASD,MAAM,WAAW,iCAAiC;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,wBAAwB,EAAE,CAAC;CACnC;AAUD,MAAM,MAAM,gCAAgC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAQvE,MAAM,MAAM,iCAAiC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAYxE,MAAM,WAAW,oCAAoC;IAEnD,KAAK,EAAE,QAAQ,GAAG,cAAc,GAAG,QAAQ,CAAC;IAG5C,MAAM,EAAE,MAAM,CAAC;IAEf,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,sCAAsC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE7E,MAAM,WAAW,0CAA0C;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,oBAAoB,CAAC;IACjC,uBAAuB,EAAE,MAAM,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,MAAM,WAAW,6BAA6B;IAC5C,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,oBAAoB,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,uBAAuB,EAAE,MAAM,CAAC;CACjC;AA8FD,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,6BAA6B,GACpC,OAAO,CAAC,+BAA+B,CAAC,CAQ1C;AAiBD,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gCAAgC,CAAC,CAY3C;AA0BD,wBAAsB,8BAA8B,CAClD,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,oCAAoC,GAC3C,OAAO,CAAC,sCAAsC,CAAC,CAYjD;AAED,wBAAsB,oCAAoC,CACxD,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,0CAA0C,GACjD,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,iCAAiC,CAAC,CAc5C;AAgBD,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,iCAAiC,CAAC,CAO5C;AAWD,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,wBAAwB,CAAC,CAUnC;AA0BD,wBAAsB,8BAA8B,CAClD,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAOlB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,OAAO,CAAC,8BAA8B,CAAC,CAoCzC;AAED,MAAM,MAAM,8BAA8B,GACtC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,MAAM,MAAM,+BAA+B,GACvC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAA;CAAE,GACtC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,MAAM,MAAM,uBAAuB,GAC/B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,wBAAwB,CAAA;CAAE,GAC7C;IACE,EAAE,EAAE,KAAK,CAAC;IACV,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,+BAA+B,CAAC;CACvD,CAAC;AAqBN,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,OAAO,CAAC,8BAA8B,CAAC,CA8BzC;AAOD,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,OAAO,CAAC,+BAA+B,CAAC,CA2C1C;AAMD,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,uBAAuB,CAAC,CA4GlC;AAMD,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,6BAA6B,GACpC,OAAO,CAAC,8BAA8B,CAAC,CAoCzC;AAOD,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,OAAO,CAAC,8BAA8B,CAAC,CA8BzC;AAMD,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,OAAO,CAAC,8BAA8B,CAAC,CAmCzC"}
|
|
@@ -20,6 +20,35 @@ function jsonHeaders(runtimeKey) {
|
|
|
20
20
|
"Content-Type": "application/json",
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
|
+
function readRuntimeWorkTargetRef(value) {
|
|
24
|
+
if (!value || typeof value !== "object")
|
|
25
|
+
return null;
|
|
26
|
+
const raw = value;
|
|
27
|
+
if (raw.kind !== "projection_endpoint" ||
|
|
28
|
+
typeof raw.projection_endpoint_id !== "string") {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
if (raw.background_exchange_mode === "resident_endpoint") {
|
|
32
|
+
if (raw.runtime_session_id !== undefined)
|
|
33
|
+
return null;
|
|
34
|
+
return {
|
|
35
|
+
kind: "projection_endpoint",
|
|
36
|
+
projection_endpoint_id: raw.projection_endpoint_id,
|
|
37
|
+
background_exchange_mode: "resident_endpoint",
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
if (raw.background_exchange_mode === "adapter_managed_turn" &&
|
|
41
|
+
typeof raw.runtime_session_id === "string" &&
|
|
42
|
+
raw.runtime_session_id.trim().length > 0) {
|
|
43
|
+
return {
|
|
44
|
+
kind: "projection_endpoint",
|
|
45
|
+
projection_endpoint_id: raw.projection_endpoint_id,
|
|
46
|
+
runtime_session_id: raw.runtime_session_id,
|
|
47
|
+
background_exchange_mode: "adapter_managed_turn",
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
23
52
|
export async function registerRuntimeEndpoint(cfg, runtimeKey, params) {
|
|
24
53
|
const res = await fetch(`${baseUrl(cfg)}/runtime-endpoints`, {
|
|
25
54
|
method: "POST",
|
|
@@ -200,6 +229,147 @@ export async function claimRuntimeInboundRoute(cfg, runtimeKey, event) {
|
|
|
200
229
|
detail: await readErrorDetail(res),
|
|
201
230
|
};
|
|
202
231
|
}
|
|
232
|
+
export async function claimRuntimeSelfAssignment(cfg, runtimeKey, params) {
|
|
233
|
+
let res;
|
|
234
|
+
try {
|
|
235
|
+
res = await fetch(`${baseUrl(cfg)}/runtime/self-claim`, {
|
|
236
|
+
method: "POST",
|
|
237
|
+
headers: jsonHeaders(runtimeKey),
|
|
238
|
+
body: JSON.stringify(params),
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
catch (err) {
|
|
242
|
+
return {
|
|
243
|
+
ok: false,
|
|
244
|
+
terminal: false,
|
|
245
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
if (res.status === 200 || res.status === 201) {
|
|
249
|
+
const rawBody = (await res.json().catch(() => null));
|
|
250
|
+
const body = rawBody !== null && typeof rawBody === "object" && !Array.isArray(rawBody)
|
|
251
|
+
? rawBody
|
|
252
|
+
: null;
|
|
253
|
+
const targetRef = readRuntimeWorkTargetRef(body?.target_ref);
|
|
254
|
+
const assignmentId = body?.assignment_id;
|
|
255
|
+
const undispatchedId = body?.undispatched_id;
|
|
256
|
+
const sourceMessageId = body?.source_message_id;
|
|
257
|
+
const brokerProjectionToken = body?.broker_projection_token;
|
|
258
|
+
const assignedAt = body?.assigned_at;
|
|
259
|
+
const claimed = body?.claimed;
|
|
260
|
+
const message = body?.message;
|
|
261
|
+
if (targetRef !== null &&
|
|
262
|
+
typeof assignmentId === "string" &&
|
|
263
|
+
typeof undispatchedId === "string" &&
|
|
264
|
+
typeof sourceMessageId === "string" &&
|
|
265
|
+
typeof brokerProjectionToken === "string" &&
|
|
266
|
+
typeof assignedAt === "number" &&
|
|
267
|
+
typeof claimed === "boolean" &&
|
|
268
|
+
typeof message === "object" &&
|
|
269
|
+
message !== null &&
|
|
270
|
+
typeof message.from === "string" &&
|
|
271
|
+
typeof message.content === "string" &&
|
|
272
|
+
typeof message.contentType === "string" &&
|
|
273
|
+
typeof message.sourceMessageId === "string" &&
|
|
274
|
+
message.sourceMessageId === sourceMessageId &&
|
|
275
|
+
undispatchedId === params.undispatched_id &&
|
|
276
|
+
(message.metadata === undefined ||
|
|
277
|
+
(typeof message.metadata === "object" &&
|
|
278
|
+
message.metadata !== null &&
|
|
279
|
+
!Array.isArray(message.metadata)))) {
|
|
280
|
+
const claim = {
|
|
281
|
+
assignment_id: assignmentId,
|
|
282
|
+
undispatched_id: undispatchedId,
|
|
283
|
+
source_message_id: sourceMessageId,
|
|
284
|
+
target_ref: targetRef,
|
|
285
|
+
broker_projection_token: brokerProjectionToken,
|
|
286
|
+
assigned_at: assignedAt,
|
|
287
|
+
claimed,
|
|
288
|
+
message: {
|
|
289
|
+
from: message.from,
|
|
290
|
+
content: message.content,
|
|
291
|
+
contentType: message.contentType,
|
|
292
|
+
...(message.metadata !== undefined && {
|
|
293
|
+
metadata: message.metadata,
|
|
294
|
+
}),
|
|
295
|
+
sourceMessageId: message.sourceMessageId,
|
|
296
|
+
},
|
|
297
|
+
};
|
|
298
|
+
return {
|
|
299
|
+
ok: true,
|
|
300
|
+
claim,
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
const postCasInvalidClaim = body
|
|
304
|
+
? {
|
|
305
|
+
...body,
|
|
306
|
+
...(targetRef !== null && { target_ref: targetRef }),
|
|
307
|
+
}
|
|
308
|
+
: undefined;
|
|
309
|
+
return {
|
|
310
|
+
ok: false,
|
|
311
|
+
terminal: true,
|
|
312
|
+
status: res.status,
|
|
313
|
+
detail: "invalid self-claim response",
|
|
314
|
+
...(postCasInvalidClaim !== undefined && { postCasInvalidClaim }),
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
if (res.status === 401 ||
|
|
318
|
+
res.status === 403 ||
|
|
319
|
+
res.status === 404 ||
|
|
320
|
+
res.status === 409 ||
|
|
321
|
+
res.status === 422) {
|
|
322
|
+
return {
|
|
323
|
+
ok: false,
|
|
324
|
+
terminal: true,
|
|
325
|
+
status: res.status,
|
|
326
|
+
detail: await readErrorDetail(res),
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
return {
|
|
330
|
+
ok: false,
|
|
331
|
+
terminal: false,
|
|
332
|
+
status: res.status,
|
|
333
|
+
detail: await readErrorDetail(res),
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
export async function releaseRuntimeSelfAssignment(cfg, runtimeKey, params) {
|
|
337
|
+
let res;
|
|
338
|
+
try {
|
|
339
|
+
res = await fetch(`${baseUrl(cfg)}/runtime/self-claim/release`, {
|
|
340
|
+
method: "POST",
|
|
341
|
+
headers: jsonHeaders(runtimeKey),
|
|
342
|
+
body: JSON.stringify(params),
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
catch (err) {
|
|
346
|
+
return {
|
|
347
|
+
ok: false,
|
|
348
|
+
terminal: false,
|
|
349
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
if (res.status === 204)
|
|
353
|
+
return { ok: true };
|
|
354
|
+
if (res.status === 401 ||
|
|
355
|
+
res.status === 403 ||
|
|
356
|
+
res.status === 404 ||
|
|
357
|
+
res.status === 409 ||
|
|
358
|
+
res.status === 422) {
|
|
359
|
+
return {
|
|
360
|
+
ok: false,
|
|
361
|
+
terminal: true,
|
|
362
|
+
status: res.status,
|
|
363
|
+
detail: await readErrorDetail(res),
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
return {
|
|
367
|
+
ok: false,
|
|
368
|
+
terminal: false,
|
|
369
|
+
status: res.status,
|
|
370
|
+
detail: await readErrorDetail(res),
|
|
371
|
+
};
|
|
372
|
+
}
|
|
203
373
|
export async function emitRuntimeInboundRouted(cfg, runtimeKey, event) {
|
|
204
374
|
let res;
|
|
205
375
|
try {
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const PLUGIN_VERSION = "0.2.
|
|
1
|
+
export declare const PLUGIN_VERSION = "0.2.11";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,cAAc,WAAW,CAAC"}
|
package/dist/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const PLUGIN_VERSION = "0.2.
|
|
1
|
+
export const PLUGIN_VERSION = "0.2.11";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@masons/runtime-broker",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.11",
|
|
4
4
|
"description": "MASONS Runtime Broker — local daemon and BrokerClient SDK for multi-session agent runtime coordination.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "MASONS.ai <hello@masons.ai> (https://masons.ai)",
|