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.
Files changed (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +606 -0
  3. package/dist/commands/apply.d.ts +6 -0
  4. package/dist/commands/apply.d.ts.map +1 -0
  5. package/dist/commands/apply.js +337 -0
  6. package/dist/commands/apply.js.map +1 -0
  7. package/dist/commands/create.d.ts +13 -0
  8. package/dist/commands/create.d.ts.map +1 -0
  9. package/dist/commands/create.js +72 -0
  10. package/dist/commands/create.js.map +1 -0
  11. package/dist/commands/delete.d.ts +9 -0
  12. package/dist/commands/delete.d.ts.map +1 -0
  13. package/dist/commands/delete.js +179 -0
  14. package/dist/commands/delete.js.map +1 -0
  15. package/dist/commands/describe.d.ts +5 -0
  16. package/dist/commands/describe.d.ts.map +1 -0
  17. package/dist/commands/describe.js +121 -0
  18. package/dist/commands/describe.js.map +1 -0
  19. package/dist/commands/export.d.ts +6 -0
  20. package/dist/commands/export.d.ts.map +1 -0
  21. package/dist/commands/export.js +79 -0
  22. package/dist/commands/export.js.map +1 -0
  23. package/dist/commands/get.d.ts +5 -0
  24. package/dist/commands/get.d.ts.map +1 -0
  25. package/dist/commands/get.js +32 -0
  26. package/dist/commands/get.js.map +1 -0
  27. package/dist/commands/import.d.ts +10 -0
  28. package/dist/commands/import.d.ts.map +1 -0
  29. package/dist/commands/import.js +94 -0
  30. package/dist/commands/import.js.map +1 -0
  31. package/dist/commands/messages.d.ts +21 -0
  32. package/dist/commands/messages.d.ts.map +1 -0
  33. package/dist/commands/messages.js +254 -0
  34. package/dist/commands/messages.js.map +1 -0
  35. package/dist/commands/update.d.ts +11 -0
  36. package/dist/commands/update.d.ts.map +1 -0
  37. package/dist/commands/update.js +63 -0
  38. package/dist/commands/update.js.map +1 -0
  39. package/dist/index.d.ts +3 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +230 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/lib/agent-manager.d.ts +125 -0
  44. package/dist/lib/agent-manager.d.ts.map +1 -0
  45. package/dist/lib/agent-manager.js +254 -0
  46. package/dist/lib/agent-manager.js.map +1 -0
  47. package/dist/lib/agent-resolver.d.ts +12 -0
  48. package/dist/lib/agent-resolver.d.ts.map +1 -0
  49. package/dist/lib/agent-resolver.js +27 -0
  50. package/dist/lib/agent-resolver.js.map +1 -0
  51. package/dist/lib/block-manager.d.ts +63 -0
  52. package/dist/lib/block-manager.d.ts.map +1 -0
  53. package/dist/lib/block-manager.js +288 -0
  54. package/dist/lib/block-manager.js.map +1 -0
  55. package/dist/lib/diff-engine.d.ts +129 -0
  56. package/dist/lib/diff-engine.d.ts.map +1 -0
  57. package/dist/lib/diff-engine.js +391 -0
  58. package/dist/lib/diff-engine.js.map +1 -0
  59. package/dist/lib/error-handler.d.ts +9 -0
  60. package/dist/lib/error-handler.d.ts.map +1 -0
  61. package/dist/lib/error-handler.js +25 -0
  62. package/dist/lib/error-handler.js.map +1 -0
  63. package/dist/lib/file-content-tracker.d.ts +42 -0
  64. package/dist/lib/file-content-tracker.d.ts.map +1 -0
  65. package/dist/lib/file-content-tracker.js +128 -0
  66. package/dist/lib/file-content-tracker.js.map +1 -0
  67. package/dist/lib/fleet-parser.d.ts +14 -0
  68. package/dist/lib/fleet-parser.d.ts.map +1 -0
  69. package/dist/lib/fleet-parser.js +282 -0
  70. package/dist/lib/fleet-parser.js.map +1 -0
  71. package/dist/lib/letta-client.d.ts +61 -0
  72. package/dist/lib/letta-client.d.ts.map +1 -0
  73. package/dist/lib/letta-client.js +208 -0
  74. package/dist/lib/letta-client.js.map +1 -0
  75. package/dist/lib/output-formatter.d.ts +15 -0
  76. package/dist/lib/output-formatter.d.ts.map +1 -0
  77. package/dist/lib/output-formatter.js +51 -0
  78. package/dist/lib/output-formatter.js.map +1 -0
  79. package/dist/lib/resource-classifier.d.ts +27 -0
  80. package/dist/lib/resource-classifier.d.ts.map +1 -0
  81. package/dist/lib/resource-classifier.js +84 -0
  82. package/dist/lib/resource-classifier.js.map +1 -0
  83. package/dist/lib/response-normalizer.d.ts +6 -0
  84. package/dist/lib/response-normalizer.d.ts.map +1 -0
  85. package/dist/lib/response-normalizer.js +27 -0
  86. package/dist/lib/response-normalizer.js.map +1 -0
  87. package/dist/lib/validators.d.ts +9 -0
  88. package/dist/lib/validators.d.ts.map +1 -0
  89. package/dist/lib/validators.js +26 -0
  90. package/dist/lib/validators.js.map +1 -0
  91. package/dist/types/fleet-config.d.ts +44 -0
  92. package/dist/types/fleet-config.d.ts.map +1 -0
  93. package/dist/types/fleet-config.js +3 -0
  94. package/dist/types/fleet-config.js.map +1 -0
  95. package/package.json +61 -0
@@ -0,0 +1,125 @@
1
+ import { LettaClientWrapper } from './letta-client';
2
+ export interface AgentConfigHashes {
3
+ overall: string;
4
+ systemPrompt: string;
5
+ tools: string;
6
+ model: string;
7
+ memoryBlocks: string;
8
+ folders: string;
9
+ sharedBlocks: string;
10
+ }
11
+ export interface AgentVersion {
12
+ id: string;
13
+ name: string;
14
+ baseName: string;
15
+ configHashes: AgentConfigHashes;
16
+ version: string;
17
+ lastUpdated: string;
18
+ }
19
+ export declare class AgentManager {
20
+ private client;
21
+ private agentRegistry;
22
+ constructor(client: LettaClientWrapper);
23
+ /**
24
+ * Generates a content hash for system prompt versioning
25
+ */
26
+ private generateContentHash;
27
+ /**
28
+ * Generates a timestamp-based version for system prompt changes
29
+ */
30
+ private generateTimestampVersion;
31
+ /**
32
+ * Parses version from agent name (e.g., "recipe-assistant__v__20241202-abc123ef")
33
+ */
34
+ private parseVersionFromName;
35
+ /**
36
+ * Loads existing agents from the server and builds the registry
37
+ * Note: We only store basic info here. Full configuration comparison
38
+ * happens in getOrCreateAgentName when we have the desired config.
39
+ */
40
+ loadExistingAgents(): Promise<void>;
41
+ /**
42
+ * Generates granular configuration hashes for each component
43
+ */
44
+ private generateAgentConfigHashes;
45
+ /**
46
+ * Determines if an agent needs to be created/updated based on complete configuration
47
+ */
48
+ getOrCreateAgentName(baseName: string, agentConfig: {
49
+ systemPrompt: string;
50
+ tools: string[];
51
+ toolSourceHashes?: Record<string, string>;
52
+ model?: string;
53
+ embedding?: string;
54
+ contextWindow?: number;
55
+ memoryBlocks?: Array<{
56
+ name: string;
57
+ description: string;
58
+ limit: number;
59
+ value: string;
60
+ }>;
61
+ memoryBlockFileHashes?: Record<string, string>;
62
+ folders?: Array<{
63
+ name: string;
64
+ files: string[];
65
+ }>;
66
+ sharedBlocks?: string[];
67
+ }, verbose?: boolean): Promise<{
68
+ agentName: string;
69
+ shouldCreate: boolean;
70
+ existingAgent?: AgentVersion;
71
+ }>;
72
+ /**
73
+ * Identifies what has changed between existing and desired agent configuration
74
+ */
75
+ getConfigChanges(existing: AgentVersion, newConfig: {
76
+ systemPrompt: string;
77
+ tools: string[];
78
+ toolSourceHashes?: Record<string, string>;
79
+ model?: string;
80
+ embedding?: string;
81
+ contextWindow?: number;
82
+ memoryBlocks?: Array<{
83
+ name: string;
84
+ description: string;
85
+ limit: number;
86
+ value: string;
87
+ }>;
88
+ memoryBlockFileHashes?: Record<string, string>;
89
+ folders?: Array<{
90
+ name: string;
91
+ files: string[];
92
+ }>;
93
+ sharedBlocks?: string[];
94
+ }): {
95
+ hasChanges: boolean;
96
+ changedComponents: string[];
97
+ newHashes: AgentConfigHashes;
98
+ };
99
+ /**
100
+ * Updates the registry after creating a new agent
101
+ */
102
+ updateRegistry(agentName: string, agentConfig: {
103
+ systemPrompt: string;
104
+ tools: string[];
105
+ model?: string;
106
+ embedding?: string;
107
+ contextWindow?: number;
108
+ memoryBlocks?: Array<{
109
+ name: string;
110
+ description: string;
111
+ limit: number;
112
+ value: string;
113
+ }>;
114
+ folders?: Array<{
115
+ name: string;
116
+ files: string[];
117
+ }>;
118
+ sharedBlocks?: string[];
119
+ }, agentId: string): void;
120
+ /**
121
+ * Gets all agents with the same base name (for cleanup/management)
122
+ */
123
+ getAgentVersions(baseName: string): AgentVersion[];
124
+ }
125
+ //# sourceMappingURL=agent-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-manager.d.ts","sourceRoot":"","sources":["../../src/lib/agent-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,254 @@
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.AgentManager = void 0;
37
+ const response_normalizer_1 = require("./response-normalizer");
38
+ const crypto = __importStar(require("crypto"));
39
+ class AgentManager {
40
+ constructor(client) {
41
+ this.agentRegistry = new Map();
42
+ this.client = client;
43
+ }
44
+ /**
45
+ * Generates a content hash for system prompt versioning
46
+ */
47
+ generateContentHash(content) {
48
+ return crypto.createHash('sha256').update(content).digest('hex').substring(0, 16);
49
+ }
50
+ /**
51
+ * Generates a timestamp-based version for system prompt changes
52
+ */
53
+ generateTimestampVersion(contentHash) {
54
+ const now = new Date();
55
+ const timestamp = now.toISOString().slice(0, 10).replace(/-/g, ''); // YYYYMMDD
56
+ const shortHash = contentHash.substring(0, 8);
57
+ return `${timestamp}-${shortHash}`;
58
+ }
59
+ /**
60
+ * Parses version from agent name (e.g., "recipe-assistant__v__20241202-abc123ef")
61
+ */
62
+ parseVersionFromName(agentName) {
63
+ const versionMatch = agentName.match(/^(.+)__v__(.+)$/);
64
+ if (versionMatch) {
65
+ return { baseName: versionMatch[1], version: versionMatch[2] };
66
+ }
67
+ return { baseName: agentName, version: null };
68
+ }
69
+ /**
70
+ * Loads existing agents from the server and builds the registry
71
+ * Note: We only store basic info here. Full configuration comparison
72
+ * happens in getOrCreateAgentName when we have the desired config.
73
+ */
74
+ async loadExistingAgents() {
75
+ const agents = await this.client.listAgents();
76
+ const agentList = (0, response_normalizer_1.normalizeResponse)(agents);
77
+ for (const agent of agentList) {
78
+ if (agent.name && agent.system) {
79
+ // For existing agents, store basic info for lookup
80
+ // Full configuration hashing will be done during comparison
81
+ const configHashes = {
82
+ overall: '', // Will be populated during comparison
83
+ systemPrompt: this.generateContentHash(agent.system),
84
+ tools: '',
85
+ model: '',
86
+ memoryBlocks: '',
87
+ folders: '',
88
+ sharedBlocks: ''
89
+ };
90
+ const { baseName, version } = this.parseVersionFromName(agent.name);
91
+ const agentVersion = {
92
+ id: agent.id,
93
+ name: agent.name,
94
+ baseName: baseName,
95
+ configHashes: configHashes,
96
+ version: version || 'latest',
97
+ lastUpdated: agent.last_updated || new Date().toISOString()
98
+ };
99
+ // Store by base name for lookup
100
+ const existingAgent = this.agentRegistry.get(baseName);
101
+ if (!existingAgent || agentVersion.lastUpdated > existingAgent.lastUpdated) {
102
+ this.agentRegistry.set(baseName, agentVersion);
103
+ }
104
+ }
105
+ }
106
+ }
107
+ /**
108
+ * Generates granular configuration hashes for each component
109
+ */
110
+ generateAgentConfigHashes(config) {
111
+ // System prompt hash
112
+ const systemPromptHash = this.generateContentHash(config.systemPrompt);
113
+ // Tools hash - includes tool names and source code content when available
114
+ const toolsWithContent = (config.tools || []).map(toolName => ({
115
+ name: toolName,
116
+ sourceHash: config.toolSourceHashes?.[toolName] || ''
117
+ })).sort((a, b) => a.name.localeCompare(b.name));
118
+ const toolsHash = this.generateContentHash(JSON.stringify(toolsWithContent));
119
+ // Model configuration hash (model + embedding + context window)
120
+ const modelConfig = {
121
+ model: config.model || "google_ai/gemini-2.5-pro",
122
+ embedding: config.embedding || "letta/letta-free",
123
+ contextWindow: config.contextWindow || 64000
124
+ };
125
+ const modelHash = this.generateContentHash(JSON.stringify(modelConfig));
126
+ // Memory blocks hash - includes file content when available
127
+ const normalizedMemoryBlocks = (config.memoryBlocks || [])
128
+ .map(block => ({
129
+ name: block.name,
130
+ description: block.description,
131
+ limit: block.limit,
132
+ contentHash: config.memoryBlockFileHashes?.[block.name] || this.generateContentHash(block.value)
133
+ }))
134
+ .sort((a, b) => a.name.localeCompare(b.name));
135
+ const memoryBlocksHash = this.generateContentHash(JSON.stringify(normalizedMemoryBlocks));
136
+ // Folders hash - includes file contents when available
137
+ const normalizedFolders = (config.folders || [])
138
+ .map(folder => ({
139
+ name: folder.name,
140
+ files: [...folder.files].sort(),
141
+ fileContentHashes: folder.fileContentHashes || {}
142
+ }))
143
+ .sort((a, b) => a.name.localeCompare(b.name));
144
+ const foldersHash = this.generateContentHash(JSON.stringify(normalizedFolders));
145
+ // Shared blocks hash
146
+ const sharedBlocksHash = this.generateContentHash(JSON.stringify([...(config.sharedBlocks || [])].sort()));
147
+ // Overall hash combining all components
148
+ const overallHash = this.generateContentHash(JSON.stringify({
149
+ systemPrompt: systemPromptHash,
150
+ tools: toolsHash,
151
+ model: modelHash,
152
+ memoryBlocks: memoryBlocksHash,
153
+ folders: foldersHash,
154
+ sharedBlocks: sharedBlocksHash
155
+ }));
156
+ return {
157
+ overall: overallHash,
158
+ systemPrompt: systemPromptHash,
159
+ tools: toolsHash,
160
+ model: modelHash,
161
+ memoryBlocks: memoryBlocksHash,
162
+ folders: foldersHash,
163
+ sharedBlocks: sharedBlocksHash
164
+ };
165
+ }
166
+ /**
167
+ * Determines if an agent needs to be created/updated based on complete configuration
168
+ */
169
+ async getOrCreateAgentName(baseName, agentConfig, verbose = false) {
170
+ const desiredConfigHashes = this.generateAgentConfigHashes(agentConfig);
171
+ const existingAgent = this.agentRegistry.get(baseName);
172
+ if (!existingAgent) {
173
+ // No agent with this base name exists
174
+ if (verbose)
175
+ console.log(` No existing agent found for: ${baseName}`);
176
+ return {
177
+ agentName: baseName,
178
+ shouldCreate: true
179
+ };
180
+ }
181
+ // For existing agents, we need to compare properly by generating current config hash
182
+ // from the server state. For now, we'll always prefer partial updates over recreation.
183
+ if (verbose)
184
+ console.log(` Found existing agent: ${existingAgent.name}, checking for changes...`);
185
+ // Always return existing agent to trigger partial update logic in apply command
186
+ // The actual comparison will happen in the DiffEngine
187
+ return {
188
+ agentName: existingAgent.name,
189
+ shouldCreate: false,
190
+ existingAgent
191
+ };
192
+ }
193
+ /**
194
+ * Identifies what has changed between existing and desired agent configuration
195
+ */
196
+ getConfigChanges(existing, newConfig) {
197
+ const newHashes = this.generateAgentConfigHashes(newConfig);
198
+ const changedComponents = [];
199
+ // Compare each component hash
200
+ if (existing.configHashes.systemPrompt !== newHashes.systemPrompt) {
201
+ changedComponents.push('systemPrompt');
202
+ }
203
+ if (existing.configHashes.tools !== newHashes.tools) {
204
+ changedComponents.push('tools');
205
+ }
206
+ if (existing.configHashes.model !== newHashes.model) {
207
+ changedComponents.push('model');
208
+ }
209
+ if (existing.configHashes.memoryBlocks !== newHashes.memoryBlocks) {
210
+ changedComponents.push('memoryBlocks');
211
+ }
212
+ if (existing.configHashes.folders !== newHashes.folders) {
213
+ changedComponents.push('folders');
214
+ }
215
+ if (existing.configHashes.sharedBlocks !== newHashes.sharedBlocks) {
216
+ changedComponents.push('sharedBlocks');
217
+ }
218
+ return {
219
+ hasChanges: changedComponents.length > 0,
220
+ changedComponents,
221
+ newHashes
222
+ };
223
+ }
224
+ /**
225
+ * Updates the registry after creating a new agent
226
+ */
227
+ updateRegistry(agentName, agentConfig, agentId) {
228
+ const configHashes = this.generateAgentConfigHashes(agentConfig);
229
+ const { baseName, version } = this.parseVersionFromName(agentName);
230
+ const agentVersion = {
231
+ id: agentId,
232
+ name: agentName,
233
+ baseName: baseName,
234
+ configHashes: configHashes,
235
+ version: version || 'latest',
236
+ lastUpdated: new Date().toISOString()
237
+ };
238
+ this.agentRegistry.set(baseName, agentVersion);
239
+ }
240
+ /**
241
+ * Gets all agents with the same base name (for cleanup/management)
242
+ */
243
+ getAgentVersions(baseName) {
244
+ const versions = [];
245
+ for (const agent of this.agentRegistry.values()) {
246
+ if (agent.baseName === baseName) {
247
+ versions.push(agent);
248
+ }
249
+ }
250
+ return versions.sort((a, b) => b.lastUpdated.localeCompare(a.lastUpdated));
251
+ }
252
+ }
253
+ exports.AgentManager = AgentManager;
254
+ //# sourceMappingURL=agent-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-manager.js","sourceRoot":"","sources":["../../src/lib/agent-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { LettaClientWrapper } from './letta-client';
2
+ export declare class AgentResolver {
3
+ private client;
4
+ constructor(client: LettaClientWrapper);
5
+ findAgentByName(name: string): Promise<{
6
+ agent: any;
7
+ allAgents: any[];
8
+ }>;
9
+ getAllAgents(): Promise<any[]>;
10
+ getAgentWithDetails(agentId: string): Promise<any>;
11
+ }
12
+ //# sourceMappingURL=agent-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-resolver.d.ts","sourceRoot":"","sources":["../../src/lib/agent-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGpD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,EAAE,kBAAkB;IAIhC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,SAAS,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;IAYxE,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAK9B,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CAGzD"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AgentResolver = void 0;
4
+ const response_normalizer_1 = require("./response-normalizer");
5
+ class AgentResolver {
6
+ constructor(client) {
7
+ this.client = client;
8
+ }
9
+ async findAgentByName(name) {
10
+ const agents = await this.client.listAgents();
11
+ const agentList = (0, response_normalizer_1.normalizeResponse)(agents);
12
+ const agent = agentList.find((a) => a.name === name);
13
+ if (!agent) {
14
+ throw new Error(`Agent "${name}" not found`);
15
+ }
16
+ return { agent, allAgents: agentList };
17
+ }
18
+ async getAllAgents() {
19
+ const agents = await this.client.listAgents();
20
+ return (0, response_normalizer_1.normalizeResponse)(agents);
21
+ }
22
+ async getAgentWithDetails(agentId) {
23
+ return await this.client.getAgent(agentId);
24
+ }
25
+ }
26
+ exports.AgentResolver = AgentResolver;
27
+ //# sourceMappingURL=agent-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-resolver.js","sourceRoot":"","sources":["../../src/lib/agent-resolver.ts"],"names":[],"mappings":";;;AACA,+DAA0D;AAE1D,MAAa,aAAa;IAGxB,YAAY,MAA0B;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAY;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAA,uCAAiB,EAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAE1D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,aAAa,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC9C,OAAO,IAAA,uCAAiB,EAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAAe;QACvC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;CACF;AA3BD,sCA2BC"}
@@ -0,0 +1,63 @@
1
+ import { LettaClientWrapper } from './letta-client';
2
+ export interface BlockVersion {
3
+ id: string;
4
+ label: string;
5
+ description: string;
6
+ value: string;
7
+ limit: number;
8
+ contentHash: string;
9
+ version: string;
10
+ isShared: boolean;
11
+ lastUpdated: string;
12
+ userDefined: boolean;
13
+ }
14
+ export declare class BlockManager {
15
+ private client;
16
+ private blockRegistry;
17
+ constructor(client: LettaClientWrapper);
18
+ /**
19
+ * Generates a content hash for version detection
20
+ */
21
+ private generateContentHash;
22
+ /**
23
+ * Loads existing blocks from the server and builds the registry
24
+ */
25
+ loadExistingBlocks(): Promise<void>;
26
+ /**
27
+ * Parses version string from block label (e.g., "block_name__v__20241202-a1b2c3d4" -> "20241202-a1b2c3d4")
28
+ */
29
+ private parseVersionFromLabel;
30
+ /**
31
+ * Gets the registry key for a block
32
+ */
33
+ private getBlockKey;
34
+ /**
35
+ * Generates a timestamp-based version string
36
+ */
37
+ private generateTimestampVersion;
38
+ /**
39
+ * Validates and sanitizes user-defined version tags
40
+ */
41
+ private validateUserVersion;
42
+ /**
43
+ * Creates a versioned block label
44
+ */
45
+ private createVersionedLabel;
46
+ /**
47
+ * Gets or creates a shared block, with enhanced versioning support
48
+ */
49
+ getOrCreateSharedBlock(blockConfig: any): Promise<string>;
50
+ /**
51
+ * Gets or creates an agent-specific block with enhanced versioning
52
+ */
53
+ getOrCreateAgentBlock(blockConfig: any, agentName: string): Promise<string>;
54
+ /**
55
+ * Gets the shared block ID by name
56
+ */
57
+ getSharedBlockId(blockName: string): string | null;
58
+ /**
59
+ * Lists all block versions for debugging/reporting
60
+ */
61
+ getBlockRegistry(): Map<string, BlockVersion>;
62
+ }
63
+ //# sourceMappingURL=block-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-manager.d.ts","sourceRoot":"","sources":["../../src/lib/block-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAIpD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,aAAa,CAAmC;gBAE5C,MAAM,EAAE,kBAAkB;IAItC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BzC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAK7B;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAOhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;OAEG;IACG,sBAAsB,CAAC,WAAW,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAqF/D;;OAEG;IACG,qBAAqB,CAAC,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsFjF;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMlD;;OAEG;IACH,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;CAG9C"}