mirror of
https://github.com/leon-ai/leon.git
synced 2024-08-17 06:00:33 +03:00
97 lines
2.8 KiB
JavaScript
97 lines
2.8 KiB
JavaScript
|
import path from 'node:path'
|
||
|
|
||
|
import { command } from 'execa'
|
||
|
|
||
|
import { LogHelper } from '@/helpers/log-helper'
|
||
|
import { LoaderHelper } from '@/helpers/loader-helper'
|
||
|
import { SkillDomainHelper } from '@/helpers/skill-domain-helper'
|
||
|
import { PYTHON_BRIDGE_SRC_PATH } from '@/constants'
|
||
|
|
||
|
/**
|
||
|
* Manage Node.js skills npm packages
|
||
|
* npm run skill-package {command} {domain}:{skill} {npm package}
|
||
|
*/
|
||
|
;(async () => {
|
||
|
LoaderHelper.start()
|
||
|
|
||
|
const { argv } = process
|
||
|
const givenCommand = argv[2]?.toLowerCase()
|
||
|
const givenSkill = argv[3]?.toLowerCase()
|
||
|
const givenPackage = argv[4]?.toLowerCase()
|
||
|
const supportedCommands = ['install', 'uninstall']
|
||
|
const commands = {
|
||
|
install: {
|
||
|
runningText: 'Installing',
|
||
|
doneText: 'installed',
|
||
|
command: 'install'
|
||
|
},
|
||
|
uninstall: {
|
||
|
runningText: 'Uninstalling',
|
||
|
doneText: 'uninstalled',
|
||
|
command: 'uninstall'
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (
|
||
|
!givenCommand ||
|
||
|
!givenSkill ||
|
||
|
!givenPackage ||
|
||
|
!givenSkill.includes(':')
|
||
|
) {
|
||
|
LogHelper.error(
|
||
|
'Missing skill name or package name. The command should be: "npm run skill-package {command} {domain}:{skill} {npm package}"'
|
||
|
)
|
||
|
process.exit(1)
|
||
|
}
|
||
|
if (!supportedCommands.includes(givenCommand)) {
|
||
|
LogHelper.error(
|
||
|
`Unsupported command "${givenCommand}". Supported commands are: ${supportedCommands.join(
|
||
|
', '
|
||
|
)}`
|
||
|
)
|
||
|
process.exit(1)
|
||
|
}
|
||
|
|
||
|
const commandObject = commands[givenCommand]
|
||
|
const [domainName, skillName] = givenSkill.split(':')
|
||
|
const skillPath = SkillDomainHelper.getSkillPath(domainName, skillName)
|
||
|
const skillInfo = await SkillDomainHelper.getSkillInfo(domainName, skillName)
|
||
|
const skillSRCPath = path.join(skillPath, 'src')
|
||
|
|
||
|
if (skillInfo.bridge === 'python') {
|
||
|
const libPath = path.join(skillSRCPath, 'lib')
|
||
|
const pythonBridgePipfilePath = path.join(PYTHON_BRIDGE_SRC_PATH, 'Pipfile')
|
||
|
|
||
|
LogHelper.error(
|
||
|
`The "${givenSkill}" skill is a Python skill.
|
||
|
Hence, you should manually download the "${givenPackage}" package and put it in the "${libPath}" folder.
|
||
|
Or, you can verify whether the "${givenPackage}" package is already available via the "${pythonBridgePipfilePath}" file.`
|
||
|
)
|
||
|
process.exit(1)
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
LogHelper.info(
|
||
|
`${commandObject.runningText} "${givenPackage}" npm package for the "${givenSkill}" skill ("${skillSRCPath}")...`
|
||
|
)
|
||
|
|
||
|
await command(
|
||
|
`npm ${commandObject.command} --package-lock=false --save-exact=true --prefix ${skillSRCPath} ${givenPackage}`,
|
||
|
{
|
||
|
shell: true,
|
||
|
stdio: 'inherit'
|
||
|
}
|
||
|
)
|
||
|
|
||
|
LogHelper.success(
|
||
|
`Successfully ${commandObject.doneText} "${givenPackage}" npm package in "${skillSRCPath}"`
|
||
|
)
|
||
|
} catch (e) {
|
||
|
LogHelper.error(
|
||
|
`Failed to ${commandObject.command} "${givenPackage}" npm package in "${skillSRCPath}": ${e}`
|
||
|
)
|
||
|
} finally {
|
||
|
LoaderHelper.stop()
|
||
|
}
|
||
|
})()
|