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,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.OutputFormatter = void 0;
|
|
7
|
+
const cli_table3_1 = __importDefault(require("cli-table3"));
|
|
8
|
+
class OutputFormatter {
|
|
9
|
+
/**
|
|
10
|
+
* Formats output based on the specified format
|
|
11
|
+
*/
|
|
12
|
+
static formatOutput(data, format) {
|
|
13
|
+
switch (format) {
|
|
14
|
+
case 'json':
|
|
15
|
+
return JSON.stringify(data, null, 2);
|
|
16
|
+
case 'yaml':
|
|
17
|
+
// TODO: Implement YAML formatting
|
|
18
|
+
return 'YAML output not yet implemented';
|
|
19
|
+
default:
|
|
20
|
+
return ''; // Default handling should be done by caller
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Creates a table for agent listing
|
|
25
|
+
*/
|
|
26
|
+
static createAgentTable(agents) {
|
|
27
|
+
const table = new cli_table3_1.default({
|
|
28
|
+
head: ['NAME', 'ID'],
|
|
29
|
+
colWidths: [30, 50]
|
|
30
|
+
});
|
|
31
|
+
for (const agent of agents) {
|
|
32
|
+
table.push([
|
|
33
|
+
agent.name || 'Unknown',
|
|
34
|
+
agent.id || 'Unknown'
|
|
35
|
+
]);
|
|
36
|
+
}
|
|
37
|
+
return table.toString();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Handles JSON output if requested, returns true if handled
|
|
41
|
+
*/
|
|
42
|
+
static handleJsonOutput(data, format) {
|
|
43
|
+
if (format === 'json') {
|
|
44
|
+
console.log(JSON.stringify(data, null, 2));
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.OutputFormatter = OutputFormatter;
|
|
51
|
+
//# sourceMappingURL=output-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-formatter.js","sourceRoot":"","sources":["../../src/lib/output-formatter.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA+B;AAE/B,MAAa,eAAe;IAC1B;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,IAAS,EAAE,MAAc;QAC3C,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAEvC,KAAK,MAAM;gBACT,kCAAkC;gBAClC,OAAO,iCAAiC,CAAC;YAE3C;gBACE,OAAO,EAAE,CAAC,CAAC,4CAA4C;QAC3D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAa;QACnC,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;YACtB,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;YACpB,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;SACpB,CAAC,CAAC;QAEH,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,CAAC,IAAI,IAAI,SAAS;gBACvB,KAAK,CAAC,EAAE,IAAI,SAAS;aACtB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAS,EAAE,MAAe;QAChD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AA/CD,0CA+CC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { LettaClientWrapper } from './letta-client';
|
|
2
|
+
export declare class ResourceClassifier {
|
|
3
|
+
private client;
|
|
4
|
+
constructor(client: LettaClientWrapper);
|
|
5
|
+
/**
|
|
6
|
+
* Determines if a folder is shared based on naming conventions
|
|
7
|
+
*/
|
|
8
|
+
isSharedFolder(folder: any): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Determines if a memory block is shared based on naming conventions
|
|
11
|
+
*/
|
|
12
|
+
isSharedBlock(block: any): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Checks if a folder is used by other agents
|
|
15
|
+
*/
|
|
16
|
+
isFolderUsedByOtherAgents(folderId: string, excludeAgentId: string, allAgents: any[]): Promise<boolean>;
|
|
17
|
+
/**
|
|
18
|
+
* Checks if a memory block is used by other agents
|
|
19
|
+
*/
|
|
20
|
+
isBlockUsedByOtherAgents(blockId: string, excludeAgentId: string, allAgents: any[]): Promise<boolean>;
|
|
21
|
+
/**
|
|
22
|
+
* Identifies agent-specific blocks based on naming patterns
|
|
23
|
+
* Uses simple heuristic: blocks containing the agent name (excluding shared blocks)
|
|
24
|
+
*/
|
|
25
|
+
getAgentSpecificBlocks(allBlocks: any[], agentName: string): any[];
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=resource-classifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-classifier.d.ts","sourceRoot":"","sources":["../../src/lib/resource-classifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGpD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,EAAE,kBAAkB;IAItC;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO;IAMpC;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAMlC;;OAEG;IACG,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB7G;;OAEG;IACG,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB3G;;;OAGG;IACH,sBAAsB,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE;CAenE"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ResourceClassifier = void 0;
|
|
4
|
+
const response_normalizer_1 = require("./response-normalizer");
|
|
5
|
+
class ResourceClassifier {
|
|
6
|
+
constructor(client) {
|
|
7
|
+
this.client = client;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Determines if a folder is shared based on naming conventions
|
|
11
|
+
*/
|
|
12
|
+
isSharedFolder(folder) {
|
|
13
|
+
if (!folder.name)
|
|
14
|
+
return false;
|
|
15
|
+
return folder.name.includes('shared');
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Determines if a memory block is shared based on naming conventions
|
|
19
|
+
*/
|
|
20
|
+
isSharedBlock(block) {
|
|
21
|
+
if (!block.label)
|
|
22
|
+
return false;
|
|
23
|
+
return block.label.startsWith('shared_');
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Checks if a folder is used by other agents
|
|
27
|
+
*/
|
|
28
|
+
async isFolderUsedByOtherAgents(folderId, excludeAgentId, allAgents) {
|
|
29
|
+
const otherAgents = allAgents.filter((a) => a.id !== excludeAgentId);
|
|
30
|
+
for (const otherAgent of otherAgents) {
|
|
31
|
+
try {
|
|
32
|
+
const otherDetails = await this.client.getAgent(otherAgent.id);
|
|
33
|
+
const otherFolders = otherDetails.folders;
|
|
34
|
+
if (otherFolders && otherFolders.find((f) => f.id === folderId)) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
// Continue if we can't get agent details
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Checks if a memory block is used by other agents
|
|
47
|
+
*/
|
|
48
|
+
async isBlockUsedByOtherAgents(blockId, excludeAgentId, allAgents) {
|
|
49
|
+
const otherAgents = allAgents.filter((a) => a.id !== excludeAgentId);
|
|
50
|
+
for (const otherAgent of otherAgents) {
|
|
51
|
+
try {
|
|
52
|
+
const otherDetails = await this.client.getAgent(otherAgent.id);
|
|
53
|
+
if (otherDetails.blocks && otherDetails.blocks.find((b) => b.id === blockId)) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
// Continue if we can't get agent details
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Identifies agent-specific blocks based on naming patterns
|
|
66
|
+
* Uses simple heuristic: blocks containing the agent name (excluding shared blocks)
|
|
67
|
+
*/
|
|
68
|
+
getAgentSpecificBlocks(allBlocks, agentName) {
|
|
69
|
+
const blockList = (0, response_normalizer_1.normalizeResponse)(allBlocks);
|
|
70
|
+
return blockList.filter((block) => {
|
|
71
|
+
if (!block.label)
|
|
72
|
+
return false;
|
|
73
|
+
// Never delete shared blocks
|
|
74
|
+
if (this.isSharedBlock(block))
|
|
75
|
+
return false;
|
|
76
|
+
// Look for blocks that contain the agent name
|
|
77
|
+
return block.label.includes(agentName) ||
|
|
78
|
+
block.label.includes('_' + agentName) ||
|
|
79
|
+
block.label.includes(agentName + '_');
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.ResourceClassifier = ResourceClassifier;
|
|
84
|
+
//# sourceMappingURL=resource-classifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-classifier.js","sourceRoot":"","sources":["../../src/lib/resource-classifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalizes different SDK response formats into consistent arrays
|
|
3
|
+
* Handles: Array responses, { items: [] }, { body: [] }, and other variations
|
|
4
|
+
*/
|
|
5
|
+
export declare function normalizeResponse(response: any): any[];
|
|
6
|
+
//# sourceMappingURL=response-normalizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-normalizer.d.ts","sourceRoot":"","sources":["../../src/lib/response-normalizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,EAAE,CAsBtD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeResponse = normalizeResponse;
|
|
4
|
+
/**
|
|
5
|
+
* Normalizes different SDK response formats into consistent arrays
|
|
6
|
+
* Handles: Array responses, { items: [] }, { body: [] }, and other variations
|
|
7
|
+
*/
|
|
8
|
+
function normalizeResponse(response) {
|
|
9
|
+
if (Array.isArray(response)) {
|
|
10
|
+
return response;
|
|
11
|
+
}
|
|
12
|
+
if (response && typeof response === 'object') {
|
|
13
|
+
// Check for common response wrapper patterns
|
|
14
|
+
if (Array.isArray(response.items)) {
|
|
15
|
+
return response.items;
|
|
16
|
+
}
|
|
17
|
+
if (Array.isArray(response.body)) {
|
|
18
|
+
return response.body;
|
|
19
|
+
}
|
|
20
|
+
if (Array.isArray(response.data)) {
|
|
21
|
+
return response.data;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// Fallback: return empty array for unexpected formats
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=response-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-normalizer.js","sourceRoot":"","sources":["../../src/lib/response-normalizer.ts"],"names":[],"mappings":";;AAIA,8CAsBC;AA1BD;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,QAAa;IAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC7C,6CAA6C;QAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,QAAQ,CAAC,KAAK,CAAC;QACxB,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates resource types for commands
|
|
3
|
+
*/
|
|
4
|
+
export declare function validateResourceType(resource: string, validTypes: string[]): void;
|
|
5
|
+
/**
|
|
6
|
+
* Validates that a required parameter is provided
|
|
7
|
+
*/
|
|
8
|
+
export declare function validateRequired(value: any, paramName: string, usage?: string): void;
|
|
9
|
+
//# sourceMappingURL=validators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/lib/validators.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAKjF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAQpF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateResourceType = validateResourceType;
|
|
4
|
+
exports.validateRequired = validateRequired;
|
|
5
|
+
/**
|
|
6
|
+
* Validates resource types for commands
|
|
7
|
+
*/
|
|
8
|
+
function validateResourceType(resource, validTypes) {
|
|
9
|
+
if (!validTypes.includes(resource)) {
|
|
10
|
+
console.error(`Error: Only "${validTypes.join('/')}" resource is currently supported`);
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Validates that a required parameter is provided
|
|
16
|
+
*/
|
|
17
|
+
function validateRequired(value, paramName, usage) {
|
|
18
|
+
if (!value) {
|
|
19
|
+
console.error(`Error: ${paramName} is required`);
|
|
20
|
+
if (usage) {
|
|
21
|
+
console.error(`Usage: ${usage}`);
|
|
22
|
+
}
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/lib/validators.ts"],"names":[],"mappings":";;AAGA,oDAKC;AAKD,4CAQC;AArBD;;GAEG;AACH,SAAgB,oBAAoB,CAAC,QAAgB,EAAE,UAAoB;IACzE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,gBAAgB,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,KAAU,EAAE,SAAiB,EAAE,KAAc;IAC5E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,UAAU,SAAS,cAAc,CAAC,CAAC;QACjD,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface FleetConfig {
|
|
2
|
+
shared_blocks?: SharedBlock[];
|
|
3
|
+
agents: AgentConfig[];
|
|
4
|
+
}
|
|
5
|
+
export interface SharedBlock {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
limit: number;
|
|
9
|
+
value?: string;
|
|
10
|
+
from_file?: string;
|
|
11
|
+
version?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface AgentConfig {
|
|
14
|
+
name: string;
|
|
15
|
+
description: string;
|
|
16
|
+
system_prompt: PromptConfig;
|
|
17
|
+
tools: string[];
|
|
18
|
+
shared_blocks?: string[];
|
|
19
|
+
memory_blocks?: MemoryBlock[];
|
|
20
|
+
folders?: FolderConfig[];
|
|
21
|
+
llm_config?: LLMConfig;
|
|
22
|
+
embedding?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface FolderConfig {
|
|
25
|
+
name: string;
|
|
26
|
+
files: string[];
|
|
27
|
+
}
|
|
28
|
+
export interface PromptConfig {
|
|
29
|
+
value?: string;
|
|
30
|
+
from_file?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface MemoryBlock {
|
|
33
|
+
name: string;
|
|
34
|
+
description: string;
|
|
35
|
+
limit: number;
|
|
36
|
+
value?: string;
|
|
37
|
+
from_file?: string;
|
|
38
|
+
version?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface LLMConfig {
|
|
41
|
+
model: string;
|
|
42
|
+
context_window: number;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=fleet-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-config.d.ts","sourceRoot":"","sources":["../../src/types/fleet-config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;IAC9B,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,YAAY,CAAC;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-config.js","sourceRoot":"","sources":["../../src/types/fleet-config.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "lettactl",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "kubectl-style CLI for managing Letta AI agent fleets",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"lettactl": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsc",
|
|
11
|
+
"start": "node dist/index.js",
|
|
12
|
+
"dev": "ts-node src/index.ts",
|
|
13
|
+
"test": "jest",
|
|
14
|
+
"prepare": "npm run build",
|
|
15
|
+
"prepublishOnly": "npm test && npm run build",
|
|
16
|
+
"preversion": "npm test",
|
|
17
|
+
"version": "npm run build && git add -A dist",
|
|
18
|
+
"postversion": "git push && git push --tags"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"letta",
|
|
22
|
+
"ai",
|
|
23
|
+
"agents",
|
|
24
|
+
"fleet",
|
|
25
|
+
"management"
|
|
26
|
+
],
|
|
27
|
+
"author": "Nouamane Benbrahim & Letta",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "git+https://github.com/nouamanecodes/lettactl.git"
|
|
32
|
+
},
|
|
33
|
+
"bugs": {
|
|
34
|
+
"url": "https://github.com/nouamanecodes/lettactl/issues"
|
|
35
|
+
},
|
|
36
|
+
"homepage": "https://github.com/nouamanecodes/lettactl#readme",
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=18.0.0"
|
|
39
|
+
},
|
|
40
|
+
"files": [
|
|
41
|
+
"dist",
|
|
42
|
+
"README.md",
|
|
43
|
+
"LICENSE"
|
|
44
|
+
],
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@letta-ai/letta-client": "^1.3.2",
|
|
47
|
+
"chalk": "^5.6.2",
|
|
48
|
+
"cli-table3": "^0.6.5",
|
|
49
|
+
"commander": "^14.0.2",
|
|
50
|
+
"js-yaml": "^4.1.1"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/jest": "^30.0.0",
|
|
54
|
+
"@types/js-yaml": "^4.0.9",
|
|
55
|
+
"@types/node": "^24.10.1",
|
|
56
|
+
"jest": "^30.2.0",
|
|
57
|
+
"ts-jest": "^29.4.6",
|
|
58
|
+
"ts-node": "^10.9.2",
|
|
59
|
+
"typescript": "^5.9.3"
|
|
60
|
+
}
|
|
61
|
+
}
|