@agent-relay/sdk 3.2.3 → 3.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) 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/models.d.ts +1 -1
  62. package/dist/models.d.ts.map +1 -1
  63. package/dist/models.js +2 -2
  64. package/dist/models.js.map +1 -1
  65. package/dist/workflows/builder.d.ts +35 -5
  66. package/dist/workflows/builder.d.ts.map +1 -1
  67. package/dist/workflows/builder.js +81 -7
  68. package/dist/workflows/builder.js.map +1 -1
  69. package/dist/workflows/cli.js +14 -1
  70. package/dist/workflows/cli.js.map +1 -1
  71. package/dist/workflows/runner.d.ts +10 -2
  72. package/dist/workflows/runner.d.ts.map +1 -1
  73. package/dist/workflows/runner.js +95 -1
  74. package/dist/workflows/runner.js.map +1 -1
  75. package/dist/workflows/types.d.ts +11 -0
  76. package/dist/workflows/types.d.ts.map +1 -1
  77. package/package.json +48 -2
  78. package/dist/__tests__/completion-pipeline.test.d.ts +0 -14
  79. package/dist/__tests__/completion-pipeline.test.d.ts.map +0 -1
  80. package/dist/__tests__/completion-pipeline.test.js +0 -1476
  81. package/dist/__tests__/completion-pipeline.test.js.map +0 -1
  82. package/dist/__tests__/contract-fixtures.test.d.ts +0 -2
  83. package/dist/__tests__/contract-fixtures.test.d.ts.map +0 -1
  84. package/dist/__tests__/contract-fixtures.test.js +0 -152
  85. package/dist/__tests__/contract-fixtures.test.js.map +0 -1
  86. package/dist/__tests__/e2e-owner-review.test.d.ts +0 -16
  87. package/dist/__tests__/e2e-owner-review.test.d.ts.map +0 -1
  88. package/dist/__tests__/e2e-owner-review.test.js +0 -640
  89. package/dist/__tests__/e2e-owner-review.test.js.map +0 -1
  90. package/dist/__tests__/facade.test.d.ts +0 -2
  91. package/dist/__tests__/facade.test.d.ts.map +0 -1
  92. package/dist/__tests__/facade.test.js +0 -305
  93. package/dist/__tests__/facade.test.js.map +0 -1
  94. package/dist/__tests__/integration.test.d.ts +0 -2
  95. package/dist/__tests__/integration.test.d.ts.map +0 -1
  96. package/dist/__tests__/integration.test.js +0 -205
  97. package/dist/__tests__/integration.test.js.map +0 -1
  98. package/dist/__tests__/pty.test.d.ts +0 -2
  99. package/dist/__tests__/pty.test.d.ts.map +0 -1
  100. package/dist/__tests__/pty.test.js +0 -20
  101. package/dist/__tests__/pty.test.js.map +0 -1
  102. package/dist/__tests__/quickstart.test.d.ts +0 -2
  103. package/dist/__tests__/quickstart.test.d.ts.map +0 -1
  104. package/dist/__tests__/quickstart.test.js +0 -176
  105. package/dist/__tests__/quickstart.test.js.map +0 -1
  106. package/dist/__tests__/spawn-from-env.test.d.ts +0 -2
  107. package/dist/__tests__/spawn-from-env.test.d.ts.map +0 -1
  108. package/dist/__tests__/spawn-from-env.test.js +0 -222
  109. package/dist/__tests__/spawn-from-env.test.js.map +0 -1
  110. package/dist/__tests__/unit.test.d.ts +0 -2
  111. package/dist/__tests__/unit.test.d.ts.map +0 -1
  112. package/dist/__tests__/unit.test.js +0 -357
  113. package/dist/__tests__/unit.test.js.map +0 -1
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Bridge that connects an external A2A agent into a Relay workspace.
3
+ *
4
+ * - Registers a proxy agent on the Relay workspace
5
+ * - When Relay messages arrive for the proxy, forwards them as A2A JSON-RPC
6
+ * message/send calls to the external agent
7
+ * - When A2A responses come back, forwards them as Relay DMs
8
+ */
9
+ import { Relay } from './core.js';
10
+ import { type A2AAgentCard } from './a2a-types.js';
11
+ import type { RelayConfig } from './types.js';
12
+ export declare class A2ABridge {
13
+ readonly relay: Relay;
14
+ readonly a2aAgentUrl: string;
15
+ readonly proxyName: string;
16
+ private _agentCard?;
17
+ private _started;
18
+ constructor(relayConfig: RelayConfig, a2aAgentUrl: string, proxyName: string);
19
+ start(): Promise<void>;
20
+ stop(): Promise<void>;
21
+ discoverAgent(): Promise<A2AAgentCard>;
22
+ sendA2AMessage(text: string): Promise<string | null>;
23
+ private _handleRelayMessage;
24
+ }
25
+ //# sourceMappingURL=a2a-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a-bridge.d.ts","sourceRoot":"","sources":["../../src/communicate/a2a-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,KAAK,YAAY,EAElB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAW,WAAW,EAAE,MAAM,YAAY,CAAC;AAEvD,qBAAa,SAAS;IACpB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,OAAO,CAAC,UAAU,CAAC,CAAe;IAClC,OAAO,CAAC,QAAQ,CAAS;gBAGvB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM;IAOb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC;IAQtC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YAkD5C,mBAAmB;CAMlC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Bridge that connects an external A2A agent into a Relay workspace.
3
+ *
4
+ * - Registers a proxy agent on the Relay workspace
5
+ * - When Relay messages arrive for the proxy, forwards them as A2A JSON-RPC
6
+ * message/send calls to the external agent
7
+ * - When A2A responses come back, forwards them as Relay DMs
8
+ */
9
+ import { randomUUID } from 'node:crypto';
10
+ import { Relay } from './core.js';
11
+ import { a2aAgentCardFromDict, } from './a2a-types.js';
12
+ export class A2ABridge {
13
+ relay;
14
+ a2aAgentUrl;
15
+ proxyName;
16
+ _agentCard;
17
+ _started = false;
18
+ constructor(relayConfig, a2aAgentUrl, proxyName) {
19
+ this.relay = new Relay(proxyName, relayConfig);
20
+ this.a2aAgentUrl = a2aAgentUrl.replace(/\/+$/, '');
21
+ this.proxyName = proxyName;
22
+ }
23
+ async start() {
24
+ this.relay.onMessage((msg) => this._handleRelayMessage(msg));
25
+ this._started = true;
26
+ }
27
+ async stop() {
28
+ this._started = false;
29
+ await this.relay.close();
30
+ }
31
+ async discoverAgent() {
32
+ const url = `${this.a2aAgentUrl}/.well-known/agent.json`;
33
+ const response = await fetch(url);
34
+ const data = (await response.json());
35
+ this._agentCard = a2aAgentCardFromDict(data);
36
+ return this._agentCard;
37
+ }
38
+ async sendA2AMessage(text) {
39
+ const a2aMsg = {
40
+ role: 'user',
41
+ parts: [{ text }],
42
+ messageId: randomUUID(),
43
+ };
44
+ const jsonrpcRequest = {
45
+ jsonrpc: '2.0',
46
+ method: 'message/send',
47
+ params: { message: a2aMsg },
48
+ id: randomUUID(),
49
+ };
50
+ const targetUrl = this._agentCard?.url ?? this.a2aAgentUrl;
51
+ const response = await fetch(targetUrl, {
52
+ method: 'POST',
53
+ headers: { 'Content-Type': 'application/json' },
54
+ body: JSON.stringify(jsonrpcRequest),
55
+ });
56
+ const data = (await response.json());
57
+ const result = (data.result ?? {});
58
+ // Extract response text from task status message
59
+ const status = (result.status ?? {});
60
+ const statusMsg = (status.message ?? {});
61
+ const statusParts = (statusMsg.parts ?? []);
62
+ if (statusParts.length > 0) {
63
+ const t = statusParts[0].text;
64
+ if (t)
65
+ return t;
66
+ }
67
+ // Try from messages list
68
+ const messages = (result.messages ?? []);
69
+ for (let i = messages.length - 1; i >= 0; i--) {
70
+ const msg = messages[i];
71
+ if (msg.role === 'agent') {
72
+ const msgParts = (msg.parts ?? []);
73
+ if (msgParts.length > 0) {
74
+ const t = msgParts[0].text;
75
+ if (t)
76
+ return t;
77
+ }
78
+ }
79
+ }
80
+ return null;
81
+ }
82
+ async _handleRelayMessage(msg) {
83
+ const responseText = await this.sendA2AMessage(msg.text);
84
+ if (responseText) {
85
+ await this.relay.send(msg.sender, responseText);
86
+ }
87
+ }
88
+ }
89
+ //# sourceMappingURL=a2a-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a-bridge.js","sourceRoot":"","sources":["../../src/communicate/a2a-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * A2A-compliant HTTP server that exposes a Relay agent as an A2A endpoint.
3
+ *
4
+ * Routes:
5
+ * GET /.well-known/agent.json -> Agent Card
6
+ * POST / -> JSON-RPC 2.0 dispatcher
7
+ */
8
+ import { type A2AAgentCard, type A2AMessage, type A2ASkill, type A2ATask } from './a2a-types.js';
9
+ export type A2AMessageHandler = (msg: A2AMessage) => A2AMessage | null | Promise<A2AMessage | null>;
10
+ export declare class A2AServer {
11
+ readonly agentName: string;
12
+ readonly port: number;
13
+ readonly host: string;
14
+ readonly skills: A2ASkill[];
15
+ readonly tasks: Map<string, A2ATask>;
16
+ private _onMessage?;
17
+ private _server?;
18
+ private _actualPort?;
19
+ constructor(agentName: string, port?: number, host?: string, skills?: A2ASkill[]);
20
+ get url(): string;
21
+ onMessage(callback: A2AMessageHandler): void;
22
+ getAgentCard(): A2AAgentCard;
23
+ handleMessageSend(params: Record<string, unknown>): Promise<Record<string, unknown>>;
24
+ handleTasksGet(taskId: string): Promise<Record<string, unknown>>;
25
+ handleTasksCancel(taskId: string): Promise<Record<string, unknown>>;
26
+ start(): Promise<void>;
27
+ stop(): Promise<void>;
28
+ private _handleRequest;
29
+ private _handleJsonRpc;
30
+ }
31
+ //# sourceMappingURL=a2a-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a-server.d.ts","sourceRoot":"","sources":["../../src/communicate/a2a-server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,UAAU,EAEf,KAAK,QAAQ,EACb,KAAK,OAAO,EAMb,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,iBAAiB,GAAG,CAC9B,GAAG,EAAE,UAAU,KACZ,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;AAEpD,qBAAa,SAAS;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAa;IAEjD,OAAO,CAAC,UAAU,CAAC,CAAoB;IACvC,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,WAAW,CAAC,CAAS;gBAG3B,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,MAAa,EACnB,IAAI,GAAE,MAAkB,EACxB,MAAM,GAAE,QAAQ,EAAO;IAQzB,IAAI,GAAG,IAAI,MAAM,CAGhB;IAED,SAAS,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAI5C,YAAY,IAAI,YAAY;IAStB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAkDpF,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAQhE,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IASnE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAYb,cAAc;YAiBd,cAAc;CAyD7B"}
@@ -0,0 +1,220 @@
1
+ /**
2
+ * A2A-compliant HTTP server that exposes a Relay agent as an A2A endpoint.
3
+ *
4
+ * Routes:
5
+ * GET /.well-known/agent.json -> Agent Card
6
+ * POST / -> JSON-RPC 2.0 dispatcher
7
+ */
8
+ import { randomUUID } from 'node:crypto';
9
+ import * as http from 'node:http';
10
+ import { a2aAgentCardToDict, a2aMessageToDict, createA2AAgentCard, createA2ATaskStatus, } from './a2a-types.js';
11
+ export class A2AServer {
12
+ agentName;
13
+ port;
14
+ host;
15
+ skills;
16
+ tasks = new Map();
17
+ _onMessage;
18
+ _server;
19
+ _actualPort;
20
+ constructor(agentName, port = 5000, host = '0.0.0.0', skills = []) {
21
+ this.agentName = agentName;
22
+ this.port = port;
23
+ this.host = host;
24
+ this.skills = skills;
25
+ }
26
+ get url() {
27
+ const p = this._actualPort ?? this.port;
28
+ return `http://${this.host}:${p}`;
29
+ }
30
+ onMessage(callback) {
31
+ this._onMessage = callback;
32
+ }
33
+ getAgentCard() {
34
+ return createA2AAgentCard(this.agentName, `Agent Relay agent: ${this.agentName}`, this.url, [...this.skills]);
35
+ }
36
+ async handleMessageSend(params) {
37
+ const messageData = (params.message ?? {});
38
+ const rawParts = (messageData.parts ?? []);
39
+ const parts = rawParts.map((p) => ({ text: p.text }));
40
+ const incoming = {
41
+ role: messageData.role ?? 'user',
42
+ parts,
43
+ messageId: messageData.messageId ?? randomUUID(),
44
+ contextId: messageData.contextId,
45
+ taskId: messageData.taskId,
46
+ };
47
+ // Create or find task
48
+ const taskId = incoming.taskId ?? randomUUID();
49
+ const contextId = incoming.contextId ?? randomUUID();
50
+ let task;
51
+ if (this.tasks.has(taskId)) {
52
+ task = this.tasks.get(taskId);
53
+ task.messages.push(incoming);
54
+ task.status = createA2ATaskStatus('working');
55
+ }
56
+ else {
57
+ task = {
58
+ id: taskId,
59
+ contextId,
60
+ status: createA2ATaskStatus('working'),
61
+ messages: [incoming],
62
+ artifacts: [],
63
+ };
64
+ this.tasks.set(taskId, task);
65
+ }
66
+ // Invoke callback
67
+ let responseMsg = null;
68
+ if (this._onMessage) {
69
+ const result = this._onMessage(incoming);
70
+ responseMsg = result instanceof Promise ? await result : result;
71
+ }
72
+ if (responseMsg) {
73
+ task.messages.push(responseMsg);
74
+ task.status = createA2ATaskStatus('completed', responseMsg);
75
+ }
76
+ else {
77
+ task.status = createA2ATaskStatus('completed');
78
+ }
79
+ return taskToDict(task);
80
+ }
81
+ async handleTasksGet(taskId) {
82
+ const task = this.tasks.get(taskId);
83
+ if (!task) {
84
+ throw new Error(`Task not found: ${taskId}`);
85
+ }
86
+ return taskToDict(task);
87
+ }
88
+ async handleTasksCancel(taskId) {
89
+ const task = this.tasks.get(taskId);
90
+ if (!task) {
91
+ throw new Error(`Task not found: ${taskId}`);
92
+ }
93
+ task.status = createA2ATaskStatus('canceled');
94
+ return taskToDict(task);
95
+ }
96
+ async start() {
97
+ return new Promise((resolve, reject) => {
98
+ const server = http.createServer((req, res) => {
99
+ void this._handleRequest(req, res);
100
+ });
101
+ server.on('error', reject);
102
+ server.listen(this.port, this.host, () => {
103
+ this._server = server;
104
+ const addr = server.address();
105
+ if (typeof addr === 'object' && addr) {
106
+ this._actualPort = addr.port;
107
+ }
108
+ resolve();
109
+ });
110
+ });
111
+ }
112
+ async stop() {
113
+ if (this._server) {
114
+ await new Promise((resolve, reject) => {
115
+ this._server.close((err) => (err ? reject(err) : resolve()));
116
+ });
117
+ this._server = undefined;
118
+ this._actualPort = undefined;
119
+ }
120
+ }
121
+ // --- HTTP handlers ---
122
+ async _handleRequest(req, res) {
123
+ if (req.method === 'GET' && req.url === '/.well-known/agent.json') {
124
+ const card = this.getAgentCard();
125
+ res.writeHead(200, { 'Content-Type': 'application/json' });
126
+ res.end(JSON.stringify(a2aAgentCardToDict(card)));
127
+ return;
128
+ }
129
+ if (req.method === 'POST' && (req.url === '/' || req.url === '')) {
130
+ await this._handleJsonRpc(req, res);
131
+ return;
132
+ }
133
+ res.writeHead(404, { 'Content-Type': 'application/json' });
134
+ res.end(JSON.stringify({ error: 'Not found' }));
135
+ }
136
+ async _handleJsonRpc(req, res) {
137
+ let body;
138
+ try {
139
+ const raw = await readBody(req);
140
+ body = JSON.parse(raw);
141
+ }
142
+ catch {
143
+ res.writeHead(400, { 'Content-Type': 'application/json' });
144
+ res.end(JSON.stringify({
145
+ jsonrpc: '2.0',
146
+ error: { code: -32700, message: 'Parse error' },
147
+ id: null,
148
+ }));
149
+ return;
150
+ }
151
+ const method = (body.method ?? '');
152
+ const params = (body.params ?? {});
153
+ const rpcId = body.id ?? null;
154
+ try {
155
+ let result;
156
+ if (method === 'message/send') {
157
+ result = await this.handleMessageSend(params);
158
+ }
159
+ else if (method === 'tasks/get') {
160
+ const id = (params.id ?? params.taskId ?? '');
161
+ result = await this.handleTasksGet(id);
162
+ }
163
+ else if (method === 'tasks/cancel') {
164
+ const id = (params.id ?? params.taskId ?? '');
165
+ result = await this.handleTasksCancel(id);
166
+ }
167
+ else {
168
+ res.writeHead(400, { 'Content-Type': 'application/json' });
169
+ res.end(JSON.stringify({
170
+ jsonrpc: '2.0',
171
+ error: { code: -32601, message: `Method not found: ${method}` },
172
+ id: rpcId,
173
+ }));
174
+ return;
175
+ }
176
+ res.writeHead(200, { 'Content-Type': 'application/json' });
177
+ res.end(JSON.stringify({ jsonrpc: '2.0', result, id: rpcId }));
178
+ }
179
+ catch (err) {
180
+ res.writeHead(404, { 'Content-Type': 'application/json' });
181
+ res.end(JSON.stringify({
182
+ jsonrpc: '2.0',
183
+ error: { code: -32602, message: String(err) },
184
+ id: rpcId,
185
+ }));
186
+ }
187
+ }
188
+ }
189
+ // --- Helpers ---
190
+ function readBody(req) {
191
+ return new Promise((resolve, reject) => {
192
+ const chunks = [];
193
+ req.on('data', (chunk) => chunks.push(chunk));
194
+ req.on('end', () => resolve(Buffer.concat(chunks).toString()));
195
+ req.on('error', reject);
196
+ });
197
+ }
198
+ function taskToDict(task) {
199
+ const statusDict = { state: task.status.state };
200
+ if (task.status.message) {
201
+ statusDict.message = a2aMessageToDict(task.status.message);
202
+ }
203
+ const messages = task.messages.map((m) => {
204
+ const md = {
205
+ role: m.role,
206
+ parts: m.parts.map((p) => ({ text: p.text })),
207
+ };
208
+ if (m.messageId)
209
+ md.messageId = m.messageId;
210
+ return md;
211
+ });
212
+ return {
213
+ id: task.id,
214
+ contextId: task.contextId,
215
+ status: statusDict,
216
+ messages,
217
+ artifacts: task.artifacts,
218
+ };
219
+ }
220
+ //# sourceMappingURL=a2a-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a-server.js","sourceRoot":"","sources":["../../src/communicate/a2a-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * A2A (Agent-to-Agent) protocol transport implementation.
3
+ *
4
+ * Client side: sends JSON-RPC 2.0 to external A2A agent endpoints.
5
+ * Server side: runs a local HTTP server accepting A2A JSON-RPC calls.
6
+ */
7
+ import type { Message, MessageCallback } from './types.js';
8
+ import { type A2AAgentCard, type A2AConfig, type A2AMessage, type A2ATask } from './a2a-types.js';
9
+ export declare class A2AError extends Error {
10
+ readonly code: number;
11
+ constructor(code: number, message: string);
12
+ }
13
+ export declare class A2ATransport {
14
+ readonly config: A2AConfig;
15
+ agentName?: string;
16
+ agentCard?: A2AAgentCard;
17
+ tasks: Map<string, A2ATask>;
18
+ private _messageCallbacks;
19
+ private _server?;
20
+ private _discoveredCards;
21
+ private _closing;
22
+ constructor(config: A2AConfig);
23
+ register(name: string): Promise<{
24
+ name: string;
25
+ url: string;
26
+ type: string;
27
+ }>;
28
+ unregister(): Promise<void>;
29
+ sendDm(target: string, text: string): Promise<Record<string, unknown>>;
30
+ listAgents(): Promise<Record<string, unknown>[]>;
31
+ onMessage(callback: MessageCallback): void;
32
+ connectWs(): Promise<void>;
33
+ private _handleRequest;
34
+ private _handleAgentCard;
35
+ private _handleJsonRpcHttp;
36
+ private _readBody;
37
+ private _dispatchJsonRpc;
38
+ private _handleMessageSend;
39
+ private _handleTasksGet;
40
+ private _handleTasksCancel;
41
+ private _discoverAgent;
42
+ static _relayMsgToA2A(text: string, _sender: string): A2AMessage;
43
+ static _a2aToRelayMsg(msg: A2AMessage, sender?: string): Message;
44
+ private _a2aResultToRelay;
45
+ private _invokeCallbacks;
46
+ private _authHeaders;
47
+ }
48
+ //# sourceMappingURL=a2a-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a-transport.d.ts","sourceRoot":"","sources":["../../src/communicate/a2a-transport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,OAAO,EAoBb,MAAM,gBAAgB,CAAC;AAExB,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAE3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAa;IAExC,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,gBAAgB,CAAwC;IAChE,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,SAAS;IAMvB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IA6B5E,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAkCtE,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAkBtD,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAIpC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;YAMlB,cAAc;YAed,gBAAgB;YAUhB,kBAAkB;IAoBhC,OAAO,CAAC,SAAS;YAWH,gBAAgB;YA2BhB,kBAAkB;YAoClB,eAAe;YAQf,kBAAkB;YAoBlB,cAAc;IAsB5B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU;IAQhE,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,GAAE,MAAkB,GAAG,OAAO;IAW3E,OAAO,CAAC,iBAAiB;YAsBX,gBAAgB;IAM9B,OAAO,CAAC,YAAY;CAWrB"}