aether-agent-sdk 1.0.0 → 1.0.3
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/LICENSE +21 -0
- package/README.md +67 -185
- package/dist/src/agents/AgentRegistry.d.ts +48 -0
- package/dist/src/agents/AgentRegistry.d.ts.map +1 -0
- package/dist/src/agents/AgentRegistry.js +114 -0
- package/dist/src/agents/AgentRegistry.js.map +1 -0
- package/dist/src/agents/AnalyzerAgent.d.ts +18 -0
- package/dist/src/agents/AnalyzerAgent.d.ts.map +1 -0
- package/dist/src/agents/AnalyzerAgent.js +129 -0
- package/dist/src/agents/AnalyzerAgent.js.map +1 -0
- package/dist/src/agents/IntelligentVerifierAgent.d.ts +46 -0
- package/dist/src/agents/IntelligentVerifierAgent.d.ts.map +1 -0
- package/dist/src/agents/IntelligentVerifierAgent.js +262 -0
- package/dist/src/agents/IntelligentVerifierAgent.js.map +1 -0
- package/dist/src/agents/SettlementAgent.d.ts +14 -0
- package/dist/src/agents/SettlementAgent.d.ts.map +1 -0
- package/dist/src/agents/SettlementAgent.js +155 -0
- package/dist/src/agents/SettlementAgent.js.map +1 -0
- package/dist/src/agents/SettlementAgentEnhanced.d.ts +33 -0
- package/dist/src/agents/SettlementAgentEnhanced.d.ts.map +1 -0
- package/dist/src/agents/SettlementAgentEnhanced.js +219 -0
- package/dist/src/agents/SettlementAgentEnhanced.js.map +1 -0
- package/dist/src/agents/VerifierAgent.d.ts +30 -0
- package/dist/src/agents/VerifierAgent.d.ts.map +1 -0
- package/dist/src/agents/VerifierAgent.js +181 -0
- package/dist/src/agents/VerifierAgent.js.map +1 -0
- package/dist/src/agents/index.d.ts +7 -0
- package/dist/src/agents/index.d.ts.map +1 -0
- package/dist/src/agents/index.js +11 -0
- package/dist/src/agents/index.js.map +1 -0
- package/dist/src/facilitator/X402FacilitatorServer.d.ts +17 -0
- package/dist/src/facilitator/X402FacilitatorServer.d.ts.map +1 -0
- package/dist/src/facilitator/X402FacilitatorServer.js +176 -0
- package/dist/src/facilitator/X402FacilitatorServer.js.map +1 -0
- package/dist/src/facilitator/index.d.ts +7 -0
- package/dist/src/facilitator/index.d.ts.map +1 -0
- package/dist/src/facilitator/index.js +11 -0
- package/dist/src/facilitator/index.js.map +1 -0
- package/dist/src/index.d.ts +19 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +39 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/modes/HumanInTheLoopMode.d.ts +92 -0
- package/dist/src/modes/HumanInTheLoopMode.d.ts.map +1 -0
- package/dist/src/modes/HumanInTheLoopMode.js +234 -0
- package/dist/src/modes/HumanInTheLoopMode.js.map +1 -0
- package/dist/src/modes/index.d.ts +8 -0
- package/dist/src/modes/index.d.ts.map +1 -0
- package/dist/src/modes/index.js +11 -0
- package/dist/src/modes/index.js.map +1 -0
- package/dist/src/protocols/A2ANegotiation.d.ts +122 -0
- package/dist/src/protocols/A2ANegotiation.d.ts.map +1 -0
- package/dist/src/protocols/A2ANegotiation.js +230 -0
- package/dist/src/protocols/A2ANegotiation.js.map +1 -0
- package/dist/src/protocols/A2AProtocol.d.ts +49 -0
- package/dist/src/protocols/A2AProtocol.d.ts.map +1 -0
- package/dist/src/protocols/A2AProtocol.js +126 -0
- package/dist/src/protocols/A2AProtocol.js.map +1 -0
- package/dist/src/protocols/AP2Protocol.d.ts +57 -0
- package/dist/src/protocols/AP2Protocol.d.ts.map +1 -0
- package/dist/src/protocols/AP2Protocol.js +121 -0
- package/dist/src/protocols/AP2Protocol.js.map +1 -0
- package/dist/src/protocols/index.d.ts +10 -0
- package/dist/src/protocols/index.d.ts.map +1 -0
- package/dist/src/protocols/index.js +15 -0
- package/dist/src/protocols/index.js.map +1 -0
- package/dist/src/services/index.d.ts +8 -0
- package/dist/src/services/index.d.ts.map +1 -0
- package/dist/src/services/index.js +13 -0
- package/dist/src/services/index.js.map +1 -0
- package/dist/src/utils/env.d.ts +15 -0
- package/dist/src/utils/env.d.ts.map +1 -0
- package/dist/src/utils/env.js +39 -0
- package/dist/src/utils/env.js.map +1 -0
- package/dist/src/utils/index.d.ts +7 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +12 -0
- package/dist/src/utils/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2A Agent Negotiation Protocol
|
|
3
|
+
*
|
|
4
|
+
* This module implements negotiation logic for agents to:
|
|
5
|
+
* - Negotiate payment terms
|
|
6
|
+
* - Handle counter-offers
|
|
7
|
+
* - Manage negotiation timeouts
|
|
8
|
+
* - Track negotiation history
|
|
9
|
+
*
|
|
10
|
+
* Used for the hackathon bounty "Best Use of Hedera Agent Kit & Google A2A"
|
|
11
|
+
*/
|
|
12
|
+
import { A2AProtocol, A2AMessage } from './A2AProtocol';
|
|
13
|
+
/**
|
|
14
|
+
* Negotiation State
|
|
15
|
+
*/
|
|
16
|
+
export declare enum NegotiationState {
|
|
17
|
+
PENDING = "pending",
|
|
18
|
+
IN_PROGRESS = "in_progress",
|
|
19
|
+
AGREED = "agreed",
|
|
20
|
+
REJECTED = "rejected",
|
|
21
|
+
TIMEOUT = "timeout"
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Negotiation Proposal
|
|
25
|
+
*/
|
|
26
|
+
export interface NegotiationProposal {
|
|
27
|
+
proposalId: string;
|
|
28
|
+
negotiationType: "payment" | "service" | "delivery";
|
|
29
|
+
from: string;
|
|
30
|
+
to: string;
|
|
31
|
+
currentOffer: any;
|
|
32
|
+
history: NegotiationEntry[];
|
|
33
|
+
state: NegotiationState;
|
|
34
|
+
createdAt: number;
|
|
35
|
+
expiresAt: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Negotiation Entry in History
|
|
39
|
+
*/
|
|
40
|
+
export interface NegotiationEntry {
|
|
41
|
+
timestamp: number;
|
|
42
|
+
agentId: string;
|
|
43
|
+
action: "propose" | "counter" | "accept" | "reject";
|
|
44
|
+
proposal: any;
|
|
45
|
+
message?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* A2A Negotiation Protocol Implementation
|
|
49
|
+
*/
|
|
50
|
+
export declare class A2ANegotiation {
|
|
51
|
+
private a2a;
|
|
52
|
+
private negotiations;
|
|
53
|
+
private readonly NEGOTIATION_TIMEOUT;
|
|
54
|
+
constructor(a2a: A2AProtocol);
|
|
55
|
+
/**
|
|
56
|
+
* Start a new negotiation
|
|
57
|
+
*/
|
|
58
|
+
startNegotiation(negotiationType: "payment" | "service" | "delivery", receiverAgentId: string, initialOffer: any): string;
|
|
59
|
+
/**
|
|
60
|
+
* Process incoming negotiation message
|
|
61
|
+
*/
|
|
62
|
+
processNegotiationMessage(message: A2AMessage): Promise<A2ANegotiationResult | null>;
|
|
63
|
+
/**
|
|
64
|
+
* Process counter-offer
|
|
65
|
+
*/
|
|
66
|
+
private processCounterOffer;
|
|
67
|
+
/**
|
|
68
|
+
* Process acceptance
|
|
69
|
+
*/
|
|
70
|
+
private processAcceptance;
|
|
71
|
+
/**
|
|
72
|
+
* Process rejection
|
|
73
|
+
*/
|
|
74
|
+
private processRejection;
|
|
75
|
+
/**
|
|
76
|
+
* Counter-offer in an existing negotiation
|
|
77
|
+
*/
|
|
78
|
+
sendCounterOffer(proposalId: string, counterOffer: any): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Accept a negotiation
|
|
81
|
+
*/
|
|
82
|
+
acceptNegotiation(proposalId: string): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Get negotiation by ID
|
|
85
|
+
*/
|
|
86
|
+
getNegotiation(proposalId: string): NegotiationProposal | null;
|
|
87
|
+
/**
|
|
88
|
+
* Get all active negotiations
|
|
89
|
+
*/
|
|
90
|
+
getActiveNegotiations(): NegotiationProposal[];
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Negotiation Result
|
|
94
|
+
*/
|
|
95
|
+
export interface A2ANegotiationResult {
|
|
96
|
+
proposalId: string;
|
|
97
|
+
state: NegotiationState;
|
|
98
|
+
currentOffer: any;
|
|
99
|
+
action: "counter" | "accept" | "reject";
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Payment Negotiation Example Flow:
|
|
103
|
+
*
|
|
104
|
+
* SettlementAgent: "I propose 1 USDC payment"
|
|
105
|
+
* → creates negotiation with proposalId: "pay-123"
|
|
106
|
+
* → sends A2A request with initialOffer: { amount: 1, currency: "USDC" }
|
|
107
|
+
*
|
|
108
|
+
* MerchantAgent: "I counter-propose 1.5 USDC"
|
|
109
|
+
* → receives negotiation "pay-123"
|
|
110
|
+
* → calls processCounterOffer with proposal: { amount: 1.5, currency: "USDC" }
|
|
111
|
+
* → sends A2A request back with counter offer
|
|
112
|
+
*
|
|
113
|
+
* SettlementAgent: "I accept 1.2 USDC"
|
|
114
|
+
* → receives counter offer
|
|
115
|
+
* → sends A2A response with final offer: { amount: 1.2, currency: "USDC" }
|
|
116
|
+
*
|
|
117
|
+
* MerchantAgent: "Agreed, proceed with 1.2 USDC"
|
|
118
|
+
* → calls acceptNegotiation("pay-123")
|
|
119
|
+
* → negotiation.state becomes AGREED
|
|
120
|
+
* → settlement proceeds
|
|
121
|
+
*/
|
|
122
|
+
//# sourceMappingURL=A2ANegotiation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"A2ANegotiation.d.ts","sourceRoot":"","sources":["../../../src/protocols/A2ANegotiation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAGvD;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,OAAO,YAAY;IACnB,WAAW,gBAAgB;IAC3B,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAA;IACnD,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,YAAY,EAAE,GAAG,CAAA;IACjB,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,KAAK,EAAE,gBAAgB,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACnD,QAAQ,EAAE,GAAG,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAQ;gBAEhC,GAAG,EAAE,WAAW;IAI5B;;OAEG;IACH,gBAAgB,CACd,eAAe,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,EACnD,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,GAAG,GAChB,MAAM;IAuCT;;OAEG;IACG,yBAAyB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAgC1F;;OAEG;YACW,mBAAmB;IAuBjC;;OAEG;YACW,iBAAiB;IAsB/B;;OAEG;YACW,gBAAgB;IAsB9B;;OAEG;IACG,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB5E;;OAEG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB1D;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAI9D;;OAEG;IACH,qBAAqB,IAAI,mBAAmB,EAAE;CAI/C;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,gBAAgB,CAAA;IACvB,YAAY,EAAE,GAAG,CAAA;IACjB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAA;CACxC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* A2A Agent Negotiation Protocol
|
|
4
|
+
*
|
|
5
|
+
* This module implements negotiation logic for agents to:
|
|
6
|
+
* - Negotiate payment terms
|
|
7
|
+
* - Handle counter-offers
|
|
8
|
+
* - Manage negotiation timeouts
|
|
9
|
+
* - Track negotiation history
|
|
10
|
+
*
|
|
11
|
+
* Used for the hackathon bounty "Best Use of Hedera Agent Kit & Google A2A"
|
|
12
|
+
*/
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.A2ANegotiation = exports.NegotiationState = void 0;
|
|
18
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
19
|
+
/**
|
|
20
|
+
* Negotiation State
|
|
21
|
+
*/
|
|
22
|
+
var NegotiationState;
|
|
23
|
+
(function (NegotiationState) {
|
|
24
|
+
NegotiationState["PENDING"] = "pending";
|
|
25
|
+
NegotiationState["IN_PROGRESS"] = "in_progress";
|
|
26
|
+
NegotiationState["AGREED"] = "agreed";
|
|
27
|
+
NegotiationState["REJECTED"] = "rejected";
|
|
28
|
+
NegotiationState["TIMEOUT"] = "timeout";
|
|
29
|
+
})(NegotiationState || (exports.NegotiationState = NegotiationState = {}));
|
|
30
|
+
/**
|
|
31
|
+
* A2A Negotiation Protocol Implementation
|
|
32
|
+
*/
|
|
33
|
+
class A2ANegotiation {
|
|
34
|
+
a2a;
|
|
35
|
+
negotiations = new Map();
|
|
36
|
+
NEGOTIATION_TIMEOUT = 60000; // 60 seconds
|
|
37
|
+
constructor(a2a) {
|
|
38
|
+
this.a2a = a2a;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Start a new negotiation
|
|
42
|
+
*/
|
|
43
|
+
startNegotiation(negotiationType, receiverAgentId, initialOffer) {
|
|
44
|
+
const proposalId = `negotiation-${Date.now()}-${Math.random().toString(36).substring(7)}`;
|
|
45
|
+
const proposal = {
|
|
46
|
+
proposalId,
|
|
47
|
+
negotiationType,
|
|
48
|
+
from: this.a2a['agentId'],
|
|
49
|
+
to: receiverAgentId,
|
|
50
|
+
currentOffer: initialOffer,
|
|
51
|
+
history: [{
|
|
52
|
+
timestamp: Date.now(),
|
|
53
|
+
agentId: this.a2a['agentId'],
|
|
54
|
+
action: "propose",
|
|
55
|
+
proposal: initialOffer
|
|
56
|
+
}],
|
|
57
|
+
state: NegotiationState.PENDING,
|
|
58
|
+
createdAt: Date.now(),
|
|
59
|
+
expiresAt: Date.now() + this.NEGOTIATION_TIMEOUT
|
|
60
|
+
};
|
|
61
|
+
this.negotiations.set(proposalId, proposal);
|
|
62
|
+
// Set timeout
|
|
63
|
+
setTimeout(() => {
|
|
64
|
+
if (this.negotiations.has(proposalId)) {
|
|
65
|
+
const neg = this.negotiations.get(proposalId);
|
|
66
|
+
if (neg.state === NegotiationState.PENDING || neg.state === NegotiationState.IN_PROGRESS) {
|
|
67
|
+
neg.state = NegotiationState.TIMEOUT;
|
|
68
|
+
console.log(chalk_1.default.yellow(`⏰ Negotiation ${proposalId} timed out`));
|
|
69
|
+
this.negotiations.set(proposalId, neg);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}, this.NEGOTIATION_TIMEOUT);
|
|
73
|
+
console.log(chalk_1.default.blue(`🚀 Starting ${negotiationType} negotiation ${proposalId}`));
|
|
74
|
+
return proposalId;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Process incoming negotiation message
|
|
78
|
+
*/
|
|
79
|
+
async processNegotiationMessage(message) {
|
|
80
|
+
const payload = message.payload;
|
|
81
|
+
if (!payload || payload.type !== "negotiation") {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
const action = payload.action;
|
|
85
|
+
const proposalId = payload.proposalId;
|
|
86
|
+
console.log(chalk_1.default.blue(`💬 Processing negotiation ${action} for ${proposalId}`));
|
|
87
|
+
const negotiation = this.negotiations.get(proposalId);
|
|
88
|
+
if (!negotiation) {
|
|
89
|
+
console.log(chalk_1.default.yellow(`⚠️ Unknown negotiation ${proposalId}`));
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
switch (action) {
|
|
93
|
+
case "counter":
|
|
94
|
+
return await this.processCounterOffer(negotiation, payload.proposal);
|
|
95
|
+
case "accept":
|
|
96
|
+
return await this.processAcceptance(negotiation);
|
|
97
|
+
case "reject":
|
|
98
|
+
return await this.processRejection(negotiation);
|
|
99
|
+
default:
|
|
100
|
+
console.log(chalk_1.default.yellow(`⚠️ Unknown action: ${action}`));
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Process counter-offer
|
|
106
|
+
*/
|
|
107
|
+
async processCounterOffer(negotiation, proposal) {
|
|
108
|
+
negotiation.currentOffer = proposal;
|
|
109
|
+
negotiation.state = NegotiationState.IN_PROGRESS;
|
|
110
|
+
negotiation.history.push({
|
|
111
|
+
timestamp: Date.now(),
|
|
112
|
+
agentId: negotiation.to,
|
|
113
|
+
action: "counter",
|
|
114
|
+
proposal
|
|
115
|
+
});
|
|
116
|
+
this.negotiations.set(negotiation.proposalId, negotiation);
|
|
117
|
+
console.log(chalk_1.default.yellow(`🔄 Counter-offer received: ${JSON.stringify(proposal)}`));
|
|
118
|
+
return {
|
|
119
|
+
proposalId: negotiation.proposalId,
|
|
120
|
+
state: negotiation.state,
|
|
121
|
+
currentOffer: proposal,
|
|
122
|
+
action: "counter"
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Process acceptance
|
|
127
|
+
*/
|
|
128
|
+
async processAcceptance(negotiation) {
|
|
129
|
+
negotiation.state = NegotiationState.AGREED;
|
|
130
|
+
negotiation.history.push({
|
|
131
|
+
timestamp: Date.now(),
|
|
132
|
+
agentId: negotiation.to,
|
|
133
|
+
action: "accept",
|
|
134
|
+
proposal: negotiation.currentOffer
|
|
135
|
+
});
|
|
136
|
+
this.negotiations.set(negotiation.proposalId, negotiation);
|
|
137
|
+
console.log(chalk_1.default.green(`✅ Negotiation agreed!`));
|
|
138
|
+
return {
|
|
139
|
+
proposalId: negotiation.proposalId,
|
|
140
|
+
state: negotiation.state,
|
|
141
|
+
currentOffer: negotiation.currentOffer,
|
|
142
|
+
action: "accept"
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Process rejection
|
|
147
|
+
*/
|
|
148
|
+
async processRejection(negotiation) {
|
|
149
|
+
negotiation.state = NegotiationState.REJECTED;
|
|
150
|
+
negotiation.history.push({
|
|
151
|
+
timestamp: Date.now(),
|
|
152
|
+
agentId: negotiation.to,
|
|
153
|
+
action: "reject",
|
|
154
|
+
proposal: null
|
|
155
|
+
});
|
|
156
|
+
this.negotiations.set(negotiation.proposalId, negotiation);
|
|
157
|
+
console.log(chalk_1.default.red(`❌ Negotiation rejected`));
|
|
158
|
+
return {
|
|
159
|
+
proposalId: negotiation.proposalId,
|
|
160
|
+
state: negotiation.state,
|
|
161
|
+
currentOffer: negotiation.currentOffer,
|
|
162
|
+
action: "reject"
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Counter-offer in an existing negotiation
|
|
167
|
+
*/
|
|
168
|
+
async sendCounterOffer(proposalId, counterOffer) {
|
|
169
|
+
const negotiation = this.negotiations.get(proposalId);
|
|
170
|
+
if (!negotiation) {
|
|
171
|
+
throw new Error(`Negotiation ${proposalId} not found`);
|
|
172
|
+
}
|
|
173
|
+
await this.a2a.sendMessage(negotiation.to, negotiation.to, "request", {
|
|
174
|
+
type: "negotiation",
|
|
175
|
+
action: "counter",
|
|
176
|
+
proposalId,
|
|
177
|
+
proposal: counterOffer
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Accept a negotiation
|
|
182
|
+
*/
|
|
183
|
+
async acceptNegotiation(proposalId) {
|
|
184
|
+
const negotiation = this.negotiations.get(proposalId);
|
|
185
|
+
if (!negotiation) {
|
|
186
|
+
throw new Error(`Negotiation ${proposalId} not found`);
|
|
187
|
+
}
|
|
188
|
+
await this.a2a.sendMessage(negotiation.to, negotiation.to, "response", {
|
|
189
|
+
type: "negotiation",
|
|
190
|
+
action: "accept",
|
|
191
|
+
proposalId
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Get negotiation by ID
|
|
196
|
+
*/
|
|
197
|
+
getNegotiation(proposalId) {
|
|
198
|
+
return this.negotiations.get(proposalId) || null;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Get all active negotiations
|
|
202
|
+
*/
|
|
203
|
+
getActiveNegotiations() {
|
|
204
|
+
return Array.from(this.negotiations.values())
|
|
205
|
+
.filter(n => n.state === NegotiationState.PENDING || n.state === NegotiationState.IN_PROGRESS);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
exports.A2ANegotiation = A2ANegotiation;
|
|
209
|
+
/**
|
|
210
|
+
* Payment Negotiation Example Flow:
|
|
211
|
+
*
|
|
212
|
+
* SettlementAgent: "I propose 1 USDC payment"
|
|
213
|
+
* → creates negotiation with proposalId: "pay-123"
|
|
214
|
+
* → sends A2A request with initialOffer: { amount: 1, currency: "USDC" }
|
|
215
|
+
*
|
|
216
|
+
* MerchantAgent: "I counter-propose 1.5 USDC"
|
|
217
|
+
* → receives negotiation "pay-123"
|
|
218
|
+
* → calls processCounterOffer with proposal: { amount: 1.5, currency: "USDC" }
|
|
219
|
+
* → sends A2A request back with counter offer
|
|
220
|
+
*
|
|
221
|
+
* SettlementAgent: "I accept 1.2 USDC"
|
|
222
|
+
* → receives counter offer
|
|
223
|
+
* → sends A2A response with final offer: { amount: 1.2, currency: "USDC" }
|
|
224
|
+
*
|
|
225
|
+
* MerchantAgent: "Agreed, proceed with 1.2 USDC"
|
|
226
|
+
* → calls acceptNegotiation("pay-123")
|
|
227
|
+
* → negotiation.state becomes AGREED
|
|
228
|
+
* → settlement proceeds
|
|
229
|
+
*/
|
|
230
|
+
//# sourceMappingURL=A2ANegotiation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"A2ANegotiation.js","sourceRoot":"","sources":["../../../src/protocols/A2ANegotiation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2A (Agent-to-Agent) Protocol Implementation
|
|
3
|
+
* Based on JSON-RPC 2.0 for agent communication
|
|
4
|
+
*/
|
|
5
|
+
export interface A2AMessage {
|
|
6
|
+
jsonrpc: '2.0';
|
|
7
|
+
id: string | number;
|
|
8
|
+
method: string;
|
|
9
|
+
params?: any;
|
|
10
|
+
}
|
|
11
|
+
export interface A2AResponse {
|
|
12
|
+
jsonrpc: '2.0';
|
|
13
|
+
id: string | number;
|
|
14
|
+
result?: any;
|
|
15
|
+
error?: {
|
|
16
|
+
code: number;
|
|
17
|
+
message: string;
|
|
18
|
+
data?: any;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface Task {
|
|
22
|
+
id: string;
|
|
23
|
+
status: 'pending' | 'processing' | 'completed' | 'failed';
|
|
24
|
+
input: any;
|
|
25
|
+
output?: any;
|
|
26
|
+
error?: string;
|
|
27
|
+
createdAt: number;
|
|
28
|
+
updatedAt: number;
|
|
29
|
+
}
|
|
30
|
+
export declare class A2AProtocol {
|
|
31
|
+
private baseUrl;
|
|
32
|
+
private agentId;
|
|
33
|
+
constructor(baseUrl: string, agentId: string);
|
|
34
|
+
sendTask(input: any): Promise<Task>;
|
|
35
|
+
getTask(taskId: string): Promise<Task>;
|
|
36
|
+
cancelTask(taskId: string): Promise<boolean>;
|
|
37
|
+
private makeRequest;
|
|
38
|
+
}
|
|
39
|
+
export declare class A2AServer {
|
|
40
|
+
private handlers;
|
|
41
|
+
private tasks;
|
|
42
|
+
constructor();
|
|
43
|
+
registerHandler(method: string, handler: (params: any) => Promise<any>): void;
|
|
44
|
+
handleRequest(message: A2AMessage): Promise<A2AResponse>;
|
|
45
|
+
createTask(input: any): Task;
|
|
46
|
+
updateTask(taskId: string, updates: Partial<Task>): Task | null;
|
|
47
|
+
getTask(taskId: string): Task | null;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=A2AProtocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"A2AProtocol.d.ts","sourceRoot":"","sources":["../../../src/protocols/A2AProtocol.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAA;IACd,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,GAAG,CAAA;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,KAAK,CAAA;IACd,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,GAAG,CAAA;KACX,CAAA;CACF;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAA;IACzD,KAAK,EAAE,GAAG,CAAA;IACV,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAQ;gBAEX,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAKtC,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAYpC,WAAW;CAgB1B;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,KAAK,CAAmB;;IAOhC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC;IAIhE,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAkC9D,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAa5B,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;IAQ/D,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;CAGrC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* A2A (Agent-to-Agent) Protocol Implementation
|
|
4
|
+
* Based on JSON-RPC 2.0 for agent communication
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.A2AServer = exports.A2AProtocol = void 0;
|
|
8
|
+
class A2AProtocol {
|
|
9
|
+
baseUrl;
|
|
10
|
+
agentId;
|
|
11
|
+
constructor(baseUrl, agentId) {
|
|
12
|
+
this.baseUrl = baseUrl;
|
|
13
|
+
this.agentId = agentId;
|
|
14
|
+
}
|
|
15
|
+
async sendTask(input) {
|
|
16
|
+
const message = {
|
|
17
|
+
jsonrpc: '2.0',
|
|
18
|
+
id: Date.now(),
|
|
19
|
+
method: 'sendTask',
|
|
20
|
+
params: { input }
|
|
21
|
+
};
|
|
22
|
+
const response = await this.makeRequest(message);
|
|
23
|
+
return response.result;
|
|
24
|
+
}
|
|
25
|
+
async getTask(taskId) {
|
|
26
|
+
const message = {
|
|
27
|
+
jsonrpc: '2.0',
|
|
28
|
+
id: Date.now(),
|
|
29
|
+
method: 'getTask',
|
|
30
|
+
params: { taskId }
|
|
31
|
+
};
|
|
32
|
+
const response = await this.makeRequest(message);
|
|
33
|
+
return response.result;
|
|
34
|
+
}
|
|
35
|
+
async cancelTask(taskId) {
|
|
36
|
+
const message = {
|
|
37
|
+
jsonrpc: '2.0',
|
|
38
|
+
id: Date.now(),
|
|
39
|
+
method: 'cancelTask',
|
|
40
|
+
params: { taskId }
|
|
41
|
+
};
|
|
42
|
+
const response = await this.makeRequest(message);
|
|
43
|
+
return response.result;
|
|
44
|
+
}
|
|
45
|
+
async makeRequest(message) {
|
|
46
|
+
const response = await fetch(this.baseUrl, {
|
|
47
|
+
method: 'POST',
|
|
48
|
+
headers: {
|
|
49
|
+
'Content-Type': 'application/json',
|
|
50
|
+
'X-Agent-Id': this.agentId
|
|
51
|
+
},
|
|
52
|
+
body: JSON.stringify(message)
|
|
53
|
+
});
|
|
54
|
+
if (!response.ok) {
|
|
55
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
56
|
+
}
|
|
57
|
+
return await response.json();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.A2AProtocol = A2AProtocol;
|
|
61
|
+
class A2AServer {
|
|
62
|
+
handlers;
|
|
63
|
+
tasks;
|
|
64
|
+
constructor() {
|
|
65
|
+
this.handlers = new Map();
|
|
66
|
+
this.tasks = new Map();
|
|
67
|
+
}
|
|
68
|
+
registerHandler(method, handler) {
|
|
69
|
+
this.handlers.set(method, handler);
|
|
70
|
+
}
|
|
71
|
+
async handleRequest(message) {
|
|
72
|
+
const handler = this.handlers.get(message.method);
|
|
73
|
+
if (!handler) {
|
|
74
|
+
return {
|
|
75
|
+
jsonrpc: '2.0',
|
|
76
|
+
id: message.id,
|
|
77
|
+
error: {
|
|
78
|
+
code: -32601,
|
|
79
|
+
message: 'Method not found'
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
const result = await handler(message.params);
|
|
85
|
+
return {
|
|
86
|
+
jsonrpc: '2.0',
|
|
87
|
+
id: message.id,
|
|
88
|
+
result
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
return {
|
|
93
|
+
jsonrpc: '2.0',
|
|
94
|
+
id: message.id,
|
|
95
|
+
error: {
|
|
96
|
+
code: -32603,
|
|
97
|
+
message: 'Internal error',
|
|
98
|
+
data: error.message
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
createTask(input) {
|
|
104
|
+
const task = {
|
|
105
|
+
id: `task-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
|
|
106
|
+
status: 'pending',
|
|
107
|
+
input,
|
|
108
|
+
createdAt: Date.now(),
|
|
109
|
+
updatedAt: Date.now()
|
|
110
|
+
};
|
|
111
|
+
this.tasks.set(task.id, task);
|
|
112
|
+
return task;
|
|
113
|
+
}
|
|
114
|
+
updateTask(taskId, updates) {
|
|
115
|
+
const task = this.tasks.get(taskId);
|
|
116
|
+
if (!task)
|
|
117
|
+
return null;
|
|
118
|
+
Object.assign(task, updates, { updatedAt: Date.now() });
|
|
119
|
+
return task;
|
|
120
|
+
}
|
|
121
|
+
getTask(taskId) {
|
|
122
|
+
return this.tasks.get(taskId) || null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
exports.A2AServer = A2AServer;
|
|
126
|
+
//# sourceMappingURL=A2AProtocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"A2AProtocol.js","sourceRoot":"","sources":["../../../src/protocols/A2AProtocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AP2 (A2A Payment) Protocol
|
|
3
|
+
* Agent-to-Agent Payment Protocol for autonomous transactions
|
|
4
|
+
*/
|
|
5
|
+
export interface AP2PaymentRequest {
|
|
6
|
+
id: string;
|
|
7
|
+
from: string;
|
|
8
|
+
to: string;
|
|
9
|
+
amount: string;
|
|
10
|
+
currency: string;
|
|
11
|
+
network: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
metadata?: Record<string, any>;
|
|
14
|
+
createdAt: number;
|
|
15
|
+
expiresAt: number;
|
|
16
|
+
}
|
|
17
|
+
export interface AP2PaymentResponse {
|
|
18
|
+
requestId: string;
|
|
19
|
+
status: 'pending' | 'approved' | 'rejected' | 'completed' | 'failed';
|
|
20
|
+
transactionHash?: string;
|
|
21
|
+
message?: string;
|
|
22
|
+
timestamp: number;
|
|
23
|
+
}
|
|
24
|
+
export interface AP2PaymentVerification {
|
|
25
|
+
requestId: string;
|
|
26
|
+
transactionHash: string;
|
|
27
|
+
network: string;
|
|
28
|
+
verified: boolean;
|
|
29
|
+
confirmations: number;
|
|
30
|
+
timestamp: number;
|
|
31
|
+
}
|
|
32
|
+
export declare class AP2Protocol {
|
|
33
|
+
private network;
|
|
34
|
+
private currency;
|
|
35
|
+
constructor(network?: string, currency?: string);
|
|
36
|
+
createPaymentRequest(from: string, to: string, amount: number, description?: string, metadata?: Record<string, any>): AP2PaymentRequest;
|
|
37
|
+
createPaymentResponse(requestId: string, status: AP2PaymentResponse['status'], transactionHash?: string, message?: string): AP2PaymentResponse;
|
|
38
|
+
verifyPayment(requestId: string, transactionHash: string, verified: boolean, confirmations?: number): AP2PaymentVerification;
|
|
39
|
+
isExpired(request: AP2PaymentRequest): boolean;
|
|
40
|
+
validateRequest(request: AP2PaymentRequest): {
|
|
41
|
+
valid: boolean;
|
|
42
|
+
errors: string[];
|
|
43
|
+
};
|
|
44
|
+
encodeRequest(request: AP2PaymentRequest): string;
|
|
45
|
+
decodeRequest(encoded: string): AP2PaymentRequest;
|
|
46
|
+
}
|
|
47
|
+
export declare class AP2PaymentNegotiation {
|
|
48
|
+
private requests;
|
|
49
|
+
private responses;
|
|
50
|
+
constructor();
|
|
51
|
+
proposePayment(request: AP2PaymentRequest): void;
|
|
52
|
+
respondToPayment(response: AP2PaymentResponse): void;
|
|
53
|
+
getRequest(requestId: string): AP2PaymentRequest | undefined;
|
|
54
|
+
getResponse(requestId: string): AP2PaymentResponse | undefined;
|
|
55
|
+
clearExpiredRequests(): number;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=AP2Protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AP2Protocol.d.ts","sourceRoot":"","sources":["../../../src/protocols/AP2Protocol.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAA;IACpE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,OAAO,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAQ;gBAEZ,OAAO,GAAE,MAAwB,EAAE,QAAQ,GAAE,MAAe;IAKxE,oBAAoB,CAClB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,iBAAiB;IAoBpB,qBAAqB,CACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EACpC,eAAe,CAAC,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,kBAAkB;IAarB,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,OAAO,EACjB,aAAa,GAAE,MAAU,GACxB,sBAAsB;IAWzB,SAAS,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO;IAI9C,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAmBjF,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM;IAIjD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB;CAIlD;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,SAAS,CAAiC;;IAOlD,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIhD,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAIpD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAI5D,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI9D,oBAAoB,IAAI,MAAM;CAa/B"}
|