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,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.X402FacilitatorServer = void 0;
|
|
7
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
8
|
+
const spl_token_1 = require("@solana/spl-token");
|
|
9
|
+
const env_1 = require("../utils/env");
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const bs58_1 = __importDefault(require("bs58"));
|
|
12
|
+
(0, env_1.loadEnvIfNeeded)();
|
|
13
|
+
class X402FacilitatorServer {
|
|
14
|
+
connection;
|
|
15
|
+
agentWallet;
|
|
16
|
+
usdcMint;
|
|
17
|
+
constructor() {
|
|
18
|
+
const rpcUrl = process.env.SOLANA_RPC_URL || 'https://api.devnet.solana.com';
|
|
19
|
+
const agentPrivateKey = process.env.AGENT_PRIVATE_KEY;
|
|
20
|
+
const usdcMint = process.env.USDC_MINT || '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU';
|
|
21
|
+
this.connection = new web3_js_1.Connection(rpcUrl, 'confirmed');
|
|
22
|
+
this.usdcMint = new web3_js_1.PublicKey(usdcMint);
|
|
23
|
+
if (agentPrivateKey) {
|
|
24
|
+
try {
|
|
25
|
+
const privateKeyBytes = bs58_1.default.decode(agentPrivateKey);
|
|
26
|
+
this.agentWallet = web3_js_1.Keypair.fromSecretKey(privateKeyBytes);
|
|
27
|
+
console.log(chalk_1.default.green(`✅ Facilitator initialized with wallet: ${this.agentWallet.publicKey.toBase58()}`));
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.warn(chalk_1.default.yellow('⚠️ Invalid AGENT_PRIVATE_KEY format. Please provide a valid base58 encoded key.'));
|
|
31
|
+
console.warn(chalk_1.default.yellow(' Generate one with: solana-keygen new'));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
console.warn(chalk_1.default.yellow('⚠️ AGENT_PRIVATE_KEY not configured. Some features will be unavailable.'));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async verify(paymentHeader, paymentRequirements) {
|
|
39
|
+
try {
|
|
40
|
+
console.log(chalk_1.default.blue('🔍 Facilitator: Verifying payment...'));
|
|
41
|
+
const paymentPayload = JSON.parse(Buffer.from(paymentHeader, 'base64').toString());
|
|
42
|
+
const isValid = this.validatePaymentLocally(paymentPayload, paymentRequirements);
|
|
43
|
+
if (isValid) {
|
|
44
|
+
console.log(chalk_1.default.green('✅ Facilitator: Payment verification successful'));
|
|
45
|
+
return { isValid: true, invalidReason: null };
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
console.log(chalk_1.default.red('❌ Facilitator: Payment verification failed'));
|
|
49
|
+
return { isValid: false, invalidReason: 'Local validation failed' };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.error('❌ Facilitator: Verification error:', error);
|
|
54
|
+
return {
|
|
55
|
+
isValid: false,
|
|
56
|
+
invalidReason: `Verification error: ${error.message}`
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
validatePaymentLocally(paymentPayload, requirements) {
|
|
61
|
+
try {
|
|
62
|
+
if (paymentPayload.x402Version !== 1) {
|
|
63
|
+
console.log(chalk_1.default.red('❌ Invalid x402 version'));
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
if (paymentPayload.scheme !== requirements.scheme) {
|
|
67
|
+
console.log(chalk_1.default.red('❌ Scheme mismatch'));
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
if (paymentPayload.network !== 'solana-devnet') {
|
|
71
|
+
console.log(chalk_1.default.red('❌ Network mismatch - expected solana-devnet'));
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
const authorization = paymentPayload.payload?.authorization;
|
|
75
|
+
if (!authorization) {
|
|
76
|
+
console.log(chalk_1.default.red('❌ No authorization found'));
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
if (authorization.value !== requirements.maxAmountRequired) {
|
|
80
|
+
console.log(chalk_1.default.red('❌ Amount mismatch'));
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
if (authorization.to !== requirements.payTo) {
|
|
84
|
+
console.log(chalk_1.default.red('❌ Recipient mismatch'));
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
const now = Math.floor(Date.now() / 1000);
|
|
88
|
+
if (authorization.validBefore && now > authorization.validBefore) {
|
|
89
|
+
console.log(chalk_1.default.red('❌ Payment expired'));
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
console.log(chalk_1.default.green('✅ All local validations passed'));
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
console.error('❌ Local validation error:', error);
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async settle(paymentHeader, paymentRequirements) {
|
|
101
|
+
try {
|
|
102
|
+
console.log(chalk_1.default.blue('🏦 Facilitator: Settling payment on Solana...'));
|
|
103
|
+
const paymentPayload = JSON.parse(Buffer.from(paymentHeader, 'base64').toString());
|
|
104
|
+
const txHash = await this.executeUSDCTransfer(paymentPayload, paymentRequirements);
|
|
105
|
+
if (txHash) {
|
|
106
|
+
console.log(chalk_1.default.green('✅ Facilitator: Payment settled successfully'));
|
|
107
|
+
console.log(chalk_1.default.blue(`📋 Transaction Signature: ${txHash}`));
|
|
108
|
+
console.log(chalk_1.default.blue(`📋 Network: solana-devnet`));
|
|
109
|
+
return {
|
|
110
|
+
success: true,
|
|
111
|
+
error: null,
|
|
112
|
+
txHash: txHash,
|
|
113
|
+
networkId: 'solana-devnet'
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
console.log(chalk_1.default.red('❌ Facilitator: Payment settlement failed'));
|
|
118
|
+
return {
|
|
119
|
+
success: false,
|
|
120
|
+
error: 'Failed to execute transfer',
|
|
121
|
+
txHash: null,
|
|
122
|
+
networkId: null
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
console.error('❌ Facilitator: Settlement error:', error);
|
|
128
|
+
return {
|
|
129
|
+
success: false,
|
|
130
|
+
error: `Settlement error: ${error.message}`,
|
|
131
|
+
txHash: null,
|
|
132
|
+
networkId: null
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
async executeUSDCTransfer(paymentPayload, requirements) {
|
|
137
|
+
try {
|
|
138
|
+
console.log(chalk_1.default.blue('💰 Executing USDC transfer on Solana...'));
|
|
139
|
+
if (!this.agentWallet) {
|
|
140
|
+
throw new Error('Agent wallet not initialized');
|
|
141
|
+
}
|
|
142
|
+
const authorization = paymentPayload.payload?.authorization;
|
|
143
|
+
if (!authorization) {
|
|
144
|
+
throw new Error('No authorization found in payment payload');
|
|
145
|
+
}
|
|
146
|
+
const recipientAddress = new web3_js_1.PublicKey(authorization.to);
|
|
147
|
+
const amount = Number(authorization.value);
|
|
148
|
+
const token = new spl_token_1.Token(this.connection, this.usdcMint, spl_token_1.TOKEN_PROGRAM_ID, this.agentWallet);
|
|
149
|
+
const fromTokenAccount = await token.getOrCreateAssociatedAccountInfo(this.agentWallet.publicKey);
|
|
150
|
+
const toTokenAccount = await token.getOrCreateAssociatedAccountInfo(recipientAddress);
|
|
151
|
+
console.log(chalk_1.default.blue(`📋 Current USDC balance: ${Number(fromTokenAccount.amount) / 1_000_000} USDC`));
|
|
152
|
+
console.log(chalk_1.default.blue(`📋 Transfer amount: ${amount / 1_000_000} USDC`));
|
|
153
|
+
console.log(chalk_1.default.blue(`📋 Recipient: ${recipientAddress.toBase58()}`));
|
|
154
|
+
if (Number(fromTokenAccount.amount) < amount) {
|
|
155
|
+
throw new Error(`Insufficient USDC balance: ${Number(fromTokenAccount.amount) / 1_000_000} < ${amount / 1_000_000}`);
|
|
156
|
+
}
|
|
157
|
+
console.log(chalk_1.default.yellow('📋 Submitting transaction...'));
|
|
158
|
+
const signature = await token.transfer(fromTokenAccount.address, toTokenAccount.address, this.agentWallet, [], amount);
|
|
159
|
+
console.log(chalk_1.default.green(`✅ Transfer confirmed: ${signature}`));
|
|
160
|
+
return signature;
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
console.error('❌ USDC transfer error:', error);
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
getSupportedSchemes() {
|
|
168
|
+
return {
|
|
169
|
+
kinds: [
|
|
170
|
+
{ scheme: 'exact', network: 'solana-devnet' }
|
|
171
|
+
]
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
exports.X402FacilitatorServer = X402FacilitatorServer;
|
|
176
|
+
//# sourceMappingURL=X402FacilitatorServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"X402FacilitatorServer.js","sourceRoot":"","sources":["../../../src/facilitator/X402FacilitatorServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/facilitator/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Aether Agent SDK - Facilitator Module
|
|
4
|
+
*
|
|
5
|
+
* Export x402 facilitator for Solana
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.X402FacilitatorServer = void 0;
|
|
9
|
+
var X402FacilitatorServer_1 = require("./X402FacilitatorServer");
|
|
10
|
+
Object.defineProperty(exports, "X402FacilitatorServer", { enumerable: true, get: function () { return X402FacilitatorServer_1.X402FacilitatorServer; } });
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/facilitator/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,iEAA+D;AAAtD,8HAAA,qBAAqB,OAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aether Agent SDK
|
|
3
|
+
*
|
|
4
|
+
* Autonomous Agent Ecosystem SDK for Solana with x402 Payment Protocol
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
export * from './agents';
|
|
9
|
+
export * from './facilitator';
|
|
10
|
+
export * from './utils';
|
|
11
|
+
/**
|
|
12
|
+
* SDK Version
|
|
13
|
+
*/
|
|
14
|
+
export declare const VERSION = "1.0.0";
|
|
15
|
+
/**
|
|
16
|
+
* SDK Name
|
|
17
|
+
*/
|
|
18
|
+
export declare const SDK_NAME = "aether-agent-sdk";
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,cAAc,UAAU,CAAA;AAGxB,cAAc,eAAe,CAAA;AAG7B,cAAc,SAAS,CAAA;AAEvB;;GAEG;AACH,eAAO,MAAM,OAAO,UAAU,CAAA;AAE9B;;GAEG;AACH,eAAO,MAAM,QAAQ,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Aether Agent SDK
|
|
4
|
+
*
|
|
5
|
+
* Autonomous Agent Ecosystem SDK for Solana with x402 Payment Protocol
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
21
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
22
|
+
};
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.SDK_NAME = exports.VERSION = void 0;
|
|
25
|
+
// Agents
|
|
26
|
+
__exportStar(require("./agents"), exports);
|
|
27
|
+
// Facilitator
|
|
28
|
+
__exportStar(require("./facilitator"), exports);
|
|
29
|
+
// Utils
|
|
30
|
+
__exportStar(require("./utils"), exports);
|
|
31
|
+
/**
|
|
32
|
+
* SDK Version
|
|
33
|
+
*/
|
|
34
|
+
exports.VERSION = '1.0.0';
|
|
35
|
+
/**
|
|
36
|
+
* SDK Name
|
|
37
|
+
*/
|
|
38
|
+
exports.SDK_NAME = 'aether-agent-sdk';
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;AAEH,SAAS;AACT,2CAAwB;AAExB,cAAc;AACd,gDAA6B;AAE7B,QAAQ;AACR,0CAAuB;AAEvB;;GAEG;AACU,QAAA,OAAO,GAAG,OAAO,CAAA;AAE9B;;GAEG;AACU,QAAA,QAAQ,GAAG,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-in-the-Loop Mode
|
|
3
|
+
*
|
|
4
|
+
* This module implements human approval workflows for autonomous agents.
|
|
5
|
+
* When enabled, agents will pause and request human approval for:
|
|
6
|
+
* - High-value payments
|
|
7
|
+
* - Sensitive operations
|
|
8
|
+
* - Custom-defined approval thresholds
|
|
9
|
+
*
|
|
10
|
+
* Used for the hackathon bonus points requirement
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Approval Request
|
|
14
|
+
*/
|
|
15
|
+
export interface ApprovalRequest {
|
|
16
|
+
requestId: string;
|
|
17
|
+
action: string;
|
|
18
|
+
description: string;
|
|
19
|
+
details: any;
|
|
20
|
+
createdAt: number;
|
|
21
|
+
status?: "pending" | "approved" | "rejected" | "expired";
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Approval Result
|
|
25
|
+
*/
|
|
26
|
+
export interface ApprovalResult {
|
|
27
|
+
approved: boolean;
|
|
28
|
+
requestId: string;
|
|
29
|
+
timestamp: number;
|
|
30
|
+
reason?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Human-in-the-Loop Configuration
|
|
34
|
+
*/
|
|
35
|
+
export interface HITLConfig {
|
|
36
|
+
enabled: boolean;
|
|
37
|
+
requireApprovalFor?: string[];
|
|
38
|
+
approvalThresholds?: {
|
|
39
|
+
payment?: number;
|
|
40
|
+
transaction?: number;
|
|
41
|
+
custom?: Map<string, number>;
|
|
42
|
+
};
|
|
43
|
+
timeout?: number;
|
|
44
|
+
autoApproveTimeout?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Human-in-the-Loop Mode Implementation
|
|
48
|
+
*/
|
|
49
|
+
export declare class HumanInTheLoopMode {
|
|
50
|
+
private config;
|
|
51
|
+
private pendingRequests;
|
|
52
|
+
private rl?;
|
|
53
|
+
private callbacks;
|
|
54
|
+
constructor(config?: HITLConfig);
|
|
55
|
+
/**
|
|
56
|
+
* Check if action requires human approval
|
|
57
|
+
*/
|
|
58
|
+
requiresApproval(action: string, details: any): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Request human approval
|
|
61
|
+
*/
|
|
62
|
+
requestApproval(request: Omit<ApprovalRequest, 'requestId' | 'createdAt' | 'status'>): Promise<ApprovalResult>;
|
|
63
|
+
/**
|
|
64
|
+
* Request approval via CLI
|
|
65
|
+
*/
|
|
66
|
+
private requestCLIApproval;
|
|
67
|
+
/**
|
|
68
|
+
* Create approval result
|
|
69
|
+
*/
|
|
70
|
+
private createApprovalResult;
|
|
71
|
+
/**
|
|
72
|
+
* Get pending requests
|
|
73
|
+
*/
|
|
74
|
+
getPendingRequests(): ApprovalRequest[];
|
|
75
|
+
/**
|
|
76
|
+
* Enable HITL mode
|
|
77
|
+
*/
|
|
78
|
+
enable(): void;
|
|
79
|
+
/**
|
|
80
|
+
* Disable HITL mode
|
|
81
|
+
*/
|
|
82
|
+
disable(): void;
|
|
83
|
+
/**
|
|
84
|
+
* Set approval threshold for payments
|
|
85
|
+
*/
|
|
86
|
+
setPaymentThreshold(threshold: number): void;
|
|
87
|
+
/**
|
|
88
|
+
* Cleanup
|
|
89
|
+
*/
|
|
90
|
+
cleanup(): void;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=HumanInTheLoopMode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HumanInTheLoopMode.d.ts","sourceRoot":"","sources":["../../../src/modes/HumanInTheLoopMode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,GAAG,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAA;CACzD;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B,kBAAkB,CAAC,EAAE;QACnB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAC7B,CAAA;IACD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,EAAE,CAAC,CAAoB;IAC/B,OAAO,CAAC,SAAS,CAA2D;gBAEhE,MAAM,CAAC,EAAE,UAAU;IAc/B;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO;IA+BvD;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IA2CpH;;OAEG;YACW,kBAAkB;IA0ChC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;OAEG;IACH,kBAAkB,IAAI,eAAe,EAAE;IAIvC;;OAEG;IACH,MAAM,IAAI,IAAI;IAKd;;OAEG;IACH,OAAO,IAAI,IAAI;IAKf;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQ5C;;OAEG;IACH,OAAO,IAAI,IAAI;CAKhB"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Human-in-the-Loop Mode
|
|
4
|
+
*
|
|
5
|
+
* This module implements human approval workflows for autonomous agents.
|
|
6
|
+
* When enabled, agents will pause and request human approval for:
|
|
7
|
+
* - High-value payments
|
|
8
|
+
* - Sensitive operations
|
|
9
|
+
* - Custom-defined approval thresholds
|
|
10
|
+
*
|
|
11
|
+
* Used for the hackathon bonus points requirement
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
47
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
48
|
+
};
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.HumanInTheLoopMode = void 0;
|
|
51
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
52
|
+
const readline = __importStar(require("readline"));
|
|
53
|
+
/**
|
|
54
|
+
* Human-in-the-Loop Mode Implementation
|
|
55
|
+
*/
|
|
56
|
+
class HumanInTheLoopMode {
|
|
57
|
+
config;
|
|
58
|
+
pendingRequests = new Map();
|
|
59
|
+
rl;
|
|
60
|
+
callbacks = new Map();
|
|
61
|
+
constructor(config) {
|
|
62
|
+
this.config = {
|
|
63
|
+
enabled: false,
|
|
64
|
+
requireApprovalFor: [],
|
|
65
|
+
approvalThresholds: {
|
|
66
|
+
payment: 100, // Default $100
|
|
67
|
+
transaction: 10
|
|
68
|
+
},
|
|
69
|
+
timeout: 300000, // 5 minutes default
|
|
70
|
+
autoApproveTimeout: false,
|
|
71
|
+
...config
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Check if action requires human approval
|
|
76
|
+
*/
|
|
77
|
+
requiresApproval(action, details) {
|
|
78
|
+
if (!this.config.enabled) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
// Check if action is in requireApprovalFor list
|
|
82
|
+
if (this.config.requireApprovalFor && this.config.requireApprovalFor.includes(action)) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
// Check payment threshold
|
|
86
|
+
if (action === "payment" && this.config.approvalThresholds?.payment) {
|
|
87
|
+
const amount = details.amount || 0;
|
|
88
|
+
if (amount >= this.config.approvalThresholds.payment) {
|
|
89
|
+
console.log(chalk_1.default.yellow(`⚠️ Payment amount ${amount} exceeds threshold ${this.config.approvalThresholds.payment}`));
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Check transaction threshold
|
|
94
|
+
if (action === "transaction" && this.config.approvalThresholds?.transaction) {
|
|
95
|
+
const count = details.count || 0;
|
|
96
|
+
if (count >= this.config.approvalThresholds.transaction) {
|
|
97
|
+
console.log(chalk_1.default.yellow(`⚠️ Transaction count ${count} exceeds threshold ${this.config.approvalThresholds.transaction}`));
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Request human approval
|
|
105
|
+
*/
|
|
106
|
+
async requestApproval(request) {
|
|
107
|
+
const requestId = `approval-${Date.now()}-${Math.random().toString(36).substring(7)}`;
|
|
108
|
+
const fullRequest = {
|
|
109
|
+
...request,
|
|
110
|
+
requestId,
|
|
111
|
+
createdAt: Date.now(),
|
|
112
|
+
status: "pending"
|
|
113
|
+
};
|
|
114
|
+
this.pendingRequests.set(requestId, fullRequest);
|
|
115
|
+
console.log(chalk_1.default.yellow(`\n🤔 HUMAN APPROVAL REQUIRED`));
|
|
116
|
+
console.log(chalk_1.default.bold(`─────────────────────────────────────────────────────`));
|
|
117
|
+
console.log(chalk_1.default.blue(`Request ID: ${requestId}`));
|
|
118
|
+
console.log(chalk_1.default.blue(`Action: ${request.action}`));
|
|
119
|
+
console.log(chalk_1.default.blue(`Description: ${request.description}`));
|
|
120
|
+
console.log(chalk_1.default.gray(`Details: ${JSON.stringify(request.details, null, 2)}`));
|
|
121
|
+
console.log(chalk_1.default.bold(`─────────────────────────────────────────────────────\n`));
|
|
122
|
+
return new Promise((resolve) => {
|
|
123
|
+
this.callbacks.set(requestId, resolve);
|
|
124
|
+
// Set timeout if configured
|
|
125
|
+
if (this.config.timeout) {
|
|
126
|
+
setTimeout(() => {
|
|
127
|
+
if (this.pendingRequests.has(requestId)) {
|
|
128
|
+
const result = this.config.autoApproveTimeout ?
|
|
129
|
+
this.createApprovalResult(requestId, true, "Auto-approved due to timeout") :
|
|
130
|
+
this.createApprovalResult(requestId, false, "Request timed out");
|
|
131
|
+
resolve(result);
|
|
132
|
+
this.callbacks.delete(requestId);
|
|
133
|
+
this.pendingRequests.delete(requestId);
|
|
134
|
+
}
|
|
135
|
+
}, this.config.timeout);
|
|
136
|
+
}
|
|
137
|
+
// Request approval via CLI
|
|
138
|
+
this.requestCLIApproval(requestId, request);
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Request approval via CLI
|
|
143
|
+
*/
|
|
144
|
+
async requestCLIApproval(requestId, request) {
|
|
145
|
+
console.log(chalk_1.default.bold(`Options:`));
|
|
146
|
+
console.log(chalk_1.default.green(`[y] Yes - Approve and proceed`));
|
|
147
|
+
console.log(chalk_1.default.red(`[n] No - Reject and cancel`));
|
|
148
|
+
console.log(chalk_1.default.bold(`[Enter your choice (y/n):]`));
|
|
149
|
+
// Create readline interface if not exists
|
|
150
|
+
if (!this.rl) {
|
|
151
|
+
this.rl = readline.createInterface({
|
|
152
|
+
input: process.stdin,
|
|
153
|
+
output: process.stdout
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
const answer = await new Promise((resolve) => {
|
|
157
|
+
this.rl.question('', (answer) => {
|
|
158
|
+
resolve(answer.trim().toLowerCase());
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
const approved = answer === 'y' || answer === 'yes';
|
|
162
|
+
const callback = this.callbacks.get(requestId);
|
|
163
|
+
if (callback) {
|
|
164
|
+
const result = this.createApprovalResult(requestId, approved, approved ? 'Human approved' : 'Human rejected');
|
|
165
|
+
callback(result);
|
|
166
|
+
this.callbacks.delete(requestId);
|
|
167
|
+
}
|
|
168
|
+
this.pendingRequests.delete(requestId);
|
|
169
|
+
if (approved) {
|
|
170
|
+
console.log(chalk_1.default.green(`✅ Approval granted, proceeding...\n`));
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
console.log(chalk_1.default.red(`❌ Approval denied, canceling...\n`));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Create approval result
|
|
178
|
+
*/
|
|
179
|
+
createApprovalResult(requestId, approved, reason) {
|
|
180
|
+
const result = {
|
|
181
|
+
approved,
|
|
182
|
+
requestId,
|
|
183
|
+
timestamp: Date.now(),
|
|
184
|
+
reason
|
|
185
|
+
};
|
|
186
|
+
// Update request status
|
|
187
|
+
const request = this.pendingRequests.get(requestId);
|
|
188
|
+
if (request) {
|
|
189
|
+
request.status = approved ? "approved" : "rejected";
|
|
190
|
+
this.pendingRequests.set(requestId, request);
|
|
191
|
+
}
|
|
192
|
+
return result;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Get pending requests
|
|
196
|
+
*/
|
|
197
|
+
getPendingRequests() {
|
|
198
|
+
return Array.from(this.pendingRequests.values()).filter(r => r.status === "pending");
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Enable HITL mode
|
|
202
|
+
*/
|
|
203
|
+
enable() {
|
|
204
|
+
this.config.enabled = true;
|
|
205
|
+
console.log(chalk_1.default.green(`✅ Human-in-the-Loop mode enabled`));
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Disable HITL mode
|
|
209
|
+
*/
|
|
210
|
+
disable() {
|
|
211
|
+
this.config.enabled = false;
|
|
212
|
+
console.log(chalk_1.default.yellow(`⚠️ Human-in-the-Loop mode disabled`));
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Set approval threshold for payments
|
|
216
|
+
*/
|
|
217
|
+
setPaymentThreshold(threshold) {
|
|
218
|
+
if (!this.config.approvalThresholds) {
|
|
219
|
+
this.config.approvalThresholds = {};
|
|
220
|
+
}
|
|
221
|
+
this.config.approvalThresholds.payment = threshold;
|
|
222
|
+
console.log(chalk_1.default.blue(`💰 Payment approval threshold set to $${threshold}`));
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Cleanup
|
|
226
|
+
*/
|
|
227
|
+
cleanup() {
|
|
228
|
+
if (this.rl) {
|
|
229
|
+
this.rl.close();
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
exports.HumanInTheLoopMode = HumanInTheLoopMode;
|
|
234
|
+
//# sourceMappingURL=HumanInTheLoopMode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HumanInTheLoopMode.js","sourceRoot":"","sources":["../../../src/modes/HumanInTheLoopMode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hedron Agent SDK - Modes Module
|
|
3
|
+
*
|
|
4
|
+
* Export all mode classes and interfaces
|
|
5
|
+
*/
|
|
6
|
+
export { HumanInTheLoopMode } from './HumanInTheLoopMode';
|
|
7
|
+
export type { ApprovalRequest, ApprovalResult, HITLConfig } from './HumanInTheLoopMode';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hedron Agent SDK - Modes Module
|
|
4
|
+
*
|
|
5
|
+
* Export all mode classes and interfaces
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.HumanInTheLoopMode = void 0;
|
|
9
|
+
var HumanInTheLoopMode_1 = require("./HumanInTheLoopMode");
|
|
10
|
+
Object.defineProperty(exports, "HumanInTheLoopMode", { enumerable: true, get: function () { return HumanInTheLoopMode_1.HumanInTheLoopMode; } });
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modes/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,2DAAyD;AAAhD,wHAAA,kBAAkB,OAAA"}
|