@agent-relay/sdk 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.
Files changed (109) hide show
  1. package/dist/communicate/a2a-bridge.d.ts +25 -0
  2. package/dist/communicate/a2a-bridge.d.ts.map +1 -0
  3. package/dist/communicate/a2a-bridge.js +89 -0
  4. package/dist/communicate/a2a-bridge.js.map +1 -0
  5. package/dist/communicate/a2a-server.d.ts +31 -0
  6. package/dist/communicate/a2a-server.d.ts.map +1 -0
  7. package/dist/communicate/a2a-server.js +220 -0
  8. package/dist/communicate/a2a-server.js.map +1 -0
  9. package/dist/communicate/a2a-transport.d.ts +48 -0
  10. package/dist/communicate/a2a-transport.d.ts.map +1 -0
  11. package/dist/communicate/a2a-transport.js +302 -0
  12. package/dist/communicate/a2a-transport.js.map +1 -0
  13. package/dist/communicate/a2a-types.d.ts +107 -0
  14. package/dist/communicate/a2a-types.d.ts.map +1 -0
  15. package/dist/communicate/a2a-types.js +209 -0
  16. package/dist/communicate/a2a-types.js.map +1 -0
  17. package/dist/communicate/adapters/claude-sdk.d.ts +28 -0
  18. package/dist/communicate/adapters/claude-sdk.d.ts.map +1 -0
  19. package/dist/communicate/adapters/claude-sdk.js +47 -0
  20. package/dist/communicate/adapters/claude-sdk.js.map +1 -0
  21. package/dist/communicate/adapters/crewai.d.ts +42 -0
  22. package/dist/communicate/adapters/crewai.d.ts.map +1 -0
  23. package/dist/communicate/adapters/crewai.js +95 -0
  24. package/dist/communicate/adapters/crewai.js.map +1 -0
  25. package/dist/communicate/adapters/google-adk.d.ts +53 -0
  26. package/dist/communicate/adapters/google-adk.d.ts.map +1 -0
  27. package/dist/communicate/adapters/google-adk.js +77 -0
  28. package/dist/communicate/adapters/google-adk.js.map +1 -0
  29. package/dist/communicate/adapters/index.d.ts +7 -0
  30. package/dist/communicate/adapters/index.d.ts.map +1 -0
  31. package/dist/communicate/adapters/index.js +7 -0
  32. package/dist/communicate/adapters/index.js.map +1 -0
  33. package/dist/communicate/adapters/langgraph.d.ts +40 -0
  34. package/dist/communicate/adapters/langgraph.d.ts.map +1 -0
  35. package/dist/communicate/adapters/langgraph.js +77 -0
  36. package/dist/communicate/adapters/langgraph.js.map +1 -0
  37. package/dist/communicate/adapters/openai-agents.d.ts +25 -0
  38. package/dist/communicate/adapters/openai-agents.d.ts.map +1 -0
  39. package/dist/communicate/adapters/openai-agents.js +70 -0
  40. package/dist/communicate/adapters/openai-agents.js.map +1 -0
  41. package/dist/communicate/adapters/pi.d.ts +45 -0
  42. package/dist/communicate/adapters/pi.d.ts.map +1 -0
  43. package/dist/communicate/adapters/pi.js +59 -0
  44. package/dist/communicate/adapters/pi.js.map +1 -0
  45. package/dist/communicate/core.d.ts +58 -0
  46. package/dist/communicate/core.d.ts.map +1 -0
  47. package/dist/communicate/core.js +128 -0
  48. package/dist/communicate/core.js.map +1 -0
  49. package/dist/communicate/index.d.ts +4 -0
  50. package/dist/communicate/index.d.ts.map +1 -0
  51. package/dist/communicate/index.js +4 -0
  52. package/dist/communicate/index.js.map +1 -0
  53. package/dist/communicate/transport.d.ts +36 -0
  54. package/dist/communicate/transport.d.ts.map +1 -0
  55. package/dist/communicate/transport.js +371 -0
  56. package/dist/communicate/transport.js.map +1 -0
  57. package/dist/communicate/types.d.ts +58 -0
  58. package/dist/communicate/types.d.ts.map +1 -0
  59. package/dist/communicate/types.js +66 -0
  60. package/dist/communicate/types.js.map +1 -0
  61. package/dist/workflows/builder.d.ts +35 -5
  62. package/dist/workflows/builder.d.ts.map +1 -1
  63. package/dist/workflows/builder.js +81 -7
  64. package/dist/workflows/builder.js.map +1 -1
  65. package/dist/workflows/cli.js +14 -1
  66. package/dist/workflows/cli.js.map +1 -1
  67. package/dist/workflows/runner.d.ts +10 -2
  68. package/dist/workflows/runner.d.ts.map +1 -1
  69. package/dist/workflows/runner.js +95 -1
  70. package/dist/workflows/runner.js.map +1 -1
  71. package/dist/workflows/types.d.ts +11 -0
  72. package/dist/workflows/types.d.ts.map +1 -1
  73. package/package.json +48 -2
  74. package/dist/__tests__/completion-pipeline.test.d.ts +0 -14
  75. package/dist/__tests__/completion-pipeline.test.d.ts.map +0 -1
  76. package/dist/__tests__/completion-pipeline.test.js +0 -1476
  77. package/dist/__tests__/completion-pipeline.test.js.map +0 -1
  78. package/dist/__tests__/contract-fixtures.test.d.ts +0 -2
  79. package/dist/__tests__/contract-fixtures.test.d.ts.map +0 -1
  80. package/dist/__tests__/contract-fixtures.test.js +0 -152
  81. package/dist/__tests__/contract-fixtures.test.js.map +0 -1
  82. package/dist/__tests__/e2e-owner-review.test.d.ts +0 -16
  83. package/dist/__tests__/e2e-owner-review.test.d.ts.map +0 -1
  84. package/dist/__tests__/e2e-owner-review.test.js +0 -640
  85. package/dist/__tests__/e2e-owner-review.test.js.map +0 -1
  86. package/dist/__tests__/facade.test.d.ts +0 -2
  87. package/dist/__tests__/facade.test.d.ts.map +0 -1
  88. package/dist/__tests__/facade.test.js +0 -305
  89. package/dist/__tests__/facade.test.js.map +0 -1
  90. package/dist/__tests__/integration.test.d.ts +0 -2
  91. package/dist/__tests__/integration.test.d.ts.map +0 -1
  92. package/dist/__tests__/integration.test.js +0 -205
  93. package/dist/__tests__/integration.test.js.map +0 -1
  94. package/dist/__tests__/pty.test.d.ts +0 -2
  95. package/dist/__tests__/pty.test.d.ts.map +0 -1
  96. package/dist/__tests__/pty.test.js +0 -20
  97. package/dist/__tests__/pty.test.js.map +0 -1
  98. package/dist/__tests__/quickstart.test.d.ts +0 -2
  99. package/dist/__tests__/quickstart.test.d.ts.map +0 -1
  100. package/dist/__tests__/quickstart.test.js +0 -176
  101. package/dist/__tests__/quickstart.test.js.map +0 -1
  102. package/dist/__tests__/spawn-from-env.test.d.ts +0 -2
  103. package/dist/__tests__/spawn-from-env.test.d.ts.map +0 -1
  104. package/dist/__tests__/spawn-from-env.test.js +0 -222
  105. package/dist/__tests__/spawn-from-env.test.js.map +0 -1
  106. package/dist/__tests__/unit.test.d.ts +0 -2
  107. package/dist/__tests__/unit.test.d.ts.map +0 -1
  108. package/dist/__tests__/unit.test.js +0 -357
  109. package/dist/__tests__/unit.test.js.map +0 -1
@@ -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":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './types.js';
2
+ export { Relay } from './core.js';
3
+ export { onPiRelay, onClaudeRelay } from './adapters/index.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,4 @@
1
+ export * from './types.js';
2
+ export { Relay } from './core.js';
3
+ export { onPiRelay, onClaudeRelay } from './adapters/index.js';
4
+ //# sourceMappingURL=index.js.map
@@ -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"}