@adcp/client 3.4.0 → 3.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/lib/auth/index.d.ts +1 -7
  2. package/dist/lib/auth/index.d.ts.map +1 -1
  3. package/dist/lib/auth/index.js +2 -33
  4. package/dist/lib/auth/index.js.map +1 -1
  5. package/dist/lib/core/ADCPMultiAgentClient.d.ts +2 -3
  6. package/dist/lib/core/ADCPMultiAgentClient.d.ts.map +1 -1
  7. package/dist/lib/core/ADCPMultiAgentClient.js +3 -4
  8. package/dist/lib/core/ADCPMultiAgentClient.js.map +1 -1
  9. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  10. package/dist/lib/core/ConfigurationManager.d.ts.map +1 -1
  11. package/dist/lib/core/ConfigurationManager.js +5 -14
  12. package/dist/lib/core/ConfigurationManager.js.map +1 -1
  13. package/dist/lib/core/CreativeAgentClient.js +1 -1
  14. package/dist/lib/core/CreativeAgentClient.js.map +1 -1
  15. package/dist/lib/core/SingleAgentClient.js +4 -4
  16. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  17. package/dist/lib/discovery/property-crawler.js +1 -1
  18. package/dist/lib/discovery/property-crawler.js.map +1 -1
  19. package/dist/lib/testing/agent-tester.d.ts +33 -0
  20. package/dist/lib/testing/agent-tester.d.ts.map +1 -0
  21. package/dist/lib/testing/agent-tester.js +211 -0
  22. package/dist/lib/testing/agent-tester.js.map +1 -0
  23. package/dist/lib/testing/client.d.ts +54 -0
  24. package/dist/lib/testing/client.d.ts.map +1 -0
  25. package/dist/lib/testing/client.js +293 -0
  26. package/dist/lib/testing/client.js.map +1 -0
  27. package/dist/lib/testing/formatter.d.ts +17 -0
  28. package/dist/lib/testing/formatter.d.ts.map +1 -0
  29. package/dist/lib/testing/formatter.js +79 -0
  30. package/dist/lib/testing/formatter.js.map +1 -0
  31. package/dist/lib/testing/index.d.ts +1 -0
  32. package/dist/lib/testing/index.d.ts.map +1 -1
  33. package/dist/lib/testing/index.js +26 -1
  34. package/dist/lib/testing/index.js.map +1 -1
  35. package/dist/lib/testing/scenarios/creative.d.ts +24 -0
  36. package/dist/lib/testing/scenarios/creative.d.ts.map +1 -0
  37. package/dist/lib/testing/scenarios/creative.js +224 -0
  38. package/dist/lib/testing/scenarios/creative.js.map +1 -0
  39. package/dist/lib/testing/scenarios/discovery.d.ts +15 -0
  40. package/dist/lib/testing/scenarios/discovery.d.ts.map +1 -0
  41. package/dist/lib/testing/scenarios/discovery.js +66 -0
  42. package/dist/lib/testing/scenarios/discovery.js.map +1 -0
  43. package/dist/lib/testing/scenarios/edge-cases.d.ts +64 -0
  44. package/dist/lib/testing/scenarios/edge-cases.d.ts.map +1 -0
  45. package/dist/lib/testing/scenarios/edge-cases.js +603 -0
  46. package/dist/lib/testing/scenarios/edge-cases.js.map +1 -0
  47. package/dist/lib/testing/scenarios/health.d.ts +12 -0
  48. package/dist/lib/testing/scenarios/health.d.ts.map +1 -0
  49. package/dist/lib/testing/scenarios/health.js +21 -0
  50. package/dist/lib/testing/scenarios/health.js.map +1 -0
  51. package/dist/lib/testing/scenarios/index.d.ts +12 -0
  52. package/dist/lib/testing/scenarios/index.d.ts.map +1 -0
  53. package/dist/lib/testing/scenarios/index.js +38 -0
  54. package/dist/lib/testing/scenarios/index.js.map +1 -0
  55. package/dist/lib/testing/scenarios/media-buy.d.ts +59 -0
  56. package/dist/lib/testing/scenarios/media-buy.d.ts.map +1 -0
  57. package/dist/lib/testing/scenarios/media-buy.js +422 -0
  58. package/dist/lib/testing/scenarios/media-buy.js.map +1 -0
  59. package/dist/lib/testing/scenarios/signals.d.ts +26 -0
  60. package/dist/lib/testing/scenarios/signals.d.ts.map +1 -0
  61. package/dist/lib/testing/scenarios/signals.js +227 -0
  62. package/dist/lib/testing/scenarios/signals.js.map +1 -0
  63. package/dist/lib/testing/test-helpers.d.ts.map +1 -1
  64. package/dist/lib/testing/test-helpers.js +2 -6
  65. package/dist/lib/testing/test-helpers.js.map +1 -1
  66. package/dist/lib/testing/types.d.ts +92 -0
  67. package/dist/lib/testing/types.d.ts.map +1 -0
  68. package/dist/lib/testing/types.js +6 -0
  69. package/dist/lib/testing/types.js.map +1 -0
  70. package/dist/lib/types/adcp.d.ts +1 -4
  71. package/dist/lib/types/adcp.d.ts.map +1 -1
  72. package/dist/lib/types/core.generated.js +2 -2
  73. package/dist/lib/types/schemas.generated.d.ts +3 -4
  74. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  75. package/dist/lib/types/schemas.generated.js +11 -5
  76. package/dist/lib/types/schemas.generated.js.map +1 -1
  77. package/dist/lib/types/tools.generated.d.ts +57 -30
  78. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  79. package/dist/lib/types/tools.generated.js.map +1 -1
  80. package/package.json +1 -1
