@masons/runtime-broker 0.2.9 → 0.2.10
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/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 +19 -0
- package/dist/broker-client/broker-client.d.ts.map +1 -1
- package/dist/broker-client/broker-client.js +30 -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"}
|
|
@@ -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"}
|
|
@@ -45,6 +45,7 @@ export interface RegisterEndpointArgs {
|
|
|
45
45
|
}
|
|
46
46
|
export interface RegisterEndpointOutcome {
|
|
47
47
|
endpoint_id: string;
|
|
48
|
+
endpoint_owner_token?: string;
|
|
48
49
|
}
|
|
49
50
|
export interface BrokerInboundMessage {
|
|
50
51
|
from: string;
|
|
@@ -70,6 +71,21 @@ export interface SendRuntimeAssignmentReplyArgs {
|
|
|
70
71
|
content: string;
|
|
71
72
|
contentType?: string;
|
|
72
73
|
}
|
|
74
|
+
export interface ClaimRuntimeAssignmentArgs {
|
|
75
|
+
endpointId: string;
|
|
76
|
+
undispatchedId: string;
|
|
77
|
+
recoverExisting?: boolean;
|
|
78
|
+
}
|
|
79
|
+
export interface ClaimRuntimeAssignmentResponse {
|
|
80
|
+
assignment: BrokerRuntimeAssignmentContext;
|
|
81
|
+
message: {
|
|
82
|
+
from: string;
|
|
83
|
+
content: string;
|
|
84
|
+
contentType: string;
|
|
85
|
+
metadata: Record<string, unknown>;
|
|
86
|
+
sourceMessageId?: string;
|
|
87
|
+
};
|
|
88
|
+
}
|
|
73
89
|
export type AdapterRuntimeProcessingState = Exclude<RuntimeProcessingState, "assigned_to_runtime_target" | "reply_requested" | "reply_emitted">;
|
|
74
90
|
export interface ReportRuntimeProcessingStateArgs {
|
|
75
91
|
endpointId: string;
|
|
@@ -106,6 +122,7 @@ export declare class BrokerClient extends EventEmitter {
|
|
|
106
122
|
private _serverCapabilities;
|
|
107
123
|
private _clientKind;
|
|
108
124
|
private _clientVersion;
|
|
125
|
+
private readonly endpointOwnerTokens;
|
|
109
126
|
private constructor();
|
|
110
127
|
static discover(opts: BrokerClientDiscoverOptions): Promise<BrokerClient>;
|
|
111
128
|
get spawnedNew(): boolean;
|
|
@@ -123,6 +140,7 @@ export declare class BrokerClient extends EventEmitter {
|
|
|
123
140
|
messageId: string;
|
|
124
141
|
status: string;
|
|
125
142
|
}>;
|
|
143
|
+
claimRuntimeAssignment(args: ClaimRuntimeAssignmentArgs): Promise<ClaimRuntimeAssignmentResponse>;
|
|
126
144
|
reportRuntimeProcessingState(args: ReportRuntimeProcessingStateArgs): Promise<void>;
|
|
127
145
|
close(endpointId?: string): Promise<void>;
|
|
128
146
|
on<K extends keyof Events>(event: K, listener: Events[K]): this;
|
|
@@ -134,6 +152,7 @@ export declare class BrokerClient extends EventEmitter {
|
|
|
134
152
|
emit<K extends keyof Events>(event: K, ...args: Parameters<Events[K]>): boolean;
|
|
135
153
|
emit(event: string | symbol, ...args: unknown[]): boolean;
|
|
136
154
|
private httpJson;
|
|
155
|
+
private requireEndpointOwnerToken;
|
|
137
156
|
private handleFrame;
|
|
138
157
|
private sendPushAck;
|
|
139
158
|
private startHeartbeat;
|
|
@@ -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,18 @@ 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
|
+
}
|
|
185
203
|
async reportRuntimeProcessingState(args) {
|
|
186
204
|
if (this.pluginPid === null) {
|
|
187
205
|
throw new Error("BrokerClient.connect must be called before reportRuntimeProcessingState");
|
|
@@ -189,6 +207,7 @@ export class BrokerClient extends EventEmitter {
|
|
|
189
207
|
await this.httpJson("POST", "/v1/runtime/processing-state", {
|
|
190
208
|
endpoint_id: args.endpointId,
|
|
191
209
|
plugin_pid: this.pluginPid,
|
|
210
|
+
endpoint_owner_token: this.requireEndpointOwnerToken(args.endpointId),
|
|
192
211
|
source_message_id: args.sourceMessageId,
|
|
193
212
|
assignment_id: args.assignmentId,
|
|
194
213
|
state_event_id: args.stateEventId,
|
|
@@ -236,6 +255,9 @@ export class BrokerClient extends EventEmitter {
|
|
|
236
255
|
method,
|
|
237
256
|
headers: {
|
|
238
257
|
Authorization: `Bearer ${this.handle.record.bearerToken}`,
|
|
258
|
+
...(this.pluginPid !== null
|
|
259
|
+
? { "x-plugin-pid": String(this.pluginPid) }
|
|
260
|
+
: {}),
|
|
239
261
|
...(body ? { "Content-Type": "application/json" } : {}),
|
|
240
262
|
},
|
|
241
263
|
body: body ? JSON.stringify(body) : undefined,
|
|
@@ -268,6 +290,13 @@ export class BrokerClient extends EventEmitter {
|
|
|
268
290
|
}
|
|
269
291
|
return (await res.json());
|
|
270
292
|
}
|
|
293
|
+
requireEndpointOwnerToken(endpointId) {
|
|
294
|
+
const token = this.endpointOwnerTokens.get(endpointId);
|
|
295
|
+
if (!token) {
|
|
296
|
+
throw new Error("endpoint_owner_token missing; endpoint must be registered through this BrokerClient before endpoint-scoped operations");
|
|
297
|
+
}
|
|
298
|
+
return token;
|
|
299
|
+
}
|
|
271
300
|
handleFrame(raw) {
|
|
272
301
|
let parsed;
|
|
273
302
|
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":"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"}
|
|
@@ -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.10";
|
|
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.10";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@masons/runtime-broker",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.10",
|
|
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)",
|