@agent-relay/sdk 3.2.2 → 3.2.4
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/bin/agent-relay-broker-darwin-arm64 +0 -0
- package/bin/agent-relay-broker-darwin-x64 +0 -0
- package/bin/agent-relay-broker-linux-arm64 +0 -0
- package/bin/agent-relay-broker-linux-x64 +0 -0
- package/dist/client.d.ts +66 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +230 -0
- package/dist/client.js.map +1 -1
- package/dist/communicate/a2a-bridge.d.ts +25 -0
- package/dist/communicate/a2a-bridge.d.ts.map +1 -0
- package/dist/communicate/a2a-bridge.js +89 -0
- package/dist/communicate/a2a-bridge.js.map +1 -0
- package/dist/communicate/a2a-server.d.ts +31 -0
- package/dist/communicate/a2a-server.d.ts.map +1 -0
- package/dist/communicate/a2a-server.js +220 -0
- package/dist/communicate/a2a-server.js.map +1 -0
- package/dist/communicate/a2a-transport.d.ts +48 -0
- package/dist/communicate/a2a-transport.d.ts.map +1 -0
- package/dist/communicate/a2a-transport.js +302 -0
- package/dist/communicate/a2a-transport.js.map +1 -0
- package/dist/communicate/a2a-types.d.ts +107 -0
- package/dist/communicate/a2a-types.d.ts.map +1 -0
- package/dist/communicate/a2a-types.js +209 -0
- package/dist/communicate/a2a-types.js.map +1 -0
- package/dist/communicate/adapters/claude-sdk.d.ts +28 -0
- package/dist/communicate/adapters/claude-sdk.d.ts.map +1 -0
- package/dist/communicate/adapters/claude-sdk.js +47 -0
- package/dist/communicate/adapters/claude-sdk.js.map +1 -0
- package/dist/communicate/adapters/crewai.d.ts +42 -0
- package/dist/communicate/adapters/crewai.d.ts.map +1 -0
- package/dist/communicate/adapters/crewai.js +95 -0
- package/dist/communicate/adapters/crewai.js.map +1 -0
- package/dist/communicate/adapters/google-adk.d.ts +53 -0
- package/dist/communicate/adapters/google-adk.d.ts.map +1 -0
- package/dist/communicate/adapters/google-adk.js +77 -0
- package/dist/communicate/adapters/google-adk.js.map +1 -0
- package/dist/communicate/adapters/index.d.ts +7 -0
- package/dist/communicate/adapters/index.d.ts.map +1 -0
- package/dist/communicate/adapters/index.js +7 -0
- package/dist/communicate/adapters/index.js.map +1 -0
- package/dist/communicate/adapters/langgraph.d.ts +40 -0
- package/dist/communicate/adapters/langgraph.d.ts.map +1 -0
- package/dist/communicate/adapters/langgraph.js +77 -0
- package/dist/communicate/adapters/langgraph.js.map +1 -0
- package/dist/communicate/adapters/openai-agents.d.ts +25 -0
- package/dist/communicate/adapters/openai-agents.d.ts.map +1 -0
- package/dist/communicate/adapters/openai-agents.js +70 -0
- package/dist/communicate/adapters/openai-agents.js.map +1 -0
- package/dist/communicate/adapters/pi.d.ts +45 -0
- package/dist/communicate/adapters/pi.d.ts.map +1 -0
- package/dist/communicate/adapters/pi.js +59 -0
- package/dist/communicate/adapters/pi.js.map +1 -0
- package/dist/communicate/core.d.ts +58 -0
- package/dist/communicate/core.d.ts.map +1 -0
- package/dist/communicate/core.js +128 -0
- package/dist/communicate/core.js.map +1 -0
- package/dist/communicate/index.d.ts +4 -0
- package/dist/communicate/index.d.ts.map +1 -0
- package/dist/communicate/index.js +4 -0
- package/dist/communicate/index.js.map +1 -0
- package/dist/communicate/transport.d.ts +36 -0
- package/dist/communicate/transport.d.ts.map +1 -0
- package/dist/communicate/transport.js +371 -0
- package/dist/communicate/transport.js.map +1 -0
- package/dist/communicate/types.d.ts +58 -0
- package/dist/communicate/types.d.ts.map +1 -0
- package/dist/communicate/types.js +66 -0
- package/dist/communicate/types.js.map +1 -0
- package/dist/workflows/builder.d.ts +35 -5
- package/dist/workflows/builder.d.ts.map +1 -1
- package/dist/workflows/builder.js +81 -7
- package/dist/workflows/builder.js.map +1 -1
- package/dist/workflows/cli.js +14 -1
- package/dist/workflows/cli.js.map +1 -1
- package/dist/workflows/runner.d.ts +10 -2
- package/dist/workflows/runner.d.ts.map +1 -1
- package/dist/workflows/runner.js +95 -1
- package/dist/workflows/runner.js.map +1 -1
- package/dist/workflows/types.d.ts +11 -0
- package/dist/workflows/types.d.ts.map +1 -1
- package/package.json +48 -2
- package/dist/__tests__/completion-pipeline.test.d.ts +0 -14
- package/dist/__tests__/completion-pipeline.test.d.ts.map +0 -1
- package/dist/__tests__/completion-pipeline.test.js +0 -1476
- package/dist/__tests__/completion-pipeline.test.js.map +0 -1
- package/dist/__tests__/contract-fixtures.test.d.ts +0 -2
- package/dist/__tests__/contract-fixtures.test.d.ts.map +0 -1
- package/dist/__tests__/contract-fixtures.test.js +0 -152
- package/dist/__tests__/contract-fixtures.test.js.map +0 -1
- package/dist/__tests__/e2e-owner-review.test.d.ts +0 -16
- package/dist/__tests__/e2e-owner-review.test.d.ts.map +0 -1
- package/dist/__tests__/e2e-owner-review.test.js +0 -640
- package/dist/__tests__/e2e-owner-review.test.js.map +0 -1
- package/dist/__tests__/facade.test.d.ts +0 -2
- package/dist/__tests__/facade.test.d.ts.map +0 -1
- package/dist/__tests__/facade.test.js +0 -305
- package/dist/__tests__/facade.test.js.map +0 -1
- package/dist/__tests__/integration.test.d.ts +0 -2
- package/dist/__tests__/integration.test.d.ts.map +0 -1
- package/dist/__tests__/integration.test.js +0 -205
- package/dist/__tests__/integration.test.js.map +0 -1
- package/dist/__tests__/pty.test.d.ts +0 -2
- package/dist/__tests__/pty.test.d.ts.map +0 -1
- package/dist/__tests__/pty.test.js +0 -20
- package/dist/__tests__/pty.test.js.map +0 -1
- package/dist/__tests__/quickstart.test.d.ts +0 -2
- package/dist/__tests__/quickstart.test.d.ts.map +0 -1
- package/dist/__tests__/quickstart.test.js +0 -176
- package/dist/__tests__/quickstart.test.js.map +0 -1
- package/dist/__tests__/spawn-from-env.test.d.ts +0 -2
- package/dist/__tests__/spawn-from-env.test.d.ts.map +0 -1
- package/dist/__tests__/spawn-from-env.test.js +0 -222
- package/dist/__tests__/spawn-from-env.test.js.map +0 -1
- package/dist/__tests__/unit.test.d.ts +0 -2
- package/dist/__tests__/unit.test.d.ts.map +0 -1
- package/dist/__tests__/unit.test.js +0 -357
- package/dist/__tests__/unit.test.js.map +0 -1
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Relay } from '../core.js';
|
|
2
|
+
import { formatRelayInbox, formatRelayMessage } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Create a FunctionTool-shaped object for Google ADK.
|
|
5
|
+
* We construct the tool objects duck-typed to avoid importing the actual
|
|
6
|
+
* FunctionTool class (which requires @google/genai at runtime).
|
|
7
|
+
*/
|
|
8
|
+
function createRelayFunctionTools(relay) {
|
|
9
|
+
// We dynamically import FunctionTool to create real ADK tool instances
|
|
10
|
+
// For now, we build tool-like objects that match the FunctionTool constructor shape
|
|
11
|
+
// and lazily construct them.
|
|
12
|
+
const toolDefs = [
|
|
13
|
+
{
|
|
14
|
+
name: 'relay_send',
|
|
15
|
+
description: 'Send a direct message to another relay agent.',
|
|
16
|
+
parameters: { type: 'object', properties: { to: { type: 'string' }, text: { type: 'string' } }, required: ['to', 'text'] },
|
|
17
|
+
async execute(input) {
|
|
18
|
+
await relay.send(input.to, input.text);
|
|
19
|
+
return { result: `Sent relay message to ${input.to}.` };
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'relay_inbox',
|
|
24
|
+
description: 'Drain and inspect newly received relay messages.',
|
|
25
|
+
parameters: { type: 'object', properties: {}, required: [] },
|
|
26
|
+
async execute() {
|
|
27
|
+
return { result: formatRelayInbox(await relay.inbox()) };
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'relay_post',
|
|
32
|
+
description: 'Post a message to a relay channel.',
|
|
33
|
+
parameters: { type: 'object', properties: { channel: { type: 'string' }, text: { type: 'string' } }, required: ['channel', 'text'] },
|
|
34
|
+
async execute(input) {
|
|
35
|
+
await relay.post(input.channel, input.text);
|
|
36
|
+
return { result: `Posted relay message to #${input.channel}.` };
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'relay_agents',
|
|
41
|
+
description: 'List currently online relay agents.',
|
|
42
|
+
parameters: { type: 'object', properties: {}, required: [] },
|
|
43
|
+
async execute() {
|
|
44
|
+
return { result: (await relay.agents()).join('\n') };
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
return toolDefs;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Attach relay communication tools and message routing to a Google ADK agent.
|
|
52
|
+
* @param name - Agent name for relay registration.
|
|
53
|
+
* @param options - Google ADK agent and optional runner configuration.
|
|
54
|
+
* @param relay - Optional pre-configured Relay instance.
|
|
55
|
+
* @returns Object with the augmented agent, an unsubscribe function, and the relay tools added.
|
|
56
|
+
*/
|
|
57
|
+
export function onRelay(name, options, relay = new Relay(name)) {
|
|
58
|
+
const { agent, runner, userId = 'relay', sessionId = 'relay-session' } = options;
|
|
59
|
+
const relayTools = createRelayFunctionTools(relay);
|
|
60
|
+
// Append relay tools to the agent's tool list
|
|
61
|
+
for (const tool of relayTools) {
|
|
62
|
+
agent.tools.push(tool);
|
|
63
|
+
}
|
|
64
|
+
let unsubscribe = () => { };
|
|
65
|
+
if (runner) {
|
|
66
|
+
unsubscribe = relay.onMessage(async (message) => {
|
|
67
|
+
const prompt = formatRelayMessage(message);
|
|
68
|
+
const content = { role: 'user', parts: [{ text: prompt }] };
|
|
69
|
+
// Drain the async generator to completion
|
|
70
|
+
for await (const _event of runner.runAsync({ userId, sessionId, newMessage: content })) {
|
|
71
|
+
// Events are consumed; the agent handles them internally.
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return { agent, tools: relayTools, unsubscribe };
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=google-adk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-adk.js","sourceRoot":"","sources":["../../../src/communicate/adapters/google-adk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { onRelay as onPiRelay } from './pi.js';
|
|
2
|
+
export { onRelay as onClaudeRelay } from './claude-sdk.js';
|
|
3
|
+
export { onRelay as onCrewAIRelay, onCrewRelay } from './crewai.js';
|
|
4
|
+
export { onRelay as onOpenAIAgentsRelay } from './openai-agents.js';
|
|
5
|
+
export { onRelay as onLangGraphRelay } from './langgraph.js';
|
|
6
|
+
export { onRelay as onGoogleAdkRelay } from './google-adk.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/communicate/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { onRelay as onPiRelay } from './pi.js';
|
|
2
|
+
export { onRelay as onClaudeRelay } from './claude-sdk.js';
|
|
3
|
+
export { onRelay as onCrewAIRelay, onCrewRelay } from './crewai.js';
|
|
4
|
+
export { onRelay as onOpenAIAgentsRelay } from './openai-agents.js';
|
|
5
|
+
export { onRelay as onLangGraphRelay } from './langgraph.js';
|
|
6
|
+
export { onRelay as onGoogleAdkRelay } from './google-adk.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/communicate/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type Message, type MessageCallback } from '../types.js';
|
|
2
|
+
/** Minimal shape of a LangGraph CompiledStateGraph for relay integration. */
|
|
3
|
+
type CompiledGraphLike = {
|
|
4
|
+
invoke(input: Record<string, unknown>, config?: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
5
|
+
nodes: Record<string, unknown>;
|
|
6
|
+
};
|
|
7
|
+
type RelayLike = {
|
|
8
|
+
send(to: string, text: string): Promise<void>;
|
|
9
|
+
post(channel: string, text: string): Promise<void>;
|
|
10
|
+
inbox(): Promise<Message[]>;
|
|
11
|
+
agents(): Promise<string[]>;
|
|
12
|
+
onMessage(callback: MessageCallback): () => void;
|
|
13
|
+
};
|
|
14
|
+
/** A tool definition compatible with LangGraph ToolNode. */
|
|
15
|
+
export interface RelayToolDef {
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
schema: Record<string, unknown>;
|
|
19
|
+
invoke(input: Record<string, string>): Promise<string>;
|
|
20
|
+
}
|
|
21
|
+
export interface LangGraphRelayResult {
|
|
22
|
+
/** Relay tool definitions to pass to a LangGraph ToolNode. */
|
|
23
|
+
tools: RelayToolDef[];
|
|
24
|
+
/** Unsubscribe from incoming relay messages. */
|
|
25
|
+
unsubscribe: () => void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Attach relay communication tools and message routing to a LangGraph compiled graph.
|
|
29
|
+
*
|
|
30
|
+
* Tools are returned as objects compatible with LangGraph's ToolNode. Incoming
|
|
31
|
+
* relay messages are routed into the graph via `graph.invoke()` with a
|
|
32
|
+
* `messages` state update.
|
|
33
|
+
*
|
|
34
|
+
* @param graph - A compiled LangGraph state graph.
|
|
35
|
+
* @param relayOrName - Optional pre-configured Relay instance or agent name string (defaults to 'langgraph').
|
|
36
|
+
* @returns Relay tools and an unsubscribe handle.
|
|
37
|
+
*/
|
|
38
|
+
export declare function onRelay(graph: CompiledGraphLike, relayOrName?: RelayLike | string): LangGraphRelayResult;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=langgraph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langgraph.d.ts","sourceRoot":"","sources":["../../../src/communicate/adapters/langgraph.ts"],"names":[],"mappings":"AACA,OAAO,EAAwC,KAAK,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvG,6EAA6E;AAC7E,KAAK,iBAAiB,GAAG;IACvB,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3G,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5B,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5B,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,IAAI,CAAC;CAClD,CAAC;AAEF,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACxD;AAuDD,MAAM,WAAW,oBAAoB;IACnC,8DAA8D;IAC9D,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,gDAAgD;IAChD,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CACrB,KAAK,EAAE,iBAAiB,EACxB,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,GAC/B,oBAAoB,CAYtB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Relay } from '../core.js';
|
|
2
|
+
import { formatRelayInbox, formatRelayMessage } from '../types.js';
|
|
3
|
+
function createRelayTools(relay) {
|
|
4
|
+
return [
|
|
5
|
+
{
|
|
6
|
+
name: 'relay_send',
|
|
7
|
+
description: 'Send a direct message to another relay agent.',
|
|
8
|
+
schema: {
|
|
9
|
+
type: 'object',
|
|
10
|
+
properties: {
|
|
11
|
+
to: { type: 'string', description: 'Recipient agent name' },
|
|
12
|
+
text: { type: 'string', description: 'Message text' },
|
|
13
|
+
},
|
|
14
|
+
required: ['to', 'text'],
|
|
15
|
+
},
|
|
16
|
+
async invoke(input) {
|
|
17
|
+
await relay.send(input.to, input.text);
|
|
18
|
+
return `Sent relay message to ${input.to}.`;
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'relay_inbox',
|
|
23
|
+
description: 'Drain and inspect newly received relay messages.',
|
|
24
|
+
schema: { type: 'object', properties: {}, required: [] },
|
|
25
|
+
async invoke() {
|
|
26
|
+
return formatRelayInbox(await relay.inbox());
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'relay_post',
|
|
31
|
+
description: 'Post a message to a relay channel.',
|
|
32
|
+
schema: {
|
|
33
|
+
type: 'object',
|
|
34
|
+
properties: {
|
|
35
|
+
channel: { type: 'string', description: 'Channel name' },
|
|
36
|
+
text: { type: 'string', description: 'Message text' },
|
|
37
|
+
},
|
|
38
|
+
required: ['channel', 'text'],
|
|
39
|
+
},
|
|
40
|
+
async invoke(input) {
|
|
41
|
+
await relay.post(input.channel, input.text);
|
|
42
|
+
return `Posted relay message to #${input.channel}.`;
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'relay_agents',
|
|
47
|
+
description: 'List currently online relay agents.',
|
|
48
|
+
schema: { type: 'object', properties: {}, required: [] },
|
|
49
|
+
async invoke() {
|
|
50
|
+
return (await relay.agents()).join('\n');
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Attach relay communication tools and message routing to a LangGraph compiled graph.
|
|
57
|
+
*
|
|
58
|
+
* Tools are returned as objects compatible with LangGraph's ToolNode. Incoming
|
|
59
|
+
* relay messages are routed into the graph via `graph.invoke()` with a
|
|
60
|
+
* `messages` state update.
|
|
61
|
+
*
|
|
62
|
+
* @param graph - A compiled LangGraph state graph.
|
|
63
|
+
* @param relayOrName - Optional pre-configured Relay instance or agent name string (defaults to 'langgraph').
|
|
64
|
+
* @returns Relay tools and an unsubscribe handle.
|
|
65
|
+
*/
|
|
66
|
+
export function onRelay(graph, relayOrName) {
|
|
67
|
+
const r = typeof relayOrName === 'string'
|
|
68
|
+
? new Relay(relayOrName)
|
|
69
|
+
: relayOrName ?? new Relay('langgraph');
|
|
70
|
+
const tools = createRelayTools(r);
|
|
71
|
+
const unsubscribe = r.onMessage(async (message) => {
|
|
72
|
+
const prompt = formatRelayMessage(message);
|
|
73
|
+
await graph.invoke({ messages: [{ role: 'user', content: prompt }] });
|
|
74
|
+
});
|
|
75
|
+
return { tools, unsubscribe };
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=langgraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langgraph.js","sourceRoot":"","sources":["../../../src/communicate/adapters/langgraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type Message, type MessageCallback } from '../types.js';
|
|
2
|
+
type RelayLike = {
|
|
3
|
+
send(to: string, text: string): Promise<void>;
|
|
4
|
+
post(channel: string, text: string): Promise<void>;
|
|
5
|
+
inbox(): Promise<Message[]>;
|
|
6
|
+
agents(): Promise<string[]>;
|
|
7
|
+
onMessage(callback: MessageCallback): () => void;
|
|
8
|
+
};
|
|
9
|
+
type AgentLike = {
|
|
10
|
+
name: string;
|
|
11
|
+
instructions: string | ((...args: unknown[]) => string | Promise<string>);
|
|
12
|
+
tools: unknown[];
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Attach relay communication tools and message routing to an OpenAI Agent.
|
|
16
|
+
* @param agent - OpenAI Agent instance to augment with relay tools.
|
|
17
|
+
* @param relay - Optional pre-configured Relay instance.
|
|
18
|
+
* @returns Object with the augmented agent and a cleanup function.
|
|
19
|
+
*/
|
|
20
|
+
export declare function onRelay<TAgent extends AgentLike>(agent: TAgent, relay?: RelayLike): {
|
|
21
|
+
agent: TAgent;
|
|
22
|
+
cleanup: () => void;
|
|
23
|
+
};
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=openai-agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-agents.d.ts","sourceRoot":"","sources":["../../../src/communicate/adapters/openai-agents.ts"],"names":[],"mappings":"AACA,OAAO,EAAwC,KAAK,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvG,KAAK,SAAS,GAAG;IACf,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5B,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5B,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,IAAI,CAAC;CAClD,CAAC;AAoBF,KAAK,SAAS,GAAG;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB,CAAC;AAqCF;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,MAAM,SAAS,SAAS,EAC9C,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,SAAiC,GACvC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CAiCxC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Relay } from '../core.js';
|
|
2
|
+
import { formatRelayInbox, formatRelayMessage } from '../types.js';
|
|
3
|
+
function schema(props, required) {
|
|
4
|
+
return { type: 'object', properties: props, required, additionalProperties: false };
|
|
5
|
+
}
|
|
6
|
+
function createRelayTools(relay) {
|
|
7
|
+
const defs = [
|
|
8
|
+
['relay_send', 'Send a direct message to another relay agent.',
|
|
9
|
+
schema({ to: { type: 'string' }, text: { type: 'string' } }, ['to', 'text']),
|
|
10
|
+
async (p) => { await relay.send(p.to, p.text); return `Sent relay message to ${p.to}.`; }],
|
|
11
|
+
['relay_inbox', 'Drain and inspect newly received relay messages.',
|
|
12
|
+
schema({}, []),
|
|
13
|
+
async () => formatRelayInbox(await relay.inbox())],
|
|
14
|
+
['relay_post', 'Post a message to a relay channel.',
|
|
15
|
+
schema({ channel: { type: 'string' }, text: { type: 'string' } }, ['channel', 'text']),
|
|
16
|
+
async (p) => { await relay.post(p.channel, p.text); return `Posted relay message to #${p.channel}.`; }],
|
|
17
|
+
['relay_agents', 'List currently online relay agents.',
|
|
18
|
+
schema({}, []),
|
|
19
|
+
async () => (await relay.agents()).join('\n')],
|
|
20
|
+
];
|
|
21
|
+
return defs.map(([name, description, parameters, run]) => ({
|
|
22
|
+
type: 'function',
|
|
23
|
+
name,
|
|
24
|
+
description,
|
|
25
|
+
parameters,
|
|
26
|
+
strict: false,
|
|
27
|
+
needsApproval: false,
|
|
28
|
+
isEnabled: true,
|
|
29
|
+
async invoke(_runContext, input) {
|
|
30
|
+
const params = input ? JSON.parse(input) : {};
|
|
31
|
+
return run(params);
|
|
32
|
+
},
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Attach relay communication tools and message routing to an OpenAI Agent.
|
|
37
|
+
* @param agent - OpenAI Agent instance to augment with relay tools.
|
|
38
|
+
* @param relay - Optional pre-configured Relay instance.
|
|
39
|
+
* @returns Object with the augmented agent and a cleanup function.
|
|
40
|
+
*/
|
|
41
|
+
export function onRelay(agent, relay = new Relay(agent.name)) {
|
|
42
|
+
const relayTools = createRelayTools(relay);
|
|
43
|
+
agent.tools = [...agent.tools, ...relayTools];
|
|
44
|
+
const pendingMessages = [];
|
|
45
|
+
const originalInstructions = agent.instructions;
|
|
46
|
+
const unsubscribe = relay.onMessage(async (message) => {
|
|
47
|
+
pendingMessages.push(formatRelayMessage(message));
|
|
48
|
+
});
|
|
49
|
+
agent.instructions = async (...args) => {
|
|
50
|
+
let base;
|
|
51
|
+
if (typeof originalInstructions === 'function') {
|
|
52
|
+
base = await originalInstructions(...args);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
base = originalInstructions ?? '';
|
|
56
|
+
}
|
|
57
|
+
if (pendingMessages.length > 0) {
|
|
58
|
+
const msgs = pendingMessages.splice(0, pendingMessages.length);
|
|
59
|
+
return `${base}\n\n--- Relay Messages ---\n${msgs.join('\n')}`;
|
|
60
|
+
}
|
|
61
|
+
return base;
|
|
62
|
+
};
|
|
63
|
+
const cleanup = () => {
|
|
64
|
+
unsubscribe();
|
|
65
|
+
agent.instructions = originalInstructions;
|
|
66
|
+
agent.tools = agent.tools.filter((t) => !relayTools.includes(t));
|
|
67
|
+
};
|
|
68
|
+
return { agent, cleanup };
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=openai-agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-agents.js","sourceRoot":"","sources":["../../../src/communicate/adapters/openai-agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type Message, type MessageCallback } from '../types.js';
|
|
2
|
+
type ToolResult = {
|
|
3
|
+
content: Array<{
|
|
4
|
+
type: 'text';
|
|
5
|
+
text: string;
|
|
6
|
+
}>;
|
|
7
|
+
details: Record<string, unknown>;
|
|
8
|
+
};
|
|
9
|
+
type RelayTool = {
|
|
10
|
+
name: string;
|
|
11
|
+
label: string;
|
|
12
|
+
description: string;
|
|
13
|
+
parameters: unknown;
|
|
14
|
+
execute: (toolCallId: string, params: any, signal?: AbortSignal, onUpdate?: unknown) => Promise<ToolResult>;
|
|
15
|
+
};
|
|
16
|
+
type PiSessionLike = {
|
|
17
|
+
isStreaming: boolean;
|
|
18
|
+
steer(text: string): Promise<void>;
|
|
19
|
+
followUp(text: string): Promise<void>;
|
|
20
|
+
};
|
|
21
|
+
type PiConfigLike = {
|
|
22
|
+
customTools?: RelayTool[];
|
|
23
|
+
onSessionCreated?: (session: PiSessionLike) => void | Promise<void>;
|
|
24
|
+
};
|
|
25
|
+
type RelayLike = {
|
|
26
|
+
send(to: string, text: string): Promise<void>;
|
|
27
|
+
post(channel: string, text: string): Promise<void>;
|
|
28
|
+
inbox(): Promise<Message[]>;
|
|
29
|
+
agents(): Promise<string[]>;
|
|
30
|
+
onMessage(callback: MessageCallback): () => void;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Attach relay communication tools and message routing to a Pi agent config.
|
|
34
|
+
* @param name - Agent name for relay registration.
|
|
35
|
+
* @param config - Pi agent session config to augment.
|
|
36
|
+
* @param relay - Optional pre-configured Relay instance.
|
|
37
|
+
* @returns Augmented config with relay tools and session hook.
|
|
38
|
+
*/
|
|
39
|
+
export declare function onRelay<TConfig extends PiConfigLike>(name: string, config: TConfig, relay?: RelayLike): TConfig & {
|
|
40
|
+
customTools: RelayTool[];
|
|
41
|
+
onSessionCreated: (session: PiSessionLike) => Promise<void>;
|
|
42
|
+
cleanup: () => void;
|
|
43
|
+
};
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=pi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../../src/communicate/adapters/pi.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwC,KAAK,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvG,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,CACP,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,GAAG,EACX,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,OAAO,KACf,OAAO,CAAC,UAAU,CAAC,CAAC;CAC1B,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5B,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5B,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,IAAI,CAAC;CAClD,CAAC;AAyBF;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,OAAO,SAAS,YAAY,EAClD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EACf,KAAK,GAAE,SAA2B,GACjC,OAAO,GAAG;IAAE,WAAW,EAAE,SAAS,EAAE,CAAC;IAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CA4B1H"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Type } from '@sinclair/typebox';
|
|
2
|
+
import { Relay } from '../core.js';
|
|
3
|
+
import { formatRelayInbox, formatRelayMessage } from '../types.js';
|
|
4
|
+
const txt = (text) => ({ content: [{ type: 'text', text }], details: {} });
|
|
5
|
+
function createRelayTools(relay) {
|
|
6
|
+
const toolDefs = [
|
|
7
|
+
['relay_send', 'Send a direct message to another relay agent.',
|
|
8
|
+
Type.Object({ to: Type.String(), text: Type.String() }),
|
|
9
|
+
async (p) => { await relay.send(p.to, p.text); return `Sent relay message to ${p.to}.`; }],
|
|
10
|
+
['relay_inbox', 'Drain and inspect newly received relay messages.',
|
|
11
|
+
Type.Object({}),
|
|
12
|
+
async () => formatRelayInbox(await relay.inbox())],
|
|
13
|
+
['relay_post', 'Post a message to a relay channel.',
|
|
14
|
+
Type.Object({ channel: Type.String(), text: Type.String() }),
|
|
15
|
+
async (p) => { await relay.post(p.channel, p.text); return `Posted relay message to #${p.channel}.`; }],
|
|
16
|
+
['relay_agents', 'List currently online relay agents.',
|
|
17
|
+
Type.Object({}),
|
|
18
|
+
async () => (await relay.agents()).join('\n')],
|
|
19
|
+
];
|
|
20
|
+
return toolDefs.map(([name, description, parameters, run]) => ({
|
|
21
|
+
name, label: name.replace('_', ' '), description, parameters,
|
|
22
|
+
async execute(_id, params) { return txt(await run(params)); },
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Attach relay communication tools and message routing to a Pi agent config.
|
|
27
|
+
* @param name - Agent name for relay registration.
|
|
28
|
+
* @param config - Pi agent session config to augment.
|
|
29
|
+
* @param relay - Optional pre-configured Relay instance.
|
|
30
|
+
* @returns Augmented config with relay tools and session hook.
|
|
31
|
+
*/
|
|
32
|
+
export function onRelay(name, config, relay = new Relay(name)) {
|
|
33
|
+
const customTools = [...(config.customTools ?? []), ...createRelayTools(relay)];
|
|
34
|
+
const originalOnSessionCreated = config.onSessionCreated;
|
|
35
|
+
let unsubscribe;
|
|
36
|
+
return {
|
|
37
|
+
...config,
|
|
38
|
+
customTools,
|
|
39
|
+
async onSessionCreated(session) {
|
|
40
|
+
if (originalOnSessionCreated) {
|
|
41
|
+
await originalOnSessionCreated(session);
|
|
42
|
+
}
|
|
43
|
+
unsubscribe?.();
|
|
44
|
+
unsubscribe = relay.onMessage(async (message) => {
|
|
45
|
+
const prompt = formatRelayMessage(message);
|
|
46
|
+
if (session.isStreaming) {
|
|
47
|
+
await session.steer(prompt);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
await session.followUp(prompt);
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
cleanup() {
|
|
54
|
+
unsubscribe?.();
|
|
55
|
+
unsubscribe = undefined;
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=pi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi.js","sourceRoot":"","sources":["../../../src/communicate/adapters/pi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { RelayTransport } from './transport.js';
|
|
2
|
+
import { type Message, type MessageCallback, type RelayConfig } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Core relay client for inter-agent communication.
|
|
5
|
+
*
|
|
6
|
+
* Lazily connects on first API call. Buffers incoming WebSocket messages
|
|
7
|
+
* for {@link inbox} when no callbacks are registered.
|
|
8
|
+
*/
|
|
9
|
+
export declare class Relay {
|
|
10
|
+
readonly agentName: string;
|
|
11
|
+
readonly config: import("./types.js").ResolvedRelayConfig;
|
|
12
|
+
readonly transport: RelayTransport;
|
|
13
|
+
private pending;
|
|
14
|
+
private callbacks;
|
|
15
|
+
private connectPromise?;
|
|
16
|
+
private connected;
|
|
17
|
+
private readonly exitHandler?;
|
|
18
|
+
constructor(agentName: string, config?: RelayConfig);
|
|
19
|
+
/**
|
|
20
|
+
* Send a direct message to another agent.
|
|
21
|
+
* @param to - Recipient agent name.
|
|
22
|
+
* @param text - Message content.
|
|
23
|
+
*/
|
|
24
|
+
send(to: string, text: string): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Post a message to a channel.
|
|
27
|
+
* @param channel - Target channel name.
|
|
28
|
+
* @param text - Message content.
|
|
29
|
+
*/
|
|
30
|
+
post(channel: string, text: string): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Reply to a specific message in a thread.
|
|
33
|
+
* @param messageId - ID of the message to reply to.
|
|
34
|
+
* @param text - Reply content.
|
|
35
|
+
*/
|
|
36
|
+
reply(messageId: string, text: string): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Drain and return all buffered messages, clearing the buffer.
|
|
39
|
+
* @returns Array of buffered messages.
|
|
40
|
+
*/
|
|
41
|
+
inbox(): Promise<Message[]>;
|
|
42
|
+
/**
|
|
43
|
+
* Register a callback for incoming messages.
|
|
44
|
+
* @param callback - Invoked for each received message.
|
|
45
|
+
* @returns Unsubscribe function.
|
|
46
|
+
*/
|
|
47
|
+
onMessage(callback: MessageCallback): () => void;
|
|
48
|
+
/**
|
|
49
|
+
* List currently online agents.
|
|
50
|
+
* @returns Array of agent names.
|
|
51
|
+
*/
|
|
52
|
+
agents(): Promise<string[]>;
|
|
53
|
+
/** Unregister the agent, close the WebSocket, and clean up. */
|
|
54
|
+
close(): Promise<void>;
|
|
55
|
+
private ensureConnected;
|
|
56
|
+
private handleTransportMessage;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/communicate/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,WAAW,EAEjB,MAAM,YAAY,CAAC;AAIpB;;;;;GAKG;AACH,qBAAa,KAAK;IAChB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,2CAAC;IAChB,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IAEnC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,cAAc,CAAC,CAAgB;IACvC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAa;gBAE9B,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,WAAgB;IAgBvD;;;;OAIG;IACG,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnD;;;;OAIG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxD;;;;OAIG;IACG,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAOjC;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,IAAI;IAShD;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAKjC,+DAA+D;IACzD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAYd,eAAe;YAqBf,sBAAsB;CAerC"}
|