agent-relay 3.2.3 → 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/dist/index.cjs +265 -108
- package/package.json +11 -10
- package/packages/acp-bridge/package.json +2 -2
- package/packages/config/package.json +1 -1
- package/packages/hooks/package.json +4 -4
- package/packages/memory/package.json +2 -2
- package/packages/openclaw/package.json +2 -2
- package/packages/policy/package.json +2 -2
- package/packages/sdk/ADAPTER_REVIEW.md +109 -0
- package/packages/sdk/dist/communicate/a2a-bridge.d.ts +25 -0
- package/packages/sdk/dist/communicate/a2a-bridge.d.ts.map +1 -0
- package/packages/sdk/dist/communicate/a2a-bridge.js +89 -0
- package/packages/sdk/dist/communicate/a2a-bridge.js.map +1 -0
- package/packages/sdk/dist/communicate/a2a-server.d.ts +31 -0
- package/packages/sdk/dist/communicate/a2a-server.d.ts.map +1 -0
- package/packages/sdk/dist/communicate/a2a-server.js +220 -0
- package/packages/sdk/dist/communicate/a2a-server.js.map +1 -0
- package/packages/sdk/dist/communicate/a2a-transport.d.ts +48 -0
- package/packages/sdk/dist/communicate/a2a-transport.d.ts.map +1 -0
- package/packages/sdk/dist/communicate/a2a-transport.js +302 -0
- package/packages/sdk/dist/communicate/a2a-transport.js.map +1 -0
- package/packages/sdk/dist/communicate/a2a-types.d.ts +107 -0
- package/packages/sdk/dist/communicate/a2a-types.d.ts.map +1 -0
- package/packages/sdk/dist/communicate/a2a-types.js +209 -0
- package/packages/sdk/dist/communicate/a2a-types.js.map +1 -0
- package/packages/sdk/dist/communicate/adapters/claude-sdk.d.ts +28 -0
- package/packages/sdk/dist/communicate/adapters/claude-sdk.d.ts.map +1 -0
- package/packages/sdk/dist/communicate/adapters/claude-sdk.js +47 -0
- package/packages/sdk/dist/communicate/adapters/claude-sdk.js.map +1 -0
- package/packages/sdk/dist/communicate/adapters/crewai.d.ts +42 -0
- package/packages/sdk/dist/communicate/adapters/crewai.d.ts.map +1 -0
- package/packages/sdk/dist/communicate/adapters/crewai.js +95 -0
- package/packages/sdk/dist/communicate/adapters/crewai.js.map +1 -0
- package/packages/sdk/dist/communicate/adapters/google-adk.d.ts +53 -0
- package/packages/sdk/dist/communicate/adapters/google-adk.d.ts.map +1 -0
- package/packages/sdk/dist/communicate/adapters/google-adk.js +77 -0
- package/packages/sdk/dist/communicate/adapters/google-adk.js.map +1 -0
- package/packages/sdk/dist/communicate/adapters/index.d.ts +7 -0
- package/packages/sdk/dist/communicate/adapters/index.d.ts.map +1 -0
- package/packages/sdk/dist/communicate/adapters/index.js +7 -0
- package/packages/sdk/dist/communicate/adapters/index.js.map +1 -0
- package/packages/sdk/dist/communicate/adapters/langgraph.d.ts +40 -0
- package/packages/sdk/dist/communicate/adapters/langgraph.d.ts.map +1 -0
- package/packages/sdk/dist/communicate/adapters/langgraph.js +77 -0
- package/packages/sdk/dist/communicate/adapters/langgraph.js.map +1 -0
- package/packages/sdk/dist/communicate/adapters/openai-agents.d.ts +25 -0
- package/packages/sdk/dist/communicate/adapters/openai-agents.d.ts.map +1 -0
- package/packages/sdk/dist/communicate/adapters/openai-agents.js +70 -0
- package/packages/sdk/dist/communicate/adapters/openai-agents.js.map +1 -0
- package/packages/sdk/dist/communicate/adapters/pi.d.ts +45 -0
- package/packages/sdk/dist/communicate/adapters/pi.d.ts.map +1 -0
- package/packages/sdk/dist/communicate/adapters/pi.js +59 -0
- package/packages/sdk/dist/communicate/adapters/pi.js.map +1 -0
- package/packages/sdk/dist/communicate/core.d.ts +58 -0
- package/packages/sdk/dist/communicate/core.d.ts.map +1 -0
- package/packages/sdk/dist/communicate/core.js +128 -0
- package/packages/sdk/dist/communicate/core.js.map +1 -0
- package/packages/sdk/dist/communicate/index.d.ts +4 -0
- package/packages/sdk/dist/communicate/index.d.ts.map +1 -0
- package/packages/sdk/dist/communicate/index.js +4 -0
- package/packages/sdk/dist/communicate/index.js.map +1 -0
- package/packages/sdk/dist/communicate/transport.d.ts +36 -0
- package/packages/sdk/dist/communicate/transport.d.ts.map +1 -0
- package/packages/sdk/dist/communicate/transport.js +371 -0
- package/packages/sdk/dist/communicate/transport.js.map +1 -0
- package/packages/sdk/dist/communicate/types.d.ts +58 -0
- package/packages/sdk/dist/communicate/types.d.ts.map +1 -0
- package/packages/sdk/dist/communicate/types.js +66 -0
- package/packages/sdk/dist/communicate/types.js.map +1 -0
- package/packages/sdk/dist/workflows/builder.d.ts +35 -5
- package/packages/sdk/dist/workflows/builder.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/builder.js +81 -7
- package/packages/sdk/dist/workflows/builder.js.map +1 -1
- package/packages/sdk/dist/workflows/cli.js +14 -1
- package/packages/sdk/dist/workflows/cli.js.map +1 -1
- package/packages/sdk/dist/workflows/runner.d.ts +10 -2
- package/packages/sdk/dist/workflows/runner.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/runner.js +95 -1
- package/packages/sdk/dist/workflows/runner.js.map +1 -1
- package/packages/sdk/dist/workflows/types.d.ts +11 -0
- package/packages/sdk/dist/workflows/types.d.ts.map +1 -1
- package/packages/sdk/examples/communicate/claude_sdk_example.ts +5 -0
- package/packages/sdk/examples/communicate/pi_example.ts +8 -0
- package/packages/sdk/package.json +48 -2
- package/packages/sdk/src/__tests__/builder-deterministic.test.ts +132 -0
- package/packages/sdk/src/__tests__/communicate/a2a-bridge.test.ts +211 -0
- package/packages/sdk/src/__tests__/communicate/a2a-server.test.ts +359 -0
- package/packages/sdk/src/__tests__/communicate/a2a-transport.test.ts +537 -0
- package/packages/sdk/src/__tests__/communicate/a2a-types.test.ts +297 -0
- package/packages/sdk/src/__tests__/communicate/adapters/claude-sdk.test.ts +163 -0
- package/packages/sdk/src/__tests__/communicate/adapters/crewai.test.ts +219 -0
- package/packages/sdk/src/__tests__/communicate/adapters/e2e-crewai.test.ts +101 -0
- package/packages/sdk/src/__tests__/communicate/adapters/e2e-google-adk.test.ts +166 -0
- package/packages/sdk/src/__tests__/communicate/adapters/e2e-langgraph.test.ts +181 -0
- package/packages/sdk/src/__tests__/communicate/adapters/e2e-openai-agents.test.ts +137 -0
- package/packages/sdk/src/__tests__/communicate/adapters/e2e-pi.test.ts +140 -0
- package/packages/sdk/src/__tests__/communicate/adapters/google-adk.test.ts +200 -0
- package/packages/sdk/src/__tests__/communicate/adapters/langgraph.test.ts +162 -0
- package/packages/sdk/src/__tests__/communicate/adapters/openai-agents.test.ts +166 -0
- package/packages/sdk/src/__tests__/communicate/adapters/pi.test.ts +140 -0
- package/packages/sdk/src/__tests__/communicate/core.test.ts +574 -0
- package/packages/sdk/src/__tests__/communicate/integration/cross-framework.test.ts +353 -0
- package/packages/sdk/src/__tests__/communicate/transport.test.ts +613 -0
- package/packages/sdk/src/__tests__/start-from.test.ts +346 -0
- package/packages/sdk/src/communicate/a2a-bridge.ts +111 -0
- package/packages/sdk/src/communicate/a2a-server.ts +277 -0
- package/packages/sdk/src/communicate/a2a-transport.ts +395 -0
- package/packages/sdk/src/communicate/a2a-types.ts +338 -0
- package/packages/sdk/src/communicate/adapters/claude-sdk.ts +85 -0
- package/packages/sdk/src/communicate/adapters/crewai.ts +141 -0
- package/packages/sdk/src/communicate/adapters/google-adk.ts +139 -0
- package/packages/sdk/src/communicate/adapters/index.ts +6 -0
- package/packages/sdk/src/communicate/adapters/langgraph.ts +112 -0
- package/packages/sdk/src/communicate/adapters/openai-agents.ts +113 -0
- package/packages/sdk/src/communicate/adapters/pi.ts +105 -0
- package/packages/sdk/src/communicate/core.ts +157 -0
- package/packages/sdk/src/communicate/index.ts +3 -0
- package/packages/sdk/src/communicate/transport.ts +489 -0
- package/packages/sdk/src/communicate/types.ts +106 -0
- package/packages/sdk/src/examples/workflows/fix-dashboard-user-registration.yaml +182 -0
- package/packages/sdk/src/workflows/builder.ts +97 -9
- package/packages/sdk/src/workflows/cli.ts +16 -1
- package/packages/sdk/src/workflows/runner.ts +110 -1
- package/packages/sdk/src/workflows/types.ts +14 -0
- package/packages/sdk/tsconfig.build.json +1 -7
- package/packages/sdk/tsconfig.json +1 -7
- package/packages/sdk-py/README.md +67 -25
- package/packages/sdk-py/examples/communicate/agno_example.py +8 -0
- package/packages/sdk-py/examples/communicate/claude_sdk_example.py +6 -0
- package/packages/sdk-py/examples/communicate/crewai_example.py +7 -0
- package/packages/sdk-py/examples/communicate/google_adk_example.py +7 -0
- package/packages/sdk-py/examples/communicate/openai_agents_example.py +8 -0
- package/packages/sdk-py/examples/communicate/swarms_example.py +7 -0
- package/packages/sdk-py/pyproject.toml +12 -1
- package/packages/sdk-py/src/agent_relay/__init__.py +8 -0
- package/packages/sdk-py/src/agent_relay/builder.py +65 -26
- package/packages/sdk-py/src/agent_relay/communicate/__init__.py +6 -0
- package/packages/sdk-py/src/agent_relay/communicate/a2a_bridge.py +138 -0
- package/packages/sdk-py/src/agent_relay/communicate/a2a_server.py +242 -0
- package/packages/sdk-py/src/agent_relay/communicate/a2a_transport.py +366 -0
- package/packages/sdk-py/src/agent_relay/communicate/a2a_types.py +294 -0
- package/packages/sdk-py/src/agent_relay/communicate/adapters/__init__.py +10 -0
- package/packages/sdk-py/src/agent_relay/communicate/adapters/agno.py +74 -0
- package/packages/sdk-py/src/agent_relay/communicate/adapters/claude_sdk.py +78 -0
- package/packages/sdk-py/src/agent_relay/communicate/adapters/crewai.py +143 -0
- package/packages/sdk-py/src/agent_relay/communicate/adapters/google_adk.py +69 -0
- package/packages/sdk-py/src/agent_relay/communicate/adapters/openai_agents.py +86 -0
- package/packages/sdk-py/src/agent_relay/communicate/adapters/pi.py +175 -0
- package/packages/sdk-py/src/agent_relay/communicate/adapters/swarms.py +44 -0
- package/packages/sdk-py/src/agent_relay/communicate/core.py +293 -0
- package/packages/sdk-py/src/agent_relay/communicate/transport.py +502 -0
- package/packages/sdk-py/src/agent_relay/communicate/types.py +89 -0
- package/packages/sdk-py/src/agent_relay/types.py +2 -1
- package/packages/sdk-py/tests/communicate/__init__.py +0 -0
- package/packages/sdk-py/tests/communicate/adapters/__init__.py +0 -0
- package/packages/sdk-py/tests/communicate/adapters/e2e_test_agno.py +154 -0
- package/packages/sdk-py/tests/communicate/adapters/e2e_test_claude_sdk.py +428 -0
- package/packages/sdk-py/tests/communicate/adapters/e2e_test_crewai.py +234 -0
- package/packages/sdk-py/tests/communicate/adapters/e2e_test_google_adk.py +182 -0
- package/packages/sdk-py/tests/communicate/adapters/e2e_test_langgraph.py +262 -0
- package/packages/sdk-py/tests/communicate/adapters/e2e_test_openai_agents.py +88 -0
- package/packages/sdk-py/tests/communicate/adapters/e2e_test_pi.py +156 -0
- package/packages/sdk-py/tests/communicate/adapters/e2e_test_swarms.py +239 -0
- package/packages/sdk-py/tests/communicate/adapters/test_agno.py +140 -0
- package/packages/sdk-py/tests/communicate/adapters/test_claude_sdk.py +147 -0
- package/packages/sdk-py/tests/communicate/adapters/test_crewai.py +136 -0
- package/packages/sdk-py/tests/communicate/adapters/test_google_adk.py +125 -0
- package/packages/sdk-py/tests/communicate/adapters/test_openai_agents.py +99 -0
- package/packages/sdk-py/tests/communicate/adapters/test_pi.py +270 -0
- package/packages/sdk-py/tests/communicate/adapters/test_swarms.py +113 -0
- package/packages/sdk-py/tests/communicate/conftest.py +555 -0
- package/packages/sdk-py/tests/communicate/integration/__init__.py +1 -0
- package/packages/sdk-py/tests/communicate/integration/test_cross_framework.py +331 -0
- package/packages/sdk-py/tests/communicate/integration/test_end_to_end.py +151 -0
- package/packages/sdk-py/tests/communicate/test_a2a_bridge.py +363 -0
- package/packages/sdk-py/tests/communicate/test_a2a_server.py +346 -0
- package/packages/sdk-py/tests/communicate/test_a2a_transport.py +561 -0
- package/packages/sdk-py/tests/communicate/test_a2a_types.py +342 -0
- package/packages/sdk-py/tests/communicate/test_auto_detect.py +67 -0
- package/packages/sdk-py/tests/communicate/test_core.py +331 -0
- package/packages/sdk-py/tests/communicate/test_transport.py +373 -0
- package/packages/sdk-py/tests/communicate/test_types.py +285 -0
- package/packages/sdk-py/tests/test_builder_deterministic.py +118 -0
- package/packages/telemetry/package.json +1 -1
- package/packages/trajectory/package.json +2 -2
- package/packages/user-directory/package.json +2 -2
- package/packages/utils/package.json +2 -2
- package/packages/sdk/dist/__tests__/completion-pipeline.test.d.ts +0 -14
- package/packages/sdk/dist/__tests__/completion-pipeline.test.d.ts.map +0 -1
- package/packages/sdk/dist/__tests__/completion-pipeline.test.js +0 -1476
- package/packages/sdk/dist/__tests__/completion-pipeline.test.js.map +0 -1
- package/packages/sdk/dist/__tests__/contract-fixtures.test.d.ts +0 -2
- package/packages/sdk/dist/__tests__/contract-fixtures.test.d.ts.map +0 -1
- package/packages/sdk/dist/__tests__/contract-fixtures.test.js +0 -152
- package/packages/sdk/dist/__tests__/contract-fixtures.test.js.map +0 -1
- package/packages/sdk/dist/__tests__/e2e-owner-review.test.d.ts +0 -16
- package/packages/sdk/dist/__tests__/e2e-owner-review.test.d.ts.map +0 -1
- package/packages/sdk/dist/__tests__/e2e-owner-review.test.js +0 -640
- package/packages/sdk/dist/__tests__/e2e-owner-review.test.js.map +0 -1
- package/packages/sdk/dist/__tests__/facade.test.d.ts +0 -2
- package/packages/sdk/dist/__tests__/facade.test.d.ts.map +0 -1
- package/packages/sdk/dist/__tests__/facade.test.js +0 -305
- package/packages/sdk/dist/__tests__/facade.test.js.map +0 -1
- package/packages/sdk/dist/__tests__/integration.test.d.ts +0 -2
- package/packages/sdk/dist/__tests__/integration.test.d.ts.map +0 -1
- package/packages/sdk/dist/__tests__/integration.test.js +0 -205
- package/packages/sdk/dist/__tests__/integration.test.js.map +0 -1
- package/packages/sdk/dist/__tests__/pty.test.d.ts +0 -2
- package/packages/sdk/dist/__tests__/pty.test.d.ts.map +0 -1
- package/packages/sdk/dist/__tests__/pty.test.js +0 -20
- package/packages/sdk/dist/__tests__/pty.test.js.map +0 -1
- package/packages/sdk/dist/__tests__/quickstart.test.d.ts +0 -2
- package/packages/sdk/dist/__tests__/quickstart.test.d.ts.map +0 -1
- package/packages/sdk/dist/__tests__/quickstart.test.js +0 -176
- package/packages/sdk/dist/__tests__/quickstart.test.js.map +0 -1
- package/packages/sdk/dist/__tests__/spawn-from-env.test.d.ts +0 -2
- package/packages/sdk/dist/__tests__/spawn-from-env.test.d.ts.map +0 -1
- package/packages/sdk/dist/__tests__/spawn-from-env.test.js +0 -222
- package/packages/sdk/dist/__tests__/spawn-from-env.test.js.map +0 -1
- package/packages/sdk/dist/__tests__/unit.test.d.ts +0 -2
- package/packages/sdk/dist/__tests__/unit.test.d.ts.map +0 -1
- package/packages/sdk/dist/__tests__/unit.test.js +0 -357
- package/packages/sdk/dist/__tests__/unit.test.js.map +0 -1
- package/packages/sdk-py/agent_relay/__init__.py +0 -21
- package/packages/sdk-py/agent_relay/models.py +0 -398
|
@@ -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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { RelayTransport } from './transport.js';
|
|
2
|
+
import { resolveRelayConfig, } from './types.js';
|
|
3
|
+
const MAX_PENDING_MESSAGES = 10_000;
|
|
4
|
+
/**
|
|
5
|
+
* Core relay client for inter-agent communication.
|
|
6
|
+
*
|
|
7
|
+
* Lazily connects on first API call. Buffers incoming WebSocket messages
|
|
8
|
+
* for {@link inbox} when no callbacks are registered.
|
|
9
|
+
*/
|
|
10
|
+
export class Relay {
|
|
11
|
+
agentName;
|
|
12
|
+
config;
|
|
13
|
+
transport;
|
|
14
|
+
pending = [];
|
|
15
|
+
callbacks = new Set();
|
|
16
|
+
connectPromise;
|
|
17
|
+
connected = false;
|
|
18
|
+
exitHandler;
|
|
19
|
+
constructor(agentName, config = {}) {
|
|
20
|
+
this.agentName = agentName;
|
|
21
|
+
this.config = resolveRelayConfig(config);
|
|
22
|
+
this.transport = new RelayTransport(agentName, this.config);
|
|
23
|
+
this.transport.onWsMessage((message) => this.handleTransportMessage(message));
|
|
24
|
+
if (this.config.autoCleanup) {
|
|
25
|
+
this.exitHandler = () => {
|
|
26
|
+
void this.close();
|
|
27
|
+
};
|
|
28
|
+
process.once('beforeExit', this.exitHandler);
|
|
29
|
+
process.once('SIGTERM', this.exitHandler);
|
|
30
|
+
process.once('SIGINT', this.exitHandler);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Send a direct message to another agent.
|
|
35
|
+
* @param to - Recipient agent name.
|
|
36
|
+
* @param text - Message content.
|
|
37
|
+
*/
|
|
38
|
+
async send(to, text) {
|
|
39
|
+
await this.ensureConnected();
|
|
40
|
+
await this.transport.sendDm(to, text);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Post a message to a channel.
|
|
44
|
+
* @param channel - Target channel name.
|
|
45
|
+
* @param text - Message content.
|
|
46
|
+
*/
|
|
47
|
+
async post(channel, text) {
|
|
48
|
+
await this.ensureConnected();
|
|
49
|
+
await this.transport.postMessage(channel, text);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Reply to a specific message in a thread.
|
|
53
|
+
* @param messageId - ID of the message to reply to.
|
|
54
|
+
* @param text - Reply content.
|
|
55
|
+
*/
|
|
56
|
+
async reply(messageId, text) {
|
|
57
|
+
await this.ensureConnected();
|
|
58
|
+
await this.transport.reply(messageId, text);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Drain and return all buffered messages, clearing the buffer.
|
|
62
|
+
* @returns Array of buffered messages.
|
|
63
|
+
*/
|
|
64
|
+
async inbox() {
|
|
65
|
+
await this.ensureConnected();
|
|
66
|
+
const messages = [...this.pending];
|
|
67
|
+
this.pending = [];
|
|
68
|
+
return messages;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Register a callback for incoming messages.
|
|
72
|
+
* @param callback - Invoked for each received message.
|
|
73
|
+
* @returns Unsubscribe function.
|
|
74
|
+
*/
|
|
75
|
+
onMessage(callback) {
|
|
76
|
+
this.callbacks.add(callback);
|
|
77
|
+
void this.ensureConnected();
|
|
78
|
+
return () => {
|
|
79
|
+
this.callbacks.delete(callback);
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* List currently online agents.
|
|
84
|
+
* @returns Array of agent names.
|
|
85
|
+
*/
|
|
86
|
+
async agents() {
|
|
87
|
+
await this.ensureConnected();
|
|
88
|
+
return this.transport.listAgents();
|
|
89
|
+
}
|
|
90
|
+
/** Unregister the agent, close the WebSocket, and clean up. */
|
|
91
|
+
async close() {
|
|
92
|
+
if (this.exitHandler) {
|
|
93
|
+
process.removeListener('beforeExit', this.exitHandler);
|
|
94
|
+
process.removeListener('SIGTERM', this.exitHandler);
|
|
95
|
+
process.removeListener('SIGINT', this.exitHandler);
|
|
96
|
+
}
|
|
97
|
+
this.connected = false;
|
|
98
|
+
this.connectPromise = undefined;
|
|
99
|
+
await this.transport.disconnect();
|
|
100
|
+
}
|
|
101
|
+
async ensureConnected() {
|
|
102
|
+
if (this.connected) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (!this.connectPromise) {
|
|
106
|
+
this.connectPromise = this.transport.connect().then(() => {
|
|
107
|
+
this.connected = true;
|
|
108
|
+
}, (err) => {
|
|
109
|
+
// Clear cached promise so the next call can retry
|
|
110
|
+
this.connectPromise = undefined;
|
|
111
|
+
throw err;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
await this.connectPromise;
|
|
115
|
+
}
|
|
116
|
+
async handleTransportMessage(message) {
|
|
117
|
+
// Always buffer the message (spec: "both" case — callbacks AND inbox)
|
|
118
|
+
if (this.pending.length >= MAX_PENDING_MESSAGES) {
|
|
119
|
+
this.pending.shift();
|
|
120
|
+
process.emitWarning('Relay pending buffer exceeded 10,000 messages; dropping oldest message.', 'RelayWarning');
|
|
121
|
+
}
|
|
122
|
+
this.pending.push(message);
|
|
123
|
+
for (const callback of [...this.callbacks]) {
|
|
124
|
+
await callback(message);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/communicate/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAIL,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAEpC;;;;;GAKG;AACH,MAAM,OAAO,KAAK;IACP,SAAS,CAAS;IAClB,MAAM,CAAC;IACP,SAAS,CAAiB;IAE3B,OAAO,GAAc,EAAE,CAAC;IACxB,SAAS,GAAG,IAAI,GAAG,EAAmB,CAAC;IACvC,cAAc,CAAiB;IAC/B,SAAS,GAAG,KAAK,CAAC;IACT,WAAW,CAAc;IAE1C,YAAY,SAAiB,EAAE,SAAsB,EAAE;QACrD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;QAE9E,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC5B,IAAI,CAAC,WAAW,GAAG,GAAG,EAAE;gBACtB,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,CAAC,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,EAAU,EAAE,IAAY;QACjC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,IAAY;QACtC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,SAAiB,EAAE,IAAY;QACzC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,QAAyB;QACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;QAE5B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;IAED,+DAA+D;IAC/D,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACvD,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACpD,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,CACjD,GAAG,EAAE;gBACH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACxB,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;gBACN,kDAAkD;gBAClD,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;gBAChC,MAAM,GAAG,CAAC;YACZ,CAAC,CACF,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,OAAgB;QACnD,sEAAsE;QACtE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,oBAAoB,EAAE,CAAC;YAChD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO,CAAC,WAAW,CACjB,yEAAyE,EACzE,cAAc,CACf,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE3B,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3C,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/communicate/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/communicate/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type Message, type MessageCallback, type RelayConfig } from './types.js';
|
|
2
|
+
export declare class RelayTransport {
|
|
3
|
+
readonly agentName: string;
|
|
4
|
+
readonly config: import("./types.js").ResolvedRelayConfig;
|
|
5
|
+
agentId?: string;
|
|
6
|
+
token?: string;
|
|
7
|
+
private ws?;
|
|
8
|
+
private messageCallback?;
|
|
9
|
+
private closing;
|
|
10
|
+
private reconnectDelayMs;
|
|
11
|
+
private reconnectTimer?;
|
|
12
|
+
private wsConnectPromise?;
|
|
13
|
+
constructor(agentName: string, config?: RelayConfig);
|
|
14
|
+
connect(): Promise<void>;
|
|
15
|
+
disconnect(): Promise<void>;
|
|
16
|
+
onWsMessage(callback: MessageCallback): void;
|
|
17
|
+
registerAgent(): Promise<string>;
|
|
18
|
+
unregisterAgent(): Promise<void>;
|
|
19
|
+
sendDm(to: string, text: string): Promise<string>;
|
|
20
|
+
postMessage(channel: string, text: string): Promise<string>;
|
|
21
|
+
reply(messageId: string, text: string): Promise<string>;
|
|
22
|
+
checkInbox(): Promise<Message[]>;
|
|
23
|
+
listAgents(): Promise<string[]>;
|
|
24
|
+
private ensureRegistered;
|
|
25
|
+
private requireConfig;
|
|
26
|
+
private sendHttpAsAgent;
|
|
27
|
+
private sendHttp;
|
|
28
|
+
private connectWebSocket;
|
|
29
|
+
private wsBaseUrl;
|
|
30
|
+
private scheduleReconnect;
|
|
31
|
+
private clearReconnectTimer;
|
|
32
|
+
private dispatchWsPayload;
|
|
33
|
+
private messageFromPayload;
|
|
34
|
+
private errorMessage;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/communicate/transport.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,WAAW,EAKjB,MAAM,YAAY,CAAC;AAOpB,qBAAa,cAAc;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,2CAAC;IAEhB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,OAAO,CAAC,EAAE,CAAC,CAAY;IACvB,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,gBAAgB,CAAC,CAAgB;gBAE7B,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,WAAgB;IAKjD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BjC,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAItC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAwChC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAWhC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOjD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW3D,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWvD,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IA2BhC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YASvB,gBAAgB;IAO9B,OAAO,CAAC,aAAa;YAcP,eAAe;YAiEf,QAAQ;YAiER,gBAAgB;IAsD9B,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,mBAAmB;YAOb,iBAAiB;IAkB/B,OAAO,CAAC,kBAAkB;YAyBZ,YAAY;CAY3B"}
|