lettactl 0.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/LICENSE +21 -0
- package/README.md +606 -0
- package/dist/commands/apply.d.ts +6 -0
- package/dist/commands/apply.d.ts.map +1 -0
- package/dist/commands/apply.js +337 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/create.d.ts +13 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +72 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/delete.d.ts +9 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +179 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/describe.d.ts +5 -0
- package/dist/commands/describe.d.ts.map +1 -0
- package/dist/commands/describe.js +121 -0
- package/dist/commands/describe.js.map +1 -0
- package/dist/commands/export.d.ts +6 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +79 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/get.d.ts +5 -0
- package/dist/commands/get.d.ts.map +1 -0
- package/dist/commands/get.js +32 -0
- package/dist/commands/get.js.map +1 -0
- package/dist/commands/import.d.ts +10 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +94 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/messages.d.ts +21 -0
- package/dist/commands/messages.d.ts.map +1 -0
- package/dist/commands/messages.js +254 -0
- package/dist/commands/messages.js.map +1 -0
- package/dist/commands/update.d.ts +11 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +63 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +230 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/agent-manager.d.ts +125 -0
- package/dist/lib/agent-manager.d.ts.map +1 -0
- package/dist/lib/agent-manager.js +254 -0
- package/dist/lib/agent-manager.js.map +1 -0
- package/dist/lib/agent-resolver.d.ts +12 -0
- package/dist/lib/agent-resolver.d.ts.map +1 -0
- package/dist/lib/agent-resolver.js +27 -0
- package/dist/lib/agent-resolver.js.map +1 -0
- package/dist/lib/block-manager.d.ts +63 -0
- package/dist/lib/block-manager.d.ts.map +1 -0
- package/dist/lib/block-manager.js +288 -0
- package/dist/lib/block-manager.js.map +1 -0
- package/dist/lib/diff-engine.d.ts +129 -0
- package/dist/lib/diff-engine.d.ts.map +1 -0
- package/dist/lib/diff-engine.js +391 -0
- package/dist/lib/diff-engine.js.map +1 -0
- package/dist/lib/error-handler.d.ts +9 -0
- package/dist/lib/error-handler.d.ts.map +1 -0
- package/dist/lib/error-handler.js +25 -0
- package/dist/lib/error-handler.js.map +1 -0
- package/dist/lib/file-content-tracker.d.ts +42 -0
- package/dist/lib/file-content-tracker.d.ts.map +1 -0
- package/dist/lib/file-content-tracker.js +128 -0
- package/dist/lib/file-content-tracker.js.map +1 -0
- package/dist/lib/fleet-parser.d.ts +14 -0
- package/dist/lib/fleet-parser.d.ts.map +1 -0
- package/dist/lib/fleet-parser.js +282 -0
- package/dist/lib/fleet-parser.js.map +1 -0
- package/dist/lib/letta-client.d.ts +61 -0
- package/dist/lib/letta-client.d.ts.map +1 -0
- package/dist/lib/letta-client.js +208 -0
- package/dist/lib/letta-client.js.map +1 -0
- package/dist/lib/output-formatter.d.ts +15 -0
- package/dist/lib/output-formatter.d.ts.map +1 -0
- package/dist/lib/output-formatter.js +51 -0
- package/dist/lib/output-formatter.js.map +1 -0
- package/dist/lib/resource-classifier.d.ts +27 -0
- package/dist/lib/resource-classifier.d.ts.map +1 -0
- package/dist/lib/resource-classifier.js +84 -0
- package/dist/lib/resource-classifier.js.map +1 -0
- package/dist/lib/response-normalizer.d.ts +6 -0
- package/dist/lib/response-normalizer.d.ts.map +1 -0
- package/dist/lib/response-normalizer.js +27 -0
- package/dist/lib/response-normalizer.js.map +1 -0
- package/dist/lib/validators.d.ts +9 -0
- package/dist/lib/validators.d.ts.map +1 -0
- package/dist/lib/validators.js +26 -0
- package/dist/lib/validators.js.map +1 -0
- package/dist/types/fleet-config.d.ts +44 -0
- package/dist/types/fleet-config.d.ts.map +1 -0
- package/dist/types/fleet-config.js +3 -0
- package/dist/types/fleet-config.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,288 @@
|
|
|
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.BlockManager = void 0;
|
|
37
|
+
const response_normalizer_1 = require("./response-normalizer");
|
|
38
|
+
const crypto = __importStar(require("crypto"));
|
|
39
|
+
class BlockManager {
|
|
40
|
+
constructor(client) {
|
|
41
|
+
this.blockRegistry = new Map();
|
|
42
|
+
this.client = client;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Generates a content hash for version detection
|
|
46
|
+
*/
|
|
47
|
+
generateContentHash(content) {
|
|
48
|
+
return crypto.createHash('sha256').update(content).digest('hex').substring(0, 16);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Loads existing blocks from the server and builds the registry
|
|
52
|
+
*/
|
|
53
|
+
async loadExistingBlocks() {
|
|
54
|
+
const blocks = await this.client.listBlocks();
|
|
55
|
+
const blockList = (0, response_normalizer_1.normalizeResponse)(blocks);
|
|
56
|
+
for (const block of blockList) {
|
|
57
|
+
if (block.label && block.value) {
|
|
58
|
+
const contentHash = this.generateContentHash(block.value);
|
|
59
|
+
const version = this.parseVersionFromLabel(block.label);
|
|
60
|
+
const isShared = block.label.startsWith('shared_');
|
|
61
|
+
const blockVersion = {
|
|
62
|
+
id: block.id,
|
|
63
|
+
label: block.label,
|
|
64
|
+
description: block.description || '',
|
|
65
|
+
value: block.value,
|
|
66
|
+
limit: block.limit || 0,
|
|
67
|
+
contentHash,
|
|
68
|
+
version,
|
|
69
|
+
isShared,
|
|
70
|
+
lastUpdated: block.updated_at || new Date().toISOString(),
|
|
71
|
+
userDefined: false // We can't know if existing blocks had user-defined versions
|
|
72
|
+
};
|
|
73
|
+
this.blockRegistry.set(this.getBlockKey(block.label, isShared), blockVersion);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Parses version string from block label (e.g., "block_name__v__20241202-a1b2c3d4" -> "20241202-a1b2c3d4")
|
|
79
|
+
*/
|
|
80
|
+
parseVersionFromLabel(label) {
|
|
81
|
+
const versionMatch = label.match(/__v__(.+)$/);
|
|
82
|
+
return versionMatch ? versionMatch[1] : 'initial';
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Gets the registry key for a block
|
|
86
|
+
*/
|
|
87
|
+
getBlockKey(baseName, isShared) {
|
|
88
|
+
const cleanName = baseName.replace(/__v__.+$/, ''); // Remove version suffix
|
|
89
|
+
return isShared ? `shared:${cleanName}` : cleanName;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Generates a timestamp-based version string
|
|
93
|
+
*/
|
|
94
|
+
generateTimestampVersion(contentHash) {
|
|
95
|
+
const now = new Date();
|
|
96
|
+
const timestamp = now.toISOString().slice(0, 10).replace(/-/g, ''); // YYYYMMDD
|
|
97
|
+
const shortHash = contentHash.substring(0, 8);
|
|
98
|
+
return `${timestamp}-${shortHash}`;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Validates and sanitizes user-defined version tags
|
|
102
|
+
*/
|
|
103
|
+
validateUserVersion(version) {
|
|
104
|
+
// Remove spaces, convert to lowercase, replace invalid chars with dashes
|
|
105
|
+
return version.trim().toLowerCase().replace(/[^a-z0-9.-]/g, '-');
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Creates a versioned block label
|
|
109
|
+
*/
|
|
110
|
+
createVersionedLabel(baseName, version, isFirstVersion = false) {
|
|
111
|
+
return isFirstVersion && version === 'initial' ? baseName : `${baseName}__v__${version}`;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Gets or creates a shared block, with enhanced versioning support
|
|
115
|
+
*/
|
|
116
|
+
async getOrCreateSharedBlock(blockConfig) {
|
|
117
|
+
const blockKey = this.getBlockKey(blockConfig.name, true);
|
|
118
|
+
const contentHash = this.generateContentHash(blockConfig.value);
|
|
119
|
+
const existing = this.blockRegistry.get(blockKey);
|
|
120
|
+
// Determine version strategy
|
|
121
|
+
let newVersion;
|
|
122
|
+
let userDefined = false;
|
|
123
|
+
if (blockConfig.version) {
|
|
124
|
+
newVersion = this.validateUserVersion(blockConfig.version);
|
|
125
|
+
userDefined = true;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
newVersion = existing ? this.generateTimestampVersion(contentHash) : 'initial';
|
|
129
|
+
}
|
|
130
|
+
if (existing) {
|
|
131
|
+
// Check if content has changed or user wants a specific version
|
|
132
|
+
if (existing.contentHash === contentHash && !blockConfig.version) {
|
|
133
|
+
console.log(`Using existing shared block: ${existing.label}`);
|
|
134
|
+
return existing.id;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
// Content changed or user specified version
|
|
138
|
+
const newLabel = this.createVersionedLabel(blockConfig.name, newVersion);
|
|
139
|
+
const reason = blockConfig.version
|
|
140
|
+
? `user tagged as '${newVersion}'`
|
|
141
|
+
: `content changed (${newVersion})`;
|
|
142
|
+
console.log(`Creating shared block ${newLabel} (${reason}, was ${existing.label})`);
|
|
143
|
+
const newBlock = await this.client.createBlock({
|
|
144
|
+
label: newLabel,
|
|
145
|
+
description: blockConfig.description,
|
|
146
|
+
value: blockConfig.value,
|
|
147
|
+
limit: blockConfig.limit
|
|
148
|
+
});
|
|
149
|
+
const blockVersion = {
|
|
150
|
+
id: newBlock.id,
|
|
151
|
+
label: newLabel,
|
|
152
|
+
description: blockConfig.description,
|
|
153
|
+
value: blockConfig.value,
|
|
154
|
+
limit: blockConfig.limit,
|
|
155
|
+
contentHash,
|
|
156
|
+
version: newVersion,
|
|
157
|
+
isShared: true,
|
|
158
|
+
lastUpdated: new Date().toISOString(),
|
|
159
|
+
userDefined
|
|
160
|
+
};
|
|
161
|
+
this.blockRegistry.set(blockKey, blockVersion);
|
|
162
|
+
return newBlock.id;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
// Create new shared block
|
|
167
|
+
const isFirstVersion = newVersion === 'initial';
|
|
168
|
+
const newLabel = this.createVersionedLabel(blockConfig.name, newVersion, isFirstVersion);
|
|
169
|
+
console.log(`Creating new shared block: ${newLabel}${userDefined ? ` (tagged: ${newVersion})` : ''}`);
|
|
170
|
+
const newBlock = await this.client.createBlock({
|
|
171
|
+
label: newLabel,
|
|
172
|
+
description: blockConfig.description,
|
|
173
|
+
value: blockConfig.value,
|
|
174
|
+
limit: blockConfig.limit
|
|
175
|
+
});
|
|
176
|
+
const blockVersion = {
|
|
177
|
+
id: newBlock.id,
|
|
178
|
+
label: newLabel,
|
|
179
|
+
description: blockConfig.description,
|
|
180
|
+
value: blockConfig.value,
|
|
181
|
+
limit: blockConfig.limit,
|
|
182
|
+
contentHash,
|
|
183
|
+
version: newVersion,
|
|
184
|
+
isShared: true,
|
|
185
|
+
lastUpdated: new Date().toISOString(),
|
|
186
|
+
userDefined
|
|
187
|
+
};
|
|
188
|
+
this.blockRegistry.set(blockKey, blockVersion);
|
|
189
|
+
return newBlock.id;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Gets or creates an agent-specific block with enhanced versioning
|
|
194
|
+
*/
|
|
195
|
+
async getOrCreateAgentBlock(blockConfig, agentName) {
|
|
196
|
+
const fullBlockName = `${blockConfig.name}`;
|
|
197
|
+
const blockKey = this.getBlockKey(fullBlockName, false);
|
|
198
|
+
const contentHash = this.generateContentHash(blockConfig.value);
|
|
199
|
+
const existing = this.blockRegistry.get(blockKey);
|
|
200
|
+
// Determine version strategy
|
|
201
|
+
let newVersion;
|
|
202
|
+
let userDefined = false;
|
|
203
|
+
if (blockConfig.version) {
|
|
204
|
+
newVersion = this.validateUserVersion(blockConfig.version);
|
|
205
|
+
userDefined = true;
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
newVersion = existing ? this.generateTimestampVersion(contentHash) : 'initial';
|
|
209
|
+
}
|
|
210
|
+
if (existing) {
|
|
211
|
+
// Check if content has changed or user wants a specific version
|
|
212
|
+
if (existing.contentHash === contentHash && !blockConfig.version) {
|
|
213
|
+
console.log(`Using existing block: ${existing.label}`);
|
|
214
|
+
return existing.id;
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
// Content changed or user specified version
|
|
218
|
+
const newLabel = this.createVersionedLabel(fullBlockName, newVersion);
|
|
219
|
+
const reason = blockConfig.version
|
|
220
|
+
? `user tagged as '${newVersion}'`
|
|
221
|
+
: `content changed (${newVersion})`;
|
|
222
|
+
console.log(`Creating block ${newLabel} (${reason}, was ${existing.label})`);
|
|
223
|
+
const newBlock = await this.client.createBlock({
|
|
224
|
+
label: newLabel,
|
|
225
|
+
description: blockConfig.description,
|
|
226
|
+
value: blockConfig.value,
|
|
227
|
+
limit: blockConfig.limit
|
|
228
|
+
});
|
|
229
|
+
const blockVersion = {
|
|
230
|
+
id: newBlock.id,
|
|
231
|
+
label: newLabel,
|
|
232
|
+
description: blockConfig.description,
|
|
233
|
+
value: blockConfig.value,
|
|
234
|
+
limit: blockConfig.limit,
|
|
235
|
+
contentHash,
|
|
236
|
+
version: newVersion,
|
|
237
|
+
isShared: false,
|
|
238
|
+
lastUpdated: new Date().toISOString(),
|
|
239
|
+
userDefined
|
|
240
|
+
};
|
|
241
|
+
this.blockRegistry.set(blockKey, blockVersion);
|
|
242
|
+
return newBlock.id;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
// Create new agent block
|
|
247
|
+
const isFirstVersion = newVersion === 'initial';
|
|
248
|
+
const newLabel = this.createVersionedLabel(fullBlockName, newVersion, isFirstVersion);
|
|
249
|
+
console.log(`Creating new block: ${newLabel}${userDefined ? ` (tagged: ${newVersion})` : ''}`);
|
|
250
|
+
const newBlock = await this.client.createBlock({
|
|
251
|
+
label: newLabel,
|
|
252
|
+
description: blockConfig.description,
|
|
253
|
+
value: blockConfig.value,
|
|
254
|
+
limit: blockConfig.limit
|
|
255
|
+
});
|
|
256
|
+
const blockVersion = {
|
|
257
|
+
id: newBlock.id,
|
|
258
|
+
label: newLabel,
|
|
259
|
+
description: blockConfig.description,
|
|
260
|
+
value: blockConfig.value,
|
|
261
|
+
limit: blockConfig.limit,
|
|
262
|
+
contentHash,
|
|
263
|
+
version: newVersion,
|
|
264
|
+
isShared: false,
|
|
265
|
+
lastUpdated: new Date().toISOString(),
|
|
266
|
+
userDefined
|
|
267
|
+
};
|
|
268
|
+
this.blockRegistry.set(blockKey, blockVersion);
|
|
269
|
+
return newBlock.id;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Gets the shared block ID by name
|
|
274
|
+
*/
|
|
275
|
+
getSharedBlockId(blockName) {
|
|
276
|
+
const blockKey = this.getBlockKey(blockName, true);
|
|
277
|
+
const existing = this.blockRegistry.get(blockKey);
|
|
278
|
+
return existing ? existing.id : null;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Lists all block versions for debugging/reporting
|
|
282
|
+
*/
|
|
283
|
+
getBlockRegistry() {
|
|
284
|
+
return new Map(this.blockRegistry);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
exports.BlockManager = BlockManager;
|
|
288
|
+
//# sourceMappingURL=block-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-manager.js","sourceRoot":"","sources":["../../src/lib/block-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { LettaClientWrapper } from './letta-client';
|
|
2
|
+
import { AgentVersion } from './agent-manager';
|
|
3
|
+
import { BlockManager } from './block-manager';
|
|
4
|
+
export interface ToolDiff {
|
|
5
|
+
toAdd: Array<{
|
|
6
|
+
name: string;
|
|
7
|
+
id: string;
|
|
8
|
+
}>;
|
|
9
|
+
toRemove: Array<{
|
|
10
|
+
name: string;
|
|
11
|
+
id: string;
|
|
12
|
+
}>;
|
|
13
|
+
toUpdate: Array<{
|
|
14
|
+
name: string;
|
|
15
|
+
currentId: string;
|
|
16
|
+
newId: string;
|
|
17
|
+
reason: string;
|
|
18
|
+
}>;
|
|
19
|
+
unchanged: Array<{
|
|
20
|
+
name: string;
|
|
21
|
+
id: string;
|
|
22
|
+
}>;
|
|
23
|
+
}
|
|
24
|
+
export interface BlockDiff {
|
|
25
|
+
toAdd: Array<{
|
|
26
|
+
name: string;
|
|
27
|
+
id: string;
|
|
28
|
+
}>;
|
|
29
|
+
toRemove: Array<{
|
|
30
|
+
name: string;
|
|
31
|
+
id: string;
|
|
32
|
+
}>;
|
|
33
|
+
toUpdate: Array<{
|
|
34
|
+
name: string;
|
|
35
|
+
currentId: string;
|
|
36
|
+
newId: string;
|
|
37
|
+
}>;
|
|
38
|
+
unchanged: Array<{
|
|
39
|
+
name: string;
|
|
40
|
+
id: string;
|
|
41
|
+
}>;
|
|
42
|
+
}
|
|
43
|
+
export interface FolderDiff {
|
|
44
|
+
toAttach: Array<{
|
|
45
|
+
name: string;
|
|
46
|
+
id: string;
|
|
47
|
+
}>;
|
|
48
|
+
toDetach: Array<{
|
|
49
|
+
name: string;
|
|
50
|
+
id: string;
|
|
51
|
+
}>;
|
|
52
|
+
toUpdate: Array<{
|
|
53
|
+
name: string;
|
|
54
|
+
id: string;
|
|
55
|
+
filesToAdd: string[];
|
|
56
|
+
filesToRemove: string[];
|
|
57
|
+
filesToUpdate: string[];
|
|
58
|
+
}>;
|
|
59
|
+
unchanged: Array<{
|
|
60
|
+
name: string;
|
|
61
|
+
id: string;
|
|
62
|
+
}>;
|
|
63
|
+
}
|
|
64
|
+
export interface AgentUpdateOperations {
|
|
65
|
+
updateFields?: {
|
|
66
|
+
systemPrompt?: string;
|
|
67
|
+
model?: string;
|
|
68
|
+
embedding?: string;
|
|
69
|
+
contextWindow?: number;
|
|
70
|
+
};
|
|
71
|
+
tools?: ToolDiff;
|
|
72
|
+
blocks?: BlockDiff;
|
|
73
|
+
folders?: FolderDiff;
|
|
74
|
+
preservesConversation: boolean;
|
|
75
|
+
operationCount: number;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* DiffEngine determines what specific operations are needed to update an agent
|
|
79
|
+
* while preserving conversation history whenever possible
|
|
80
|
+
*/
|
|
81
|
+
export declare class DiffEngine {
|
|
82
|
+
private client;
|
|
83
|
+
private blockManager;
|
|
84
|
+
private basePath;
|
|
85
|
+
constructor(client: LettaClientWrapper, blockManager: BlockManager, basePath?: string);
|
|
86
|
+
/**
|
|
87
|
+
* Analyzes differences between existing and desired agent configuration
|
|
88
|
+
* and generates specific update operations that preserve conversation history
|
|
89
|
+
*/
|
|
90
|
+
generateUpdateOperations(existingAgent: AgentVersion, desiredConfig: {
|
|
91
|
+
systemPrompt: string;
|
|
92
|
+
tools: string[];
|
|
93
|
+
toolSourceHashes?: Record<string, string>;
|
|
94
|
+
model?: string;
|
|
95
|
+
embedding?: string;
|
|
96
|
+
contextWindow?: number;
|
|
97
|
+
memoryBlocks?: Array<{
|
|
98
|
+
name: string;
|
|
99
|
+
description: string;
|
|
100
|
+
limit: number;
|
|
101
|
+
value: string;
|
|
102
|
+
}>;
|
|
103
|
+
folders?: Array<{
|
|
104
|
+
name: string;
|
|
105
|
+
files: string[];
|
|
106
|
+
}>;
|
|
107
|
+
sharedBlocks?: string[];
|
|
108
|
+
}, toolRegistry: Map<string, string>, folderRegistry: Map<string, string>, verbose?: boolean): Promise<AgentUpdateOperations>;
|
|
109
|
+
private analyzeToolChanges;
|
|
110
|
+
private analyzeBlockChanges;
|
|
111
|
+
private analyzeFolderChanges;
|
|
112
|
+
/**
|
|
113
|
+
* Applies the update operations to the agent
|
|
114
|
+
*/
|
|
115
|
+
applyUpdateOperations(agentId: string, operations: AgentUpdateOperations, verbose?: boolean): Promise<void>;
|
|
116
|
+
/**
|
|
117
|
+
* Helper method to add a file to an existing folder
|
|
118
|
+
*/
|
|
119
|
+
private addFileToFolder;
|
|
120
|
+
/**
|
|
121
|
+
* Helper method to remove a file from a folder
|
|
122
|
+
*/
|
|
123
|
+
private removeFileFromFolder;
|
|
124
|
+
/**
|
|
125
|
+
* Helper method to update an existing file in a folder
|
|
126
|
+
*/
|
|
127
|
+
private updateFileInFolder;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=diff-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-engine.d.ts","sourceRoot":"","sources":["../../src/lib/diff-engine.ts"],"names":[],"mappings":"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"}
|