memeputer 1.0.2 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/ask.d.ts.map +1 -1
- package/dist/commands/ask.js +76 -3
- package/dist/commands/ask.js.map +1 -1
- package/dist/commands/command.d.ts +3 -0
- package/dist/commands/command.d.ts.map +1 -0
- package/dist/commands/command.js +147 -0
- package/dist/commands/command.js.map +1 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +23 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +67 -4
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/x402Client.d.ts +3 -3
- package/dist/lib/x402Client.d.ts.map +1 -1
- package/dist/lib/x402Client.js +48 -24
- package/dist/lib/x402Client.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,wBAAgB,gBAAgB,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,wBAAgB,gBAAgB,IAAI,OAAO,CAoM1C"}
|
package/dist/commands/ask.js
CHANGED
|
@@ -14,6 +14,7 @@ export function createAskCommand() {
|
|
|
14
14
|
.option("-w, --wallet <path>", "Path to Solana wallet keypair")
|
|
15
15
|
.option("--json", "Output in JSON format")
|
|
16
16
|
.option("-q, --quiet", "Suppress progress output")
|
|
17
|
+
.option("--download <path>", "Download media to specified path")
|
|
17
18
|
.action(async (agentName, message, options) => {
|
|
18
19
|
try {
|
|
19
20
|
const config = loadConfig();
|
|
@@ -47,6 +48,72 @@ export function createAskCommand() {
|
|
|
47
48
|
if (spinner) {
|
|
48
49
|
spinner.succeed(`Response received from ${formatAgent(agentName)}`);
|
|
49
50
|
}
|
|
51
|
+
// Handle async operations - automatically wait if statusUrl is present
|
|
52
|
+
if (result.statusUrl) {
|
|
53
|
+
spinner = quiet
|
|
54
|
+
? null
|
|
55
|
+
: ora("Waiting for operation to complete...").start();
|
|
56
|
+
const statusResult = await apiClient.pollStatus(result.statusUrl, {
|
|
57
|
+
intervalMs: 5000,
|
|
58
|
+
maxAttempts: 60,
|
|
59
|
+
onProgress: (attempt, status) => {
|
|
60
|
+
if (spinner && attempt > 1) {
|
|
61
|
+
const elapsed = attempt * 5;
|
|
62
|
+
spinner.text = `Waiting... (${elapsed}s, status: ${status.status})`;
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
if (spinner) {
|
|
67
|
+
if (statusResult.status === "completed") {
|
|
68
|
+
spinner.succeed("Operation completed!");
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
spinner.fail(`Operation ${statusResult.status}: ${statusResult.error || "Unknown error"}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Update result with completed data
|
|
75
|
+
if (statusResult.imageUrl) {
|
|
76
|
+
result.imageUrl = statusResult.imageUrl;
|
|
77
|
+
}
|
|
78
|
+
if (statusResult.mediaUrl) {
|
|
79
|
+
result.mediaUrl = statusResult.mediaUrl;
|
|
80
|
+
}
|
|
81
|
+
if (statusResult.message) {
|
|
82
|
+
result.response = statusResult.message;
|
|
83
|
+
}
|
|
84
|
+
// Handle download if requested
|
|
85
|
+
if (options.download && (result.imageUrl || result.mediaUrl)) {
|
|
86
|
+
const downloadUrl = result.imageUrl || result.mediaUrl;
|
|
87
|
+
// Generate unique filename with timestamp if downloading to avoid overwriting
|
|
88
|
+
const path = await import("path");
|
|
89
|
+
const downloadPath = options.download;
|
|
90
|
+
const ext = path.extname(downloadPath);
|
|
91
|
+
const base = path.basename(downloadPath, ext);
|
|
92
|
+
const dir = path.dirname(downloadPath);
|
|
93
|
+
const timestamp = new Date()
|
|
94
|
+
.toISOString()
|
|
95
|
+
.replace(/[:.]/g, "-")
|
|
96
|
+
.slice(0, -5);
|
|
97
|
+
const uniquePath = path.join(dir, `${base}-${timestamp}${ext}`);
|
|
98
|
+
spinner = quiet ? null : ora(`Downloading...`).start();
|
|
99
|
+
try {
|
|
100
|
+
const axios = (await import("axios")).default;
|
|
101
|
+
const fs = (await import("fs")).default;
|
|
102
|
+
const response = await axios.get(downloadUrl, {
|
|
103
|
+
responseType: "arraybuffer",
|
|
104
|
+
});
|
|
105
|
+
fs.writeFileSync(uniquePath, response.data);
|
|
106
|
+
if (spinner) {
|
|
107
|
+
spinner.succeed(`Downloaded to ${uniquePath}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (downloadError) {
|
|
111
|
+
if (spinner) {
|
|
112
|
+
spinner.fail(`Download failed: ${downloadError.message}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
50
117
|
// Output results
|
|
51
118
|
if (options.json) {
|
|
52
119
|
console.log(JSON.stringify({
|
|
@@ -54,6 +121,9 @@ export function createAskCommand() {
|
|
|
54
121
|
response: result.response,
|
|
55
122
|
format: result.format,
|
|
56
123
|
mediaUrl: result.mediaUrl,
|
|
124
|
+
imageUrl: result.imageUrl,
|
|
125
|
+
statusUrl: result.statusUrl,
|
|
126
|
+
etaSeconds: result.etaSeconds,
|
|
57
127
|
signature: result.transactionSignature,
|
|
58
128
|
agent: agentName,
|
|
59
129
|
}, null, 2));
|
|
@@ -64,11 +134,14 @@ export function createAskCommand() {
|
|
|
64
134
|
console.log();
|
|
65
135
|
console.log(chalk.white(result.response));
|
|
66
136
|
console.log();
|
|
67
|
-
if (result.
|
|
68
|
-
console.log(formatInfo(
|
|
137
|
+
if (result.imageUrl) {
|
|
138
|
+
console.log(formatInfo(`🖼️ Image: ${chalk.underline(result.imageUrl)}`));
|
|
139
|
+
}
|
|
140
|
+
if (result.mediaUrl && !result.imageUrl) {
|
|
141
|
+
console.log(formatInfo(`📎 Media: ${chalk.underline(result.mediaUrl)}`));
|
|
69
142
|
}
|
|
70
143
|
if (result.transactionSignature) {
|
|
71
|
-
console.log(formatInfo(
|
|
144
|
+
console.log(formatInfo(`💳 Transaction: ${chalk.underline(`https://solscan.io/tx/${result.transactionSignature}`)}`));
|
|
72
145
|
console.log(chalk.green("💚 You paid $0 in gas fees (PayAI Facilitator covered it)!"));
|
|
73
146
|
}
|
|
74
147
|
console.log();
|
package/dist/commands/ask.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/commands/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,cAAc,SAmMxB,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { Connection } from "@solana/web3.js";
|
|
3
|
+
import ora from "ora";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import fs from "fs";
|
|
6
|
+
import path from "path";
|
|
7
|
+
import { AgentsApiClient } from "../lib/api.js";
|
|
8
|
+
import { loadConfig, getDefaultWalletPath } from "../lib/config.js";
|
|
9
|
+
import { loadWallet, formatPublicKey } from "../lib/wallet.js";
|
|
10
|
+
export const commandCommand = new Command("command")
|
|
11
|
+
.description("Execute a custom command on an agent")
|
|
12
|
+
.argument("<agent>", "Agent username or ID")
|
|
13
|
+
.argument("<command>", "Command name (without the / prefix)")
|
|
14
|
+
.argument("[args...]", "Command arguments")
|
|
15
|
+
.option("-w, --wallet <path>", "Path to Solana wallet keypair")
|
|
16
|
+
.option("-d, --download <path>", "Download media to specified path (for async commands)")
|
|
17
|
+
.option("--json", "Output in JSON format")
|
|
18
|
+
.option("-q, --quiet", "Suppress progress output")
|
|
19
|
+
.action(async (agentName, command, args, options) => {
|
|
20
|
+
const quiet = options.quiet || options.json;
|
|
21
|
+
let spinner = null;
|
|
22
|
+
try {
|
|
23
|
+
const config = loadConfig();
|
|
24
|
+
const apiUrl = config.apiUrl;
|
|
25
|
+
const rpcUrl = config.rpcUrl;
|
|
26
|
+
const walletPath = options.wallet || config.wallet || getDefaultWalletPath();
|
|
27
|
+
if (!walletPath) {
|
|
28
|
+
console.error(chalk.red("No wallet specified. Use --wallet or set MEMEPUTER_WALLET"));
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
const agentId = agentName.toLowerCase();
|
|
32
|
+
// Load wallet
|
|
33
|
+
spinner = quiet ? null : ora("Loading wallet...").start();
|
|
34
|
+
const wallet = loadWallet(walletPath);
|
|
35
|
+
if (spinner) {
|
|
36
|
+
spinner.succeed(`Wallet loaded: ${formatPublicKey(wallet.publicKey.toBase58())}`);
|
|
37
|
+
}
|
|
38
|
+
// Connect to Solana
|
|
39
|
+
spinner = quiet ? null : ora("Connecting to Solana...").start();
|
|
40
|
+
const connection = new Connection(rpcUrl, "confirmed");
|
|
41
|
+
if (spinner) {
|
|
42
|
+
spinner.succeed("Connected to Solana");
|
|
43
|
+
}
|
|
44
|
+
// Build the message with slash prefix
|
|
45
|
+
const commandArgs = args.join(" ");
|
|
46
|
+
const message = commandArgs
|
|
47
|
+
? `/${command} ${commandArgs}`
|
|
48
|
+
: `/${command}`;
|
|
49
|
+
spinner = quiet
|
|
50
|
+
? null
|
|
51
|
+
: ora(`Executing /${command} on ${agentId}...`).start();
|
|
52
|
+
const apiClient = new AgentsApiClient(apiUrl);
|
|
53
|
+
const result = await apiClient.interact(agentId, message, wallet, connection);
|
|
54
|
+
// Check if this is an async operation
|
|
55
|
+
if (result.statusUrl) {
|
|
56
|
+
if (spinner) {
|
|
57
|
+
spinner.text = `Operation started. Waiting for completion...`;
|
|
58
|
+
}
|
|
59
|
+
// Poll for completion
|
|
60
|
+
const finalResult = await apiClient.pollStatus(result.statusUrl, {
|
|
61
|
+
intervalMs: 5000,
|
|
62
|
+
maxAttempts: 60,
|
|
63
|
+
onProgress: (attempt, status) => {
|
|
64
|
+
if (spinner && attempt > 1) {
|
|
65
|
+
const elapsed = attempt * 5;
|
|
66
|
+
spinner.text = `Waiting... (${elapsed}s, status: ${status.status})`;
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
if (spinner) {
|
|
71
|
+
if (finalResult.status === "completed") {
|
|
72
|
+
spinner.succeed("Operation completed!");
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
spinner.fail(`Operation ${finalResult.status}: ${finalResult.error || "Unknown error"}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Update result with final data
|
|
79
|
+
result.response = finalResult.message || result.response;
|
|
80
|
+
result.imageUrl = finalResult.imageUrl || result.imageUrl;
|
|
81
|
+
result.mediaUrl = finalResult.mediaUrl || result.mediaUrl;
|
|
82
|
+
// Download if requested
|
|
83
|
+
if (options.download && (result.imageUrl || result.mediaUrl)) {
|
|
84
|
+
spinner = quiet ? null : ora("Downloading media...").start();
|
|
85
|
+
const mediaUrl = result.imageUrl || result.mediaUrl;
|
|
86
|
+
const response = await fetch(mediaUrl);
|
|
87
|
+
const buffer = await response.arrayBuffer();
|
|
88
|
+
// Add timestamp to filename to prevent overwriting
|
|
89
|
+
const timestamp = new Date()
|
|
90
|
+
.toISOString()
|
|
91
|
+
.replace(/[:.]/g, "-")
|
|
92
|
+
.slice(0, -5);
|
|
93
|
+
const ext = path.extname(mediaUrl) || ".png";
|
|
94
|
+
const basename = path.basename(options.download, ext);
|
|
95
|
+
const dirname = path.dirname(options.download);
|
|
96
|
+
const timestampedPath = path.join(dirname, `${basename}-${timestamp}${ext}`);
|
|
97
|
+
fs.writeFileSync(timestampedPath, Buffer.from(buffer));
|
|
98
|
+
if (spinner) {
|
|
99
|
+
spinner.succeed(chalk.green(`✓ Media downloaded to: ${timestampedPath}`));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else if (spinner) {
|
|
104
|
+
spinner.succeed(chalk.green("✓ Command executed"));
|
|
105
|
+
}
|
|
106
|
+
// Display result
|
|
107
|
+
if (!quiet) {
|
|
108
|
+
console.log("");
|
|
109
|
+
console.log(chalk.bold("Response:"));
|
|
110
|
+
console.log(result.response);
|
|
111
|
+
if (result.imageUrl) {
|
|
112
|
+
console.log("");
|
|
113
|
+
console.log(chalk.blue(`🖼️ Image: ${result.imageUrl}`));
|
|
114
|
+
}
|
|
115
|
+
if (result.mediaUrl) {
|
|
116
|
+
console.log("");
|
|
117
|
+
console.log(chalk.blue(`📁 Media: ${result.mediaUrl}`));
|
|
118
|
+
}
|
|
119
|
+
if (result.transactionSignature) {
|
|
120
|
+
console.log("");
|
|
121
|
+
console.log(chalk.gray(`Transaction: ${result.transactionSignature}`));
|
|
122
|
+
}
|
|
123
|
+
if (result.statusUrl && !options.download) {
|
|
124
|
+
console.log("");
|
|
125
|
+
console.log(chalk.dim(`Status URL: ${result.statusUrl}`));
|
|
126
|
+
}
|
|
127
|
+
console.log("");
|
|
128
|
+
}
|
|
129
|
+
else if (options.json) {
|
|
130
|
+
console.log(JSON.stringify(result, null, 2));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (spinner) {
|
|
135
|
+
spinner.fail(chalk.red("✗ Command failed"));
|
|
136
|
+
}
|
|
137
|
+
if (!quiet) {
|
|
138
|
+
console.error("");
|
|
139
|
+
console.error(chalk.red("Error:"), error.message);
|
|
140
|
+
if (error.response?.data) {
|
|
141
|
+
console.error(chalk.gray(JSON.stringify(error.response.data, null, 2)));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/commands/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,GAAY,MAAM,KAAK,CAAC;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAqB,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE/D,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,sCAAsC,CAAC;KACnD,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;KAC3C,QAAQ,CAAC,WAAW,EAAE,qCAAqC,CAAC;KAC5D,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;KAC1C,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,CAAC;KAC9D,MAAM,CACL,uBAAuB,EACvB,uDAAuD,CACxD;KACA,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;KACjD,MAAM,CACL,KAAK,EACH,SAAiB,EACjB,OAAe,EACf,IAAc,EACd,OAKC,EACD,EAAE;IACF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAC5C,IAAI,OAAO,GAAe,IAAI,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAO,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAO,CAAC;QAC9B,MAAM,UAAU,GACd,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,oBAAoB,EAAE,CAAC;QAE5D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,2DAA2D,CAC5D,CACF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QAExC,cAAc;QACd,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,OAAO,CACb,kBAAkB,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,CACjE,CAAC;QACJ,CAAC;QAED,oBAAoB;QACpB,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;QAChE,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACvD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,sCAAsC;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,WAAW;YACzB,CAAC,CAAC,IAAI,OAAO,IAAI,WAAW,EAAE;YAC9B,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;QAElB,OAAO,GAAG,KAAK;YACb,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,GAAG,CAAC,cAAc,OAAO,OAAO,OAAO,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;QAE1D,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CACrC,OAAO,EACP,OAAO,EACP,MAAM,EACN,UAAU,CACX,CAAC;QAEF,sCAAsC;QACtC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,GAAG,8CAA8C,CAAC;YAChE,CAAC;YAED,sBAAsB;YACtB,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE;gBAC/D,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,EAAE;gBACf,UAAU,EAAE,CAAC,OAAe,EAAE,MAAyB,EAAE,EAAE;oBACzD,IAAI,OAAO,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;wBAC3B,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC;wBAC5B,OAAO,CAAC,IAAI,GAAG,eAAe,OAAO,cAAc,MAAM,CAAC,MAAM,GAAG,CAAC;oBACtE,CAAC;gBACH,CAAC;aACF,CAAC,CAAC;YAEH,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,WAAW,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;oBACvC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;gBAC1C,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CACV,aAAa,WAAW,CAAC,MAAM,KAAK,WAAW,CAAC,KAAK,IAAI,eAAe,EAAE,CAC3E,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,gCAAgC;YAChC,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC;YACzD,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;YAC1D,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;YAE1D,wBAAwB;YACxB,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7D,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;gBAEpD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAS,CAAC,CAAC;gBACxC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAE5C,mDAAmD;gBACnD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE;qBACzB,WAAW,EAAE;qBACb,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;qBACrB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAS,CAAC,IAAI,MAAM,CAAC;gBAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBACtD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAC/B,OAAO,EACP,GAAG,QAAQ,IAAI,SAAS,GAAG,GAAG,EAAE,CACjC,CAAC;gBAEF,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBACvD,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,OAAO,CACb,KAAK,CAAC,KAAK,CAAC,0BAA0B,eAAe,EAAE,CAAC,CACzD,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAE7B,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;YAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC1D,CAAC;YAED,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAC1D,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAElD,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;gBACzB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CACzD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CACF,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ import chalk from "chalk";
|
|
|
4
4
|
import { createAskCommand } from "./commands/ask.js";
|
|
5
5
|
import { createAgentsCommand } from "./commands/agents.js";
|
|
6
6
|
import { createBalanceCommand } from "./commands/balance.js";
|
|
7
|
+
import { commandCommand } from "./commands/command.js";
|
|
7
8
|
import { readFileSync } from "fs";
|
|
8
9
|
import { join, dirname } from "path";
|
|
9
10
|
import { fileURLToPath } from "url";
|
|
@@ -18,6 +19,7 @@ program
|
|
|
18
19
|
.version(packageJson.version);
|
|
19
20
|
// Add commands
|
|
20
21
|
program.addCommand(createAskCommand());
|
|
22
|
+
program.addCommand(commandCommand);
|
|
21
23
|
program.addCommand(createAgentsCommand());
|
|
22
24
|
program.addCommand(createBalanceCommand());
|
|
23
25
|
// Examples in help
|
|
@@ -25,7 +27,8 @@ program.on("--help", () => {
|
|
|
25
27
|
console.log();
|
|
26
28
|
console.log("Examples:");
|
|
27
29
|
console.log(' $ memeputer ask FINNPUTER "whats up"');
|
|
28
|
-
console.log(
|
|
30
|
+
console.log(" $ memeputer command rawgroundbeef ping");
|
|
31
|
+
console.log(' $ memeputer command rawgroundbeef pfp "a cool cyberpunk hacker"');
|
|
29
32
|
console.log(" $ memeputer agents");
|
|
30
33
|
console.log(" $ memeputer balance");
|
|
31
34
|
console.log();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,iCAAiC;AACjC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC1D,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CACV,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAC5B,6DAA6D,CAChE;KACA,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAE3C,mBAAmB;AACnB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,iCAAiC;AACjC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC1D,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CACV,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAC5B,6DAA6D,CAChE;KACA,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAE3C,mBAAmB;AACnB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CACT,mEAAmE,CACpE,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,oBAAoB;AACpB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/lib/api.d.ts
CHANGED
|
@@ -13,10 +13,20 @@ export interface InteractionResult {
|
|
|
13
13
|
response: string;
|
|
14
14
|
format: "text" | "image" | "video" | "audio";
|
|
15
15
|
mediaUrl?: string;
|
|
16
|
+
statusUrl?: string;
|
|
17
|
+
imageUrl?: string;
|
|
18
|
+
etaSeconds?: number;
|
|
16
19
|
transactionSignature?: string;
|
|
17
20
|
agentId?: string;
|
|
18
21
|
error?: string;
|
|
19
22
|
}
|
|
23
|
+
export interface StatusCheckResult {
|
|
24
|
+
status: "pending" | "processing" | "completed" | "failed";
|
|
25
|
+
message?: string;
|
|
26
|
+
imageUrl?: string;
|
|
27
|
+
mediaUrl?: string;
|
|
28
|
+
error?: string;
|
|
29
|
+
}
|
|
20
30
|
export declare class AgentsApiClient {
|
|
21
31
|
private baseUrl;
|
|
22
32
|
constructor(baseUrl: string);
|
|
@@ -29,5 +39,18 @@ export declare class AgentsApiClient {
|
|
|
29
39
|
* Manual x402 flow: 402 → create payment → retry with X-PAYMENT header
|
|
30
40
|
*/
|
|
31
41
|
interact(agentId: string, message: string, wallet: Keypair, connection: Connection): Promise<InteractionResult>;
|
|
42
|
+
/**
|
|
43
|
+
* Check status of async operation
|
|
44
|
+
* Status URLs point to agents-api proxy (no auth required)
|
|
45
|
+
*/
|
|
46
|
+
checkStatus(statusUrl: string): Promise<StatusCheckResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Poll status URL until completion or timeout
|
|
49
|
+
*/
|
|
50
|
+
pollStatus(statusUrl: string, options?: {
|
|
51
|
+
maxAttempts?: number;
|
|
52
|
+
intervalMs?: number;
|
|
53
|
+
onProgress?: (attempt: number, status: StatusCheckResult) => void;
|
|
54
|
+
}): Promise<StatusCheckResult>;
|
|
32
55
|
}
|
|
33
56
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/lib/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAGtD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,eAAe;IACd,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAEnC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAsBxC;;;OAGG;IACG,QAAQ,CACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAGtD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,eAAe;IACd,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAEnC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAsBxC;;;OAGG;IACG,QAAQ,CACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,iBAAiB,CAAC;IAsH7B;;;OAGG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwBhE;;OAEG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;KAC9D,GACL,OAAO,CAAC,iBAAiB,CAAC;CAyB9B"}
|
package/dist/lib/api.js
CHANGED
|
@@ -34,7 +34,12 @@ export class AgentsApiClient {
|
|
|
34
34
|
// Step 1: Make request without payment (will get 402)
|
|
35
35
|
let response;
|
|
36
36
|
try {
|
|
37
|
-
response = await axios.post(`${this.baseUrl}/x402/interact`, { agentId, message }, {
|
|
37
|
+
response = await axios.post(`${this.baseUrl}/x402/interact`, { agentId, message }, {
|
|
38
|
+
headers: {
|
|
39
|
+
"Content-Type": "application/json",
|
|
40
|
+
"User-Agent": "memeputer-cli",
|
|
41
|
+
},
|
|
42
|
+
});
|
|
38
43
|
}
|
|
39
44
|
catch (error) {
|
|
40
45
|
if (error.response?.status !== 402) {
|
|
@@ -55,6 +60,8 @@ export class AgentsApiClient {
|
|
|
55
60
|
const amountMicroUsdc = parseInt(acceptDetails.maxAmountRequired || "10000");
|
|
56
61
|
const amountUsdc = amountMicroUsdc / 1_000_000;
|
|
57
62
|
const feePayer = acceptDetails.extra?.feePayer;
|
|
63
|
+
const scheme = acceptDetails.scheme || "exact";
|
|
64
|
+
const network = acceptDetails.network || "solana";
|
|
58
65
|
if (!recipient) {
|
|
59
66
|
throw new Error(`No recipient wallet (payTo) found in 402 response.`);
|
|
60
67
|
}
|
|
@@ -62,14 +69,17 @@ export class AgentsApiClient {
|
|
|
62
69
|
Recipient: ${recipient}
|
|
63
70
|
Amount: ${amountUsdc} USDC
|
|
64
71
|
Fee Payer: ${feePayer || "PayAI Facilitator"}
|
|
72
|
+
Scheme: ${scheme}
|
|
73
|
+
Network: ${network}
|
|
65
74
|
`);
|
|
66
75
|
// Step 3: Create and sign payment transaction
|
|
67
|
-
const { signature: paymentHeader } = await createPaymentTransaction(connection, wallet, recipient, amountUsdc);
|
|
76
|
+
const { signature: paymentHeader } = await createPaymentTransaction(connection, wallet, recipient, amountUsdc, scheme, network);
|
|
68
77
|
// Step 4: Retry request with X-PAYMENT header
|
|
69
78
|
response = await axios.post(`${this.baseUrl}/x402/interact`, { agentId, message }, {
|
|
70
79
|
headers: {
|
|
71
80
|
"Content-Type": "application/json",
|
|
72
81
|
"X-PAYMENT": paymentHeader,
|
|
82
|
+
"User-Agent": "memeputer-cli",
|
|
73
83
|
},
|
|
74
84
|
});
|
|
75
85
|
}
|
|
@@ -77,9 +87,12 @@ export class AgentsApiClient {
|
|
|
77
87
|
const data = response.data;
|
|
78
88
|
return {
|
|
79
89
|
success: data.success || true,
|
|
80
|
-
response: data.response || "",
|
|
90
|
+
response: data.response || data.message || "",
|
|
81
91
|
format: data.format || "text",
|
|
82
|
-
mediaUrl: data.mediaUrl,
|
|
92
|
+
mediaUrl: data.mediaUrl || data.media_url,
|
|
93
|
+
statusUrl: data.statusUrl || data.status_url,
|
|
94
|
+
imageUrl: data.imageUrl || data.image_url,
|
|
95
|
+
etaSeconds: data.etaSeconds || data.eta_seconds,
|
|
83
96
|
transactionSignature: data.transactionSignature,
|
|
84
97
|
agentId: data.agentId || agentId,
|
|
85
98
|
};
|
|
@@ -100,5 +113,55 @@ export class AgentsApiClient {
|
|
|
100
113
|
throw error;
|
|
101
114
|
}
|
|
102
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Check status of async operation
|
|
118
|
+
* Status URLs point to agents-api proxy (no auth required)
|
|
119
|
+
*/
|
|
120
|
+
async checkStatus(statusUrl) {
|
|
121
|
+
try {
|
|
122
|
+
const response = await axios.get(statusUrl);
|
|
123
|
+
// Handle both wrapped (ok()) and unwrapped responses
|
|
124
|
+
const data = response.data.data || response.data;
|
|
125
|
+
return {
|
|
126
|
+
status: data.status || "pending",
|
|
127
|
+
message: data.message,
|
|
128
|
+
imageUrl: data.imageUrl || data.image_url,
|
|
129
|
+
mediaUrl: data.mediaUrl || data.media_url,
|
|
130
|
+
error: data.error,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (error.response?.data) {
|
|
135
|
+
return {
|
|
136
|
+
status: "failed",
|
|
137
|
+
error: error.response.data.error || "Status check failed",
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
throw error;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Poll status URL until completion or timeout
|
|
145
|
+
*/
|
|
146
|
+
async pollStatus(statusUrl, options = {}) {
|
|
147
|
+
const maxAttempts = options.maxAttempts || 60; // 5 minutes at 5s intervals
|
|
148
|
+
const intervalMs = options.intervalMs || 5000;
|
|
149
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
150
|
+
const result = await this.checkStatus(statusUrl);
|
|
151
|
+
if (options.onProgress) {
|
|
152
|
+
options.onProgress(attempt, result);
|
|
153
|
+
}
|
|
154
|
+
if (result.status === "completed" || result.status === "failed") {
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
if (attempt < maxAttempts) {
|
|
158
|
+
await new Promise((resolve) => setTimeout(resolve, intervalMs));
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
status: "failed",
|
|
163
|
+
error: "Timeout waiting for completion",
|
|
164
|
+
};
|
|
165
|
+
}
|
|
103
166
|
}
|
|
104
167
|
//# sourceMappingURL=api.js.map
|
package/dist/lib/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/x402Client.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Connection, Keypair,
|
|
1
|
+
import { Connection, Keypair, VersionedTransaction } from "@solana/web3.js";
|
|
2
2
|
/**
|
|
3
3
|
* Create a simple USDC payment transaction (for CLI use)
|
|
4
4
|
* This creates a signed transaction that can be sent in the X-PAYMENT header
|
|
5
5
|
*/
|
|
6
|
-
export declare function createPaymentTransaction(connection: Connection, payer: Keypair, recipient: string, amountUsdc: number): Promise<{
|
|
7
|
-
transaction:
|
|
6
|
+
export declare function createPaymentTransaction(connection: Connection, payer: Keypair, recipient: string, amountUsdc: number, scheme?: string, network?: string): Promise<{
|
|
7
|
+
transaction: VersionedTransaction;
|
|
8
8
|
signature: string;
|
|
9
9
|
}>;
|
|
10
10
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x402Client.d.ts","sourceRoot":"","sources":["../../src/lib/x402Client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,OAAO,
|
|
1
|
+
{"version":3,"file":"x402Client.d.ts","sourceRoot":"","sources":["../../src/lib/x402Client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,OAAO,EAIP,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAYzB;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,MAAgB,EACxB,OAAO,GAAE,MAAiB,GACzB,OAAO,CAAC;IAAE,WAAW,EAAE,oBAAoB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAsInE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC,CAejB"}
|
package/dist/lib/x402Client.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { getAssociatedTokenAddress,
|
|
1
|
+
import { ComputeBudgetProgram, TransactionMessage, VersionedTransaction, } from "@solana/web3.js";
|
|
2
|
+
import { getAssociatedTokenAddress, createTransferCheckedInstruction, createAssociatedTokenAccountInstruction, TOKEN_PROGRAM_ID, } from "@solana/spl-token";
|
|
3
3
|
import { PublicKey } from "@solana/web3.js";
|
|
4
4
|
// USDC mint on Solana mainnet
|
|
5
5
|
const USDC_MINT = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
|
|
@@ -7,7 +7,7 @@ const USDC_MINT = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
|
|
|
7
7
|
* Create a simple USDC payment transaction (for CLI use)
|
|
8
8
|
* This creates a signed transaction that can be sent in the X-PAYMENT header
|
|
9
9
|
*/
|
|
10
|
-
export async function createPaymentTransaction(connection, payer, recipient, amountUsdc) {
|
|
10
|
+
export async function createPaymentTransaction(connection, payer, recipient, amountUsdc, scheme = "exact", network = "solana") {
|
|
11
11
|
try {
|
|
12
12
|
const recipientPubkey = new PublicKey(recipient);
|
|
13
13
|
// Convert USDC amount to micro-USDC (6 decimals)
|
|
@@ -17,41 +17,65 @@ export async function createPaymentTransaction(connection, payer, recipient, amo
|
|
|
17
17
|
TOKEN_PROGRAM_ID);
|
|
18
18
|
const recipientTokenAccount = await getAssociatedTokenAddress(USDC_MINT, recipientPubkey, true, // allowOwnerOffCurve - critical for wallet adapter keys!
|
|
19
19
|
TOKEN_PROGRAM_ID);
|
|
20
|
-
// Build
|
|
21
|
-
const
|
|
20
|
+
// Build instructions array
|
|
21
|
+
const instructions = [];
|
|
22
|
+
// Add ComputeBudget instructions FIRST (required by facilitator!)
|
|
23
|
+
instructions.push(ComputeBudgetProgram.setComputeUnitLimit({
|
|
24
|
+
units: 40_000,
|
|
25
|
+
}));
|
|
26
|
+
instructions.push(ComputeBudgetProgram.setComputeUnitPrice({
|
|
27
|
+
microLamports: 1,
|
|
28
|
+
}));
|
|
22
29
|
// Check if recipient token account exists, if not create it
|
|
23
30
|
const recipientAccountInfo = await connection.getAccountInfo(recipientTokenAccount);
|
|
24
31
|
if (!recipientAccountInfo) {
|
|
25
32
|
console.log(` 📝 Recipient token account doesn't exist, will create it`);
|
|
26
|
-
|
|
33
|
+
instructions.push(createAssociatedTokenAccountInstruction(payer.publicKey, // payer
|
|
27
34
|
recipientTokenAccount, // ata
|
|
28
35
|
recipientPubkey, // owner
|
|
29
36
|
USDC_MINT, // mint
|
|
30
37
|
TOKEN_PROGRAM_ID));
|
|
31
38
|
}
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
//
|
|
38
|
-
|
|
39
|
-
//
|
|
40
|
-
|
|
39
|
+
// Add the transfer instruction (use checked version like agent-to-agent payments)
|
|
40
|
+
instructions.push(createTransferCheckedInstruction(payerTokenAccount, USDC_MINT, recipientTokenAccount, payer.publicKey, amount, 6, // USDC has 6 decimals
|
|
41
|
+
[], TOKEN_PROGRAM_ID));
|
|
42
|
+
// Get recent blockhash
|
|
43
|
+
const { blockhash } = await connection.getLatestBlockhash("confirmed");
|
|
44
|
+
// Set facilitator as fee payer for gas-free transactions!
|
|
45
|
+
const facilitatorPublicKey = new PublicKey("2wKupLR9q6wXYppw8Gr2NvWxKBUqm4PPJKkQfoxHDBg4");
|
|
46
|
+
// Create VersionedTransaction (x402 standard)
|
|
47
|
+
const message = new TransactionMessage({
|
|
48
|
+
payerKey: facilitatorPublicKey,
|
|
49
|
+
recentBlockhash: blockhash,
|
|
50
|
+
instructions,
|
|
51
|
+
}).compileToV0Message();
|
|
52
|
+
const transaction = new VersionedTransaction(message);
|
|
53
|
+
// Find which signature slot corresponds to the user's public key
|
|
54
|
+
// The facilitator is at index 0 (fee payer), user is at a different index
|
|
55
|
+
const userPubkey = payer.publicKey;
|
|
56
|
+
const staticAccountKeys = transaction.message.staticAccountKeys;
|
|
57
|
+
const userSignatureIndex = staticAccountKeys.findIndex((key) => key.equals(userPubkey));
|
|
58
|
+
// Sign with user's wallet (facilitator will add its signature)
|
|
59
|
+
transaction.sign([payer]);
|
|
41
60
|
// Serialize transaction
|
|
42
|
-
const serialized = transaction.serialize(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
61
|
+
const serialized = transaction.serialize();
|
|
62
|
+
const serializedTx = Buffer.from(serialized).toString("base64");
|
|
63
|
+
// Extract the user's signature from the correct slot (bs58 encoded)
|
|
64
|
+
const bs58 = await import("bs58");
|
|
65
|
+
const userSignature = userSignatureIndex >= 0 &&
|
|
66
|
+
transaction.signatures?.[userSignatureIndex] &&
|
|
67
|
+
!transaction.signatures[userSignatureIndex].every((b) => b === 0)
|
|
68
|
+
? bs58.default.encode(transaction.signatures[userSignatureIndex])
|
|
69
|
+
: undefined;
|
|
70
|
+
// Create X-PAYMENT header in x402 format (minimal format matching agent-to-agent)
|
|
71
|
+
// This matches the exact format from @payai/x402-solana
|
|
49
72
|
const paymentPayload = {
|
|
50
73
|
x402Version: 1,
|
|
51
|
-
scheme:
|
|
52
|
-
network:
|
|
74
|
+
scheme: scheme,
|
|
75
|
+
network: network,
|
|
53
76
|
payload: {
|
|
54
77
|
transaction: serializedTx,
|
|
78
|
+
signature: userSignature, // Include signature for reference (optional)
|
|
55
79
|
},
|
|
56
80
|
};
|
|
57
81
|
// Encode as base64
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x402Client.js","sourceRoot":"","sources":["../../src/lib/x402Client.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,
|
|
1
|
+
{"version":3,"file":"x402Client.js","sourceRoot":"","sources":["../../src/lib/x402Client.ts"],"names":[],"mappings":"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"}
|