atxp 1.11.0 → 1.13.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/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +5 -0
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/commands.test.js +122 -3
- package/dist/commands/commands.test.js.map +1 -1
- package/dist/commands/deposit.d.ts.map +1 -1
- package/dist/commands/deposit.js +80 -33
- package/dist/commands/deposit.js.map +1 -1
- package/dist/commands/memory.d.ts +20 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +556 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/transactions.d.ts +2 -0
- package/dist/commands/transactions.d.ts.map +1 -0
- package/dist/commands/transactions.js +82 -0
- package/dist/commands/transactions.js.map +1 -0
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +15 -11
- package/dist/help.js.map +1 -1
- package/dist/index.js +16 -11
- package/dist/index.js.map +1 -1
- package/dist/login.d.ts.map +1 -1
- package/dist/login.js +34 -9
- package/dist/login.js.map +1 -1
- package/dist/vendor/context.cjs +1 -0
- package/dist/vendor/context.d.ts +3 -0
- package/dist/vendor/context.d.ts.map +1 -0
- package/dist/vendor/context.js +5 -0
- package/dist/vendor/context.js.map +1 -0
- package/package.json +8 -4
- package/dist/commands/backup.d.ts +0 -11
- package/dist/commands/backup.d.ts.map +0 -1
- package/dist/commands/backup.js +0 -197
- package/dist/commands/backup.js.map +0 -1
- package/dist/commands/topup.d.ts +0 -2
- package/dist/commands/topup.d.ts.map +0 -1
- package/dist/commands/topup.js +0 -100
- package/dist/commands/topup.js.map +0 -1
package/dist/commands/backup.js
DELETED
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import fs from 'fs';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
import { getConnection } from '../config.js';
|
|
5
|
-
function getAccountsAuth() {
|
|
6
|
-
const connection = getConnection();
|
|
7
|
-
if (!connection) {
|
|
8
|
-
console.error(chalk.red('Not logged in.'));
|
|
9
|
-
console.error(`Run: ${chalk.cyan('npx atxp login')}`);
|
|
10
|
-
process.exit(1);
|
|
11
|
-
}
|
|
12
|
-
const url = new URL(connection);
|
|
13
|
-
const token = url.searchParams.get('connection_token');
|
|
14
|
-
if (!token) {
|
|
15
|
-
console.error(chalk.red('Invalid connection string: missing connection_token'));
|
|
16
|
-
process.exit(1);
|
|
17
|
-
}
|
|
18
|
-
return { baseUrl: `${url.protocol}//${url.host}`, token };
|
|
19
|
-
}
|
|
20
|
-
function showBackupHelp() {
|
|
21
|
-
console.log(chalk.bold('Backup Commands:'));
|
|
22
|
-
console.log();
|
|
23
|
-
console.log(' ' + chalk.cyan('npx atxp backup push --path <dir>') + ' ' + 'Push .md files to server');
|
|
24
|
-
console.log(' ' + chalk.cyan('npx atxp backup pull --path <dir>') + ' ' + 'Pull .md files from server');
|
|
25
|
-
console.log(' ' + chalk.cyan('npx atxp backup status') + ' ' + 'Show backup info');
|
|
26
|
-
console.log();
|
|
27
|
-
console.log(chalk.bold('Details:'));
|
|
28
|
-
console.log(' Backs up all .md files (recursively) from the given directory.');
|
|
29
|
-
console.log(' Each push replaces the previous server snapshot entirely.');
|
|
30
|
-
console.log(' Pull writes server files to the local directory (non-destructive).');
|
|
31
|
-
console.log();
|
|
32
|
-
console.log(chalk.bold('Options:'));
|
|
33
|
-
console.log(' ' + chalk.yellow('--path') + ' ' + 'Directory to push from or pull to (required for push/pull)');
|
|
34
|
-
console.log();
|
|
35
|
-
console.log(chalk.bold('Examples:'));
|
|
36
|
-
console.log(' npx atxp backup push --path ~/.openclaw/workspace-abc/');
|
|
37
|
-
console.log(' npx atxp backup pull --path ~/.openclaw/workspace-abc/');
|
|
38
|
-
console.log(' npx atxp backup status');
|
|
39
|
-
}
|
|
40
|
-
export function collectMdFiles(dir) {
|
|
41
|
-
const entries = fs.readdirSync(dir, { recursive: true, withFileTypes: true });
|
|
42
|
-
const files = [];
|
|
43
|
-
for (const entry of entries) {
|
|
44
|
-
if (entry.isSymbolicLink())
|
|
45
|
-
continue;
|
|
46
|
-
if (!entry.isFile())
|
|
47
|
-
continue;
|
|
48
|
-
if (!entry.name.endsWith('.md'))
|
|
49
|
-
continue;
|
|
50
|
-
const parentPath = entry.parentPath ?? entry.path;
|
|
51
|
-
const fullPath = path.join(parentPath, entry.name);
|
|
52
|
-
const relativePath = path.relative(dir, fullPath);
|
|
53
|
-
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
54
|
-
files.push({ path: relativePath, content });
|
|
55
|
-
}
|
|
56
|
-
return files;
|
|
57
|
-
}
|
|
58
|
-
async function pushBackup(pathArg) {
|
|
59
|
-
if (!pathArg) {
|
|
60
|
-
console.error(chalk.red('Error: --path is required for push'));
|
|
61
|
-
console.error(`Usage: ${chalk.cyan('npx atxp backup push --path <dir>')}`);
|
|
62
|
-
process.exit(1);
|
|
63
|
-
}
|
|
64
|
-
const resolvedPath = path.resolve(pathArg);
|
|
65
|
-
if (!fs.existsSync(resolvedPath)) {
|
|
66
|
-
console.error(chalk.red(`Error: Directory does not exist: ${resolvedPath}`));
|
|
67
|
-
process.exit(1);
|
|
68
|
-
}
|
|
69
|
-
if (!fs.statSync(resolvedPath).isDirectory()) {
|
|
70
|
-
console.error(chalk.red(`Error: Path is not a directory: ${resolvedPath}`));
|
|
71
|
-
process.exit(1);
|
|
72
|
-
}
|
|
73
|
-
const { baseUrl, token } = getAccountsAuth();
|
|
74
|
-
console.log(chalk.gray(`Collecting .md files from ${resolvedPath}...`));
|
|
75
|
-
const files = collectMdFiles(resolvedPath);
|
|
76
|
-
if (files.length === 0) {
|
|
77
|
-
console.log(chalk.yellow('No .md files found in the specified directory.'));
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
for (const file of files) {
|
|
81
|
-
console.log(chalk.gray(` ${file.path}`));
|
|
82
|
-
}
|
|
83
|
-
const totalBytes = files.reduce((sum, f) => sum + Buffer.byteLength(f.content, 'utf-8'), 0);
|
|
84
|
-
console.log(chalk.gray(`\nPushing ${files.length} file(s) (${formatBytes(totalBytes)})...`));
|
|
85
|
-
const res = await fetch(`${baseUrl}/backup/files`, {
|
|
86
|
-
method: 'PUT',
|
|
87
|
-
headers: {
|
|
88
|
-
'Authorization': `Bearer ${token}`,
|
|
89
|
-
'Content-Type': 'application/json',
|
|
90
|
-
},
|
|
91
|
-
body: JSON.stringify({ files: files.map(f => ({ path: f.path, content: f.content })) }),
|
|
92
|
-
});
|
|
93
|
-
if (!res.ok) {
|
|
94
|
-
const body = await res.json().catch(() => ({}));
|
|
95
|
-
console.error(chalk.red(`Error: ${body.error || res.statusText}`));
|
|
96
|
-
process.exit(1);
|
|
97
|
-
}
|
|
98
|
-
const data = await res.json();
|
|
99
|
-
console.log();
|
|
100
|
-
console.log(chalk.green.bold('Backup pushed successfully!'));
|
|
101
|
-
console.log(' ' + chalk.bold('Files:') + ' ' + data.fileCount);
|
|
102
|
-
console.log(' ' + chalk.bold('Synced at:') + ' ' + new Date(data.syncedAt).toLocaleString());
|
|
103
|
-
}
|
|
104
|
-
async function pullBackup(pathArg) {
|
|
105
|
-
if (!pathArg) {
|
|
106
|
-
console.error(chalk.red('Error: --path is required for pull'));
|
|
107
|
-
console.error(`Usage: ${chalk.cyan('npx atxp backup pull --path <dir>')}`);
|
|
108
|
-
process.exit(1);
|
|
109
|
-
}
|
|
110
|
-
const resolvedPath = path.resolve(pathArg);
|
|
111
|
-
const { baseUrl, token } = getAccountsAuth();
|
|
112
|
-
console.log(chalk.gray('Pulling backup from server...'));
|
|
113
|
-
const res = await fetch(`${baseUrl}/backup/files`, {
|
|
114
|
-
headers: {
|
|
115
|
-
'Authorization': `Bearer ${token}`,
|
|
116
|
-
},
|
|
117
|
-
});
|
|
118
|
-
if (!res.ok) {
|
|
119
|
-
const body = await res.json().catch(() => ({}));
|
|
120
|
-
console.error(chalk.red(`Error: ${body.error || res.statusText}`));
|
|
121
|
-
process.exit(1);
|
|
122
|
-
}
|
|
123
|
-
const data = await res.json();
|
|
124
|
-
if (!data.files || data.files.length === 0) {
|
|
125
|
-
console.log(chalk.yellow('No backup found on server. Push one first with:'));
|
|
126
|
-
console.log(chalk.cyan(' npx atxp backup push --path <dir>'));
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
// Create target directory if needed
|
|
130
|
-
fs.mkdirSync(resolvedPath, { recursive: true });
|
|
131
|
-
for (const file of data.files) {
|
|
132
|
-
const filePath = path.join(resolvedPath, file.path);
|
|
133
|
-
const fileDir = path.dirname(filePath);
|
|
134
|
-
fs.mkdirSync(fileDir, { recursive: true });
|
|
135
|
-
fs.writeFileSync(filePath, file.content, 'utf-8');
|
|
136
|
-
console.log(chalk.gray(` ${file.path}`));
|
|
137
|
-
}
|
|
138
|
-
console.log();
|
|
139
|
-
console.log(chalk.green.bold('Backup pulled successfully!'));
|
|
140
|
-
console.log(' ' + chalk.bold('Files written:') + ' ' + data.files.length);
|
|
141
|
-
console.log(' ' + chalk.bold('Directory:') + ' ' + resolvedPath);
|
|
142
|
-
}
|
|
143
|
-
async function backupStatus() {
|
|
144
|
-
const { baseUrl, token } = getAccountsAuth();
|
|
145
|
-
const res = await fetch(`${baseUrl}/backup/status`, {
|
|
146
|
-
headers: {
|
|
147
|
-
'Authorization': `Bearer ${token}`,
|
|
148
|
-
},
|
|
149
|
-
});
|
|
150
|
-
if (!res.ok) {
|
|
151
|
-
const body = await res.json().catch(() => ({}));
|
|
152
|
-
console.error(chalk.red(`Error: ${body.error || res.statusText}`));
|
|
153
|
-
process.exit(1);
|
|
154
|
-
}
|
|
155
|
-
const data = await res.json();
|
|
156
|
-
console.log(chalk.bold('Backup Status'));
|
|
157
|
-
console.log();
|
|
158
|
-
if (data.fileCount === 0) {
|
|
159
|
-
console.log(chalk.gray('No backup found.'));
|
|
160
|
-
console.log();
|
|
161
|
-
console.log('Create one with: ' + chalk.cyan('npx atxp backup push --path <dir>'));
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
console.log(' ' + chalk.bold('Files:') + ' ' + data.fileCount);
|
|
165
|
-
console.log(' ' + chalk.bold('Total size:') + ' ' + formatBytes(data.totalBytes));
|
|
166
|
-
console.log(' ' + chalk.bold('Last sync:') + ' ' + new Date(data.syncedAt).toLocaleString());
|
|
167
|
-
}
|
|
168
|
-
function formatBytes(bytes) {
|
|
169
|
-
if (bytes < 1024)
|
|
170
|
-
return `${bytes} B`;
|
|
171
|
-
if (bytes < 1024 * 1024)
|
|
172
|
-
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
173
|
-
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
174
|
-
}
|
|
175
|
-
export async function backupCommand(subCommand, options) {
|
|
176
|
-
if (!subCommand || subCommand === 'help' || subCommand === '--help' || subCommand === '-h') {
|
|
177
|
-
showBackupHelp();
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
switch (subCommand) {
|
|
181
|
-
case 'push':
|
|
182
|
-
await pushBackup(options.path || '');
|
|
183
|
-
break;
|
|
184
|
-
case 'pull':
|
|
185
|
-
await pullBackup(options.path || '');
|
|
186
|
-
break;
|
|
187
|
-
case 'status':
|
|
188
|
-
await backupStatus();
|
|
189
|
-
break;
|
|
190
|
-
default:
|
|
191
|
-
console.error(chalk.red(`Unknown backup command: ${subCommand}`));
|
|
192
|
-
console.log();
|
|
193
|
-
showBackupHelp();
|
|
194
|
-
process.exit(1);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
//# sourceMappingURL=backup.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/topup.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"topup.d.ts","sourceRoot":"","sources":["../../src/commands/topup.ts"],"names":[],"mappings":"AA+CA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAsElD"}
|
package/dist/commands/topup.js
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import open from 'open';
|
|
3
|
-
import { getConnection } from '../config.js';
|
|
4
|
-
const DEFAULT_ACCOUNTS_URL = 'https://accounts.atxp.ai';
|
|
5
|
-
const DEFAULT_AMOUNT = 10;
|
|
6
|
-
const MIN_AMOUNT = 1;
|
|
7
|
-
const MAX_AMOUNT = 1000;
|
|
8
|
-
function getAccountsAuth() {
|
|
9
|
-
const connection = getConnection();
|
|
10
|
-
if (!connection) {
|
|
11
|
-
console.error(chalk.red('Not logged in.'));
|
|
12
|
-
console.error(`Run: ${chalk.cyan('npx atxp login')}`);
|
|
13
|
-
process.exit(1);
|
|
14
|
-
}
|
|
15
|
-
const url = new URL(connection);
|
|
16
|
-
const token = url.searchParams.get('connection_token');
|
|
17
|
-
if (!token) {
|
|
18
|
-
console.error(chalk.red('Invalid connection string: missing connection_token'));
|
|
19
|
-
process.exit(1);
|
|
20
|
-
}
|
|
21
|
-
return { baseUrl: `${url.protocol}//${url.host}`, token };
|
|
22
|
-
}
|
|
23
|
-
function getArgValue(flag) {
|
|
24
|
-
const index = process.argv.findIndex((arg) => arg === flag);
|
|
25
|
-
return index !== -1 ? process.argv[index + 1] : undefined;
|
|
26
|
-
}
|
|
27
|
-
function showTopupHelp() {
|
|
28
|
-
console.log(chalk.bold('Top Up Commands:'));
|
|
29
|
-
console.log();
|
|
30
|
-
console.log(' ' + chalk.cyan('npx atxp topup') + ' ' + 'Create a payment link ($50 suggested)');
|
|
31
|
-
console.log(' ' + chalk.cyan('npx atxp topup --amount 100') + ' ' + 'Create a payment link suggesting $100');
|
|
32
|
-
console.log();
|
|
33
|
-
console.log(chalk.bold('Options:'));
|
|
34
|
-
console.log(' ' + chalk.yellow('--amount') + ' ' + `Suggested amount in USD ($${MIN_AMOUNT}-$${MAX_AMOUNT}, default: $${DEFAULT_AMOUNT})`);
|
|
35
|
-
console.log(' ' + chalk.yellow('--open') + ' ' + 'Open the payment link in your browser');
|
|
36
|
-
console.log();
|
|
37
|
-
console.log(chalk.bold('How it works:'));
|
|
38
|
-
console.log(' Creates a Stripe Payment Link for your agent account.');
|
|
39
|
-
console.log(' The payer can adjust the amount at checkout.');
|
|
40
|
-
console.log(' Share the link with anyone to fund your account.');
|
|
41
|
-
console.log(' Funds are credited as IOU tokens once payment completes.');
|
|
42
|
-
}
|
|
43
|
-
export async function topupCommand() {
|
|
44
|
-
if (process.argv.includes('--help') || process.argv.includes('-h')) {
|
|
45
|
-
showTopupHelp();
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const { baseUrl, token } = getAccountsAuth();
|
|
49
|
-
// Parse amount
|
|
50
|
-
const amountStr = getArgValue('--amount');
|
|
51
|
-
let amount = DEFAULT_AMOUNT;
|
|
52
|
-
if (amountStr) {
|
|
53
|
-
amount = parseFloat(amountStr);
|
|
54
|
-
if (isNaN(amount) || amount < MIN_AMOUNT || amount > MAX_AMOUNT) {
|
|
55
|
-
console.error(chalk.red(`Invalid amount: must be between $${MIN_AMOUNT} and $${MAX_AMOUNT}`));
|
|
56
|
-
process.exit(1);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
const shouldOpen = process.argv.includes('--open');
|
|
60
|
-
console.log(chalk.gray(`Creating $${amount.toFixed(2)} payment link...`));
|
|
61
|
-
try {
|
|
62
|
-
const res = await fetch(`${baseUrl}/api/funding/payment-link`, {
|
|
63
|
-
method: 'POST',
|
|
64
|
-
headers: {
|
|
65
|
-
'Authorization': `Bearer ${token}`,
|
|
66
|
-
'Content-Type': 'application/json',
|
|
67
|
-
},
|
|
68
|
-
body: JSON.stringify({ amount }),
|
|
69
|
-
});
|
|
70
|
-
if (!res.ok) {
|
|
71
|
-
const body = await res.json().catch(() => ({}));
|
|
72
|
-
console.error(chalk.red(`Error: ${body.error || res.statusText}`));
|
|
73
|
-
if (res.status === 403) {
|
|
74
|
-
console.error(chalk.gray('Payment links are only available for agent accounts.'));
|
|
75
|
-
}
|
|
76
|
-
process.exit(1);
|
|
77
|
-
}
|
|
78
|
-
const data = await res.json();
|
|
79
|
-
console.log();
|
|
80
|
-
console.log(chalk.green.bold('Payment link created!'));
|
|
81
|
-
console.log();
|
|
82
|
-
console.log(' ' + chalk.bold('Suggested:') + ' ' + chalk.green(`$${data.suggestedAmount.toFixed(2)}`));
|
|
83
|
-
console.log(' ' + chalk.bold('Range:') + ' ' + chalk.gray(`$${data.minAmount} - $${data.maxAmount}`));
|
|
84
|
-
console.log(' ' + chalk.bold('URL:') + ' ' + chalk.cyan.underline(data.url));
|
|
85
|
-
console.log();
|
|
86
|
-
console.log(chalk.gray('Share this link to fund your agent account.'));
|
|
87
|
-
console.log(chalk.gray('The payer can adjust the amount at checkout.'));
|
|
88
|
-
if (shouldOpen) {
|
|
89
|
-
console.log();
|
|
90
|
-
console.log(chalk.gray('Opening in browser...'));
|
|
91
|
-
await open(data.url);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
96
|
-
console.error(chalk.red(`Error creating payment link: ${errorMessage}`));
|
|
97
|
-
process.exit(1);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
//# sourceMappingURL=topup.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"topup.js","sourceRoot":"","sources":["../../src/commands/topup.ts"],"names":[],"mappings":"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"}
|