@evalops/maestro 0.10.30 → 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 (80) hide show
  1. package/dist/agent/compaction/cut-points.d.ts +157 -0
  2. package/dist/agent/compaction/cut-points.d.ts.map +1 -0
  3. package/dist/agent/compaction/cut-points.js +341 -0
  4. package/dist/agent/compaction/cut-points.js.map +1 -0
  5. package/dist/agent/compaction.d.ts +4 -144
  6. package/dist/agent/compaction.d.ts.map +1 -1
  7. package/dist/agent/compaction.js +5 -340
  8. package/dist/agent/compaction.js.map +1 -1
  9. package/dist/agent/transport/tool-execution.d.ts +1 -0
  10. package/dist/agent/transport/tool-execution.d.ts.map +1 -1
  11. package/dist/agent/transport/tool-execution.js +23 -3
  12. package/dist/agent/transport/tool-execution.js.map +1 -1
  13. package/dist/agent/transport/tool-phase-summary.d.ts +6 -0
  14. package/dist/agent/transport/tool-phase-summary.d.ts.map +1 -0
  15. package/dist/agent/transport/tool-phase-summary.js +99 -0
  16. package/dist/agent/transport/tool-phase-summary.js.map +1 -0
  17. package/dist/agent/transport/tool-safety-pipeline.d.ts +1 -0
  18. package/dist/agent/transport/tool-safety-pipeline.d.ts.map +1 -1
  19. package/dist/agent/transport/tool-safety-pipeline.js +9 -4
  20. package/dist/agent/transport/tool-safety-pipeline.js.map +1 -1
  21. package/dist/agent/transport.d.ts.map +1 -1
  22. package/dist/agent/transport.js +4 -99
  23. package/dist/agent/transport.js.map +1 -1
  24. package/dist/cli/commands/a2a/args.d.ts +13 -0
  25. package/dist/cli/commands/a2a/args.d.ts.map +1 -0
  26. package/dist/cli/commands/a2a/args.js +327 -0
  27. package/dist/cli/commands/a2a/args.js.map +1 -0
  28. package/dist/cli/commands/a2a/discovery.d.ts +40 -0
  29. package/dist/cli/commands/a2a/discovery.d.ts.map +1 -0
  30. package/dist/cli/commands/a2a/discovery.js +150 -0
  31. package/dist/cli/commands/a2a/discovery.js.map +1 -0
  32. package/dist/cli/commands/a2a.d.ts +2 -5
  33. package/dist/cli/commands/a2a.d.ts.map +1 -1
  34. package/dist/cli/commands/a2a.js +4 -474
  35. package/dist/cli/commands/a2a.js.map +1 -1
  36. package/dist/cli.js +1868 -1591
  37. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  38. package/dist/node_modules/@evalops/tui/package.json +1 -1
  39. package/dist/server/app-context.d.ts +7 -0
  40. package/dist/server/app-context.d.ts.map +1 -1
  41. package/dist/server/app-context.js.map +1 -1
  42. package/dist/server/handlers/chat-ws.d.ts.map +1 -1
  43. package/dist/server/handlers/chat-ws.js +42 -24
  44. package/dist/server/handlers/chat-ws.js.map +1 -1
  45. package/dist/server/handlers/chat.d.ts.map +1 -1
  46. package/dist/server/handlers/chat.js +54 -35
  47. package/dist/server/handlers/chat.js.map +1 -1
  48. package/dist/server/handlers/hosted-runner-identity.d.ts +17 -0
  49. package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
  50. package/dist/server/handlers/hosted-runner-identity.js +7 -0
  51. package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
  52. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
  53. package/dist/server/handlers/platform-a2a-push.js +134 -15
  54. package/dist/server/handlers/platform-a2a-push.js.map +1 -1
  55. package/dist/server/server-utils.d.ts.map +1 -1
  56. package/dist/server/server-utils.js +12 -0
  57. package/dist/server/server-utils.js.map +1 -1
  58. package/dist/server/session-timeline.d.ts.map +1 -1
  59. package/dist/server/session-timeline.js +13 -0
  60. package/dist/server/session-timeline.js.map +1 -1
  61. package/dist/telemetry/maestro-event-catalog.d.ts +30 -0
  62. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
  63. package/dist/telemetry/maestro-event-catalog.js +96 -5
  64. package/dist/telemetry/maestro-event-catalog.js.map +1 -1
  65. package/dist/tools/find.d.ts +2 -0
  66. package/dist/tools/find.d.ts.map +1 -1
  67. package/dist/tools/find.js +25 -12
  68. package/dist/tools/find.js.map +1 -1
  69. package/dist/tools/parallel-ripgrep.d.ts.map +1 -1
  70. package/dist/tools/parallel-ripgrep.js +1 -10
  71. package/dist/tools/parallel-ripgrep.js.map +1 -1
  72. package/dist/tools/ripgrep-utils.d.ts +1 -0
  73. package/dist/tools/ripgrep-utils.d.ts.map +1 -1
  74. package/dist/tools/ripgrep-utils.js +9 -0
  75. package/dist/tools/ripgrep-utils.js.map +1 -1
  76. package/dist/tools/search.d.ts.map +1 -1
  77. package/dist/tools/search.js +4 -4
  78. package/dist/tools/search.js.map +1 -1
  79. package/dist/version.json +2 -2
  80. 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":"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","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"}