@nestbox-ai/cli 1.0.37 → 1.0.39
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/.github/workflows/test.yml +54 -0
- package/README.md +2 -1
- package/dist/commands/agent/apiUtils.d.ts +20 -0
- package/dist/commands/agent/apiUtils.js +75 -2
- package/dist/commands/agent/apiUtils.js.map +1 -1
- package/dist/commands/agent/create.d.ts +2 -29
- package/dist/commands/agent/create.js +123 -61
- package/dist/commands/agent/create.js.map +1 -1
- package/dist/commands/agent/deploy.js +183 -137
- package/dist/commands/agent/deploy.js.map +1 -1
- package/dist/commands/agent/index.d.ts +1 -2
- package/dist/commands/agent/index.js +3 -6
- package/dist/commands/agent/index.js.map +1 -1
- package/dist/commands/agent/yaml-schema.d.ts +72 -0
- package/dist/commands/agent/yaml-schema.js +61 -0
- package/dist/commands/agent/yaml-schema.js.map +1 -0
- package/dist/commands/agent.js +2 -2
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/generate/project.js +32 -28
- package/dist/commands/generate/project.js.map +1 -1
- package/dist/utils/agent.js +18 -20
- package/dist/utils/agent.js.map +1 -1
- package/package.json +3 -2
- package/src/commands/agent/apiUtils.ts +103 -14
- package/src/commands/agent/create.ts +266 -100
- package/src/commands/agent/deploy.ts +515 -264
- package/src/commands/agent/index.ts +1 -4
- package/src/commands/agent/yaml-schema.ts +57 -0
- package/src/commands/agent.ts +10 -10
- package/src/commands/generate/project.ts +179 -147
- package/src/utils/agent.ts +141 -125
- package/test/agent.test.ts +153 -124
- package/dist/commands/agent/createFromYaml.d.ts +0 -2
- package/dist/commands/agent/createFromYaml.js +0 -172
- package/dist/commands/agent/createFromYaml.js.map +0 -1
- package/src/commands/agent/createFromYaml.ts +0 -192
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":";;AASA,sDAWC;AAnBD,uCAAmD;AACnD,2CAAuD;AACvD,2CAAuD;AACvD,
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":";;AASA,sDAWC;AAnBD,uCAAmD;AACnD,2CAAuD;AACvD,2CAAuD;AACvD,2CAAuD;AAEvD;;GAEG;AACH,SAAgB,qBAAqB,CAAC,OAAgB;IACrD,gCAAgC;IAChC,MAAM,YAAY,GAAG,OAAO;SAC1B,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,uBAAuB,CAAC,CAAC;IAEvC,2BAA2B;IAC3B,IAAA,0BAAmB,EAAC,YAAY,CAAC,CAAC;IAClC,IAAA,8BAAqB,EAAC,YAAY,CAAC,CAAC;IACpC,IAAA,8BAAqB,EAAC,YAAY,CAAC,CAAC;IACpC,IAAA,8BAAqB,EAAC,YAAY,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -45,44 +45,46 @@ function registerProjectCommand(generateCommand) {
|
|
|
45
45
|
spinner.stop();
|
|
46
46
|
const answers = yield inquirer_1.default.prompt([
|
|
47
47
|
{
|
|
48
|
-
type:
|
|
49
|
-
name:
|
|
50
|
-
message:
|
|
48
|
+
type: "list",
|
|
49
|
+
name: "lang",
|
|
50
|
+
message: "Select project language:",
|
|
51
51
|
choices: [
|
|
52
|
-
{ name:
|
|
53
|
-
{ name:
|
|
52
|
+
{ name: "TypeScript", value: "ts" },
|
|
53
|
+
{ name: "JavaScript", value: "js" },
|
|
54
54
|
],
|
|
55
|
-
when: () => !selectedLang
|
|
55
|
+
when: () => !selectedLang,
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
|
-
type:
|
|
59
|
-
name:
|
|
60
|
-
message:
|
|
58
|
+
type: "list",
|
|
59
|
+
name: "template",
|
|
60
|
+
message: "Select template type:",
|
|
61
61
|
choices: [
|
|
62
|
-
{ name:
|
|
63
|
-
{ name:
|
|
62
|
+
{ name: "Agent", value: "agent" },
|
|
63
|
+
{ name: "Chatbot", value: "chatbot" },
|
|
64
64
|
],
|
|
65
|
-
when: () => !selectedTemplate
|
|
65
|
+
when: () => !selectedTemplate,
|
|
66
66
|
},
|
|
67
67
|
{
|
|
68
|
-
type:
|
|
69
|
-
name:
|
|
70
|
-
message:
|
|
68
|
+
type: "input",
|
|
69
|
+
name: "agentName",
|
|
70
|
+
message: "Enter agent/chatbot name (must be a valid function name):",
|
|
71
71
|
when: () => !agentName,
|
|
72
72
|
default: (answers) => {
|
|
73
73
|
const type = selectedTemplate || answers.template;
|
|
74
|
-
return type ===
|
|
74
|
+
return type === "agent"
|
|
75
|
+
? "myAgent"
|
|
76
|
+
: "myChatbot";
|
|
75
77
|
},
|
|
76
78
|
validate: (input) => {
|
|
77
79
|
if (!input.trim()) {
|
|
78
|
-
return
|
|
80
|
+
return "Agent name cannot be empty";
|
|
79
81
|
}
|
|
80
82
|
if (!(0, validation_1.isValidFunctionName)(input.trim())) {
|
|
81
|
-
return
|
|
83
|
+
return "Must be a valid function name (e.g., myAgent, chatBot123, my_agent)";
|
|
82
84
|
}
|
|
83
85
|
return true;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
+
},
|
|
87
|
+
},
|
|
86
88
|
]);
|
|
87
89
|
selectedLang = selectedLang || answers.lang;
|
|
88
90
|
selectedTemplate = selectedTemplate || answers.template;
|
|
@@ -96,28 +98,30 @@ function registerProjectCommand(generateCommand) {
|
|
|
96
98
|
}
|
|
97
99
|
// Set default agent name if not provided
|
|
98
100
|
if (!agentName) {
|
|
99
|
-
agentName =
|
|
101
|
+
agentName =
|
|
102
|
+
selectedTemplate === "agent" ? "myAgent" : "myChatbot";
|
|
100
103
|
}
|
|
101
104
|
// Find matching template in local templates folder
|
|
102
105
|
const templateMapping = {
|
|
103
|
-
|
|
104
|
-
|
|
106
|
+
agent: "base",
|
|
107
|
+
chatbot: "chatbot",
|
|
105
108
|
};
|
|
106
109
|
const mappedTemplateType = templateMapping[selectedTemplate] || selectedTemplate;
|
|
107
110
|
// Check if template directory exists
|
|
108
|
-
|
|
111
|
+
console.log(__dirname);
|
|
112
|
+
const templatePath = path_1.default.resolve(__dirname, `../../../templates/${mappedTemplateType}-${selectedLang}`);
|
|
109
113
|
if (!fs_1.default.existsSync(templatePath)) {
|
|
110
114
|
spinner.fail(`Template not found: ${templatePath}`);
|
|
111
115
|
// Show available templates
|
|
112
116
|
const availableTemplates = (0, plopGenerator_1.listAvailableTemplates)();
|
|
113
117
|
if (availableTemplates.length > 0) {
|
|
114
|
-
console.log(chalk_1.default.yellow(
|
|
118
|
+
console.log(chalk_1.default.yellow("Available templates:"));
|
|
115
119
|
availableTemplates.forEach(template => {
|
|
116
120
|
console.log(chalk_1.default.yellow(` - ${template}`));
|
|
117
121
|
});
|
|
118
122
|
}
|
|
119
123
|
else {
|
|
120
|
-
console.log(chalk_1.default.red(
|
|
124
|
+
console.log(chalk_1.default.red("No templates found. Please add your templates to the templates directory."));
|
|
121
125
|
}
|
|
122
126
|
return;
|
|
123
127
|
}
|
|
@@ -126,12 +130,12 @@ function registerProjectCommand(generateCommand) {
|
|
|
126
130
|
// Generate project using plop
|
|
127
131
|
yield (0, plopGenerator_1.generateWithPlop)(selectedTemplate, selectedLang, folder, path_1.default.basename(folder), agentName);
|
|
128
132
|
// Create nestbox.config.json for TypeScript projects
|
|
129
|
-
(0, agent_1.createNestboxConfig)(folder, selectedLang ===
|
|
133
|
+
(0, agent_1.createNestboxConfig)(folder, selectedLang === "ts");
|
|
130
134
|
spinner.succeed(`Successfully generated ${mappedTemplateType} project in ${folder}`);
|
|
131
135
|
console.log(chalk_1.default.green("\nNext steps:"));
|
|
132
136
|
console.log(chalk_1.default.yellow(` cd ${folder}`));
|
|
133
137
|
console.log(chalk_1.default.yellow(" npm install"));
|
|
134
|
-
if (selectedLang ===
|
|
138
|
+
if (selectedLang === "ts") {
|
|
135
139
|
console.log(chalk_1.default.yellow(" npm run build"));
|
|
136
140
|
}
|
|
137
141
|
console.log(chalk_1.default.yellow(" nestbox agent deploy --agent <agent-name> --instance <instance-name>"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/commands/generate/project.ts"],"names":[],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/commands/generate/project.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/agent.js
CHANGED
|
@@ -64,9 +64,10 @@ function findProjectRoot() {
|
|
|
64
64
|
return __awaiter(this, arguments, void 0, function* (startDir = process.cwd()) {
|
|
65
65
|
let currentDir = startDir;
|
|
66
66
|
while (currentDir !== path_1.default.parse(currentDir).root) {
|
|
67
|
-
const nestboxConfigPath = path_1.default.join(currentDir,
|
|
68
|
-
const packageJsonPath = path_1.default.join(currentDir,
|
|
69
|
-
if (fs_1.default.existsSync(nestboxConfigPath) ||
|
|
67
|
+
const nestboxConfigPath = path_1.default.join(currentDir, "nestbox.config.json");
|
|
68
|
+
const packageJsonPath = path_1.default.join(currentDir, "package.json");
|
|
69
|
+
if (fs_1.default.existsSync(nestboxConfigPath) ||
|
|
70
|
+
fs_1.default.existsSync(packageJsonPath)) {
|
|
70
71
|
return currentDir;
|
|
71
72
|
}
|
|
72
73
|
currentDir = path_1.default.dirname(currentDir);
|
|
@@ -76,10 +77,10 @@ function findProjectRoot() {
|
|
|
76
77
|
}
|
|
77
78
|
// Function to load and parse nestbox.config.json if it exists
|
|
78
79
|
function loadNestboxConfig(projectRoot) {
|
|
79
|
-
const configPath = path_1.default.join(projectRoot,
|
|
80
|
+
const configPath = path_1.default.join(projectRoot, "nestbox.config.json");
|
|
80
81
|
if (fs_1.default.existsSync(configPath)) {
|
|
81
82
|
try {
|
|
82
|
-
const configContent = fs_1.default.readFileSync(configPath,
|
|
83
|
+
const configContent = fs_1.default.readFileSync(configPath, "utf8");
|
|
83
84
|
return JSON.parse(configContent);
|
|
84
85
|
}
|
|
85
86
|
catch (error) {
|
|
@@ -91,13 +92,13 @@ function loadNestboxConfig(projectRoot) {
|
|
|
91
92
|
// Function to detect if a directory contains TypeScript files
|
|
92
93
|
function isTypeScriptProject(directoryPath) {
|
|
93
94
|
// Check for tsconfig.json
|
|
94
|
-
if (fs_1.default.existsSync(path_1.default.join(directoryPath,
|
|
95
|
+
if (fs_1.default.existsSync(path_1.default.join(directoryPath, "tsconfig.json"))) {
|
|
95
96
|
return true;
|
|
96
97
|
}
|
|
97
98
|
// Check for .ts files
|
|
98
99
|
try {
|
|
99
100
|
const files = fs_1.default.readdirSync(directoryPath);
|
|
100
|
-
return files.some(file => file.endsWith(
|
|
101
|
+
return files.some(file => file.endsWith(".ts") || file.endsWith(".tsx"));
|
|
101
102
|
}
|
|
102
103
|
catch (error) {
|
|
103
104
|
return false;
|
|
@@ -108,7 +109,7 @@ function runPredeployScripts(scripts, projectRoot) {
|
|
|
108
109
|
if (!scripts || !Array.isArray(scripts) || scripts.length === 0) {
|
|
109
110
|
return;
|
|
110
111
|
}
|
|
111
|
-
const spinner = (0, ora_1.default)(
|
|
112
|
+
const spinner = (0, ora_1.default)("Running predeploy scripts...").start();
|
|
112
113
|
try {
|
|
113
114
|
for (const script of scripts) {
|
|
114
115
|
spinner.text = `Running: ${script}`;
|
|
@@ -117,7 +118,7 @@ function runPredeployScripts(scripts, projectRoot) {
|
|
|
117
118
|
cwd: projectRoot,
|
|
118
119
|
});
|
|
119
120
|
}
|
|
120
|
-
spinner.succeed(
|
|
121
|
+
spinner.succeed("Predeploy scripts completed successfully");
|
|
121
122
|
}
|
|
122
123
|
catch (error) {
|
|
123
124
|
spinner.fail(`Predeploy script failed: ${error.message}`);
|
|
@@ -125,21 +126,22 @@ function runPredeployScripts(scripts, projectRoot) {
|
|
|
125
126
|
}
|
|
126
127
|
});
|
|
127
128
|
}
|
|
128
|
-
function createZipFromDirectory(dirPath, excludePatterns = [
|
|
129
|
+
function createZipFromDirectory(dirPath, excludePatterns = ["node_modules"]) {
|
|
129
130
|
const dirName = path_1.default.basename(dirPath);
|
|
130
131
|
const timestamp = Date.now();
|
|
131
132
|
// Create zip in temp directory
|
|
132
133
|
const tempZipFilePath = path_1.default.join(os.tmpdir(), `${dirName}_${timestamp}.zip`);
|
|
133
134
|
const zip = new adm_zip_1.default();
|
|
134
135
|
// Function to recursively add files to zip
|
|
135
|
-
function addFilesToZip(currentPath, relativePath =
|
|
136
|
+
function addFilesToZip(currentPath, relativePath = "") {
|
|
136
137
|
const items = fs_1.default.readdirSync(currentPath);
|
|
137
138
|
for (const item of items) {
|
|
138
139
|
const itemPath = path_1.default.join(currentPath, item);
|
|
139
140
|
const itemRelativePath = path_1.default.join(relativePath, item);
|
|
140
141
|
// Check if item should be excluded
|
|
141
|
-
if (excludePatterns.some((pattern) => typeof pattern ===
|
|
142
|
-
|
|
142
|
+
if (excludePatterns.some((pattern) => typeof pattern === "string"
|
|
143
|
+
? itemRelativePath === pattern || item === pattern
|
|
144
|
+
: pattern.test(itemRelativePath))) {
|
|
143
145
|
continue;
|
|
144
146
|
}
|
|
145
147
|
const stats = fs_1.default.statSync(itemPath);
|
|
@@ -160,15 +162,11 @@ function createZipFromDirectory(dirPath, excludePatterns = ['node_modules']) {
|
|
|
160
162
|
function createNestboxConfig(projectPath, isTypeScript) {
|
|
161
163
|
if (!isTypeScript)
|
|
162
164
|
return;
|
|
163
|
-
const configPath = path_1.default.join(projectPath,
|
|
165
|
+
const configPath = path_1.default.join(projectPath, "nestbox.config.json");
|
|
164
166
|
const config = {
|
|
165
167
|
agents: {
|
|
166
|
-
predeploy: [
|
|
167
|
-
|
|
168
|
-
'npm run lint',
|
|
169
|
-
'npm run build'
|
|
170
|
-
]
|
|
171
|
-
}
|
|
168
|
+
predeploy: ["rm -rf dist", "npm run lint", "npm run build"],
|
|
169
|
+
},
|
|
172
170
|
};
|
|
173
171
|
fs_1.default.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
174
172
|
console.log(chalk_1.default.green(`Created nestbox.config.json at ${configPath}`));
|
package/dist/utils/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/utils/agent.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/utils/agent.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nestbox-ai/cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.39",
|
|
4
4
|
"description": "The cli tools that helps developers to build agents",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -48,9 +48,10 @@
|
|
|
48
48
|
"vitest": "^1.1.0"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@nestbox-ai/admin": "1.0.
|
|
51
|
+
"@nestbox-ai/admin": "1.0.50",
|
|
52
52
|
"@types/js-yaml": "^4.0.9",
|
|
53
53
|
"adm-zip": "^0.5.16",
|
|
54
|
+
"ajv": "^8.17.1",
|
|
54
55
|
"archiver": "^7.0.1",
|
|
55
56
|
"axios": "^1.8.4",
|
|
56
57
|
"chalk": "^4.1.2",
|
|
@@ -1,24 +1,113 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
MachineAgentApi,
|
|
3
|
+
MachineInstancesApi,
|
|
4
|
+
ProjectsApi,
|
|
5
|
+
} from "@nestbox-ai/admin";
|
|
2
6
|
import { setupAuthAndConfig } from "../../utils/api";
|
|
7
|
+
import fs from "fs/promises";
|
|
8
|
+
import path from "path";
|
|
9
|
+
import yaml from "js-yaml";
|
|
10
|
+
import Ajv from "ajv";
|
|
11
|
+
import { yamlSchema } from "./yaml-schema";
|
|
3
12
|
|
|
4
13
|
export interface ApiInstances {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
14
|
+
agentsApi: MachineAgentApi;
|
|
15
|
+
projectsApi: ProjectsApi;
|
|
16
|
+
instanceApi: MachineInstancesApi;
|
|
8
17
|
}
|
|
9
18
|
|
|
10
19
|
/**
|
|
11
20
|
* Create API instances with current authentication using setupAuthAndConfig
|
|
12
21
|
*/
|
|
13
22
|
export function createApis(): ApiInstances {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
const authResult = setupAuthAndConfig();
|
|
24
|
+
if (!authResult) {
|
|
25
|
+
throw new Error("No authentication token found. Please log in first.");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
agentsApi: new MachineAgentApi(authResult.configuration),
|
|
30
|
+
projectsApi: new ProjectsApi(authResult.configuration),
|
|
31
|
+
instanceApi: new MachineInstancesApi(authResult.configuration),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const ajv = new Ajv({ strict: false });
|
|
36
|
+
const validate = ajv.compile(yamlSchema);
|
|
37
|
+
|
|
38
|
+
export type ManifestAgent = {
|
|
39
|
+
name: string;
|
|
40
|
+
description: string;
|
|
41
|
+
entry: string;
|
|
42
|
+
type?: "REGULAR" | "CHATBOT" | "WORKFLOW";
|
|
43
|
+
inputSchema: {
|
|
44
|
+
type: "object";
|
|
45
|
+
properties: Record<
|
|
46
|
+
string,
|
|
47
|
+
{
|
|
48
|
+
type: string;
|
|
49
|
+
description?: string;
|
|
50
|
+
default?: string | number | boolean | null;
|
|
51
|
+
}
|
|
52
|
+
>;
|
|
53
|
+
required?: string[];
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export type ManifestFile = { agents: ManifestAgent[] };
|
|
58
|
+
|
|
59
|
+
export async function loadAgentFromYaml(
|
|
60
|
+
agentName: string
|
|
61
|
+
): Promise<ManifestAgent | undefined> {
|
|
62
|
+
const file = path.join(process.cwd(), "nestbox-agents.yaml");
|
|
63
|
+
|
|
64
|
+
try {
|
|
65
|
+
await fs.access(file);
|
|
66
|
+
} catch (err: any) {
|
|
67
|
+
if (err?.code === "ENOENT") return undefined;
|
|
68
|
+
throw new Error(`cannot access nestbox-agents.yaml: ${err.message}`);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const raw = await fs.readFile(file, "utf8");
|
|
72
|
+
const doc = yaml.load(raw) as unknown;
|
|
73
|
+
|
|
74
|
+
if (!validate(doc)) {
|
|
75
|
+
const msg = ajv.errorsText(validate.errors, { separator: "\n- " });
|
|
76
|
+
throw new Error(`invalid nestbox-agents.yaml:\n- ${msg}`);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const mf = doc as ManifestFile;
|
|
80
|
+
return mf.agents.find(a => a?.name === agentName);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export async function loadAllAgentNamesFromYaml(): Promise<string[]> {
|
|
84
|
+
const file = path.join(process.cwd(), "nestbox-agents.yaml");
|
|
85
|
+
|
|
86
|
+
try {
|
|
87
|
+
await fs.access(file);
|
|
88
|
+
} catch (err: any) {
|
|
89
|
+
if (err?.code === "ENOENT") return [];
|
|
90
|
+
throw new Error(`cannot access nestbox-agents.yaml: ${err.message}`);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const raw = await fs.readFile(file, "utf8");
|
|
94
|
+
const doc = yaml.load(raw) as unknown;
|
|
95
|
+
|
|
96
|
+
if (!validate(doc)) {
|
|
97
|
+
const msg = ajv.errorsText(validate.errors, { separator: "\n- " });
|
|
98
|
+
throw new Error(`invalid nestbox-agents.yaml:\n- ${msg}`);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const mf = doc as ManifestFile;
|
|
102
|
+
const names = Array.isArray(mf?.agents)
|
|
103
|
+
? (mf.agents.map(a => a?.name).filter(Boolean) as string[])
|
|
104
|
+
: [];
|
|
105
|
+
|
|
106
|
+
// de-duplicate by name, keep first occurrence
|
|
107
|
+
const seen = new Set<string>();
|
|
108
|
+
return names.filter(n => {
|
|
109
|
+
if (seen.has(n)) return false;
|
|
110
|
+
seen.add(n);
|
|
111
|
+
return true;
|
|
112
|
+
});
|
|
24
113
|
}
|