agentmemory-cli 1.1.0 → 1.3.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/connect.d.ts +11 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +232 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/delete.d.ts.map +1 -1
- package/dist/commands/delete.js +3 -0
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/download.d.ts.map +1 -1
- package/dist/commands/download.js +3 -0
- package/dist/commands/download.js.map +1 -1
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +3 -0
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/files.d.ts.map +1 -1
- package/dist/commands/files.js +3 -0
- package/dist/commands/files.js.map +1 -1
- package/dist/commands/heartbeat.d.ts +65 -0
- package/dist/commands/heartbeat.d.ts.map +1 -0
- package/dist/commands/heartbeat.js +176 -0
- package/dist/commands/heartbeat.js.map +1 -0
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +3 -0
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +39 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +3 -0
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +3 -0
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/secret.d.ts +25 -0
- package/dist/commands/secret.d.ts.map +1 -0
- package/dist/commands/secret.js +390 -0
- package/dist/commands/secret.js.map +1 -0
- package/dist/commands/store.d.ts.map +1 -1
- package/dist/commands/store.js +3 -0
- package/dist/commands/store.js.map +1 -1
- package/dist/commands/upload.d.ts.map +1 -1
- package/dist/commands/upload.js +3 -0
- package/dist/commands/upload.js.map +1 -1
- package/dist/index.js +105 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +23 -1
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +49 -0
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/autosync.d.ts +14 -0
- package/dist/lib/autosync.d.ts.map +1 -0
- package/dist/lib/autosync.js +165 -0
- package/dist/lib/autosync.js.map +1 -0
- package/dist/types.d.ts +59 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/commands/connect.ts +216 -0
- package/src/commands/delete.ts +4 -0
- package/src/commands/download.ts +4 -0
- package/src/commands/export.ts +4 -0
- package/src/commands/files.ts +4 -0
- package/src/commands/heartbeat.ts +241 -0
- package/src/commands/import.ts +4 -0
- package/src/commands/init.ts +44 -1
- package/src/commands/list.ts +4 -0
- package/src/commands/search.ts +4 -0
- package/src/commands/secret.ts +438 -0
- package/src/commands/store.ts +4 -0
- package/src/commands/upload.ts +4 -0
- package/src/index.ts +124 -2
- package/src/lib/api.ts +86 -1
- package/src/lib/autosync.ts +160 -0
- package/src/types.ts +67 -0
package/dist/lib/api.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Memory, MemoriesListResponse, MemorySearchResult } from '../types.js';
|
|
1
|
+
import type { Memory, MemoriesListResponse, MemorySearchResult, Secret, SecretListItem, SecretsListResponse, SecretResponse, SecretType, SyncConnectResponse } from '../types.js';
|
|
2
2
|
declare class ApiError extends Error {
|
|
3
3
|
statusCode: number;
|
|
4
4
|
constructor(statusCode: number, message: string);
|
|
@@ -10,5 +10,27 @@ export declare function getMemory(id: string): Promise<Memory>;
|
|
|
10
10
|
export declare function updateMemory(id: string, content: string, metadata?: Record<string, unknown>): Promise<Memory>;
|
|
11
11
|
export declare function deleteMemory(id: string): Promise<void>;
|
|
12
12
|
export declare function getAllMemories(): Promise<Memory[]>;
|
|
13
|
+
export declare function listSecrets(limit?: number, type?: SecretType): Promise<SecretsListResponse>;
|
|
14
|
+
export declare function getSecret(name: string): Promise<Secret>;
|
|
15
|
+
export declare function setSecret(name: string, value: string, type?: SecretType, description?: string, metadata?: Record<string, unknown>): Promise<SecretResponse>;
|
|
16
|
+
export declare function deleteSecret(name: string): Promise<void>;
|
|
17
|
+
export declare function getAllSecrets(): Promise<SecretListItem[]>;
|
|
18
|
+
export declare function syncConnect(options?: {
|
|
19
|
+
include_files?: boolean;
|
|
20
|
+
memories_limit?: number;
|
|
21
|
+
secrets_limit?: number;
|
|
22
|
+
}): Promise<SyncConnectResponse>;
|
|
23
|
+
export declare function checkConnection(): Promise<{
|
|
24
|
+
connected: boolean;
|
|
25
|
+
agent: {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
};
|
|
29
|
+
counts: {
|
|
30
|
+
memories: number;
|
|
31
|
+
secrets: number;
|
|
32
|
+
};
|
|
33
|
+
server_time: string;
|
|
34
|
+
}>;
|
|
13
35
|
export { ApiError };
|
|
14
36
|
//# 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,KAAK,EACV,MAAM,EACN,oBAAoB,EAGpB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAErB,cAAM,QAAS,SAAQ,KAAK;IACP,UAAU,EAAE,MAAM;gBAAlB,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAIvD;AAoCD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAO/B;AAED,wBAAsB,YAAY,CAChC,KAAK,GAAE,MAAW,EAClB,MAAM,GAAE,MAAU,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAM/B;AAED,wBAAsB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG3D;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI5D;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBxD;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EACN,oBAAoB,EAGpB,kBAAkB,EAClB,MAAM,EACN,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAErB,cAAM,QAAS,SAAQ,KAAK;IACP,UAAU,EAAE,MAAM;gBAAlB,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAIvD;AAoCD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAO/B;AAED,wBAAsB,YAAY,CAChC,KAAK,GAAE,MAAW,EAClB,MAAM,GAAE,MAAU,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAM/B;AAED,wBAAsB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG3D;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI5D;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBxD;AAID,wBAAsB,WAAW,CAC/B,KAAK,GAAE,MAAY,EACnB,IAAI,CAAC,EAAE,UAAU,GAChB,OAAO,CAAC,mBAAmB,CAAC,CAM9B;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG7D;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,UAAsB,EAC5B,WAAW,CAAC,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,cAAc,CAAC,CAoBzB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK9D;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAG/D;AAGD,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE;IAC1C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAK/B;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAED;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/lib/api.js
CHANGED
|
@@ -8,6 +8,13 @@ exports.getMemory = getMemory;
|
|
|
8
8
|
exports.updateMemory = updateMemory;
|
|
9
9
|
exports.deleteMemory = deleteMemory;
|
|
10
10
|
exports.getAllMemories = getAllMemories;
|
|
11
|
+
exports.listSecrets = listSecrets;
|
|
12
|
+
exports.getSecret = getSecret;
|
|
13
|
+
exports.setSecret = setSecret;
|
|
14
|
+
exports.deleteSecret = deleteSecret;
|
|
15
|
+
exports.getAllSecrets = getAllSecrets;
|
|
16
|
+
exports.syncConnect = syncConnect;
|
|
17
|
+
exports.checkConnection = checkConnection;
|
|
11
18
|
const config_js_1 = require("./config.js");
|
|
12
19
|
class ApiError extends Error {
|
|
13
20
|
statusCode;
|
|
@@ -95,4 +102,46 @@ async function getAllMemories() {
|
|
|
95
102
|
}
|
|
96
103
|
return allMemories;
|
|
97
104
|
}
|
|
105
|
+
// Secrets API functions
|
|
106
|
+
async function listSecrets(limit = 100, type) {
|
|
107
|
+
let endpoint = `/secrets?limit=${limit}`;
|
|
108
|
+
if (type) {
|
|
109
|
+
endpoint += `&type=${type}`;
|
|
110
|
+
}
|
|
111
|
+
return request(endpoint);
|
|
112
|
+
}
|
|
113
|
+
async function getSecret(name) {
|
|
114
|
+
const response = await request(`/secrets/${encodeURIComponent(name)}`);
|
|
115
|
+
return response.secret;
|
|
116
|
+
}
|
|
117
|
+
async function setSecret(name, value, type = 'generic', description, metadata) {
|
|
118
|
+
const body = { name, value, type };
|
|
119
|
+
if (description) {
|
|
120
|
+
body.description = description;
|
|
121
|
+
}
|
|
122
|
+
if (metadata) {
|
|
123
|
+
body.metadata = metadata;
|
|
124
|
+
}
|
|
125
|
+
return request('/secrets', {
|
|
126
|
+
method: 'POST',
|
|
127
|
+
body: JSON.stringify(body),
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
async function deleteSecret(name) {
|
|
131
|
+
await request(`/secrets/${encodeURIComponent(name)}`, { method: 'DELETE' });
|
|
132
|
+
}
|
|
133
|
+
async function getAllSecrets() {
|
|
134
|
+
const response = await listSecrets(500);
|
|
135
|
+
return response.secrets;
|
|
136
|
+
}
|
|
137
|
+
// Sync connect API
|
|
138
|
+
async function syncConnect(options) {
|
|
139
|
+
return request('/sync/connect', {
|
|
140
|
+
method: 'POST',
|
|
141
|
+
body: JSON.stringify(options || {}),
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
async function checkConnection() {
|
|
145
|
+
return request('/sync/connect');
|
|
146
|
+
}
|
|
98
147
|
//# 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":";;;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Silent auto-sync - runs at the start of every command
|
|
3
|
+
* - Sends heartbeat to mark agent as online
|
|
4
|
+
* - Syncs memories to local MEMORY.md file
|
|
5
|
+
* - Caches results to avoid syncing too frequently
|
|
6
|
+
* - Never throws errors or prints output (silent)
|
|
7
|
+
*/
|
|
8
|
+
export declare function autoSync(): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Quick heartbeat - just marks agent as online, no sync
|
|
11
|
+
* Use this for commands that don't need fresh data
|
|
12
|
+
*/
|
|
13
|
+
export declare function quickHeartbeat(): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=autosync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autosync.d.ts","sourceRoot":"","sources":["../../src/lib/autosync.ts"],"names":[],"mappings":"AAsCA;;;;;;GAMG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CA4F9C;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBpD"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.autoSync = autoSync;
|
|
37
|
+
exports.quickHeartbeat = quickHeartbeat;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const os = __importStar(require("os"));
|
|
41
|
+
const config_js_1 = require("./config.js");
|
|
42
|
+
const CONFIG_DIR = path.join(os.homedir(), '.agentmemory');
|
|
43
|
+
const SYNC_CACHE_FILE = path.join(CONFIG_DIR, 'sync-cache.json');
|
|
44
|
+
const SYNC_INTERVAL_MS = 30000; // Only sync if last sync was 30+ seconds ago
|
|
45
|
+
function loadSyncCache() {
|
|
46
|
+
try {
|
|
47
|
+
if (fs.existsSync(SYNC_CACHE_FILE)) {
|
|
48
|
+
return JSON.parse(fs.readFileSync(SYNC_CACHE_FILE, 'utf-8'));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Ignore errors
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
function saveSyncCache(cache) {
|
|
57
|
+
try {
|
|
58
|
+
if (!fs.existsSync(CONFIG_DIR)) {
|
|
59
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
60
|
+
}
|
|
61
|
+
fs.writeFileSync(SYNC_CACHE_FILE, JSON.stringify(cache, null, 2));
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Ignore errors
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Silent auto-sync - runs at the start of every command
|
|
69
|
+
* - Sends heartbeat to mark agent as online
|
|
70
|
+
* - Syncs memories to local MEMORY.md file
|
|
71
|
+
* - Caches results to avoid syncing too frequently
|
|
72
|
+
* - Never throws errors or prints output (silent)
|
|
73
|
+
*/
|
|
74
|
+
async function autoSync() {
|
|
75
|
+
const apiKey = (0, config_js_1.getApiKey)();
|
|
76
|
+
if (!apiKey)
|
|
77
|
+
return; // Not configured yet
|
|
78
|
+
// Check if we synced recently (within 30 seconds)
|
|
79
|
+
const cache = loadSyncCache();
|
|
80
|
+
if (cache && Date.now() - cache.last_sync_ms < SYNC_INTERVAL_MS) {
|
|
81
|
+
return; // Skip sync, too recent
|
|
82
|
+
}
|
|
83
|
+
const apiUrl = (0, config_js_1.getApiUrl)();
|
|
84
|
+
try {
|
|
85
|
+
// Send heartbeat with sync
|
|
86
|
+
const response = await fetch(`${apiUrl}/heartbeat`, {
|
|
87
|
+
method: 'POST',
|
|
88
|
+
headers: {
|
|
89
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
90
|
+
'Content-Type': 'application/json',
|
|
91
|
+
},
|
|
92
|
+
body: JSON.stringify({ sync: true }),
|
|
93
|
+
});
|
|
94
|
+
if (!response.ok)
|
|
95
|
+
return;
|
|
96
|
+
const data = await response.json();
|
|
97
|
+
if (!data.sync)
|
|
98
|
+
return;
|
|
99
|
+
// Save memories to local MEMORY.md file (silently)
|
|
100
|
+
if (data.sync.memories.items.length > 0) {
|
|
101
|
+
try {
|
|
102
|
+
const memoryFilePath = (0, config_js_1.getMemoryFilePath)();
|
|
103
|
+
const dir = path.dirname(memoryFilePath);
|
|
104
|
+
if (!fs.existsSync(dir)) {
|
|
105
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
106
|
+
}
|
|
107
|
+
const lines = [
|
|
108
|
+
'# Agent Memory',
|
|
109
|
+
'',
|
|
110
|
+
`> Last synced: ${data.sync.synced_at}`,
|
|
111
|
+
`> Total memories: ${data.sync.memories.count}`,
|
|
112
|
+
'',
|
|
113
|
+
'---',
|
|
114
|
+
'',
|
|
115
|
+
];
|
|
116
|
+
for (const memory of data.sync.memories.items) {
|
|
117
|
+
lines.push(`<!-- id: ${memory.id} -->`);
|
|
118
|
+
if (memory.metadata && Object.keys(memory.metadata).length > 0) {
|
|
119
|
+
lines.push(`<!-- metadata: ${JSON.stringify(memory.metadata)} -->`);
|
|
120
|
+
}
|
|
121
|
+
lines.push(memory.content);
|
|
122
|
+
lines.push('');
|
|
123
|
+
lines.push('---');
|
|
124
|
+
lines.push('');
|
|
125
|
+
}
|
|
126
|
+
fs.writeFileSync(memoryFilePath, lines.join('\n'));
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// Silently ignore file write errors
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Update cache
|
|
133
|
+
saveSyncCache({
|
|
134
|
+
last_sync: data.sync.synced_at,
|
|
135
|
+
last_sync_ms: Date.now(),
|
|
136
|
+
memory_count: data.sync.memories.count,
|
|
137
|
+
secret_count: data.sync.secrets.count,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// Silently ignore all errors - auto-sync should never break commands
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Quick heartbeat - just marks agent as online, no sync
|
|
146
|
+
* Use this for commands that don't need fresh data
|
|
147
|
+
*/
|
|
148
|
+
async function quickHeartbeat() {
|
|
149
|
+
const apiKey = (0, config_js_1.getApiKey)();
|
|
150
|
+
if (!apiKey)
|
|
151
|
+
return;
|
|
152
|
+
const apiUrl = (0, config_js_1.getApiUrl)();
|
|
153
|
+
try {
|
|
154
|
+
await fetch(`${apiUrl}/heartbeat`, {
|
|
155
|
+
method: 'GET',
|
|
156
|
+
headers: {
|
|
157
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// Silently ignore
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=autosync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autosync.js","sourceRoot":"","sources":["../../src/lib/autosync.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -38,4 +38,63 @@ export interface SyncStatus {
|
|
|
38
38
|
cloud: Memory;
|
|
39
39
|
}>;
|
|
40
40
|
}
|
|
41
|
+
export type SecretType = 'api_key' | 'credential' | 'connection_string' | 'env_var' | 'generic';
|
|
42
|
+
export interface Secret {
|
|
43
|
+
id: string;
|
|
44
|
+
name: string;
|
|
45
|
+
value?: string;
|
|
46
|
+
type: SecretType;
|
|
47
|
+
description?: string;
|
|
48
|
+
metadata?: Record<string, unknown>;
|
|
49
|
+
created_at: string;
|
|
50
|
+
updated_at: string;
|
|
51
|
+
}
|
|
52
|
+
export interface SecretListItem {
|
|
53
|
+
id: string;
|
|
54
|
+
name: string;
|
|
55
|
+
type: SecretType;
|
|
56
|
+
description?: string;
|
|
57
|
+
metadata?: Record<string, unknown>;
|
|
58
|
+
created_at: string;
|
|
59
|
+
updated_at: string;
|
|
60
|
+
}
|
|
61
|
+
export interface SecretsListResponse {
|
|
62
|
+
secrets: SecretListItem[];
|
|
63
|
+
total: number;
|
|
64
|
+
limit: number;
|
|
65
|
+
offset: number;
|
|
66
|
+
}
|
|
67
|
+
export interface SecretResponse {
|
|
68
|
+
secret: Secret;
|
|
69
|
+
message?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface SyncConnectResponse {
|
|
72
|
+
agent: {
|
|
73
|
+
id: string;
|
|
74
|
+
name: string;
|
|
75
|
+
memory_count: number;
|
|
76
|
+
created_at: string;
|
|
77
|
+
};
|
|
78
|
+
plan: {
|
|
79
|
+
name: string;
|
|
80
|
+
activated: boolean;
|
|
81
|
+
limits: {
|
|
82
|
+
memories: number;
|
|
83
|
+
secrets: number;
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
sync: {
|
|
87
|
+
memories: {
|
|
88
|
+
items: Memory[];
|
|
89
|
+
total: number;
|
|
90
|
+
has_more: boolean;
|
|
91
|
+
};
|
|
92
|
+
secrets: {
|
|
93
|
+
items: SecretListItem[];
|
|
94
|
+
total: number;
|
|
95
|
+
has_more: boolean;
|
|
96
|
+
};
|
|
97
|
+
synced_at: string;
|
|
98
|
+
};
|
|
99
|
+
}
|
|
41
100
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAmB,SAAQ,MAAM;IAChD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,KAAK,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import { getApiKey, getMemoryFilePath } from '../lib/config.js';
|
|
4
|
+
import { syncConnect, checkConnection } from '../lib/api.js';
|
|
5
|
+
import { writeMemoryFile } from '../lib/sync.js';
|
|
6
|
+
|
|
7
|
+
// Store sync cache locally
|
|
8
|
+
interface SyncCache {
|
|
9
|
+
last_sync: string;
|
|
10
|
+
memory_count: number;
|
|
11
|
+
secret_count: number;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function getSyncCachePath(): string {
|
|
15
|
+
const configDir = require('path').join(require('os').homedir(), '.agentmemory');
|
|
16
|
+
return require('path').join(configDir, 'sync-cache.json');
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function loadSyncCache(): SyncCache | null {
|
|
20
|
+
const cachePath = getSyncCachePath();
|
|
21
|
+
if (!fs.existsSync(cachePath)) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
return JSON.parse(fs.readFileSync(cachePath, 'utf-8'));
|
|
26
|
+
} catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function saveSyncCache(cache: SyncCache): void {
|
|
32
|
+
const cachePath = getSyncCachePath();
|
|
33
|
+
fs.writeFileSync(cachePath, JSON.stringify(cache, null, 2));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Connect and auto-sync command
|
|
37
|
+
export async function connectCommand(options: {
|
|
38
|
+
offline?: boolean;
|
|
39
|
+
noMemories?: boolean;
|
|
40
|
+
noSecrets?: boolean;
|
|
41
|
+
json?: boolean;
|
|
42
|
+
}): Promise<void> {
|
|
43
|
+
const apiKey = getApiKey();
|
|
44
|
+
|
|
45
|
+
if (!apiKey) {
|
|
46
|
+
if (options.json) {
|
|
47
|
+
console.log(JSON.stringify({ error: 'Not configured' }));
|
|
48
|
+
} else {
|
|
49
|
+
console.error(chalk.red('Error: Not configured. Run "agentmemory init" first.'));
|
|
50
|
+
}
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (options.offline) {
|
|
55
|
+
const cache = loadSyncCache();
|
|
56
|
+
if (cache) {
|
|
57
|
+
if (options.json) {
|
|
58
|
+
console.log(JSON.stringify({ status: 'offline', cached: cache }));
|
|
59
|
+
} else {
|
|
60
|
+
console.log(chalk.yellow('Offline mode - using cached data'));
|
|
61
|
+
console.log(chalk.gray(` Last sync: ${cache.last_sync}`));
|
|
62
|
+
console.log(chalk.gray(` Memories: ${cache.memory_count}`));
|
|
63
|
+
console.log(chalk.gray(` Secrets: ${cache.secret_count}`));
|
|
64
|
+
}
|
|
65
|
+
} else {
|
|
66
|
+
if (options.json) {
|
|
67
|
+
console.log(JSON.stringify({ status: 'offline', cached: null }));
|
|
68
|
+
} else {
|
|
69
|
+
console.log(chalk.yellow('Offline mode - no cached data available'));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
try {
|
|
76
|
+
if (!options.json) {
|
|
77
|
+
console.log(chalk.cyan('🔗 Connecting to AgentMemory...'));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Call sync/connect endpoint
|
|
81
|
+
const response = await syncConnect({
|
|
82
|
+
include_files: true,
|
|
83
|
+
memories_limit: 1000,
|
|
84
|
+
secrets_limit: 100,
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
if (options.json) {
|
|
88
|
+
console.log(JSON.stringify(response, null, 2));
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Display connection info
|
|
93
|
+
console.log(chalk.green('✓ Connected successfully!'));
|
|
94
|
+
console.log();
|
|
95
|
+
console.log(chalk.cyan('Agent:'), response.agent.name);
|
|
96
|
+
console.log(chalk.cyan('Plan:'), response.plan.name);
|
|
97
|
+
console.log();
|
|
98
|
+
|
|
99
|
+
// Display sync summary
|
|
100
|
+
console.log(chalk.cyan('Synced data:'));
|
|
101
|
+
console.log(` Memories: ${response.sync.memories.total}${response.sync.memories.has_more ? '+' : ''}`);
|
|
102
|
+
console.log(` Secrets: ${response.sync.secrets.total}${response.sync.secrets.has_more ? '+' : ''}`);
|
|
103
|
+
console.log();
|
|
104
|
+
|
|
105
|
+
// Save to local MEMORY.md if requested
|
|
106
|
+
if (!options.noMemories && response.sync.memories.items.length > 0) {
|
|
107
|
+
const memoryFilePath = getMemoryFilePath();
|
|
108
|
+
writeMemoryFile(memoryFilePath, response.sync.memories.items.map(m => ({
|
|
109
|
+
...m,
|
|
110
|
+
updated_at: m.updated_at || m.created_at,
|
|
111
|
+
})));
|
|
112
|
+
console.log(chalk.green(`✓ Saved ${response.sync.memories.items.length} memories to ${memoryFilePath}`));
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Display secrets list (names only)
|
|
116
|
+
if (!options.noSecrets && response.sync.secrets.items.length > 0) {
|
|
117
|
+
console.log();
|
|
118
|
+
console.log(chalk.cyan('Available secrets:'));
|
|
119
|
+
for (const secret of response.sync.secrets.items) {
|
|
120
|
+
console.log(` - ${secret.name} (${secret.type})`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Save sync cache
|
|
125
|
+
saveSyncCache({
|
|
126
|
+
last_sync: response.sync.synced_at,
|
|
127
|
+
memory_count: response.sync.memories.total,
|
|
128
|
+
secret_count: response.sync.secrets.total,
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
// Show plan limits
|
|
132
|
+
console.log();
|
|
133
|
+
console.log(chalk.gray(`Limits: ${response.sync.memories.total}/${response.plan.limits.memories === Infinity ? '∞' : response.plan.limits.memories} memories, ${response.sync.secrets.total}/${response.plan.limits.secrets === Infinity ? '∞' : response.plan.limits.secrets} secrets`));
|
|
134
|
+
|
|
135
|
+
} catch (error) {
|
|
136
|
+
if (options.json) {
|
|
137
|
+
console.log(JSON.stringify({ error: error instanceof Error ? error.message : 'Unknown error' }));
|
|
138
|
+
} else {
|
|
139
|
+
console.error(chalk.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
140
|
+
}
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Quick status check
|
|
146
|
+
export async function statusCommand(options: {
|
|
147
|
+
json?: boolean;
|
|
148
|
+
}): Promise<void> {
|
|
149
|
+
const apiKey = getApiKey();
|
|
150
|
+
|
|
151
|
+
if (!apiKey) {
|
|
152
|
+
if (options.json) {
|
|
153
|
+
console.log(JSON.stringify({ configured: false }));
|
|
154
|
+
} else {
|
|
155
|
+
console.error(chalk.red('Error: Not configured. Run "agentmemory init" first.'));
|
|
156
|
+
}
|
|
157
|
+
process.exit(1);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
try {
|
|
161
|
+
const status = await checkConnection();
|
|
162
|
+
|
|
163
|
+
if (options.json) {
|
|
164
|
+
console.log(JSON.stringify(status, null, 2));
|
|
165
|
+
} else {
|
|
166
|
+
console.log(chalk.green('✓ Connected'));
|
|
167
|
+
console.log();
|
|
168
|
+
console.log(chalk.cyan('Agent:'), status.agent.name);
|
|
169
|
+
console.log(chalk.cyan('Memories:'), status.counts.memories);
|
|
170
|
+
console.log(chalk.cyan('Secrets:'), status.counts.secrets);
|
|
171
|
+
console.log();
|
|
172
|
+
console.log(chalk.gray(`Server time: ${status.server_time}`));
|
|
173
|
+
}
|
|
174
|
+
} catch (error) {
|
|
175
|
+
if (options.json) {
|
|
176
|
+
console.log(JSON.stringify({ connected: false, error: error instanceof Error ? error.message : 'Unknown error' }));
|
|
177
|
+
} else {
|
|
178
|
+
console.error(chalk.red(`Connection failed: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
179
|
+
}
|
|
180
|
+
process.exit(1);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Auto-sync helper (can be called from other commands)
|
|
185
|
+
export async function autoSync(): Promise<boolean> {
|
|
186
|
+
const apiKey = getApiKey();
|
|
187
|
+
if (!apiKey) return false;
|
|
188
|
+
|
|
189
|
+
try {
|
|
190
|
+
const response = await syncConnect({
|
|
191
|
+
include_files: false,
|
|
192
|
+
memories_limit: 1000,
|
|
193
|
+
secrets_limit: 100,
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
// Save to local MEMORY.md
|
|
197
|
+
if (response.sync.memories.items.length > 0) {
|
|
198
|
+
const memoryFilePath = getMemoryFilePath();
|
|
199
|
+
writeMemoryFile(memoryFilePath, response.sync.memories.items.map(m => ({
|
|
200
|
+
...m,
|
|
201
|
+
updated_at: m.updated_at || m.created_at,
|
|
202
|
+
})));
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// Save sync cache
|
|
206
|
+
saveSyncCache({
|
|
207
|
+
last_sync: response.sync.synced_at,
|
|
208
|
+
memory_count: response.sync.memories.total,
|
|
209
|
+
secret_count: response.sync.secrets.total,
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
return true;
|
|
213
|
+
} catch {
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
}
|
package/src/commands/delete.ts
CHANGED
|
@@ -2,6 +2,7 @@ import chalk from 'chalk';
|
|
|
2
2
|
import { createInterface } from 'readline';
|
|
3
3
|
import { deleteMemory, getMemory } from '../lib/api.js';
|
|
4
4
|
import { isConfigured } from '../lib/config.js';
|
|
5
|
+
import { autoSync } from '../lib/autosync.js';
|
|
5
6
|
|
|
6
7
|
interface DeleteOptions {
|
|
7
8
|
force?: boolean;
|
|
@@ -31,6 +32,9 @@ export async function deleteCommand(
|
|
|
31
32
|
process.exit(1);
|
|
32
33
|
}
|
|
33
34
|
|
|
35
|
+
// Auto-sync in background (silent)
|
|
36
|
+
autoSync();
|
|
37
|
+
|
|
34
38
|
try {
|
|
35
39
|
// First, get the memory to show what will be deleted
|
|
36
40
|
if (!options.force) {
|
package/src/commands/download.ts
CHANGED
|
@@ -2,6 +2,7 @@ import chalk from 'chalk';
|
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import { getApiKey, getApiUrl } from '../lib/config.js';
|
|
5
|
+
import { autoSync } from '../lib/autosync.js';
|
|
5
6
|
|
|
6
7
|
interface FileResponse {
|
|
7
8
|
file: {
|
|
@@ -29,6 +30,9 @@ export async function downloadCommand(
|
|
|
29
30
|
process.exit(1);
|
|
30
31
|
}
|
|
31
32
|
|
|
33
|
+
// Auto-sync in background (silent)
|
|
34
|
+
autoSync();
|
|
35
|
+
|
|
32
36
|
try {
|
|
33
37
|
const apiUrl = getApiUrl();
|
|
34
38
|
const response = await fetch(`${apiUrl}/files/${fileId}`, {
|
package/src/commands/export.ts
CHANGED
|
@@ -2,6 +2,7 @@ import chalk from 'chalk';
|
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import { getAllMemories } from '../lib/api.js';
|
|
4
4
|
import { isConfigured } from '../lib/config.js';
|
|
5
|
+
import { autoSync } from '../lib/autosync.js';
|
|
5
6
|
|
|
6
7
|
interface ExportOptions {
|
|
7
8
|
output?: string;
|
|
@@ -14,6 +15,9 @@ export async function exportCommand(options: ExportOptions): Promise<void> {
|
|
|
14
15
|
process.exit(1);
|
|
15
16
|
}
|
|
16
17
|
|
|
18
|
+
// Auto-sync in background (silent)
|
|
19
|
+
autoSync();
|
|
20
|
+
|
|
17
21
|
try {
|
|
18
22
|
console.log(chalk.dim('Fetching all memories...'));
|
|
19
23
|
const memories = await getAllMemories();
|