@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.
- package/dist/lib/auth/index.d.ts +1 -7
- package/dist/lib/auth/index.d.ts.map +1 -1
- package/dist/lib/auth/index.js +2 -33
- package/dist/lib/auth/index.js.map +1 -1
- package/dist/lib/core/ADCPMultiAgentClient.d.ts +2 -3
- package/dist/lib/core/ADCPMultiAgentClient.d.ts.map +1 -1
- package/dist/lib/core/ADCPMultiAgentClient.js +3 -4
- package/dist/lib/core/ADCPMultiAgentClient.js.map +1 -1
- package/dist/lib/core/AgentClient.d.ts.map +1 -1
- package/dist/lib/core/ConfigurationManager.d.ts.map +1 -1
- package/dist/lib/core/ConfigurationManager.js +5 -14
- package/dist/lib/core/ConfigurationManager.js.map +1 -1
- package/dist/lib/core/CreativeAgentClient.js +1 -1
- package/dist/lib/core/CreativeAgentClient.js.map +1 -1
- package/dist/lib/core/SingleAgentClient.js +4 -4
- package/dist/lib/core/SingleAgentClient.js.map +1 -1
- package/dist/lib/discovery/property-crawler.js +1 -1
- package/dist/lib/discovery/property-crawler.js.map +1 -1
- package/dist/lib/testing/agent-tester.d.ts +33 -0
- package/dist/lib/testing/agent-tester.d.ts.map +1 -0
- package/dist/lib/testing/agent-tester.js +211 -0
- package/dist/lib/testing/agent-tester.js.map +1 -0
- package/dist/lib/testing/client.d.ts +54 -0
- package/dist/lib/testing/client.d.ts.map +1 -0
- package/dist/lib/testing/client.js +293 -0
- package/dist/lib/testing/client.js.map +1 -0
- package/dist/lib/testing/formatter.d.ts +17 -0
- package/dist/lib/testing/formatter.d.ts.map +1 -0
- package/dist/lib/testing/formatter.js +79 -0
- package/dist/lib/testing/formatter.js.map +1 -0
- package/dist/lib/testing/index.d.ts +1 -0
- package/dist/lib/testing/index.d.ts.map +1 -1
- package/dist/lib/testing/index.js +26 -1
- package/dist/lib/testing/index.js.map +1 -1
- package/dist/lib/testing/scenarios/creative.d.ts +24 -0
- package/dist/lib/testing/scenarios/creative.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/creative.js +224 -0
- package/dist/lib/testing/scenarios/creative.js.map +1 -0
- package/dist/lib/testing/scenarios/discovery.d.ts +15 -0
- package/dist/lib/testing/scenarios/discovery.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/discovery.js +66 -0
- package/dist/lib/testing/scenarios/discovery.js.map +1 -0
- package/dist/lib/testing/scenarios/edge-cases.d.ts +64 -0
- package/dist/lib/testing/scenarios/edge-cases.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/edge-cases.js +603 -0
- package/dist/lib/testing/scenarios/edge-cases.js.map +1 -0
- package/dist/lib/testing/scenarios/health.d.ts +12 -0
- package/dist/lib/testing/scenarios/health.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/health.js +21 -0
- package/dist/lib/testing/scenarios/health.js.map +1 -0
- package/dist/lib/testing/scenarios/index.d.ts +12 -0
- package/dist/lib/testing/scenarios/index.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/index.js +38 -0
- package/dist/lib/testing/scenarios/index.js.map +1 -0
- package/dist/lib/testing/scenarios/media-buy.d.ts +59 -0
- package/dist/lib/testing/scenarios/media-buy.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/media-buy.js +422 -0
- package/dist/lib/testing/scenarios/media-buy.js.map +1 -0
- package/dist/lib/testing/scenarios/signals.d.ts +26 -0
- package/dist/lib/testing/scenarios/signals.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/signals.js +227 -0
- package/dist/lib/testing/scenarios/signals.js.map +1 -0
- package/dist/lib/testing/test-helpers.d.ts.map +1 -1
- package/dist/lib/testing/test-helpers.js +2 -6
- package/dist/lib/testing/test-helpers.js.map +1 -1
- package/dist/lib/testing/types.d.ts +92 -0
- package/dist/lib/testing/types.d.ts.map +1 -0
- package/dist/lib/testing/types.js +6 -0
- package/dist/lib/testing/types.js.map +1 -0
- package/dist/lib/types/adcp.d.ts +1 -4
- package/dist/lib/types/adcp.d.ts.map +1 -1
- package/dist/lib/types/core.generated.js +2 -2
- package/dist/lib/types/schemas.generated.d.ts +3 -4
- package/dist/lib/types/schemas.generated.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.js +11 -5
- package/dist/lib/types/schemas.generated.js.map +1 -1
- package/dist/lib/types/tools.generated.d.ts +57 -30
- package/dist/lib/types/tools.generated.d.ts.map +1 -1
- package/dist/lib/types/tools.generated.js.map +1 -1
- 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"}
|