aptos-x402 1.0.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -5
- package/dist/agent/data-extractor.d.ts +13 -0
- package/dist/agent/data-extractor.d.ts.map +1 -0
- package/dist/agent/data-extractor.js +191 -0
- package/dist/agent/data-extractor.js.map +1 -0
- package/dist/agent/executor.d.ts +27 -0
- package/dist/agent/executor.d.ts.map +1 -0
- package/dist/agent/executor.js +245 -0
- package/dist/agent/executor.js.map +1 -0
- package/dist/agent/gemini-interpreter.d.ts +10 -0
- package/dist/agent/gemini-interpreter.d.ts.map +1 -0
- package/dist/agent/gemini-interpreter.js +142 -0
- package/dist/agent/gemini-interpreter.js.map +1 -0
- package/dist/agent/github-models.d.ts +30 -0
- package/dist/agent/github-models.d.ts.map +1 -0
- package/dist/agent/github-models.js +114 -0
- package/dist/agent/github-models.js.map +1 -0
- package/dist/agent/llm-chat.d.ts +16 -0
- package/dist/agent/llm-chat.d.ts.map +1 -0
- package/dist/agent/llm-chat.js +181 -0
- package/dist/agent/llm-chat.js.map +1 -0
- package/dist/agent/wallet.d.ts +32 -0
- package/dist/agent/wallet.d.ts.map +1 -0
- package/dist/agent/wallet.js +92 -0
- package/dist/agent/wallet.js.map +1 -0
- package/dist/arc8004/identity/agent-card.d.ts +66 -0
- package/dist/arc8004/identity/agent-card.d.ts.map +1 -0
- package/dist/arc8004/identity/agent-card.js +141 -0
- package/dist/arc8004/identity/agent-card.js.map +1 -0
- package/dist/arc8004/identity/index.d.ts +7 -0
- package/dist/arc8004/identity/index.d.ts.map +1 -0
- package/dist/arc8004/identity/index.js +7 -0
- package/dist/arc8004/identity/index.js.map +1 -0
- package/dist/arc8004/identity/registry.d.ts +60 -0
- package/dist/arc8004/identity/registry.d.ts.map +1 -0
- package/dist/arc8004/identity/registry.js +297 -0
- package/dist/arc8004/identity/registry.js.map +1 -0
- package/dist/arc8004/index.d.ts +21 -0
- package/dist/arc8004/index.d.ts.map +1 -0
- package/dist/arc8004/index.js +26 -0
- package/dist/arc8004/index.js.map +1 -0
- package/dist/arc8004/reputation/index.d.ts +7 -0
- package/dist/arc8004/reputation/index.d.ts.map +1 -0
- package/dist/arc8004/reputation/index.js +7 -0
- package/dist/arc8004/reputation/index.js.map +1 -0
- package/dist/arc8004/reputation/registry.d.ts +60 -0
- package/dist/arc8004/reputation/registry.d.ts.map +1 -0
- package/dist/arc8004/reputation/registry.js +373 -0
- package/dist/arc8004/reputation/registry.js.map +1 -0
- package/dist/arc8004/reputation/scoring.d.ts +60 -0
- package/dist/arc8004/reputation/scoring.d.ts.map +1 -0
- package/dist/arc8004/reputation/scoring.js +130 -0
- package/dist/arc8004/reputation/scoring.js.map +1 -0
- package/dist/arc8004/types.d.ts +268 -0
- package/dist/arc8004/types.d.ts.map +1 -0
- package/dist/arc8004/types.js +27 -0
- package/dist/arc8004/types.js.map +1 -0
- package/dist/arc8004/validation/index.d.ts +6 -0
- package/dist/arc8004/validation/index.d.ts.map +1 -0
- package/dist/arc8004/validation/index.js +6 -0
- package/dist/arc8004/validation/index.js.map +1 -0
- package/dist/arc8004/validation/registry.d.ts +72 -0
- package/dist/arc8004/validation/registry.d.ts.map +1 -0
- package/dist/arc8004/validation/registry.js +268 -0
- package/dist/arc8004/validation/registry.js.map +1 -0
- package/dist/db/index.d.ts +10 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +14 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema.d.ts +2086 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +220 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/facilitator-client.d.ts +4 -4
- package/dist/facilitator-client.js +4 -4
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -1
- package/dist/services/agent-summary.d.ts +24 -0
- package/dist/services/agent-summary.d.ts.map +1 -0
- package/dist/services/agent-summary.js +90 -0
- package/dist/services/agent-summary.js.map +1 -0
- package/dist/storage/agents.d.ts +36 -0
- package/dist/storage/agents.d.ts.map +1 -0
- package/dist/storage/agents.js +111 -0
- package/dist/storage/agents.js.map +1 -0
- package/dist/storage/apis.d.ts +20 -0
- package/dist/storage/apis.d.ts.map +1 -0
- package/dist/storage/apis.js +131 -0
- package/dist/storage/apis.js.map +1 -0
- package/dist/storage/chats.d.ts +44 -0
- package/dist/storage/chats.d.ts.map +1 -0
- package/dist/storage/chats.js +103 -0
- package/dist/storage/chats.js.map +1 -0
- package/dist/storage/user-wallets.d.ts +20 -0
- package/dist/storage/user-wallets.d.ts.map +1 -0
- package/dist/storage/user-wallets.js +52 -0
- package/dist/storage/user-wallets.js.map +1 -0
- package/dist/utils/agent-symbols.d.ts +20 -0
- package/dist/utils/agent-symbols.d.ts.map +1 -0
- package/dist/utils/agent-symbols.js +86 -0
- package/dist/utils/agent-symbols.js.map +1 -0
- package/dist/utils/server-user-id.d.ts +2 -0
- package/dist/utils/server-user-id.d.ts.map +1 -0
- package/dist/utils/server-user-id.js +9 -0
- package/dist/utils/server-user-id.js.map +1 -0
- package/dist/utils/user-id.d.ts +21 -0
- package/dist/utils/user-id.d.ts.map +1 -0
- package/dist/utils/user-id.js +102 -0
- package/dist/utils/user-id.js.map +1 -0
- package/dist/x402-axios.d.ts.map +1 -1
- package/dist/x402-axios.js +164 -49
- package/dist/x402-axios.js.map +1 -1
- package/dist/x402-middleware.d.ts +1 -1
- package/dist/x402-middleware.d.ts.map +1 -1
- package/dist/x402-middleware.js +131 -101
- package/dist/x402-middleware.js.map +1 -1
- package/package.json +18 -3
- package/dist/server/index.d.ts +0 -8
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js +0 -8
- package/dist/server/index.js.map +0 -1
- package/dist/server/next.d.ts +0 -44
- package/dist/server/next.d.ts.map +0 -1
- package/dist/server/next.js +0 -210
- package/dist/server/next.js.map +0 -1
- package/dist/types/config.d.ts +0 -43
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js +0 -6
- package/dist/types/config.js.map +0 -1
- package/dist/types/index.d.ts +0 -9
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -7
- package/dist/types/index.js.map +0 -1
- package/dist/types/protocol.d.ts +0 -119
- package/dist/types/protocol.d.ts.map +0 -1
- package/dist/types/protocol.js +0 -12
- package/dist/types/protocol.js.map +0 -1
- package/dist/x402-client.d.ts +0 -56
- package/dist/x402-client.d.ts.map +0 -1
- package/dist/x402-client.js +0 -209
- package/dist/x402-client.js.map +0 -1
- package/dist/x402-fetch.d.ts +0 -59
- package/dist/x402-fetch.d.ts.map +0 -1
- package/dist/x402-fetch.js +0 -167
- package/dist/x402-fetch.js.map +0 -1
- package/dist/x402-request.d.ts +0 -57
- package/dist/x402-request.d.ts.map +0 -1
- package/dist/x402-request.js +0 -167
- package/dist/x402-request.js.map +0 -1
package/README.md
CHANGED
|
@@ -18,7 +18,14 @@
|
|
|
18
18
|
|
|
19
19
|
**Aptos x402** is a TypeScript SDK implementing the [x402 payment protocol](https://github.com/coinbase/x402) for the Aptos blockchain. Enable your APIs to require cryptocurrency payments before serving responses using the standardized HTTP 402 status code.
|
|
20
20
|
|
|
21
|
-
Built for **machine-to-machine micropayments**, this SDK provides zero-friction payment integration for Next.js applications with automatic payment handling, cryptographic verification, and sub-
|
|
21
|
+
Built for **machine-to-machine micropayments**, this SDK provides zero-friction payment integration for Next.js applications with automatic payment handling, cryptographic verification, and **sub-second settlement times** (optimized from 2-3s to 200-500ms).
|
|
22
|
+
|
|
23
|
+
### What’s new in 2.0.0
|
|
24
|
+
- 🛡️ **ARC-8004 Agent Trust Layer** (Aptos-native, inspired by ERC-8004): agent identities, reputation, and task validation.
|
|
25
|
+
- ✅ Frontend badges for Verified + Trust, with a verify API.
|
|
26
|
+
- 📚 Docs and API routes for ARC-8004 (identity, reputation, validation).
|
|
27
|
+
|
|
28
|
+
> ⚡ **Performance:** Latest optimizations deliver **5-10x faster** payments with verification caching, async confirmation, and smart deduplication. See [PERFORMANCE_OPTIMIZATIONS.md](./PERFORMANCE_OPTIMIZATIONS.md) for details.
|
|
22
29
|
|
|
23
30
|
<!-- ## Key Features
|
|
24
31
|
|
|
@@ -58,6 +65,24 @@ npm install aptos-x402
|
|
|
58
65
|
|
|
59
66
|
---
|
|
60
67
|
|
|
68
|
+
## 🤖 AI-Powered Setup (Cursor IDE)
|
|
69
|
+
|
|
70
|
+
Get started in seconds with AI-assisted integration:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
mkdir -p .cursor/rules
|
|
74
|
+
curl -o .cursor/rules/aptos-x402.mdc https://raw.githubusercontent.com/adipundir/aptos-x402/main/integration/aptos-x402.mdc
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Restart Cursor IDE**, then ask:
|
|
78
|
+
> "Set up Aptos x402 in my Next.js app with payment middleware and a test client component"
|
|
79
|
+
|
|
80
|
+
The MDC context file provides Cursor with complete API documentation, types, and examples for accurate code generation.
|
|
81
|
+
|
|
82
|
+
**Learn more:** [Cursor Integration Guide](./docs/guides/cursor-integration.md)
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
61
86
|
## 🛒 Client Integration (Consuming Paid APIs)
|
|
62
87
|
|
|
63
88
|
Access x402-protected APIs with zero configuration. The `x402axios` client automatically detects payment requirements, builds transactions, and handles the entire payment flow.
|
|
@@ -621,12 +646,48 @@ No human intervention required.
|
|
|
621
646
|
|
|
622
647
|
---
|
|
623
648
|
|
|
649
|
+
## Performance Monitoring
|
|
650
|
+
|
|
651
|
+
Track payment performance with built-in timing headers:
|
|
652
|
+
|
|
653
|
+
```typescript
|
|
654
|
+
const response = await x402axios.get(url, { privateKey });
|
|
655
|
+
|
|
656
|
+
// Check performance metrics
|
|
657
|
+
const verifyTime = response.headers['x-verification-time'];
|
|
658
|
+
const settleTime = response.headers['x-settlement-time'];
|
|
659
|
+
const cached = response.headers['x-cached'] === 'true';
|
|
660
|
+
|
|
661
|
+
console.log(`Verification: ${verifyTime}ms`);
|
|
662
|
+
console.log(`Settlement: ${settleTime}ms`);
|
|
663
|
+
console.log(`Cached: ${cached}`);
|
|
664
|
+
```
|
|
665
|
+
|
|
666
|
+
### Performance Benchmarks
|
|
667
|
+
|
|
668
|
+
Run the included benchmark to measure your setup:
|
|
669
|
+
|
|
670
|
+
```bash
|
|
671
|
+
APTOS_PRIVATE_KEY=0x... npx tsx scripts/benchmark-payment-flow.ts
|
|
672
|
+
```
|
|
673
|
+
|
|
674
|
+
**Expected Performance:**
|
|
675
|
+
- First request (uncached): ~800-1000ms
|
|
676
|
+
- Cached requests: ~650-800ms
|
|
677
|
+
- Settlement alone: ~200-300ms
|
|
678
|
+
- Legacy (pre-optimization): ~2000-3000ms
|
|
679
|
+
|
|
680
|
+
**Optimization Details:** See [PERFORMANCE_OPTIMIZATIONS.md](./PERFORMANCE_OPTIMIZATIONS.md) for complete breakdown of the **5-10x performance improvements**.
|
|
681
|
+
|
|
682
|
+
---
|
|
683
|
+
|
|
624
684
|
## Resources
|
|
625
685
|
|
|
626
686
|
### Documentation
|
|
627
687
|
- [Full Documentation](https://aptos-x402.vercel.app/docs)
|
|
628
688
|
- [API Reference](./docs/api-reference/server-api.md)
|
|
629
689
|
- [Protocol Specification](https://github.com/coinbase/x402)
|
|
690
|
+
- [Performance Guide](./PERFORMANCE_OPTIMIZATIONS.md)
|
|
630
691
|
|
|
631
692
|
### Links
|
|
632
693
|
- [GitHub Repository](https://github.com/adipundir/aptos-x402)
|
|
@@ -642,10 +703,6 @@ No human intervention required.
|
|
|
642
703
|
|
|
643
704
|
Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests.
|
|
644
705
|
|
|
645
|
-
## License
|
|
646
|
-
|
|
647
|
-
MIT © Aditya Pundir
|
|
648
|
-
|
|
649
706
|
---
|
|
650
707
|
|
|
651
708
|
<div align="center">
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Extractor
|
|
3
|
+
* Uses LLM (Gemini or GitHub Models) to extract and format specific data from API responses
|
|
4
|
+
*/
|
|
5
|
+
export interface ExtractedData {
|
|
6
|
+
formattedResponse: string;
|
|
7
|
+
extractedData?: any;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Use LLM to extract specific data from API response based on user query
|
|
11
|
+
*/
|
|
12
|
+
export declare function extractDataWithLLM(userQuery: string, apiData: any, apiName: string, modelName?: string): Promise<ExtractedData>;
|
|
13
|
+
//# sourceMappingURL=data-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-extractor.d.ts","sourceRoot":"","sources":["../../lib/agent/data-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqBH,MAAM,WAAW,aAAa;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,GAAG,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAA+B,GACzC,OAAO,CAAC,aAAa,CAAC,CAyDxB"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Extractor
|
|
3
|
+
* Uses LLM (Gemini or GitHub Models) to extract and format specific data from API responses
|
|
4
|
+
*/
|
|
5
|
+
import { ChatGoogleGenerativeAI } from '@langchain/google-genai';
|
|
6
|
+
import { invokeGitHubModel, isGitHubModel } from './github-models';
|
|
7
|
+
const GEMINI_API_KEY = process.env.GEMINI_API_KEY;
|
|
8
|
+
// Cache model instances to avoid re-initialization overhead
|
|
9
|
+
const modelCache = new Map();
|
|
10
|
+
function getModel(modelName) {
|
|
11
|
+
if (!modelCache.has(modelName)) {
|
|
12
|
+
modelCache.set(modelName, new ChatGoogleGenerativeAI({
|
|
13
|
+
modelName: modelName,
|
|
14
|
+
temperature: 0.1,
|
|
15
|
+
apiKey: GEMINI_API_KEY,
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
return modelCache.get(modelName);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Use LLM to extract specific data from API response based on user query
|
|
22
|
+
*/
|
|
23
|
+
export async function extractDataWithLLM(userQuery, apiData, apiName, modelName = 'gemini-2.0-flash-exp') {
|
|
24
|
+
// Check if this is a GitHub Model
|
|
25
|
+
if (isGitHubModel(modelName)) {
|
|
26
|
+
return extractDataWithGitHubModel(userQuery, apiData, apiName, modelName);
|
|
27
|
+
}
|
|
28
|
+
// If no Gemini API key, return raw data
|
|
29
|
+
if (!GEMINI_API_KEY || modelName === 'keyword') {
|
|
30
|
+
return {
|
|
31
|
+
formattedResponse: formatDataFallback(userQuery, apiData, apiName),
|
|
32
|
+
extractedData: apiData,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const model = getModel(modelName);
|
|
37
|
+
// Optimize prompt - shorter and more direct for faster processing
|
|
38
|
+
// Truncate large API data to avoid token bloat
|
|
39
|
+
const dataStr = JSON.stringify(apiData);
|
|
40
|
+
const maxDataLength = 2000; // Limit data size to avoid huge prompts
|
|
41
|
+
const truncatedData = dataStr.length > maxDataLength
|
|
42
|
+
? dataStr.substring(0, maxDataLength) + '...[truncated]'
|
|
43
|
+
: dataStr;
|
|
44
|
+
const prompt = `Query: "${userQuery}"
|
|
45
|
+
API: ${apiName}
|
|
46
|
+
Data: ${truncatedData}
|
|
47
|
+
|
|
48
|
+
Rules: Direct answer only, no intros. Extract what user asked. Brief.`;
|
|
49
|
+
const response = await model.invoke(prompt);
|
|
50
|
+
const formattedResponse = response.content?.toString().trim();
|
|
51
|
+
// Try to extract structured data if possible
|
|
52
|
+
let extractedData = apiData;
|
|
53
|
+
try {
|
|
54
|
+
// Look for JSON in the response (in case LLM provides structured data)
|
|
55
|
+
const jsonMatch = formattedResponse?.match(/\{[\s\S]*\}/);
|
|
56
|
+
if (jsonMatch) {
|
|
57
|
+
extractedData = JSON.parse(jsonMatch[0]);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// If no JSON, use original data
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
formattedResponse: formattedResponse || formatDataFallback(userQuery, apiData, apiName),
|
|
65
|
+
extractedData,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
console.error('Error extracting data with LLM:', error);
|
|
70
|
+
return {
|
|
71
|
+
formattedResponse: formatDataFallback(userQuery, apiData, apiName),
|
|
72
|
+
extractedData: apiData,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Extract data with GitHub Models
|
|
78
|
+
*/
|
|
79
|
+
async function extractDataWithGitHubModel(userQuery, apiData, apiName, modelName) {
|
|
80
|
+
try {
|
|
81
|
+
// Optimize prompt - shorter and more direct for faster processing
|
|
82
|
+
// Truncate large API data to avoid token bloat
|
|
83
|
+
const dataStr = JSON.stringify(apiData);
|
|
84
|
+
const maxDataLength = 2000; // Limit data size to avoid huge prompts
|
|
85
|
+
const truncatedData = dataStr.length > maxDataLength
|
|
86
|
+
? dataStr.substring(0, maxDataLength) + '...[truncated]'
|
|
87
|
+
: dataStr;
|
|
88
|
+
// Use a safer prompt that's less likely to trigger content filters
|
|
89
|
+
const prompt = `User asked: ${userQuery}
|
|
90
|
+
API response from ${apiName}:
|
|
91
|
+
${truncatedData}
|
|
92
|
+
|
|
93
|
+
Provide a concise summary answering the user's question. Be factual and direct.`;
|
|
94
|
+
const formattedResponse = await invokeGitHubModel(prompt, modelName);
|
|
95
|
+
// Try to extract structured data if possible
|
|
96
|
+
let extractedData = apiData;
|
|
97
|
+
try {
|
|
98
|
+
// Look for JSON in the response (in case LLM provides structured data)
|
|
99
|
+
const jsonMatch = formattedResponse.match(/\{[\s\S]*\}/);
|
|
100
|
+
if (jsonMatch) {
|
|
101
|
+
extractedData = JSON.parse(jsonMatch[0]);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// If no JSON, use original data
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
formattedResponse: formattedResponse || formatDataFallback(userQuery, apiData, apiName),
|
|
109
|
+
extractedData,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
console.error('Error extracting data with GitHub Model:', error);
|
|
114
|
+
// If content filter error, try falling back to Gemini if available
|
|
115
|
+
if (error.message?.includes('content filter') || error.message?.includes('content management')) {
|
|
116
|
+
console.log('[Data Extractor] GitHub Model content filter triggered, falling back to Gemini...');
|
|
117
|
+
if (GEMINI_API_KEY) {
|
|
118
|
+
try {
|
|
119
|
+
return await extractDataWithLLM(userQuery, apiData, apiName, 'gemini-2.0-flash-exp');
|
|
120
|
+
}
|
|
121
|
+
catch (geminiError) {
|
|
122
|
+
console.error('Gemini fallback also failed:', geminiError);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Fallback to smart formatter instead of raw JSON
|
|
127
|
+
return {
|
|
128
|
+
formattedResponse: formatDataSmart(userQuery, apiData, apiName),
|
|
129
|
+
extractedData: apiData,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Fallback formatter when LLM is not available
|
|
135
|
+
* Returns raw JSON - no API-specific logic. LLM should handle all extraction.
|
|
136
|
+
*/
|
|
137
|
+
function formatDataFallback(userQuery, apiData, apiName) {
|
|
138
|
+
// Just return the raw data as JSON - no hardcoded API-specific logic
|
|
139
|
+
// The LLM handles all extraction and formatting when available
|
|
140
|
+
return JSON.stringify(apiData, null, 2);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Smart formatter that extracts relevant data based on API type and query
|
|
144
|
+
* Used when LLM extraction fails but we still want specific output
|
|
145
|
+
*/
|
|
146
|
+
function formatDataSmart(userQuery, apiData, apiName) {
|
|
147
|
+
const lowerQuery = userQuery.toLowerCase();
|
|
148
|
+
// News API specific formatting
|
|
149
|
+
if (apiName.toLowerCase().includes('news') && apiData.headlines) {
|
|
150
|
+
const headlines = Array.isArray(apiData.headlines) ? apiData.headlines : [];
|
|
151
|
+
if (headlines.length > 0) {
|
|
152
|
+
return headlines.map((item, idx) => `${idx + 1}. ${item.title || item.headline || 'Untitled'}\n Source: ${item.source || 'Unknown'}\n ${item.publishedAt ? `Published: ${new Date(item.publishedAt).toLocaleDateString()}` : ''}`).join('\n\n');
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Weather API specific formatting
|
|
156
|
+
if (apiName.toLowerCase().includes('weather') && apiData.temperature) {
|
|
157
|
+
return `Temperature: ${apiData.temperature}°${apiData.unit || 'F'}\nCondition: ${apiData.condition || 'Unknown'}\nLocation: ${apiData.location || 'Unknown'}`;
|
|
158
|
+
}
|
|
159
|
+
// Stocks API specific formatting
|
|
160
|
+
if (apiName.toLowerCase().includes('stock') && apiData.price) {
|
|
161
|
+
return `Stock: ${apiData.symbol || 'Unknown'}\nPrice: $${apiData.price}\nChange: ${apiData.change || '0'}%`;
|
|
162
|
+
}
|
|
163
|
+
// If it's an array, show first few items
|
|
164
|
+
if (Array.isArray(apiData)) {
|
|
165
|
+
const items = apiData.slice(0, 5);
|
|
166
|
+
return items.map((item, idx) => {
|
|
167
|
+
if (typeof item === 'string')
|
|
168
|
+
return `${idx + 1}. ${item}`;
|
|
169
|
+
if (typeof item === 'object') {
|
|
170
|
+
const keys = Object.keys(item).slice(0, 3);
|
|
171
|
+
return `${idx + 1}. ${keys.map(k => `${k}: ${item[k]}`).join(', ')}`;
|
|
172
|
+
}
|
|
173
|
+
return `${idx + 1}. ${String(item)}`;
|
|
174
|
+
}).join('\n') + (apiData.length > 5 ? `\n\n... and ${apiData.length - 5} more items` : '');
|
|
175
|
+
}
|
|
176
|
+
// If it's an object, show key fields
|
|
177
|
+
if (typeof apiData === 'object' && apiData !== null) {
|
|
178
|
+
const keys = Object.keys(apiData).slice(0, 5);
|
|
179
|
+
const relevant = keys.filter(k => {
|
|
180
|
+
const val = apiData[k];
|
|
181
|
+
return val !== null && val !== undefined &&
|
|
182
|
+
(typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean');
|
|
183
|
+
});
|
|
184
|
+
if (relevant.length > 0) {
|
|
185
|
+
return relevant.map(k => `${k}: ${apiData[k]}`).join('\n');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Final fallback to JSON
|
|
189
|
+
return JSON.stringify(apiData, null, 2);
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=data-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-extractor.js","sourceRoot":"","sources":["../../lib/agent/data-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Executor
|
|
3
|
+
* Agent logic to parse queries and call APIs using Gemini AI for interpretation
|
|
4
|
+
*/
|
|
5
|
+
import { Agent } from '../storage/agents';
|
|
6
|
+
export interface AgentResponse {
|
|
7
|
+
success: boolean;
|
|
8
|
+
message: string;
|
|
9
|
+
data?: any;
|
|
10
|
+
apiCalled?: string;
|
|
11
|
+
paymentHash?: string;
|
|
12
|
+
paymentAmount?: string;
|
|
13
|
+
error?: string;
|
|
14
|
+
llmUsed?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Execute agent query by calling appropriate API
|
|
18
|
+
* @param agent - The agent configuration
|
|
19
|
+
* @param userQuery - The user's query/message
|
|
20
|
+
* @param options - Execution options including LLM and API selection
|
|
21
|
+
* @param userPrivateKey - Optional user's private key for payment (required for public agents)
|
|
22
|
+
*/
|
|
23
|
+
export declare function executeAgentQuery(agent: Agent, userQuery: string, options?: {
|
|
24
|
+
llm?: string;
|
|
25
|
+
apiId?: string | null;
|
|
26
|
+
}, userPrivateKey?: string): Promise<AgentResponse>;
|
|
27
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../lib/agent/executor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAGD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IACR,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,EACD,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,aAAa,CAAC,CAyPxB"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Executor
|
|
3
|
+
* Agent logic to parse queries and call APIs using Gemini AI for interpretation
|
|
4
|
+
*/
|
|
5
|
+
import { x402axios } from '../x402-axios';
|
|
6
|
+
import { getAllApis } from '../storage/apis';
|
|
7
|
+
import { processQueryWithLLM } from './llm-chat';
|
|
8
|
+
import { extractDataWithLLM } from './data-extractor';
|
|
9
|
+
/**
|
|
10
|
+
* Execute agent query by calling appropriate API
|
|
11
|
+
* @param agent - The agent configuration
|
|
12
|
+
* @param userQuery - The user's query/message
|
|
13
|
+
* @param options - Execution options including LLM and API selection
|
|
14
|
+
* @param userPrivateKey - Optional user's private key for payment (required for public agents)
|
|
15
|
+
*/
|
|
16
|
+
export async function executeAgentQuery(agent, userQuery, options, userPrivateKey) {
|
|
17
|
+
try {
|
|
18
|
+
// Get available APIs for this agent
|
|
19
|
+
// Use relative URLs or detect from environment - will be resolved by x402axios
|
|
20
|
+
const allApis = getAllApis();
|
|
21
|
+
const availableApis = allApis.filter(api => agent.apiIds.includes(api.id));
|
|
22
|
+
if (availableApis.length === 0) {
|
|
23
|
+
return {
|
|
24
|
+
success: false,
|
|
25
|
+
message: 'This agent has no APIs configured. Please add APIs to the agent.',
|
|
26
|
+
error: 'NO_APIS_CONFIGURED',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// Process query with LLM or fallback
|
|
30
|
+
let llmResponse;
|
|
31
|
+
let llmUsed = 'keyword';
|
|
32
|
+
let selectedApi = null;
|
|
33
|
+
// Determine which model to use for LLM processing
|
|
34
|
+
let modelName = 'keyword';
|
|
35
|
+
if (options?.llm && options.llm !== 'keyword') {
|
|
36
|
+
// Check for GitHub Models
|
|
37
|
+
if (options.llm.startsWith('gpt-5') || options.llm.startsWith('grok-3') ||
|
|
38
|
+
options.llm.startsWith('gpt-4.1') || options.llm.startsWith('phi-4') ||
|
|
39
|
+
options.llm.startsWith('o4-mini')) {
|
|
40
|
+
modelName = options.llm;
|
|
41
|
+
llmUsed = options.llm === 'gpt-5-mini' ? 'GPT-5 Mini' :
|
|
42
|
+
options.llm === 'gpt-5-nano' ? 'GPT-5 Nano' :
|
|
43
|
+
options.llm === 'grok-3-mini' ? 'Grok 3 Mini' :
|
|
44
|
+
options.llm === 'gpt-4.1-mini' ? 'GPT-4.1 Mini' :
|
|
45
|
+
options.llm === 'gpt-4.1-nano' ? 'GPT-4.1 Nano' :
|
|
46
|
+
options.llm === 'phi-4-mini-reasoning' ? 'Phi-4 Mini Reasoning' :
|
|
47
|
+
options.llm === 'o4-mini' ? 'O4 Mini' :
|
|
48
|
+
options.llm;
|
|
49
|
+
}
|
|
50
|
+
else if (options.llm.startsWith('gemini')) {
|
|
51
|
+
const modelMap = {
|
|
52
|
+
'gemini-2.5-flash': 'gemini-2.0-flash-exp',
|
|
53
|
+
};
|
|
54
|
+
modelName = modelMap[options.llm] || 'gemini-2.0-flash-exp';
|
|
55
|
+
llmUsed = 'Gemini 2.5 Flash';
|
|
56
|
+
}
|
|
57
|
+
else if (options.llm === 'claude-sonnet-4') {
|
|
58
|
+
return {
|
|
59
|
+
success: false,
|
|
60
|
+
message: 'This LLM is not yet available. Please select an enabled LLM.',
|
|
61
|
+
error: 'LLM_NOT_AVAILABLE',
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Process query with LLM (unless specific API is manually selected)
|
|
66
|
+
if (!options?.apiId) {
|
|
67
|
+
llmResponse = await processQueryWithLLM(userQuery, availableApis, agent.name || 'Agent', modelName);
|
|
68
|
+
// Update llmUsed if fallback occurred
|
|
69
|
+
if (llmResponse?.actualModelUsed) {
|
|
70
|
+
if (llmResponse.actualModelUsed === 'gemini-2.5-flash') {
|
|
71
|
+
llmUsed = 'Gemini 2.5 Flash';
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// If LLM says no API call needed (greeting/casual), return conversational response
|
|
75
|
+
if (llmResponse && !llmResponse.shouldCallAPI) {
|
|
76
|
+
return {
|
|
77
|
+
success: true,
|
|
78
|
+
message: llmResponse.conversationalResponse || `Hello! I'm ${agent.name || 'your agent'}. How can I help you today?`,
|
|
79
|
+
llmUsed: options?.llm === 'keyword' ? undefined : llmUsed,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
// Find the API if LLM suggested one
|
|
83
|
+
if (llmResponse?.apiId) {
|
|
84
|
+
selectedApi = availableApis.find(api => api.id === llmResponse.apiId) || null;
|
|
85
|
+
}
|
|
86
|
+
// If no API found, return error
|
|
87
|
+
if (!selectedApi) {
|
|
88
|
+
return {
|
|
89
|
+
success: false,
|
|
90
|
+
message: llmResponse?.conversationalResponse || 'I couldn\'t determine which API to use for your query. Please try rephrasing or select a specific API.',
|
|
91
|
+
error: 'NO_MATCHING_API',
|
|
92
|
+
llmUsed: options?.llm === 'keyword' ? undefined : llmUsed,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
// Specific API manually selected - use fast keyword check for greetings (skip LLM call)
|
|
98
|
+
// We should never call APIs for greetings, even if manually selected
|
|
99
|
+
const lowerQuery = userQuery.toLowerCase().trim();
|
|
100
|
+
const greetings = ['hello', 'hi', 'hey', 'howdy', 'greetings', 'good morning', 'good afternoon', 'good evening'];
|
|
101
|
+
const casual = ['thanks', 'thank you', 'ok', 'okay', 'yes', 'no', 'sure', 'alright', 'cool', 'nice', 'how are you', 'what\'s up'];
|
|
102
|
+
if (greetings.some(g => lowerQuery === g || lowerQuery.startsWith(g + ' ')) ||
|
|
103
|
+
casual.some(c => lowerQuery === c || lowerQuery.startsWith(c + ' '))) {
|
|
104
|
+
return {
|
|
105
|
+
success: true,
|
|
106
|
+
message: `Hello! I'm ${agent.name || 'your agent'}. How can I help you today?`,
|
|
107
|
+
llmUsed: undefined, // No LLM used for greeting check
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
selectedApi = availableApis.find(api => api.id === options.apiId) || null;
|
|
111
|
+
if (!selectedApi) {
|
|
112
|
+
return {
|
|
113
|
+
success: false,
|
|
114
|
+
message: `The requested API "${options.apiId}" is not available for this agent.`,
|
|
115
|
+
error: 'API_NOT_AVAILABLE',
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Determine which wallet to use for payment:
|
|
120
|
+
// - If userPrivateKey is provided: user is chatting with someone else's public agent -> use user's wallet
|
|
121
|
+
// - Otherwise: user owns the agent -> use agent's wallet
|
|
122
|
+
let paymentPrivateKey;
|
|
123
|
+
if (userPrivateKey) {
|
|
124
|
+
// User chatting with public agent owned by someone else - use user's wallet
|
|
125
|
+
paymentPrivateKey = userPrivateKey;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
// User owns the agent (or it's private) - use agent's wallet
|
|
129
|
+
paymentPrivateKey = agent.privateKey;
|
|
130
|
+
}
|
|
131
|
+
// Call the API using x402axios with appropriate private key
|
|
132
|
+
try {
|
|
133
|
+
const config = {
|
|
134
|
+
privateKey: paymentPrivateKey,
|
|
135
|
+
};
|
|
136
|
+
let response;
|
|
137
|
+
if (selectedApi.method === 'GET') {
|
|
138
|
+
response = await x402axios.get(selectedApi.url, config);
|
|
139
|
+
}
|
|
140
|
+
else if (selectedApi.method === 'POST') {
|
|
141
|
+
// For POST, you might want to extract data from query
|
|
142
|
+
// For now, just send empty body or query params
|
|
143
|
+
response = await x402axios.post(selectedApi.url, {}, config);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
response = await x402axios.get(selectedApi.url, config);
|
|
147
|
+
}
|
|
148
|
+
// Extract payment info if available
|
|
149
|
+
const paymentHash = response.paymentInfo?.transactionHash;
|
|
150
|
+
const paymentAmount = response.paymentInfo?.amount; // Amount in Octas
|
|
151
|
+
console.log('[Agent Executor] Payment info:', {
|
|
152
|
+
hasPaymentInfo: !!response.paymentInfo,
|
|
153
|
+
paymentHash,
|
|
154
|
+
paymentAmount,
|
|
155
|
+
fullPaymentInfo: response.paymentInfo
|
|
156
|
+
});
|
|
157
|
+
// Use LLM to extract and format specific data from API response
|
|
158
|
+
let finalMessage;
|
|
159
|
+
let extractedData = response.data;
|
|
160
|
+
if (options?.llm && options.llm !== 'keyword') {
|
|
161
|
+
// Determine the model name for data extraction
|
|
162
|
+
let extractionModelName = 'keyword';
|
|
163
|
+
if (options.llm.startsWith('gemini')) {
|
|
164
|
+
// Map LLM names for data extraction
|
|
165
|
+
const modelMap = {
|
|
166
|
+
'gemini-2.5-flash': 'gemini-2.0-flash-exp',
|
|
167
|
+
};
|
|
168
|
+
extractionModelName = modelMap[options.llm] || 'gemini-2.0-flash-exp';
|
|
169
|
+
}
|
|
170
|
+
else if (options.llm.startsWith('gpt-5') || options.llm.startsWith('grok-3') ||
|
|
171
|
+
options.llm.startsWith('gpt-4.1') || options.llm.startsWith('phi-4') ||
|
|
172
|
+
options.llm.startsWith('o4-mini')) {
|
|
173
|
+
// Use GitHub Models directly
|
|
174
|
+
extractionModelName = options.llm;
|
|
175
|
+
}
|
|
176
|
+
// Extract specific data based on user query
|
|
177
|
+
const extraction = await extractDataWithLLM(userQuery, response.data, selectedApi.name, extractionModelName);
|
|
178
|
+
finalMessage = extraction.formattedResponse;
|
|
179
|
+
extractedData = extraction.extractedData;
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
// Fallback: use conversational response or format data
|
|
183
|
+
finalMessage = llmResponse?.conversationalResponse ||
|
|
184
|
+
`Successfully retrieved data from ${selectedApi.name}`;
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
success: true,
|
|
188
|
+
message: finalMessage,
|
|
189
|
+
data: extractedData,
|
|
190
|
+
apiCalled: selectedApi.name,
|
|
191
|
+
paymentHash,
|
|
192
|
+
paymentAmount, // Amount in Octas
|
|
193
|
+
llmUsed: options?.llm === 'keyword' ? undefined : llmUsed,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
catch (apiError) {
|
|
197
|
+
// Handle x402 payment errors
|
|
198
|
+
if (apiError.response?.status === 402) {
|
|
199
|
+
return {
|
|
200
|
+
success: false,
|
|
201
|
+
message: 'Payment required but could not be processed. Please ensure the agent has sufficient funds.',
|
|
202
|
+
error: 'PAYMENT_REQUIRED',
|
|
203
|
+
apiCalled: selectedApi.name,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
if (apiError.message?.includes('funds') || apiError.message?.includes('balance')) {
|
|
207
|
+
return {
|
|
208
|
+
success: false,
|
|
209
|
+
message: 'Insufficient funds. Please add more APT to this agent\'s wallet.',
|
|
210
|
+
error: 'INSUFFICIENT_FUNDS',
|
|
211
|
+
apiCalled: selectedApi.name,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
// Handle network/fetch errors
|
|
215
|
+
const errorMessage = apiError.message || apiError.toString() || 'Unknown error';
|
|
216
|
+
const isNetworkError = errorMessage.includes('fetch failed') ||
|
|
217
|
+
errorMessage.includes('network') ||
|
|
218
|
+
errorMessage.includes('Failed to fetch');
|
|
219
|
+
if (isNetworkError) {
|
|
220
|
+
return {
|
|
221
|
+
success: false,
|
|
222
|
+
message: `Unable to reach ${selectedApi.name}. The API may be unavailable or the URL is incorrect.`,
|
|
223
|
+
error: 'NETWORK_ERROR',
|
|
224
|
+
apiCalled: selectedApi.name,
|
|
225
|
+
llmUsed: options?.llm === 'keyword' ? undefined : llmUsed,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
return {
|
|
229
|
+
success: false,
|
|
230
|
+
message: `Error calling ${selectedApi.name}: ${errorMessage}`,
|
|
231
|
+
error: 'API_ERROR',
|
|
232
|
+
apiCalled: selectedApi.name,
|
|
233
|
+
llmUsed: options?.llm === 'keyword' ? undefined : llmUsed,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
return {
|
|
239
|
+
success: false,
|
|
240
|
+
message: `An error occurred: ${error.message || 'Unknown error'}`,
|
|
241
|
+
error: 'EXECUTION_ERROR',
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../lib/agent/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Query Interpreter
|
|
3
|
+
* Uses Google Gemini or GitHub Models to understand user queries and determine which API to call
|
|
4
|
+
*/
|
|
5
|
+
import { ApiMetadata } from '../storage/apis';
|
|
6
|
+
/**
|
|
7
|
+
* Use LLM (Gemini or GitHub Models) to determine which API to call based on user query
|
|
8
|
+
*/
|
|
9
|
+
export declare function interpretQueryWithGemini(userQuery: string, availableApis: ApiMetadata[], modelName?: string): Promise<ApiMetadata | null>;
|
|
10
|
+
//# sourceMappingURL=gemini-interpreter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-interpreter.d.ts","sourceRoot":"","sources":["../../lib/agent/gemini-interpreter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAc,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAS1D;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,WAAW,EAAE,EAC5B,SAAS,GAAE,MAA2B,GACrC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA8D7B"}
|