mirror of
https://github.com/hexastack/hexabot
synced 2025-06-26 18:27:28 +00:00
commit
cc2f35b5bf
2
cli/.gitignore
vendored
Normal file
2
cli/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
node_modules
|
||||
dist
|
35
cli/package.json
Normal file
35
cli/package.json
Normal file
@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "hexabot-cli",
|
||||
"version": "2.0.0",
|
||||
"description": "Hexabot CLI for creating and managing chatbots built with Hexabot.",
|
||||
"main": "dist/index.js",
|
||||
"type": "module",
|
||||
"bin": {
|
||||
"hexabot": "dist/index.js"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"start": "node dist/cli.js",
|
||||
"dev": "ts-node src/cli.ts",
|
||||
"prepare": "npm run build"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "Hexastack",
|
||||
"license": "AGPL-3.0-only",
|
||||
"dependencies": {
|
||||
"chalk": "^5.3.0",
|
||||
"commander": "^12.1.0",
|
||||
"degit": "^2.8.4",
|
||||
"dotenv": "^16.4.5",
|
||||
"figlet": "^1.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/chalk": "^2.2.0",
|
||||
"@types/commander": "^2.12.2",
|
||||
"@types/degit": "^2.8.6",
|
||||
"@types/figlet": "^1.5.8",
|
||||
"@types/node": "^22.7.4",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.6.2"
|
||||
}
|
||||
}
|
258
cli/src/index.ts
Normal file
258
cli/src/index.ts
Normal file
@ -0,0 +1,258 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import figlet from 'figlet';
|
||||
import { Command } from 'commander';
|
||||
import { execSync } from 'child_process';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
import chalk from 'chalk';
|
||||
import degit from 'degit';
|
||||
|
||||
console.log(figlet.textSync('Hexabot'));
|
||||
|
||||
// Configuration
|
||||
const FOLDER = path.resolve(process.cwd(), './docker');
|
||||
|
||||
/**
|
||||
* Check if the docker folder exists, otherwise prompt the user to cd into the correct folder.
|
||||
*/
|
||||
const checkDockerFolder = (): void => {
|
||||
if (!fs.existsSync(FOLDER)) {
|
||||
console.error(
|
||||
chalk.red(
|
||||
`Error: The 'docker' folder is not found in the current directory.`,
|
||||
),
|
||||
);
|
||||
console.error(
|
||||
chalk.yellow(
|
||||
`Please make sure you're in the Hexabot project directory and try again.`,
|
||||
),
|
||||
);
|
||||
console.log(chalk.cyan(`Example: cd path/to/hexabot`));
|
||||
process.exit(1); // Exit the script if the folder is not found
|
||||
}
|
||||
};
|
||||
|
||||
// Initialize Commander
|
||||
const program = new Command();
|
||||
|
||||
// Helper Functions
|
||||
|
||||
/**
|
||||
* Generate Docker Compose file arguments based on provided services.
|
||||
* @param services List of services
|
||||
* @param type Optional type ('dev' | 'prod')
|
||||
* @returns String of Docker Compose file arguments
|
||||
*/
|
||||
const generateComposeFiles = (
|
||||
services: string[],
|
||||
type?: 'dev' | 'prod',
|
||||
): string => {
|
||||
let files = [`-f ${path.join(FOLDER, 'docker-compose.yml')}`];
|
||||
|
||||
services.forEach((service) => {
|
||||
files.push(`-f ${path.join(FOLDER, `docker-compose.${service}.yml`)}`);
|
||||
if (type) {
|
||||
const serviceTypeFile = path.join(
|
||||
FOLDER,
|
||||
`docker-compose.${service}.${type}.yml`,
|
||||
);
|
||||
if (fs.existsSync(serviceTypeFile)) {
|
||||
files.push(`-f ${serviceTypeFile}`);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (type) {
|
||||
const mainTypeFile = path.join(FOLDER, `docker-compose.${type}.yml`);
|
||||
if (fs.existsSync(mainTypeFile)) {
|
||||
files.push(`-f ${mainTypeFile}`);
|
||||
}
|
||||
}
|
||||
|
||||
return files.join(' ');
|
||||
};
|
||||
|
||||
/**
|
||||
* Execute a Docker Compose command.
|
||||
* @param args Additional arguments for the docker compose command
|
||||
*/
|
||||
const dockerCompose = (args: string): void => {
|
||||
try {
|
||||
execSync(`docker compose ${args}`, { stdio: 'inherit' });
|
||||
} catch (error) {
|
||||
console.error(chalk.red('Error executing Docker Compose command.'));
|
||||
process.exit(1);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Parse the comma-separated service list.
|
||||
* @param serviceString Comma-separated list of services
|
||||
* @returns Array of services
|
||||
*/
|
||||
const parseServices = (serviceString: string): string[] => {
|
||||
return serviceString
|
||||
.split(',')
|
||||
.map((service) => service.trim())
|
||||
.filter((s) => s);
|
||||
};
|
||||
|
||||
// Check if the docker folder exists
|
||||
checkDockerFolder();
|
||||
|
||||
// Commands
|
||||
|
||||
program
|
||||
.name('Hexabot')
|
||||
.description('A CLI to manage your Hexabot chatbot instance')
|
||||
.version('1.0.0');
|
||||
|
||||
program
|
||||
.command('start')
|
||||
.description('Start specified services with Docker Compose')
|
||||
.option(
|
||||
'--enable <services>',
|
||||
'Comma-separated list of services to enable',
|
||||
'',
|
||||
)
|
||||
.action((options) => {
|
||||
const services = parseServices(options.enable);
|
||||
const composeArgs = generateComposeFiles(services);
|
||||
dockerCompose(`${composeArgs} up -d`);
|
||||
});
|
||||
|
||||
program
|
||||
.command('dev')
|
||||
.description(
|
||||
'Start specified services in development mode with Docker Compose',
|
||||
)
|
||||
.option(
|
||||
'--enable <services>',
|
||||
'Comma-separated list of services to enable',
|
||||
'',
|
||||
)
|
||||
.action((options) => {
|
||||
const services = parseServices(options.enable);
|
||||
const composeArgs = generateComposeFiles(services, 'dev');
|
||||
dockerCompose(`${composeArgs} up --build -d`);
|
||||
});
|
||||
|
||||
program
|
||||
.command('start-prod')
|
||||
.description(
|
||||
'Start specified services in production mode with Docker Compose',
|
||||
)
|
||||
.option(
|
||||
'--enable <services>',
|
||||
'Comma-separated list of services to enable',
|
||||
'',
|
||||
)
|
||||
.action((options) => {
|
||||
const services = parseServices(options.enable);
|
||||
const composeArgs = generateComposeFiles(services, 'prod');
|
||||
dockerCompose(`${composeArgs} up -d`);
|
||||
});
|
||||
|
||||
program
|
||||
.command('stop')
|
||||
.description('Stop specified Docker Compose services')
|
||||
.option('--enable <services>', 'Comma-separated list of services to stop', '')
|
||||
.action((options) => {
|
||||
const services = parseServices(options.enable);
|
||||
const composeArgs = generateComposeFiles(services);
|
||||
dockerCompose(`${composeArgs} down`);
|
||||
});
|
||||
|
||||
program
|
||||
.command('destroy')
|
||||
.description('Destroy specified Docker Compose services and remove volumes')
|
||||
.option(
|
||||
'--enable <services>',
|
||||
'Comma-separated list of services to destroy',
|
||||
'',
|
||||
)
|
||||
.action((options) => {
|
||||
const services = parseServices(options.enable);
|
||||
const composeArgs = generateComposeFiles(services);
|
||||
dockerCompose(`${composeArgs} down -v`);
|
||||
});
|
||||
|
||||
// Add install command to install extensions (e.g., channels, plugins)
|
||||
program
|
||||
.command('install')
|
||||
.description('Install an extension for Hexabot')
|
||||
.argument('<type>', 'The type of extension (e.g., channel, plugin)')
|
||||
.argument(
|
||||
'<repository>',
|
||||
'GitHub repository for the extension (user/repo format)',
|
||||
)
|
||||
.action(async (type, repository) => {
|
||||
// Define the target folder based on the extension type
|
||||
let targetFolder = '';
|
||||
switch (type) {
|
||||
case 'channel':
|
||||
targetFolder = 'api/src/extensions/channels/';
|
||||
break;
|
||||
case 'plugin':
|
||||
targetFolder = 'api/src/extensions/plugins/';
|
||||
break;
|
||||
default:
|
||||
console.error(chalk.red(`Unknown extension type: ${type}`));
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Get the last part of the repository name
|
||||
const repoName = repository.split('/').pop();
|
||||
|
||||
// If the repo name starts with "hexabot-channel-", remove that prefix
|
||||
const extensionName = repoName.startsWith('hexabot-channel-')
|
||||
? repoName.replace('hexabot-channel-', '')
|
||||
: repoName;
|
||||
|
||||
const extensionPath = path.resolve(
|
||||
process.cwd(),
|
||||
targetFolder,
|
||||
extensionName,
|
||||
);
|
||||
|
||||
// Check if the extension folder already exists
|
||||
if (fs.existsSync(extensionPath)) {
|
||||
console.error(
|
||||
chalk.red(`Error: Extension already exists at ${extensionPath}`),
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
try {
|
||||
console.log(
|
||||
chalk.cyan(`Fetching ${repository} into ${extensionPath}...`),
|
||||
);
|
||||
|
||||
// Use degit to fetch the repository without .git history
|
||||
const emitter = degit(repository);
|
||||
await emitter.clone(extensionPath);
|
||||
|
||||
console.log(chalk.cyan('Running npm install in the api/ folder...'));
|
||||
// Run npm install in the api folder to install dependencies
|
||||
execSync('npm install', {
|
||||
cwd: path.resolve(process.cwd(), 'api'),
|
||||
stdio: 'inherit',
|
||||
});
|
||||
|
||||
console.log(
|
||||
chalk.green(`Successfully installed ${extensionName} as a ${type}.`),
|
||||
);
|
||||
} catch (error) {
|
||||
console.error(chalk.red('Error during installation:'), error);
|
||||
process.exit(1);
|
||||
}
|
||||
});
|
||||
|
||||
// Parse arguments
|
||||
program.parse(process.argv);
|
||||
|
||||
// If no command is provided, display help
|
||||
if (!process.argv.slice(2).length) {
|
||||
program.outputHelp();
|
||||
}
|
15
cli/tsconfig.json
Normal file
15
cli/tsconfig.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2020",
|
||||
"module": "ES2020", // Change to ES2020 or ESNext
|
||||
"moduleResolution": "node", // Ensure module resolution is node
|
||||
"rootDir": "./src",
|
||||
"outDir": "./dist",
|
||||
"strict": true,
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"skipLibCheck": true
|
||||
},
|
||||
"include": ["src"],
|
||||
"exclude": ["node_modules", "dist"]
|
||||
}
|
@ -47,7 +47,8 @@ WORKDIR /app
|
||||
|
||||
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
|
||||
|
||||
COPY . .
|
||||
COPY ./frontend ./frontend
|
||||
COPY ./widget ./widget
|
||||
|
||||
RUN npm install
|
||||
|
||||
|
268
package-lock.json
generated
268
package-lock.json
generated
@ -10,7 +10,8 @@
|
||||
"license": "AGPL-3.0-only",
|
||||
"workspaces": [
|
||||
"frontend",
|
||||
"widget"
|
||||
"widget",
|
||||
"cli"
|
||||
],
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "^19.3.0",
|
||||
@ -18,6 +19,30 @@
|
||||
"husky": "^9.0.11"
|
||||
}
|
||||
},
|
||||
"cli": {
|
||||
"name": "hexabot-cli",
|
||||
"version": "2.0.0",
|
||||
"license": "AGPL-3.0-only",
|
||||
"dependencies": {
|
||||
"chalk": "^5.3.0",
|
||||
"commander": "^12.1.0",
|
||||
"degit": "^2.8.4",
|
||||
"dotenv": "^16.4.5",
|
||||
"figlet": "^1.7.0"
|
||||
},
|
||||
"bin": {
|
||||
"hexabot": "dist/index.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/chalk": "^2.2.0",
|
||||
"@types/commander": "^2.12.2",
|
||||
"@types/degit": "^2.8.6",
|
||||
"@types/figlet": "^1.5.8",
|
||||
"@types/node": "^22.7.4",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.6.2"
|
||||
}
|
||||
},
|
||||
"frontend": {
|
||||
"name": "hexabot-ui",
|
||||
"version": "2.0.0",
|
||||
@ -772,6 +797,28 @@
|
||||
"node": ">=v18"
|
||||
}
|
||||
},
|
||||
"node_modules/@cspotcode/source-map-support": {
|
||||
"version": "0.8.1",
|
||||
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
|
||||
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/trace-mapping": "0.3.9"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
|
||||
"version": "0.3.9",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
|
||||
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/resolve-uri": "^3.0.3",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.10"
|
||||
}
|
||||
},
|
||||
"node_modules/@emotion/babel-plugin": {
|
||||
"version": "11.12.0",
|
||||
"resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz",
|
||||
@ -2199,6 +2246,30 @@
|
||||
"tslib": "^2.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@tsconfig/node10": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
|
||||
"integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@tsconfig/node12": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
|
||||
"integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@tsconfig/node14": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
|
||||
"integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@tsconfig/node16": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
|
||||
"integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/argparse": {
|
||||
"version": "1.0.38",
|
||||
"resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz",
|
||||
@ -2251,6 +2322,26 @@
|
||||
"@babel/types": "^7.20.7"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/chalk": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-2.2.0.tgz",
|
||||
"integrity": "sha512-1zzPV9FDe1I/WHhRkf9SNgqtRJWZqrBWgu7JGveuHmmyR9CnAPCie2N/x+iHrgnpYBIcCJWHBoMRv2TRWktsvw==",
|
||||
"deprecated": "This is a stub types definition for chalk (https://github.com/chalk/chalk). chalk provides its own type definitions, so you don't need @types/chalk installed!",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"chalk": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/commander": {
|
||||
"version": "2.12.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/commander/-/commander-2.12.2.tgz",
|
||||
"integrity": "sha512-0QEFiR8ljcHp9bAbWxecjVRuAMr16ivPiGOw6KFQBVrVd0RQIcM3xKdRisH2EDWgVWujiYtHwhSkSUoAAGzH7Q==",
|
||||
"deprecated": "This is a stub types definition for commander (https://github.com/tj/commander.js). commander provides its own type definitions, so you don't need @types/commander installed!",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"commander": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/conventional-commits-parser": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz",
|
||||
@ -2260,6 +2351,12 @@
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/degit": {
|
||||
"version": "2.8.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/degit/-/degit-2.8.6.tgz",
|
||||
"integrity": "sha512-y0M7sqzsnHB6cvAeTCBPrCQNQiZe8U4qdzf8uBVmOWYap5MMTN/gB2iEqrIqFiYcsyvP74GnGD5tgsHttielFw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/emoji-js": {
|
||||
"version": "3.5.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/emoji-js/-/emoji-js-3.5.2.tgz",
|
||||
@ -2272,6 +2369,12 @@
|
||||
"integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/figlet": {
|
||||
"version": "1.5.8",
|
||||
"resolved": "https://registry.npmjs.org/@types/figlet/-/figlet-1.5.8.tgz",
|
||||
"integrity": "sha512-G22AUvy4Tl95XLE7jmUM8s8mKcoz+Hr+Xm9W90gJsppJq9f9tHvOGkrpn4gRX0q/cLtBdNkWtWCKDg2UDZoZvQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/json-schema": {
|
||||
"version": "7.0.15",
|
||||
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
|
||||
@ -2287,14 +2390,20 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.14.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz",
|
||||
"integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==",
|
||||
"version": "22.7.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz",
|
||||
"integrity": "sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"undici-types": "~5.26.4"
|
||||
"undici-types": "~6.19.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node/node_modules/undici-types": {
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/parse-json": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
|
||||
@ -2718,6 +2827,18 @@
|
||||
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/acorn-walk": {
|
||||
"version": "8.3.4",
|
||||
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
|
||||
"integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"acorn": "^8.11.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ajv": {
|
||||
"version": "8.16.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz",
|
||||
@ -2805,6 +2926,12 @@
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/arg": {
|
||||
"version": "4.1.3",
|
||||
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
|
||||
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/argparse": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
|
||||
@ -3256,7 +3383,6 @@
|
||||
"version": "5.3.0",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
|
||||
"integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^12.17.0 || ^14.13 || >=16.0.0"
|
||||
},
|
||||
@ -3367,6 +3493,14 @@
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/commander": {
|
||||
"version": "12.1.0",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
|
||||
"integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/compare-func": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz",
|
||||
@ -3495,6 +3629,12 @@
|
||||
"typescript": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/create-require": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
|
||||
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/cross-spawn": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
||||
@ -3827,6 +3967,17 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/degit": {
|
||||
"version": "2.8.4",
|
||||
"resolved": "https://registry.npmjs.org/degit/-/degit-2.8.4.tgz",
|
||||
"integrity": "sha512-vqYuzmSA5I50J882jd+AbAhQtgK6bdKUJIex1JNfEUPENCgYsxugzKVZlFyMwV4i06MmnV47/Iqi5Io86zf3Ng==",
|
||||
"bin": {
|
||||
"degit": "degit"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
@ -3842,6 +3993,15 @@
|
||||
"integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/diff": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
|
||||
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.3.1"
|
||||
}
|
||||
},
|
||||
"node_modules/dir-glob": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
|
||||
@ -3890,6 +4050,17 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/dotenv": {
|
||||
"version": "16.4.5",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
|
||||
"integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://dotenvx.com"
|
||||
}
|
||||
},
|
||||
"node_modules/eastasianwidth": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
||||
@ -5085,6 +5256,17 @@
|
||||
"reusify": "^1.0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/figlet": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/figlet/-/figlet-1.7.0.tgz",
|
||||
"integrity": "sha512-gO8l3wvqo0V7wEFLXPbkX83b7MVjRrk1oRLfYlZXol8nEpb/ON9pcKLI4qpBv5YtOTfrINtqb7b40iYY2FTWFg==",
|
||||
"bin": {
|
||||
"figlet": "bin/index.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/file-entry-cache": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
|
||||
@ -5612,6 +5794,10 @@
|
||||
"resolved": "https://registry.npmjs.org/heap/-/heap-0.2.5.tgz",
|
||||
"integrity": "sha512-G7HLD+WKcrOyJP5VQwYZNC3Z6FcQ7YYjEFiFoIj8PfEr73mu421o8B1N5DKUcc8K37EsJ2XXWA8DtrDz/2dReg=="
|
||||
},
|
||||
"node_modules/hexabot-cli": {
|
||||
"resolved": "cli",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/hexabot-ui": {
|
||||
"resolved": "frontend",
|
||||
"link": true
|
||||
@ -6636,6 +6822,12 @@
|
||||
"@jridgewell/sourcemap-codec": "^1.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/make-error": {
|
||||
"version": "1.3.6",
|
||||
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
|
||||
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/match-sorter": {
|
||||
"version": "6.3.4",
|
||||
"resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.4.tgz",
|
||||
@ -8419,6 +8611,49 @@
|
||||
"typescript": ">=4.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ts-node": {
|
||||
"version": "10.9.2",
|
||||
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
|
||||
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@cspotcode/source-map-support": "^0.8.0",
|
||||
"@tsconfig/node10": "^1.0.7",
|
||||
"@tsconfig/node12": "^1.0.7",
|
||||
"@tsconfig/node14": "^1.0.0",
|
||||
"@tsconfig/node16": "^1.0.2",
|
||||
"acorn": "^8.4.1",
|
||||
"acorn-walk": "^8.1.1",
|
||||
"arg": "^4.1.0",
|
||||
"create-require": "^1.1.0",
|
||||
"diff": "^4.0.1",
|
||||
"make-error": "^1.1.1",
|
||||
"v8-compile-cache-lib": "^3.0.1",
|
||||
"yn": "3.1.1"
|
||||
},
|
||||
"bin": {
|
||||
"ts-node": "dist/bin.js",
|
||||
"ts-node-cwd": "dist/bin-cwd.js",
|
||||
"ts-node-esm": "dist/bin-esm.js",
|
||||
"ts-node-script": "dist/bin-script.js",
|
||||
"ts-node-transpile-only": "dist/bin-transpile.js",
|
||||
"ts-script": "dist/bin-script-deprecated.js"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@swc/core": ">=1.2.50",
|
||||
"@swc/wasm": ">=1.2.50",
|
||||
"@types/node": "*",
|
||||
"typescript": ">=2.7"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@swc/core": {
|
||||
"optional": true
|
||||
},
|
||||
"@swc/wasm": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/tsconfig-paths": {
|
||||
"version": "3.15.0",
|
||||
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
|
||||
@ -8555,9 +8790,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.5.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz",
|
||||
"integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==",
|
||||
"version": "5.6.2",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
|
||||
"integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
@ -8668,6 +8903,12 @@
|
||||
"punycode": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/v8-compile-cache-lib": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
|
||||
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/vite": {
|
||||
"version": "5.4.8",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz",
|
||||
@ -9080,6 +9321,15 @@
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/yn": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
|
||||
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/yocto-queue": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz",
|
||||
|
@ -3,7 +3,8 @@
|
||||
"private": true,
|
||||
"workspaces": [
|
||||
"frontend",
|
||||
"widget"
|
||||
"widget",
|
||||
"cli"
|
||||
],
|
||||
"version": "2.0.0",
|
||||
"description": "Hexabot is a solution for creating and managing chatbots across multiple channels, leveraging AI for advanced conversational capabilities. It provides a user-friendly interface for building, training, and deploying chatbots with integrated support for various messaging platforms.",
|
||||
|
Loading…
Reference in New Issue
Block a user