agent-relay 11.8.0 → 11.8.2
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/README.md +18 -3
- package/dist/cli/agent-relay-mcp.d.ts.map +1 -1
- package/dist/cli/agent-relay-mcp.js +61 -1
- package/dist/cli/agent-relay-mcp.js.map +1 -1
- package/dist/cli/bootstrap.d.ts.map +1 -1
- package/dist/cli/bootstrap.js +2 -0
- package/dist/cli/bootstrap.js.map +1 -1
- package/dist/cli/commands/fleet-agent.d.ts +14 -5
- package/dist/cli/commands/fleet-agent.d.ts.map +1 -1
- package/dist/cli/commands/fleet-agent.js +0 -0
- package/dist/cli/commands/fleet-agent.js.map +1 -1
- package/dist/cli/commands/fleet.d.ts +3 -0
- package/dist/cli/commands/fleet.d.ts.map +1 -1
- package/dist/cli/commands/fleet.js +230 -63
- package/dist/cli/commands/fleet.js.map +1 -1
- package/dist/cli/commands/observer.d.ts +28 -0
- package/dist/cli/commands/observer.d.ts.map +1 -0
- package/dist/cli/commands/observer.js +182 -0
- package/dist/cli/commands/observer.js.map +1 -0
- package/dist/cli/commands/session.d.ts +7 -1
- package/dist/cli/commands/session.d.ts.map +1 -1
- package/dist/cli/commands/session.js +29 -12
- package/dist/cli/commands/session.js.map +1 -1
- package/dist/cli/lib/attach-input-recovery.d.ts +30 -6
- package/dist/cli/lib/attach-input-recovery.d.ts.map +1 -1
- package/dist/cli/lib/attach-input-recovery.js +49 -1
- package/dist/cli/lib/attach-input-recovery.js.map +1 -1
- package/dist/cli/lib/attach.d.ts.map +1 -1
- package/dist/cli/lib/attach.js +10 -0
- package/dist/cli/lib/attach.js.map +1 -1
- package/dist/cli/lib/fleet-hint.d.ts.map +1 -1
- package/dist/cli/lib/fleet-hint.js +41 -13
- package/dist/cli/lib/fleet-hint.js.map +1 -1
- package/dist/cli/lib/fleet-live-agents.d.ts +42 -0
- package/dist/cli/lib/fleet-live-agents.d.ts.map +1 -0
- package/dist/cli/lib/fleet-live-agents.js +63 -0
- package/dist/cli/lib/fleet-live-agents.js.map +1 -0
- package/dist/cli/lib/message-delivery-receipts.d.ts +24 -0
- package/dist/cli/lib/message-delivery-receipts.d.ts.map +1 -1
- package/dist/cli/lib/message-delivery-receipts.js +39 -0
- package/dist/cli/lib/message-delivery-receipts.js.map +1 -1
- package/dist/cli/lib/observer-url.d.ts +32 -0
- package/dist/cli/lib/observer-url.d.ts.map +1 -0
- package/dist/cli/lib/observer-url.js +61 -0
- package/dist/cli/lib/observer-url.js.map +1 -0
- package/dist/cli/mcp/messaging-tools.d.ts.map +1 -1
- package/dist/cli/mcp/messaging-tools.js +21 -7
- package/dist/cli/mcp/messaging-tools.js.map +1 -1
- package/dist/index.cjs +238 -62
- package/package.json +9 -9
package/dist/index.cjs
CHANGED
|
@@ -182,6 +182,8 @@ __export(index_exports, {
|
|
|
182
182
|
MessageReadPredicate: () => MessageReadPredicate,
|
|
183
183
|
OBSERVABILITY_UNAVAILABLE: () => OBSERVABILITY_UNAVAILABLE,
|
|
184
184
|
RELAYCAST_SDK_VERSION: () => RELAYCAST_SDK_VERSION,
|
|
185
|
+
RELAY_ATTEST_SESSION_ID_ENV: () => RELAY_ATTEST_SESSION_ID_ENV,
|
|
186
|
+
RELAY_OBSERVER_SCOPES: () => RELAY_OBSERVER_SCOPES,
|
|
185
187
|
RELAY_SERVICE_FAILURE_MESSAGE: () => RELAY_SERVICE_FAILURE_MESSAGE,
|
|
186
188
|
RelayCapabilityError: () => RelayCapabilityError,
|
|
187
189
|
RelayError: () => RelayError,
|
|
@@ -214,6 +216,7 @@ __export(index_exports, {
|
|
|
214
216
|
createLogger: () => createLogger,
|
|
215
217
|
createNotifyHandler: () => createNotifyHandler,
|
|
216
218
|
createObserverEventSource: () => createObserverEventSource,
|
|
219
|
+
createObserverToken: () => createObserverToken,
|
|
217
220
|
createRealtimeClient: () => createRealtimeClient,
|
|
218
221
|
createRequestEnvelope: () => createRequestEnvelope,
|
|
219
222
|
createRequestHandler: () => createRequestHandler,
|
|
@@ -222,6 +225,7 @@ __export(index_exports, {
|
|
|
222
225
|
createWorkspace: () => createWorkspace,
|
|
223
226
|
createWorkspaceClient: () => createWorkspaceClient,
|
|
224
227
|
createWorkspaceFacade: () => createWorkspaceFacade,
|
|
228
|
+
currentReplaySessionRef: () => currentReplaySessionRef,
|
|
225
229
|
defineHarness: () => defineHarness,
|
|
226
230
|
findGitRoot: () => findGitRoot,
|
|
227
231
|
formatAgentHandle: () => formatAgentHandle,
|
|
@@ -246,6 +250,7 @@ __export(index_exports, {
|
|
|
246
250
|
isPlaceholderTargetFast: () => isPlaceholderTargetFast,
|
|
247
251
|
isSpawnOrReleaseCommandFast: () => isSpawnOrReleaseCommandFast,
|
|
248
252
|
isValidAgentName: () => isValidAgentName,
|
|
253
|
+
listObserverTokens: () => listObserverTokens,
|
|
249
254
|
logAndTraceError: () => logAndTraceError,
|
|
250
255
|
logRelayHandlerError: () => logRelayHandlerError,
|
|
251
256
|
mapModelToCli: () => mapModelToCli,
|
|
@@ -276,10 +281,13 @@ __export(index_exports, {
|
|
|
276
281
|
printUpdateNotification: () => printUpdateNotification,
|
|
277
282
|
reduceAgentActivity: () => reduceAgentActivity,
|
|
278
283
|
registerFacadeAction: () => registerFacadeAction,
|
|
284
|
+
replayMessageMetadata: () => replayMessageMetadata,
|
|
279
285
|
resetPatternMetrics: () => resetPatternMetrics,
|
|
280
286
|
resolveAgentName: () => resolveAgentName,
|
|
281
287
|
resolveAgentToken: () => resolveAgentToken,
|
|
282
288
|
resolveCommand: () => resolveCommand,
|
|
289
|
+
resolveReplaySessionRef: () => resolveReplaySessionRef,
|
|
290
|
+
revokeObserverToken: () => revokeObserverToken,
|
|
283
291
|
routerLog: () => routerLog,
|
|
284
292
|
safeRelayErrorMessage: () => safeRelayErrorMessage,
|
|
285
293
|
stripAnsiFast: () => stripAnsiFast,
|
|
@@ -295,7 +303,7 @@ __export(index_exports, {
|
|
|
295
303
|
module.exports = __toCommonJS(index_exports);
|
|
296
304
|
|
|
297
305
|
// ../../node_modules/@relaycast/sdk/dist/version.js
|
|
298
|
-
var SDK_VERSION = "8.
|
|
306
|
+
var SDK_VERSION = "8.2.0";
|
|
299
307
|
|
|
300
308
|
// ../../node_modules/zod/v4/classic/external.js
|
|
301
309
|
var external_exports = {};
|
|
@@ -14883,6 +14891,7 @@ var ReactionGroupSchema = external_exports.object({
|
|
|
14883
14891
|
});
|
|
14884
14892
|
|
|
14885
14893
|
// ../../node_modules/@relaycast/types/dist/agent.js
|
|
14894
|
+
var AGENT_RECOVERY_PROOF_HASH_PATTERN = /^[a-f0-9]{64}$/;
|
|
14886
14895
|
var AgentTypeSchema = external_exports.enum(["agent", "human", "system"]);
|
|
14887
14896
|
var AgentStatusSchema = external_exports.enum(["online", "offline", "away"]);
|
|
14888
14897
|
var AgentSchema = external_exports.object({
|
|
@@ -14914,7 +14923,9 @@ var CreateAgentRequestSchema = external_exports.object({
|
|
|
14914
14923
|
persona: external_exports.string().optional(),
|
|
14915
14924
|
metadata: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
|
|
14916
14925
|
skills: external_exports.array(AgentSkillInputSchema).optional(),
|
|
14917
|
-
capabilities: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
14926
|
+
capabilities: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
|
|
14927
|
+
recovery_proof_hash: external_exports.string().regex(AGENT_RECOVERY_PROOF_HASH_PATTERN).optional(),
|
|
14928
|
+
work_unit_id: external_exports.string().min(1).optional()
|
|
14918
14929
|
});
|
|
14919
14930
|
var CreateAgentResponseSchema = external_exports.object({
|
|
14920
14931
|
id: external_exports.string(),
|
|
@@ -15131,6 +15142,33 @@ var SessionMessagesResultSchema = external_exports.object({
|
|
|
15131
15142
|
});
|
|
15132
15143
|
|
|
15133
15144
|
// ../../node_modules/@relaycast/types/dist/workspace.js
|
|
15145
|
+
var WORKSPACE_CREATION_SOURCES = [
|
|
15146
|
+
"api",
|
|
15147
|
+
"sdk",
|
|
15148
|
+
"cli",
|
|
15149
|
+
"mcp",
|
|
15150
|
+
"ci",
|
|
15151
|
+
"relayflow",
|
|
15152
|
+
"dashboard",
|
|
15153
|
+
"other"
|
|
15154
|
+
];
|
|
15155
|
+
var WorkspaceCreationSourceSchema = external_exports.enum(WORKSPACE_CREATION_SOURCES);
|
|
15156
|
+
var WORKSPACE_USAGE_CLASSIFICATIONS = ["internal", "external", "unknown"];
|
|
15157
|
+
var WorkspaceUsageClassificationSchema = external_exports.enum(WORKSPACE_USAGE_CLASSIFICATIONS);
|
|
15158
|
+
var provenanceIdentifier = external_exports.string().min(1).max(256).regex(/^[A-Za-z0-9._:/@-]+$/, "must contain only letters, numbers, dot, underscore, colon, slash, @, or dash");
|
|
15159
|
+
var WorkspaceProvenanceInputSchema = external_exports.object({
|
|
15160
|
+
source: WorkspaceCreationSourceSchema,
|
|
15161
|
+
origin_id: provenanceIdentifier.optional(),
|
|
15162
|
+
classification: WorkspaceUsageClassificationSchema.optional()
|
|
15163
|
+
});
|
|
15164
|
+
var WorkspaceProvenanceSchema = WorkspaceProvenanceInputSchema.extend({
|
|
15165
|
+
source_basis: external_exports.enum(["declared", "origin_client", "default"]),
|
|
15166
|
+
origin_actor: external_exports.string().optional(),
|
|
15167
|
+
actor_user_id: external_exports.string().optional(),
|
|
15168
|
+
actor_machine_id: external_exports.string().optional(),
|
|
15169
|
+
actor_org_id: external_exports.string().optional(),
|
|
15170
|
+
actor_org_slug: external_exports.string().optional()
|
|
15171
|
+
});
|
|
15134
15172
|
var WorkspaceSchema = external_exports.object({
|
|
15135
15173
|
id: external_exports.string(),
|
|
15136
15174
|
name: external_exports.string(),
|
|
@@ -15141,11 +15179,17 @@ var WorkspaceSchema = external_exports.object({
|
|
|
15141
15179
|
effective_retention: external_exports.object({
|
|
15142
15180
|
messages: EffectiveMessageRetentionSchema
|
|
15143
15181
|
}).optional(),
|
|
15144
|
-
expires_at: external_exports.string().nullable().optional()
|
|
15182
|
+
expires_at: external_exports.string().nullable().optional(),
|
|
15183
|
+
provenance: WorkspaceProvenanceSchema.nullable().default(null),
|
|
15184
|
+
usage_classification: WorkspaceUsageClassificationSchema.default("unknown"),
|
|
15185
|
+
classification_source: external_exports.enum(["creator", "operator", "unclassified"]).default("unclassified"),
|
|
15186
|
+
classification_reason: external_exports.string().nullable().default(null),
|
|
15187
|
+
classified_at: external_exports.string().nullable().default(null)
|
|
15145
15188
|
});
|
|
15146
15189
|
var CreateWorkspaceRequestSchema = external_exports.object({
|
|
15147
15190
|
name: external_exports.string(),
|
|
15148
|
-
expires_in_seconds: external_exports.number().int().min(60).max(30 * 24 * 60 * 60).optional()
|
|
15191
|
+
expires_in_seconds: external_exports.number().int().min(60).max(30 * 24 * 60 * 60).optional(),
|
|
15192
|
+
provenance: WorkspaceProvenanceInputSchema.optional()
|
|
15149
15193
|
});
|
|
15150
15194
|
var CreateWorkspaceResponseSchema = external_exports.object({
|
|
15151
15195
|
workspace_id: external_exports.string(),
|
|
@@ -15972,6 +16016,8 @@ var SERVER_TELEMETRY_EVENTS = [
|
|
|
15972
16016
|
"relaycast_server_legacy_identity_claimed",
|
|
15973
16017
|
"relaycast_server_agent_deleted",
|
|
15974
16018
|
"relaycast_server_agent_token_rotated",
|
|
16019
|
+
"relaycast_server_agent_identity_taken_over",
|
|
16020
|
+
"relaycast_server_agent_token_revoked",
|
|
15975
16021
|
"relaycast_server_channel_created",
|
|
15976
16022
|
"relaycast_server_channel_updated",
|
|
15977
16023
|
"relaycast_server_channel_topic_updated",
|
|
@@ -16196,6 +16242,15 @@ var FleetAgentRegisterMessageSchema = external_exports.object({
|
|
|
16196
16242
|
session_ref: external_exports.string().optional(),
|
|
16197
16243
|
resumable: external_exports.boolean().optional()
|
|
16198
16244
|
}).strict();
|
|
16245
|
+
var FleetAgentRecoverMessageSchema = external_exports.object({
|
|
16246
|
+
...FleetRequestEnvelopeFields,
|
|
16247
|
+
type: external_exports.literal("agent.recover"),
|
|
16248
|
+
name: external_exports.string(),
|
|
16249
|
+
expected_agent_id: external_exports.string(),
|
|
16250
|
+
invocation_id: external_exports.string().optional(),
|
|
16251
|
+
session_ref: external_exports.string().optional(),
|
|
16252
|
+
resumable: external_exports.boolean().optional()
|
|
16253
|
+
}).strict();
|
|
16199
16254
|
var FleetAgentDeregisterMessageSchema = external_exports.object({
|
|
16200
16255
|
...FleetRequestEnvelopeFields,
|
|
16201
16256
|
type: external_exports.literal("agent.deregister"),
|
|
@@ -16300,6 +16355,7 @@ var FleetBrokerToRelaycastNonActionResultMessageSchema = external_exports.discri
|
|
|
16300
16355
|
FleetNodeDeregisterMessageSchema,
|
|
16301
16356
|
FleetNodeSpawnMessageSchema,
|
|
16302
16357
|
FleetAgentRegisterMessageSchema,
|
|
16358
|
+
FleetAgentRecoverMessageSchema,
|
|
16303
16359
|
FleetAgentDeregisterMessageSchema,
|
|
16304
16360
|
FleetDeliveryAckMessageSchema,
|
|
16305
16361
|
FleetInventorySyncMessageSchema
|
|
@@ -17227,6 +17283,14 @@ var AgentClient = class {
|
|
|
17227
17283
|
async heartbeat() {
|
|
17228
17284
|
await this.presence.heartbeat();
|
|
17229
17285
|
}
|
|
17286
|
+
/** Authenticated self-rollover for this agent identity. */
|
|
17287
|
+
async rotateToken(name) {
|
|
17288
|
+
return this.client.post(`/v1/agents/${encodeURIComponent(name)}/rotate-token`, {});
|
|
17289
|
+
}
|
|
17290
|
+
/** Enroll or rotate this agent's server-owned recovery verifier. */
|
|
17291
|
+
async enrollRecoveryCredential(data) {
|
|
17292
|
+
return this.client.post("/v1/agent/recovery-credential", data);
|
|
17293
|
+
}
|
|
17230
17294
|
/**
|
|
17231
17295
|
* Tear down this client's WebSocket and mark the agent offline.
|
|
17232
17296
|
*
|
|
@@ -17958,12 +18022,17 @@ function emitCompatibilityTelemetry(event, metadata = {}) {
|
|
|
17958
18022
|
const detail = { event, metadata };
|
|
17959
18023
|
target.dispatchEvent(new CustomEventCtor(COMPAT_EVENT_NAME, { detail }));
|
|
17960
18024
|
}
|
|
17961
|
-
|
|
17962
|
-
|
|
17963
|
-
|
|
17964
|
-
|
|
17965
|
-
|
|
17966
|
-
|
|
18025
|
+
|
|
18026
|
+
// ../../node_modules/@relaycast/sdk/dist/workspace-provenance.js
|
|
18027
|
+
function toWorkspaceProvenanceInput(provenance) {
|
|
18028
|
+
if (!provenance) {
|
|
18029
|
+
return { source: "sdk" };
|
|
18030
|
+
}
|
|
18031
|
+
const { originId, ...wireProvenance } = provenance;
|
|
18032
|
+
return {
|
|
18033
|
+
...wireProvenance,
|
|
18034
|
+
...originId !== void 0 ? { origin_id: originId } : {}
|
|
18035
|
+
};
|
|
17967
18036
|
}
|
|
17968
18037
|
|
|
17969
18038
|
// ../../node_modules/@relaycast/sdk/dist/relay.js
|
|
@@ -18065,7 +18134,8 @@ var RelayCast = class _RelayCast {
|
|
|
18065
18134
|
},
|
|
18066
18135
|
body: JSON.stringify({
|
|
18067
18136
|
name,
|
|
18068
|
-
...resolved.expiresInSeconds !== void 0 ? { expires_in_seconds: resolved.expiresInSeconds } : {}
|
|
18137
|
+
...resolved.expiresInSeconds !== void 0 ? { expires_in_seconds: resolved.expiresInSeconds } : {},
|
|
18138
|
+
provenance: toWorkspaceProvenanceInput(resolved.provenance)
|
|
18069
18139
|
})
|
|
18070
18140
|
});
|
|
18071
18141
|
let parsed;
|
|
@@ -18146,53 +18216,18 @@ var RelayCast = class _RelayCast {
|
|
|
18146
18216
|
workspaceId: await this.resolveWorkspaceId()
|
|
18147
18217
|
};
|
|
18148
18218
|
}
|
|
18149
|
-
async registerWithLegacySuffix(data) {
|
|
18150
|
-
const maxAttempts = 5;
|
|
18151
|
-
let candidateName = data.name;
|
|
18152
|
-
for (let attempt = 0; attempt <= maxAttempts; attempt += 1) {
|
|
18153
|
-
try {
|
|
18154
|
-
return await this.agents.register({ ...data, name: candidateName });
|
|
18155
|
-
} catch (err) {
|
|
18156
|
-
if (!isNameConflictError(err) || attempt === maxAttempts) {
|
|
18157
|
-
throw err;
|
|
18158
|
-
}
|
|
18159
|
-
candidateName = appendLegacySuffix(data.name);
|
|
18160
|
-
}
|
|
18161
|
-
}
|
|
18162
|
-
throw new RelayError("transport_error", "Failed to register agent identity after suffix retries");
|
|
18163
|
-
}
|
|
18164
18219
|
registerTypedIdentity(type, data) {
|
|
18165
18220
|
return this.agents.register({ ...data, type });
|
|
18166
18221
|
}
|
|
18167
18222
|
async registerAgent(data) {
|
|
18168
|
-
const { strict, ...request } = data;
|
|
18169
|
-
|
|
18170
|
-
return this.agents.register(request);
|
|
18171
|
-
}
|
|
18172
|
-
emitCompatibilityTelemetry("agents.registerAgent.legacy_suffix", {
|
|
18173
|
-
requested_name: data.name
|
|
18174
|
-
});
|
|
18175
|
-
return this.registerWithLegacySuffix(request);
|
|
18223
|
+
const { strict: _strict, ...request } = data;
|
|
18224
|
+
return this.agents.register(request);
|
|
18176
18225
|
}
|
|
18177
18226
|
async registerOrRotate(data) {
|
|
18178
|
-
|
|
18179
|
-
|
|
18180
|
-
}
|
|
18181
|
-
|
|
18182
|
-
const agent = await this.agents.get(data.name);
|
|
18183
|
-
const { token } = await this.agents.rotateToken(agent.name);
|
|
18184
|
-
this.rememberIdentity(agent.id, agent.name);
|
|
18185
|
-
const createdAt = agent.createdAt ?? agent.lastSeen;
|
|
18186
|
-
return {
|
|
18187
|
-
id: agent.id,
|
|
18188
|
-
name: agent.name,
|
|
18189
|
-
token,
|
|
18190
|
-
status: agent.status,
|
|
18191
|
-
createdAt
|
|
18192
|
-
};
|
|
18193
|
-
}
|
|
18194
|
-
throw err;
|
|
18195
|
-
}
|
|
18227
|
+
emitCompatibilityTelemetry("agents.registerOrRotate.deprecated", {
|
|
18228
|
+
replacement: "agents.register or agents.recover"
|
|
18229
|
+
});
|
|
18230
|
+
return this.registerAgent(data);
|
|
18196
18231
|
}
|
|
18197
18232
|
async resolveIdentity() {
|
|
18198
18233
|
return this.resolveIdentityInternal();
|
|
@@ -18378,15 +18413,23 @@ var RelayCast = class _RelayCast {
|
|
|
18378
18413
|
},
|
|
18379
18414
|
get: (name) => this.client.get(`/v1/agents/${encodeURIComponent(name)}`),
|
|
18380
18415
|
me: (apiToken) => (apiToken ? this.client.withApiKey(apiToken) : this.client).get("/v1/agent"),
|
|
18381
|
-
rotateToken: (name) => this.client.post(`/v1/agents/${encodeURIComponent(name)}/rotate-token`, {}),
|
|
18416
|
+
rotateToken: (name, agentToken) => this.client.withApiKey(agentToken).post(`/v1/agents/${encodeURIComponent(name)}/rotate-token`, {}),
|
|
18417
|
+
recover: async ({ name, ...data }) => {
|
|
18418
|
+
const result = await this.client.post(`/v1/agents/${encodeURIComponent(name)}/recover`, data);
|
|
18419
|
+
this.rememberIdentity(result.agentId, result.name);
|
|
18420
|
+
return result;
|
|
18421
|
+
},
|
|
18422
|
+
takeOver: ({ name, ...data }) => this.client.post(`/v1/agents/${encodeURIComponent(name)}/takeover`, data),
|
|
18423
|
+
revokeToken: ({ name, ...data }) => this.client.post(`/v1/agents/${encodeURIComponent(name)}/revoke-token`, data),
|
|
18424
|
+
enrollRecoveryCredential: (data, agentToken) => this.client.withApiKey(agentToken).post("/v1/agent/recovery-credential", data),
|
|
18382
18425
|
update: (name, data) => this.client.patch(`/v1/agents/${encodeURIComponent(name)}`, data),
|
|
18383
18426
|
delete: (name) => this.client.delete(`/v1/agents/${encodeURIComponent(name)}`),
|
|
18384
18427
|
presence: () => this.client.get("/v1/agents/presence"),
|
|
18385
18428
|
registerOrGet: async (data) => {
|
|
18386
18429
|
emitCompatibilityTelemetry("agents.registerOrGet.deprecated", {
|
|
18387
|
-
replacement: "agents.
|
|
18430
|
+
replacement: "agents.register or agents.recover"
|
|
18388
18431
|
});
|
|
18389
|
-
return this.
|
|
18432
|
+
return this.agents.register(data);
|
|
18390
18433
|
},
|
|
18391
18434
|
registerAgent: (data) => this.registerAgent(data),
|
|
18392
18435
|
registerOrRotate: (data) => this.registerOrRotate(data),
|
|
@@ -19133,6 +19176,28 @@ function relaycastWorkspaceTelemetryOptions(explicit = {}, env = defaultEnv()) {
|
|
|
19133
19176
|
return identity;
|
|
19134
19177
|
}
|
|
19135
19178
|
|
|
19179
|
+
// ../sdk/dist/messaging/session-ref.js
|
|
19180
|
+
var RELAY_ATTEST_SESSION_ID_ENV = "RELAY_ATTEST_SESSION_ID";
|
|
19181
|
+
var MAX_SESSION_REF_LENGTH = 255;
|
|
19182
|
+
function resolveReplaySessionRef(value) {
|
|
19183
|
+
const sessionRef = value?.trim();
|
|
19184
|
+
if (!sessionRef || Array.from(sessionRef).length > MAX_SESSION_REF_LENGTH)
|
|
19185
|
+
return void 0;
|
|
19186
|
+
return sessionRef;
|
|
19187
|
+
}
|
|
19188
|
+
function currentReplaySessionRef() {
|
|
19189
|
+
return resolveReplaySessionRef(typeof process === "undefined" ? void 0 : process.env[RELAY_ATTEST_SESSION_ID_ENV]);
|
|
19190
|
+
}
|
|
19191
|
+
function replayMessageMetadata(metadata, ...rest) {
|
|
19192
|
+
if (metadata && Object.hasOwn(metadata, "session_ref"))
|
|
19193
|
+
return metadata;
|
|
19194
|
+
const sessionRef = rest.length === 0 ? currentReplaySessionRef() : rest[0];
|
|
19195
|
+
const normalized = resolveReplaySessionRef(sessionRef);
|
|
19196
|
+
if (!normalized)
|
|
19197
|
+
return metadata;
|
|
19198
|
+
return { ...metadata ?? {}, session_ref: normalized };
|
|
19199
|
+
}
|
|
19200
|
+
|
|
19136
19201
|
// ../sdk/dist/messaging/normalize.js
|
|
19137
19202
|
function isRecord2(value) {
|
|
19138
19203
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
@@ -20631,6 +20696,7 @@ var RelaycastMessagingClient = class {
|
|
|
20631
20696
|
placementTtlMs;
|
|
20632
20697
|
maxQueuedPlacements;
|
|
20633
20698
|
placementLog;
|
|
20699
|
+
sessionRef;
|
|
20634
20700
|
queuedPlacements = 0;
|
|
20635
20701
|
eventHandlers = /* @__PURE__ */ new Map();
|
|
20636
20702
|
eventUnsubscribe;
|
|
@@ -20641,6 +20707,7 @@ var RelaycastMessagingClient = class {
|
|
|
20641
20707
|
this.placementTtlMs = options.placementTtlMs ?? 60 * 60 * 1e3;
|
|
20642
20708
|
this.maxQueuedPlacements = options.maxQueuedPlacements ?? 100;
|
|
20643
20709
|
this.placementLog = options.placementLog;
|
|
20710
|
+
this.sessionRef = options.sessionRef === void 0 ? currentReplaySessionRef() : resolveReplaySessionRef(options.sessionRef);
|
|
20644
20711
|
const durable = this.deliverySurface() !== void 0;
|
|
20645
20712
|
this.capabilities = {
|
|
20646
20713
|
serverDeliveryState: durable,
|
|
@@ -20723,6 +20790,7 @@ var RelaycastMessagingClient = class {
|
|
|
20723
20790
|
const message = await this.requireAgentClient("messages.send").send(input.channel, input.text, definedOptions({
|
|
20724
20791
|
attachments: serializeAttachmentInputs(input.attachments),
|
|
20725
20792
|
blocks: input.blocks,
|
|
20793
|
+
data: replayMessageMetadata(input.metadata, this.sessionRef),
|
|
20726
20794
|
mode: input.mode,
|
|
20727
20795
|
idempotencyKey: input.idempotencyKey
|
|
20728
20796
|
}));
|
|
@@ -20735,7 +20803,11 @@ var RelaycastMessagingClient = class {
|
|
|
20735
20803
|
},
|
|
20736
20804
|
get: async (id) => normalizeMessage(await this.relaycast.messages.get(id)),
|
|
20737
20805
|
reply: async (input) => {
|
|
20738
|
-
const message = await this.requireAgentClient("messages.reply").reply(input.messageId, input.text, definedOptions({
|
|
20806
|
+
const message = await this.requireAgentClient("messages.reply").reply(input.messageId, input.text, definedOptions({
|
|
20807
|
+
blocks: input.blocks,
|
|
20808
|
+
data: replayMessageMetadata(input.metadata, this.sessionRef),
|
|
20809
|
+
idempotencyKey: input.idempotencyKey
|
|
20810
|
+
}));
|
|
20739
20811
|
return normalizeMessage(message, {
|
|
20740
20812
|
kind: "thread_reply",
|
|
20741
20813
|
parentId: input.messageId,
|
|
@@ -20745,6 +20817,7 @@ var RelaycastMessagingClient = class {
|
|
|
20745
20817
|
direct: async (input) => {
|
|
20746
20818
|
const response = await this.requireAgentClient("messages.direct").dm(input.to, input.text, definedOptions({
|
|
20747
20819
|
attachments: serializeAttachmentInputs(input.attachments),
|
|
20820
|
+
data: replayMessageMetadata(input.metadata, this.sessionRef),
|
|
20748
20821
|
mode: input.mode,
|
|
20749
20822
|
idempotencyKey: input.idempotencyKey
|
|
20750
20823
|
}));
|
|
@@ -20758,6 +20831,7 @@ var RelaycastMessagingClient = class {
|
|
|
20758
20831
|
}
|
|
20759
20832
|
const response = await agent.dms.sendMessage(conversationId, input.text, definedOptions({
|
|
20760
20833
|
attachments: serializeAttachmentInputs(input.attachments),
|
|
20834
|
+
data: replayMessageMetadata(input.metadata, this.sessionRef),
|
|
20761
20835
|
mode: input.mode,
|
|
20762
20836
|
idempotencyKey: input.idempotencyKey
|
|
20763
20837
|
}));
|
|
@@ -21453,6 +21527,45 @@ var RelaycastMessagingClient = class {
|
|
|
21453
21527
|
|
|
21454
21528
|
// ../sdk/dist/messaging/thin-client.js
|
|
21455
21529
|
var RELAYCAST_SDK_VERSION = SDK_VERSION;
|
|
21530
|
+
var RELAY_OBSERVER_SCOPES = [
|
|
21531
|
+
"stream:read",
|
|
21532
|
+
"messages:read",
|
|
21533
|
+
"threads:read",
|
|
21534
|
+
"dms:read",
|
|
21535
|
+
"channels:read",
|
|
21536
|
+
"search:read",
|
|
21537
|
+
"agents:read",
|
|
21538
|
+
"nodes:read",
|
|
21539
|
+
"deliveries:read",
|
|
21540
|
+
"activity:read",
|
|
21541
|
+
"files:read",
|
|
21542
|
+
"reactions:read"
|
|
21543
|
+
];
|
|
21544
|
+
function observerTokenClient(workspaceKey, options) {
|
|
21545
|
+
return new RelayCast(clientConfig(workspaceKey, options));
|
|
21546
|
+
}
|
|
21547
|
+
async function createObserverToken(options) {
|
|
21548
|
+
const client = observerTokenClient(options.workspaceKey, options);
|
|
21549
|
+
return client.observerTokens.create({
|
|
21550
|
+
name: options.name,
|
|
21551
|
+
...options.description === void 0 ? {} : { description: options.description },
|
|
21552
|
+
scopes: [...options.scopes ?? RELAY_OBSERVER_SCOPES],
|
|
21553
|
+
// `include_dms` defaults to false server-side, but send it explicitly so the
|
|
21554
|
+
// token's stored filters record the decision rather than an absence.
|
|
21555
|
+
filters: {
|
|
21556
|
+
includeDms: options.filters?.includeDms === true,
|
|
21557
|
+
...options.filters?.channelNames?.length ? { channelNames: options.filters.channelNames } : {},
|
|
21558
|
+
...options.filters?.agentIds?.length ? { agentIds: options.filters.agentIds } : {}
|
|
21559
|
+
},
|
|
21560
|
+
...options.expiresAt === void 0 ? {} : { expiresAt: options.expiresAt }
|
|
21561
|
+
});
|
|
21562
|
+
}
|
|
21563
|
+
async function listObserverTokens(options) {
|
|
21564
|
+
return observerTokenClient(options.workspaceKey, options).observerTokens.list();
|
|
21565
|
+
}
|
|
21566
|
+
async function revokeObserverToken(options) {
|
|
21567
|
+
await observerTokenClient(options.workspaceKey, options).observerTokens.revoke(options.id);
|
|
21568
|
+
}
|
|
21456
21569
|
function pickTelemetryOverrides(options) {
|
|
21457
21570
|
return {
|
|
21458
21571
|
...options.originActor === void 0 ? {} : { originActor: options.originActor },
|
|
@@ -21475,9 +21588,59 @@ function createWorkspaceClient(options) {
|
|
|
21475
21588
|
}
|
|
21476
21589
|
function createAgentClient(options) {
|
|
21477
21590
|
const relay = new RelayCast(clientConfig(options.agentToken, options));
|
|
21478
|
-
|
|
21591
|
+
const raw = relay.as(options.agentToken, {
|
|
21479
21592
|
autoHeartbeatMs: options.autoHeartbeatMs ?? false
|
|
21480
21593
|
});
|
|
21594
|
+
const sessionRef = options.sessionRef === void 0 ? currentReplaySessionRef() : resolveReplaySessionRef(options.sessionRef);
|
|
21595
|
+
if (!sessionRef)
|
|
21596
|
+
return raw;
|
|
21597
|
+
return stampAgentClientWithReplaySession(raw, sessionRef);
|
|
21598
|
+
}
|
|
21599
|
+
function stampAgentClientWithReplaySession(client, sessionRef) {
|
|
21600
|
+
const stampData = (data) => replayMessageMetadata(data, sessionRef);
|
|
21601
|
+
const withStampedData = (options, invoke) => {
|
|
21602
|
+
const merged = { ...options ?? {} };
|
|
21603
|
+
const stamped = stampData(options?.data);
|
|
21604
|
+
if (stamped === void 0)
|
|
21605
|
+
delete merged.data;
|
|
21606
|
+
else
|
|
21607
|
+
merged.data = stamped;
|
|
21608
|
+
return invoke(merged);
|
|
21609
|
+
};
|
|
21610
|
+
let wrappedDms;
|
|
21611
|
+
const dmsProxy = () => {
|
|
21612
|
+
const target = client.dms;
|
|
21613
|
+
if (!target)
|
|
21614
|
+
return target;
|
|
21615
|
+
wrappedDms ??= new Proxy(target, {
|
|
21616
|
+
get(dms, prop) {
|
|
21617
|
+
if (prop === "sendMessage") {
|
|
21618
|
+
return (conversationId, text, options) => withStampedData(options, (opts) => dms.sendMessage(conversationId, text, opts));
|
|
21619
|
+
}
|
|
21620
|
+
const value = Reflect.get(dms, prop, dms);
|
|
21621
|
+
return typeof value === "function" ? value.bind(dms) : value;
|
|
21622
|
+
}
|
|
21623
|
+
});
|
|
21624
|
+
return wrappedDms;
|
|
21625
|
+
};
|
|
21626
|
+
return new Proxy(client, {
|
|
21627
|
+
get(target, prop) {
|
|
21628
|
+
switch (prop) {
|
|
21629
|
+
case "send":
|
|
21630
|
+
return (channel, text, options) => withStampedData(options, (opts) => target.send(channel, text, opts));
|
|
21631
|
+
case "reply":
|
|
21632
|
+
return (messageId, text, options) => withStampedData(options, (opts) => target.reply(messageId, text, opts));
|
|
21633
|
+
case "dm":
|
|
21634
|
+
return (to, text, options) => withStampedData(options, (opts) => target.dm(to, text, opts));
|
|
21635
|
+
case "dms":
|
|
21636
|
+
return dmsProxy();
|
|
21637
|
+
default: {
|
|
21638
|
+
const value = Reflect.get(target, prop, target);
|
|
21639
|
+
return typeof value === "function" ? value.bind(target) : value;
|
|
21640
|
+
}
|
|
21641
|
+
}
|
|
21642
|
+
}
|
|
21643
|
+
});
|
|
21481
21644
|
}
|
|
21482
21645
|
function createRealtimeClient(options) {
|
|
21483
21646
|
return new WsClient({
|
|
@@ -21986,7 +22149,8 @@ function createEnrichedMessages(base, resolveFrom) {
|
|
|
21986
22149
|
text,
|
|
21987
22150
|
attachments: sendInput.attachments,
|
|
21988
22151
|
mode: sendInput.mode,
|
|
21989
|
-
idempotencyKey: sendInput.idempotencyKey
|
|
22152
|
+
idempotencyKey: sendInput.idempotencyKey,
|
|
22153
|
+
metadata: sendInput.metadata
|
|
21990
22154
|
});
|
|
21991
22155
|
}
|
|
21992
22156
|
if (isChannelTarget(sendInput.to)) {
|
|
@@ -21996,7 +22160,8 @@ function createEnrichedMessages(base, resolveFrom) {
|
|
|
21996
22160
|
blocks: sendInput.blocks,
|
|
21997
22161
|
attachments: sendInput.attachments,
|
|
21998
22162
|
mode: sendInput.mode,
|
|
21999
|
-
idempotencyKey: sendInput.idempotencyKey
|
|
22163
|
+
idempotencyKey: sendInput.idempotencyKey,
|
|
22164
|
+
metadata: sendInput.metadata
|
|
22000
22165
|
});
|
|
22001
22166
|
}
|
|
22002
22167
|
return messages.direct({
|
|
@@ -22004,7 +22169,8 @@ function createEnrichedMessages(base, resolveFrom) {
|
|
|
22004
22169
|
text,
|
|
22005
22170
|
attachments: sendInput.attachments,
|
|
22006
22171
|
mode: sendInput.mode,
|
|
22007
|
-
idempotencyKey: sendInput.idempotencyKey
|
|
22172
|
+
idempotencyKey: sendInput.idempotencyKey,
|
|
22173
|
+
metadata: sendInput.metadata
|
|
22008
22174
|
});
|
|
22009
22175
|
};
|
|
22010
22176
|
enriched.reply = async (input) => {
|
|
@@ -22013,7 +22179,8 @@ function createEnrichedMessages(base, resolveFrom) {
|
|
|
22013
22179
|
messageId: resolveMessageId(input.messageId ?? input.thread),
|
|
22014
22180
|
text: input.text,
|
|
22015
22181
|
blocks: input.blocks,
|
|
22016
|
-
idempotencyKey: input.idempotencyKey
|
|
22182
|
+
idempotencyKey: input.idempotencyKey,
|
|
22183
|
+
metadata: input.metadata
|
|
22017
22184
|
});
|
|
22018
22185
|
};
|
|
22019
22186
|
enriched.react = (async (arg1, arg2) => {
|
|
@@ -22031,7 +22198,8 @@ function createEnrichedMessages(base, resolveFrom) {
|
|
|
22031
22198
|
text: input.text ?? input.msg ?? "",
|
|
22032
22199
|
attachments: input.attachments,
|
|
22033
22200
|
mode: input.mode,
|
|
22034
|
-
idempotencyKey: input.idempotencyKey
|
|
22201
|
+
idempotencyKey: input.idempotencyKey,
|
|
22202
|
+
metadata: input.metadata
|
|
22035
22203
|
});
|
|
22036
22204
|
};
|
|
22037
22205
|
return enriched;
|
|
@@ -24140,6 +24308,8 @@ function generateRequestId(prefix = "") {
|
|
|
24140
24308
|
MessageReadPredicate,
|
|
24141
24309
|
OBSERVABILITY_UNAVAILABLE,
|
|
24142
24310
|
RELAYCAST_SDK_VERSION,
|
|
24311
|
+
RELAY_ATTEST_SESSION_ID_ENV,
|
|
24312
|
+
RELAY_OBSERVER_SCOPES,
|
|
24143
24313
|
RELAY_SERVICE_FAILURE_MESSAGE,
|
|
24144
24314
|
RelayCapabilityError,
|
|
24145
24315
|
RelayError,
|
|
@@ -24172,6 +24342,7 @@ function generateRequestId(prefix = "") {
|
|
|
24172
24342
|
createLogger,
|
|
24173
24343
|
createNotifyHandler,
|
|
24174
24344
|
createObserverEventSource,
|
|
24345
|
+
createObserverToken,
|
|
24175
24346
|
createRealtimeClient,
|
|
24176
24347
|
createRequestEnvelope,
|
|
24177
24348
|
createRequestHandler,
|
|
@@ -24180,6 +24351,7 @@ function generateRequestId(prefix = "") {
|
|
|
24180
24351
|
createWorkspace,
|
|
24181
24352
|
createWorkspaceClient,
|
|
24182
24353
|
createWorkspaceFacade,
|
|
24354
|
+
currentReplaySessionRef,
|
|
24183
24355
|
defineHarness,
|
|
24184
24356
|
findGitRoot,
|
|
24185
24357
|
formatAgentHandle,
|
|
@@ -24204,6 +24376,7 @@ function generateRequestId(prefix = "") {
|
|
|
24204
24376
|
isPlaceholderTargetFast,
|
|
24205
24377
|
isSpawnOrReleaseCommandFast,
|
|
24206
24378
|
isValidAgentName,
|
|
24379
|
+
listObserverTokens,
|
|
24207
24380
|
logAndTraceError,
|
|
24208
24381
|
logRelayHandlerError,
|
|
24209
24382
|
mapModelToCli,
|
|
@@ -24234,10 +24407,13 @@ function generateRequestId(prefix = "") {
|
|
|
24234
24407
|
printUpdateNotification,
|
|
24235
24408
|
reduceAgentActivity,
|
|
24236
24409
|
registerFacadeAction,
|
|
24410
|
+
replayMessageMetadata,
|
|
24237
24411
|
resetPatternMetrics,
|
|
24238
24412
|
resolveAgentName,
|
|
24239
24413
|
resolveAgentToken,
|
|
24240
24414
|
resolveCommand,
|
|
24415
|
+
resolveReplaySessionRef,
|
|
24416
|
+
revokeObserverToken,
|
|
24241
24417
|
routerLog,
|
|
24242
24418
|
safeRelayErrorMessage,
|
|
24243
24419
|
stripAnsiFast,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-relay",
|
|
3
|
-
"version": "11.8.
|
|
3
|
+
"version": "11.8.2",
|
|
4
4
|
"description": "Real-time agent-to-agent communication system",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -43,14 +43,14 @@
|
|
|
43
43
|
"pack:validate": "npm pack --dry-run"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@agent-relay/cloud": "11.8.
|
|
47
|
-
"@agent-relay/config": "11.8.
|
|
48
|
-
"@agent-relay/fleet": "11.8.
|
|
49
|
-
"@agent-relay/harness-driver": "11.8.
|
|
50
|
-
"@agent-relay/harnesses": "11.8.
|
|
51
|
-
"@agent-relay/sdk": "11.8.
|
|
52
|
-
"@agent-relay/session": "11.8.
|
|
53
|
-
"@agent-relay/utils": "11.8.
|
|
46
|
+
"@agent-relay/cloud": "11.8.2",
|
|
47
|
+
"@agent-relay/config": "11.8.2",
|
|
48
|
+
"@agent-relay/fleet": "11.8.2",
|
|
49
|
+
"@agent-relay/harness-driver": "11.8.2",
|
|
50
|
+
"@agent-relay/harnesses": "11.8.2",
|
|
51
|
+
"@agent-relay/sdk": "11.8.2",
|
|
52
|
+
"@agent-relay/session": "11.8.2",
|
|
53
|
+
"@agent-relay/utils": "11.8.2",
|
|
54
54
|
"@modelcontextprotocol/sdk": "^1.23.0",
|
|
55
55
|
"@relayfile/client": "^0.10.27",
|
|
56
56
|
"@relayflows/cli": "1.0.1",
|