@aramisfa/openclaw-a2a-outbound 4.0.0 → 4.1.1

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.
@@ -0,0 +1,25 @@
1
+ import type { Task } from "@a2a-js/sdk";
2
+ import type { A2AOutboundPluginConfig } from "./config.js";
3
+ export declare const LOCAL_DEMO_ALIAS: "local-demo";
4
+ export declare const DEMO_AGENT_CARD_PATH: "/.well-known/agent-card.json";
5
+ export declare const DEMO_JSON_RPC_PATH: "/a2a/jsonrpc";
6
+ export declare const DEMO_PROTOCOL_VERSION: "0.3.0";
7
+ export declare const DEMO_AGENT_NAME: "OpenClaw A2A Local Demo Peer";
8
+ export type DemoPeerSnapshot = {
9
+ taskCount: number;
10
+ tasks: Task[];
11
+ };
12
+ export type StartedDemoPeer = {
13
+ baseUrl: string;
14
+ cardUrl: string;
15
+ jsonRpcUrl: string;
16
+ close(): Promise<void>;
17
+ snapshot(): DemoPeerSnapshot;
18
+ };
19
+ export type StartDemoPeerOptions = {
20
+ host?: string;
21
+ port?: number;
22
+ };
23
+ export declare function createDemoOutboundConfig(baseUrl: string): A2AOutboundPluginConfig;
24
+ export declare function startDemoPeerServer(options?: StartDemoPeerOptions): Promise<StartedDemoPeer>;
25
+ //# sourceMappingURL=demo-peer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-peer.d.ts","sourceRoot":"","sources":["../src/demo-peer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,IAAI,EAKL,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE3D,eAAO,MAAM,gBAAgB,EAAG,YAAqB,CAAC;AACtD,eAAO,MAAM,oBAAoB,EAAG,8BAAuC,CAAC;AAC5E,eAAO,MAAM,kBAAkB,EAAG,cAAuB,CAAC;AAC1D,eAAO,MAAM,qBAAqB,EAAG,OAAgB,CAAC;AACtD,eAAO,MAAM,eAAe,EAAG,8BAAuC,CAAC;AAuCvE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,QAAQ,IAAI,gBAAgB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AA8cF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB,CAmCjF;AAED,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,eAAe,CAAC,CA6F1B"}
@@ -0,0 +1,487 @@
1
+ import { createServer } from "node:http";
2
+ export const LOCAL_DEMO_ALIAS = "local-demo";
3
+ export const DEMO_AGENT_CARD_PATH = "/.well-known/agent-card.json";
4
+ export const DEMO_JSON_RPC_PATH = "/a2a/jsonrpc";
5
+ export const DEMO_PROTOCOL_VERSION = "0.3.0";
6
+ export const DEMO_AGENT_NAME = "OpenClaw A2A Local Demo Peer";
7
+ const MAX_REQUEST_BYTES = 1024 * 1024;
8
+ const FIXED_TIMESTAMP = "2026-01-01T00:00:00.000Z";
9
+ function isRecord(value) {
10
+ return typeof value === "object" && value !== null && !Array.isArray(value);
11
+ }
12
+ function textFromParts(parts) {
13
+ return parts
14
+ .flatMap((part) => part.kind === "text" && typeof part.text === "string" ? [part.text] : [])
15
+ .join("\n\n");
16
+ }
17
+ function jsonRpcId(value) {
18
+ return typeof value === "string" || typeof value === "number" || value === null
19
+ ? value
20
+ : null;
21
+ }
22
+ function jsonRpcSuccess(id, result) {
23
+ return {
24
+ jsonrpc: "2.0",
25
+ id,
26
+ result,
27
+ };
28
+ }
29
+ function jsonRpcFailure(id, code, message, data) {
30
+ return {
31
+ jsonrpc: "2.0",
32
+ id,
33
+ error: {
34
+ code,
35
+ message,
36
+ ...(data !== undefined ? { data } : {}),
37
+ },
38
+ };
39
+ }
40
+ function formatSseEvent(response) {
41
+ return `data: ${JSON.stringify(response)}\n\n`;
42
+ }
43
+ function cloneTask(task) {
44
+ return structuredClone(task);
45
+ }
46
+ function cloneMessage(message) {
47
+ return structuredClone(message);
48
+ }
49
+ function cloneArtifact(artifact) {
50
+ return structuredClone(artifact);
51
+ }
52
+ async function readRequestBody(req) {
53
+ const chunks = [];
54
+ let total = 0;
55
+ for await (const chunk of req) {
56
+ const buffer = typeof chunk === "string" ? Buffer.from(chunk) : chunk;
57
+ total += buffer.byteLength;
58
+ if (total > MAX_REQUEST_BYTES) {
59
+ throw new Error(`request body exceeds ${MAX_REQUEST_BYTES} bytes`);
60
+ }
61
+ chunks.push(buffer);
62
+ }
63
+ return Buffer.concat(chunks);
64
+ }
65
+ function writeJson(res, statusCode, body) {
66
+ res.writeHead(statusCode, {
67
+ "content-type": "application/json; charset=utf-8",
68
+ });
69
+ res.end(JSON.stringify(body, null, 2));
70
+ }
71
+ function writeText(res, statusCode, body) {
72
+ res.writeHead(statusCode, {
73
+ "content-type": "text/plain; charset=utf-8",
74
+ });
75
+ res.end(body);
76
+ }
77
+ function isMessage(value) {
78
+ return (isRecord(value) &&
79
+ value.kind === "message" &&
80
+ typeof value.messageId === "string" &&
81
+ Array.isArray(value.parts));
82
+ }
83
+ function readSendMessage(params) {
84
+ return isRecord(params) && isMessage(params.message) ? params.message : undefined;
85
+ }
86
+ function readTaskId(params) {
87
+ return isRecord(params) && typeof params.id === "string" ? params.id : undefined;
88
+ }
89
+ function taskStatusUpdate(task, final) {
90
+ return {
91
+ kind: "status-update",
92
+ taskId: task.id,
93
+ contextId: task.contextId,
94
+ status: {
95
+ state: task.status.state,
96
+ ...(task.status.message !== undefined
97
+ ? { message: cloneMessage(task.status.message) }
98
+ : {}),
99
+ timestamp: FIXED_TIMESTAMP,
100
+ },
101
+ final,
102
+ };
103
+ }
104
+ function artifactUpdate(task) {
105
+ const artifact = task.artifacts?.[0];
106
+ if (!artifact) {
107
+ return undefined;
108
+ }
109
+ return {
110
+ kind: "artifact-update",
111
+ taskId: task.id,
112
+ contextId: task.contextId,
113
+ artifact: cloneArtifact(artifact),
114
+ append: false,
115
+ lastChunk: true,
116
+ };
117
+ }
118
+ function terminalState(state) {
119
+ return (state === "completed" ||
120
+ state === "failed" ||
121
+ state === "canceled" ||
122
+ state === "rejected");
123
+ }
124
+ class DemoPeerRuntime {
125
+ baseUrl;
126
+ tasks = new Map();
127
+ taskSeq = 0;
128
+ contextSeq = 0;
129
+ messageSeq = 0;
130
+ artifactSeq = 0;
131
+ constructor(baseUrl) {
132
+ this.baseUrl = baseUrl;
133
+ }
134
+ snapshot() {
135
+ return {
136
+ taskCount: this.tasks.size,
137
+ tasks: [...this.tasks.values()].map((record) => cloneTask(record.task)),
138
+ };
139
+ }
140
+ agentCard() {
141
+ const baseUrl = this.baseUrl();
142
+ const jsonRpcUrl = new URL(DEMO_JSON_RPC_PATH, baseUrl).toString();
143
+ return {
144
+ name: DEMO_AGENT_NAME,
145
+ description: "Deterministic local A2A peer for OpenClaw outbound onboarding.",
146
+ protocolVersion: DEMO_PROTOCOL_VERSION,
147
+ version: "1.0.0",
148
+ url: jsonRpcUrl,
149
+ preferredTransport: "JSONRPC",
150
+ capabilities: {
151
+ streaming: true,
152
+ pushNotifications: false,
153
+ stateTransitionHistory: true,
154
+ },
155
+ defaultInputModes: ["text/plain", "application/json"],
156
+ defaultOutputModes: ["text/plain", "application/json"],
157
+ additionalInterfaces: [
158
+ {
159
+ transport: "JSONRPC",
160
+ url: jsonRpcUrl,
161
+ },
162
+ ],
163
+ skills: [
164
+ {
165
+ id: "demo-delegation",
166
+ name: "Demo Delegation",
167
+ description: "Returns deterministic direct replies, task results, and continuation-friendly task snapshots.",
168
+ tags: ["demo", "delegation", "continuation"],
169
+ examples: [
170
+ "Create a durable demo task.",
171
+ "Continue from the persisted continuation.",
172
+ ],
173
+ inputModes: ["text/plain", "application/json"],
174
+ outputModes: ["text/plain", "application/json"],
175
+ },
176
+ ],
177
+ };
178
+ }
179
+ directReply(message) {
180
+ const contextId = message.contextId ?? `demo-context-direct-${++this.contextSeq}`;
181
+ const inboundText = textFromParts(message.parts) || "empty prompt";
182
+ return {
183
+ kind: "message",
184
+ messageId: `demo-agent-message-${++this.messageSeq}`,
185
+ role: "agent",
186
+ contextId,
187
+ ...(message.taskId !== undefined ? { taskId: message.taskId } : {}),
188
+ parts: [
189
+ {
190
+ kind: "text",
191
+ text: `Demo peer direct reply: ${inboundText}`,
192
+ },
193
+ ],
194
+ };
195
+ }
196
+ taskReply(message) {
197
+ const existing = message.taskId !== undefined ? this.tasks.get(message.taskId) : undefined;
198
+ const taskId = message.taskId ?? `demo-task-${++this.taskSeq}`;
199
+ const contextId = message.contextId ?? existing?.task.contextId ?? `demo-context-${++this.contextSeq}`;
200
+ const turn = (existing?.turn ?? 0) + 1;
201
+ const inboundText = textFromParts(message.parts) || "empty prompt";
202
+ const cancelable = /\bcancelable\b/i.test(inboundText);
203
+ const resumed = existing !== undefined || message.taskId !== undefined;
204
+ const statusState = cancelable ? "working" : "completed";
205
+ const artifactText = resumed
206
+ ? `Demo peer resumed ${taskId} from persisted continuation. Received: ${inboundText}`
207
+ : cancelable
208
+ ? `Demo peer started cancelable task ${taskId}.`
209
+ : `Demo peer completed durable task ${taskId}. Received: ${inboundText}`;
210
+ const artifact = {
211
+ artifactId: `demo-artifact-${++this.artifactSeq}`,
212
+ name: resumed ? "continuation-result" : "demo-result",
213
+ parts: [
214
+ {
215
+ kind: "text",
216
+ text: artifactText,
217
+ },
218
+ ],
219
+ };
220
+ const agentMessage = {
221
+ kind: "message",
222
+ messageId: `demo-agent-message-${++this.messageSeq}`,
223
+ role: "agent",
224
+ contextId,
225
+ taskId,
226
+ parts: [
227
+ {
228
+ kind: "text",
229
+ text: artifactText,
230
+ },
231
+ ],
232
+ };
233
+ const history = [
234
+ ...(existing?.task.history?.map(cloneMessage) ?? []),
235
+ cloneMessage(message),
236
+ cloneMessage(agentMessage),
237
+ ];
238
+ const task = {
239
+ kind: "task",
240
+ id: taskId,
241
+ contextId,
242
+ status: {
243
+ state: statusState,
244
+ message: cloneMessage(agentMessage),
245
+ timestamp: FIXED_TIMESTAMP,
246
+ },
247
+ artifacts: [artifact],
248
+ history,
249
+ metadata: {
250
+ demo: true,
251
+ turn,
252
+ },
253
+ };
254
+ this.tasks.set(taskId, {
255
+ turn,
256
+ task,
257
+ });
258
+ return cloneTask(task);
259
+ }
260
+ sendMessage(params) {
261
+ const message = readSendMessage(params);
262
+ if (!message) {
263
+ throw jsonRpcFailure(null, -32602, "message is required");
264
+ }
265
+ const text = textFromParts(message.parts);
266
+ return /\bdirect\b/i.test(text) ? this.directReply(message) : this.taskReply(message);
267
+ }
268
+ streamMessage(params) {
269
+ const result = this.sendMessage(params);
270
+ if (result.kind === "message") {
271
+ return [result];
272
+ }
273
+ return this.taskEvents(result);
274
+ }
275
+ getTask(params) {
276
+ const taskId = readTaskId(params);
277
+ if (!taskId) {
278
+ throw jsonRpcFailure(null, -32602, "task id is required");
279
+ }
280
+ const record = this.tasks.get(taskId);
281
+ if (!record) {
282
+ throw jsonRpcFailure(null, -32001, `task not found: ${taskId}`, {
283
+ taskId,
284
+ });
285
+ }
286
+ return cloneTask(record.task);
287
+ }
288
+ cancelTask(params) {
289
+ const taskId = readTaskId(params);
290
+ if (!taskId) {
291
+ throw jsonRpcFailure(null, -32602, "task id is required");
292
+ }
293
+ const record = this.tasks.get(taskId);
294
+ if (!record) {
295
+ throw jsonRpcFailure(null, -32001, `task not found: ${taskId}`, {
296
+ taskId,
297
+ });
298
+ }
299
+ if (terminalState(record.task.status.state)) {
300
+ return cloneTask(record.task);
301
+ }
302
+ const canceledMessage = {
303
+ kind: "message",
304
+ messageId: `demo-agent-message-${++this.messageSeq}`,
305
+ role: "agent",
306
+ contextId: record.task.contextId,
307
+ taskId: record.task.id,
308
+ parts: [
309
+ {
310
+ kind: "text",
311
+ text: `Demo peer canceled ${record.task.id}.`,
312
+ },
313
+ ],
314
+ };
315
+ const canceledTask = {
316
+ ...cloneTask(record.task),
317
+ status: {
318
+ state: "canceled",
319
+ message: canceledMessage,
320
+ timestamp: FIXED_TIMESTAMP,
321
+ },
322
+ history: [...(record.task.history?.map(cloneMessage) ?? []), canceledMessage],
323
+ };
324
+ this.tasks.set(taskId, {
325
+ turn: record.turn,
326
+ task: canceledTask,
327
+ });
328
+ return cloneTask(canceledTask);
329
+ }
330
+ resubscribe(params) {
331
+ return this.taskEvents(this.getTask(params));
332
+ }
333
+ taskEvents(task) {
334
+ const events = [cloneTask(task)];
335
+ const artifact = artifactUpdate(task);
336
+ if (artifact !== undefined) {
337
+ events.push(artifact);
338
+ }
339
+ events.push(taskStatusUpdate(task, terminalState(task.status.state)));
340
+ return events;
341
+ }
342
+ }
343
+ function isJsonRpcFailure(value) {
344
+ return isRecord(value) && isRecord(value.error) && typeof value.error.code === "number";
345
+ }
346
+ function rpcResult(runtime, request) {
347
+ switch (request.method) {
348
+ case "message/send":
349
+ return runtime.sendMessage(request.params);
350
+ case "tasks/get":
351
+ return runtime.getTask(request.params);
352
+ case "tasks/cancel":
353
+ return runtime.cancelTask(request.params);
354
+ case "agent/getAuthenticatedExtendedCard":
355
+ return runtime.agentCard();
356
+ default:
357
+ throw jsonRpcFailure(jsonRpcId(request.id), -32601, `method not found: ${String(request.method)}`);
358
+ }
359
+ }
360
+ function rpcStream(runtime, request) {
361
+ switch (request.method) {
362
+ case "message/stream":
363
+ return runtime.streamMessage(request.params);
364
+ case "tasks/resubscribe":
365
+ return runtime.resubscribe(request.params);
366
+ default:
367
+ throw jsonRpcFailure(jsonRpcId(request.id), -32601, `method not found: ${String(request.method)}`);
368
+ }
369
+ }
370
+ function parseJsonRpcRequest(body) {
371
+ const parsed = JSON.parse(body.toString("utf8"));
372
+ if (!isRecord(parsed) || parsed.jsonrpc !== "2.0" || typeof parsed.method !== "string") {
373
+ throw jsonRpcFailure(null, -32600, "invalid JSON-RPC request");
374
+ }
375
+ return parsed;
376
+ }
377
+ export function createDemoOutboundConfig(baseUrl) {
378
+ return {
379
+ enabled: true,
380
+ defaults: {
381
+ timeoutMs: 30_000,
382
+ cardPath: DEMO_AGENT_CARD_PATH,
383
+ preferredTransports: ["JSONRPC", "HTTP+JSON"],
384
+ serviceParameters: {},
385
+ },
386
+ targets: [
387
+ {
388
+ alias: LOCAL_DEMO_ALIAS,
389
+ baseUrl,
390
+ description: "Deterministic local A2A demo peer.",
391
+ tags: ["demo", "local"],
392
+ cardPath: DEMO_AGENT_CARD_PATH,
393
+ preferredTransports: ["JSONRPC", "HTTP+JSON"],
394
+ examples: [
395
+ "Create a durable demo task.",
396
+ "Continue from the persisted continuation.",
397
+ ],
398
+ default: true,
399
+ },
400
+ ],
401
+ taskHandles: {
402
+ ttlMs: 86_400_000,
403
+ maxEntries: 100,
404
+ },
405
+ policy: {
406
+ acceptedOutputModes: ["text/plain", "application/json"],
407
+ normalizeBaseUrl: true,
408
+ enforceSupportedTransports: true,
409
+ allowTargetUrlOverride: false,
410
+ },
411
+ };
412
+ }
413
+ export async function startDemoPeerServer(options = {}) {
414
+ const host = options.host ?? "127.0.0.1";
415
+ let baseUrl = "";
416
+ const runtime = new DemoPeerRuntime(() => baseUrl);
417
+ const server = createServer((req, res) => {
418
+ void (async () => {
419
+ const url = new URL(req.url ?? "/", "http://127.0.0.1");
420
+ if (req.method === "GET" && url.pathname === DEMO_AGENT_CARD_PATH) {
421
+ writeJson(res, 200, runtime.agentCard());
422
+ return;
423
+ }
424
+ if (req.method !== "POST" || url.pathname !== DEMO_JSON_RPC_PATH) {
425
+ writeText(res, 404, "not found");
426
+ return;
427
+ }
428
+ const body = await readRequestBody(req);
429
+ const request = parseJsonRpcRequest(body);
430
+ const id = jsonRpcId(request.id);
431
+ if (request.method === "message/stream" || request.method === "tasks/resubscribe") {
432
+ res.writeHead(200, {
433
+ "content-type": "text/event-stream",
434
+ "cache-control": "no-cache",
435
+ connection: "keep-alive",
436
+ "x-accel-buffering": "no",
437
+ });
438
+ for (const event of rpcStream(runtime, request)) {
439
+ res.write(formatSseEvent(jsonRpcSuccess(id, event)));
440
+ }
441
+ res.end();
442
+ return;
443
+ }
444
+ writeJson(res, 200, jsonRpcSuccess(id, rpcResult(runtime, request)));
445
+ })().catch((error) => {
446
+ const failure = isJsonRpcFailure(error)
447
+ ? error
448
+ : jsonRpcFailure(null, error instanceof SyntaxError ? -32700 : -32603, error instanceof Error ? error.message : String(error));
449
+ if (!res.headersSent) {
450
+ writeJson(res, error instanceof SyntaxError ? 400 : 500, failure);
451
+ return;
452
+ }
453
+ if (!res.writableEnded) {
454
+ res.write(formatSseEvent(failure));
455
+ res.end();
456
+ }
457
+ });
458
+ });
459
+ await new Promise((resolve, reject) => {
460
+ server.once("error", reject);
461
+ server.listen(options.port ?? 0, host, () => {
462
+ server.off("error", reject);
463
+ resolve();
464
+ });
465
+ });
466
+ const address = server.address();
467
+ if (!address || typeof address === "string") {
468
+ throw new Error("failed to bind demo peer server");
469
+ }
470
+ baseUrl = `http://${host}:${address.port}`;
471
+ return {
472
+ baseUrl,
473
+ cardUrl: new URL(DEMO_AGENT_CARD_PATH, baseUrl).toString(),
474
+ jsonRpcUrl: new URL(DEMO_JSON_RPC_PATH, baseUrl).toString(),
475
+ close: () => new Promise((resolve, reject) => {
476
+ server.close((error) => {
477
+ if (error) {
478
+ reject(error);
479
+ return;
480
+ }
481
+ resolve();
482
+ });
483
+ }),
484
+ snapshot: () => runtime.snapshot(),
485
+ };
486
+ }
487
+ //# sourceMappingURL=demo-peer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-peer.js","sourceRoot":"","sources":["../src/demo-peer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,0BAA0B,EAChC,MAAM,qBAAqB,CAAC;AA4D7B,iBAAS,aAAa,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAoDnD;AAED,eAAO,MAAM,EAAE,0BAAY,CAAC;AAE5B,eAAO,MAAM,MAAM;;;;CAIO,CAAC;AAE3B,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,0BAA0B,EAChC,MAAM,qBAAqB,CAAC;AA6D7B,iBAAS,aAAa,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAuEnD;AAED,eAAO,MAAM,EAAE,0BAAY,CAAC;AAE5B,eAAO,MAAM,MAAM;;;;CAIO,CAAC;AAE3B,eAAe,MAAM,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { jsonResult } from "openclaw/plugin-sdk/core";
2
2
  import { PLUGIN_ID } from "./constants.js";
