aptos-x402 1.0.2 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/README.md +83 -6
  2. package/dist/agent/data-extractor.d.ts +13 -0
  3. package/dist/agent/data-extractor.d.ts.map +1 -0
  4. package/dist/agent/data-extractor.js +191 -0
  5. package/dist/agent/data-extractor.js.map +1 -0
  6. package/dist/agent/executor.d.ts +27 -0
  7. package/dist/agent/executor.d.ts.map +1 -0
  8. package/dist/agent/executor.js +245 -0
  9. package/dist/agent/executor.js.map +1 -0
  10. package/dist/agent/gemini-interpreter.d.ts +10 -0
  11. package/dist/agent/gemini-interpreter.d.ts.map +1 -0
  12. package/dist/agent/gemini-interpreter.js +142 -0
  13. package/dist/agent/gemini-interpreter.js.map +1 -0
  14. package/dist/agent/github-models.d.ts +30 -0
  15. package/dist/agent/github-models.d.ts.map +1 -0
  16. package/dist/agent/github-models.js +114 -0
  17. package/dist/agent/github-models.js.map +1 -0
  18. package/dist/agent/llm-chat.d.ts +16 -0
  19. package/dist/agent/llm-chat.d.ts.map +1 -0
  20. package/dist/agent/llm-chat.js +181 -0
  21. package/dist/agent/llm-chat.js.map +1 -0
  22. package/dist/agent/wallet.d.ts +32 -0
  23. package/dist/agent/wallet.d.ts.map +1 -0
  24. package/dist/agent/wallet.js +92 -0
  25. package/dist/agent/wallet.js.map +1 -0
  26. package/dist/arc8004/identity/agent-card.d.ts +66 -0
  27. package/dist/arc8004/identity/agent-card.d.ts.map +1 -0
  28. package/dist/arc8004/identity/agent-card.js +141 -0
  29. package/dist/arc8004/identity/agent-card.js.map +1 -0
  30. package/dist/arc8004/identity/index.d.ts +7 -0
  31. package/dist/arc8004/identity/index.d.ts.map +1 -0
  32. package/dist/arc8004/identity/index.js +7 -0
  33. package/dist/arc8004/identity/index.js.map +1 -0
  34. package/dist/arc8004/identity/registry.d.ts +73 -0
  35. package/dist/arc8004/identity/registry.d.ts.map +1 -0
  36. package/dist/arc8004/identity/registry.js +447 -0
  37. package/dist/arc8004/identity/registry.js.map +1 -0
  38. package/dist/arc8004/index.d.ts +21 -0
  39. package/dist/arc8004/index.d.ts.map +1 -0
  40. package/dist/arc8004/index.js +26 -0
  41. package/dist/arc8004/index.js.map +1 -0
  42. package/dist/arc8004/reputation/index.d.ts +7 -0
  43. package/dist/arc8004/reputation/index.d.ts.map +1 -0
  44. package/dist/arc8004/reputation/index.js +7 -0
  45. package/dist/arc8004/reputation/index.js.map +1 -0
  46. package/dist/arc8004/reputation/registry.d.ts +60 -0
  47. package/dist/arc8004/reputation/registry.d.ts.map +1 -0
  48. package/dist/arc8004/reputation/registry.js +373 -0
  49. package/dist/arc8004/reputation/registry.js.map +1 -0
  50. package/dist/arc8004/reputation/scoring.d.ts +60 -0
  51. package/dist/arc8004/reputation/scoring.d.ts.map +1 -0
  52. package/dist/arc8004/reputation/scoring.js +130 -0
  53. package/dist/arc8004/reputation/scoring.js.map +1 -0
  54. package/dist/arc8004/types.d.ts +240 -0
  55. package/dist/arc8004/types.d.ts.map +1 -0
  56. package/dist/arc8004/types.js +36 -0
  57. package/dist/arc8004/types.js.map +1 -0
  58. package/dist/arc8004/validation/index.d.ts +6 -0
  59. package/dist/arc8004/validation/index.d.ts.map +1 -0
  60. package/dist/arc8004/validation/index.js +6 -0
  61. package/dist/arc8004/validation/index.js.map +1 -0
  62. package/dist/arc8004/validation/registry.d.ts +72 -0
  63. package/dist/arc8004/validation/registry.d.ts.map +1 -0
  64. package/dist/arc8004/validation/registry.js +268 -0
  65. package/dist/arc8004/validation/registry.js.map +1 -0
  66. package/dist/db/index.d.ts +12 -0
  67. package/dist/db/index.d.ts.map +1 -0
  68. package/dist/db/index.js +33 -0
  69. package/dist/db/index.js.map +1 -0
  70. package/dist/db/schema.d.ts +2086 -0
  71. package/dist/db/schema.d.ts.map +1 -0
  72. package/dist/db/schema.js +220 -0
  73. package/dist/db/schema.js.map +1 -0
  74. package/dist/index.d.ts +9 -0
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +18 -0
  77. package/dist/index.js.map +1 -1
  78. package/dist/services/agent-summary.d.ts +24 -0
  79. package/dist/services/agent-summary.d.ts.map +1 -0
  80. package/dist/services/agent-summary.js +90 -0
  81. package/dist/services/agent-summary.js.map +1 -0
  82. package/dist/storage/agents.d.ts +36 -0
  83. package/dist/storage/agents.d.ts.map +1 -0
  84. package/dist/storage/agents.js +111 -0
  85. package/dist/storage/agents.js.map +1 -0
  86. package/dist/storage/apis.d.ts +20 -0
  87. package/dist/storage/apis.d.ts.map +1 -0
  88. package/dist/storage/apis.js +131 -0
  89. package/dist/storage/apis.js.map +1 -0
  90. package/dist/storage/chats.d.ts +44 -0
  91. package/dist/storage/chats.d.ts.map +1 -0
  92. package/dist/storage/chats.js +103 -0
  93. package/dist/storage/chats.js.map +1 -0
  94. package/dist/storage/user-wallets.d.ts +20 -0
  95. package/dist/storage/user-wallets.d.ts.map +1 -0
  96. package/dist/storage/user-wallets.js +52 -0
  97. package/dist/storage/user-wallets.js.map +1 -0
  98. package/dist/utils/agent-symbols.d.ts +20 -0
  99. package/dist/utils/agent-symbols.d.ts.map +1 -0
  100. package/dist/utils/agent-symbols.js +86 -0
  101. package/dist/utils/agent-symbols.js.map +1 -0
  102. package/dist/utils/db-retry.d.ts +9 -0
  103. package/dist/utils/db-retry.d.ts.map +1 -0
  104. package/dist/utils/db-retry.js +25 -0
  105. package/dist/utils/db-retry.js.map +1 -0
  106. package/dist/utils/server-user-id.d.ts +2 -0
  107. package/dist/utils/server-user-id.d.ts.map +1 -0
  108. package/dist/utils/server-user-id.js +9 -0
  109. package/dist/utils/server-user-id.js.map +1 -0
  110. package/dist/utils/user-id.d.ts +21 -0
  111. package/dist/utils/user-id.d.ts.map +1 -0
  112. package/dist/utils/user-id.js +102 -0
  113. package/dist/utils/user-id.js.map +1 -0
  114. package/dist/x402-axios.d.ts.map +1 -1
  115. package/dist/x402-axios.js +81 -4
  116. package/dist/x402-axios.js.map +1 -1
  117. package/dist/x402-middleware.d.ts +1 -1
  118. package/dist/x402-middleware.d.ts.map +1 -1
  119. package/package.json +18 -2
  120. package/dist/server/index.d.ts +0 -8
  121. package/dist/server/index.d.ts.map +0 -1
  122. package/dist/server/index.js +0 -8
  123. package/dist/server/index.js.map +0 -1
  124. package/dist/server/next.d.ts +0 -44
  125. package/dist/server/next.d.ts.map +0 -1
  126. package/dist/server/next.js +0 -210
  127. package/dist/server/next.js.map +0 -1
  128. package/dist/types/config.d.ts +0 -43
  129. package/dist/types/config.d.ts.map +0 -1
  130. package/dist/types/config.js +0 -6
  131. package/dist/types/config.js.map +0 -1
  132. package/dist/types/index.d.ts +0 -9
  133. package/dist/types/index.d.ts.map +0 -1
  134. package/dist/types/index.js +0 -7
  135. package/dist/types/index.js.map +0 -1
  136. package/dist/types/protocol.d.ts +0 -119
  137. package/dist/types/protocol.d.ts.map +0 -1
  138. package/dist/types/protocol.js +0 -12
  139. package/dist/types/protocol.js.map +0 -1
  140. package/dist/x402-client.d.ts +0 -56
  141. package/dist/x402-client.d.ts.map +0 -1
  142. package/dist/x402-client.js +0 -209
  143. package/dist/x402-client.js.map +0 -1
  144. package/dist/x402-fetch.d.ts +0 -59
  145. package/dist/x402-fetch.d.ts.map +0 -1
  146. package/dist/x402-fetch.js +0 -167
  147. package/dist/x402-fetch.js.map +0 -1
  148. package/dist/x402-request.d.ts +0 -57
  149. package/dist/x402-request.d.ts.map +0 -1
  150. package/dist/x402-request.js +0 -167
  151. package/dist/x402-request.js.map +0 -1
