@evalops/maestro 0.10.31 → 0.10.32

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 (62) hide show
  1. package/dist/agent/transport/tool-execution.d.ts +1 -0
  2. package/dist/agent/transport/tool-execution.d.ts.map +1 -1
  3. package/dist/agent/transport/tool-execution.js +23 -3
  4. package/dist/agent/transport/tool-execution.js.map +1 -1
  5. package/dist/agent/transport/tool-phase-summary.d.ts +6 -0
  6. package/dist/agent/transport/tool-phase-summary.d.ts.map +1 -0
  7. package/dist/agent/transport/tool-phase-summary.js +99 -0
  8. package/dist/agent/transport/tool-phase-summary.js.map +1 -0
  9. package/dist/agent/transport/tool-safety-pipeline.d.ts +1 -0
  10. package/dist/agent/transport/tool-safety-pipeline.d.ts.map +1 -1
  11. package/dist/agent/transport/tool-safety-pipeline.js +9 -4
  12. package/dist/agent/transport/tool-safety-pipeline.js.map +1 -1
  13. package/dist/agent/transport.d.ts.map +1 -1
  14. package/dist/agent/transport.js +4 -99
  15. package/dist/agent/transport.js.map +1 -1
  16. package/dist/cli/commands/a2a/args.d.ts +13 -0
  17. package/dist/cli/commands/a2a/args.d.ts.map +1 -0
  18. package/dist/cli/commands/a2a/args.js +327 -0
  19. package/dist/cli/commands/a2a/args.js.map +1 -0
  20. package/dist/cli/commands/a2a/discovery.d.ts +40 -0
  21. package/dist/cli/commands/a2a/discovery.d.ts.map +1 -0
  22. package/dist/cli/commands/a2a/discovery.js +150 -0
  23. package/dist/cli/commands/a2a/discovery.js.map +1 -0
  24. package/dist/cli/commands/a2a.d.ts +2 -5
  25. package/dist/cli/commands/a2a.d.ts.map +1 -1
  26. package/dist/cli/commands/a2a.js +4 -474
  27. package/dist/cli/commands/a2a.js.map +1 -1
  28. package/dist/cli.js +1801 -1528
  29. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  30. package/dist/node_modules/@evalops/tui/package.json +1 -1
  31. package/dist/server/app-context.d.ts +7 -0
  32. package/dist/server/app-context.d.ts.map +1 -1
  33. package/dist/server/app-context.js.map +1 -1
  34. package/dist/server/handlers/chat-ws.d.ts.map +1 -1
  35. package/dist/server/handlers/chat-ws.js +42 -24
  36. package/dist/server/handlers/chat-ws.js.map +1 -1
  37. package/dist/server/handlers/chat.d.ts.map +1 -1
  38. package/dist/server/handlers/chat.js +54 -35
  39. package/dist/server/handlers/chat.js.map +1 -1
  40. package/dist/server/handlers/hosted-runner-identity.d.ts +17 -0
  41. package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
  42. package/dist/server/handlers/hosted-runner-identity.js +7 -0
  43. package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
  44. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
  45. package/dist/server/handlers/platform-a2a-push.js +134 -15
  46. package/dist/server/handlers/platform-a2a-push.js.map +1 -1
  47. package/dist/server/server-utils.d.ts.map +1 -1
  48. package/dist/server/server-utils.js +12 -0
  49. package/dist/server/server-utils.js.map +1 -1
  50. package/dist/server/session-timeline.d.ts.map +1 -1
  51. package/dist/server/session-timeline.js +13 -0
  52. package/dist/server/session-timeline.js.map +1 -1
  53. package/dist/telemetry/maestro-event-catalog.d.ts +30 -0
  54. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
  55. package/dist/telemetry/maestro-event-catalog.js +96 -5
  56. package/dist/telemetry/maestro-event-catalog.js.map +1 -1
  57. package/dist/tools/find.d.ts +2 -0
  58. package/dist/tools/find.d.ts.map +1 -1
  59. package/dist/tools/find.js +25 -12
  60. package/dist/tools/find.js.map +1 -1
  61. package/dist/version.json +2 -2
  62. package/package.json +6 -2
