@adcp/client 4.8.0 → 4.9.0
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/bin/adcp.js +8 -0
- package/dist/lib/adapters/governance-adapter.d.ts +88 -0
- package/dist/lib/adapters/governance-adapter.d.ts.map +1 -0
- package/dist/lib/adapters/governance-adapter.js +96 -0
- package/dist/lib/adapters/governance-adapter.js.map +1 -0
- package/dist/lib/adapters/index.d.ts +1 -0
- package/dist/lib/adapters/index.d.ts.map +1 -1
- package/dist/lib/adapters/index.js +7 -1
- package/dist/lib/adapters/index.js.map +1 -1
- package/dist/lib/agents/index.generated.d.ts +33 -1
- package/dist/lib/agents/index.generated.d.ts.map +1 -1
- package/dist/lib/agents/index.generated.js +48 -0
- package/dist/lib/agents/index.generated.js.map +1 -1
- package/dist/lib/core/AgentClient.d.ts.map +1 -1
- package/dist/lib/core/AsyncHandler.d.ts +1 -1
- package/dist/lib/core/AsyncHandler.d.ts.map +1 -1
- package/dist/lib/core/AsyncHandler.js.map +1 -1
- package/dist/lib/core/ConversationTypes.d.ts +8 -2
- package/dist/lib/core/ConversationTypes.d.ts.map +1 -1
- package/dist/lib/core/GovernanceMiddleware.d.ts +86 -0
- package/dist/lib/core/GovernanceMiddleware.d.ts.map +1 -0
- package/dist/lib/core/GovernanceMiddleware.js +289 -0
- package/dist/lib/core/GovernanceMiddleware.js.map +1 -0
- package/dist/lib/core/GovernanceTypes.d.ts +118 -0
- package/dist/lib/core/GovernanceTypes.d.ts.map +1 -0
- package/dist/lib/core/GovernanceTypes.js +69 -0
- package/dist/lib/core/GovernanceTypes.js.map +1 -0
- package/dist/lib/core/SingleAgentClient.d.ts +35 -1
- package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
- package/dist/lib/core/SingleAgentClient.js +45 -0
- package/dist/lib/core/SingleAgentClient.js.map +1 -1
- package/dist/lib/core/TaskExecutor.d.ts +10 -0
- package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
- package/dist/lib/core/TaskExecutor.js +95 -10
- package/dist/lib/core/TaskExecutor.js.map +1 -1
- package/dist/lib/index.d.ts +6 -2
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +22 -4
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/observability/index.d.ts +8 -0
- package/dist/lib/observability/index.d.ts.map +1 -0
- package/dist/lib/observability/index.js +17 -0
- package/dist/lib/observability/index.js.map +1 -0
- package/dist/lib/observability/tracing.d.ts +42 -0
- package/dist/lib/observability/tracing.d.ts.map +1 -0
- package/dist/lib/observability/tracing.js +126 -0
- package/dist/lib/observability/tracing.js.map +1 -0
- package/dist/lib/protocols/a2a.d.ts.map +1 -1
- package/dist/lib/protocols/a2a.js +16 -1
- package/dist/lib/protocols/a2a.js.map +1 -1
- package/dist/lib/protocols/index.d.ts.map +1 -1
- package/dist/lib/protocols/index.js +37 -29
- package/dist/lib/protocols/index.js.map +1 -1
- package/dist/lib/protocols/mcp.d.ts.map +1 -1
- package/dist/lib/protocols/mcp.js +21 -1
- package/dist/lib/protocols/mcp.js.map +1 -1
- package/dist/lib/registry/types.generated.d.ts +750 -1
- package/dist/lib/registry/types.generated.d.ts.map +1 -1
- package/dist/lib/registry/types.generated.js +1 -1
- package/dist/lib/testing/agent-tester.d.ts +1 -1
- package/dist/lib/testing/agent-tester.d.ts.map +1 -1
- package/dist/lib/testing/agent-tester.js +36 -11
- package/dist/lib/testing/agent-tester.js.map +1 -1
- package/dist/lib/testing/orchestrator.d.ts +0 -2
- package/dist/lib/testing/orchestrator.d.ts.map +1 -1
- package/dist/lib/testing/orchestrator.js +14 -3
- package/dist/lib/testing/orchestrator.js.map +1 -1
- package/dist/lib/testing/scenarios/capabilities.d.ts.map +1 -1
- package/dist/lib/testing/scenarios/capabilities.js +64 -4
- package/dist/lib/testing/scenarios/capabilities.js.map +1 -1
- package/dist/lib/testing/scenarios/creative.d.ts +14 -0
- package/dist/lib/testing/scenarios/creative.d.ts.map +1 -1
- package/dist/lib/testing/scenarios/creative.js +241 -42
- package/dist/lib/testing/scenarios/creative.js.map +1 -1
- package/dist/lib/testing/scenarios/governance.d.ts +48 -0
- package/dist/lib/testing/scenarios/governance.d.ts.map +1 -1
- package/dist/lib/testing/scenarios/governance.js +675 -0
- package/dist/lib/testing/scenarios/governance.js.map +1 -1
- package/dist/lib/testing/scenarios/index.d.ts +3 -3
- package/dist/lib/testing/scenarios/index.d.ts.map +1 -1
- package/dist/lib/testing/scenarios/index.js +8 -1
- package/dist/lib/testing/scenarios/index.js.map +1 -1
- package/dist/lib/testing/scenarios/media-buy.d.ts +8 -0
- package/dist/lib/testing/scenarios/media-buy.d.ts.map +1 -1
- package/dist/lib/testing/scenarios/media-buy.js +225 -19
- package/dist/lib/testing/scenarios/media-buy.js.map +1 -1
- package/dist/lib/testing/types.d.ts +1 -1
- package/dist/lib/testing/types.d.ts.map +1 -1
- package/dist/lib/types/core.generated.d.ts +629 -5
- package/dist/lib/types/core.generated.d.ts.map +1 -1
- package/dist/lib/types/core.generated.js +1 -1
- package/dist/lib/types/schemas.generated.d.ts +13059 -11101
- package/dist/lib/types/schemas.generated.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.js +573 -107
- package/dist/lib/types/schemas.generated.js.map +1 -1
- package/dist/lib/types/tools.generated.d.ts +1827 -360
- package/dist/lib/types/tools.generated.d.ts.map +1 -1
- package/dist/lib/utils/capabilities.d.ts +17 -2
- package/dist/lib/utils/capabilities.d.ts.map +1 -1
- package/dist/lib/utils/capabilities.js +26 -2
- package/dist/lib/utils/capabilities.js.map +1 -1
- package/package.json +9 -2
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Buyer-side governance middleware.
|
|
3
|
+
*
|
|
4
|
+
* Intercepts tool calls in the execution path and checks them against
|
|
5
|
+
* a campaign governance agent before allowing execution. Handles:
|
|
6
|
+
* - approved: proceed with execution
|
|
7
|
+
* - denied: return denial to caller
|
|
8
|
+
* - conditions: auto-apply machine-actionable conditions and re-check
|
|
9
|
+
* - escalated: return escalation continuation to caller
|
|
10
|
+
*
|
|
11
|
+
* After execution, reports the outcome back to the governance agent.
|
|
12
|
+
*/
|
|
13
|
+
import type { GovernanceContext, OutcomeType } from '../types/tools.generated';
|
|
14
|
+
import type { Activity } from './AsyncHandler';
|
|
15
|
+
import type { GovernanceConfig, CampaignGovernanceConfig, GovernanceCheckResult, GovernanceOutcome, GovernanceCondition } from './GovernanceTypes';
|
|
16
|
+
/**
|
|
17
|
+
* Typed debug log entries for governance operations.
|
|
18
|
+
*/
|
|
19
|
+
export type GovernanceDebugEntry = {
|
|
20
|
+
type: 'governance_check';
|
|
21
|
+
iteration: number;
|
|
22
|
+
tool: string;
|
|
23
|
+
plan_id: string;
|
|
24
|
+
} | {
|
|
25
|
+
type: 'governance_conditions_applied';
|
|
26
|
+
iteration: number;
|
|
27
|
+
conditions: GovernanceCondition[];
|
|
28
|
+
} | {
|
|
29
|
+
type: 'governance_outcome_error';
|
|
30
|
+
check_id: string;
|
|
31
|
+
error: string;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Set a value at a dot-path in an object. Creates intermediate objects as needed.
|
|
35
|
+
* e.g., setAtPath(obj, 'packages.0.budget', 25000)
|
|
36
|
+
*
|
|
37
|
+
* Path segments are validated against a safe allowlist pattern and a forbidden
|
|
38
|
+
* set to prevent prototype pollution from external governance agent responses.
|
|
39
|
+
*/
|
|
40
|
+
export declare function setAtPath(obj: Record<string, any>, path: string, value: unknown): void;
|
|
41
|
+
/**
|
|
42
|
+
* Extract structured governance context from tool call parameters.
|
|
43
|
+
*
|
|
44
|
+
* Extracts budget, countries, channels, flight dates, and seller URL from
|
|
45
|
+
* common AdCP tool parameter conventions. Override via
|
|
46
|
+
* CampaignGovernanceConfig.extractContext for custom tool schemas.
|
|
47
|
+
*/
|
|
48
|
+
export declare function extractGovernanceContext(params: Record<string, unknown>, config: CampaignGovernanceConfig): GovernanceContext | undefined;
|
|
49
|
+
export declare class GovernanceMiddleware {
|
|
50
|
+
private governanceConfig;
|
|
51
|
+
private onActivity?;
|
|
52
|
+
constructor(governanceConfig: GovernanceConfig, onActivity?: ((activity: Activity) => void | Promise<void>) | undefined);
|
|
53
|
+
/**
|
|
54
|
+
* Check whether this tool requires a governance check.
|
|
55
|
+
*/
|
|
56
|
+
requiresCheck(tool: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Get the campaign governance config. Returns undefined if not configured.
|
|
59
|
+
*/
|
|
60
|
+
get campaign(): CampaignGovernanceConfig | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Run a proposed governance check before sending a tool call to a seller.
|
|
63
|
+
*
|
|
64
|
+
* Returns the governance result. The caller decides how to handle each status:
|
|
65
|
+
* - approved: proceed with execution (params may be modified by conditions)
|
|
66
|
+
* - denied: do not execute
|
|
67
|
+
* - escalated: do not execute, return continuation to caller
|
|
68
|
+
*
|
|
69
|
+
* When conditions are returned with required_value, this method auto-applies
|
|
70
|
+
* them and re-checks, up to maxConditionsIterations.
|
|
71
|
+
*/
|
|
72
|
+
checkProposed(tool: string, params: Record<string, unknown>, debugLogs?: GovernanceDebugEntry[]): Promise<{
|
|
73
|
+
result: GovernanceCheckResult;
|
|
74
|
+
params: Record<string, unknown>;
|
|
75
|
+
}>;
|
|
76
|
+
/**
|
|
77
|
+
* Report the outcome of a tool execution to the governance agent.
|
|
78
|
+
* Called after the seller responds (success or failure).
|
|
79
|
+
*/
|
|
80
|
+
reportOutcome(checkId: string, outcome: OutcomeType, sellerResponse?: Record<string, unknown>, error?: {
|
|
81
|
+
code?: string;
|
|
82
|
+
message: string;
|
|
83
|
+
}, debugLogs?: GovernanceDebugEntry[]): Promise<GovernanceOutcome | undefined>;
|
|
84
|
+
private emitGovernanceActivity;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=GovernanceMiddleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GovernanceMiddleware.d.ts","sourceRoot":"","sources":["../../../src/lib/core/GovernanceMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAGV,iBAAiB,EAGjB,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EACV,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EAEjB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAI3B;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC9E;IAAE,IAAI,EAAE,+BAA+B,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,mBAAmB,EAAE,CAAA;CAAE,GAC/F;IAAE,IAAI,EAAE,0BAA0B,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAQ1E;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAuBtF;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,wBAAwB,GAC/B,iBAAiB,GAAG,SAAS,CAyC/B;AAED,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,UAAU,CAAC;gBADX,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,CAAC,GAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,aAAA;IAGnE;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIpC;;OAEG;IACH,IAAI,QAAQ,IAAI,wBAAwB,GAAG,SAAS,CAEnD;IAED;;;;;;;;;;OAUG;IACG,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,SAAS,GAAE,oBAAoB,EAAO,GACrC,OAAO,CAAC;QAAE,MAAM,EAAE,qBAAqB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IA4G9E;;;OAGG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,EACpB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAC1C,SAAS,GAAE,oBAAoB,EAAO,GACrC,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;YAyE3B,sBAAsB;CAerC"}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Buyer-side governance middleware.
|
|
4
|
+
*
|
|
5
|
+
* Intercepts tool calls in the execution path and checks them against
|
|
6
|
+
* a campaign governance agent before allowing execution. Handles:
|
|
7
|
+
* - approved: proceed with execution
|
|
8
|
+
* - denied: return denial to caller
|
|
9
|
+
* - conditions: auto-apply machine-actionable conditions and re-check
|
|
10
|
+
* - escalated: return escalation continuation to caller
|
|
11
|
+
*
|
|
12
|
+
* After execution, reports the outcome back to the governance agent.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.GovernanceMiddleware = void 0;
|
|
16
|
+
exports.setAtPath = setAtPath;
|
|
17
|
+
exports.extractGovernanceContext = extractGovernanceContext;
|
|
18
|
+
const protocols_1 = require("../protocols");
|
|
19
|
+
const GovernanceTypes_1 = require("./GovernanceTypes");
|
|
20
|
+
const response_unwrapper_1 = require("../utils/response-unwrapper");
|
|
21
|
+
/** Safe pattern for path segments: identifiers or numeric indices */
|
|
22
|
+
const SAFE_PATH_SEGMENT = /^[a-zA-Z_$][a-zA-Z0-9_$]*$|^\d+$/;
|
|
23
|
+
/** Path segments that would cause prototype pollution even though they match the safe pattern. */
|
|
24
|
+
const FORBIDDEN_PATH_SEGMENTS = new Set(['__proto__', 'constructor', 'prototype']);
|
|
25
|
+
/**
|
|
26
|
+
* Set a value at a dot-path in an object. Creates intermediate objects as needed.
|
|
27
|
+
* e.g., setAtPath(obj, 'packages.0.budget', 25000)
|
|
28
|
+
*
|
|
29
|
+
* Path segments are validated against a safe allowlist pattern and a forbidden
|
|
30
|
+
* set to prevent prototype pollution from external governance agent responses.
|
|
31
|
+
*/
|
|
32
|
+
function setAtPath(obj, path, value) {
|
|
33
|
+
if (!path || path.trim() === '') {
|
|
34
|
+
throw new Error('Empty path is not allowed');
|
|
35
|
+
}
|
|
36
|
+
const parts = path.split('.');
|
|
37
|
+
for (const part of parts) {
|
|
38
|
+
if (FORBIDDEN_PATH_SEGMENTS.has(part)) {
|
|
39
|
+
throw new Error(`Invalid path segment: ${part}`);
|
|
40
|
+
}
|
|
41
|
+
if (!SAFE_PATH_SEGMENT.test(part)) {
|
|
42
|
+
throw new Error(`Invalid path segment: ${part}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
let current = obj;
|
|
46
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
47
|
+
const key = parts[i];
|
|
48
|
+
if (current[key] == null || typeof current[key] !== 'object') {
|
|
49
|
+
// Create array if next key is numeric, else object
|
|
50
|
+
current[key] = /^\d+$/.test(parts[i + 1]) ? [] : {};
|
|
51
|
+
}
|
|
52
|
+
current = current[key];
|
|
53
|
+
}
|
|
54
|
+
current[parts[parts.length - 1]] = value;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Extract structured governance context from tool call parameters.
|
|
58
|
+
*
|
|
59
|
+
* Extracts budget, countries, channels, flight dates, and seller URL from
|
|
60
|
+
* common AdCP tool parameter conventions. Override via
|
|
61
|
+
* CampaignGovernanceConfig.extractContext for custom tool schemas.
|
|
62
|
+
*/
|
|
63
|
+
function extractGovernanceContext(params, config) {
|
|
64
|
+
const ctx = {};
|
|
65
|
+
let hasField = false;
|
|
66
|
+
// Extract budget from common locations
|
|
67
|
+
const budget = params.budget;
|
|
68
|
+
if (budget?.total != null && budget?.currency) {
|
|
69
|
+
ctx.total_budget = { amount: budget.total, currency: budget.currency };
|
|
70
|
+
hasField = true;
|
|
71
|
+
}
|
|
72
|
+
// Extract countries
|
|
73
|
+
if (Array.isArray(params.countries) && params.countries.length > 0) {
|
|
74
|
+
ctx.countries = params.countries;
|
|
75
|
+
hasField = true;
|
|
76
|
+
}
|
|
77
|
+
// Extract channels
|
|
78
|
+
const channel = params.channel;
|
|
79
|
+
if (channel) {
|
|
80
|
+
ctx.channels = [channel];
|
|
81
|
+
hasField = true;
|
|
82
|
+
}
|
|
83
|
+
else if (Array.isArray(params.channels) && params.channels.length > 0) {
|
|
84
|
+
ctx.channels = params.channels;
|
|
85
|
+
hasField = true;
|
|
86
|
+
}
|
|
87
|
+
// Extract flight dates
|
|
88
|
+
const flight = params.flight;
|
|
89
|
+
if (flight?.start && flight?.end) {
|
|
90
|
+
ctx.flight = { start: flight.start, end: flight.end };
|
|
91
|
+
hasField = true;
|
|
92
|
+
}
|
|
93
|
+
// Include seller URL if the agent config has it
|
|
94
|
+
if (config.callerUrl) {
|
|
95
|
+
ctx.seller_url = config.callerUrl;
|
|
96
|
+
hasField = true;
|
|
97
|
+
}
|
|
98
|
+
return hasField ? ctx : undefined;
|
|
99
|
+
}
|
|
100
|
+
class GovernanceMiddleware {
|
|
101
|
+
governanceConfig;
|
|
102
|
+
onActivity;
|
|
103
|
+
constructor(governanceConfig, onActivity) {
|
|
104
|
+
this.governanceConfig = governanceConfig;
|
|
105
|
+
this.onActivity = onActivity;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Check whether this tool requires a governance check.
|
|
109
|
+
*/
|
|
110
|
+
requiresCheck(tool) {
|
|
111
|
+
return (0, GovernanceTypes_1.toolRequiresGovernance)(tool, this.governanceConfig);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get the campaign governance config. Returns undefined if not configured.
|
|
115
|
+
*/
|
|
116
|
+
get campaign() {
|
|
117
|
+
return this.governanceConfig.campaign;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Run a proposed governance check before sending a tool call to a seller.
|
|
121
|
+
*
|
|
122
|
+
* Returns the governance result. The caller decides how to handle each status:
|
|
123
|
+
* - approved: proceed with execution (params may be modified by conditions)
|
|
124
|
+
* - denied: do not execute
|
|
125
|
+
* - escalated: do not execute, return continuation to caller
|
|
126
|
+
*
|
|
127
|
+
* When conditions are returned with required_value, this method auto-applies
|
|
128
|
+
* them and re-checks, up to maxConditionsIterations.
|
|
129
|
+
*/
|
|
130
|
+
async checkProposed(tool, params, debugLogs = []) {
|
|
131
|
+
const config = this.governanceConfig.campaign;
|
|
132
|
+
if (!config) {
|
|
133
|
+
throw new Error('Campaign governance not configured');
|
|
134
|
+
}
|
|
135
|
+
const maxReChecks = config.maxConditionsIterations ?? 0;
|
|
136
|
+
let currentParams = structuredClone(params);
|
|
137
|
+
let iteration = 0;
|
|
138
|
+
// Always make the initial governance check. maxConditionsIterations only
|
|
139
|
+
// controls how many times we re-apply conditions and re-check.
|
|
140
|
+
do {
|
|
141
|
+
const request = {
|
|
142
|
+
plan_id: config.planId,
|
|
143
|
+
buyer_campaign_ref: config.buyerCampaignRef ?? '',
|
|
144
|
+
binding: 'proposed',
|
|
145
|
+
caller: config.callerUrl ?? '',
|
|
146
|
+
tool,
|
|
147
|
+
payload: currentParams,
|
|
148
|
+
governance_context: config.extractContext
|
|
149
|
+
? config.extractContext(currentParams)
|
|
150
|
+
: extractGovernanceContext(currentParams, config),
|
|
151
|
+
};
|
|
152
|
+
debugLogs.push({
|
|
153
|
+
type: 'governance_check',
|
|
154
|
+
iteration,
|
|
155
|
+
tool,
|
|
156
|
+
plan_id: config.planId,
|
|
157
|
+
});
|
|
158
|
+
const response = await protocols_1.ProtocolClient.callTool(config.agent, 'check_governance', request, debugLogs);
|
|
159
|
+
// Unwrap protocol response (MCP text content, structuredContent, A2A artifacts)
|
|
160
|
+
const responseData = (0, response_unwrapper_1.unwrapProtocolResponse)(response);
|
|
161
|
+
await this.emitGovernanceActivity('governance_check', {
|
|
162
|
+
tool,
|
|
163
|
+
binding: 'proposed',
|
|
164
|
+
iteration,
|
|
165
|
+
response: responseData,
|
|
166
|
+
});
|
|
167
|
+
const checkResult = (0, GovernanceTypes_1.parseCheckResponse)(responseData);
|
|
168
|
+
if (checkResult.status === 'approved') {
|
|
169
|
+
return { result: checkResult, params: currentParams };
|
|
170
|
+
}
|
|
171
|
+
if (checkResult.status === 'denied' || checkResult.status === 'escalated') {
|
|
172
|
+
return { result: checkResult, params: currentParams };
|
|
173
|
+
}
|
|
174
|
+
// status === 'conditions'
|
|
175
|
+
if (!checkResult.conditions || checkResult.conditions.length === 0) {
|
|
176
|
+
// Conditions status with no conditions — treat as advisory denial
|
|
177
|
+
return { result: checkResult, params: currentParams };
|
|
178
|
+
}
|
|
179
|
+
// Try to auto-apply machine-actionable conditions
|
|
180
|
+
const allApplicable = checkResult.conditions.every(c => c.requiredValue !== undefined);
|
|
181
|
+
if (!allApplicable) {
|
|
182
|
+
// Some conditions are advisory-only (no required_value) — can't auto-apply
|
|
183
|
+
return { result: checkResult, params: currentParams };
|
|
184
|
+
}
|
|
185
|
+
// If we've exhausted re-check iterations, return conditions to caller
|
|
186
|
+
if (iteration >= maxReChecks) {
|
|
187
|
+
return { result: checkResult, params: currentParams };
|
|
188
|
+
}
|
|
189
|
+
// Apply conditions and re-check
|
|
190
|
+
for (const condition of checkResult.conditions) {
|
|
191
|
+
setAtPath(currentParams, condition.field, condition.requiredValue);
|
|
192
|
+
}
|
|
193
|
+
checkResult.conditionsApplied = true;
|
|
194
|
+
checkResult.modifiedParams = currentParams;
|
|
195
|
+
debugLogs.push({
|
|
196
|
+
type: 'governance_conditions_applied',
|
|
197
|
+
iteration,
|
|
198
|
+
conditions: checkResult.conditions,
|
|
199
|
+
});
|
|
200
|
+
iteration++;
|
|
201
|
+
} while (iteration <= maxReChecks);
|
|
202
|
+
// Defensive: the early return at `iteration >= maxReChecks` inside the loop
|
|
203
|
+
// should always fire before this point. If we somehow reach here, treat it
|
|
204
|
+
// as an unresolvable condition so we fail closed.
|
|
205
|
+
return {
|
|
206
|
+
result: {
|
|
207
|
+
checkId: '',
|
|
208
|
+
status: 'denied',
|
|
209
|
+
binding: 'proposed',
|
|
210
|
+
explanation: `Governance conditions could not be resolved after ${maxReChecks} iterations`,
|
|
211
|
+
},
|
|
212
|
+
params: currentParams,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Report the outcome of a tool execution to the governance agent.
|
|
217
|
+
* Called after the seller responds (success or failure).
|
|
218
|
+
*/
|
|
219
|
+
async reportOutcome(checkId, outcome, sellerResponse, error, debugLogs = []) {
|
|
220
|
+
const config = this.governanceConfig.campaign;
|
|
221
|
+
if (!config)
|
|
222
|
+
return undefined;
|
|
223
|
+
const request = {
|
|
224
|
+
plan_id: config.planId,
|
|
225
|
+
check_id: checkId,
|
|
226
|
+
buyer_campaign_ref: config.buyerCampaignRef ?? '',
|
|
227
|
+
outcome,
|
|
228
|
+
};
|
|
229
|
+
if (outcome === 'completed' && sellerResponse) {
|
|
230
|
+
request.seller_response = sellerResponse;
|
|
231
|
+
}
|
|
232
|
+
if (outcome === 'failed' && error) {
|
|
233
|
+
request.error = error;
|
|
234
|
+
}
|
|
235
|
+
try {
|
|
236
|
+
const response = await protocols_1.ProtocolClient.callTool(config.agent, 'report_plan_outcome', request, debugLogs);
|
|
237
|
+
const responseData = (0, response_unwrapper_1.unwrapProtocolResponse)(response);
|
|
238
|
+
await this.emitGovernanceActivity('governance_outcome', {
|
|
239
|
+
check_id: checkId,
|
|
240
|
+
outcome,
|
|
241
|
+
});
|
|
242
|
+
return {
|
|
243
|
+
outcomeId: responseData.outcome_id,
|
|
244
|
+
status: responseData.status,
|
|
245
|
+
committedBudget: responseData.committed_budget,
|
|
246
|
+
findings: responseData.findings?.map(f => ({
|
|
247
|
+
categoryId: f.category_id,
|
|
248
|
+
severity: f.severity,
|
|
249
|
+
explanation: f.explanation,
|
|
250
|
+
details: f.details,
|
|
251
|
+
})),
|
|
252
|
+
planSummary: responseData.plan_summary?.total_committed != null && responseData.plan_summary?.budget_remaining != null
|
|
253
|
+
? {
|
|
254
|
+
totalCommitted: responseData.plan_summary.total_committed,
|
|
255
|
+
budgetRemaining: responseData.plan_summary.budget_remaining,
|
|
256
|
+
}
|
|
257
|
+
: undefined,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
catch (err) {
|
|
261
|
+
// Outcome reporting failure shouldn't fail the task
|
|
262
|
+
debugLogs.push({
|
|
263
|
+
type: 'governance_outcome_error',
|
|
264
|
+
check_id: checkId,
|
|
265
|
+
error: err.message,
|
|
266
|
+
});
|
|
267
|
+
await this.emitGovernanceActivity('governance_outcome', {
|
|
268
|
+
check_id: checkId,
|
|
269
|
+
outcome,
|
|
270
|
+
error: err.message,
|
|
271
|
+
warning: 'Outcome reporting failed — governance agent may have stale state',
|
|
272
|
+
}, 'failed');
|
|
273
|
+
return undefined;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
async emitGovernanceActivity(type, payload, status = 'completed') {
|
|
277
|
+
await this.onActivity?.({
|
|
278
|
+
type,
|
|
279
|
+
operation_id: '',
|
|
280
|
+
agent_id: this.governanceConfig.campaign?.agent.id ?? '',
|
|
281
|
+
task_type: 'governance',
|
|
282
|
+
status,
|
|
283
|
+
payload,
|
|
284
|
+
timestamp: new Date().toISOString(),
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
exports.GovernanceMiddleware = GovernanceMiddleware;
|
|
289
|
+
//# sourceMappingURL=GovernanceMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GovernanceMiddleware.js","sourceRoot":"","sources":["../../../src/lib/core/GovernanceMiddleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Governance middleware types for buyer-side campaign governance.
|
|
3
|
+
*
|
|
4
|
+
* The governance middleware intercepts tool calls and checks them against
|
|
5
|
+
* a campaign governance agent before execution. It handles the full lifecycle:
|
|
6
|
+
* check → execute → report outcome.
|
|
7
|
+
*/
|
|
8
|
+
import type { AgentConfig } from '../types';
|
|
9
|
+
import type { CheckGovernanceResponse, EscalationSeverity, GovernanceMode } from '../types/tools.generated';
|
|
10
|
+
/**
|
|
11
|
+
* Campaign governance agent configuration.
|
|
12
|
+
* The campaign governance agent handles check_governance, sync_plans,
|
|
13
|
+
* report_plan_outcome, and get_plan_audit_logs.
|
|
14
|
+
*/
|
|
15
|
+
export interface CampaignGovernanceConfig {
|
|
16
|
+
/** The governance agent to call */
|
|
17
|
+
agent: AgentConfig;
|
|
18
|
+
/** Plan ID for this advertiser's campaign */
|
|
19
|
+
planId: string;
|
|
20
|
+
/** Buyer's campaign reference (groups checks within a plan) */
|
|
21
|
+
buyerCampaignRef?: string;
|
|
22
|
+
/** Caller URL for the check_governance request */
|
|
23
|
+
callerUrl?: string;
|
|
24
|
+
/** Max re-check iterations after auto-applying conditions. Default: 0 (return conditions to caller without re-checking). The initial governance check always fires. */
|
|
25
|
+
maxConditionsIterations?: number;
|
|
26
|
+
/** Custom context extractor. Overrides the default extraction of budget, countries, channels, flight from tool params. Return undefined to send no context. */
|
|
27
|
+
extractContext?: (params: Record<string, unknown>) => import('../types/tools.generated').GovernanceContext | undefined;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Governance configuration.
|
|
31
|
+
*
|
|
32
|
+
* Campaign governance handles: check_governance, sync_plans,
|
|
33
|
+
* report_plan_outcome, get_plan_audit_logs.
|
|
34
|
+
*/
|
|
35
|
+
export interface GovernanceConfig {
|
|
36
|
+
/** Campaign governance agent */
|
|
37
|
+
campaign?: CampaignGovernanceConfig;
|
|
38
|
+
/**
|
|
39
|
+
* Which tools require governance checks.
|
|
40
|
+
* - 'all': every tool including get_adcp_capabilities (governance tools themselves still excluded)
|
|
41
|
+
* - string[]: only listed tools
|
|
42
|
+
* - function: custom predicate
|
|
43
|
+
* - undefined (default): all tools except get_adcp_capabilities and governance tools
|
|
44
|
+
*/
|
|
45
|
+
scope?: 'all' | string[] | ((tool: string) => boolean);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Determine whether a tool requires a governance check given the config.
|
|
49
|
+
*/
|
|
50
|
+
export declare function toolRequiresGovernance(tool: string, config: GovernanceConfig): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* A single finding from a governance check.
|
|
53
|
+
*/
|
|
54
|
+
export interface GovernanceFinding {
|
|
55
|
+
categoryId: string;
|
|
56
|
+
policyId?: string;
|
|
57
|
+
severity: EscalationSeverity;
|
|
58
|
+
explanation: string;
|
|
59
|
+
confidence?: number;
|
|
60
|
+
uncertaintyReason?: string;
|
|
61
|
+
details?: Record<string, unknown>;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* A condition that must be met before the action can proceed.
|
|
65
|
+
*/
|
|
66
|
+
export interface GovernanceCondition {
|
|
67
|
+
/** Dot-path to the field that needs adjustment */
|
|
68
|
+
field: string;
|
|
69
|
+
/** The value the field must have for approval. When present, condition is machine-actionable. */
|
|
70
|
+
requiredValue?: unknown;
|
|
71
|
+
/** Why this condition is required */
|
|
72
|
+
reason: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Escalation details when a governance check requires human review.
|
|
76
|
+
*/
|
|
77
|
+
export interface GovernanceEscalation {
|
|
78
|
+
reason: string;
|
|
79
|
+
severity: EscalationSeverity;
|
|
80
|
+
requiresHuman: boolean;
|
|
81
|
+
approvalTier?: string;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Governance check result attached to TaskResult.
|
|
85
|
+
*/
|
|
86
|
+
export interface GovernanceCheckResult {
|
|
87
|
+
checkId: string;
|
|
88
|
+
status: 'approved' | 'denied' | 'conditions' | 'escalated';
|
|
89
|
+
binding: 'proposed' | 'committed';
|
|
90
|
+
explanation: string;
|
|
91
|
+
mode?: GovernanceMode;
|
|
92
|
+
findings?: GovernanceFinding[];
|
|
93
|
+
conditions?: GovernanceCondition[];
|
|
94
|
+
escalation?: GovernanceEscalation;
|
|
95
|
+
expiresAt?: string;
|
|
96
|
+
/** Whether conditions were auto-applied by the middleware */
|
|
97
|
+
conditionsApplied?: boolean;
|
|
98
|
+
/** The modified params after conditions were applied */
|
|
99
|
+
modifiedParams?: Record<string, unknown>;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Outcome metadata from report_plan_outcome, attached to TaskResult after completion.
|
|
103
|
+
*/
|
|
104
|
+
export interface GovernanceOutcome {
|
|
105
|
+
outcomeId: string;
|
|
106
|
+
status: 'accepted' | 'findings';
|
|
107
|
+
committedBudget?: number;
|
|
108
|
+
findings?: GovernanceFinding[];
|
|
109
|
+
planSummary?: {
|
|
110
|
+
totalCommitted: number;
|
|
111
|
+
budgetRemaining: number;
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Parse a CheckGovernanceResponse into GovernanceCheckResult.
|
|
116
|
+
*/
|
|
117
|
+
export declare function parseCheckResponse(response: CheckGovernanceResponse): GovernanceCheckResult;
|
|
118
|
+
//# sourceMappingURL=GovernanceTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GovernanceTypes.d.ts","sourceRoot":"","sources":["../../../src/lib/core/GovernanceTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Governance middleware types for buyer-side campaign governance.
|
|
4
|
+
*
|
|
5
|
+
* The governance middleware intercepts tool calls and checks them against
|
|
6
|
+
* a campaign governance agent before execution. It handles the full lifecycle:
|
|
7
|
+
* check → execute → report outcome.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.toolRequiresGovernance = toolRequiresGovernance;
|
|
11
|
+
exports.parseCheckResponse = parseCheckResponse;
|
|
12
|
+
/** Governance tools that are always excluded (infinite recursion otherwise) */
|
|
13
|
+
const GOVERNANCE_SELF_TOOLS = new Set(['sync_plans', 'check_governance', 'report_plan_outcome', 'get_plan_audit_logs']);
|
|
14
|
+
/** Tools excluded by default (governance tools + capabilities) */
|
|
15
|
+
const DEFAULT_EXCLUDED_TOOLS = new Set([...GOVERNANCE_SELF_TOOLS, 'get_adcp_capabilities']);
|
|
16
|
+
/**
|
|
17
|
+
* Determine whether a tool requires a governance check given the config.
|
|
18
|
+
*/
|
|
19
|
+
function toolRequiresGovernance(tool, config) {
|
|
20
|
+
if (!config.campaign)
|
|
21
|
+
return false;
|
|
22
|
+
// Governance tools are always excluded to prevent infinite recursion
|
|
23
|
+
if (GOVERNANCE_SELF_TOOLS.has(tool))
|
|
24
|
+
return false;
|
|
25
|
+
if (config.scope === 'all')
|
|
26
|
+
return true;
|
|
27
|
+
if (Array.isArray(config.scope))
|
|
28
|
+
return config.scope.includes(tool);
|
|
29
|
+
if (typeof config.scope === 'function')
|
|
30
|
+
return config.scope(tool);
|
|
31
|
+
// Default: all tools except excluded set
|
|
32
|
+
return !DEFAULT_EXCLUDED_TOOLS.has(tool);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Parse a CheckGovernanceResponse into GovernanceCheckResult.
|
|
36
|
+
*/
|
|
37
|
+
function parseCheckResponse(response) {
|
|
38
|
+
return {
|
|
39
|
+
checkId: response.check_id,
|
|
40
|
+
status: response.status,
|
|
41
|
+
binding: response.binding,
|
|
42
|
+
explanation: response.explanation,
|
|
43
|
+
mode: response.mode,
|
|
44
|
+
findings: response.findings?.map(f => ({
|
|
45
|
+
categoryId: f.category_id,
|
|
46
|
+
policyId: f.policy_id,
|
|
47
|
+
severity: f.severity,
|
|
48
|
+
explanation: f.explanation,
|
|
49
|
+
confidence: f.confidence,
|
|
50
|
+
uncertaintyReason: f.uncertainty_reason,
|
|
51
|
+
details: f.details,
|
|
52
|
+
})),
|
|
53
|
+
conditions: response.conditions?.map(c => ({
|
|
54
|
+
field: c.field,
|
|
55
|
+
requiredValue: c.required_value,
|
|
56
|
+
reason: c.reason,
|
|
57
|
+
})),
|
|
58
|
+
escalation: response.escalation
|
|
59
|
+
? {
|
|
60
|
+
reason: response.escalation.reason,
|
|
61
|
+
severity: response.escalation.severity,
|
|
62
|
+
requiresHuman: response.escalation.requires_human,
|
|
63
|
+
approvalTier: response.escalation.approval_tier,
|
|
64
|
+
}
|
|
65
|
+
: undefined,
|
|
66
|
+
expiresAt: response.expires_at,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=GovernanceTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GovernanceTypes.js","sourceRoot":"","sources":["../../../src/lib/core/GovernanceTypes.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAuDH,wDAcC;AAyED,gDA+BC;AA/HD,+EAA+E;AAC/E,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAExH,kEAAkE;AAClE,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,qBAAqB,EAAE,uBAAuB,CAAC,CAAC,CAAC;AAE5F;;GAEG;AACH,SAAgB,sBAAsB,CAAC,IAAY,EAAE,MAAwB;IAC3E,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAEnC,qEAAqE;IACrE,IAAI,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAElD,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAExC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEpE,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElE,yCAAyC;IACzC,OAAO,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAsED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,QAAiC;IAClE,OAAO;QACL,OAAO,EAAE,QAAQ,CAAC,QAAQ;QAC1B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACrC,UAAU,EAAE,CAAC,CAAC,WAAW;YACzB,QAAQ,EAAE,CAAC,CAAC,SAAS;YACrB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,iBAAiB,EAAE,CAAC,CAAC,kBAAkB;YACvC,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CAAC;QACH,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzC,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,aAAa,EAAE,CAAC,CAAC,cAAc;YAC/B,MAAM,EAAE,CAAC,CAAC,MAAM;SACjB,CAAC,CAAC;QACH,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC7B,CAAC,CAAC;gBACE,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM;gBAClC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,QAAQ;gBACtC,aAAa,EAAE,QAAQ,CAAC,UAAU,CAAC,cAAc;gBACjD,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC,aAAa;aAChD;YACH,CAAC,CAAC,SAAS;QACb,SAAS,EAAE,QAAQ,CAAC,UAAU;KAC/B,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AgentConfig } from '../types';
|
|
2
|
-
import type { GetProductsRequest, GetProductsResponse, ListCreativeFormatsRequest, ListCreativeFormatsResponse, CreateMediaBuyRequest, UpdateMediaBuyRequest, UpdateMediaBuyResponse, SyncCreativesRequest, SyncCreativesResponse, ListCreativesRequest, ListCreativesResponse, GetMediaBuysRequest, GetMediaBuysResponse, GetMediaBuyDeliveryRequest, GetMediaBuyDeliveryResponse, ProvidePerformanceFeedbackRequest, ProvidePerformanceFeedbackResponse, GetSignalsRequest, GetSignalsResponse, ActivateSignalRequest, ActivateSignalResponse, PreviewCreativeRequest, PreviewCreativeResponse, Format, GetAdCPCapabilitiesRequest, GetAdCPCapabilitiesResponse } from '../types/tools.generated';
|
|
2
|
+
import type { GetProductsRequest, GetProductsResponse, ListCreativeFormatsRequest, ListCreativeFormatsResponse, CreateMediaBuyRequest, UpdateMediaBuyRequest, UpdateMediaBuyResponse, SyncCreativesRequest, SyncCreativesResponse, ListCreativesRequest, ListCreativesResponse, GetMediaBuysRequest, GetMediaBuysResponse, GetMediaBuyDeliveryRequest, GetMediaBuyDeliveryResponse, ProvidePerformanceFeedbackRequest, ProvidePerformanceFeedbackResponse, GetSignalsRequest, GetSignalsResponse, ActivateSignalRequest, ActivateSignalResponse, PreviewCreativeRequest, PreviewCreativeResponse, Format, GetAdCPCapabilitiesRequest, GetAdCPCapabilitiesResponse, SyncPlansRequest, SyncPlansResponse, GetPlanAuditLogsRequest, GetPlanAuditLogsResponse, OutcomeType } from '../types/tools.generated';
|
|
3
3
|
import type { MCPWebhookPayload, CreateMediaBuyResponse } from '../types/core.generated';
|
|
4
4
|
import type { Task as A2ATask, TaskStatusUpdateEvent } from '@a2a-js/sdk';
|
|
5
5
|
import type { InputHandler, TaskOptions, TaskResult, ConversationConfig, TaskInfo } from './ConversationTypes';
|
|
@@ -91,6 +91,8 @@ export interface SingleAgentClientConfig extends ConversationConfig {
|
|
|
91
91
|
*/
|
|
92
92
|
logSchemaViolations?: boolean;
|
|
93
93
|
};
|
|
94
|
+
/** Governance configuration for buyer-side campaign governance */
|
|
95
|
+
governance?: import('./GovernanceTypes').GovernanceConfig;
|
|
94
96
|
}
|
|
95
97
|
/**
|
|
96
98
|
* Internal single-agent client implementation
|
|
@@ -438,6 +440,38 @@ export declare class SingleAgentClient {
|
|
|
438
440
|
* @param options - Task execution options
|
|
439
441
|
*/
|
|
440
442
|
activateSignal(params: ActivateSignalRequest, inputHandler?: InputHandler, options?: TaskOptions): Promise<TaskResult<ActivateSignalResponse>>;
|
|
443
|
+
/**
|
|
444
|
+
* Sync campaign plans to a governance agent.
|
|
445
|
+
* Plans define authorized parameters: budget, channels, flight dates, markets, policies, delegations.
|
|
446
|
+
*
|
|
447
|
+
* Uses the governance agent from config.governance.campaign.agent by default.
|
|
448
|
+
* Pass an explicit agent via options.agent to override.
|
|
449
|
+
*/
|
|
450
|
+
syncPlans(params: SyncPlansRequest, inputHandler?: InputHandler, options?: TaskOptions & {
|
|
451
|
+
agent?: AgentConfig;
|
|
452
|
+
}): Promise<TaskResult<SyncPlansResponse>>;
|
|
453
|
+
/**
|
|
454
|
+
* Get governance audit logs for one or more plans.
|
|
455
|
+
* Returns budget state, channel allocation, per-campaign breakdown, and audit trail.
|
|
456
|
+
*
|
|
457
|
+
* Uses the governance agent from config.governance.campaign.agent by default.
|
|
458
|
+
* Pass an explicit agent via options.agent to override.
|
|
459
|
+
*/
|
|
460
|
+
getPlanAuditLogs(params: GetPlanAuditLogsRequest, options?: TaskOptions & {
|
|
461
|
+
agent?: AgentConfig;
|
|
462
|
+
}): Promise<TaskResult<GetPlanAuditLogsResponse>>;
|
|
463
|
+
/**
|
|
464
|
+
* Report a governance outcome for an async task that has resolved.
|
|
465
|
+
*
|
|
466
|
+
* Use this when a task returned status 'submitted' or 'working' and
|
|
467
|
+
* later resolves via polling or webhooks. The checkId is available
|
|
468
|
+
* on the original TaskResult at result.governance.checkId.
|
|
469
|
+
*/
|
|
470
|
+
reportGovernanceOutcome(checkId: string, outcome: OutcomeType, sellerResponse?: Record<string, unknown>, error?: {
|
|
471
|
+
code?: string;
|
|
472
|
+
message: string;
|
|
473
|
+
}): Promise<import('./GovernanceTypes').GovernanceOutcome | undefined>;
|
|
474
|
+
private getGovernanceAgent;
|
|
441
475
|
/**
|
|
442
476
|
* Get AdCP capabilities
|
|
443
477
|
*
|