package/README.md CHANGED
@@ -20,6 +20,11 @@
20
20
 
21
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
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
+
23
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.
24
29
 
25
30
  <!-- ## Key Features
@@ -444,6 +449,78 @@ import type {
444
449
 
445
450
  ---
446
451
 
452
+ ## 🛡️ ARC-8004: Agent Trust Layer
453
+
454
+ ARC-8004 provides identity, reputation, and validation for AI agents on Aptos. It integrates with x402 payments to build trust signals from paid interactions.
455
+
456
+ ### Features
457
+
458
+ | Feature | Description |
459
+ |---------|-------------|
460
+ | **Identity Registry** | Agent Cards with metadata, capabilities, and verification status |
461
+ | **Reputation Registry** | Trust scores based on feedback from interactions |
462
+ | **Validation Registry** | Task completion verification before payments |
463
+
464
+ ### Quick Start
465
+
466
+ ```typescript
467
+ import {
468
+ IdentityRegistry,
469
+ ReputationRegistry,
470
+ createAgentCard,
471
+ getTrustLevelLabel
472
+ } from 'aptos-x402';
473
+
474
+ // Register agent identity
475
+ const identity = new IdentityRegistry();
476
+ await identity.registerIdentity({
477
+ agentId: 'my-agent',
478
+ agentCard: createAgentCard({
479
+ name: 'WeatherBot',
480
+ description: 'Provides weather data',
481
+ ownerAddress: '0x...',
482
+ ownerPublicKey: '0x...',
483
+ capabilities: ['payment', 'data-fetch'],
484
+ }),
485
+ });
486
+
487
+ // Submit feedback after payment
488
+ const reputation = new ReputationRegistry();
489
+ await reputation.submitFeedback({
490
+ agentId: 'my-agent',
491
+ clientAddress: '0xclient',
492
+ overallScore: 5,
493
+ paymentHash: '0xPAYMENT_TX',
494
+ });
495
+
496
+ // Get trust score
497
+ const score = await reputation.getReputation('my-agent');
498
+ console.log(getTrustLevelLabel(score.trustLevel)); // "Excellent"
499
+ ```
500
+
501
+ ### Configuration
502
+
503
+ ```bash
504
+ # .env.local
505
+ ARC8004_AUTO_REGISTER=true # Auto-register agents on creation
506
+ ARC8004_ONCHAIN_ENABLED=false # DB-only mode (recommended)
507
+ ```
508
+
509
+ For on-chain NFT minting (optional):
510
+ ```bash
511
+ ARC8004_MODULE_ADDRESS=0xa4d7e1f47887dc6b84743297164fdd63deaa872329f8617be1d4c87375d39323
512
+ ARC8004_ONCHAIN_ENABLED=true
513
+ ```
514
+
515
+ ### Documentation
516
+
517
+ - [ARC-8004 Integration Guide](./docs/guides/arc8004.md) - Full SDK usage
518
+ - [ARC-8004 Core Concepts](./docs/core-concepts/arc8004.md) - Architecture overview
519
+ - [ARC-8004 Use Cases](./docs/guides/arc8004-use-cases.md) - Practical examples
520
+ - [Self-Hosting Guide](./docs/guides/arc8004-self-hosting.md) - Deploy your own contracts
521
+
522
+ ---
523
+
447
524
  ## Advanced Usage
448
525
 
449
526
  ### Manual Payment Flow
@@ -535,8 +612,8 @@ Try the complete payment flow: **[aptos-x402.vercel.app](https://aptos-x402.verc
535
612
  ### CLI Demo
536
613
 
537
614
  ```bash
538
- git clone https://github.com/adipundir/aptos-x402
539
- cd aptos-x402
615
+ git clone https://github.com/adipundir/Aptos-x402
616
+ cd Aptos-x402
540
617
  npm install
541
618
  npm run dev # In one terminal
542
619
 
@@ -685,13 +762,13 @@ APTOS_PRIVATE_KEY=0x... npx tsx scripts/benchmark-payment-flow.ts
685
762
  - [Performance Guide](./PERFORMANCE_OPTIMIZATIONS.md)
686
763
 
687
764
  ### Links
688
- - [GitHub Repository](https://github.com/adipundir/aptos-x402)
765
+ - [GitHub Repository](https://github.com/adipundir/Aptos-x402)
689
766
  - [NPM Package](https://www.npmjs.com/package/aptos-x402)
690
767
  - [Aptos Developer Docs](https://aptos.dev)
691
768
 
692
769
  ### Support
693
- - [Report Issues](https://github.com/adipundir/aptos-x402/issues)
694
- - [Discussions](https://github.com/adipundir/aptos-x402/discussions)
770
+ - [Report Issues](https://github.com/adipundir/Aptos-x402/issues)
771
+ - [Discussions](https://github.com/adipundir/Aptos-x402/discussions)
695
772
  - [Twitter: @aptos-x402](https://x.com/aptosx402)
696
773
 
697
774
  ## Contributing
@@ -704,7 +781,7 @@ Contributions are welcome! Please feel free to submit issues, feature requests,
704
781
 
705
782
  **Built for the Aptos Ecosystem**
706
783
 
707
- [Documentation](https://aptos-x402.vercel.app) • [GitHub](https://github.com/adipundir/aptos-x402) • [NPM](https://www.npmjs.com/package/aptos-x402)
784
+ [Documentation](https://aptos-x402.vercel.app) • [GitHub](https://github.com/adipundir/Aptos-x402) • [NPM](https://www.npmjs.com/package/aptos-x402)
708
785
 
709
786
  </div>
710
787
 
@@ -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"}