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
|
@@ -0,0 +1,556 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import JSZip from 'jszip';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { getConnection } from '../config.js';
|
|
6
|
+
// --- Shared auth helper ---
|
|
7
|
+
function getAccountsAuth() {
|
|
8
|
+
const connection = getConnection();
|
|
9
|
+
if (!connection) {
|
|
10
|
+
console.error(chalk.red('Not logged in.'));
|
|
11
|
+
console.error(`Run: ${chalk.cyan('npx atxp login')}`);
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
const url = new URL(connection);
|
|
15
|
+
const token = url.searchParams.get('connection_token');
|
|
16
|
+
if (!token) {
|
|
17
|
+
console.error(chalk.red('Invalid connection string: missing connection_token'));
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
return { baseUrl: `${url.protocol}//${url.host}`, token };
|
|
21
|
+
}
|
|
22
|
+
// --- File collection ---
|
|
23
|
+
export function collectMdFiles(dir) {
|
|
24
|
+
const entries = fs.readdirSync(dir, { recursive: true, withFileTypes: true });
|
|
25
|
+
const files = [];
|
|
26
|
+
for (const entry of entries) {
|
|
27
|
+
if (entry.isSymbolicLink())
|
|
28
|
+
continue;
|
|
29
|
+
if (!entry.isFile())
|
|
30
|
+
continue;
|
|
31
|
+
if (!entry.name.endsWith('.md'))
|
|
32
|
+
continue;
|
|
33
|
+
const parentPath = entry.parentPath ?? entry.path;
|
|
34
|
+
const fullPath = path.join(parentPath, entry.name);
|
|
35
|
+
const relativePath = path.relative(dir, fullPath);
|
|
36
|
+
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
37
|
+
files.push({ path: relativePath, content });
|
|
38
|
+
}
|
|
39
|
+
return files;
|
|
40
|
+
}
|
|
41
|
+
export function chunkMarkdown(filePath, content) {
|
|
42
|
+
const lines = content.split('\n');
|
|
43
|
+
const chunks = [];
|
|
44
|
+
let currentHeading = filePath;
|
|
45
|
+
let currentLines = [];
|
|
46
|
+
let chunkStartLine = 1;
|
|
47
|
+
const flushChunk = () => {
|
|
48
|
+
const text = currentLines.join('\n').trim();
|
|
49
|
+
if (text.length > 0) {
|
|
50
|
+
chunks.push({
|
|
51
|
+
filePath,
|
|
52
|
+
heading: currentHeading,
|
|
53
|
+
text,
|
|
54
|
+
startLine: chunkStartLine,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
currentLines = [];
|
|
58
|
+
};
|
|
59
|
+
for (let i = 0; i < lines.length; i++) {
|
|
60
|
+
const line = lines[i];
|
|
61
|
+
const headingMatch = line.match(/^(#{1,3})\s+(.+)/);
|
|
62
|
+
if (headingMatch) {
|
|
63
|
+
flushChunk();
|
|
64
|
+
currentHeading = headingMatch[2].trim();
|
|
65
|
+
chunkStartLine = i + 1;
|
|
66
|
+
currentLines.push(line);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
if (currentLines.length === 0) {
|
|
70
|
+
chunkStartLine = i + 1;
|
|
71
|
+
}
|
|
72
|
+
currentLines.push(line);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
flushChunk();
|
|
76
|
+
return chunks;
|
|
77
|
+
}
|
|
78
|
+
// --- Feature hashing for local embeddings ---
|
|
79
|
+
const VECTOR_DIM = 256;
|
|
80
|
+
function hashToken(token) {
|
|
81
|
+
let h = 0x811c9dc5;
|
|
82
|
+
for (let i = 0; i < token.length; i++) {
|
|
83
|
+
h ^= token.charCodeAt(i);
|
|
84
|
+
h = Math.imul(h, 0x01000193);
|
|
85
|
+
}
|
|
86
|
+
return h >>> 0;
|
|
87
|
+
}
|
|
88
|
+
function tokenize(text) {
|
|
89
|
+
return text
|
|
90
|
+
.toLowerCase()
|
|
91
|
+
.replace(/[^a-z0-9\s]/g, ' ')
|
|
92
|
+
.split(/\s+/)
|
|
93
|
+
.filter((t) => t.length > 1);
|
|
94
|
+
}
|
|
95
|
+
export function textToVector(text) {
|
|
96
|
+
const vec = new Float64Array(VECTOR_DIM);
|
|
97
|
+
const tokens = tokenize(text);
|
|
98
|
+
// Unigrams
|
|
99
|
+
for (const token of tokens) {
|
|
100
|
+
const h = hashToken(token);
|
|
101
|
+
const idx = h % VECTOR_DIM;
|
|
102
|
+
const sign = (h & 0x80000000) ? -1 : 1;
|
|
103
|
+
vec[idx] += sign;
|
|
104
|
+
}
|
|
105
|
+
// Bigrams for better context
|
|
106
|
+
for (let i = 0; i < tokens.length - 1; i++) {
|
|
107
|
+
const bigram = tokens[i] + '_' + tokens[i + 1];
|
|
108
|
+
const h = hashToken(bigram);
|
|
109
|
+
const idx = h % VECTOR_DIM;
|
|
110
|
+
const sign = (h & 0x80000000) ? -1 : 1;
|
|
111
|
+
vec[idx] += sign * 0.5;
|
|
112
|
+
}
|
|
113
|
+
// L2 normalize
|
|
114
|
+
let norm = 0;
|
|
115
|
+
for (let i = 0; i < VECTOR_DIM; i++) {
|
|
116
|
+
norm += vec[i] * vec[i];
|
|
117
|
+
}
|
|
118
|
+
norm = Math.sqrt(norm);
|
|
119
|
+
if (norm > 0) {
|
|
120
|
+
for (let i = 0; i < VECTOR_DIM; i++) {
|
|
121
|
+
vec[i] /= norm;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return Array.from(vec);
|
|
125
|
+
}
|
|
126
|
+
// --- zvec index management ---
|
|
127
|
+
const INDEX_DIR_NAME = '.atxp-memory-index';
|
|
128
|
+
function getIndexDir(basePath) {
|
|
129
|
+
return path.join(basePath, INDEX_DIR_NAME);
|
|
130
|
+
}
|
|
131
|
+
async function loadZvec() {
|
|
132
|
+
try {
|
|
133
|
+
return await import('@zvec/zvec');
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
console.error(chalk.red('Error: @zvec/zvec is not installed.'));
|
|
137
|
+
console.error(`Install it with: ${chalk.cyan('npm install @zvec/zvec')}`);
|
|
138
|
+
process.exit(1);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
async function indexMemory(pathArg) {
|
|
142
|
+
if (!pathArg) {
|
|
143
|
+
console.error(chalk.red('Error: --path is required for index'));
|
|
144
|
+
console.error(`Usage: ${chalk.cyan('npx atxp memory index --path <dir>')}`);
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
const resolvedPath = path.resolve(pathArg);
|
|
148
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
149
|
+
console.error(chalk.red(`Error: Directory does not exist: ${resolvedPath}`));
|
|
150
|
+
process.exit(1);
|
|
151
|
+
}
|
|
152
|
+
if (!fs.statSync(resolvedPath).isDirectory()) {
|
|
153
|
+
console.error(chalk.red(`Error: Path is not a directory: ${resolvedPath}`));
|
|
154
|
+
process.exit(1);
|
|
155
|
+
}
|
|
156
|
+
const zvec = await loadZvec();
|
|
157
|
+
console.log(chalk.gray(`Collecting .md files from ${resolvedPath}...`));
|
|
158
|
+
const files = collectMdFiles(resolvedPath);
|
|
159
|
+
if (files.length === 0) {
|
|
160
|
+
console.log(chalk.yellow('No .md files found in the specified directory.'));
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
console.log(chalk.gray(`Found ${files.length} .md file(s). Chunking and indexing...`));
|
|
164
|
+
// Chunk all files
|
|
165
|
+
const allChunks = [];
|
|
166
|
+
for (const file of files) {
|
|
167
|
+
const chunks = chunkMarkdown(file.path, file.content);
|
|
168
|
+
allChunks.push(...chunks);
|
|
169
|
+
}
|
|
170
|
+
if (allChunks.length === 0) {
|
|
171
|
+
console.log(chalk.yellow('No content to index.'));
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
console.log(chalk.gray(` ${allChunks.length} chunk(s) from ${files.length} file(s)`));
|
|
175
|
+
// Create zvec collection
|
|
176
|
+
const indexDir = getIndexDir(resolvedPath);
|
|
177
|
+
// Remove old index if it exists
|
|
178
|
+
if (fs.existsSync(indexDir)) {
|
|
179
|
+
fs.rmSync(indexDir, { recursive: true, force: true });
|
|
180
|
+
}
|
|
181
|
+
fs.mkdirSync(indexDir, { recursive: true });
|
|
182
|
+
const collectionPath = path.join(indexDir, 'memories');
|
|
183
|
+
const schema = new zvec.ZVecCollectionSchema({
|
|
184
|
+
name: 'memories',
|
|
185
|
+
fields: [
|
|
186
|
+
{ name: 'file_path', dataType: zvec.ZVecDataType.STRING },
|
|
187
|
+
{ name: 'heading', dataType: zvec.ZVecDataType.STRING },
|
|
188
|
+
{ name: 'text', dataType: zvec.ZVecDataType.STRING },
|
|
189
|
+
{ name: 'start_line', dataType: zvec.ZVecDataType.INT32 },
|
|
190
|
+
],
|
|
191
|
+
vectors: [
|
|
192
|
+
{
|
|
193
|
+
name: 'embedding',
|
|
194
|
+
dataType: zvec.ZVecDataType.VECTOR_FP32,
|
|
195
|
+
dimension: VECTOR_DIM,
|
|
196
|
+
indexParams: { type: zvec.ZVecIndexType.HNSW },
|
|
197
|
+
},
|
|
198
|
+
],
|
|
199
|
+
});
|
|
200
|
+
const collection = zvec.ZVecCreateAndOpen(collectionPath, schema);
|
|
201
|
+
try {
|
|
202
|
+
// Insert chunks in batches
|
|
203
|
+
const BATCH_SIZE = 100;
|
|
204
|
+
for (let i = 0; i < allChunks.length; i += BATCH_SIZE) {
|
|
205
|
+
const batch = allChunks.slice(i, i + BATCH_SIZE);
|
|
206
|
+
const docs = batch.map((chunk, j) => ({
|
|
207
|
+
id: `chunk_${i + j}`,
|
|
208
|
+
fields: {
|
|
209
|
+
file_path: chunk.filePath,
|
|
210
|
+
heading: chunk.heading,
|
|
211
|
+
text: chunk.text,
|
|
212
|
+
start_line: chunk.startLine,
|
|
213
|
+
},
|
|
214
|
+
vectors: {
|
|
215
|
+
embedding: textToVector(chunk.text),
|
|
216
|
+
},
|
|
217
|
+
}));
|
|
218
|
+
collection.insertSync(docs);
|
|
219
|
+
}
|
|
220
|
+
// Optimize for search performance
|
|
221
|
+
collection.optimizeSync();
|
|
222
|
+
// Write metadata
|
|
223
|
+
const meta = {
|
|
224
|
+
fileCount: files.length,
|
|
225
|
+
chunkCount: allChunks.length,
|
|
226
|
+
indexedAt: new Date().toISOString(),
|
|
227
|
+
vectorDim: VECTOR_DIM,
|
|
228
|
+
};
|
|
229
|
+
fs.writeFileSync(path.join(indexDir, 'meta.json'), JSON.stringify(meta, null, 2));
|
|
230
|
+
console.log();
|
|
231
|
+
console.log(chalk.green.bold('Memory indexed successfully!'));
|
|
232
|
+
console.log(' ' + chalk.bold('Files:') + ' ' + files.length);
|
|
233
|
+
console.log(' ' + chalk.bold('Chunks:') + ' ' + allChunks.length);
|
|
234
|
+
console.log(' ' + chalk.bold('Index:') + ' ' + indexDir);
|
|
235
|
+
}
|
|
236
|
+
finally {
|
|
237
|
+
collection.closeSync();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
async function searchMemory(query, pathArg, topk) {
|
|
241
|
+
if (!query) {
|
|
242
|
+
console.error(chalk.red('Error: search query is required'));
|
|
243
|
+
console.error(`Usage: ${chalk.cyan('npx atxp memory search <query> --path <dir>')}`);
|
|
244
|
+
process.exit(1);
|
|
245
|
+
}
|
|
246
|
+
if (!pathArg) {
|
|
247
|
+
console.error(chalk.red('Error: --path is required for search'));
|
|
248
|
+
console.error(`Usage: ${chalk.cyan('npx atxp memory search <query> --path <dir>')}`);
|
|
249
|
+
process.exit(1);
|
|
250
|
+
}
|
|
251
|
+
const resolvedPath = path.resolve(pathArg);
|
|
252
|
+
const indexDir = getIndexDir(resolvedPath);
|
|
253
|
+
const collectionPath = path.join(indexDir, 'memories');
|
|
254
|
+
if (!fs.existsSync(indexDir) || !fs.existsSync(collectionPath)) {
|
|
255
|
+
console.error(chalk.red('No memory index found. Build one first:'));
|
|
256
|
+
console.error(chalk.cyan(` npx atxp memory index --path ${pathArg}`));
|
|
257
|
+
process.exit(1);
|
|
258
|
+
}
|
|
259
|
+
const zvec = await loadZvec();
|
|
260
|
+
const collection = zvec.ZVecOpen(collectionPath);
|
|
261
|
+
try {
|
|
262
|
+
const queryVec = textToVector(query);
|
|
263
|
+
const results = collection.querySync({
|
|
264
|
+
fieldName: 'embedding',
|
|
265
|
+
vector: queryVec,
|
|
266
|
+
topk,
|
|
267
|
+
outputFields: ['file_path', 'heading', 'text', 'start_line'],
|
|
268
|
+
});
|
|
269
|
+
if (results.length === 0) {
|
|
270
|
+
console.log(chalk.yellow('No matching memories found.'));
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
console.log(chalk.bold(`Found ${results.length} result(s) for "${query}":`));
|
|
274
|
+
console.log();
|
|
275
|
+
for (let i = 0; i < results.length; i++) {
|
|
276
|
+
const doc = results[i];
|
|
277
|
+
const filePath = doc.fields.file_path;
|
|
278
|
+
const heading = doc.fields.heading;
|
|
279
|
+
const text = doc.fields.text;
|
|
280
|
+
const startLine = doc.fields.start_line;
|
|
281
|
+
const score = doc.score;
|
|
282
|
+
console.log(chalk.cyan.bold(` ${i + 1}. ${filePath}:${startLine}`) + chalk.gray(` (score: ${score.toFixed(4)})`));
|
|
283
|
+
if (heading !== filePath) {
|
|
284
|
+
console.log(chalk.bold(` ${heading}`));
|
|
285
|
+
}
|
|
286
|
+
// Show a preview (first 200 chars)
|
|
287
|
+
const preview = text.length > 200 ? text.slice(0, 200) + '...' : text;
|
|
288
|
+
const indented = preview.split('\n').map((l) => ' ' + l).join('\n');
|
|
289
|
+
console.log(chalk.gray(indented));
|
|
290
|
+
console.log();
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
finally {
|
|
294
|
+
collection.closeSync();
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
// --- Cloud backup operations (preserved from backup.ts) ---
|
|
298
|
+
async function pushMemory(pathArg) {
|
|
299
|
+
if (!pathArg) {
|
|
300
|
+
console.error(chalk.red('Error: --path is required for push'));
|
|
301
|
+
console.error(`Usage: ${chalk.cyan('npx atxp memory push --path <dir>')}`);
|
|
302
|
+
process.exit(1);
|
|
303
|
+
}
|
|
304
|
+
const resolvedPath = path.resolve(pathArg);
|
|
305
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
306
|
+
console.error(chalk.red(`Error: Directory does not exist: ${resolvedPath}`));
|
|
307
|
+
process.exit(1);
|
|
308
|
+
}
|
|
309
|
+
if (!fs.statSync(resolvedPath).isDirectory()) {
|
|
310
|
+
console.error(chalk.red(`Error: Path is not a directory: ${resolvedPath}`));
|
|
311
|
+
process.exit(1);
|
|
312
|
+
}
|
|
313
|
+
const { baseUrl, token } = getAccountsAuth();
|
|
314
|
+
console.log(chalk.gray(`Collecting .md files from ${resolvedPath}...`));
|
|
315
|
+
const files = collectMdFiles(resolvedPath);
|
|
316
|
+
if (files.length === 0) {
|
|
317
|
+
console.log(chalk.yellow('No .md files found in the specified directory.'));
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
for (const file of files) {
|
|
321
|
+
console.log(chalk.gray(` ${file.path}`));
|
|
322
|
+
}
|
|
323
|
+
const totalBytes = files.reduce((sum, f) => sum + Buffer.byteLength(f.content, 'utf-8'), 0);
|
|
324
|
+
console.log(chalk.gray(`\nCompressing ${files.length} file(s) (${formatBytes(totalBytes)})...`));
|
|
325
|
+
const zip = new JSZip();
|
|
326
|
+
for (const file of files) {
|
|
327
|
+
zip.file(file.path, file.content);
|
|
328
|
+
}
|
|
329
|
+
const zipBuffer = await zip.generateAsync({ type: 'nodebuffer', compression: 'DEFLATE', compressionOptions: { level: 9 } });
|
|
330
|
+
console.log(chalk.gray(`Pushing zip archive (${formatBytes(zipBuffer.length)})...`));
|
|
331
|
+
const res = await fetch(`${baseUrl}/backup/files`, {
|
|
332
|
+
method: 'PUT',
|
|
333
|
+
headers: {
|
|
334
|
+
'Authorization': `Bearer ${token}`,
|
|
335
|
+
'Content-Type': 'application/zip',
|
|
336
|
+
},
|
|
337
|
+
body: new Uint8Array(zipBuffer),
|
|
338
|
+
});
|
|
339
|
+
if (!res.ok) {
|
|
340
|
+
const body = await res.json().catch(() => ({}));
|
|
341
|
+
console.error(chalk.red(`Error: ${body.error || res.statusText}`));
|
|
342
|
+
process.exit(1);
|
|
343
|
+
}
|
|
344
|
+
const data = await res.json();
|
|
345
|
+
console.log();
|
|
346
|
+
console.log(chalk.green.bold('Memory pushed successfully!'));
|
|
347
|
+
console.log(' ' + chalk.bold('Files:') + ' ' + data.fileCount);
|
|
348
|
+
console.log(' ' + chalk.bold('Synced at:') + ' ' + new Date(data.syncedAt).toLocaleString());
|
|
349
|
+
}
|
|
350
|
+
async function pullMemory(pathArg) {
|
|
351
|
+
if (!pathArg) {
|
|
352
|
+
console.error(chalk.red('Error: --path is required for pull'));
|
|
353
|
+
console.error(`Usage: ${chalk.cyan('npx atxp memory pull --path <dir>')}`);
|
|
354
|
+
process.exit(1);
|
|
355
|
+
}
|
|
356
|
+
const resolvedPath = path.resolve(pathArg);
|
|
357
|
+
const { baseUrl, token } = getAccountsAuth();
|
|
358
|
+
console.log(chalk.gray('Pulling memory from server...'));
|
|
359
|
+
const res = await fetch(`${baseUrl}/backup/files`, {
|
|
360
|
+
headers: {
|
|
361
|
+
'Authorization': `Bearer ${token}`,
|
|
362
|
+
'Accept': 'application/zip',
|
|
363
|
+
},
|
|
364
|
+
});
|
|
365
|
+
if (!res.ok) {
|
|
366
|
+
const body = await res.json().catch(() => ({}));
|
|
367
|
+
console.error(chalk.red(`Error: ${body.error || res.statusText}`));
|
|
368
|
+
process.exit(1);
|
|
369
|
+
}
|
|
370
|
+
const zipBuffer = Buffer.from(await res.arrayBuffer());
|
|
371
|
+
if (zipBuffer.length === 0) {
|
|
372
|
+
console.log(chalk.yellow('No memory backup found on server. Push one first with:'));
|
|
373
|
+
console.log(chalk.cyan(' npx atxp memory push --path <dir>'));
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
console.log(chalk.gray(`Extracting zip archive (${formatBytes(zipBuffer.length)})...`));
|
|
377
|
+
const zip = await JSZip.loadAsync(zipBuffer);
|
|
378
|
+
const fileNames = Object.keys(zip.files).filter(name => !zip.files[name].dir);
|
|
379
|
+
if (fileNames.length === 0) {
|
|
380
|
+
console.log(chalk.yellow('No memory backup found on server. Push one first with:'));
|
|
381
|
+
console.log(chalk.cyan(' npx atxp memory push --path <dir>'));
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
// Create target directory if needed
|
|
385
|
+
fs.mkdirSync(resolvedPath, { recursive: true });
|
|
386
|
+
for (const name of fileNames) {
|
|
387
|
+
const content = await zip.files[name].async('string');
|
|
388
|
+
const filePath = path.join(resolvedPath, name);
|
|
389
|
+
const fileDir = path.dirname(filePath);
|
|
390
|
+
fs.mkdirSync(fileDir, { recursive: true });
|
|
391
|
+
fs.writeFileSync(filePath, content, 'utf-8');
|
|
392
|
+
console.log(chalk.gray(` ${name}`));
|
|
393
|
+
}
|
|
394
|
+
console.log();
|
|
395
|
+
console.log(chalk.green.bold('Memory pulled successfully!'));
|
|
396
|
+
console.log(' ' + chalk.bold('Files written:') + ' ' + fileNames.length);
|
|
397
|
+
console.log(' ' + chalk.bold('Directory:') + ' ' + resolvedPath);
|
|
398
|
+
}
|
|
399
|
+
async function memoryStatus() {
|
|
400
|
+
const { baseUrl, token } = getAccountsAuth();
|
|
401
|
+
const res = await fetch(`${baseUrl}/backup/status`, {
|
|
402
|
+
headers: {
|
|
403
|
+
'Authorization': `Bearer ${token}`,
|
|
404
|
+
},
|
|
405
|
+
});
|
|
406
|
+
if (!res.ok) {
|
|
407
|
+
const body = await res.json().catch(() => ({}));
|
|
408
|
+
console.error(chalk.red(`Error: ${body.error || res.statusText}`));
|
|
409
|
+
process.exit(1);
|
|
410
|
+
}
|
|
411
|
+
const data = await res.json();
|
|
412
|
+
console.log(chalk.bold('Memory Status'));
|
|
413
|
+
console.log();
|
|
414
|
+
// Cloud backup status
|
|
415
|
+
console.log(chalk.bold.underline('Cloud Backup'));
|
|
416
|
+
if (data.fileCount === 0) {
|
|
417
|
+
console.log(chalk.gray(' No backup found.'));
|
|
418
|
+
console.log(' Create one with: ' + chalk.cyan('npx atxp memory push --path <dir>'));
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
console.log(' ' + chalk.bold('Files:') + ' ' + data.fileCount);
|
|
422
|
+
console.log(' ' + chalk.bold('Total size:') + ' ' + formatBytes(data.totalBytes));
|
|
423
|
+
console.log(' ' + chalk.bold('Last sync:') + ' ' + new Date(data.syncedAt).toLocaleString());
|
|
424
|
+
}
|
|
425
|
+
// Check for local index
|
|
426
|
+
console.log();
|
|
427
|
+
console.log(chalk.bold.underline('Local Search Index'));
|
|
428
|
+
// We don't know the path here, so provide guidance
|
|
429
|
+
console.log(chalk.gray(' Use --path to check a specific directory\'s index:'));
|
|
430
|
+
console.log(chalk.cyan(' npx atxp memory status --path <dir>'));
|
|
431
|
+
}
|
|
432
|
+
async function memoryStatusWithPath(pathArg) {
|
|
433
|
+
const resolvedPath = path.resolve(pathArg);
|
|
434
|
+
const indexDir = getIndexDir(resolvedPath);
|
|
435
|
+
const metaPath = path.join(indexDir, 'meta.json');
|
|
436
|
+
console.log(chalk.bold('Memory Status'));
|
|
437
|
+
console.log();
|
|
438
|
+
// Cloud backup status
|
|
439
|
+
try {
|
|
440
|
+
const { baseUrl, token } = getAccountsAuth();
|
|
441
|
+
const res = await fetch(`${baseUrl}/backup/status`, {
|
|
442
|
+
headers: { 'Authorization': `Bearer ${token}` },
|
|
443
|
+
});
|
|
444
|
+
if (res.ok) {
|
|
445
|
+
const data = await res.json();
|
|
446
|
+
console.log(chalk.bold.underline('Cloud Backup'));
|
|
447
|
+
if (data.fileCount === 0) {
|
|
448
|
+
console.log(chalk.gray(' No backup found.'));
|
|
449
|
+
}
|
|
450
|
+
else {
|
|
451
|
+
console.log(' ' + chalk.bold('Files:') + ' ' + data.fileCount);
|
|
452
|
+
console.log(' ' + chalk.bold('Total size:') + ' ' + formatBytes(data.totalBytes));
|
|
453
|
+
console.log(' ' + chalk.bold('Last sync:') + ' ' + new Date(data.syncedAt).toLocaleString());
|
|
454
|
+
}
|
|
455
|
+
console.log();
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
catch {
|
|
459
|
+
// No auth or network error — skip cloud status silently
|
|
460
|
+
}
|
|
461
|
+
// Local index status
|
|
462
|
+
console.log(chalk.bold.underline('Local Search Index'));
|
|
463
|
+
if (fs.existsSync(metaPath)) {
|
|
464
|
+
try {
|
|
465
|
+
const meta = JSON.parse(fs.readFileSync(metaPath, 'utf-8'));
|
|
466
|
+
console.log(' ' + chalk.bold('Files:') + ' ' + meta.fileCount);
|
|
467
|
+
console.log(' ' + chalk.bold('Chunks:') + ' ' + meta.chunkCount);
|
|
468
|
+
console.log(' ' + chalk.bold('Indexed at:') + ' ' + new Date(meta.indexedAt).toLocaleString());
|
|
469
|
+
console.log(' ' + chalk.bold('Index path:') + ' ' + indexDir);
|
|
470
|
+
}
|
|
471
|
+
catch {
|
|
472
|
+
console.log(chalk.yellow(' Index metadata is corrupted. Re-index with:'));
|
|
473
|
+
console.log(chalk.cyan(` npx atxp memory index --path ${pathArg}`));
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
else {
|
|
477
|
+
console.log(chalk.gray(' No local index found.'));
|
|
478
|
+
console.log(' Create one with: ' + chalk.cyan(`npx atxp memory index --path ${pathArg}`));
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
// --- Helpers ---
|
|
482
|
+
function formatBytes(bytes) {
|
|
483
|
+
if (bytes < 1024)
|
|
484
|
+
return `${bytes} B`;
|
|
485
|
+
if (bytes < 1024 * 1024)
|
|
486
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
487
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
488
|
+
}
|
|
489
|
+
function showMemoryHelp() {
|
|
490
|
+
console.log(chalk.bold('Memory Commands:'));
|
|
491
|
+
console.log();
|
|
492
|
+
console.log(chalk.bold.underline('Cloud Backup'));
|
|
493
|
+
console.log(' ' + chalk.cyan('npx atxp memory push --path <dir>') + ' ' + 'Push .md files to server');
|
|
494
|
+
console.log(' ' + chalk.cyan('npx atxp memory pull --path <dir>') + ' ' + 'Pull .md files from server');
|
|
495
|
+
console.log(' ' + chalk.cyan('npx atxp memory status') + ' ' + 'Show backup & index info');
|
|
496
|
+
console.log();
|
|
497
|
+
console.log(chalk.bold.underline('Local Search'));
|
|
498
|
+
console.log(' ' + chalk.cyan('npx atxp memory index --path <dir>') + ' ' + 'Index .md files for search');
|
|
499
|
+
console.log(' ' + chalk.cyan('npx atxp memory search <query> --path <dir>') + ' Search memories');
|
|
500
|
+
console.log();
|
|
501
|
+
console.log(chalk.bold('Details:'));
|
|
502
|
+
console.log(' push/pull back up all .md files (recursively) to/from ATXP servers.');
|
|
503
|
+
console.log(' Files are compressed into a zip archive before upload.');
|
|
504
|
+
console.log(' Each push replaces the previous server snapshot entirely.');
|
|
505
|
+
console.log(' Pull writes server files to the local directory (non-destructive).');
|
|
506
|
+
console.log();
|
|
507
|
+
console.log(' index scans .md files, chunks them by heading, and builds a local');
|
|
508
|
+
console.log(' vector search index using zvec. search finds relevant memory chunks');
|
|
509
|
+
console.log(' by similarity. No network access needed for index/search.');
|
|
510
|
+
console.log();
|
|
511
|
+
console.log(chalk.bold('Options:'));
|
|
512
|
+
console.log(' ' + chalk.yellow('--path') + ' ' + 'Directory to operate on (required for push/pull/index/search)');
|
|
513
|
+
console.log(' ' + chalk.yellow('--topk') + ' ' + 'Number of results to return (default: 10, search only)');
|
|
514
|
+
console.log();
|
|
515
|
+
console.log(chalk.bold('Examples:'));
|
|
516
|
+
console.log(' npx atxp memory push --path ~/.openclaw/workspace-abc/');
|
|
517
|
+
console.log(' npx atxp memory pull --path ~/.openclaw/workspace-abc/');
|
|
518
|
+
console.log(' npx atxp memory index --path ~/.openclaw/workspace-abc/');
|
|
519
|
+
console.log(' npx atxp memory search "authentication flow" --path ~/.openclaw/workspace-abc/');
|
|
520
|
+
console.log(' npx atxp memory status --path ~/.openclaw/workspace-abc/');
|
|
521
|
+
}
|
|
522
|
+
// --- Main command router ---
|
|
523
|
+
export async function memoryCommand(subCommand, options, query) {
|
|
524
|
+
if (!subCommand || subCommand === 'help' || subCommand === '--help' || subCommand === '-h') {
|
|
525
|
+
showMemoryHelp();
|
|
526
|
+
return;
|
|
527
|
+
}
|
|
528
|
+
switch (subCommand) {
|
|
529
|
+
case 'push':
|
|
530
|
+
await pushMemory(options.path || '');
|
|
531
|
+
break;
|
|
532
|
+
case 'pull':
|
|
533
|
+
await pullMemory(options.path || '');
|
|
534
|
+
break;
|
|
535
|
+
case 'status':
|
|
536
|
+
if (options.path) {
|
|
537
|
+
await memoryStatusWithPath(options.path);
|
|
538
|
+
}
|
|
539
|
+
else {
|
|
540
|
+
await memoryStatus();
|
|
541
|
+
}
|
|
542
|
+
break;
|
|
543
|
+
case 'index':
|
|
544
|
+
await indexMemory(options.path || '');
|
|
545
|
+
break;
|
|
546
|
+
case 'search':
|
|
547
|
+
await searchMemory(query || '', options.path || '', options.topk || 10);
|
|
548
|
+
break;
|
|
549
|
+
default:
|
|
550
|
+
console.error(chalk.red(`Unknown memory command: ${subCommand}`));
|
|
551
|
+
console.log();
|
|
552
|
+
showMemoryHelp();
|
|
553
|
+
process.exit(1);
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../../src/commands/transactions.ts"],"names":[],"mappings":"AA2BA,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkEzD"}
|