3
3
  import { A2A_OUTBOUND_OPENCLAW_CONFIG_SCHEMA, } from "./config.js";
4
+ import { registerA2ACli } from "./cli.js";
4
5
  import { log } from "./logging.js";
5
6
  import { buildRemoteAgentToolDefinition } from "./schemas.js";
6
7
  import { buildService } from "./service.js";
@@ -34,6 +35,21 @@ function resolveExecuteArgs(args) {
34
35
  }
35
36
  function registerTools(api) {
36
37
  const config = A2A_OUTBOUND_OPENCLAW_CONFIG_SCHEMA.parse?.(api.pluginConfig ?? {});
38
+ api.registerCli?.(({ program }) => {
39
+ registerA2ACli(program, {
40
+ pluginConfig: config,
41
+ rootConfig: api.config,
42
+ });
43
+ }, {
44
+ commands: ["a2a"],
45
+ descriptors: [
46
+ {
47
+ name: "a2a",
48
+ description: "A2A outbound demo and diagnostics",
49
+ hasSubcommands: true,
50
+ },
51
+ ],
52
+ });
37
53
  if (api.registrationMode !== "full") {
38
54
  log(api.logger, "debug", "a2a.plugin.registration.deferred", {
39
55
  pluginId: PLUGIN_ID,
@@ -42,7 +58,7 @@ function registerTools(api) {
42
58
  return;
43
59
  }
44
60
  if (config.enabled !== true) {
45
- log(api.logger, "info", "a2a.plugin.disabled", {
61
+ log(api.logger, "debug", "a2a.plugin.disabled", {
46
62
  pluginId: PLUGIN_ID,
47
63
  registrationMode: api.registrationMode,
48
64
  });
@@ -69,7 +85,7 @@ function registerTools(api) {
69
85
  },
70
86
  };
71
87
  api.registerTool(remoteAgentTool, { optional: true });
72
- log(api.logger, "info", "a2a.plugin.loaded", {
88
+ log(api.logger, "debug", "a2a.plugin.loaded", {
73
89
  pluginId: PLUGIN_ID,
74
90
  registrationMode: api.registrationMode,
75
91
  tools: [remoteAgentTool.name],
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "id": "openclaw-a2a-outbound",
3
3
  "name": "External A2A Delegation",
4
- "version": "4.0.0",
4
+ "version": "4.1.1",
5
5
  "entry": "./dist/index.js",
6
- "description": "Delegate requests to external A2A agents and manage delegated tasks.",
6
+ "description": "Delegate to A2A agents from OpenClaw with remote_agent plus a zero-config local demo CLI.",
7
7
  "skills": [
8
8
  "./skills"
9
9
  ],
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aramisfa/openclaw-a2a-outbound",
3
- "version": "4.0.0",
4
- "description": "Outbound A2A delegation plugin for OpenClaw agents",
3
+ "version": "4.1.1",
4
+ "description": "OpenClaw outbound A2A delegation plugin with a zero-config local demo CLI",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -17,7 +17,10 @@
17
17
  "a2a",
18
18
  "agent-to-agent",
19
19
  "delegation",
20
- "agent"
20
+ "agent",
21
+ "a2a-cli",
22
+ "local-demo",
23
+ "continuation"
21
24
  ],
22
25
  "type": "module",
23
26
  "main": "./dist/index.js",
@@ -27,6 +30,11 @@
27
30
  "types": "./dist/index.d.ts",
28
31
  "import": "./dist/index.js",
29
32
  "default": "./dist/index.js"
33
+ },
34
+ "./demo-peer": {
35
+ "types": "./dist/demo-peer.d.ts",
36
+ "import": "./dist/demo-peer.js",
37
+ "default": "./dist/demo-peer.js"
30
38
  }
31
39
  },
32
40
  "files": [