@masons/runtime-broker 0.2.2 → 0.2.5
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 +284 -33
- package/dist/broker/control-event-types.d.ts +8 -4
- package/dist/broker/control-event-types.d.ts.map +1 -1
- package/dist/broker/endpoint-registry.d.ts +2 -0
- package/dist/broker/endpoint-registry.d.ts.map +1 -1
- package/dist/broker/endpoint-registry.js +1 -0
- package/dist/broker/ipc-server.d.ts +13 -0
- package/dist/broker/ipc-server.d.ts.map +1 -1
- package/dist/broker/ipc-server.js +6 -0
- package/dist/broker/runtime-processing-state-event-types.d.ts +8 -4
- package/dist/broker/runtime-processing-state-event-types.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 +23 -1
- package/dist/broker-client/broker-client.d.ts.map +1 -1
- package/dist/broker-client/broker-client.js +45 -0
- package/dist/broker-client/lazy-spawn.d.ts.map +1 -1
- package/dist/connector-client.d.ts +8 -0
- package/dist/connector-client.d.ts.map +1 -1
- package/dist/connector-client.js +17 -3
- package/dist/runtime-endpoint-client.d.ts +12 -1
- package/dist/runtime-endpoint-client.d.ts.map +1 -1
- package/dist/runtime-endpoint-client.js +4 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +13 -12
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"broker-daemon.d.ts","sourceRoot":"","sources":["../../src/broker/broker-daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { spawn as spawnChild } from "node:child_process";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { basename } from "node:path";
|
|
4
|
+
import { ConnectorClientUnavailableError, ConnectorSendAckTimeoutError, } from "../connector-client.js";
|
|
4
5
|
import { createControlEventDispatcher, } from "./control-event-dispatcher.js";
|
|
5
6
|
import { readDeliveryCursorFile, writeDeliveryCursorFile, } from "./delivery-cursor-file.js";
|
|
6
7
|
import { deleteDiscoveryFile, mintBearerToken, writeDiscoveryFile, } from "./discovery-file.js";
|
|
@@ -23,13 +24,27 @@ import { createUndispatchedChangedEmitter, postUndispatchedChangedViaPort, } fro
|
|
|
23
24
|
import { createUndispatchedInbox, } from "./undispatched-inbox.js";
|
|
24
25
|
const REMOTE_SPAWN_CAPABILITY = "remote_spawn_v1";
|
|
25
26
|
const DEFAULT_RUNTIME_ASSIGNMENT_ACCEPTANCE_TIMEOUT_MS = 30_000;
|
|
27
|
+
const RUNTIME_ASSIGNMENT_REPLY_RECORD_TTL_MS = 24 * 60 * 60 * 1000;
|
|
26
28
|
const RUNTIME_PROCESSING_RETRY_INITIAL_MS = 1_000;
|
|
27
29
|
const RUNTIME_PROCESSING_RETRY_MAX_MS = 30_000;
|
|
28
30
|
function isBackgroundExchangeMode(value) {
|
|
29
31
|
return value === "resident_endpoint" || value === "adapter_managed_turn";
|
|
30
32
|
}
|
|
31
|
-
function
|
|
32
|
-
|
|
33
|
+
function buildLocalDispatchTargetRef(targetEndpointId, target) {
|
|
34
|
+
if (target?.background_exchange_mode === "adapter_managed_turn" &&
|
|
35
|
+
target.runtime_session_id) {
|
|
36
|
+
return {
|
|
37
|
+
kind: "projection_endpoint",
|
|
38
|
+
projection_endpoint_id: targetEndpointId,
|
|
39
|
+
runtime_session_id: target.runtime_session_id,
|
|
40
|
+
background_exchange_mode: "adapter_managed_turn",
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
kind: "projection_endpoint",
|
|
45
|
+
projection_endpoint_id: targetEndpointId,
|
|
46
|
+
background_exchange_mode: "resident_endpoint",
|
|
47
|
+
};
|
|
33
48
|
}
|
|
34
49
|
function derivePublicDisplayLabel(body) {
|
|
35
50
|
const parts = [
|
|
@@ -76,6 +91,8 @@ export async function startBrokerDaemon(opts) {
|
|
|
76
91
|
const controlEventDispatcher = createControlEventDispatcher();
|
|
77
92
|
const runtimeAssignments = new Map();
|
|
78
93
|
const runtimeAssignmentByEndpointCorrelation = new Map();
|
|
94
|
+
const runtimeAssignmentReplyRecords = new Map();
|
|
95
|
+
const runtimeAssignmentReplyInFlight = new Map();
|
|
79
96
|
const spawnCorrelation = createSpawnCorrelationManager({
|
|
80
97
|
timeoutMs: opts.spawnCorrelationTimeoutMs,
|
|
81
98
|
});
|
|
@@ -135,6 +152,21 @@ export async function startBrokerDaemon(opts) {
|
|
|
135
152
|
maxRetries: opts.runtimeInboundRoutedMaxRetries,
|
|
136
153
|
});
|
|
137
154
|
const runtimeAssignmentKey = (sourceMessageId, assignmentId) => `${sourceMessageId}\u0000${assignmentId}`;
|
|
155
|
+
const runtimeAssignmentReplyKey = (sourceMessageId, assignmentId, replyRequestId) => `${sourceMessageId}\u0000${assignmentId}\u0000${replyRequestId}`;
|
|
156
|
+
const runtimeAssignmentReplyFingerprint = (content, contentType) => JSON.stringify([content, contentType ?? "text"]);
|
|
157
|
+
const pruneRuntimeAssignmentReplyRecords = (now = Date.now()) => {
|
|
158
|
+
for (const [key, record] of runtimeAssignmentReplyRecords.entries()) {
|
|
159
|
+
const [sourceMessageId, assignmentId] = key.split("\u0000");
|
|
160
|
+
if (sourceMessageId !== undefined &&
|
|
161
|
+
assignmentId !== undefined &&
|
|
162
|
+
runtimeAssignments.has(runtimeAssignmentKey(sourceMessageId, assignmentId))) {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
if (record.expiresAt <= now) {
|
|
166
|
+
runtimeAssignmentReplyRecords.delete(key);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
};
|
|
138
170
|
const endpointCorrelationKey = (endpointId, correlationId) => `${endpointId}\u0000${correlationId}`;
|
|
139
171
|
const isBackgroundExchangeTarget = (entry) => Boolean(entry.runtime_capabilities?.includes("background_exchange_v1") &&
|
|
140
172
|
isBackgroundExchangeMode(entry.background_exchange_mode));
|
|
@@ -158,6 +190,11 @@ export async function startBrokerDaemon(opts) {
|
|
|
158
190
|
runtimeAssignmentByEndpointCorrelation.delete(correlationKey);
|
|
159
191
|
}
|
|
160
192
|
}
|
|
193
|
+
for (const replyKey of Array.from(runtimeAssignmentReplyInFlight.keys())) {
|
|
194
|
+
if (replyKey.startsWith(`${key}\u0000`)) {
|
|
195
|
+
runtimeAssignmentReplyInFlight.delete(replyKey);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
161
198
|
};
|
|
162
199
|
const scheduleAcceptanceTimeout = (key) => {
|
|
163
200
|
if (runtimeAssignmentAcceptanceTimeoutMs <= 0)
|
|
@@ -327,6 +364,27 @@ export async function startBrokerDaemon(opts) {
|
|
|
327
364
|
}
|
|
328
365
|
return Promise.allSettled(tasks).then(() => undefined);
|
|
329
366
|
};
|
|
367
|
+
const restorePendingAssignmentBeforeAcceptance = (key, assignment, reason) => {
|
|
368
|
+
if (assignment.acceptanceTimer) {
|
|
369
|
+
clearTimeout(assignment.acceptanceTimer);
|
|
370
|
+
assignment.acceptanceTimer = undefined;
|
|
371
|
+
}
|
|
372
|
+
const readded = undispatchedInbox.tryAdd(assignment.message);
|
|
373
|
+
if (!readded) {
|
|
374
|
+
logger.error("runtime_assignment_reinsert_failed_at_capacity", {
|
|
375
|
+
undispatched_id: assignment.context.undispatchedId,
|
|
376
|
+
source_message_id: assignment.context.sourceMessageId,
|
|
377
|
+
target_endpoint_id: assignment.context.targetRef.projection_endpoint_id,
|
|
378
|
+
inbox_size: undispatchedInbox.size(),
|
|
379
|
+
inbox_capacity: undispatchedInbox.capacity(),
|
|
380
|
+
reason,
|
|
381
|
+
});
|
|
382
|
+
scheduleAcceptanceTimeout(key);
|
|
383
|
+
return false;
|
|
384
|
+
}
|
|
385
|
+
forgetRuntimeAssignment(key);
|
|
386
|
+
return true;
|
|
387
|
+
};
|
|
330
388
|
const emitReplyEmittedWithRetry = (assignmentKey, event, attempt = 0) => {
|
|
331
389
|
const assignment = runtimeAssignments.get(assignmentKey);
|
|
332
390
|
if (!assignment)
|
|
@@ -351,8 +409,10 @@ export async function startBrokerDaemon(opts) {
|
|
|
351
409
|
terminal: outcome.terminal,
|
|
352
410
|
detail: outcome.detail,
|
|
353
411
|
});
|
|
354
|
-
if (outcome.terminal)
|
|
412
|
+
if (outcome.terminal) {
|
|
413
|
+
forgetRuntimeAssignment(assignmentKey);
|
|
355
414
|
return;
|
|
415
|
+
}
|
|
356
416
|
const delay = Math.min(RUNTIME_PROCESSING_RETRY_INITIAL_MS * 2 ** attempt, RUNTIME_PROCESSING_RETRY_MAX_MS);
|
|
357
417
|
const timer = setTimeout(() => {
|
|
358
418
|
emitReplyEmittedWithRetry(assignmentKey, event, attempt + 1);
|
|
@@ -380,6 +440,9 @@ export async function startBrokerDaemon(opts) {
|
|
|
380
440
|
terminal: outcome.terminal,
|
|
381
441
|
detail: outcome.detail,
|
|
382
442
|
});
|
|
443
|
+
if (outcome.terminal) {
|
|
444
|
+
forgetRuntimeAssignment(key);
|
|
445
|
+
}
|
|
383
446
|
}
|
|
384
447
|
}
|
|
385
448
|
for (const endpointId of endpointIds) {
|
|
@@ -668,13 +731,31 @@ export async function startBrokerDaemon(opts) {
|
|
|
668
731
|
detail: `target endpoint not found: ${targetEndpointId}`,
|
|
669
732
|
};
|
|
670
733
|
}
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
734
|
+
let targetRef = event.target_ref;
|
|
735
|
+
if (!targetRef) {
|
|
736
|
+
if (target.background_exchange_mode === "resident_endpoint") {
|
|
737
|
+
targetRef = {
|
|
738
|
+
kind: "projection_endpoint",
|
|
739
|
+
projection_endpoint_id: targetEndpointId,
|
|
740
|
+
background_exchange_mode: "resident_endpoint",
|
|
741
|
+
};
|
|
742
|
+
}
|
|
743
|
+
else if (target.background_exchange_mode === "adapter_managed_turn" &&
|
|
744
|
+
target.runtime_session_id) {
|
|
745
|
+
targetRef = {
|
|
746
|
+
kind: "projection_endpoint",
|
|
747
|
+
projection_endpoint_id: targetEndpointId,
|
|
748
|
+
runtime_session_id: target.runtime_session_id,
|
|
749
|
+
background_exchange_mode: "adapter_managed_turn",
|
|
750
|
+
};
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
if (!targetRef ||
|
|
754
|
+
!target.runtime_capabilities?.includes("background_exchange_v1") ||
|
|
755
|
+
target.background_exchange_mode !==
|
|
756
|
+
targetRef.background_exchange_mode ||
|
|
757
|
+
(targetRef.background_exchange_mode === "adapter_managed_turn" &&
|
|
758
|
+
target.runtime_session_id !== targetRef.runtime_session_id)) {
|
|
678
759
|
undispatchedInbox.tryAdd(taken);
|
|
679
760
|
return {
|
|
680
761
|
ok: false,
|
|
@@ -726,10 +807,12 @@ export async function startBrokerDaemon(opts) {
|
|
|
726
807
|
message: taken,
|
|
727
808
|
accepted: false,
|
|
728
809
|
assignedAt,
|
|
810
|
+
lastStateSequence: processingEvent.state_sequence,
|
|
729
811
|
};
|
|
730
812
|
storedAssignment.context = runtimeAssignment;
|
|
731
813
|
storedAssignment.message = taken;
|
|
732
814
|
storedAssignment.assignedAt = assignedAt;
|
|
815
|
+
storedAssignment.lastStateSequence = Math.max(storedAssignment.lastStateSequence, processingEvent.state_sequence);
|
|
733
816
|
runtimeAssignments.set(assignmentKey, storedAssignment);
|
|
734
817
|
scheduleAcceptanceTimeout(assignmentKey);
|
|
735
818
|
rememberRuntimeAssignmentCorrelation(target.endpoint_id, taken.metadata.correlation_id, assignmentKey);
|
|
@@ -883,6 +966,7 @@ export async function startBrokerDaemon(opts) {
|
|
|
883
966
|
const runtimeCapabilities = runtimeCapabilitiesSet.size > 0
|
|
884
967
|
? Array.from(runtimeCapabilitiesSet)
|
|
885
968
|
: undefined;
|
|
969
|
+
const runtimeSessionId = body.runtime_session_id?.trim() || undefined;
|
|
886
970
|
const apiResp = await apiPort.register({
|
|
887
971
|
runtime_kind: body.kind,
|
|
888
972
|
endpoint_nonce: randomUUID(),
|
|
@@ -895,6 +979,7 @@ export async function startBrokerDaemon(opts) {
|
|
|
895
979
|
task_hint: body.task_hint,
|
|
896
980
|
runtime_capabilities: runtimeCapabilities,
|
|
897
981
|
execution_surface: body.execution_surface,
|
|
982
|
+
runtime_session_id: runtimeSessionId,
|
|
898
983
|
background_exchange_mode: body.background_exchange_mode,
|
|
899
984
|
});
|
|
900
985
|
registry.register({
|
|
@@ -904,6 +989,7 @@ export async function startBrokerDaemon(opts) {
|
|
|
904
989
|
ipc_ws: boundWs,
|
|
905
990
|
runtime_capabilities: runtimeCapabilities,
|
|
906
991
|
execution_surface: body.execution_surface,
|
|
992
|
+
runtime_session_id: runtimeSessionId,
|
|
907
993
|
background_exchange_mode: body.background_exchange_mode,
|
|
908
994
|
display_metadata: {
|
|
909
995
|
session_name: body.session_name,
|
|
@@ -1014,35 +1100,188 @@ export async function startBrokerDaemon(opts) {
|
|
|
1014
1100
|
}
|
|
1015
1101
|
catch (err) {
|
|
1016
1102
|
const msg = err instanceof Error ? err.message : String(err);
|
|
1017
|
-
if (
|
|
1103
|
+
if (err instanceof ConnectorClientUnavailableError) {
|
|
1018
1104
|
throw new BrokerHttpError(503, "connector_unavailable", msg, {
|
|
1019
1105
|
retryable: true,
|
|
1020
1106
|
});
|
|
1021
1107
|
}
|
|
1108
|
+
if (err instanceof ConnectorSendAckTimeoutError) {
|
|
1109
|
+
throw new BrokerHttpError(503, "connector_send_outcome_unknown", msg, { retryable: false });
|
|
1110
|
+
}
|
|
1022
1111
|
throw err;
|
|
1023
1112
|
}
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1113
|
+
return { messageId: ack.messageId, status: ack.status };
|
|
1114
|
+
},
|
|
1115
|
+
async sendRuntimeAssignmentReply(body) {
|
|
1116
|
+
const entry = registry.get(body.endpoint_id);
|
|
1117
|
+
if (!entry) {
|
|
1118
|
+
throw new BrokerHttpError(404, "unknown_endpoint", `unknown endpoint_id: ${body.endpoint_id}`);
|
|
1119
|
+
}
|
|
1120
|
+
if (entry.plugin_pid !== body.plugin_pid) {
|
|
1121
|
+
throw new BrokerHttpError(403, "endpoint_pid_mismatch", "plugin_pid does not own endpoint_id");
|
|
1122
|
+
}
|
|
1123
|
+
if (entry.state !== "active") {
|
|
1124
|
+
throw new BrokerHttpError(409, "endpoint_not_active", `endpoint ${body.endpoint_id} is ${entry.state}; assignment reply is only allowed from Active`);
|
|
1125
|
+
}
|
|
1126
|
+
if (!body.reply_request_id) {
|
|
1127
|
+
throw new BrokerHttpError(400, "reply_request_id_required", "reply_request_id is required for assignment replies");
|
|
1128
|
+
}
|
|
1129
|
+
const assignmentKey = runtimeAssignmentKey(body.source_message_id, body.assignment_id);
|
|
1130
|
+
const replyKey = runtimeAssignmentReplyKey(body.source_message_id, body.assignment_id, body.reply_request_id);
|
|
1131
|
+
pruneRuntimeAssignmentReplyRecords();
|
|
1132
|
+
const requestFingerprint = runtimeAssignmentReplyFingerprint(body.content, body.contentType);
|
|
1133
|
+
const assignment = runtimeAssignments.get(assignmentKey);
|
|
1134
|
+
const existingRecord = runtimeAssignmentReplyRecords.get(replyKey);
|
|
1135
|
+
const inFlight = runtimeAssignmentReplyInFlight.get(replyKey);
|
|
1136
|
+
if (assignment) {
|
|
1137
|
+
if (assignment.context.targetRef.projection_endpoint_id !==
|
|
1138
|
+
body.endpoint_id) {
|
|
1139
|
+
throw new BrokerHttpError(403, "runtime_assignment_target_mismatch", "endpoint_id does not match the assigned target");
|
|
1140
|
+
}
|
|
1141
|
+
if (!assignment.accepted) {
|
|
1142
|
+
throw new BrokerHttpError(409, "runtime_assignment_not_accepted", "assignment replies require adapter_accepted first");
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
else if (existingRecord || inFlight) {
|
|
1146
|
+
const owner = existingRecord ?? inFlight;
|
|
1147
|
+
if (owner?.endpointId !== body.endpoint_id ||
|
|
1148
|
+
owner.pluginPid !== body.plugin_pid) {
|
|
1149
|
+
throw new BrokerHttpError(403, "runtime_assignment_target_mismatch", "endpoint_id does not match the assigned target");
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
else {
|
|
1153
|
+
throw new BrokerHttpError(409, "runtime_assignment_unknown", "source assignment is not known to this broker");
|
|
1154
|
+
}
|
|
1155
|
+
if (existingRecord &&
|
|
1156
|
+
existingRecord.requestFingerprint !== requestFingerprint) {
|
|
1157
|
+
throw new BrokerHttpError(409, "runtime_assignment_reply_idempotency_conflict", "reply_request_id was already used with different reply content");
|
|
1158
|
+
}
|
|
1159
|
+
if (existingRecord?.outcomeUnknown) {
|
|
1160
|
+
throw new BrokerHttpError(503, "connector_send_outcome_unknown", existingRecord.outcomeUnknown.message, { retryable: false });
|
|
1161
|
+
}
|
|
1162
|
+
if (existingRecord?.result)
|
|
1163
|
+
return existingRecord.result;
|
|
1164
|
+
if (inFlight) {
|
|
1165
|
+
if (inFlight.requestFingerprint !== requestFingerprint) {
|
|
1166
|
+
throw new BrokerHttpError(409, "runtime_assignment_reply_idempotency_conflict", "reply_request_id was already used with different reply content");
|
|
1167
|
+
}
|
|
1168
|
+
return inFlight.task;
|
|
1169
|
+
}
|
|
1170
|
+
if (!assignment) {
|
|
1171
|
+
throw new BrokerHttpError(409, "runtime_assignment_unknown", "source assignment is not known to this broker");
|
|
1172
|
+
}
|
|
1173
|
+
const task = (async () => {
|
|
1174
|
+
let record = runtimeAssignmentReplyRecords.get(replyKey);
|
|
1175
|
+
if (!record) {
|
|
1176
|
+
const replyRequestedSequence = assignment.lastStateSequence + 1;
|
|
1177
|
+
const replyRequestedEvent = {
|
|
1031
1178
|
type: "runtime_processing_state",
|
|
1032
1179
|
version: 1,
|
|
1033
1180
|
source_message_id: assignment.context.sourceMessageId,
|
|
1034
1181
|
assignment_id: assignment.context.assignmentId,
|
|
1035
|
-
state_event_id: `${assignment.context.assignmentId}:
|
|
1036
|
-
state_sequence:
|
|
1182
|
+
state_event_id: `${assignment.context.assignmentId}:reply_requested:${body.reply_request_id}`,
|
|
1183
|
+
state_sequence: replyRequestedSequence,
|
|
1037
1184
|
target_ref: assignment.context.targetRef,
|
|
1038
|
-
state: "
|
|
1185
|
+
state: "reply_requested",
|
|
1039
1186
|
occurred_at: Date.now(),
|
|
1040
1187
|
undispatched_id: assignment.context.undispatchedId,
|
|
1041
|
-
|
|
1042
|
-
}
|
|
1188
|
+
reply_request_id: body.reply_request_id,
|
|
1189
|
+
};
|
|
1190
|
+
const replyRequested = await emitRuntimeProcessingState(replyRequestedEvent);
|
|
1191
|
+
if (!replyRequested.ok) {
|
|
1192
|
+
if (replyRequested.terminal && replyRequested.status === 403) {
|
|
1193
|
+
logger.warn("runtime_reply_requested_projection_skipped", {
|
|
1194
|
+
source_message_id: assignment.context.sourceMessageId,
|
|
1195
|
+
assignment_id: assignment.context.assignmentId,
|
|
1196
|
+
status: replyRequested.status,
|
|
1197
|
+
detail: replyRequested.detail,
|
|
1198
|
+
});
|
|
1199
|
+
}
|
|
1200
|
+
else {
|
|
1201
|
+
throw new BrokerHttpError(replyRequested.terminal ? 409 : 503, "runtime_reply_request_rejected", replyRequested.detail ??
|
|
1202
|
+
"runtime reply request was not accepted");
|
|
1203
|
+
}
|
|
1204
|
+
}
|
|
1205
|
+
record = {
|
|
1206
|
+
replyRequestedEvent,
|
|
1207
|
+
endpointId: body.endpoint_id,
|
|
1208
|
+
pluginPid: body.plugin_pid,
|
|
1209
|
+
requestFingerprint,
|
|
1210
|
+
wireMessageId: randomUUID(),
|
|
1211
|
+
expiresAt: Date.now() + RUNTIME_ASSIGNMENT_REPLY_RECORD_TTL_MS,
|
|
1212
|
+
};
|
|
1213
|
+
runtimeAssignmentReplyRecords.set(replyKey, record);
|
|
1214
|
+
assignment.lastStateSequence = replyRequestedSequence;
|
|
1215
|
+
}
|
|
1216
|
+
const correlationId = typeof assignment.context.replyCorrelationId === "string" &&
|
|
1217
|
+
assignment.context.replyCorrelationId.length > 0
|
|
1218
|
+
? assignment.context.replyCorrelationId
|
|
1219
|
+
: randomUUID();
|
|
1220
|
+
entry.correlation_ring.add(correlationId);
|
|
1221
|
+
const remoteMessageId = assignment.message.metadata.message_id;
|
|
1222
|
+
const metadata = {
|
|
1223
|
+
message_id: record.wireMessageId,
|
|
1224
|
+
...(typeof remoteMessageId === "string" &&
|
|
1225
|
+
remoteMessageId.length > 0 && { in_reply_to: remoteMessageId }),
|
|
1226
|
+
correlation_id: correlationId,
|
|
1227
|
+
source_endpoint_id: body.endpoint_id,
|
|
1228
|
+
require_live: false,
|
|
1229
|
+
};
|
|
1230
|
+
let ack;
|
|
1231
|
+
try {
|
|
1232
|
+
ack = await connector.send(assignment.message.sender_address, body.content, body.contentType ?? "text", metadata);
|
|
1043
1233
|
}
|
|
1234
|
+
catch (err) {
|
|
1235
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
1236
|
+
if (err instanceof ConnectorClientUnavailableError) {
|
|
1237
|
+
throw new BrokerHttpError(503, "connector_unavailable", msg, {
|
|
1238
|
+
retryable: true,
|
|
1239
|
+
});
|
|
1240
|
+
}
|
|
1241
|
+
if (err instanceof ConnectorSendAckTimeoutError) {
|
|
1242
|
+
record.outcomeUnknown = { message: msg };
|
|
1243
|
+
record.expiresAt =
|
|
1244
|
+
Date.now() + RUNTIME_ASSIGNMENT_REPLY_RECORD_TTL_MS;
|
|
1245
|
+
throw new BrokerHttpError(503, "connector_send_outcome_unknown", msg, { retryable: false });
|
|
1246
|
+
}
|
|
1247
|
+
throw err;
|
|
1248
|
+
}
|
|
1249
|
+
const result = {
|
|
1250
|
+
messageId: record.wireMessageId,
|
|
1251
|
+
status: ack.status,
|
|
1252
|
+
};
|
|
1253
|
+
record.result = result;
|
|
1254
|
+
record.expiresAt = Date.now() + RUNTIME_ASSIGNMENT_REPLY_RECORD_TTL_MS;
|
|
1255
|
+
const replyEmittedSequence = assignment.lastStateSequence + 1;
|
|
1256
|
+
emitReplyEmittedWithRetry(assignmentKey, {
|
|
1257
|
+
type: "runtime_processing_state",
|
|
1258
|
+
version: 1,
|
|
1259
|
+
source_message_id: assignment.context.sourceMessageId,
|
|
1260
|
+
assignment_id: assignment.context.assignmentId,
|
|
1261
|
+
state_event_id: `${assignment.context.assignmentId}:reply_emitted:${body.reply_request_id}`,
|
|
1262
|
+
state_sequence: replyEmittedSequence,
|
|
1263
|
+
target_ref: assignment.context.targetRef,
|
|
1264
|
+
state: "reply_emitted",
|
|
1265
|
+
occurred_at: Date.now(),
|
|
1266
|
+
undispatched_id: assignment.context.undispatchedId,
|
|
1267
|
+
reply_request_id: body.reply_request_id,
|
|
1268
|
+
outbound_message_id: record.wireMessageId,
|
|
1269
|
+
});
|
|
1270
|
+
assignment.lastStateSequence = replyEmittedSequence;
|
|
1271
|
+
return result;
|
|
1272
|
+
})();
|
|
1273
|
+
runtimeAssignmentReplyInFlight.set(replyKey, {
|
|
1274
|
+
endpointId: body.endpoint_id,
|
|
1275
|
+
pluginPid: body.plugin_pid,
|
|
1276
|
+
requestFingerprint,
|
|
1277
|
+
task,
|
|
1278
|
+
});
|
|
1279
|
+
try {
|
|
1280
|
+
return await task;
|
|
1281
|
+
}
|
|
1282
|
+
finally {
|
|
1283
|
+
runtimeAssignmentReplyInFlight.delete(replyKey);
|
|
1044
1284
|
}
|
|
1045
|
-
return { messageId: ack.messageId, status: ack.status };
|
|
1046
1285
|
},
|
|
1047
1286
|
async reportProcessingState(body) {
|
|
1048
1287
|
const entry = registry.get(body.endpoint_id);
|
|
@@ -1060,8 +1299,8 @@ export async function startBrokerDaemon(opts) {
|
|
|
1060
1299
|
if (assignment.context.targetRef.projection_endpoint_id !== body.endpoint_id) {
|
|
1061
1300
|
throw new BrokerHttpError(403, "runtime_assignment_target_mismatch", "endpoint_id does not match the assigned target");
|
|
1062
1301
|
}
|
|
1063
|
-
if (body.state === "reply_emitted") {
|
|
1064
|
-
throw new BrokerHttpError(403,
|
|
1302
|
+
if (body.state === "reply_requested" || body.state === "reply_emitted") {
|
|
1303
|
+
throw new BrokerHttpError(403, `${body.state}_broker_owned`, `${body.state} is emitted by the broker assignment reply path`);
|
|
1065
1304
|
}
|
|
1066
1305
|
const event = {
|
|
1067
1306
|
type: "runtime_processing_state",
|
|
@@ -1090,6 +1329,7 @@ export async function startBrokerDaemon(opts) {
|
|
|
1090
1329
|
if (!outcome.ok) {
|
|
1091
1330
|
throw new BrokerHttpError(outcome.terminal ? 409 : 503, "runtime_processing_state_rejected", outcome.detail ?? "runtime processing state was not accepted");
|
|
1092
1331
|
}
|
|
1332
|
+
assignment.lastStateSequence = Math.max(assignment.lastStateSequence, body.state_sequence);
|
|
1093
1333
|
if (body.state === "adapter_accepted") {
|
|
1094
1334
|
assignment.accepted = true;
|
|
1095
1335
|
if (assignment.acceptanceTimer) {
|
|
@@ -1097,6 +1337,21 @@ export async function startBrokerDaemon(opts) {
|
|
|
1097
1337
|
assignment.acceptanceTimer = undefined;
|
|
1098
1338
|
}
|
|
1099
1339
|
}
|
|
1340
|
+
if (!assignment.accepted &&
|
|
1341
|
+
(body.state === "processing_failed" ||
|
|
1342
|
+
body.state === "waiting_for_runtime_capability" ||
|
|
1343
|
+
body.state === "target_lost_before_acceptance")) {
|
|
1344
|
+
if (body.state === "processing_failed" && body.retryable !== true) {
|
|
1345
|
+
if (assignment.acceptanceTimer) {
|
|
1346
|
+
clearTimeout(assignment.acceptanceTimer);
|
|
1347
|
+
assignment.acceptanceTimer = undefined;
|
|
1348
|
+
}
|
|
1349
|
+
forgetRuntimeAssignment(key);
|
|
1350
|
+
return;
|
|
1351
|
+
}
|
|
1352
|
+
restorePendingAssignmentBeforeAcceptance(key, assignment, body.state);
|
|
1353
|
+
return;
|
|
1354
|
+
}
|
|
1100
1355
|
if (body.state === "processing_failed" || body.state === "expired") {
|
|
1101
1356
|
forgetRuntimeAssignment(key);
|
|
1102
1357
|
}
|
|
@@ -1175,11 +1430,7 @@ export async function startBrokerDaemon(opts) {
|
|
|
1175
1430
|
emitted_at: Date.now(),
|
|
1176
1431
|
undispatched_id,
|
|
1177
1432
|
source_message_id: pending?.source_message_id ?? undispatched_id,
|
|
1178
|
-
target_ref:
|
|
1179
|
-
kind: "projection_endpoint",
|
|
1180
|
-
projection_endpoint_id: target_endpoint_id,
|
|
1181
|
-
background_exchange_mode: normalizeBackgroundExchangeMode(target?.background_exchange_mode),
|
|
1182
|
-
},
|
|
1433
|
+
target_ref: buildLocalDispatchTargetRef(target_endpoint_id, target),
|
|
1183
1434
|
delivery_intent: "external_handoff",
|
|
1184
1435
|
});
|
|
1185
1436
|
if (!result.ok) {
|
|
@@ -1386,8 +1637,8 @@ export async function startBrokerDaemon(opts) {
|
|
|
1386
1637
|
? "active_endpoint"
|
|
1387
1638
|
: "reconnecting_endpoint",
|
|
1388
1639
|
routed_at: Date.now(),
|
|
1389
|
-
}, { queueOnTransientFailure:
|
|
1390
|
-
if (!posted
|
|
1640
|
+
}, { queueOnTransientFailure: false });
|
|
1641
|
+
if (!posted)
|
|
1391
1642
|
return false;
|
|
1392
1643
|
}
|
|
1393
1644
|
return markDeliverySeqAccepted(payload.seq);
|
|
@@ -13,12 +13,16 @@ export interface DispatchUndispatchedEvent extends ControlEventBase {
|
|
|
13
13
|
target_endpoint_id?: string;
|
|
14
14
|
}
|
|
15
15
|
export type BackgroundExchangeMode = "resident_endpoint" | "adapter_managed_turn";
|
|
16
|
-
export
|
|
16
|
+
export type RuntimeWorkTargetRef = {
|
|
17
17
|
kind: "projection_endpoint";
|
|
18
18
|
projection_endpoint_id: string;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
background_exchange_mode: "resident_endpoint";
|
|
20
|
+
} | {
|
|
21
|
+
kind: "projection_endpoint";
|
|
22
|
+
projection_endpoint_id: string;
|
|
23
|
+
runtime_session_id: string;
|
|
24
|
+
background_exchange_mode: "adapter_managed_turn";
|
|
25
|
+
};
|
|
22
26
|
export interface SpawnRequestEvent extends ControlEventBase {
|
|
23
27
|
type: "spawn_request";
|
|
24
28
|
prompt: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-event-types.d.ts","sourceRoot":"","sources":["../../src/broker/control-event-types.ts"],"names":[],"mappings":"AAwCA,MAAM,WAAW,gBAAgB;IAI/B,OAAO,EAAE,CAAC,CAAC;IAWX,eAAe,EAAE,MAAM,CAAC;IAKxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,MAAM,YAAY,GACpB,yBAAyB,GACzB,iBAAiB,GACjB,oBAAoB,CAAC;AAGzB,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IACjE,IAAI,EAAE,uBAAuB,CAAC;IAE9B,eAAe,EAAE,MAAM,CAAC;IAExB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,UAAU,EAAE,oBAAoB,CAAC;IAEjC,eAAe,EAAE,kBAAkB,CAAC;IAKpC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,sBAAsB,GAC9B,mBAAmB,GACnB,sBAAsB,CAAC;AAE3B,MAAM,
|
|
1
|
+
{"version":3,"file":"control-event-types.d.ts","sourceRoot":"","sources":["../../src/broker/control-event-types.ts"],"names":[],"mappings":"AAwCA,MAAM,WAAW,gBAAgB;IAI/B,OAAO,EAAE,CAAC,CAAC;IAWX,eAAe,EAAE,MAAM,CAAC;IAKxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,MAAM,YAAY,GACpB,yBAAyB,GACzB,iBAAiB,GACjB,oBAAoB,CAAC;AAGzB,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IACjE,IAAI,EAAE,uBAAuB,CAAC;IAE9B,eAAe,EAAE,MAAM,CAAC;IAExB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,UAAU,EAAE,oBAAoB,CAAC;IAEjC,eAAe,EAAE,kBAAkB,CAAC;IAKpC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,sBAAsB,GAC9B,mBAAmB,GACnB,sBAAsB,CAAC;AAE3B,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;AAGN,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACzD,IAAI,EAAE,eAAe,CAAC;IAEtB,MAAM,EAAE,MAAM,CAAC;IAMf,YAAY,EAAE,aAAa,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;IAG9D,MAAM,EAAE,uBAAuB,CAAC;CACjC;AAGD,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D,IAAI,EAAE,kBAAkB,CAAC;IAEzB,WAAW,EAAE,MAAM,CAAC;IAEpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAwBD,MAAM,WAAW,UAAU;IAEzB,eAAe,EAAE,MAAM,CAAC;IAExB,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;IAE1C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -19,6 +19,7 @@ export interface BrokerEndpointEntry {
|
|
|
19
19
|
grace_deadline?: Date;
|
|
20
20
|
runtime_capabilities?: RuntimeEndpointCapability[];
|
|
21
21
|
execution_surface?: EndpointExecutionSurface;
|
|
22
|
+
runtime_session_id?: string;
|
|
22
23
|
background_exchange_mode?: EndpointBackgroundExchangeMode;
|
|
23
24
|
display_metadata: DisplayMetadata;
|
|
24
25
|
correlation_ring: CorrelationRingBuffer;
|
|
@@ -30,6 +31,7 @@ export interface RegisterArgs {
|
|
|
30
31
|
ipc_ws: WebSocket;
|
|
31
32
|
runtime_capabilities?: RuntimeEndpointCapability[];
|
|
32
33
|
execution_surface?: EndpointExecutionSurface;
|
|
34
|
+
runtime_session_id?: string;
|
|
33
35
|
background_exchange_mode?: EndpointBackgroundExchangeMode;
|
|
34
36
|
display_metadata: DisplayMetadata;
|
|
35
37
|
}
|
|
@@ -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,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,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,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;IAsBjD,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"}
|
|
@@ -14,6 +14,7 @@ export class EndpointRegistry {
|
|
|
14
14
|
state_since: new Date(),
|
|
15
15
|
runtime_capabilities: args.runtime_capabilities,
|
|
16
16
|
execution_surface: args.execution_surface,
|
|
17
|
+
runtime_session_id: args.runtime_session_id,
|
|
17
18
|
background_exchange_mode: args.background_exchange_mode,
|
|
18
19
|
display_metadata: args.display_metadata,
|
|
19
20
|
correlation_ring: new CorrelationRingBuffer(),
|
|
@@ -8,6 +8,7 @@ export interface IPCServerHandlers {
|
|
|
8
8
|
heartbeatEndpoint(endpoint_id: string): Promise<void>;
|
|
9
9
|
unregisterEndpoint(endpoint_id: string): Promise<void>;
|
|
10
10
|
send(body: SendBody): Promise<SendResponse>;
|
|
11
|
+
sendRuntimeAssignmentReply(body: RuntimeAssignmentReplyBody): Promise<SendResponse>;
|
|
11
12
|
reportProcessingState(body: ProcessingStateBody): Promise<void>;
|
|
12
13
|
reattachEndpoint(endpoint_id: string, plugin_pid: number, ipcWs: WebSocket): Promise<ReattachResponse>;
|
|
13
14
|
listUndispatched(): Promise<UndispatchedListResponse>;
|
|
@@ -23,11 +24,14 @@ export interface RegisterEndpointBody {
|
|
|
23
24
|
agent_id: string;
|
|
24
25
|
plugin_pid: number;
|
|
25
26
|
kind: string;
|
|
27
|
+
client_kind?: string;
|
|
28
|
+
client_version?: string;
|
|
26
29
|
started_at?: string;
|
|
27
30
|
workspace?: string;
|
|
28
31
|
tracking_ref?: string;
|
|
29
32
|
session_name?: string;
|
|
30
33
|
task_hint?: string;
|
|
34
|
+
runtime_session_id?: string;
|
|
31
35
|
runtime_capabilities?: RuntimeEndpointCapability[];
|
|
32
36
|
execution_surface?: EndpointExecutionSurface;
|
|
33
37
|
background_exchange_mode?: EndpointBackgroundExchangeMode;
|
|
@@ -53,6 +57,15 @@ export interface SendResponse {
|
|
|
53
57
|
messageId: string;
|
|
54
58
|
status: string;
|
|
55
59
|
}
|
|
60
|
+
export interface RuntimeAssignmentReplyBody {
|
|
61
|
+
endpoint_id: string;
|
|
62
|
+
plugin_pid: number;
|
|
63
|
+
source_message_id: string;
|
|
64
|
+
assignment_id: string;
|
|
65
|
+
reply_request_id: string;
|
|
66
|
+
content: string;
|
|
67
|
+
contentType?: string;
|
|
68
|
+
}
|
|
56
69
|
export interface ProcessingStateBody {
|
|
57
70
|
endpoint_id: string;
|
|
58
71
|
plugin_pid: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipc-server.d.ts","sourceRoot":"","sources":["../../src/broker/ipc-server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ipc-server.d.ts","sourceRoot":"","sources":["../../src/broker/ipc-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -135,6 +135,12 @@ async function routeHttp(req, res, bearerToken, handlers, logger, getNetworkPres
|
|
|
135
135
|
sendJson(res, 200, out);
|
|
136
136
|
return;
|
|
137
137
|
}
|
|
138
|
+
if (method === "POST" && url === "/v1/runtime/assignment-reply") {
|
|
139
|
+
const body = await readJson(req);
|
|
140
|
+
const out = await handlers.sendRuntimeAssignmentReply(body);
|
|
141
|
+
sendJson(res, 200, out);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
138
144
|
if (method === "POST" && url === "/v1/runtime/processing-state") {
|
|
139
145
|
const body = await readJson(req);
|
|
140
146
|
await handlers.reportProcessingState(body);
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
export type BackgroundExchangeMode = "resident_endpoint" | "adapter_managed_turn";
|
|
2
|
-
export
|
|
2
|
+
export type RuntimeWorkTargetRef = {
|
|
3
3
|
kind: "projection_endpoint";
|
|
4
4
|
projection_endpoint_id: string;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
background_exchange_mode: "resident_endpoint";
|
|
6
|
+
} | {
|
|
7
|
+
kind: "projection_endpoint";
|
|
8
|
+
projection_endpoint_id: string;
|
|
9
|
+
runtime_session_id: string;
|
|
10
|
+
background_exchange_mode: "adapter_managed_turn";
|
|
11
|
+
};
|
|
8
12
|
export type RuntimeProcessingState = "assigned_to_runtime_target" | "adapter_accepted" | "processing_started" | "reply_requested" | "reply_emitted" | "processing_failed" | "waiting_for_runtime_capability" | "target_lost_before_acceptance" | "processing_interrupted" | "expired";
|
|
9
13
|
export interface RuntimeProcessingStateEvent {
|
|
10
14
|
type: "runtime_processing_state";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-processing-state-event-types.d.ts","sourceRoot":"","sources":["../../src/broker/runtime-processing-state-event-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAC9B,mBAAmB,GACnB,sBAAsB,CAAC;AAE3B,MAAM,
|
|
1
|
+
{"version":3,"file":"runtime-processing-state-event-types.d.ts","sourceRoot":"","sources":["../../src/broker/runtime-processing-state-event-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAC9B,mBAAmB,GACnB,sBAAsB,CAAC;AAE3B,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;AAEN,MAAM,MAAM,sBAAsB,GAC9B,4BAA4B,GAC5B,kBAAkB,GAClB,oBAAoB,GACpB,iBAAiB,GACjB,eAAe,GACf,mBAAmB,GACnB,gCAAgC,GAChC,+BAA+B,GAC/B,wBAAwB,GACxB,SAAS,CAAC;AAEd,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,0BAA0B,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC;IACX,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,oBAAoB,CAAC;IACjC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B"}
|
|
@@ -4,6 +4,7 @@ export interface IpcCapabilities {
|
|
|
4
4
|
endpoint_metadata_v1?: boolean;
|
|
5
5
|
remote_spawn_v1?: boolean;
|
|
6
6
|
undispatched_inbox_v1?: boolean;
|
|
7
|
+
runtime_assignment_reply_v1?: boolean;
|
|
7
8
|
}
|
|
8
9
|
export declare const SERVER_CAPABILITIES: Readonly<IpcCapabilities>;
|
|
9
10
|
export interface InitializeRequestBody {
|
|
@@ -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;
|
|
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;CACvC;AAGD,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,eAAe,CAKxD,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"}
|
|
@@ -4,6 +4,7 @@ export const SERVER_CAPABILITIES = Object.freeze({
|
|
|
4
4
|
endpoint_metadata_v1: true,
|
|
5
5
|
remote_spawn_v1: true,
|
|
6
6
|
undispatched_inbox_v1: false,
|
|
7
|
+
runtime_assignment_reply_v1: true,
|
|
7
8
|
});
|
|
8
9
|
export function handleInitialize(req, ctx) {
|
|
9
10
|
if (typeof req.client_protocol_version !== "string") {
|
|
@@ -1,13 +1,18 @@
|
|
|
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 InitializeResponseBody } from "../broker/version-handshake.js";
|
|
4
|
+
import { type InitializeResponseBody, type IpcCapabilities } from "../broker/version-handshake.js";
|
|
5
5
|
import type { EndpointBackgroundExchangeMode, EndpointExecutionSurface, RuntimeEndpointCapability } from "../runtime-endpoint-client.js";
|
|
6
6
|
export declare class ConnectorUnavailableError extends Error {
|
|
7
7
|
readonly code: "connector_unavailable";
|
|
8
8
|
readonly retryable: true;
|
|
9
9
|
constructor(message: string);
|
|
10
10
|
}
|
|
11
|
+
export declare class ConnectorSendOutcomeUnknownError extends Error {
|
|
12
|
+
readonly code: "connector_send_outcome_unknown";
|
|
13
|
+
readonly retryable: false;
|
|
14
|
+
constructor(message: string);
|
|
15
|
+
}
|
|
11
16
|
export interface BrokerClientDiscoverOptions {
|
|
12
17
|
accountId: string;
|
|
13
18
|
runtimeToken: string;
|
|
@@ -29,6 +34,7 @@ export interface RegisterEndpointArgs {
|
|
|
29
34
|
workspace?: string;
|
|
30
35
|
trackingRef?: string;
|
|
31
36
|
taskHint?: string;
|
|
37
|
+
runtimeSessionId?: string;
|
|
32
38
|
runtimeCapabilities?: RuntimeEndpointCapability[];
|
|
33
39
|
executionSurface?: EndpointExecutionSurface;
|
|
34
40
|
backgroundExchangeMode?: EndpointBackgroundExchangeMode;
|
|
@@ -53,6 +59,14 @@ export interface BrokerRuntimeAssignmentContext {
|
|
|
53
59
|
deliveryIntent: "external_handoff";
|
|
54
60
|
replyCorrelationId?: string;
|
|
55
61
|
}
|
|
62
|
+
export interface SendRuntimeAssignmentReplyArgs {
|
|
63
|
+
endpointId: string;
|
|
64
|
+
sourceMessageId: string;
|
|
65
|
+
assignmentId: string;
|
|
66
|
+
replyRequestId: string;
|
|
67
|
+
content: string;
|
|
68
|
+
contentType?: string;
|
|
69
|
+
}
|
|
56
70
|
export interface ReportRuntimeProcessingStateArgs {
|
|
57
71
|
endpointId: string;
|
|
58
72
|
sourceMessageId: string;
|
|
@@ -80,18 +94,26 @@ export declare class BrokerClient extends EventEmitter {
|
|
|
80
94
|
private pluginPid;
|
|
81
95
|
private _sessionId;
|
|
82
96
|
private _networkPresence;
|
|
97
|
+
private _serverCapabilities;
|
|
98
|
+
private _clientKind;
|
|
99
|
+
private _clientVersion;
|
|
83
100
|
private constructor();
|
|
84
101
|
static discover(opts: BrokerClientDiscoverOptions): Promise<BrokerClient>;
|
|
85
102
|
get spawnedNew(): boolean;
|
|
86
103
|
get ipcUrl(): string;
|
|
87
104
|
get sessionId(): string | null;
|
|
88
105
|
get networkPresence(): NetworkPresence | null;
|
|
106
|
+
get serverCapabilities(): Readonly<IpcCapabilities>;
|
|
89
107
|
connect(opts: BrokerClientConnectOptions): Promise<InitializeResponseBody>;
|
|
90
108
|
registerEndpoint(args: RegisterEndpointArgs): Promise<RegisterEndpointOutcome>;
|
|
91
109
|
send(endpointId: string, to: string, content: string, contentType?: string, metadata?: Record<string, unknown>): Promise<{
|
|
92
110
|
messageId: string;
|
|
93
111
|
status: string;
|
|
94
112
|
}>;
|
|
113
|
+
sendRuntimeAssignmentReply(args: SendRuntimeAssignmentReplyArgs): Promise<{
|
|
114
|
+
messageId: string;
|
|
115
|
+
status: string;
|
|
116
|
+
}>;
|
|
95
117
|
reportRuntimeProcessingState(args: ReportRuntimeProcessingStateArgs): Promise<void>;
|
|
96
118
|
close(endpointId?: string): Promise<void>;
|
|
97
119
|
on<K extends keyof Events>(event: K, listener: Events[K]): this;
|
|
@@ -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,
|
|
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;CACvB;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;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,8BAA8B,CAAC;CACpD;AAED,MAAM,WAAW,8BAA8B;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,oBAAoB,CAAC;IAChC,cAAc,EAAE,kBAAkB,CAAC;IAEnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,8BAA8B;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gCAAgC;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,sBAAsB,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,KAAK,MAAM,GAAG;IACZ,gBAAgB,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAStD,QAAQ,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAC7B,CAAC;AAEF,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,UAAU,CAAuB;IAOzC,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAuB;IAE7C,OAAO;WAUM,QAAQ,CACnB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,YAAY,CAAC;IAqBxB,IAAI,UAAU,IAAI,OAAO,CAExB;IAGD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAGD,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IAWD,IAAI,eAAe,IAAI,eAAe,GAAG,IAAI,CAE5C;IAGD,IAAI,kBAAkB,IAAI,QAAQ,CAAC,eAAe,CAAC,CAElD;IAGK,OAAO,CACX,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,sBAAsB,CAAC;IA6D5B,gBAAgB,CACpB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,uBAAuB,CAAC;IA6B7B,IAAI,CACR,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,WAAW,SAAS,EACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAe3C,0BAA0B,CAC9B,IAAI,EAAE,8BAA8B,GACnC,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAiB3C,4BAA4B,CAChC,IAAI,EAAE,gCAAgC,GACrC,OAAO,CAAC,IAAI,CAAC;IAyBV,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBtC,EAAE,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAC/D,EAAE,CACT,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACrC,IAAI;IAQE,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IACjE,IAAI,CACX,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACrC,IAAI;IAQE,GAAG,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAChE,GAAG,CACV,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACrC,IAAI;IAQE,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,EAClC,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAC7B,OAAO;IACD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO;YASpD,QAAQ;IAqDtB,OAAO,CAAC,WAAW;CA+CpB"}
|
|
@@ -11,6 +11,14 @@ export class ConnectorUnavailableError extends Error {
|
|
|
11
11
|
this.name = "ConnectorUnavailableError";
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
|
+
export class ConnectorSendOutcomeUnknownError extends Error {
|
|
15
|
+
code = "connector_send_outcome_unknown";
|
|
16
|
+
retryable = false;
|
|
17
|
+
constructor(message) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.name = "ConnectorSendOutcomeUnknownError";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
14
22
|
function safeJsonParse(text) {
|
|
15
23
|
try {
|
|
16
24
|
return JSON.parse(text);
|
|
@@ -25,6 +33,9 @@ export class BrokerClient extends EventEmitter {
|
|
|
25
33
|
pluginPid = null;
|
|
26
34
|
_sessionId = null;
|
|
27
35
|
_networkPresence = null;
|
|
36
|
+
_serverCapabilities = {};
|
|
37
|
+
_clientKind = null;
|
|
38
|
+
_clientVersion = null;
|
|
28
39
|
constructor(handle) {
|
|
29
40
|
super();
|
|
30
41
|
this.handle = handle;
|
|
@@ -60,11 +71,16 @@ export class BrokerClient extends EventEmitter {
|
|
|
60
71
|
get networkPresence() {
|
|
61
72
|
return this._networkPresence;
|
|
62
73
|
}
|
|
74
|
+
get serverCapabilities() {
|
|
75
|
+
return this._serverCapabilities;
|
|
76
|
+
}
|
|
63
77
|
async connect(opts) {
|
|
64
78
|
if (this.ws) {
|
|
65
79
|
throw new Error("BrokerClient already connected");
|
|
66
80
|
}
|
|
67
81
|
this.pluginPid = opts.pluginPid;
|
|
82
|
+
this._clientKind = opts.clientKind;
|
|
83
|
+
this._clientVersion = opts.clientVersion;
|
|
68
84
|
const initRes = await this.httpJson("POST", "/v1/initialize", {
|
|
69
85
|
client_protocol_version: IPC_PROTOCOL_VERSION,
|
|
70
86
|
client_kind: opts.clientKind,
|
|
@@ -72,6 +88,7 @@ export class BrokerClient extends EventEmitter {
|
|
|
72
88
|
capabilities: { endpoint_metadata_v1: true },
|
|
73
89
|
});
|
|
74
90
|
this._sessionId = initRes.session_id;
|
|
91
|
+
this._serverCapabilities = initRes.server_capabilities;
|
|
75
92
|
this._networkPresence = initRes.network_presence;
|
|
76
93
|
const wsUrl = `${this.handle.record.ipcUrl.replace(/^http/, "ws")}/v1/stream`;
|
|
77
94
|
const ws = new WebSocket(wsUrl, {
|
|
@@ -109,10 +126,13 @@ export class BrokerClient extends EventEmitter {
|
|
|
109
126
|
agent_id: args.agentId,
|
|
110
127
|
plugin_pid: this.pluginPid,
|
|
111
128
|
kind: args.kind,
|
|
129
|
+
client_kind: this._clientKind,
|
|
130
|
+
client_version: this._clientVersion,
|
|
112
131
|
session_name: args.sessionName,
|
|
113
132
|
workspace: args.workspace,
|
|
114
133
|
tracking_ref: args.trackingRef,
|
|
115
134
|
task_hint: args.taskHint,
|
|
135
|
+
runtime_session_id: args.runtimeSessionId,
|
|
116
136
|
runtime_capabilities: args.runtimeCapabilities,
|
|
117
137
|
execution_surface: args.executionSurface,
|
|
118
138
|
background_exchange_mode: args.backgroundExchangeMode,
|
|
@@ -128,6 +148,20 @@ export class BrokerClient extends EventEmitter {
|
|
|
128
148
|
metadata,
|
|
129
149
|
});
|
|
130
150
|
}
|
|
151
|
+
async sendRuntimeAssignmentReply(args) {
|
|
152
|
+
if (this.pluginPid === null) {
|
|
153
|
+
throw new Error("BrokerClient.connect must be called before sendRuntimeAssignmentReply");
|
|
154
|
+
}
|
|
155
|
+
return this.httpJson("POST", "/v1/runtime/assignment-reply", {
|
|
156
|
+
endpoint_id: args.endpointId,
|
|
157
|
+
plugin_pid: this.pluginPid,
|
|
158
|
+
source_message_id: args.sourceMessageId,
|
|
159
|
+
assignment_id: args.assignmentId,
|
|
160
|
+
reply_request_id: args.replyRequestId,
|
|
161
|
+
content: args.content,
|
|
162
|
+
contentType: args.contentType,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
131
165
|
async reportRuntimeProcessingState(args) {
|
|
132
166
|
if (this.pluginPid === null) {
|
|
133
167
|
throw new Error("BrokerClient.connect must be called before reportRuntimeProcessingState");
|
|
@@ -197,6 +231,17 @@ export class BrokerClient extends EventEmitter {
|
|
|
197
231
|
const msg = typeof msgField === "string" ? msgField : "Connector unavailable";
|
|
198
232
|
throw new ConnectorUnavailableError(msg);
|
|
199
233
|
}
|
|
234
|
+
if (parsed !== null &&
|
|
235
|
+
typeof parsed === "object" &&
|
|
236
|
+
"error" in parsed &&
|
|
237
|
+
parsed.error ===
|
|
238
|
+
"connector_send_outcome_unknown") {
|
|
239
|
+
const msgField = parsed.message;
|
|
240
|
+
const msg = typeof msgField === "string"
|
|
241
|
+
? msgField
|
|
242
|
+
: "Connector send outcome unknown";
|
|
243
|
+
throw new ConnectorSendOutcomeUnknownError(msg);
|
|
244
|
+
}
|
|
200
245
|
}
|
|
201
246
|
throw new Error(`broker ${method} ${path} failed: ${res.status} ${errText}`);
|
|
202
247
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy-spawn.d.ts","sourceRoot":"","sources":["../../src/broker-client/lazy-spawn.ts"],"names":[],"mappings":"AA0CA,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,gBAAgB;IAE/B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IAEvD,aAAa,EAAE,MAAM,CAAC;IAEtB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IAExB,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD,wBAAsB,cAAc,CAClC,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"lazy-spawn.d.ts","sourceRoot":"","sources":["../../src/broker-client/lazy-spawn.ts"],"names":[],"mappings":"AA0CA,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,gBAAgB;IAE/B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IAEvD,aAAa,EAAE,MAAM,CAAC;IAEtB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IAExB,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD,wBAAsB,cAAc,CAClC,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,eAAe,CAAC,CAgC1B"}
|
|
@@ -5,6 +5,14 @@ export declare class ConnectorError extends Error {
|
|
|
5
5
|
readonly to?: string;
|
|
6
6
|
constructor(message: string, code: string, to?: string);
|
|
7
7
|
}
|
|
8
|
+
export declare class ConnectorClientUnavailableError extends Error {
|
|
9
|
+
readonly code: "connector_client_unavailable";
|
|
10
|
+
constructor(message?: string);
|
|
11
|
+
}
|
|
12
|
+
export declare class ConnectorSendAckTimeoutError extends Error {
|
|
13
|
+
readonly code: "connector_send_ack_timeout";
|
|
14
|
+
constructor(message?: string);
|
|
15
|
+
}
|
|
8
16
|
type ConnectorClientEvents = {
|
|
9
17
|
message_received: (event: AddressedMessageEvent) => void;
|
|
10
18
|
send_ack: (event: SendAckEvent) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connector-client.d.ts","sourceRoot":"","sources":["../src/connector-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"connector-client.d.ts","sourceRoot":"","sources":["../src/connector-client.ts"],"names":[],"mappings":"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"}
|
package/dist/connector-client.js
CHANGED
|
@@ -23,6 +23,20 @@ export class ConnectorError extends Error {
|
|
|
23
23
|
this.to = to;
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
+
export class ConnectorClientUnavailableError extends Error {
|
|
27
|
+
code = "connector_client_unavailable";
|
|
28
|
+
constructor(message = "WebSocket not connected") {
|
|
29
|
+
super(message);
|
|
30
|
+
this.name = "ConnectorClientUnavailableError";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class ConnectorSendAckTimeoutError extends Error {
|
|
34
|
+
code = "connector_send_ack_timeout";
|
|
35
|
+
constructor(message = "SEND_ACK timeout") {
|
|
36
|
+
super(message);
|
|
37
|
+
this.name = "ConnectorSendAckTimeoutError";
|
|
38
|
+
}
|
|
39
|
+
}
|
|
26
40
|
export class ConnectorClient extends EventEmitter {
|
|
27
41
|
url;
|
|
28
42
|
token;
|
|
@@ -75,14 +89,14 @@ export class ConnectorClient extends EventEmitter {
|
|
|
75
89
|
return new Promise((resolve, reject) => {
|
|
76
90
|
const timer = setTimeout(() => {
|
|
77
91
|
this.pendingSends.delete(messageId);
|
|
78
|
-
reject(new
|
|
92
|
+
reject(new ConnectorSendAckTimeoutError());
|
|
79
93
|
}, SEND_ACK_TIMEOUT_MS);
|
|
80
94
|
this.pendingSends.set(messageId, { resolve, reject, timer });
|
|
81
95
|
const sent = this.sendEvent(event);
|
|
82
96
|
if (!sent) {
|
|
83
97
|
clearTimeout(timer);
|
|
84
98
|
this.pendingSends.delete(messageId);
|
|
85
|
-
reject(new
|
|
99
|
+
reject(new ConnectorClientUnavailableError());
|
|
86
100
|
}
|
|
87
101
|
});
|
|
88
102
|
}
|
|
@@ -391,7 +405,7 @@ export class ConnectorClient extends EventEmitter {
|
|
|
391
405
|
}
|
|
392
406
|
for (const [, pending] of this.pendingSends) {
|
|
393
407
|
clearTimeout(pending.timer);
|
|
394
|
-
pending.reject(new
|
|
408
|
+
pending.reject(new ConnectorSendAckTimeoutError("Connection closed before SEND_ACK"));
|
|
395
409
|
}
|
|
396
410
|
this.pendingSends.clear();
|
|
397
411
|
}
|
|
@@ -4,13 +4,23 @@ export type RuntimeKind = "claude-code" | "openclaw" | "codex" | "passport" | "c
|
|
|
4
4
|
export type RuntimeEndpointCapability = "remote_spawn_v1" | "background_exchange_v1" | "foreground_channel_v1" | (string & {});
|
|
5
5
|
export type EndpointExecutionSurface = "owner_attached" | "headless" | (string & {});
|
|
6
6
|
export type EndpointBackgroundExchangeMode = "resident_endpoint" | "adapter_managed_turn" | (string & {});
|
|
7
|
+
export type RuntimeWorkTargetRef = {
|
|
8
|
+
kind: "projection_endpoint";
|
|
9
|
+
projection_endpoint_id: string;
|
|
10
|
+
background_exchange_mode: "resident_endpoint";
|
|
11
|
+
} | {
|
|
12
|
+
kind: "projection_endpoint";
|
|
13
|
+
projection_endpoint_id: string;
|
|
14
|
+
runtime_session_id: string;
|
|
15
|
+
background_exchange_mode: "adapter_managed_turn";
|
|
16
|
+
};
|
|
7
17
|
export interface WorkspaceMetadata {
|
|
8
18
|
root: string;
|
|
9
19
|
cwd: string;
|
|
10
20
|
remote?: string;
|
|
11
21
|
branch?: string;
|
|
12
22
|
}
|
|
13
|
-
export type ShareWithPeerField = "workspace" | "tracking_ref" | "
|
|
23
|
+
export type ShareWithPeerField = "workspace" | "tracking_ref" | "fingerprint" | (string & {});
|
|
14
24
|
export interface RegisterRuntimeEndpointParams {
|
|
15
25
|
as?: string;
|
|
16
26
|
runtime_kind: RuntimeKind;
|
|
@@ -53,6 +63,7 @@ export interface OwnedRuntimeEndpointView {
|
|
|
53
63
|
runtime_capabilities?: RuntimeEndpointCapability[];
|
|
54
64
|
execution_surface?: EndpointExecutionSurface;
|
|
55
65
|
background_exchange_mode?: EndpointBackgroundExchangeMode;
|
|
66
|
+
runtime_work_target_ref?: RuntimeWorkTargetRef;
|
|
56
67
|
registered_at: string;
|
|
57
68
|
retired_at?: string;
|
|
58
69
|
is_self: boolean;
|
|
@@ -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;AAM9B,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;
|
|
1
|
+
{"version":3,"file":"runtime-endpoint-client.d.ts","sourceRoot":"","sources":["../src/runtime-endpoint-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -208,7 +208,10 @@ export async function emitRuntimeProcessingState(cfg, runtimeKey, event) {
|
|
|
208
208
|
}
|
|
209
209
|
if (res.status === 204)
|
|
210
210
|
return { ok: true };
|
|
211
|
-
if (res.status === 401 ||
|
|
211
|
+
if (res.status === 401 ||
|
|
212
|
+
res.status === 403 ||
|
|
213
|
+
res.status === 422 ||
|
|
214
|
+
res.status === 409) {
|
|
212
215
|
return {
|
|
213
216
|
ok: false,
|
|
214
217
|
terminal: true,
|
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.5";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const PLUGIN_VERSION = "0.2.
|
|
1
|
+
export const PLUGIN_VERSION = "0.2.5";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@masons/runtime-broker",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
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)",
|
|
@@ -20,6 +20,15 @@
|
|
|
20
20
|
"publishConfig": {
|
|
21
21
|
"access": "public"
|
|
22
22
|
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc",
|
|
25
|
+
"dev": "tsc --watch",
|
|
26
|
+
"test": "tsc -p test/tsconfig.json && node --test --loader ts-node/esm 'test/**/*.test.ts'",
|
|
27
|
+
"lint": "biome check",
|
|
28
|
+
"format": "biome format --write",
|
|
29
|
+
"prepublishOnly": "bash scripts/check-version.sh && npm run build && npm run test",
|
|
30
|
+
"release": "pnpm publish --access public"
|
|
31
|
+
},
|
|
23
32
|
"files": [
|
|
24
33
|
"dist/"
|
|
25
34
|
],
|
|
@@ -44,16 +53,8 @@
|
|
|
44
53
|
"@types/debug": "^4.1.12",
|
|
45
54
|
"@types/node": "^25",
|
|
46
55
|
"@types/ws": "^8",
|
|
56
|
+
"@workspace/types": "workspace:*",
|
|
47
57
|
"ts-node": "^10",
|
|
48
|
-
"typescript": "^5"
|
|
49
|
-
"@workspace/types": "0.0.0"
|
|
50
|
-
},
|
|
51
|
-
"scripts": {
|
|
52
|
-
"build": "tsc",
|
|
53
|
-
"dev": "tsc --watch",
|
|
54
|
-
"test": "tsc -p test/tsconfig.json && node --test --loader ts-node/esm 'test/**/*.test.ts'",
|
|
55
|
-
"lint": "biome check",
|
|
56
|
-
"format": "biome format --write",
|
|
57
|
-
"release": "pnpm publish --access public"
|
|
58
|
+
"typescript": "^5"
|
|
58
59
|
}
|
|
59
|
-
}
|
|
60
|
+
}
|