@agirails/sdk 3.3.0 → 3.4.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/api/agirailsApp.d.ts +21 -1
- package/dist/api/agirailsApp.d.ts.map +1 -1
- package/dist/api/agirailsApp.js.map +1 -1
- package/dist/builders/CounterAcceptBuilder.d.ts +96 -0
- package/dist/builders/CounterAcceptBuilder.d.ts.map +1 -0
- package/dist/builders/CounterAcceptBuilder.js +226 -0
- package/dist/builders/CounterAcceptBuilder.js.map +1 -0
- package/dist/builders/CounterOfferBuilder.d.ts +143 -0
- package/dist/builders/CounterOfferBuilder.d.ts.map +1 -0
- package/dist/builders/CounterOfferBuilder.js +329 -0
- package/dist/builders/CounterOfferBuilder.js.map +1 -0
- package/dist/builders/QuoteBuilder.d.ts.map +1 -1
- package/dist/builders/QuoteBuilder.js +8 -3
- package/dist/builders/QuoteBuilder.js.map +1 -1
- package/dist/builders/index.d.ts +2 -0
- package/dist/builders/index.d.ts.map +1 -1
- package/dist/builders/index.js +7 -1
- package/dist/builders/index.js.map +1 -1
- package/dist/cli/agirails.js +22 -2
- package/dist/cli/agirails.js.map +1 -1
- package/dist/cli/commands/health.js +21 -5
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +25 -5
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/publish.d.ts +34 -0
- package/dist/cli/commands/publish.d.ts.map +1 -1
- package/dist/cli/commands/publish.js +256 -80
- package/dist/cli/commands/publish.js.map +1 -1
- package/dist/cli/commands/repair.d.ts +23 -0
- package/dist/cli/commands/repair.d.ts.map +1 -0
- package/dist/cli/commands/repair.js +210 -0
- package/dist/cli/commands/repair.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +38 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +308 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/test.js +2 -2
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/index.js +6 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/agirailsmdV4.d.ts +46 -1
- package/dist/config/agirailsmdV4.d.ts.map +1 -1
- package/dist/config/agirailsmdV4.js +65 -8
- package/dist/config/agirailsmdV4.js.map +1 -1
- package/dist/config/defaults.d.ts +10 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +10 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/publishPipeline.d.ts +23 -1
- package/dist/config/publishPipeline.d.ts.map +1 -1
- package/dist/config/publishPipeline.js +70 -15
- package/dist/config/publishPipeline.js.map +1 -1
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -3
- package/dist/index.js.map +1 -1
- package/dist/level1/Agent.d.ts +27 -0
- package/dist/level1/Agent.d.ts.map +1 -1
- package/dist/level1/Agent.js +77 -6
- package/dist/level1/Agent.js.map +1 -1
- package/dist/negotiation/BuyerOrchestrator.d.ts +103 -1
- package/dist/negotiation/BuyerOrchestrator.d.ts.map +1 -1
- package/dist/negotiation/BuyerOrchestrator.js +499 -4
- package/dist/negotiation/BuyerOrchestrator.js.map +1 -1
- package/dist/negotiation/DecisionEngine.d.ts +69 -1
- package/dist/negotiation/DecisionEngine.d.ts.map +1 -1
- package/dist/negotiation/DecisionEngine.js +140 -1
- package/dist/negotiation/DecisionEngine.js.map +1 -1
- package/dist/negotiation/PolicyEngine.d.ts +32 -0
- package/dist/negotiation/PolicyEngine.d.ts.map +1 -1
- package/dist/negotiation/PolicyEngine.js.map +1 -1
- package/dist/negotiation/ProviderOrchestrator.d.ts +108 -0
- package/dist/negotiation/ProviderOrchestrator.d.ts.map +1 -0
- package/dist/negotiation/ProviderOrchestrator.js +136 -0
- package/dist/negotiation/ProviderOrchestrator.js.map +1 -0
- package/dist/negotiation/ProviderPolicy.d.ts +143 -0
- package/dist/negotiation/ProviderPolicy.d.ts.map +1 -0
- package/dist/negotiation/ProviderPolicy.js +207 -0
- package/dist/negotiation/ProviderPolicy.js.map +1 -0
- package/dist/negotiation/index.d.ts +8 -1
- package/dist/negotiation/index.d.ts.map +1 -1
- package/dist/negotiation/index.js +8 -1
- package/dist/negotiation/index.js.map +1 -1
- package/dist/negotiation/verifyQuoteOnChain.d.ts +58 -0
- package/dist/negotiation/verifyQuoteOnChain.d.ts.map +1 -0
- package/dist/negotiation/verifyQuoteOnChain.js +83 -0
- package/dist/negotiation/verifyQuoteOnChain.js.map +1 -0
- package/dist/runtime/BlockchainRuntime.d.ts +13 -0
- package/dist/runtime/BlockchainRuntime.d.ts.map +1 -1
- package/dist/runtime/BlockchainRuntime.js +23 -0
- package/dist/runtime/BlockchainRuntime.js.map +1 -1
- package/dist/runtime/IACTPRuntime.d.ts +35 -0
- package/dist/runtime/IACTPRuntime.d.ts.map +1 -1
- package/dist/runtime/MockRuntime.d.ts +11 -0
- package/dist/runtime/MockRuntime.d.ts.map +1 -1
- package/dist/runtime/MockRuntime.js +39 -0
- package/dist/runtime/MockRuntime.js.map +1 -1
- package/dist/runtime/types/MockState.d.ts +10 -0
- package/dist/runtime/types/MockState.d.ts.map +1 -1
- package/dist/runtime/types/MockState.js.map +1 -1
- package/dist/transport/QuoteChannel.d.ts +201 -0
- package/dist/transport/QuoteChannel.d.ts.map +1 -0
- package/dist/transport/QuoteChannel.js +358 -0
- package/dist/transport/QuoteChannel.js.map +1 -0
- package/dist/types/adapter.d.ts +24 -24
- package/package.json +16 -1
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* DecisionEngine — Weighted scoring for agent candidate ranking
|
|
2
|
+
* DecisionEngine — Weighted scoring for agent candidate ranking + per-quote
|
|
3
|
+
* negotiation decisions.
|
|
4
|
+
*
|
|
5
|
+
* Two responsibilities:
|
|
6
|
+
* rank(candidates, maxPrice?) — pick who to quote-request
|
|
7
|
+
* evaluateQuote(quote, policy, …) — AIP-2.1: decide accept|counter|reject
|
|
8
|
+
* given a provider's signed QuoteMessage
|
|
3
9
|
*
|
|
4
10
|
* Scores policy-valid candidates using configurable weights:
|
|
5
11
|
* score = w_quality * quality + w_price * price + w_speed * speed + w_reliability * reliability
|
|
@@ -8,6 +14,7 @@
|
|
|
8
14
|
*
|
|
9
15
|
* Tie-breakers: lower price → better on-time rate → earlier in discovery results.
|
|
10
16
|
*/
|
|
17
|
+
import type { BuyerPolicy } from './PolicyEngine';
|
|
11
18
|
export interface ScoringWeights {
|
|
12
19
|
quality?: number;
|
|
13
20
|
price?: number;
|
|
@@ -32,6 +39,42 @@ export interface ScoredCandidate {
|
|
|
32
39
|
reliability: number;
|
|
33
40
|
};
|
|
34
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Minimal quote shape evaluateQuote operates on. Keeps DecisionEngine
|
|
44
|
+
* decoupled from the full QuoteMessage type + signature verification
|
|
45
|
+
* (that's BuyerOrchestrator's job).
|
|
46
|
+
*/
|
|
47
|
+
export interface QuoteForEvaluation {
|
|
48
|
+
/** Base units as string (bigint-safe). */
|
|
49
|
+
quotedAmount: string;
|
|
50
|
+
/** Base units as string. */
|
|
51
|
+
originalAmount: string;
|
|
52
|
+
/** Base units as string. */
|
|
53
|
+
maxPrice: string;
|
|
54
|
+
/** `true` when the provider flags this as their final offer. */
|
|
55
|
+
final_offer?: boolean;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Decision for a single incoming provider quote.
|
|
59
|
+
*
|
|
60
|
+
* - accept → caller calls acceptQuote(txId, provider's quotedAmount)
|
|
61
|
+
* then linkEscrow. Commits at provider's price.
|
|
62
|
+
* - counter → caller builds + sends a CounterOfferMessage at
|
|
63
|
+
* `amountBaseUnits`. On provider's acceptance, caller
|
|
64
|
+
* calls acceptQuote at the counter amount + linkEscrow.
|
|
65
|
+
* - reject → caller transitions CANCELLED and tries next candidate.
|
|
66
|
+
*/
|
|
67
|
+
export type QuoteEvaluation = {
|
|
68
|
+
action: 'accept';
|
|
69
|
+
reason: string;
|
|
70
|
+
} | {
|
|
71
|
+
action: 'counter';
|
|
72
|
+
amountBaseUnits: string;
|
|
73
|
+
reason: string;
|
|
74
|
+
} | {
|
|
75
|
+
action: 'reject';
|
|
76
|
+
reason: string;
|
|
77
|
+
};
|
|
35
78
|
export declare class DecisionEngine {
|
|
36
79
|
private weights;
|
|
37
80
|
constructor(weights?: ScoringWeights);
|
|
@@ -40,5 +83,30 @@ export declare class DecisionEngine {
|
|
|
40
83
|
* If maxPrice is provided, candidates exceeding it are filtered out.
|
|
41
84
|
*/
|
|
42
85
|
rank(candidates: CandidateStats[], maxPrice?: number): ScoredCandidate[];
|
|
86
|
+
/**
|
|
87
|
+
* AIP-2.1 §5.2 — decide whether to accept a provider's quote,
|
|
88
|
+
* counter at a better price, or reject outright.
|
|
89
|
+
*
|
|
90
|
+
* Decision tree (all arithmetic in BigInt base units; no float drift):
|
|
91
|
+
*
|
|
92
|
+
* 1. Quote exceeds maxPrice → reject
|
|
93
|
+
* 2. Provider flagged final_offer → accept if ≤ max; else reject
|
|
94
|
+
* 3. Quote ≤ target → accept (we'd take this
|
|
95
|
+
* without negotiating)
|
|
96
|
+
* 4. Rounds budget exhausted → accept if ≤ max; else reject
|
|
97
|
+
* 5. counter_strategy === 'walk' → reject (no counter-offers)
|
|
98
|
+
* 6. Otherwise → counter at strategy amount
|
|
99
|
+
*
|
|
100
|
+
* Defaults when policy fields are omitted:
|
|
101
|
+
* rounds_per_provider = 1 (original fixed-price flow)
|
|
102
|
+
* counter_strategy = 'walk' (no counter unless opted in)
|
|
103
|
+
* target_unit_price = 50% of max (conservative — prefer accept)
|
|
104
|
+
*
|
|
105
|
+
* @param quote - minimal shape of the provider's signed quote
|
|
106
|
+
* @param policy - buyer policy; defaults applied inline
|
|
107
|
+
* @param roundsUsedSoFar - how many rounds we've already spent with
|
|
108
|
+
* THIS provider on THIS txId (0 on first evaluation)
|
|
109
|
+
*/
|
|
110
|
+
evaluateQuote(quote: QuoteForEvaluation, policy: BuyerPolicy, roundsUsedSoFar?: number): QuoteEvaluation;
|
|
43
111
|
}
|
|
44
112
|
//# sourceMappingURL=DecisionEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DecisionEngine.d.ts","sourceRoot":"","sources":["../../src/negotiation/DecisionEngine.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"DecisionEngine.d.ts","sourceRoot":"","sources":["../../src/negotiation/DecisionEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAMlD,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAMD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAiBzC,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAA2B;gBAE9B,OAAO,CAAC,EAAE,cAAc;IAkBpC;;;OAGG;IACH,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,eAAe,EAAE;IAiFxE;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,aAAa,CACX,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,WAAW,EACnB,eAAe,SAAI,GAClB,eAAe;CA8EnB"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* DecisionEngine — Weighted scoring for agent candidate ranking
|
|
3
|
+
* DecisionEngine — Weighted scoring for agent candidate ranking + per-quote
|
|
4
|
+
* negotiation decisions.
|
|
5
|
+
*
|
|
6
|
+
* Two responsibilities:
|
|
7
|
+
* rank(candidates, maxPrice?) — pick who to quote-request
|
|
8
|
+
* evaluateQuote(quote, policy, …) — AIP-2.1: decide accept|counter|reject
|
|
9
|
+
* given a provider's signed QuoteMessage
|
|
4
10
|
*
|
|
5
11
|
* Scores policy-valid candidates using configurable weights:
|
|
6
12
|
* score = w_quality * quality + w_price * price + w_speed * speed + w_reliability * reliability
|
|
@@ -111,6 +117,139 @@ class DecisionEngine {
|
|
|
111
117
|
});
|
|
112
118
|
return scored;
|
|
113
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* AIP-2.1 §5.2 — decide whether to accept a provider's quote,
|
|
122
|
+
* counter at a better price, or reject outright.
|
|
123
|
+
*
|
|
124
|
+
* Decision tree (all arithmetic in BigInt base units; no float drift):
|
|
125
|
+
*
|
|
126
|
+
* 1. Quote exceeds maxPrice → reject
|
|
127
|
+
* 2. Provider flagged final_offer → accept if ≤ max; else reject
|
|
128
|
+
* 3. Quote ≤ target → accept (we'd take this
|
|
129
|
+
* without negotiating)
|
|
130
|
+
* 4. Rounds budget exhausted → accept if ≤ max; else reject
|
|
131
|
+
* 5. counter_strategy === 'walk' → reject (no counter-offers)
|
|
132
|
+
* 6. Otherwise → counter at strategy amount
|
|
133
|
+
*
|
|
134
|
+
* Defaults when policy fields are omitted:
|
|
135
|
+
* rounds_per_provider = 1 (original fixed-price flow)
|
|
136
|
+
* counter_strategy = 'walk' (no counter unless opted in)
|
|
137
|
+
* target_unit_price = 50% of max (conservative — prefer accept)
|
|
138
|
+
*
|
|
139
|
+
* @param quote - minimal shape of the provider's signed quote
|
|
140
|
+
* @param policy - buyer policy; defaults applied inline
|
|
141
|
+
* @param roundsUsedSoFar - how many rounds we've already spent with
|
|
142
|
+
* THIS provider on THIS txId (0 on first evaluation)
|
|
143
|
+
*/
|
|
144
|
+
evaluateQuote(quote, policy, roundsUsedSoFar = 0) {
|
|
145
|
+
let quoted;
|
|
146
|
+
let max;
|
|
147
|
+
try {
|
|
148
|
+
quoted = BigInt(quote.quotedAmount);
|
|
149
|
+
max = BigInt(quote.maxPrice);
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return { action: 'reject', reason: 'Quote has non-numeric amount fields' };
|
|
153
|
+
}
|
|
154
|
+
if (quoted > max) {
|
|
155
|
+
return { action: 'reject', reason: `Quote ${quoted} exceeds maxPrice ${max}` };
|
|
156
|
+
}
|
|
157
|
+
// Target unit price — defaults to half of max when policy omits it.
|
|
158
|
+
// Convert via string-based scaling (no Number * 1e6 round-trip)
|
|
159
|
+
// so big amounts ($9q+ in base units) stay precise. Default-half
|
|
160
|
+
// path uses BigInt division which is also exact.
|
|
161
|
+
const maxHumanRaw = policy.constraints.max_unit_price.amount;
|
|
162
|
+
const targetBu = policy.target_unit_price
|
|
163
|
+
? humanToBaseUnits(policy.target_unit_price.amount, 1000000n)
|
|
164
|
+
: humanToBaseUnits(maxHumanRaw, 1000000n) / 2n;
|
|
165
|
+
if (quote.final_offer === true) {
|
|
166
|
+
// Provider flagged last round — accept if we can afford it,
|
|
167
|
+
// otherwise walk. No point trying to counter something marked
|
|
168
|
+
// "take it or leave it".
|
|
169
|
+
return quoted <= max
|
|
170
|
+
? { action: 'accept', reason: 'Final offer from provider, within max' }
|
|
171
|
+
: { action: 'reject', reason: 'Final offer exceeds max (should already be filtered above, defense-in-depth)' };
|
|
172
|
+
}
|
|
173
|
+
if (quoted <= targetBu) {
|
|
174
|
+
return { action: 'accept', reason: `Quote ${quoted} ≤ target ${targetBu}` };
|
|
175
|
+
}
|
|
176
|
+
const roundsPerProvider = policy.negotiation.rounds_per_provider ?? 1;
|
|
177
|
+
if (roundsUsedSoFar + 1 >= roundsPerProvider) {
|
|
178
|
+
// We're on our last permitted round with this provider. Accept if
|
|
179
|
+
// affordable rather than walk away; the alternative is starting
|
|
180
|
+
// over with a worse-ranked candidate.
|
|
181
|
+
return quoted <= max
|
|
182
|
+
? { action: 'accept', reason: `Rounds budget exhausted; accepting ${quoted} ≤ max ${max}` }
|
|
183
|
+
: { action: 'reject', reason: 'Rounds budget exhausted and quote > max' };
|
|
184
|
+
}
|
|
185
|
+
const strategy = policy.negotiation.counter_strategy ?? 'walk';
|
|
186
|
+
if (strategy === 'walk') {
|
|
187
|
+
return { action: 'reject', reason: 'Quote above target and counter_strategy=walk' };
|
|
188
|
+
}
|
|
189
|
+
// Compute counter amount per strategy. Never below platform minimum
|
|
190
|
+
// ($0.05 = 50_000 base units) — that's a QuoteBuilder invariant too,
|
|
191
|
+
// so we front-load the check to avoid handing the builder garbage.
|
|
192
|
+
const PLATFORM_MIN = 50000n;
|
|
193
|
+
let counterBu;
|
|
194
|
+
if (strategy === 'undercut') {
|
|
195
|
+
// Go straight to our target; provider can take it or counter-back.
|
|
196
|
+
counterBu = targetBu;
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
// midpoint: halfway between quoted and target.
|
|
200
|
+
counterBu = (quoted + targetBu) / 2n;
|
|
201
|
+
}
|
|
202
|
+
if (counterBu < PLATFORM_MIN)
|
|
203
|
+
counterBu = PLATFORM_MIN;
|
|
204
|
+
if (counterBu >= quoted) {
|
|
205
|
+
// Counter must be strictly below quote for CounterOfferBuilder to
|
|
206
|
+
// accept it (otherwise "just accept the quote"). Fall back to
|
|
207
|
+
// accepting the provider's quote if our strategy math doesn't
|
|
208
|
+
// yield a lower amount.
|
|
209
|
+
return { action: 'accept', reason: 'Counter math would not undercut — accepting provider quote' };
|
|
210
|
+
}
|
|
211
|
+
return {
|
|
212
|
+
action: 'counter',
|
|
213
|
+
amountBaseUnits: counterBu.toString(),
|
|
214
|
+
reason: `counter_strategy=${strategy}: counter at ${counterBu} vs quote ${quoted}`,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
114
217
|
}
|
|
115
218
|
exports.DecisionEngine = DecisionEngine;
|
|
219
|
+
/**
|
|
220
|
+
* Convert a human amount (e.g. 5, 10.5) to base units as bigint
|
|
221
|
+
* using string parsing — never goes through Number * 1e6, so amounts
|
|
222
|
+
* past the JavaScript safe-integer range still scale exactly (within
|
|
223
|
+
* what JavaScript's Number can represent).
|
|
224
|
+
*
|
|
225
|
+
* `perUsd` should equal 10^decimals for the target currency
|
|
226
|
+
* (1_000_000n for USDC's 6 decimals).
|
|
227
|
+
*
|
|
228
|
+
* Uses Number.toLocaleString to force decimal notation: `String(1e21)`
|
|
229
|
+
* yields `"1e+21"` which BigInt() rejects, so we instead emit
|
|
230
|
+
* `"1000000000000000000000"` and parse cleanly. Negatives and
|
|
231
|
+
* non-finite values fail loud.
|
|
232
|
+
*/
|
|
233
|
+
function humanToBaseUnits(amount, perUsd) {
|
|
234
|
+
if (!Number.isFinite(amount)) {
|
|
235
|
+
throw new Error(`humanToBaseUnits: amount must be finite (got ${amount})`);
|
|
236
|
+
}
|
|
237
|
+
if (amount < 0) {
|
|
238
|
+
throw new Error(`humanToBaseUnits: amount must be non-negative (got ${amount})`);
|
|
239
|
+
}
|
|
240
|
+
const decimalsLen = String(perUsd).length - 1;
|
|
241
|
+
// toLocaleString returns fixed (decimal) notation even when the
|
|
242
|
+
// number's default String() coercion would use scientific notation.
|
|
243
|
+
// useGrouping:false strips thousands separators (",") so the parser
|
|
244
|
+
// sees a single contiguous numeric run.
|
|
245
|
+
const fixed = amount.toLocaleString('en-US', {
|
|
246
|
+
useGrouping: false,
|
|
247
|
+
maximumFractionDigits: decimalsLen,
|
|
248
|
+
});
|
|
249
|
+
const [whole, frac = ''] = fixed.split('.');
|
|
250
|
+
const fracPadded = (frac + '0'.repeat(decimalsLen)).slice(0, decimalsLen);
|
|
251
|
+
const wholeBu = BigInt(whole) * perUsd;
|
|
252
|
+
const fracBu = fracPadded ? BigInt(fracPadded) : 0n;
|
|
253
|
+
return wholeBu + fracBu;
|
|
254
|
+
}
|
|
116
255
|
//# sourceMappingURL=DecisionEngine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DecisionEngine.js","sourceRoot":"","sources":["../../src/negotiation/DecisionEngine.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"DecisionEngine.js","sourceRoot":"","sources":["../../src/negotiation/DecisionEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,27 @@ export interface BuyerPolicy {
|
|
|
28
28
|
negotiation: {
|
|
29
29
|
rounds_max: number;
|
|
30
30
|
quote_ttl: string;
|
|
31
|
+
/**
|
|
32
|
+
* Maximum back-and-forth rounds with ONE provider before walking
|
|
33
|
+
* away. 1 = take the provider's first quote or reject (no counter).
|
|
34
|
+
* 2+ = send counter-offer(s) within this budget. Defaults to 1.
|
|
35
|
+
*/
|
|
36
|
+
rounds_per_provider?: number;
|
|
37
|
+
/**
|
|
38
|
+
* How to compute counter-offer amounts when policy decides to
|
|
39
|
+
* negotiate rather than accept:
|
|
40
|
+
* 'midpoint' — (quote + target) / 2. Balanced.
|
|
41
|
+
* 'undercut' — target (our ideal). Aggressive.
|
|
42
|
+
* 'walk' — no counter; reject. Default for rounds_per_provider=1.
|
|
43
|
+
*/
|
|
44
|
+
counter_strategy?: 'midpoint' | 'undercut' | 'walk';
|
|
45
|
+
/**
|
|
46
|
+
* Seconds to wait for provider's explicit off-chain acceptance
|
|
47
|
+
* of a counter-offer before we give up and cancel. Defaults to
|
|
48
|
+
* the quote_ttl value (provider has as long to respond as their
|
|
49
|
+
* original quote was valid for).
|
|
50
|
+
*/
|
|
51
|
+
counter_response_ttl_seconds?: number;
|
|
31
52
|
};
|
|
32
53
|
selection: {
|
|
33
54
|
min_reputation?: number;
|
|
@@ -39,6 +60,17 @@ export interface BuyerPolicy {
|
|
|
39
60
|
reliability?: number;
|
|
40
61
|
};
|
|
41
62
|
};
|
|
63
|
+
/**
|
|
64
|
+
* Target unit price buyer would prefer to pay (separate from the hard
|
|
65
|
+
* maxUnit ceiling above). Used by DecisionEngine.evaluateQuote to
|
|
66
|
+
* decide accept-vs-counter: if provider quote ≤ target → accept.
|
|
67
|
+
* Defaults to 50% of max_unit_price.
|
|
68
|
+
*/
|
|
69
|
+
target_unit_price?: {
|
|
70
|
+
amount: number;
|
|
71
|
+
currency: string;
|
|
72
|
+
unit: string;
|
|
73
|
+
};
|
|
42
74
|
}
|
|
43
75
|
export interface QuoteOffer {
|
|
44
76
|
provider: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolicyEngine.d.ts","sourceRoot":"","sources":["../../src/negotiation/PolicyEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE;QACX,cAAc,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QACnE,eAAe,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;KACvD,CAAC;IACF,WAAW,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"PolicyEngine.d.ts","sourceRoot":"","sources":["../../src/negotiation/PolicyEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolicyEngine.js","sourceRoot":"","sources":["../../src/negotiation/PolicyEngine.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAEH,2BAA+F;AAC/F,+BAA4B;
|
|
1
|
+
{"version":3,"file":"PolicyEngine.js","sourceRoot":"","sources":["../../src/negotiation/PolicyEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProviderOrchestrator — autonomous provider-side quote flow.
|
|
3
|
+
*
|
|
4
|
+
* Symmetric to BuyerOrchestrator but smaller: one decision per incoming
|
|
5
|
+
* request (quote-or-skip, at what price), one submitQuote tx on-chain,
|
|
6
|
+
* one off-chain POST to the buyer's quote channel. Counter-offer
|
|
7
|
+
* evaluation is delegated to the policy engine; counter-counter
|
|
8
|
+
* strategies are Phase 3 territory and out of scope here.
|
|
9
|
+
*
|
|
10
|
+
* This module does NOT listen to the chain. Callers (Agent.ts in
|
|
11
|
+
* Phase 3) surface an IncomingRequest + consumer endpoint; the
|
|
12
|
+
* orchestrator decides + acts + returns the outcome.
|
|
13
|
+
*
|
|
14
|
+
* @module negotiation/ProviderOrchestrator
|
|
15
|
+
* @see Protocol/aips/AIP-2.1-DRAFT.md §5.2
|
|
16
|
+
*/
|
|
17
|
+
import { Signer } from 'ethers';
|
|
18
|
+
import { IACTPRuntime } from '../runtime/IACTPRuntime';
|
|
19
|
+
import { QuoteMessage } from '../builders/QuoteBuilder';
|
|
20
|
+
import { CounterOfferMessage } from '../builders/CounterOfferBuilder';
|
|
21
|
+
import { NonceManager } from '../utils/NonceManager';
|
|
22
|
+
import { QuoteChannelClient } from '../transport/QuoteChannel';
|
|
23
|
+
import { ProviderPolicy, IncomingRequest } from './ProviderPolicy';
|
|
24
|
+
export interface ProviderOrchestratorConfig {
|
|
25
|
+
policy: ProviderPolicy;
|
|
26
|
+
runtime: IACTPRuntime;
|
|
27
|
+
/** Provider's EOA signer — signs QuoteMessages. */
|
|
28
|
+
signer: Signer;
|
|
29
|
+
/** Kernel address the signer will use for EIP-712 domain. */
|
|
30
|
+
kernelAddress: string;
|
|
31
|
+
/** Chain id the signer is on (84532 or 8453). */
|
|
32
|
+
chainId: number;
|
|
33
|
+
/**
|
|
34
|
+
* Nonce manager for provider's quote messages. Defaults to an
|
|
35
|
+
* in-memory manager. Production providers should pass a persistent
|
|
36
|
+
* one so restarts don't replay nonces (NonceManager has a FileBased
|
|
37
|
+
* variant).
|
|
38
|
+
*/
|
|
39
|
+
nonceManager?: NonceManager;
|
|
40
|
+
/** Channel client for off-chain delivery. Defaults to a fresh one. */
|
|
41
|
+
channel?: QuoteChannelClient;
|
|
42
|
+
}
|
|
43
|
+
export type QuoteDecision = {
|
|
44
|
+
action: 'quote';
|
|
45
|
+
/** Quote amount in base units (bigint-as-string) to avoid float drift. */
|
|
46
|
+
amountBaseUnits: string;
|
|
47
|
+
reason: string;
|
|
48
|
+
} | {
|
|
49
|
+
action: 'skip';
|
|
50
|
+
reason: string;
|
|
51
|
+
violations: ReadonlyArray<{
|
|
52
|
+
rule: string;
|
|
53
|
+
detail: string;
|
|
54
|
+
}>;
|
|
55
|
+
};
|
|
56
|
+
export interface QuoteResult {
|
|
57
|
+
decision: QuoteDecision;
|
|
58
|
+
/** Set when action === 'quote' and both on-chain + off-chain calls succeeded. */
|
|
59
|
+
quote?: QuoteMessage;
|
|
60
|
+
/** Set when action === 'quote' and the off-chain POST failed (on-chain still succeeded — caller should retry channel only). */
|
|
61
|
+
channelError?: string;
|
|
62
|
+
}
|
|
63
|
+
export type CounterDecision = {
|
|
64
|
+
action: 'accept';
|
|
65
|
+
reason: string;
|
|
66
|
+
} | {
|
|
67
|
+
action: 'reject';
|
|
68
|
+
reason: string;
|
|
69
|
+
};
|
|
70
|
+
export declare class ProviderOrchestrator {
|
|
71
|
+
private readonly policy;
|
|
72
|
+
private readonly policyEngine;
|
|
73
|
+
private readonly runtime;
|
|
74
|
+
private readonly signer;
|
|
75
|
+
private readonly kernelAddress;
|
|
76
|
+
private readonly chainId;
|
|
77
|
+
private readonly nonceManager;
|
|
78
|
+
private readonly channel;
|
|
79
|
+
private readonly quoteBuilder;
|
|
80
|
+
private readonly counterVerifier;
|
|
81
|
+
constructor(cfg: ProviderOrchestratorConfig);
|
|
82
|
+
/**
|
|
83
|
+
* Decide whether to quote. Does NOT touch the chain — pure policy.
|
|
84
|
+
* Use `quote()` below to act on the decision.
|
|
85
|
+
*/
|
|
86
|
+
evaluateRequest(req: IncomingRequest): QuoteDecision;
|
|
87
|
+
/**
|
|
88
|
+
* Full quote flow: evaluate → build signed QuoteMessage → submit
|
|
89
|
+
* on-chain → POST to buyer's endpoint.
|
|
90
|
+
*
|
|
91
|
+
* On-chain failure → throws (caller decides retry / cancel).
|
|
92
|
+
* Off-chain POST failure → returns successfully with `channelError`
|
|
93
|
+
* set so caller knows to retry only the delivery step. Preserves the
|
|
94
|
+
* invariant "on-chain tx is what buyer observes regardless of our
|
|
95
|
+
* off-chain delivery".
|
|
96
|
+
*/
|
|
97
|
+
quote(req: IncomingRequest, providerDID: string, consumerEndpoint?: string): Promise<QuoteResult>;
|
|
98
|
+
/**
|
|
99
|
+
* Verify + evaluate a buyer counter-offer. Returns the decision;
|
|
100
|
+
* does NOT send any response — Phase 3 wires the response path.
|
|
101
|
+
*
|
|
102
|
+
* @throws if the counter signature / band / expiry fails verify.
|
|
103
|
+
*/
|
|
104
|
+
evaluateCounter(counter: CounterOfferMessage): Promise<CounterDecision>;
|
|
105
|
+
/** Read-only policy accessor for UIs and tests. */
|
|
106
|
+
getPolicy(): ProviderPolicy;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=ProviderOrchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProviderOrchestrator.d.ts","sourceRoot":"","sources":["../../src/negotiation/ProviderOrchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAgB,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAEL,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAwB,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,cAAc,EAEd,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAM1B,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,YAAY,CAAC;IACtB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,aAAa,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,sEAAsE;IACtE,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,MAAM,MAAM,aAAa,GACrB;IACE,MAAM,EAAE,OAAO,CAAC;IAChB,0EAA0E;IAC1E,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC;AAEpG,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,iFAAiF;IACjF,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,+HAA+H;IAC/H,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAMzC,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuB;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsB;gBAE1C,GAAG,EAAE,0BAA0B;IAe3C;;;OAGG;IACH,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,aAAa;IAgBpD;;;;;;;;;OASG;IACG,KAAK,CACT,GAAG,EAAE,eAAe,EACpB,WAAW,EAAE,MAAM,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,WAAW,CAAC;IAiDvB;;;;;OAKG;IACG,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;IAQ7E,mDAAmD;IACnD,SAAS,IAAI,cAAc;CAG5B"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ProviderOrchestrator — autonomous provider-side quote flow.
|
|
4
|
+
*
|
|
5
|
+
* Symmetric to BuyerOrchestrator but smaller: one decision per incoming
|
|
6
|
+
* request (quote-or-skip, at what price), one submitQuote tx on-chain,
|
|
7
|
+
* one off-chain POST to the buyer's quote channel. Counter-offer
|
|
8
|
+
* evaluation is delegated to the policy engine; counter-counter
|
|
9
|
+
* strategies are Phase 3 territory and out of scope here.
|
|
10
|
+
*
|
|
11
|
+
* This module does NOT listen to the chain. Callers (Agent.ts in
|
|
12
|
+
* Phase 3) surface an IncomingRequest + consumer endpoint; the
|
|
13
|
+
* orchestrator decides + acts + returns the outcome.
|
|
14
|
+
*
|
|
15
|
+
* @module negotiation/ProviderOrchestrator
|
|
16
|
+
* @see Protocol/aips/AIP-2.1-DRAFT.md §5.2
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.ProviderOrchestrator = void 0;
|
|
20
|
+
const QuoteBuilder_1 = require("../builders/QuoteBuilder");
|
|
21
|
+
const CounterOfferBuilder_1 = require("../builders/CounterOfferBuilder");
|
|
22
|
+
const NonceManager_1 = require("../utils/NonceManager");
|
|
23
|
+
const QuoteChannel_1 = require("../transport/QuoteChannel");
|
|
24
|
+
const ProviderPolicy_1 = require("./ProviderPolicy");
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Orchestrator
|
|
27
|
+
// ============================================================================
|
|
28
|
+
class ProviderOrchestrator {
|
|
29
|
+
constructor(cfg) {
|
|
30
|
+
this.policy = cfg.policy;
|
|
31
|
+
this.policyEngine = new ProviderPolicy_1.ProviderPolicyEngine(cfg.policy);
|
|
32
|
+
this.runtime = cfg.runtime;
|
|
33
|
+
this.signer = cfg.signer;
|
|
34
|
+
this.kernelAddress = cfg.kernelAddress;
|
|
35
|
+
this.chainId = cfg.chainId;
|
|
36
|
+
this.nonceManager = cfg.nonceManager ?? new NonceManager_1.InMemoryNonceManager();
|
|
37
|
+
this.channel = cfg.channel ?? new QuoteChannel_1.QuoteChannelClient();
|
|
38
|
+
this.quoteBuilder = new QuoteBuilder_1.QuoteBuilder(this.signer, this.nonceManager);
|
|
39
|
+
// Verifier side — builder instance is signer-independent for verify().
|
|
40
|
+
// We hand it the same signer to keep the construction trivial.
|
|
41
|
+
this.counterVerifier = new CounterOfferBuilder_1.CounterOfferBuilder(this.signer, this.nonceManager);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Decide whether to quote. Does NOT touch the chain — pure policy.
|
|
45
|
+
* Use `quote()` below to act on the decision.
|
|
46
|
+
*/
|
|
47
|
+
evaluateRequest(req) {
|
|
48
|
+
const result = this.policyEngine.evaluate(req);
|
|
49
|
+
if (!result.allowed) {
|
|
50
|
+
return {
|
|
51
|
+
action: 'skip',
|
|
52
|
+
reason: result.violations.map((v) => `${v.rule}: ${v.detail}`).join('; '),
|
|
53
|
+
violations: result.violations,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
action: 'quote',
|
|
58
|
+
amountBaseUnits: result.recommended_quote_amount_base_units,
|
|
59
|
+
reason: `Policy passed; recommended quote ${result.recommended_quote_amount_base_units} base units`,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Full quote flow: evaluate → build signed QuoteMessage → submit
|
|
64
|
+
* on-chain → POST to buyer's endpoint.
|
|
65
|
+
*
|
|
66
|
+
* On-chain failure → throws (caller decides retry / cancel).
|
|
67
|
+
* Off-chain POST failure → returns successfully with `channelError`
|
|
68
|
+
* set so caller knows to retry only the delivery step. Preserves the
|
|
69
|
+
* invariant "on-chain tx is what buyer observes regardless of our
|
|
70
|
+
* off-chain delivery".
|
|
71
|
+
*/
|
|
72
|
+
async quote(req, providerDID, consumerEndpoint) {
|
|
73
|
+
const decision = this.evaluateRequest(req);
|
|
74
|
+
if (decision.action === 'skip') {
|
|
75
|
+
return { decision };
|
|
76
|
+
}
|
|
77
|
+
// Build + sign QuoteMessage. Amount stays in base units throughout
|
|
78
|
+
// (no float round-trip). Currency / decimals come from policy —
|
|
79
|
+
// hardcoding would silently mask a config drift if we ever support
|
|
80
|
+
// non-USDC tokens. QuoteBuilder validates USDC/6 today; other
|
|
81
|
+
// currencies will throw there until the builder grows support.
|
|
82
|
+
const now = Math.floor(Date.now() / 1000);
|
|
83
|
+
const currency = this.policyEngine.policyCurrency;
|
|
84
|
+
const decimals = currency.toUpperCase() === 'USDC' ? 6 : 6; // placeholder for future currencies
|
|
85
|
+
const quote = await this.quoteBuilder.build({
|
|
86
|
+
txId: req.txId,
|
|
87
|
+
provider: providerDID,
|
|
88
|
+
consumer: req.consumer,
|
|
89
|
+
quotedAmount: decision.amountBaseUnits,
|
|
90
|
+
originalAmount: req.offeredAmount,
|
|
91
|
+
maxPrice: req.maxPrice,
|
|
92
|
+
currency,
|
|
93
|
+
decimals,
|
|
94
|
+
expiresAt: now + this.policyEngine.quoteTtlSeconds,
|
|
95
|
+
chainId: this.chainId,
|
|
96
|
+
kernelAddress: this.kernelAddress,
|
|
97
|
+
});
|
|
98
|
+
// On-chain: INITIATED → QUOTED, hash stored in tx.metadata.
|
|
99
|
+
await this.runtime.submitQuote(req.txId, quote);
|
|
100
|
+
// Off-chain: deliver the signed message so buyer can verify.
|
|
101
|
+
// Caller may omit consumerEndpoint when the transport is handled
|
|
102
|
+
// outside this orchestrator (e.g. Telegram, IPFS pubsub adapter).
|
|
103
|
+
if (consumerEndpoint) {
|
|
104
|
+
try {
|
|
105
|
+
await this.channel.sendQuote(consumerEndpoint, quote);
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
return {
|
|
109
|
+
decision,
|
|
110
|
+
quote,
|
|
111
|
+
channelError: err instanceof Error ? err.message : String(err),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return { decision, quote };
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Verify + evaluate a buyer counter-offer. Returns the decision;
|
|
119
|
+
* does NOT send any response — Phase 3 wires the response path.
|
|
120
|
+
*
|
|
121
|
+
* @throws if the counter signature / band / expiry fails verify.
|
|
122
|
+
*/
|
|
123
|
+
async evaluateCounter(counter) {
|
|
124
|
+
await this.counterVerifier.verify(counter, this.kernelAddress);
|
|
125
|
+
const verdict = this.policyEngine.evaluateCounter(counter.counterAmount);
|
|
126
|
+
// Engine returns `{decision, reason}`; orchestrator API uses
|
|
127
|
+
// `{action, reason}` — reshape at the boundary.
|
|
128
|
+
return { action: verdict.decision, reason: verdict.reason };
|
|
129
|
+
}
|
|
130
|
+
/** Read-only policy accessor for UIs and tests. */
|
|
131
|
+
getPolicy() {
|
|
132
|
+
return this.policy;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.ProviderOrchestrator = ProviderOrchestrator;
|
|
136
|
+
//# sourceMappingURL=ProviderOrchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProviderOrchestrator.js","sourceRoot":"","sources":["../../src/negotiation/ProviderOrchestrator.ts"],"names":[],"mappings":"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"}
|