@@ -0,0 +1,13 @@
1
+ export interface ParsedA2AArgs {
2
+ positionals: string[];
3
+ flags: Map<string, string | boolean>;
4
+ }
5
+ export declare function parseA2AArgs(args: string[]): ParsedA2AArgs;
6
+ export declare function canonicalA2ASubcommand(input: string | undefined): string;
7
+ export declare function stringFlag(parsed: ParsedA2AArgs, name: string): string | undefined;
8
+ export declare function stringListFlag(parsed: ParsedA2AArgs, name: string, fallback: string[]): string[];
9
+ export declare function numberFlag(parsed: ParsedA2AArgs, name: string): number | undefined;
10
+ export declare function nonNegativeNumberFlag(parsed: ParsedA2AArgs, name: string): number | undefined;
11
+ export declare function minutesFlag(parsed: ParsedA2AArgs, name: string): number | undefined;
12
+ export declare function booleanFlag(parsed: ParsedA2AArgs, name: string): boolean;
13
+ //# sourceMappingURL=args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/a2a/args.ts"],"names":[],"mappings":"AA6JA,MAAM,WAAW,aAAa;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;CACrC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CA2F1D;AAsCD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAkBxE;AAED,wBAAgB,UAAU,CACzB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,CAGpB;AAED,wBAAgB,cAAc,CAC7B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAAE,GAChB,MAAM,EAAE,CAUV;AAED,wBAAgB,UAAU,CACzB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,CAUpB;AAED,wBAAgB,qBAAqB,CACpC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,CAUpB;AAED,wBAAgB,WAAW,CAC1B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,CAGpB;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAExE"}
@@ -0,0 +1,327 @@
1
+ const A2A_VALUE_FLAGS_BY_SUBCOMMAND = {
2
+ accept: [
3
+ "--name",
4
+ "--organization-id",
5
+ "--registry",
6
+ "--token-env",
7
+ "--token-file",
8
+ "--workspace-id",
9
+ ],
10
+ card: ["--registry", "--timeout-ms"],
11
+ cockpit: ["--registry", "--tasks", "--timeout-ms", "--peer", "--limit"],
12
+ discover: [
13
+ "--capability",
14
+ "--limit",
15
+ "--offset",
16
+ "--registry",
17
+ "--skill",
18
+ "--status",
19
+ "--surface",
20
+ "--workspace-id",
21
+ ],
22
+ delegate: [
23
+ "--capability",
24
+ "--cwd",
25
+ "--from-agent-id",
26
+ "--interval-ms",
27
+ "--limit",
28
+ "--max-wait-ms",
29
+ "--objective-id",
30
+ "--offset",
31
+ "--registry",
32
+ "--reason",
33
+ "--role",
34
+ "--skill",
35
+ "--status",
36
+ "--surface",
37
+ "--tasks",
38
+ "--timeout-ms",
39
+ "--to-agent-id",
40
+ "--workspace-id",
41
+ "--workflow-run-id",
42
+ "--workflow-step-id",
43
+ ],
44
+ coordinate: [
45
+ "--interval-ms",
46
+ "--max-wait-ms",
47
+ "--registry",
48
+ "--reply",
49
+ "--tasks",
50
+ "--timeout-ms",
51
+ ],
52
+ control: [
53
+ "--child-run-id",
54
+ "--delegation-id",
55
+ "--idempotency-key",
56
+ "--message",
57
+ "--mode",
58
+ "--subagent-lane-id",
59
+ "--target-run-id",
60
+ "--work-item-id",
61
+ "--workspace-id",
62
+ ],
63
+ fleet: ["--registry", "--tasks", "--timeout-ms"],
64
+ graph: [
65
+ "--delegation-id",
66
+ "--limit",
67
+ "--max-depth",
68
+ "--root",
69
+ "--root-delegation-id",
70
+ "--workspace-id",
71
+ ],
72
+ offer: [
73
+ "--agent-card-url",
74
+ "--base-url",
75
+ "--name",
76
+ "--peer-id",
77
+ "--ttl-minutes",
78
+ "--url",
79
+ ],
80
+ peers: ["--registry"],
81
+ register: [
82
+ "--agent-card-etag",
83
+ "--agent-card-hash",
84
+ "--agent-card-url",
85
+ "--agent-id",
86
+ "--capabilities",
87
+ "--description",
88
+ "--internal-url",
89
+ "--name",
90
+ "--owner-id",
91
+ "--protocol-version",
92
+ "--public-url",
93
+ "--security-schemes",
94
+ "--status",
95
+ "--surface",
96
+ "--surface-types",
97
+ "--type",
98
+ "--url",
99
+ "--workspace-id",
100
+ ],
101
+ reply: [
102
+ "--interval-ms",
103
+ "--max-wait-ms",
104
+ "--registry",
105
+ "--tasks",
106
+ "--timeout-ms",
107
+ ],
108
+ send: [
109
+ "--interval-ms",
110
+ "--max-wait-ms",
111
+ "--registry",
112
+ "--tasks",
113
+ "--timeout-ms",
114
+ ],
115
+ tasks: ["--registry", "--tasks", "--timeout-ms"],
116
+ telemetry: ["--events", "--swarm-id"],
117
+ wait: [
118
+ "--interval-ms",
119
+ "--max-wait-ms",
120
+ "--registry",
121
+ "--tasks",
122
+ "--timeout-ms",
123
+ ],
124
+ };
125
+ const A2A_BOOLEAN_FLAGS_BY_SUBCOMMAND = {
126
+ accept: ["--default"],
127
+ cockpit: ["--json"],
128
+ coordinate: ["--json", "--refresh", "--wait", "--work-graph"],
129
+ delegate: [
130
+ "--discover",
131
+ "--platform",
132
+ "--prefer-internal",
133
+ "--wait",
134
+ "--work-graph",
135
+ ],
136
+ discover: ["--default", "--import", "--json", "--prefer-internal"],
137
+ fleet: ["--json"],
138
+ graph: ["--json"],
139
+ register: ["--heartbeat-only", "--json", "--no-heartbeat", "--update-only"],
140
+ reply: ["--wait", "--work-graph"],
141
+ send: ["--wait", "--work-graph"],
142
+ tasks: ["--json", "--refresh", "--work-graph"],
143
+ telemetry: ["--json"],
144
+ wait: ["--work-graph"],
145
+ };
146
+ const A2A_COLLECT_VALUE_FLAGS_BY_SUBCOMMAND = {
147
+ coordinate: ["--reply"],
148
+ control: ["--message"],
149
+ };
150
+ const A2A_LEADING_VALUE_FLAGS = new Set(Object.values(A2A_VALUE_FLAGS_BY_SUBCOMMAND).flat());
151
+ const A2A_LEADING_BOOLEAN_FLAGS = new Set(Object.values(A2A_BOOLEAN_FLAGS_BY_SUBCOMMAND).flat());
152
+ export function parseA2AArgs(args) {
153
+ const flags = new Map();
154
+ const positionals = [];
155
+ const subcommandIndex = findA2ASubcommandIndex(args);
156
+ const subcommand = subcommandIndex >= 0
157
+ ? canonicalA2ASubcommand(args[subcommandIndex])
158
+ : "help";
159
+ const valueFlags = new Set(A2A_VALUE_FLAGS_BY_SUBCOMMAND[subcommand] ?? []);
160
+ const booleanFlags = new Set(A2A_BOOLEAN_FLAGS_BY_SUBCOMMAND[subcommand] ?? []);
161
+ if (subcommand === "delegate" && args.includes("--platform")) {
162
+ booleanFlags.add("--json");
163
+ }
164
+ const collectValueFlags = new Set(A2A_COLLECT_VALUE_FLAGS_BY_SUBCOMMAND[subcommand] ?? []);
165
+ for (let index = 0; index < args.length; index++) {
166
+ const arg = args[index];
167
+ if (!arg)
168
+ continue;
169
+ if (arg === "--") {
170
+ positionals.push(...args.slice(index + 1));
171
+ break;
172
+ }
173
+ if (arg.startsWith("--")) {
174
+ const [flag, inlineValue] = arg.split("=", 2);
175
+ if (!flag) {
176
+ continue;
177
+ }
178
+ if (index < subcommandIndex &&
179
+ !valueFlags.has(flag) &&
180
+ !booleanFlags.has(flag) &&
181
+ (A2A_LEADING_VALUE_FLAGS.has(flag) ||
182
+ A2A_LEADING_BOOLEAN_FLAGS.has(flag))) {
183
+ if (A2A_LEADING_VALUE_FLAGS.has(flag) && inlineValue === undefined) {
184
+ index++;
185
+ }
186
+ continue;
187
+ }
188
+ if (!valueFlags.has(flag) && !booleanFlags.has(flag)) {
189
+ positionals.push(arg);
190
+ continue;
191
+ }
192
+ if (inlineValue !== undefined) {
193
+ if (collectValueFlags.has(flag) && !inlineValue.trim()) {
194
+ throw new Error(collectValueFlagMissingTextMessage(flag, subcommand));
195
+ }
196
+ flags.set(flag, inlineValue);
197
+ continue;
198
+ }
199
+ if (booleanFlags.has(flag)) {
200
+ flags.set(flag, true);
201
+ continue;
202
+ }
203
+ if (collectValueFlags.has(flag)) {
204
+ const values = [];
205
+ while (args[index + 1] && args[index + 1] !== "--") {
206
+ const next = args[index + 1];
207
+ const [nextFlag] = next.split("=", 2);
208
+ if (next.startsWith("--") &&
209
+ nextFlag &&
210
+ (valueFlags.has(nextFlag) || booleanFlags.has(nextFlag))) {
211
+ break;
212
+ }
213
+ values.push(next);
214
+ index++;
215
+ }
216
+ const value = values.join(" ").trim();
217
+ if (!value) {
218
+ throw new Error(collectValueFlagMissingTextMessage(flag, subcommand));
219
+ }
220
+ flags.set(flag, value);
221
+ continue;
222
+ }
223
+ const next = args[index + 1];
224
+ if (next && next !== "--") {
225
+ flags.set(flag, next);
226
+ index++;
227
+ continue;
228
+ }
229
+ flags.set(flag, true);
230
+ continue;
231
+ }
232
+ positionals.push(arg);
233
+ }
234
+ return { flags, positionals };
235
+ }
236
+ function collectValueFlagMissingTextMessage(flag, subcommand) {
237
+ const usage = subcommand === "coordinate" && flag === "--reply"
238
+ ? "\nUsage: maestro a2a coordinate [peer] --reply <text> [--wait]"
239
+ : "";
240
+ return `${flag} requires text${usage}`;
241
+ }
242
+ function findA2ASubcommandIndex(args) {
243
+ for (let index = 0; index < args.length; index++) {
244
+ const arg = args[index];
245
+ if (!arg || arg === "--") {
246
+ break;
247
+ }
248
+ if (!arg.startsWith("--")) {
249
+ return index;
250
+ }
251
+ const [flag = "", inlineValue] = arg.split("=", 2);
252
+ if (A2A_LEADING_VALUE_FLAGS.has(flag) && inlineValue === undefined) {
253
+ index++;
254
+ continue;
255
+ }
256
+ if (A2A_LEADING_VALUE_FLAGS.has(flag) ||
257
+ A2A_LEADING_BOOLEAN_FLAGS.has(flag)) {
258
+ continue;
259
+ }
260
+ break;
261
+ }
262
+ return -1;
263
+ }
264
+ export function canonicalA2ASubcommand(input) {
265
+ switch (input?.toLowerCase()) {
266
+ case "pair":
267
+ case "create":
268
+ return "offer";
269
+ case "list":
270
+ return "peers";
271
+ case "dashboard":
272
+ return "cockpit";
273
+ case "delegation":
274
+ return "delegate";
275
+ case "continue":
276
+ return "reply";
277
+ case "publish":
278
+ return "register";
279
+ default:
280
+ return input?.toLowerCase() ?? "help";
281
+ }
282
+ }
283
+ export function stringFlag(parsed, name) {
284
+ const value = parsed.flags.get(name);
285
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
286
+ }
287
+ export function stringListFlag(parsed, name, fallback) {
288
+ const value = stringFlag(parsed, name);
289
+ if (!value) {
290
+ return fallback;
291
+ }
292
+ const parsedValues = value
293
+ .split(",")
294
+ .map((item) => item.trim())
295
+ .filter(Boolean);
296
+ return parsedValues.length > 0 ? parsedValues : fallback;
297
+ }
298
+ export function numberFlag(parsed, name) {
299
+ const value = stringFlag(parsed, name);
300
+ if (!value) {
301
+ return undefined;
302
+ }
303
+ const parsedValue = Number(value);
304
+ if (!Number.isFinite(parsedValue) || parsedValue <= 0) {
305
+ throw new Error(`${name} must be a positive number`);
306
+ }
307
+ return parsedValue;
308
+ }
309
+ export function nonNegativeNumberFlag(parsed, name) {
310
+ const value = stringFlag(parsed, name);
311
+ if (!value) {
312
+ return undefined;
313
+ }
314
+ const parsedValue = Number(value);
315
+ if (!Number.isFinite(parsedValue) || parsedValue < 0) {
316
+ throw new Error(`${name} must be a non-negative number`);
317
+ }
318
+ return parsedValue;
319
+ }
320
+ export function minutesFlag(parsed, name) {
321
+ const value = numberFlag(parsed, name);
322
+ return value === undefined ? undefined : value * 60 * 1000;
323
+ }
324
+ export function booleanFlag(parsed, name) {
325
+ return parsed.flags.get(name) === true;
326
+ }
327
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../../../src/cli/commands/a2a/args.ts"],"names":[],"mappings":"AAAA,MAAM,6BAA6B,GAAsC;IACxE,MAAM,EAAE;QACP,QAAQ;QACR,mBAAmB;QACnB,YAAY;QACZ,aAAa;QACb,cAAc;QACd,gBAAgB;KAChB;IACD,IAAI,EAAE,CAAC,YAAY,EAAE,cAAc,CAAC;IACpC,OAAO,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,CAAC;IACvE,QAAQ,EAAE;QACT,cAAc;QACd,SAAS;QACT,UAAU;QACV,YAAY;QACZ,SAAS;QACT,UAAU;QACV,WAAW;QACX,gBAAgB;KAChB;IACD,QAAQ,EAAE;QACT,cAAc;QACd,OAAO;QACP,iBAAiB;QACjB,eAAe;QACf,SAAS;QACT,eAAe;QACf,gBAAgB;QAChB,UAAU;QACV,YAAY;QACZ,UAAU;QACV,QAAQ;QACR,SAAS;QACT,UAAU;QACV,WAAW;QACX,SAAS;QACT,cAAc;QACd,eAAe;QACf,gBAAgB;QAChB,mBAAmB;QACnB,oBAAoB;KACpB;IACD,UAAU,EAAE;QACX,eAAe;QACf,eAAe;QACf,YAAY;QACZ,SAAS;QACT,SAAS;QACT,cAAc;KACd;IACD,OAAO,EAAE;QACR,gBAAgB;QAChB,iBAAiB;QACjB,mBAAmB;QACnB,WAAW;QACX,QAAQ;QACR,oBAAoB;QACpB,iBAAiB;QACjB,gBAAgB;QAChB,gBAAgB;KAChB;IACD,KAAK,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC;IAChD,KAAK,EAAE;QACN,iBAAiB;QACjB,SAAS;QACT,aAAa;QACb,QAAQ;QACR,sBAAsB;QACtB,gBAAgB;KAChB;IACD,KAAK,EAAE;QACN,kBAAkB;QAClB,YAAY;QACZ,QAAQ;QACR,WAAW;QACX,eAAe;QACf,OAAO;KACP;IACD,KAAK,EAAE,CAAC,YAAY,CAAC;IACrB,QAAQ,EAAE;QACT,mBAAmB;QACnB,mBAAmB;QACnB,kBAAkB;QAClB,YAAY;QACZ,gBAAgB;QAChB,eAAe;QACf,gBAAgB;QAChB,QAAQ;QACR,YAAY;QACZ,oBAAoB;QACpB,cAAc;QACd,oBAAoB;QACpB,UAAU;QACV,WAAW;QACX,iBAAiB;QACjB,QAAQ;QACR,OAAO;QACP,gBAAgB;KAChB;IACD,KAAK,EAAE;QACN,eAAe;QACf,eAAe;QACf,YAAY;QACZ,SAAS;QACT,cAAc;KACd;IACD,IAAI,EAAE;QACL,eAAe;QACf,eAAe;QACf,YAAY;QACZ,SAAS;QACT,cAAc;KACd;IACD,KAAK,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC;IAChD,SAAS,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC;IACrC,IAAI,EAAE;QACL,eAAe;QACf,eAAe;QACf,YAAY;QACZ,SAAS;QACT,cAAc;KACd;CACD,CAAC;AACF,MAAM,+BAA+B,GAAsC;IAC1E,MAAM,EAAE,CAAC,WAAW,CAAC;IACrB,OAAO,EAAE,CAAC,QAAQ,CAAC;IACnB,UAAU,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,CAAC;IAC7D,QAAQ,EAAE;QACT,YAAY;QACZ,YAAY;QACZ,mBAAmB;QACnB,QAAQ;QACR,cAAc;KACd;IACD,QAAQ,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,mBAAmB,CAAC;IAClE,KAAK,EAAE,CAAC,QAAQ,CAAC;IACjB,KAAK,EAAE,CAAC,QAAQ,CAAC;IACjB,QAAQ,EAAE,CAAC,kBAAkB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,CAAC;IAC3E,KAAK,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC;IACjC,IAAI,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC;IAChC,KAAK,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,cAAc,CAAC;IAC9C,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,IAAI,EAAE,CAAC,cAAc,CAAC;CACtB,CAAC;AACF,MAAM,qCAAqC,GAC1C;IACC,UAAU,EAAE,CAAC,SAAS,CAAC;IACvB,OAAO,EAAE,CAAC,WAAW,CAAC;CACtB,CAAC;AACH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CACtC,MAAM,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,IAAI,EAAE,CACnD,CAAC;AACF,MAAM,yBAAyB,GAAG,IAAI,GAAG,CACxC,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,IAAI,EAAE,CACrD,CAAC;AAOF,MAAM,UAAU,YAAY,CAAC,IAAc;IAC1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAClD,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,eAAe,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,UAAU,GACf,eAAe,IAAI,CAAC;QACnB,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/C,CAAC,CAAC,MAAM,CAAC;IACX,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,6BAA6B,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5E,MAAM,YAAY,GAAG,IAAI,GAAG,CAC3B,+BAA+B,CAAC,UAAU,CAAC,IAAI,EAAE,CACjD,CAAC;IACF,IAAI,UAAU,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9D,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAChC,qCAAqC,CAAC,UAAU,CAAC,IAAI,EAAE,CACvD,CAAC;IACF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAClB,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM;QACP,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACX,SAAS;YACV,CAAC;YACD,IACC,KAAK,GAAG,eAAe;gBACvB,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;gBACrB,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;gBACvB,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC;oBACjC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EACpC,CAAC;gBACF,IAAI,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;oBACpE,KAAK,EAAE,CAAC;gBACT,CAAC;gBACD,SAAS;YACV,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtD,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACtB,SAAS;YACV,CAAC;YACD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC/B,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;oBACxD,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;gBACvE,CAAC;gBACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAC7B,SAAS;YACV,CAAC;YACD,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACtB,SAAS;YACV,CAAC;YACD,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC;oBAC9B,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBACtC,IACC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;wBACrB,QAAQ;wBACR,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EACvD,CAAC;wBACF,MAAM;oBACP,CAAC;oBACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClB,KAAK,EAAE,CAAC;gBACT,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACZ,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;gBACvE,CAAC;gBACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACvB,SAAS;YACV,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC7B,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC3B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACtB,KAAK,EAAE,CAAC;gBACR,SAAS;YACV,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACtB,SAAS;QACV,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,kCAAkC,CAC1C,IAAY,EACZ,UAAkB;IAElB,MAAM,KAAK,GACV,UAAU,KAAK,YAAY,IAAI,IAAI,KAAK,SAAS;QAChD,CAAC,CAAC,gEAAgE;QAClE,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,GAAG,IAAI,iBAAiB,KAAK,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAuB;IACtD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM;QACP,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACd,CAAC;QACD,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,WAAW,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACnD,IAAI,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YACpE,KAAK,EAAE,CAAC;YACR,SAAS;QACV,CAAC;QACD,IACC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC;YACjC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,EAClC,CAAC;YACF,SAAS;QACV,CAAC;QACD,MAAM;IACP,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAyB;IAC/D,QAAQ,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ;YACZ,OAAO,OAAO,CAAC;QAChB,KAAK,MAAM;YACV,OAAO,OAAO,CAAC;QAChB,KAAK,WAAW;YACf,OAAO,SAAS,CAAC;QAClB,KAAK,YAAY;YAChB,OAAO,UAAU,CAAC;QACnB,KAAK,UAAU;YACd,OAAO,OAAO,CAAC;QAChB,KAAK,SAAS;YACb,OAAO,UAAU,CAAC;QACnB;YACC,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,MAAM,CAAC;IACxC,CAAC;AACF,CAAC;AAED,MAAM,UAAU,UAAU,CACzB,MAAqB,EACrB,IAAY;IAEZ,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,cAAc,CAC7B,MAAqB,EACrB,IAAY,EACZ,QAAkB;IAElB,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,QAAQ,CAAC;IACjB,CAAC;IACD,MAAM,YAAY,GAAG,KAAK;SACxB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,UAAU,CACzB,MAAqB,EACrB,IAAY;IAEZ,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,4BAA4B,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,WAAW,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,qBAAqB,CACpC,MAAqB,EACrB,IAAY;IAEZ,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,gCAAgC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,WAAW,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,WAAW,CAC1B,MAAqB,EACrB,IAAY;IAEZ,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAqB,EAAE,IAAY;IAC9D,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AACxC,CAAC","sourcesContent":["const A2A_VALUE_FLAGS_BY_SUBCOMMAND: Record<string, readonly string[]> = {\n\taccept: [\n\t\t\"--name\",\n\t\t\"--organization-id\",\n\t\t\"--registry\",\n\t\t\"--token-env\",\n\t\t\"--token-file\",\n\t\t\"--workspace-id\",\n\t],\n\tcard: [\"--registry\", \"--timeout-ms\"],\n\tcockpit: [\"--registry\", \"--tasks\", \"--timeout-ms\", \"--peer\", \"--limit\"],\n\tdiscover: [\n\t\t\"--capability\",\n\t\t\"--limit\",\n\t\t\"--offset\",\n\t\t\"--registry\",\n\t\t\"--skill\",\n\t\t\"--status\",\n\t\t\"--surface\",\n\t\t\"--workspace-id\",\n\t],\n\tdelegate: [\n\t\t\"--capability\",\n\t\t\"--cwd\",\n\t\t\"--from-agent-id\",\n\t\t\"--interval-ms\",\n\t\t\"--limit\",\n\t\t\"--max-wait-ms\",\n\t\t\"--objective-id\",\n\t\t\"--offset\",\n\t\t\"--registry\",\n\t\t\"--reason\",\n\t\t\"--role\",\n\t\t\"--skill\",\n\t\t\"--status\",\n\t\t\"--surface\",\n\t\t\"--tasks\",\n\t\t\"--timeout-ms\",\n\t\t\"--to-agent-id\",\n\t\t\"--workspace-id\",\n\t\t\"--workflow-run-id\",\n\t\t\"--workflow-step-id\",\n\t],\n\tcoordinate: [\n\t\t\"--interval-ms\",\n\t\t\"--max-wait-ms\",\n\t\t\"--registry\",\n\t\t\"--reply\",\n\t\t\"--tasks\",\n\t\t\"--timeout-ms\",\n\t],\n\tcontrol: [\n\t\t\"--child-run-id\",\n\t\t\"--delegation-id\",\n\t\t\"--idempotency-key\",\n\t\t\"--message\",\n\t\t\"--mode\",\n\t\t\"--subagent-lane-id\",\n\t\t\"--target-run-id\",\n\t\t\"--work-item-id\",\n\t\t\"--workspace-id\",\n\t],\n\tfleet: [\"--registry\", \"--tasks\", \"--timeout-ms\"],\n\tgraph: [\n\t\t\"--delegation-id\",\n\t\t\"--limit\",\n\t\t\"--max-depth\",\n\t\t\"--root\",\n\t\t\"--root-delegation-id\",\n\t\t\"--workspace-id\",\n\t],\n\toffer: [\n\t\t\"--agent-card-url\",\n\t\t\"--base-url\",\n\t\t\"--name\",\n\t\t\"--peer-id\",\n\t\t\"--ttl-minutes\",\n\t\t\"--url\",\n\t],\n\tpeers: [\"--registry\"],\n\tregister: [\n\t\t\"--agent-card-etag\",\n\t\t\"--agent-card-hash\",\n\t\t\"--agent-card-url\",\n\t\t\"--agent-id\",\n\t\t\"--capabilities\",\n\t\t\"--description\",\n\t\t\"--internal-url\",\n\t\t\"--name\",\n\t\t\"--owner-id\",\n\t\t\"--protocol-version\",\n\t\t\"--public-url\",\n\t\t\"--security-schemes\",\n\t\t\"--status\",\n\t\t\"--surface\",\n\t\t\"--surface-types\",\n\t\t\"--type\",\n\t\t\"--url\",\n\t\t\"--workspace-id\",\n\t],\n\treply: [\n\t\t\"--interval-ms\",\n\t\t\"--max-wait-ms\",\n\t\t\"--registry\",\n\t\t\"--tasks\",\n\t\t\"--timeout-ms\",\n\t],\n\tsend: [\n\t\t\"--interval-ms\",\n\t\t\"--max-wait-ms\",\n\t\t\"--registry\",\n\t\t\"--tasks\",\n\t\t\"--timeout-ms\",\n\t],\n\ttasks: [\"--registry\", \"--tasks\", \"--timeout-ms\"],\n\ttelemetry: [\"--events\", \"--swarm-id\"],\n\twait: [\n\t\t\"--interval-ms\",\n\t\t\"--max-wait-ms\",\n\t\t\"--registry\",\n\t\t\"--tasks\",\n\t\t\"--timeout-ms\",\n\t],\n};\nconst A2A_BOOLEAN_FLAGS_BY_SUBCOMMAND: Record<string, readonly string[]> = {\n\taccept: [\"--default\"],\n\tcockpit: [\"--json\"],\n\tcoordinate: [\"--json\", \"--refresh\", \"--wait\", \"--work-graph\"],\n\tdelegate: [\n\t\t\"--discover\",\n\t\t\"--platform\",\n\t\t\"--prefer-internal\",\n\t\t\"--wait\",\n\t\t\"--work-graph\",\n\t],\n\tdiscover: [\"--default\", \"--import\", \"--json\", \"--prefer-internal\"],\n\tfleet: [\"--json\"],\n\tgraph: [\"--json\"],\n\tregister: [\"--heartbeat-only\", \"--json\", \"--no-heartbeat\", \"--update-only\"],\n\treply: [\"--wait\", \"--work-graph\"],\n\tsend: [\"--wait\", \"--work-graph\"],\n\ttasks: [\"--json\", \"--refresh\", \"--work-graph\"],\n\ttelemetry: [\"--json\"],\n\twait: [\"--work-graph\"],\n};\nconst A2A_COLLECT_VALUE_FLAGS_BY_SUBCOMMAND: Record<string, readonly string[]> =\n\t{\n\t\tcoordinate: [\"--reply\"],\n\t\tcontrol: [\"--message\"],\n\t};\nconst A2A_LEADING_VALUE_FLAGS = new Set(\n\tObject.values(A2A_VALUE_FLAGS_BY_SUBCOMMAND).flat(),\n);\nconst A2A_LEADING_BOOLEAN_FLAGS = new Set(\n\tObject.values(A2A_BOOLEAN_FLAGS_BY_SUBCOMMAND).flat(),\n);\n\nexport interface ParsedA2AArgs {\n\tpositionals: string[];\n\tflags: Map<string, string | boolean>;\n}\n\nexport function parseA2AArgs(args: string[]): ParsedA2AArgs {\n\tconst flags = new Map<string, string | boolean>();\n\tconst positionals: string[] = [];\n\tconst subcommandIndex = findA2ASubcommandIndex(args);\n\tconst subcommand =\n\t\tsubcommandIndex >= 0\n\t\t\t? canonicalA2ASubcommand(args[subcommandIndex])\n\t\t\t: \"help\";\n\tconst valueFlags = new Set(A2A_VALUE_FLAGS_BY_SUBCOMMAND[subcommand] ?? []);\n\tconst booleanFlags = new Set(\n\t\tA2A_BOOLEAN_FLAGS_BY_SUBCOMMAND[subcommand] ?? [],\n\t);\n\tif (subcommand === \"delegate\" && args.includes(\"--platform\")) {\n\t\tbooleanFlags.add(\"--json\");\n\t}\n\tconst collectValueFlags = new Set(\n\t\tA2A_COLLECT_VALUE_FLAGS_BY_SUBCOMMAND[subcommand] ?? [],\n\t);\n\tfor (let index = 0; index < args.length; index++) {\n\t\tconst arg = args[index];\n\t\tif (!arg) continue;\n\t\tif (arg === \"--\") {\n\t\t\tpositionals.push(...args.slice(index + 1));\n\t\t\tbreak;\n\t\t}\n\t\tif (arg.startsWith(\"--\")) {\n\t\t\tconst [flag, inlineValue] = arg.split(\"=\", 2);\n\t\t\tif (!flag) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tindex < subcommandIndex &&\n\t\t\t\t!valueFlags.has(flag) &&\n\t\t\t\t!booleanFlags.has(flag) &&\n\t\t\t\t(A2A_LEADING_VALUE_FLAGS.has(flag) ||\n\t\t\t\t\tA2A_LEADING_BOOLEAN_FLAGS.has(flag))\n\t\t\t) {\n\t\t\t\tif (A2A_LEADING_VALUE_FLAGS.has(flag) && inlineValue === undefined) {\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!valueFlags.has(flag) && !booleanFlags.has(flag)) {\n\t\t\t\tpositionals.push(arg);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (inlineValue !== undefined) {\n\t\t\t\tif (collectValueFlags.has(flag) && !inlineValue.trim()) {\n\t\t\t\t\tthrow new Error(collectValueFlagMissingTextMessage(flag, subcommand));\n\t\t\t\t}\n\t\t\t\tflags.set(flag, inlineValue);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (booleanFlags.has(flag)) {\n\t\t\t\tflags.set(flag, true);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (collectValueFlags.has(flag)) {\n\t\t\t\tconst values: string[] = [];\n\t\t\t\twhile (args[index + 1] && args[index + 1] !== \"--\") {\n\t\t\t\t\tconst next = args[index + 1]!;\n\t\t\t\t\tconst [nextFlag] = next.split(\"=\", 2);\n\t\t\t\t\tif (\n\t\t\t\t\t\tnext.startsWith(\"--\") &&\n\t\t\t\t\t\tnextFlag &&\n\t\t\t\t\t\t(valueFlags.has(nextFlag) || booleanFlags.has(nextFlag))\n\t\t\t\t\t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tvalues.push(next);\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\t\t\t\tconst value = values.join(\" \").trim();\n\t\t\t\tif (!value) {\n\t\t\t\t\tthrow new Error(collectValueFlagMissingTextMessage(flag, subcommand));\n\t\t\t\t}\n\t\t\t\tflags.set(flag, value);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst next = args[index + 1];\n\t\t\tif (next && next !== \"--\") {\n\t\t\t\tflags.set(flag, next);\n\t\t\t\tindex++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tflags.set(flag, true);\n\t\t\tcontinue;\n\t\t}\n\t\tpositionals.push(arg);\n\t}\n\treturn { flags, positionals };\n}\n\nfunction collectValueFlagMissingTextMessage(\n\tflag: string,\n\tsubcommand: string,\n): string {\n\tconst usage =\n\t\tsubcommand === \"coordinate\" && flag === \"--reply\"\n\t\t\t? \"\\nUsage: maestro a2a coordinate [peer] --reply <text> [--wait]\"\n\t\t\t: \"\";\n\treturn `${flag} requires text${usage}`;\n}\n\nfunction findA2ASubcommandIndex(args: readonly string[]): number {\n\tfor (let index = 0; index < args.length; index++) {\n\t\tconst arg = args[index];\n\t\tif (!arg || arg === \"--\") {\n\t\t\tbreak;\n\t\t}\n\t\tif (!arg.startsWith(\"--\")) {\n\t\t\treturn index;\n\t\t}\n\t\tconst [flag = \"\", inlineValue] = arg.split(\"=\", 2);\n\t\tif (A2A_LEADING_VALUE_FLAGS.has(flag) && inlineValue === undefined) {\n\t\t\tindex++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\tA2A_LEADING_VALUE_FLAGS.has(flag) ||\n\t\t\tA2A_LEADING_BOOLEAN_FLAGS.has(flag)\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\treturn -1;\n}\n\nexport function canonicalA2ASubcommand(input: string | undefined): string {\n\tswitch (input?.toLowerCase()) {\n\t\tcase \"pair\":\n\t\tcase \"create\":\n\t\t\treturn \"offer\";\n\t\tcase \"list\":\n\t\t\treturn \"peers\";\n\t\tcase \"dashboard\":\n\t\t\treturn \"cockpit\";\n\t\tcase \"delegation\":\n\t\t\treturn \"delegate\";\n\t\tcase \"continue\":\n\t\t\treturn \"reply\";\n\t\tcase \"publish\":\n\t\t\treturn \"register\";\n\t\tdefault:\n\t\t\treturn input?.toLowerCase() ?? \"help\";\n\t}\n}\n\nexport function stringFlag(\n\tparsed: ParsedA2AArgs,\n\tname: string,\n): string | undefined {\n\tconst value = parsed.flags.get(name);\n\treturn typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nexport function stringListFlag(\n\tparsed: ParsedA2AArgs,\n\tname: string,\n\tfallback: string[],\n): string[] {\n\tconst value = stringFlag(parsed, name);\n\tif (!value) {\n\t\treturn fallback;\n\t}\n\tconst parsedValues = value\n\t\t.split(\",\")\n\t\t.map((item) => item.trim())\n\t\t.filter(Boolean);\n\treturn parsedValues.length > 0 ? parsedValues : fallback;\n}\n\nexport function numberFlag(\n\tparsed: ParsedA2AArgs,\n\tname: string,\n): number | undefined {\n\tconst value = stringFlag(parsed, name);\n\tif (!value) {\n\t\treturn undefined;\n\t}\n\tconst parsedValue = Number(value);\n\tif (!Number.isFinite(parsedValue) || parsedValue <= 0) {\n\t\tthrow new Error(`${name} must be a positive number`);\n\t}\n\treturn parsedValue;\n}\n\nexport function nonNegativeNumberFlag(\n\tparsed: ParsedA2AArgs,\n\tname: string,\n): number | undefined {\n\tconst value = stringFlag(parsed, name);\n\tif (!value) {\n\t\treturn undefined;\n\t}\n\tconst parsedValue = Number(value);\n\tif (!Number.isFinite(parsedValue) || parsedValue < 0) {\n\t\tthrow new Error(`${name} must be a non-negative number`);\n\t}\n\treturn parsedValue;\n}\n\nexport function minutesFlag(\n\tparsed: ParsedA2AArgs,\n\tname: string,\n): number | undefined {\n\tconst value = numberFlag(parsed, name);\n\treturn value === undefined ? undefined : value * 60 * 1000;\n}\n\nexport function booleanFlag(parsed: ParsedA2AArgs, name: string): boolean {\n\treturn parsed.flags.get(name) === true;\n}\n"]}
@@ -0,0 +1,40 @@
1
+ import { type A2APeerRegistryEntry } from "../../../platform/a2a-peer-registry.js";
2
+ import type { PlatformAgentDiscoveryEvidence, PlatformAgentRegistryA2APeerCandidate } from "../../../platform/agent-registry-client.js";
3
+ export interface A2ADiscoverySelection {
4
+ source: "platform-agent-registry";
5
+ evidence?: PlatformAgentDiscoveryEvidence;
6
+ candidateCount: number;
7
+ matchedCount: number;
8
+ selectedAgentId?: string;
9
+ selectedAgentName?: string;
10
+ selectedEndpointUrl?: string;
11
+ selectedEndpointKind?: "public" | "internal";
12
+ score?: number;
13
+ reasons?: string[];
14
+ }
15
+ export declare function printA2ADiscoveryEvidence(evidence: PlatformAgentDiscoveryEvidence | undefined): void;
16
+ export declare function discoveredPeerJson(candidate: PlatformAgentRegistryA2APeerCandidate): {
17
+ agentId?: string;
18
+ name?: string;
19
+ status?: string;
20
+ endpointUrl: string;
21
+ endpointKind?: "public" | "internal";
22
+ agentCardUrl?: string;
23
+ protocolBinding?: string;
24
+ protocolVersion?: string;
25
+ skills: PlatformAgentRegistryA2APeerCandidate["skills"];
26
+ supportedExtensions?: string[];
27
+ pushNotifications?: boolean;
28
+ };
29
+ export declare function discoveredPeerName(candidate: PlatformAgentRegistryA2APeerCandidate, index: number): string;
30
+ export declare function uniqueDiscoveredPeerName(input: {
31
+ baseName: string;
32
+ candidate: PlatformAgentRegistryA2APeerCandidate;
33
+ importedNames: Set<string>;
34
+ peers: Record<string, A2APeerRegistryEntry>;
35
+ }): string;
36
+ export declare function a2ADiscoveryEvidenceMetadata(evidence: PlatformAgentDiscoveryEvidence | undefined): Record<string, string | number | boolean>;
37
+ export declare function a2APeerMetadataWithoutDiscoveryEvidence(metadata: A2APeerRegistryEntry["metadata"] | undefined): Record<string, string | number | boolean> | undefined;
38
+ export declare function a2ADiscoverySelectionPayload(selection: A2ADiscoverySelection | undefined): Record<string, unknown> | undefined;
39
+ export declare function compactA2APeerMetadata(record: Record<string, string | number | boolean | undefined>): Record<string, string | number | boolean> | undefined;
40
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/a2a/discovery.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,oBAAoB,EAEzB,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EACX,8BAA8B,EAC9B,qCAAqC,EACrC,MAAM,4CAA4C,CAAC;AAEpD,MAAM,WAAW,qBAAqB;IACrC,MAAM,EAAE,yBAAyB,CAAC;IAClC,QAAQ,CAAC,EAAE,8BAA8B,CAAC;IAC1C,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,yBAAyB,CACxC,QAAQ,EAAE,8BAA8B,GAAG,SAAS,GAClD,IAAI,CAqCN;AAED,wBAAgB,kBAAkB,CACjC,SAAS,EAAE,qCAAqC,GAC9C;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,qCAAqC,CAAC,QAAQ,CAAC,CAAC;IACxD,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAsBA;AAED,wBAAgB,kBAAkB,CACjC,SAAS,EAAE,qCAAqC,EAChD,KAAK,EAAE,MAAM,GACX,MAAM,CAYR;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,qCAAqC,CAAC;IACjD,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CAC5C,GAAG,MAAM,CAsBT;AASD,wBAAgB,4BAA4B,CAC3C,QAAQ,EAAE,8BAA8B,GAAG,SAAS,GAClD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAqB3C;AAED,wBAAgB,uCAAuC,CACtD,QAAQ,EAAE,oBAAoB,CAAC,UAAU,CAAC,GAAG,SAAS,GACpD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,SAAS,CAQvD;AAED,wBAAgB,4BAA4B,CAC3C,SAAS,EAAE,qBAAqB,GAAG,SAAS,GAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAgBrC;AAcD,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAC3D,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,SAAS,CAMvD"}
@@ -0,0 +1,150 @@
1
+ import chalk from "chalk";
2
+ import { normalizePeerName, } from "../../../platform/a2a-peer-registry.js";
3
+ export function printA2ADiscoveryEvidence(evidence) {
4
+ if (!evidence) {
5
+ return;
6
+ }
7
+ const summary = [
8
+ evidence.decision ? `decision=${evidence.decision}` : undefined,
9
+ evidence.reason ? `reason=${evidence.reason}` : undefined,
10
+ evidence.matchedCount !== undefined
11
+ ? `matched=${evidence.matchedCount}`
12
+ : undefined,
13
+ evidence.candidateCount !== undefined
14
+ ? `candidates=${evidence.candidateCount}`
15
+ : undefined,
16
+ evidence.a2aSkillId ? `skill=${evidence.a2aSkillId}` : undefined,
17
+ evidence.capability ? `capability=${evidence.capability}` : undefined,
18
+ ]
19
+ .filter(Boolean)
20
+ .join(" ");
21
+ if (summary) {
22
+ console.log(chalk.dim(` discovery ${summary}`));
23
+ }
24
+ if (evidence.exclusions?.length) {
25
+ const exclusions = evidence.exclusions
26
+ .map((exclusion) => [
27
+ exclusion.reason,
28
+ exclusion.count !== undefined ? `count=${exclusion.count}` : "",
29
+ ]
30
+ .filter(Boolean)
31
+ .join(":"))
32
+ .filter(Boolean)
33
+ .join(", ");
34
+ if (exclusions) {
35
+ console.log(chalk.dim(` exclusions ${exclusions}`));
36
+ }
37
+ }
38
+ }
39
+ export function discoveredPeerJson(candidate) {
40
+ return {
41
+ ...(candidate.agent.id ? { agentId: candidate.agent.id } : {}),
42
+ ...(candidate.agent.name ? { name: candidate.agent.name } : {}),
43
+ ...(candidate.agent.status ? { status: candidate.agent.status } : {}),
44
+ endpointUrl: candidate.endpointUrl,
45
+ ...(candidate.endpointKind ? { endpointKind: candidate.endpointKind } : {}),
46
+ ...(candidate.agentCardUrl ? { agentCardUrl: candidate.agentCardUrl } : {}),
47
+ ...(candidate.protocolBinding
48
+ ? { protocolBinding: candidate.protocolBinding }
49
+ : {}),
50
+ ...(candidate.protocolVersion
51
+ ? { protocolVersion: candidate.protocolVersion }
52
+ : {}),
53
+ skills: candidate.skills,
54
+ ...(candidate.supportedExtensions
55
+ ? { supportedExtensions: candidate.supportedExtensions }
56
+ : {}),
57
+ ...(candidate.pushNotifications === undefined
58
+ ? {}
59
+ : { pushNotifications: candidate.pushNotifications }),
60
+ };
61
+ }
62
+ export function discoveredPeerName(candidate, index) {
63
+ const raw = candidate.agent.id ??
64
+ candidate.agent.name ??
65
+ `platform-a2a-peer-${index + 1}`;
66
+ const sanitized = raw
67
+ .trim()
68
+ .replace(/[^A-Za-z0-9_.-]+/gu, "-")
69
+ .replace(/^-+|-+$/gu, "")
70
+ .slice(0, 80) || `platform-a2a-peer-${index + 1}`;
71
+ return normalizePeerName(sanitized);
72
+ }
73
+ export function uniqueDiscoveredPeerName(input) {
74
+ for (let suffix = 1; suffix <= 100; suffix++) {
75
+ const name = suffix === 1 ? input.baseName : suffixedPeerName(input.baseName, suffix);
76
+ const existing = input.peers[name];
77
+ const hasSameAgentId = Boolean(existing?.agentId &&
78
+ input.candidate.agent.id &&
79
+ existing.agentId === input.candidate.agent.id);
80
+ const hasSameEndpoint = existing?.url === input.candidate.endpointUrl;
81
+ if (!input.importedNames.has(name) &&
82
+ (!existing || hasSameAgentId || hasSameEndpoint)) {
83
+ input.importedNames.add(name);
84
+ return name;
85
+ }
86
+ }
87
+ throw new Error(`Could not derive a unique A2A peer name for ${input.baseName}`);
88
+ }
89
+ function suffixedPeerName(baseName, suffix) {
90
+ const suffixText = `-${suffix}`;
91
+ return normalizePeerName(`${baseName.slice(0, 80 - suffixText.length)}${suffixText}`);
92
+ }
93
+ export function a2ADiscoveryEvidenceMetadata(evidence) {
94
+ if (!evidence) {
95
+ return {};
96
+ }
97
+ return (compactA2APeerMetadata({
98
+ platformDiscoverySchema: evidence.schema,
99
+ platformDiscoveryDecision: evidence.decision,
100
+ platformDiscoveryReason: evidence.reason,
101
+ platformDiscoveryWorkspaceId: evidence.workspaceId,
102
+ platformDiscoveryCapability: evidence.capability,
103
+ platformDiscoveryAgentType: evidence.agentType,
104
+ platformDiscoveryA2ASkillId: evidence.a2aSkillId,
105
+ platformDiscoveryTaskClass: evidence.taskClass,
106
+ platformDiscoveryRequireA2ADispatch: evidence.requireA2ADispatch,
107
+ platformDiscoverySurface: evidence.surface,
108
+ platformDiscoveryStatus: evidence.status,
109
+ platformDiscoveryCandidateCount: evidence.candidateCount,
110
+ platformDiscoveryMatchedCount: evidence.matchedCount,
111
+ }) ?? {});
112
+ }
113
+ export function a2APeerMetadataWithoutDiscoveryEvidence(metadata) {
114
+ if (!metadata) {
115
+ return undefined;
116
+ }
117
+ const entries = Object.entries(metadata).filter(([key]) => !key.startsWith("platformDiscovery"));
118
+ return entries.length > 0 ? Object.fromEntries(entries) : undefined;
119
+ }
120
+ export function a2ADiscoverySelectionPayload(selection) {
121
+ if (!selection) {
122
+ return undefined;
123
+ }
124
+ return compactA2AUnknownRecord({
125
+ source: selection.source,
126
+ ...a2ADiscoveryEvidenceMetadata(selection.evidence),
127
+ selectedAgentId: selection.selectedAgentId,
128
+ selectedAgentName: selection.selectedAgentName,
129
+ selectedEndpointUrl: selection.selectedEndpointUrl,
130
+ selectedEndpointKind: selection.selectedEndpointKind,
131
+ score: selection.score,
132
+ reasons: selection.reasons,
133
+ candidateCount: selection.candidateCount,
134
+ matchedCount: selection.matchedCount,
135
+ });
136
+ }
137
+ function compactA2AUnknownRecord(record) {
138
+ const entries = Object.entries(record).filter(([, value]) => {
139
+ if (value === undefined) {
140
+ return false;
141
+ }
142
+ return !Array.isArray(value) || value.length > 0;
143
+ });
144
+ return entries.length > 0 ? Object.fromEntries(entries) : undefined;
145
+ }
146
+ export function compactA2APeerMetadata(record) {
147
+ const entries = Object.entries(record).filter((entry) => entry[1] !== undefined);
148
+ return entries.length > 0 ? Object.fromEntries(entries) : undefined;
149
+ }
150
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../../src/cli/commands/a2a/discovery.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from \"chalk\";\nimport {\n\ttype A2APeerRegistryEntry,\n\tnormalizePeerName,\n} from \"../../../platform/a2a-peer-registry.js\";\nimport type {\n\tPlatformAgentDiscoveryEvidence,\n\tPlatformAgentRegistryA2APeerCandidate,\n} from \"../../../platform/agent-registry-client.js\";\n\nexport interface A2ADiscoverySelection {\n\tsource: \"platform-agent-registry\";\n\tevidence?: PlatformAgentDiscoveryEvidence;\n\tcandidateCount: number;\n\tmatchedCount: number;\n\tselectedAgentId?: string;\n\tselectedAgentName?: string;\n\tselectedEndpointUrl?: string;\n\tselectedEndpointKind?: \"public\" | \"internal\";\n\tscore?: number;\n\treasons?: string[];\n}\n\nexport function printA2ADiscoveryEvidence(\n\tevidence: PlatformAgentDiscoveryEvidence | undefined,\n): void {\n\tif (!evidence) {\n\t\treturn;\n\t}\n\tconst summary = [\n\t\tevidence.decision ? `decision=${evidence.decision}` : undefined,\n\t\tevidence.reason ? `reason=${evidence.reason}` : undefined,\n\t\tevidence.matchedCount !== undefined\n\t\t\t? `matched=${evidence.matchedCount}`\n\t\t\t: undefined,\n\t\tevidence.candidateCount !== undefined\n\t\t\t? `candidates=${evidence.candidateCount}`\n\t\t\t: undefined,\n\t\tevidence.a2aSkillId ? `skill=${evidence.a2aSkillId}` : undefined,\n\t\tevidence.capability ? `capability=${evidence.capability}` : undefined,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(\" \");\n\tif (summary) {\n\t\tconsole.log(chalk.dim(` discovery ${summary}`));\n\t}\n\tif (evidence.exclusions?.length) {\n\t\tconst exclusions = evidence.exclusions\n\t\t\t.map((exclusion) =>\n\t\t\t\t[\n\t\t\t\t\texclusion.reason,\n\t\t\t\t\texclusion.count !== undefined ? `count=${exclusion.count}` : \"\",\n\t\t\t\t]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(\":\"),\n\t\t\t)\n\t\t\t.filter(Boolean)\n\t\t\t.join(\", \");\n\t\tif (exclusions) {\n\t\t\tconsole.log(chalk.dim(` exclusions ${exclusions}`));\n\t\t}\n\t}\n}\n\nexport function discoveredPeerJson(\n\tcandidate: PlatformAgentRegistryA2APeerCandidate,\n): {\n\tagentId?: string;\n\tname?: string;\n\tstatus?: string;\n\tendpointUrl: string;\n\tendpointKind?: \"public\" | \"internal\";\n\tagentCardUrl?: string;\n\tprotocolBinding?: string;\n\tprotocolVersion?: string;\n\tskills: PlatformAgentRegistryA2APeerCandidate[\"skills\"];\n\tsupportedExtensions?: string[];\n\tpushNotifications?: boolean;\n} {\n\treturn {\n\t\t...(candidate.agent.id ? { agentId: candidate.agent.id } : {}),\n\t\t...(candidate.agent.name ? { name: candidate.agent.name } : {}),\n\t\t...(candidate.agent.status ? { status: candidate.agent.status } : {}),\n\t\tendpointUrl: candidate.endpointUrl,\n\t\t...(candidate.endpointKind ? { endpointKind: candidate.endpointKind } : {}),\n\t\t...(candidate.agentCardUrl ? { agentCardUrl: candidate.agentCardUrl } : {}),\n\t\t...(candidate.protocolBinding\n\t\t\t? { protocolBinding: candidate.protocolBinding }\n\t\t\t: {}),\n\t\t...(candidate.protocolVersion\n\t\t\t? { protocolVersion: candidate.protocolVersion }\n\t\t\t: {}),\n\t\tskills: candidate.skills,\n\t\t...(candidate.supportedExtensions\n\t\t\t? { supportedExtensions: candidate.supportedExtensions }\n\t\t\t: {}),\n\t\t...(candidate.pushNotifications === undefined\n\t\t\t? {}\n\t\t\t: { pushNotifications: candidate.pushNotifications }),\n\t};\n}\n\nexport function discoveredPeerName(\n\tcandidate: PlatformAgentRegistryA2APeerCandidate,\n\tindex: number,\n): string {\n\tconst raw =\n\t\tcandidate.agent.id ??\n\t\tcandidate.agent.name ??\n\t\t`platform-a2a-peer-${index + 1}`;\n\tconst sanitized =\n\t\traw\n\t\t\t.trim()\n\t\t\t.replace(/[^A-Za-z0-9_.-]+/gu, \"-\")\n\t\t\t.replace(/^-+|-+$/gu, \"\")\n\t\t\t.slice(0, 80) || `platform-a2a-peer-${index + 1}`;\n\treturn normalizePeerName(sanitized);\n}\n\nexport function uniqueDiscoveredPeerName(input: {\n\tbaseName: string;\n\tcandidate: PlatformAgentRegistryA2APeerCandidate;\n\timportedNames: Set<string>;\n\tpeers: Record<string, A2APeerRegistryEntry>;\n}): string {\n\tfor (let suffix = 1; suffix <= 100; suffix++) {\n\t\tconst name =\n\t\t\tsuffix === 1 ? input.baseName : suffixedPeerName(input.baseName, suffix);\n\t\tconst existing = input.peers[name];\n\t\tconst hasSameAgentId = Boolean(\n\t\t\texisting?.agentId &&\n\t\t\t\tinput.candidate.agent.id &&\n\t\t\t\texisting.agentId === input.candidate.agent.id,\n\t\t);\n\t\tconst hasSameEndpoint = existing?.url === input.candidate.endpointUrl;\n\t\tif (\n\t\t\t!input.importedNames.has(name) &&\n\t\t\t(!existing || hasSameAgentId || hasSameEndpoint)\n\t\t) {\n\t\t\tinput.importedNames.add(name);\n\t\t\treturn name;\n\t\t}\n\t}\n\tthrow new Error(\n\t\t`Could not derive a unique A2A peer name for ${input.baseName}`,\n\t);\n}\n\nfunction suffixedPeerName(baseName: string, suffix: number): string {\n\tconst suffixText = `-${suffix}`;\n\treturn normalizePeerName(\n\t\t`${baseName.slice(0, 80 - suffixText.length)}${suffixText}`,\n\t);\n}\n\nexport function a2ADiscoveryEvidenceMetadata(\n\tevidence: PlatformAgentDiscoveryEvidence | undefined,\n): Record<string, string | number | boolean> {\n\tif (!evidence) {\n\t\treturn {};\n\t}\n\treturn (\n\t\tcompactA2APeerMetadata({\n\t\t\tplatformDiscoverySchema: evidence.schema,\n\t\t\tplatformDiscoveryDecision: evidence.decision,\n\t\t\tplatformDiscoveryReason: evidence.reason,\n\t\t\tplatformDiscoveryWorkspaceId: evidence.workspaceId,\n\t\t\tplatformDiscoveryCapability: evidence.capability,\n\t\t\tplatformDiscoveryAgentType: evidence.agentType,\n\t\t\tplatformDiscoveryA2ASkillId: evidence.a2aSkillId,\n\t\t\tplatformDiscoveryTaskClass: evidence.taskClass,\n\t\t\tplatformDiscoveryRequireA2ADispatch: evidence.requireA2ADispatch,\n\t\t\tplatformDiscoverySurface: evidence.surface,\n\t\t\tplatformDiscoveryStatus: evidence.status,\n\t\t\tplatformDiscoveryCandidateCount: evidence.candidateCount,\n\t\t\tplatformDiscoveryMatchedCount: evidence.matchedCount,\n\t\t}) ?? {}\n\t);\n}\n\nexport function a2APeerMetadataWithoutDiscoveryEvidence(\n\tmetadata: A2APeerRegistryEntry[\"metadata\"] | undefined,\n): Record<string, string | number | boolean> | undefined {\n\tif (!metadata) {\n\t\treturn undefined;\n\t}\n\tconst entries = Object.entries(metadata).filter(\n\t\t([key]) => !key.startsWith(\"platformDiscovery\"),\n\t);\n\treturn entries.length > 0 ? Object.fromEntries(entries) : undefined;\n}\n\nexport function a2ADiscoverySelectionPayload(\n\tselection: A2ADiscoverySelection | undefined,\n): Record<string, unknown> | undefined {\n\tif (!selection) {\n\t\treturn undefined;\n\t}\n\treturn compactA2AUnknownRecord({\n\t\tsource: selection.source,\n\t\t...a2ADiscoveryEvidenceMetadata(selection.evidence),\n\t\tselectedAgentId: selection.selectedAgentId,\n\t\tselectedAgentName: selection.selectedAgentName,\n\t\tselectedEndpointUrl: selection.selectedEndpointUrl,\n\t\tselectedEndpointKind: selection.selectedEndpointKind,\n\t\tscore: selection.score,\n\t\treasons: selection.reasons,\n\t\tcandidateCount: selection.candidateCount,\n\t\tmatchedCount: selection.matchedCount,\n\t});\n}\n\nfunction compactA2AUnknownRecord(\n\trecord: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n\tconst entries = Object.entries(record).filter(([, value]) => {\n\t\tif (value === undefined) {\n\t\t\treturn false;\n\t\t}\n\t\treturn !Array.isArray(value) || value.length > 0;\n\t});\n\treturn entries.length > 0 ? Object.fromEntries(entries) : undefined;\n}\n\nexport function compactA2APeerMetadata(\n\trecord: Record<string, string | number | boolean | undefined>,\n): Record<string, string | number | boolean> | undefined {\n\tconst entries = Object.entries(record).filter(\n\t\t(entry): entry is [string, string | number | boolean] =>\n\t\t\tentry[1] !== undefined,\n\t);\n\treturn entries.length > 0 ? Object.fromEntries(entries) : undefined;\n}\n"]}
@@ -1,9 +1,6 @@
1
1
  import { isTerminalA2AState } from "../../platform/a2a-task-ledger.js";