@@ -0,0 +1,33 @@
1
+ /**
2
+ * AdCP Agent E2E Tester
3
+ *
4
+ * Provides comprehensive end-to-end testing of AdCP agents (sales, creative, signals).
5
+ *
6
+ * Features:
7
+ * - Channel-aware testing (only tests features the agent supports)
8
+ * - Optional dry-run mode (real testing requires actual media buys)
9
+ * - Comprehensive scenario coverage based on AdCP spec
10
+ * - Schema validation via @adcp/client
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { testAgent, formatTestResults } from '@adcp/client/testing';
15
+ *
16
+ * const result = await testAgent(
17
+ * 'https://test-agent.adcontextprotocol.org/mcp',
18
+ * 'discovery',
19
+ * { auth: { type: 'bearer', token: 'your-token' } }
20
+ * );
21
+ * console.log(formatTestResults(result));
22
+ * ```
23
+ */
24
+ export type { TestScenario, TestOptions, TestStepResult, AgentProfile, TestResult, TaskResult, Logger } from './types';
25
+ export { setAgentTesterLogger, getLogger, createTestClient, runStep } from './client';
26
+ export { formatTestResults, formatTestResultsJSON, formatTestResultsSummary } from './formatter';
27
+ import type { TestScenario, TestOptions, TestResult } from './types';
28
+ /**
29
+ * Main entry point: Run a test scenario against an agent
30
+ */
31
+ export declare function testAgent(agentUrl: string, scenario: TestScenario, options?: TestOptions): Promise<TestResult>;
32
+ export { testHealthCheck, testDiscovery, testCreateMediaBuy, testFullSalesFlow, testCreativeSync, testCreativeInline, testCreativeFlow, testSignalsFlow, testErrorHandling, testValidation, testPricingEdgeCases, testTemporalValidation, testBehaviorAnalysis, testResponseConsistency, } from './scenarios';
33
+ //# sourceMappingURL=agent-tester.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-tester.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/agent-tester.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGvH,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGtF,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAqBjG,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAgC,MAAM,SAAS,CAAC;AAGnG;;GAEG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CA2KrB;AAGD,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ /**
3
+ * AdCP Agent E2E Tester
4
+ *
5
+ * Provides comprehensive end-to-end testing of AdCP agents (sales, creative, signals).
6
+ *
7
+ * Features:
8
+ * - Channel-aware testing (only tests features the agent supports)
9
+ * - Optional dry-run mode (real testing requires actual media buys)
10
+ * - Comprehensive scenario coverage based on AdCP spec
11
+ * - Schema validation via @adcp/client
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { testAgent, formatTestResults } from '@adcp/client/testing';
16
+ *
17
+ * const result = await testAgent(
18
+ * 'https://test-agent.adcontextprotocol.org/mcp',
19
+ * 'discovery',
20
+ * { auth: { type: 'bearer', token: 'your-token' } }
21
+ * );
22
+ * console.log(formatTestResults(result));
23
+ * ```
24
+ */
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.testResponseConsistency = exports.testBehaviorAnalysis = exports.testTemporalValidation = exports.testPricingEdgeCases = exports.testValidation = exports.testErrorHandling = exports.testSignalsFlow = exports.testCreativeFlow = exports.testCreativeInline = exports.testCreativeSync = exports.testFullSalesFlow = exports.testCreateMediaBuy = exports.testDiscovery = exports.testHealthCheck = exports.formatTestResultsSummary = exports.formatTestResultsJSON = exports.formatTestResults = exports.runStep = exports.createTestClient = exports.getLogger = exports.setAgentTesterLogger = void 0;
27
+ exports.testAgent = testAgent;
28
+ // Re-export client utilities
29
+ var client_1 = require("./client");
30
+ Object.defineProperty(exports, "setAgentTesterLogger", { enumerable: true, get: function () { return client_1.setAgentTesterLogger; } });
31
+ Object.defineProperty(exports, "getLogger", { enumerable: true, get: function () { return client_1.getLogger; } });
32
+ Object.defineProperty(exports, "createTestClient", { enumerable: true, get: function () { return client_1.createTestClient; } });
33
+ Object.defineProperty(exports, "runStep", { enumerable: true, get: function () { return client_1.runStep; } });
34
+ // Re-export formatter
35
+ var formatter_1 = require("./formatter");
36
+ Object.defineProperty(exports, "formatTestResults", { enumerable: true, get: function () { return formatter_1.formatTestResults; } });
37
+ Object.defineProperty(exports, "formatTestResultsJSON", { enumerable: true, get: function () { return formatter_1.formatTestResultsJSON; } });
38
+ Object.defineProperty(exports, "formatTestResultsSummary", { enumerable: true, get: function () { return formatter_1.formatTestResultsSummary; } });
39
+ // Import scenarios
40
+ const scenarios_1 = require("./scenarios");
41
+ const client_2 = require("./client");
42
+ /**
43
+ * Main entry point: Run a test scenario against an agent
44
+ */
45
+ async function testAgent(agentUrl, scenario, options = {}) {
46
+ const startTime = Date.now();
47
+ let steps = [];
48
+ let profile;
49
+ const logger = (0, client_2.getLogger)();
50
+ // Default dry_run to true for safety
51
+ const effectiveOptions = {
52
+ ...options,
53
+ dry_run: options.dry_run !== false,
54
+ test_session_id: options.test_session_id || `addie-test-${Date.now()}`,
55
+ };
56
+ logger.info({ agentUrl, scenario, options: effectiveOptions }, 'Starting agent test');
57
+ try {
58
+ let result;
59
+ switch (scenario) {
60
+ case 'health_check':
61
+ steps = await (0, scenarios_1.testHealthCheck)(agentUrl, effectiveOptions);
62
+ break;
63
+ case 'discovery':
64
+ result = await (0, scenarios_1.testDiscovery)(agentUrl, effectiveOptions);
65
+ steps = result.steps;
66
+ profile = result.profile;
67
+ break;
68
+ case 'create_media_buy':
69
+ result = await (0, scenarios_1.testCreateMediaBuy)(agentUrl, effectiveOptions);
70
+ steps = result.steps;
71
+ profile = result.profile;
72
+ break;
73
+ case 'full_sales_flow':
74
+ result = await (0, scenarios_1.testFullSalesFlow)(agentUrl, effectiveOptions);
75
+ steps = result.steps;
76
+ profile = result.profile;
77
+ break;
78
+ case 'creative_sync':
79
+ result = await (0, scenarios_1.testCreativeSync)(agentUrl, effectiveOptions);
80
+ steps = result.steps;
81
+ profile = result.profile;
82
+ break;
83
+ case 'creative_inline':
84
+ result = await (0, scenarios_1.testCreativeInline)(agentUrl, effectiveOptions);
85
+ steps = result.steps;
86
+ profile = result.profile;
87
+ break;
88
+ case 'creative_reference':
89
+ // Reference creative testing tests the creative_ids flow in create_media_buy.
90
+ // This is lower priority since testCreativeInline covers most creative attachment scenarios.
91
+ steps = [
92
+ {
93
+ step: 'Test reference creatives',
94
+ passed: false,
95
+ duration_ms: 0,
96
+ error: 'creative_reference scenario not yet implemented - use creative_inline instead',
97
+ },
98
+ ];
99
+ break;
100
+ case 'pricing_models':
101
+ // Re-use pricing edge cases for now
102
+ result = await (0, scenarios_1.testPricingEdgeCases)(agentUrl, effectiveOptions);
103
+ steps = result.steps;
104
+ profile = result.profile;
105
+ break;
106
+ case 'creative_flow':
107
+ result = await (0, scenarios_1.testCreativeFlow)(agentUrl, effectiveOptions);
108
+ steps = result.steps;
109
+ profile = result.profile;
110
+ break;
111
+ case 'signals_flow':
112
+ result = await (0, scenarios_1.testSignalsFlow)(agentUrl, effectiveOptions);
113
+ steps = result.steps;
114
+ profile = result.profile;
115
+ break;
116
+ case 'error_handling':
117
+ result = await (0, scenarios_1.testErrorHandling)(agentUrl, effectiveOptions);
118
+ steps = result.steps;
119
+ profile = result.profile;
120
+ break;
121
+ case 'validation':
122
+ result = await (0, scenarios_1.testValidation)(agentUrl, effectiveOptions);
123
+ steps = result.steps;
124
+ profile = result.profile;
125
+ break;
126
+ case 'pricing_edge_cases':
127
+ result = await (0, scenarios_1.testPricingEdgeCases)(agentUrl, effectiveOptions);
128
+ steps = result.steps;
129
+ profile = result.profile;
130
+ break;
131
+ case 'temporal_validation':
132
+ result = await (0, scenarios_1.testTemporalValidation)(agentUrl, effectiveOptions);
133
+ steps = result.steps;
134
+ profile = result.profile;
135
+ break;
136
+ case 'behavior_analysis':
137
+ result = await (0, scenarios_1.testBehaviorAnalysis)(agentUrl, effectiveOptions);
138
+ steps = result.steps;
139
+ profile = result.profile;
140
+ break;
141
+ case 'response_consistency':
142
+ result = await (0, scenarios_1.testResponseConsistency)(agentUrl, effectiveOptions);
143
+ steps = result.steps;
144
+ profile = result.profile;
145
+ break;
146
+ default:
147
+ steps = [
148
+ {
149
+ step: 'Unknown scenario',
150
+ passed: false,
151
+ duration_ms: 0,
152
+ error: `Unknown test scenario: ${scenario}`,
153
+ },
154
+ ];
155
+ }
156
+ }
157
+ catch (error) {
158
+ logger.error({ error, agentUrl, scenario }, 'Agent test failed with exception');
159
+ steps.push({
160
+ step: 'Test execution',
161
+ passed: false,
162
+ duration_ms: Date.now() - startTime,
163
+ error: error instanceof Error ? error.message : String(error),
164
+ });
165
+ }
166
+ const totalDuration = Date.now() - startTime;
167
+ const passedCount = steps.filter(s => s.passed).length;
168
+ const failedCount = steps.filter(s => !s.passed).length;
169
+ const overallPassed = failedCount === 0 && passedCount > 0;
170
+ // Generate summary
171
+ let summary;
172
+ if (overallPassed) {
173
+ summary = `All ${passedCount} test step(s) passed in ${totalDuration}ms`;
174
+ }
175
+ else if (passedCount === 0) {
176
+ summary = `All ${failedCount} test step(s) failed`;
177
+ }
178
+ else {
179
+ summary = `${passedCount} passed, ${failedCount} failed out of ${steps.length} step(s)`;
180
+ }
181
+ const testResult = {
182
+ agent_url: agentUrl,
183
+ scenario,
184
+ overall_passed: overallPassed,
185
+ steps,
186
+ summary,
187
+ total_duration_ms: totalDuration,
188
+ tested_at: new Date().toISOString(),
189
+ agent_profile: profile,
190
+ dry_run: effectiveOptions.dry_run !== false,
191
+ };
192
+ logger.info({ agentUrl, scenario, overallPassed, passedCount, failedCount, totalDuration }, 'Agent test completed');
193
+ return testResult;
194
+ }
195
+ // Re-export individual scenarios for direct use
196
+ var scenarios_2 = require("./scenarios");
197
+ Object.defineProperty(exports, "testHealthCheck", { enumerable: true, get: function () { return scenarios_2.testHealthCheck; } });
198
+ Object.defineProperty(exports, "testDiscovery", { enumerable: true, get: function () { return scenarios_2.testDiscovery; } });
199
+ Object.defineProperty(exports, "testCreateMediaBuy", { enumerable: true, get: function () { return scenarios_2.testCreateMediaBuy; } });
200
+ Object.defineProperty(exports, "testFullSalesFlow", { enumerable: true, get: function () { return scenarios_2.testFullSalesFlow; } });
201
+ Object.defineProperty(exports, "testCreativeSync", { enumerable: true, get: function () { return scenarios_2.testCreativeSync; } });
202
+ Object.defineProperty(exports, "testCreativeInline", { enumerable: true, get: function () { return scenarios_2.testCreativeInline; } });
203
+ Object.defineProperty(exports, "testCreativeFlow", { enumerable: true, get: function () { return scenarios_2.testCreativeFlow; } });
204
+ Object.defineProperty(exports, "testSignalsFlow", { enumerable: true, get: function () { return scenarios_2.testSignalsFlow; } });
205
+ Object.defineProperty(exports, "testErrorHandling", { enumerable: true, get: function () { return scenarios_2.testErrorHandling; } });
206
+ Object.defineProperty(exports, "testValidation", { enumerable: true, get: function () { return scenarios_2.testValidation; } });
207
+ Object.defineProperty(exports, "testPricingEdgeCases", { enumerable: true, get: function () { return scenarios_2.testPricingEdgeCases; } });
208
+ Object.defineProperty(exports, "testTemporalValidation", { enumerable: true, get: function () { return scenarios_2.testTemporalValidation; } });
209
+ Object.defineProperty(exports, "testBehaviorAnalysis", { enumerable: true, get: function () { return scenarios_2.testBehaviorAnalysis; } });
210
+ Object.defineProperty(exports, "testResponseConsistency", { enumerable: true, get: function () { return scenarios_2.testResponseConsistency; } });
211
+ //# sourceMappingURL=agent-tester.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-tester.js","sourceRoot":"","sources":["../../../src/lib/testing/agent-tester.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Test client utilities for AdCP Agent E2E Testing
3
+ */
4
+ import type { TestOptions, TestStepResult, AgentProfile, Logger } from './types';
5
+ /**
6
+ * Set a custom logger for the agent tester
7
+ */
8
+ export declare function setAgentTesterLogger(customLogger: Logger): void;
9
+ /**
10
+ * Get current logger instance
11
+ */
12
+ export declare function getLogger(): Logger;
13
+ /**
14
+ * Create a test client for an agent
15
+ */
16
+ export declare function createTestClient(agentUrl: string, protocol?: 'mcp' | 'a2a', options?: TestOptions): import("..").AgentClient;
17
+ export type TestClient = ReturnType<typeof createTestClient>;
18
+ /**
19
+ * Run a single test step with timing
20
+ */
21
+ export declare function runStep<T>(stepName: string, taskName: string | undefined, fn: () => Promise<T>): Promise<{
22
+ result?: T;
23
+ step: TestStepResult;
24
+ }>;
25
+ /**
26
+ * Discover agent profile - what capabilities does this agent have?
27
+ */
28
+ export declare function discoverAgentProfile(client: TestClient): Promise<{
29
+ profile: AgentProfile;
30
+ step: TestStepResult;
31
+ }>;
32
+ /**
33
+ * Discover what channels, pricing models, formats the agent supports
34
+ * by calling get_products and analyzing the response
35
+ */
36
+ export declare function discoverAgentCapabilities(client: TestClient, profile: AgentProfile, options: TestOptions): Promise<{
37
+ capabilities: Partial<AgentProfile>;
38
+ steps: TestStepResult[];
39
+ }>;
40
+ /**
41
+ * Discover creative formats from a creative agent
42
+ */
43
+ export declare function discoverCreativeFormats(client: TestClient, profile: AgentProfile): Promise<{
44
+ formats: AgentProfile['supported_formats'];
45
+ step: TestStepResult;
46
+ }>;
47
+ /**
48
+ * Discover signals from a signals agent
49
+ */
50
+ export declare function discoverSignals(client: TestClient, profile: AgentProfile, options: TestOptions): Promise<{
51
+ signals: AgentProfile['supported_signals'];
52
+ step: TestStepResult;
53
+ }>;
54
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,EAAE,MAAM,SAAS,CAAC;AAa7F;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAE/D;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,KAAK,GAAG,KAAa,EAAE,OAAO,GAAE,WAAgB,4BAoC5G;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE7D;;GAEG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,CA2B/C;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC;IAAE,OAAO,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,CAuB1D;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAAC,KAAK,EAAE,cAAc,EAAE,CAAA;CAAE,CAAC,CAkF3E;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,YAAY,CAAC,mBAAmB,CAAC,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,CAsE/E;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,YAAY,CAAC,mBAAmB,CAAC,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,CAwD/E"}
@@ -0,0 +1,293 @@
1
+ "use strict";
2
+ /**
3
+ * Test client utilities for AdCP Agent E2E Testing
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.setAgentTesterLogger = setAgentTesterLogger;
7
+ exports.getLogger = getLogger;
8
+ exports.createTestClient = createTestClient;
9
+ exports.runStep = runStep;
10
+ exports.discoverAgentProfile = discoverAgentProfile;
11
+ exports.discoverAgentCapabilities = discoverAgentCapabilities;
12
+ exports.discoverCreativeFormats = discoverCreativeFormats;
13
+ exports.discoverSignals = discoverSignals;
14
+ const ADCPMultiAgentClient_1 = require("../core/ADCPMultiAgentClient");
15
+ // Default console-based logger
16
+ const defaultLogger = {
17
+ info: (ctx, msg) => console.log(`[INFO] ${msg}`, JSON.stringify(ctx, null, 2)),
18
+ error: (ctx, msg) => console.error(`[ERROR] ${msg}`, JSON.stringify(ctx, null, 2)),
19
+ warn: (ctx, msg) => console.warn(`[WARN] ${msg}`, JSON.stringify(ctx, null, 2)),
20
+ debug: () => { }, // Silent by default
21
+ };
22
+ // Allow custom logger injection
23
+ let logger = defaultLogger;
24
+ /**
25
+ * Set a custom logger for the agent tester
26
+ */
27
+ function setAgentTesterLogger(customLogger) {
28
+ logger = customLogger;
29
+ }
30
+ /**
31
+ * Get current logger instance
32
+ */
33
+ function getLogger() {
34
+ return logger;
35
+ }
36
+ /**
37
+ * Create a test client for an agent
38
+ */
39
+ function createTestClient(agentUrl, protocol = 'mcp', options = {}) {
40
+ const headers = {};
41
+ // Dry-run is true by default for safety
42
+ if (options.dry_run !== false) {
43
+ headers['X-Dry-Run'] = 'true';
44
+ }
45
+ if (options.test_session_id) {
46
+ headers['X-Test-Session-ID'] = options.test_session_id;
47
+ }
48
+ // Build agent config with auth_token if provided
49
+ const agentConfig = {
50
+ id: 'test',
51
+ name: 'E2E Test Client',
52
+ agent_uri: agentUrl,
53
+ protocol,
54
+ };
55
+ // Add auth_token to agent config - the library will use it automatically
56
+ if (options.auth?.type === 'bearer' && options.auth?.token) {
57
+ agentConfig.auth_token = options.auth.token;
58
+ }
59
+ const multiClient = new ADCPMultiAgentClient_1.ADCPMultiAgentClient([agentConfig], {
60
+ headers,
61
+ });
62
+ return multiClient.agent('test');
63
+ }
64
+ /**
65
+ * Run a single test step with timing
66
+ */
67
+ async function runStep(stepName, taskName, fn) {
68
+ const start = Date.now();
69
+ try {
70
+ const result = await fn();
71
+ const duration = Date.now() - start;
72
+ return {
73
+ result,
74
+ step: {
75
+ step: stepName,
76
+ task: taskName,
77
+ passed: true,
78
+ duration_ms: duration,
79
+ },
80
+ };
81
+ }
82
+ catch (error) {
83
+ const duration = Date.now() - start;
84
+ const errorMessage = error instanceof Error ? error.message : String(error);
85
+ return {
86
+ step: {
87
+ step: stepName,
88
+ task: taskName,
89
+ passed: false,
90
+ duration_ms: duration,
91
+ error: errorMessage,
92
+ },
93
+ };
94
+ }
95
+ }
96
+ /**
97
+ * Discover agent profile - what capabilities does this agent have?
98
+ */
99
+ async function discoverAgentProfile(client) {
100
+ const { result: agentInfo, step } = await runStep('Discover agent capabilities', 'getAgentInfo', () => client.getAgentInfo());
101
+ const profile = {
102
+ name: agentInfo?.name || 'Unknown',
103
+ tools: agentInfo?.tools?.map((t) => t.name) || [],
104
+ };
105
+ if (agentInfo) {
106
+ step.details = `Agent: ${profile.name}, Tools: ${profile.tools.length}`;
107
+ step.response_preview = JSON.stringify({
108
+ name: profile.name,
109
+ tools: profile.tools,
110
+ }, null, 2);
111
+ }
112
+ return { profile, step };
113
+ }
114
+ /**
115
+ * Discover what channels, pricing models, formats the agent supports
116
+ * by calling get_products and analyzing the response
117
+ */
118
+ async function discoverAgentCapabilities(client, profile, options) {
119
+ const steps = [];
120
+ const capabilities = {};
121
+ if (!profile.tools.includes('get_products')) {
122
+ return { capabilities, steps };
123
+ }
124
+ const brief = options.brief || 'Show me all available advertising products across all channels';
125
+ // Include brand_manifest as some agents require it (e.g., tenant-specific agents)
126
+ const getProductsParams = {
127
+ brief,
128
+ brand_manifest: options.brand_manifest || {
129
+ name: 'E2E Test Brand',
130
+ url: 'https://test.example.com',
131
+ },
132
+ };
133
+ const { result, step } = await runStep('Discover products for capability analysis', 'get_products', async () => client.executeTask('get_products', getProductsParams));
134
+ if (result?.success && result?.data?.products) {
135
+ const products = result.data.products;
136
+ // Extract unique channels
137
+ const channels = new Set();
138
+ const pricingModels = new Set();
139
+ const formatIds = new Set();
140
+ const deliveryTypes = new Set();
141
+ for (const product of products) {
142
+ // Channels from product
143
+ if (product.channels) {
144
+ for (const ch of product.channels) {
145
+ channels.add(ch);
146
+ }
147
+ }
148
+ // Delivery type
149
+ if (product.delivery_type) {
150
+ deliveryTypes.add(product.delivery_type);
151
+ }
152
+ // Pricing models
153
+ if (product.pricing_options) {
154
+ for (const po of product.pricing_options) {
155
+ if (po.model)
156
+ pricingModels.add(po.model);
157
+ }
158
+ }
159
+ // Format IDs
160
+ if (product.format_ids) {
161
+ for (const fid of product.format_ids) {
162
+ const id = typeof fid === 'string' ? fid : fid.id;
163
+ if (id)
164
+ formatIds.add(id);
165
+ }
166
+ }
167
+ }
168
+ capabilities.channels = Array.from(channels);
169
+ capabilities.pricing_models = Array.from(pricingModels);
170
+ capabilities.format_ids = Array.from(formatIds);
171
+ capabilities.delivery_types = Array.from(deliveryTypes);
172
+ step.details = `Found ${products.length} products across ${channels.size} channel(s), ${pricingModels.size} pricing model(s)`;
173
+ step.response_preview = JSON.stringify({
174
+ products_count: products.length,
175
+ channels: capabilities.channels,
176
+ pricing_models: capabilities.pricing_models,
177
+ delivery_types: capabilities.delivery_types,
178
+ format_count: capabilities.format_ids?.length,
179
+ }, null, 2);
180
+ }
181
+ else if (result && !result.success) {
182
+ step.passed = false;
183
+ step.error = result.error || 'get_products failed';
184
+ }
185
+ steps.push(step);
186
+ return { capabilities, steps };
187
+ }
188
+ /**
189
+ * Discover creative formats from a creative agent
190
+ */
191
+ async function discoverCreativeFormats(client, profile) {
192
+ const formats = [];
193
+ if (!profile.tools.includes('list_creative_formats') && !profile.tools.includes('list_formats')) {
194
+ return {
195
+ formats,
196
+ step: {
197
+ step: 'Discover creative formats',
198
+ passed: false,
199
+ duration_ms: 0,
200
+ error: 'Agent does not support list_creative_formats or list_formats',
201
+ },
202
+ };
203
+ }
204
+ const toolName = profile.tools.includes('list_creative_formats') ? 'list_creative_formats' : 'list_formats';
205
+ const { result, step } = await runStep('Discover creative formats', toolName, async () => client.executeTask(toolName, {}));
206
+ if (result?.success && result?.data) {
207
+ const data = result.data;
208
+ const rawFormats = data.formats || data.format_ids || [];
209
+ for (const format of rawFormats) {
210
+ const formatInfo = {
211
+ format_id: format.format_id?.id || format.format_id || format.id || 'unknown',
212
+ name: format.name,
213
+ type: format.type,
214
+ required_assets: [],
215
+ optional_assets: [],
216
+ };
217
+ // Extract asset requirements from format spec
218
+ if (format.asset_slots) {
219
+ for (const slot of format.asset_slots) {
220
+ if (slot.required) {
221
+ formatInfo.required_assets?.push(slot.name || slot.id);
222
+ }
223
+ else {
224
+ formatInfo.optional_assets?.push(slot.name || slot.id);
225
+ }
226
+ }
227
+ }
228
+ formats.push(formatInfo);
229
+ }
230
+ step.details = `Found ${formats.length} format(s)`;
231
+ step.response_preview = JSON.stringify({
232
+ format_count: formats.length,
233
+ format_types: [...new Set(formats.map(f => f.type).filter(Boolean))],
234
+ sample_formats: formats.slice(0, 3).map(f => ({
235
+ id: f.format_id,
236
+ name: f.name,
237
+ required_assets: f.required_assets?.length || 0,
238
+ })),
239
+ }, null, 2);
240
+ }
241
+ else if (result && !result.success) {
242
+ step.passed = false;
243
+ step.error = result.error || `${toolName} failed`;
244
+ }
245
+ return { formats, step };
246
+ }
247
+ /**
248
+ * Discover signals from a signals agent
249
+ */
250
+ async function discoverSignals(client, profile, options) {
251
+ const signals = [];
252
+ if (!profile.tools.includes('get_signals')) {
253
+ return {
254
+ signals,
255
+ step: {
256
+ step: 'Discover signals',
257
+ passed: false,
258
+ duration_ms: 0,
259
+ error: 'Agent does not support get_signals',
260
+ },
261
+ };
262
+ }
263
+ const { result, step } = await runStep('Discover available signals', 'get_signals', async () => client.executeTask('get_signals', {
264
+ brief: options.brief || 'Show me all available audience signals and segments',
265
+ }));
266
+ if (result?.success && result?.data) {
267
+ const data = result.data;
268
+ const rawSignals = data.signals || [];
269
+ for (const signal of rawSignals) {
270
+ signals.push({
271
+ signal_id: signal.signal_id || signal.id,
272
+ name: signal.name,
273
+ type: signal.type || signal.signal_type,
274
+ });
275
+ }
276
+ step.details = `Found ${signals.length} signal(s)`;
277
+ step.response_preview = JSON.stringify({
278
+ signal_count: signals.length,
279
+ signal_types: [...new Set(signals.map(s => s.type).filter(Boolean))],
280
+ sample_signals: signals.slice(0, 5).map(s => ({
281
+ id: s.signal_id,
282
+ name: s.name,
283
+ type: s.type,
284
+ })),
285
+ }, null, 2);
286
+ }
287
+ else if (result && !result.success) {
288
+ step.passed = false;
289
+ step.error = result.error || 'get_signals failed';
290
+ }
291
+ return { signals, step };
292
+ }
293
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/lib/testing/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Test result formatting for AdCP Agent E2E Testing
3
+ */
4
+ import type { TestResult } from './types';
5
+ /**
6
+ * Format test results for display in Slack/chat
7
+ */
8
+ export declare function formatTestResults(result: TestResult): string;
9
+ /**
10
+ * Format test results as JSON for programmatic use
11
+ */
12
+ export declare function formatTestResultsJSON(result: TestResult): string;
13
+ /**
14
+ * Format test results as a compact summary
15
+ */
16
+ export declare function formatTestResultsSummary(result: TestResult): string;
17
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CA4D5D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAEhE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAMnE"}