2
- export interface ParsedA2AArgs {
3
- positionals: string[];
4
- flags: Map<string, string | boolean>;
5
- }
2
+ export { parseA2AArgs } from "./a2a/args.js";
3
+ export type { ParsedA2AArgs } from "./a2a/args.js";
6
4
  export declare function handleA2ACommand(args: string[]): Promise<void>;
7
- export declare function parseA2AArgs(args: string[]): ParsedA2AArgs;
8
5
  export declare const isA2AWaitCompletionState: typeof isTerminalA2AState;
9
6
  //# sourceMappingURL=a2a.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"a2a.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/a2a.ts"],"names":[],"mappings":"AAmCA,OAAO,EAMN,kBAAkB,EAMlB,MAAM,mCAAmC,CAAC;AA2L3C,MAAM,WAAW,aAAa;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;CACrC;AAeD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgEpE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CA2F1D;AAy1DD,eAAO,MAAM,wBAAwB,2BAAqB,CAAC"}
1
+ {"version":3,"file":"a2a.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/a2a.ts"],"names":[],"mappings":"AAkCA,OAAO,EAMN,kBAAkB,EAMlB,MAAM,mCAAmC,CAAC;AAkD3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAKnD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgEpE;AAwvDD,eAAO,MAAM,wBAAwB,2BAAqB,CAAC"}