added inferncer to libs

pull/5098/head
Stéphane Tetsing 5 months ago
parent 1e28611c0a
commit 66cca1f491
  1. 7
      apps/remix-ide/src/app/plugins/electron/remixAIDesktopPlugin.tsx
  2. 2853
      apps/remixdesktop/package-lock.json
  3. 5
      apps/remixdesktop/package.json
  4. 166
      apps/remixdesktop/src/lib/llamaInferencer.ts
  5. 97
      apps/remixdesktop/src/plugins/remixAIDektop.ts
  6. 3
      apps/remixdesktop/src/utils/config.ts
  7. 6
      apps/remixdesktop/tsconfig.json
  8. 1171
      apps/remixdesktop/yarn.lock
  9. 5344
      libs/remix-ai-core/package-lock.json
  10. 54
      libs/remix-ai-core/package.json
  11. 3
      libs/remix-ai-core/project.json
  12. 16
      libs/remix-ai-core/src/index.ts
  13. 95
      libs/remix-ai-core/src/inferencers/local/completionTransformer.ts
  14. 155
      libs/remix-ai-core/src/inferencers/local/llamaInferencer.ts
  15. 0
      libs/remix-ai-core/src/inferencers/remote/remoteInference.ts
  16. 4
      libs/remix-ai-core/src/prompts/completionPrompts.ts
  17. 41
      libs/remix-ai-core/src/types/models.ts
  18. 4
      libs/remix-ai-core/src/types/types.ts
  19. 19
      libs/remix-ai-core/tsconfig.json
  20. 8
      libs/remix-ai-core/tsconfig.lib.json
  21. 15
      libs/remix-ai-core/tsconfig.spec.json
  22. 2186
      libs/remix-ai-core/yarn.lock
  23. 10
      libs/remix-ui/editor/src/lib/providers/inlineCompletionProvider.ts
  24. 4
      libs/remix-ui/remix-ai/src/lib/components/Default.tsx
  25. 4
      package.json
  26. 357
      yarn.lock

@ -14,23 +14,16 @@ const desktop_profile = {
}
export class remixAIDesktopPlugin extends ElectronPlugin {
selectedModel: IModel | null = DefaultModels()[0]
constructor() {
console.log('remixAIDesktopPlugin loaded')
super(desktop_profile)
this
}
onActivation(): void {
this.on('remixAI', 'enabled', () => {console.log('someone enable the remixAI desktop plugin')} )
console.log('remixAIDesktopPlugin ---------------------- activated')
console.log('remixAIDesktopPlugin Model: ', this.selectedModel)
}
}
// class RemixAIPlugin extends ElectronPlugin {

File diff suppressed because it is too large Load Diff

@ -1,7 +1,7 @@
{
"name": "remixdesktop",
"version": "1.0.5-insiders",
"main": "build/main.js",
"main": "build/apps/remixdesktop/src/main.js",
"license": "MIT",
"type": "commonjs",
"description": "Remix IDE Desktop",
@ -68,10 +68,13 @@
"electron-updater": "^6.1.8",
"esm": "^3.2.25",
"express": "^4.19.2",
"i": "^0.3.7",
"isomorphic-git": "^1.24.2",
"llama-node": "^0.1.6",
"matomo-tracker": "^2.2.4",
"node-llama-cpp": "^2.8.11",
"node-pty": "^0.10.1",
"npm": "^10.8.1",
"semver": "^7.5.4"
},
"imports": {

@ -1,166 +0,0 @@
import path from 'path';
import fs from 'fs';
import axios from "axios";
import { EventEmitter } from 'events';
import { LlamaModel, LlamaContext, LlamaChatSession, LlamaModelOptions } from "node-llama-cpp";
class LLamaBackend {
static instance: any
static model: any
static modelPath: string
static async getInstance() {
if (this.instance === null || this.instance === undefined) {
const LlamaApi = Function('return import("node-llama-cpp")')();
const { LlamaModel, LlamaContext, LlamaChatSession, LlamaModelOptions } = await LlamaApi;
const getModelOptions = () => {
const options = {
modelPath: this.modelPath? this.modelPath: null,
threads: 1,
temperature: 0.6,
topK: 40,
topP: 0.92,
logitsAll: false,
vocabOnly: false,
useMmap: false,
useMlock: false,
embedding: false,
};
return options;
}
console.log('loading model with options', getModelOptions())
const m = new LlamaModel(getModelOptions());
console.log("system infos\n", LlamaModel.systemInfo)
console.log("model infos\n", m.modelInfo)
const context = new LlamaContext({model: m});
const session = new LlamaChatSession({context});
this.instance = session
return this.instance
}
return this.instance
}
}
export class LLamaInferencer {
plugin: any
isReady: boolean = false
selectedModel: any
modelPath: string
event: EventEmitter
inferencer: any
constructor(props, model) {
this.plugin = props
this.selectedModel = model
this.event = new EventEmitter()
}
async init(envPath?: string) {
try {
await this._downloadModel(this.selectedModel)
if (this.modelPath === undefined) {
console.log('Model not downloaded or not found')
return
}
console.log('Model downloaded at', this.modelPath)
LLamaBackend.model = this.selectedModel
LLamaBackend.modelPath = this.modelPath
this.inferencer = await LLamaBackend.getInstance()
this.inferencer.init()
this.isReady = this.inferencer.initialized
} catch (error) {
console.log('Error initializing the model', error)
}
}
async _downloadModel(model): Promise<void> {
console.log('Downloading the model model', model)
console.log('Downloading model', model.downloadUrl)
const wdir = await this.plugin.call('fs' as any, 'getWorkingDir');
console.log('working dir is', wdir)
const outputLocationDir = await this.plugin.call('fs' as any, 'selectFolder', wdir);
console.log('output location dir is', outputLocationDir)
if (outputLocationDir === undefined) {
console.log('No output location selected');
return;
}
const outputLocationPath = path.join(outputLocationDir, model.modelName);
console.log('output location path is', outputLocationDir)
if (fs.existsSync(outputLocationPath)) {
this.modelPath = outputLocationPath
console.log('Model already exists in the output location', outputLocationPath);
return;
}
// Make a HEAD request to get the file size
const { headers } = await axios.head(model.downloadUrl);
const totalSize = parseInt(headers['content-length'], 10);
// Create a write stream to save the file
const writer = fs.createWriteStream(outputLocationPath);
// Start the file download
const response = await axios({
method: 'get',
url: model.downloadUrl,
responseType: 'stream'
});
let downloadedSize = 0;
response.data.on('data', (chunk: Buffer) => {
downloadedSize += chunk.length;
const progress = (Number((downloadedSize / totalSize) * 100).toFixed(2));
console.log(`Downloaded ${progress}%`);
this.event.emit('download', progress);
});
response.data.pipe(writer);
this.event.emit('ready')
this.modelPath = outputLocationPath
console.log('LLama Download complete');
return new Promise((resolve, reject) => {
writer.on('finish', resolve);
writer.on('error', reject);
});
}
async code_completion(context: any, params): Promise<any> {
if (!this.isReady) {
console.log('model not ready yet')
return
}
// as of now no prompt required
this.event.emit('onInference')
const result = this.inferencer.promptWithMeta(context)
this.event.emit('onInferenceDone')
return result
}
async code_insertion(msg_pfx: string, msg_sfx: string, params): Promise<any> {
if (!this.isReady) {
console.log('model not ready yet')
return
}
this.event.emit('onInference')
// const prompt = getInsertionPrompt(InlineCompletionTransformer.model, msg_pfx, msg_sfx)
// const instance = await InlineCompletionTransformer.getInstance()
// const result = instance(prompt, insertionParams)
// this.event.emit('onInferenceDone')
// return result
}
}

@ -1,17 +1,11 @@
import { ElectronBasePlugin, ElectronBasePluginClient } from "@remixproject/plugin-electron"
import { Profile } from "@remixproject/plugin-utils"
import { app } from 'electron';
// import { Model, ModelType, DefaultModels } from '@remix/remix-ai-core';
import axios from "axios";
import fs from 'fs';
import path from 'path';
import {ipcMain} from 'electron';
import {InlineCompletionServiceTransformer} from '../lib/completionTransformer'
import { LLamaInferencer } from '../lib/llamaInferencer';
//import {LlamaModel, LlamaContext, LlamaChatSession, LlamaModelOptions} from "node-llama-cpp";
// import { IModel, ModelType, DefaultModels } from '@remix/remix-ai-core';
//import { pipeline, env } from '@xenova/transformers';
// use remix ai core
import { InlineCompletionServiceTransformer, LLamaInferencer } from '../../../../libs/remix-ai-core/src/index'
import { cacheDir } from "../utils/config"
// import { isE2E } from "../main";
const profile = {
@ -44,13 +38,13 @@ const clientProfile: Profile = {
description: 'RemixAI provides AI services to Remix IDE Desktop.',
kind: '',
documentation: 'https://remix-ide.readthedocs.io/en/latest/remixai.html',
methods: ['initializeModelBackend', 'code_completion'],
methods: ['initializeModelBackend', 'code_completion', 'code_insertion', 'code_generation', 'code_explaining', 'error_explaining', 'solidity_answer']
}
class RemixAIDesktopPluginClient extends ElectronBasePluginClient {
multitaskModel: LLamaInferencer| InlineCompletionServiceTransformer = null
completionModel: LLamaInferencer| InlineCompletionServiceTransformer = null
readonly modelCacheDir: string = cacheDir
constructor (webContentsId: number, profile: Profile){
console.log("loading the remix plugin client ........................")
@ -71,53 +65,62 @@ class RemixAIDesktopPluginClient extends ElectronBasePluginClient {
}
async initializeModelBackend(multitaskModel: any, completionModel?: any){
console.log("Initializing backend with model ", multitaskModel, completionModel)
// console.log("Initializing backend with model ", multitaskModel, completionModel)
// if (completionModel && completionModel.modelType === 'CODE_COMPLETION'){
// switch (completionModel.modelReqs.backend) {
// case 'llamacpp':
// this.completionModel = new LLamaInferencer(completionModel, this.modelCacheDir)
// break;
// case 'transformerjs':
// this.completionModel = new InlineCompletionServiceTransformer(completionModel, this.modelCacheDir)
// break;
// default:
// console.log("Backend not supported")
// break;
// }
// }
console.log("Initializing backend with model ", multitaskModel)
switch (multitaskModel.modelReqs.backend) {
case 'llamacpp':
this.multitaskModel = new LLamaInferencer(this, multitaskModel)
break;
case 'transformerjs':
this.multitaskModel = new InlineCompletionServiceTransformer(multitaskModel)
break;
default:
console.log("Backend not supported")
break;
}
if (completionModel && completionModel.modelType === 'CODE_COMPLETION'){
switch (completionModel.modelReqs.backend) {
case 'llamacpp':
this.completionModel = new LLamaInferencer(this, completionModel)
break;
case 'transformerjs':
this.completionModel = new InlineCompletionServiceTransformer(completionModel)
break;
default:
console.log("Backend not supported")
break;
}
case 'llamacpp':
this.multitaskModel = new LLamaInferencer(multitaskModel, this.modelCacheDir)
break;
case 'transformerjs':
this.multitaskModel = new InlineCompletionServiceTransformer(multitaskModel, this.modelCacheDir)
break;
default:
console.log("Backend not supported")
break;
}
// init the mmodels
// init the mmodels
if (this.multitaskModel){
await this.multitaskModel.init()
}
}
if (this.completionModel){
await this.completionModel.init()
}
}
code_completion(context: any) {
async code_completion(context: any) {
console.log("Code completion called")
if (this.completionModel){
return this.completionModel.code_completion(context, {max_new_tokens: 100})
return this.completionModel.code_completion(context)
}
// use general purpose model
return this.multitaskModel.code_completion(context, {max_new_tokens: 100})
// use general purpose model
return this.multitaskModel.code_completion(context)
}
async code_insertion(msg_pfx: string, msg_sfx: string) {
console.log("Code insertion called")
if (this.completionModel){
return this.completionModel.code_insertion(msg_pfx, msg_sfx)
}
// use general purpose model
return this.multitaskModel.code_insertion(msg_pfx, msg_sfx)
}
// async _loadLocalModel(): Promise<LlamaChatSession> {
@ -133,7 +136,7 @@ class RemixAIDesktopPluginClient extends ElectronBasePluginClient {
// return session;
// }
// _getModelOptions(): LlamaModelOptions {
// const options: LlamaModelOptions = {
@ -156,7 +159,7 @@ class RemixAIDesktopPluginClient extends ElectronBasePluginClient {
// async getInferenceModel(): Promise<LlamaChatSession> {
// return this._loadLocalModel();
// }
// }
changemodel(newModel: any){
/// dereference the current static inference object

@ -14,6 +14,9 @@ export const createDefaultConfigLocations = async() => {
if (!fs.existsSync(cacheDir + '/compilers')) {
fs.mkdirSync(cacheDir + '/compilers')
}
if (!fs.existsSync(cacheDir + '/models')) {
fs.mkdirSync(cacheDir + '/models')
}
if (!fs.existsSync(cacheDir + '/remixdesktop.json')) {
console.log('create config file')
fs.writeFileSync(cacheDir + '/remixdesktop.json', JSON.stringify({}))

@ -14,9 +14,9 @@
"resolveJsonModule": true,
"paths": {
"*": ["node_modules/*"],
// "@remix/remix-ai-core": [
// "../../libs/remix-ai-core/src/index.ts"
// ],
"@remix/remix-ai-core": [
"../../libs/remix-ai-core/src"
]
},
"typeRoots": ["src/**/*.d.ts", "node_modules/@types", "test/**/*.d.ts", "../remix-ide-e2e/src/**/*.d.ts"]
},

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,12 +1,9 @@
{
"name": "@remix-project/remixd",
"version": "0.6.31",
"description": "remix server: allow accessing file system from remix.ethereum.org and start a dev environment (see help section)",
"main": "index.js",
"types": "./index.d.ts",
"bin": {
"remixd": "./src/bin/remixd.js"
},
"name": "remix-ai-core",
"version": "0.0.6",
"description": "Remix AI core: allows the integration of AI models in Remix IDE",
"main": "./src/index.js",
"types": "./src/index.d.ts",
"publishConfig": {
"access": "public"
},
@ -18,9 +15,13 @@
"remix",
"ide",
"ethereum",
"solidity"
"solidity",
"AI"
],
"author": "Remix Team",
"author": {
"name": "Stéphane Tetsing",
"email": "stephane.fosso@ethereum.org"
},
"license": "MIT",
"bugs": {
"url": "https://github.com/ethereum/remix-project/issues"
@ -37,8 +38,10 @@
"fs-extra": "^3.0.1",
"isbinaryfile": "^3.0.2",
"latest-version": "^5.1.0",
"remix-ai-core": "^0.0.2",
"semver": "^6.3.0",
"ws": "^7.3.0"
"ws": "^7.3.0",
"node-llama-cpp": "^2.8.11"
},
"python": {
"execPath": "python3",
@ -47,21 +50,20 @@
}
},
"devDependencies": {
"@types/axios": "^0.14.0",
"@types/fs-extra": "^9.0.1",
"@types/node": "^18.16.1",
"@types/ws": "^7.2.4",
"@typescript-eslint/eslint-plugin": "^3.2.0",
"@typescript-eslint/parser": "^3.2.0",
"eslint": "6.8.0",
"eslint-config-standard": "14.1.1",
"eslint-plugin-import": "2.20.2",
"eslint-plugin-node": "11.1.0",
"eslint-plugin-promise": "4.2.1",
"eslint-plugin-standard": "4.0.1",
"nodemon": "^2.0.4",
"ts-node": "^8.10.1",
"typescript": "^3.9.3"
"@remixproject/engine-electron": "0.3.43",
"@remixproject/plugin": "0.3.43",
"add": "^2.0.6",
"axios": "^1.6.8",
"byline": "^5.0.0",
"chokidar": "^3.5.3",
"create-require": "^1.1.1",
"esm": "^3.2.25",
"express": "^4.19.2",
"isomorphic-git": "^1.24.2",
"matomo-tracker": "^2.2.4",
"node-llama-cpp": "^2.8.11",
"node-pty": "^0.10.1",
"semver": "^7.5.4"
},
"typings": "index.d.ts",
"gitHead": "ba6b2b226349d035146bd6deb120fef3d499ed16"

@ -23,7 +23,8 @@
"executor": "@nrwl/linter:eslint",
"outputs": ["{options.outputFile}"],
"options": {
"lintFilePatterns": ["libs/remix-ai-core/**/*.ts"]
"lintFilePatterns": ["libs/remix-ai-core/**/*.ts"],
"eslintConfig": "libs/remix-ai-core/.eslintrc"
}
}
},

@ -1,7 +1,15 @@
'use strict'
import { IModel, IModelResponse, IModelRequest, InferenceModel, ICompletions, IParams} from './types/types'
import { ModelType } from './types/constants'
import { DefaultModels } from './types/models'
import { IModel, IModelResponse, IModelRequest, InferenceModel, ICompletions, IParams } from './types/types'
import { ModelType } from './types/constants'
import { DefaultModels } from './types/models'
import { getCompletionPrompt, getInsertionPrompt } from './prompts/completionPrompts'
export { IModel, IModelResponse, IModelRequest, InferenceModel, ModelType, DefaultModels, ICompletions, IParams, getCompletionPrompt, getInsertionPrompt}
import { InlineCompletionServiceTransformer } from './inferencers/local/completionTransformer'
import { LLamaInferencer } from './inferencers/local/llamaInferencer'
export {
IModel, IModelResponse, IModelRequest, InferenceModel,
ModelType, DefaultModels, ICompletions, IParams,
getCompletionPrompt, getInsertionPrompt,
InlineCompletionServiceTransformer, LLamaInferencer
}

@ -1,33 +1,37 @@
import { EventEmitter } from 'events';
// import { ICompletions, IParams } from '../../../../libs/remix-ai-core/src/index'
// import { getInsertionPrompt } from '../../../../libs/remix-ai-core/src/index'
import path from 'path';
import { ICompletions, IModel, IParams } from '../../types/types';
import { getInsertionPrompt } from '../../prompts/completionPrompts';
const insertionParams = {
const insertionParams:IParams = {
temperature: 0.9,
max_new_tokens: 150,
repetition_penalty: 1.5,
num_beams: 1,
num_return_sequences: 1,
max_new_tokens: 1024,
return_full_text: false,
// repetition_penalty: 1.5,
// num_beams: 1,
// num_return_sequences: 1,
}
const completionParams = {
const completionParams:IParams = {
temperature: 0.3,
repetition_penalty: 1.1,
max_new_tokens: 150,
max_new_tokens: 15,
return_full_text: false,
top_p: 0.9,
top_k: 50
}
class InlineCompletionTransformer {
static task = null
static model = null
static instance = null;
static task = null
static model = null
static instance = null;
static defaultModels = null
// getting the instance of the model for the first time will download the model to the cache
static async getInstance(progress_callback = null) {
static async getInstance(progress_callback = null, modelCacheDir:string) {
if (InlineCompletionTransformer.instance === null) {
const TransformersApi = Function('return import("@xenova/transformers")')();
const { pipeline, env} = await TransformersApi;
const { pipeline, env } = await TransformersApi;
if (InlineCompletionTransformer.model.modelReqs.backend !== 'transformerjs') {
console.log('model not supported')
@ -35,7 +39,7 @@ class InlineCompletionTransformer {
}
console.log('loading model', InlineCompletionTransformer.model)
InlineCompletionTransformer.instance = pipeline(InlineCompletionTransformer.task, InlineCompletionTransformer.model.modelName, { progress_callback, quantized: true});
InlineCompletionTransformer.instance = pipeline(InlineCompletionTransformer.task, InlineCompletionTransformer.model.modelName, { progress_callback, quantized: true, cache_dir: modelCacheDir, return_full_text: false });
}
return this.instance;
}
@ -98,24 +102,27 @@ class DownloadManager {
}
export class InlineCompletionServiceTransformer{
export class InlineCompletionServiceTransformer implements ICompletions{
dMng = new DownloadManager()
isReady = false
event = new EventEmitter()
selectedModel: any
inferencer = null
modelCacheDir: string = undefined
constructor(model: any) {
constructor(model:IModel, modelDir:string) {
this.selectedModel = model
this.modelCacheDir = path.join(modelDir, 'models')
this.dMng.events.on('progress', (data) => {
// log progress percentage
// log progress percentage
const loaded = ((Number(data.loaded * 100 / data.total)).toFixed(2)).toString()
console.log('download progress:', loaded + '%')
if (loaded === '100.00') {
this.dMng.events.emit('done', data)
this.isReady = true
}
}
})
this.dMng.events.on('done', (data) => {
})
@ -124,64 +131,48 @@ export class InlineCompletionServiceTransformer{
this.isReady = true
})
this.dMng.events.on('complete', (data) => {
})
}
async init(envPath?: string) {
async init() {
InlineCompletionTransformer.model = this.selectedModel
InlineCompletionTransformer.task = InlineCompletionTransformer.model.task
// create inference instance
await InlineCompletionTransformer.getInstance(this.dMng.onMessageReceived);
if (envPath) {
this.setTransformerEnvPath(envPath)
}
this.inferencer = await InlineCompletionTransformer.getInstance(this.dMng.onMessageReceived, this.modelCacheDir);
console.log('inference instance created', this)
}
setTransformerEnvPath(path: string) {
if (InlineCompletionTransformer.instance === null) {
console.log('model not ready yet')
return
}
if (path === '') {
console.log('path is empty')
return
}
console.log('check this setting env path')
InlineCompletionTransformer.instance.env.set('TRANSFORMERS_CACHE', path)
}
async code_completion(context: any, params=completionParams): Promise<any> {
async code_completion(context: any, params:IParams=completionParams): Promise<any> {
if (!this.isReady) {
console.log('model not ready yet')
return
}
console.log('in transformer code_completion')
// as of now no prompt required
this.event.emit('onInference')
const instance = await InlineCompletionTransformer.getInstance()
const result = await instance(context, params)
const result = await this.inferencer(context, params)
this.event.emit('onInferenceDone')
console.log('result', result)
return result
}
async code_insertion(msg_pfx: string, msg_sfx: string, params=insertionParams): Promise<any> {
console.log('in code_insertion', this)
async code_insertion(msg_pfx: string, msg_sfx: string, params:IParams=insertionParams): Promise<any> {
console.log('in transformer code_insertion')
if (!this.isReady) {
console.log('model not ready yet')
return
}
this.event.emit('onInference')
// const prompt = getInsertionPrompt(InlineCompletionTransformer.model, msg_pfx, msg_sfx)
// const instance = await InlineCompletionTransformer.getInstance()
// const result = instance(prompt, insertionParams)
// this.event.emit('onInferenceDone')
// return result
const prompt = getInsertionPrompt(InlineCompletionTransformer.model, msg_pfx, msg_sfx)
console.log('prompt', prompt)
const result = this.inferencer(prompt, insertionParams)
this.event.emit('onInferenceDone')
console.log('result', result)
return result
}
}

@ -0,0 +1,155 @@
import path from 'path';
import fs from 'fs';
import axios from "axios";
import { EventEmitter } from 'events';
import { ICompletions, IModel, IParams } from '../../types/types';
import { getInsertionPrompt } from '../../prompts/completionPrompts';
class LLamaBackend {
static instance: any
static model: any
static modelPath: string
static async getInstance() {
if (this.instance === null || this.instance === undefined) {
const LlamaApi = Function('return import("node-llama-cpp")')();
const { LlamaModel, LlamaContext, LlamaChatSession, LlamaModelOptions } = await LlamaApi;
const getModelOptions = () => {
const options = {
modelPath: this.modelPath? this.modelPath: null,
threads: 1,
temperature: 0.6,
topK: 40,
topP: 0.92,
logitsAll: false,
vocabOnly: false,
useMmap: false,
useMlock: false,
embedding: false,
};
return options;
}
console.log('loading model with options', getModelOptions())
const m = new LlamaModel(getModelOptions());
console.log("system infos\n", LlamaModel.systemInfo)
const context = new LlamaContext({ model: m });
const session = new LlamaChatSession({ context });
this.instance = session
return this.instance
}
return this.instance
}
}
export class LLamaInferencer implements ICompletions {
isReady: boolean = false
selectedModel: any
modelPath: string
event: EventEmitter
inferencer: any
modelCacheDir: string = undefined
constructor(model:IModel, modelDir:string) {
this.selectedModel = model
this.event = new EventEmitter()
this.modelCacheDir = path.join(modelDir, 'models')
}
async init() {
try {
await this._downloadModel(this.selectedModel)
if (this.modelPath === undefined) {
console.log('Model not downloaded or not found')
return
}
console.log('Model downloaded at', this.modelPath)
LLamaBackend.model = this.selectedModel
LLamaBackend.modelPath = this.modelPath
this.inferencer = await LLamaBackend.getInstance()
this.inferencer.init()
this.isReady = this.inferencer.initialized
} catch (error) {
console.log('Error initializing the model', error)
}
}
async _downloadModel(model): Promise<void> {
if (this.modelCacheDir === undefined) {
console.log('Model cache directory not provided')
return
} else {
const outputLocationPath = path.join(this.modelCacheDir, model.modelName);
console.log('output location path is', outputLocationPath)
if (fs.existsSync(outputLocationPath)) {
this.modelPath = outputLocationPath
console.log('Model already exists in the output location', outputLocationPath);
return;
}
// Make a HEAD request to get the file size
const { headers } = await axios.head(model.downloadUrl);
const totalSize = parseInt(headers['content-length'], 10);
// Create a write stream to save the file
const writer = fs.createWriteStream(outputLocationPath);
// Start the file download
const response = await axios({
method: 'get',
url: model.downloadUrl,
responseType: 'stream'
});
let downloadedSize = 0;
response.data.on('data', (chunk: Buffer) => {
downloadedSize += chunk.length;
const progress = (Number((downloadedSize / totalSize) * 100).toFixed(2));
console.log(`Downloaded ${progress}%`);
this.event.emit('download', progress);
});
response.data.pipe(writer);
this.event.emit('ready')
this.modelPath = outputLocationPath
console.log('LLama Download complete');
return new Promise((resolve, reject) => {
writer.on('finish', resolve);
writer.on('error', reject);
});
}
}
async code_completion(context: any, params?:IParams): Promise<any> {
if (!this.isReady) {
console.log('model not ready yet')
return
}
// as of now no prompt required
this.event.emit('onInference')
const result = params? this.inferencer.prompt(context, params): this.inferencer.prompt(context)
this.event.emit('onInferenceDone')
console.log('result', await result)
return result
}
async code_insertion(msg_pfx: string, msg_sfx: string, params?:IParams): Promise<any> {
if (!this.isReady) {
console.log('model not ready yet')
return
}
this.event.emit('onInference')
const prompt = getInsertionPrompt(this.selectedModel, msg_pfx, msg_sfx)
const result = params? this.inferencer.prompt(prompt, params): this.inferencer.prompt(prompt)
this.event.emit('onInferenceDone')
return result
}
}

@ -4,10 +4,10 @@ import { IModel } from "../types/types";
export const getInsertionPrompt = (model:IModel, msg_pfx, msg_sfx) => {
if ((model.modelType === 'code_completion_insertion') && (model.modelName.toLocaleLowerCase().includes('deepseek'))){
return `<|fim▁begin|> {msg_pfx} <|fim▁hole|> {msg_sfx} <|fim▁end|>`
return "<|fim▁begin|>" + msg_pfx + "<|fim▁hole|> " + msg_sfx + "<|fim▁end|>"
}
else {
// return error model not supported yet
// return error model not supported yet
}
}

@ -1,37 +1,44 @@
// create a list of supported models
// create a list of supported models
// create a function getModels returning a list of all supported models
// create a function getModel returning a model by its name
import { IModel} from './types';
import { ModelType} from './constants';
import { IModel } from './types';
import { ModelType } from './constants';
const DefaultModels = (): IModel[] => {
const model1:IModel = {
name: 'DeepSeek',
task: 'text-generation',
const model1:IModel = {
name: 'DeepSeek',
task: 'text-generation',
modelName: 'deepseek-coder-1.3b-instruct.gguf',
downloadUrl: 'https://huggingface.co/TheBloke/deepseek-coder-1.3b-instruct-GGUF/resolve/main/deepseek-coder-1.3b-instruct.Q4_K_M.gguf?download=true',
modelType: ModelType.CODE_COMPLETION,
modelReqs: { backend: 'llamacpp', minSysMemory: 2, GPURequired: false, MinGPUVRAM: 2}
};
const model2: IModel = {
modelReqs: { backend: 'llamacpp', minSysMemory: 2, GPURequired: false, MinGPUVRAM: 2 }
};
const model2: IModel = {
name: 'DeepSeek',
task: 'text-generation',
task: 'text-generation',
modelName: 'deepseek-coder-6.7b-instruct.gguf',
downloadUrl: 'https://huggingface.co/TheBloke/deepseek-coder-6.7B-instruct-GGUF/resolve/main/deepseek-coder-6.7b-instruct.Q4_K_M.gguf?download=true',
downloadUrl: 'https://huggingface.co/TheBloke/deepseek-coder-6.7B-instruct-GGUF/resolve/main/deepseek-coder-6.7b-instruct.Q4_K_M.gguf?download=true',
modelType: ModelType.GENERAL,
modelReqs: { backend: 'llamacpp', minSysMemory: 8, GPURequired: true, MinGPUVRAM: 8}
modelReqs: { backend: 'llamacpp', minSysMemory: 8, GPURequired: true, MinGPUVRAM: 8 }
};
const model3: IModel = {
name: 'DeepSeekTransformer',
task: 'text-generation',
task: 'text-generation',
modelName: 'Xenova/deepseek-coder-1.3b-base',
downloadUrl: 'Xenova/deepseek-coder-1.3b-base',
modelType: ModelType.CODE_COMPLETION_INSERTION,
modelReqs: { backend: 'transformerjs', minSysMemory: 2, GPURequired: false, MinGPUVRAM: 2}
modelReqs: { backend: 'transformerjs', minSysMemory: 2, GPURequired: false, MinGPUVRAM: 2 }
};
const model4: IModel = {
name: 'DeepSeek',
task: 'text-generation',
modelName: 'deepseek-coder-1.3b-base.gguf',
downloadUrl: 'https://huggingface.co/TheBloke/deepseek-coder-1.3b-base-GGUF/resolve/main/deepseek-coder-1.3b-base.Q4_K_M.gguf?download=true',
modelType: ModelType.CODE_COMPLETION_INSERTION,
modelReqs: { backend: 'llamacpp', minSysMemory: 2, GPURequired: false, MinGPUVRAM: 2 }
};
return [model1, model2, model3];
return [model1, model2, model3, model4];
}
const getModel = async (name: string): Promise<IModel | undefined> => {
@ -42,4 +49,4 @@ const loadModel = async (modelname: string): Promise<void> => {
console.log(`Loading model ${modelname}`);
}
export { DefaultModels}
export { DefaultModels }

@ -49,4 +49,8 @@ export interface IParams {
no_repeat_ngram_size?: number;
num_beams?: number;
num_return_sequences?: number;
top_k?: number;
top_p?: number;
stream_result?: boolean;
return_full_text?: boolean;
}

@ -1,13 +1,10 @@
{
"extends": "../../tsconfig.base.json",
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
},
{
"path": "./tsconfig.spec.json"
}
]
}
"compilerOptions": {
"types": ["node"],
"module": "commonjs",
"esModuleInterop": true,
"outDir": "./dist",
},
"include": ["**/*.ts"]
}

@ -1,13 +1,15 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"outDir": "../../dist/out-tsc",
"declaration": true,
"rootDir": "./src",
"types": ["node"]
},
"exclude": ["**/*.spec.ts"],
"include": ["bin", "src", "bin/origins.json", "../../apps/remixdesktop/src/lib/completionTransformer.ts"]
"exclude": [
"**/*.spec.ts",
"test/"
],
"include": ["**/*.ts"]
}

@ -1,15 +0,0 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
"module": "commonjs",
"types": ["node"]
},
"include": [
"**/*.spec.ts",
"**/*.spec.tsx",
"**/*.spec.js",
"**/*.spec.jsx",
"**/*.d.ts"
]
}

File diff suppressed because it is too large Load Diff

@ -61,7 +61,7 @@ export class RemixInLineCompletionProvider implements monacoTypes.languages.Inli
// use the code generation model, only take max 1000 word as context
this.props.plugin.call('terminal', 'log', { type: 'aitypewriterwarning', value: 'Solcoder - generating code for following comment: ' + ask.replace('///', '') })
const data = await this.props.plugin.call('solcoder', 'code_generation', word)
const data = await this.props.plugin.call('remixAID', 'code_insertion', word, word_after)
const parsedData = data[0].trimStart() //JSON.parse(data).trimStart()
const item: monacoTypes.languages.InlineCompletion = {
@ -99,8 +99,8 @@ export class RemixInLineCompletionProvider implements monacoTypes.languages.Inli
if (word.replace(/ +$/, '').endsWith('\n')){
// Code insertion
try {
const output = await this.props.plugin.call('solcoder', 'code_insertion', word, word_after)
const generatedText = output[0] // no need to clean it. should already be
const output = await this.props.plugin.call('remixAID', 'code_insertion', word, word_after)
const generatedText = output[0].generated_text // no need to clean it. should already be
const item: monacoTypes.languages.InlineCompletion = {
insertText: generatedText
@ -122,8 +122,8 @@ export class RemixInLineCompletionProvider implements monacoTypes.languages.Inli
try {
// Code completion
const output = await this.props.plugin.call('solcoder', 'code_completion', word)
const generatedText = output[0]
const output = await this.props.plugin.call('remixAID', 'code_completion', word)
const generatedText = output[0].generated_text
let clean = generatedText
if (generatedText.indexOf('@custom:dev-run-script./') !== -1) {

@ -57,7 +57,7 @@ export const Default = (props) => {
// if (!completer.ready) {
// await completer.init();
// }
await props.plugin.call(pluginName, 'initializeModelBackend', DefaultModels()[0]);
await props.plugin.call(pluginName, 'initializeModelBackend', DefaultModels()[3]);
// // const code = completer.code_completion("pragma solidity ^0.8.0;\n")
console.log("Got transformer model completion ");
@ -71,7 +71,7 @@ export const Default = (props) => {
}
}}
> Test inference </button>
> Init Model </button>
</div>
<div className="remix_ai_plugin_find-part">
<a href="#" className="remix_ai_plugin_search_result_item_title">/fix the problems in my code</a>

@ -161,8 +161,10 @@
"jszip": "^3.6.0",
"just-once": "^2.2.0",
"latest-version": "^5.1.0",
"llama-node": "^0.1.6",
"merge": "^2.1.1",
"npm-install-version": "^6.0.2",
"node-llama-cpp": "^2.8.11",
"octokit": "^3.1.2",
"openai": "^3.3.0",
"path-browserify": "^1.0.1",
@ -264,6 +266,7 @@
"@uniswap/v2-core": "^1.0.1",
"@uniswap/v3-core": "^1.0.1",
"@vercel/webpack-asset-relocator-loader": "^1.7.3",
"@xenova/transformers": "^2.17.2",
"ace-mode-lexon": "^1.*.*",
"ace-mode-move": "0.0.1",
"ace-mode-solidity": "^0.1.0",
@ -336,6 +339,7 @@
"npm-run-all": "^4.0.2",
"nx": "15.7.1",
"nyc": "^13.3.0",
"onnxruntime-web": "^1.18.0",
"onchange": "^3.2.1",
"os-browserify": "^0.3.0",
"process": "^0.11.10",

@ -3311,6 +3311,18 @@
dependencies:
glob-to-regexp "^0.4.1"
"@kwsites/file-exists@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99"
integrity sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==
dependencies:
debug "^4.1.1"
"@kwsites/promise-deferred@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919"
integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==
"@leichtgewicht/ip-codec@^2.0.1":
version "2.0.4"
resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b"
@ -5015,6 +5027,11 @@
resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-19.1.0.tgz#75ec7e64743870fc73e1ab4bc6ec252ecdd624dc"
integrity sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw==
"@octokit/openapi-types@^22.2.0":
version "22.2.0"
resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-22.2.0.tgz#75aa7dcd440821d99def6a60b5f014207ae4968e"
integrity sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==
"@octokit/plugin-enterprise-rest@^6.0.1":
version "6.0.1"
resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437"
@ -5025,6 +5042,13 @@
resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-4.0.0.tgz#b26024fa454039c18b948f13bf754ff86b89e8b9"
integrity sha512-7HcYW5tP7/Z6AETAPU14gp5H5KmCPT3hmJrS/5tO7HIgbwenYmgw4OY9Ma54FDySuxMwD+wsJlxtuGWwuZuItA==
"@octokit/plugin-paginate-rest@11.3.1":
version "11.3.1"
resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz#fe92d04b49f134165d6fbb716e765c2f313ad364"
integrity sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==
dependencies:
"@octokit/types" "^13.5.0"
"@octokit/plugin-paginate-rest@^1.1.1":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc"
@ -5044,6 +5068,13 @@
resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85"
integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==
"@octokit/plugin-rest-endpoint-methods@13.2.2":
version "13.2.2"
resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz#af8e5dd2cddfea576f92ffaf9cb84659f302a638"
integrity sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==
dependencies:
"@octokit/types" "^13.5.0"
"@octokit/plugin-rest-endpoint-methods@2.4.0":
version "2.4.0"
resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e"
@ -5154,6 +5185,13 @@
dependencies:
"@octokit/openapi-types" "^19.1.0"
"@octokit/types@^13.0.0", "@octokit/types@^13.5.0":
version "13.5.0"
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.5.0.tgz#4796e56b7b267ebc7c921dcec262b3d5bfb18883"
integrity sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==
dependencies:
"@octokit/openapi-types" "^22.2.0"
"@octokit/types@^2.0.0", "@octokit/types@^2.0.1":
version "2.16.2"
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.16.2.tgz#4c5f8da3c6fecf3da1811aef678fda03edac35d2"
@ -5435,6 +5473,13 @@
"@remixproject/plugin-api" "0.3.42"
"@remixproject/plugin-utils" "0.3.42"
"@remixproject/plugin-api@0.3.33":
version "0.3.33"
resolved "https://registry.yarnpkg.com/@remixproject/plugin-api/-/plugin-api-0.3.33.tgz#29699f980ea00bebf720961cc0e78887e03903ec"
integrity sha512-fBEbRr6/mgQdfNdRqYQL3yewsPfTxV41F509CngbD6YdY5YKBihJhfGFHbd2rKSyXOgBiHIbe0SsV3OXpFdWnw==
dependencies:
"@remixproject/plugin-utils" "0.3.33"
"@remixproject/plugin-api@0.3.42":
version "0.3.42"
resolved "https://registry.yarnpkg.com/@remixproject/plugin-api/-/plugin-api-0.3.42.tgz#c64d8b75a139d4e5cc342861d288d638818a8081"
@ -5452,6 +5497,13 @@
"@remixproject/plugin-api" "0.3.42"
"@remixproject/plugin-utils" "0.3.42"
"@remixproject/plugin-utils@0.3.33":
version "0.3.33"
resolved "https://registry.yarnpkg.com/@remixproject/plugin-utils/-/plugin-utils-0.3.33.tgz#7b697403031598276baaf16bb82d6c62062053fc"
integrity sha512-cAo21ot4/G5BkN8ypDwg8MMCrEmLdXwMd3lQZUeB5enPC3KxmzQz71+OgEYl718Hwy+GtHaLq17FEXCHC5YV9w==
dependencies:
tslib "2.0.1"
"@remixproject/plugin-utils@0.3.42":
version "0.3.42"
resolved "https://registry.yarnpkg.com/@remixproject/plugin-utils/-/plugin-utils-0.3.42.tgz#4ac4b4aaa15e14f1a905236645a4813a63b00c9c"
@ -5469,6 +5521,15 @@
"@remixproject/plugin-utils" "0.3.42"
axios "^0.21.1"
"@remixproject/plugin-ws@0.3.33":
version "0.3.33"
resolved "https://registry.yarnpkg.com/@remixproject/plugin-ws/-/plugin-ws-0.3.33.tgz#98a003e83ffafb5a7a35ca4e8c59d849ecb017cf"
integrity sha512-Zkp8MK8jxnNm3uruu0dF8vqeh90JsLXttJP4LZF0HaStRRK4d2XG6CgE5mBiC2J4uTEwGP26H/vmqi+POBPTEg==
dependencies:
"@remixproject/plugin" "0.3.33"
"@remixproject/plugin-api" "0.3.33"
"@remixproject/plugin-utils" "0.3.33"
"@remixproject/plugin-ws@0.3.42":
version "0.3.42"
resolved "https://registry.yarnpkg.com/@remixproject/plugin-ws/-/plugin-ws-0.3.42.tgz#5c93112445de3bfbaddd3ce04e177d66e2ebd08a"
@ -5478,6 +5539,15 @@
"@remixproject/plugin-api" "0.3.42"
"@remixproject/plugin-utils" "0.3.42"
"@remixproject/plugin@0.3.33":
version "0.3.33"
resolved "https://registry.yarnpkg.com/@remixproject/plugin/-/plugin-0.3.33.tgz#2939cdb6a1231743d7f00c10f5ea47eddd49b602"
integrity sha512-ia6LevsWYPkcRwOBl3umA2fPCgYt2TmB437Pafs9BE6fD9judEvlvEqXjBy9GLBsZzZWSiyYenOnW8HIiwqfMA==
dependencies:
"@remixproject/plugin-api" "0.3.33"
"@remixproject/plugin-utils" "0.3.33"
events "3.2.0"
"@remixproject/plugin@0.3.42":
version "0.3.42"
resolved "https://registry.yarnpkg.com/@remixproject/plugin/-/plugin-0.3.42.tgz#26709eedf53a7fe13717fa909eebebfd757f74bf"
@ -8503,6 +8573,15 @@ axios@^0.26.0:
dependencies:
follow-redirects "^1.14.8"
axios@^1.6.5:
version "1.7.2"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621"
integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==
dependencies:
follow-redirects "^1.15.6"
form-data "^4.0.0"
proxy-from-env "^1.1.0"
axobject-query@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be"
@ -9344,6 +9423,15 @@ bl@^4.0.0, bl@^4.0.3, bl@^4.1.0:
inherits "^2.0.4"
readable-stream "^3.4.0"
bl@^5.0.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273"
integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==
dependencies:
buffer "^6.0.3"
inherits "^2.0.4"
readable-stream "^3.4.0"
blake2b-wasm@^2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/blake2b-wasm/-/blake2b-wasm-2.4.0.tgz#9115649111edbbd87eb24ce7c04b427e4e2be5be"
@ -10353,6 +10441,11 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chalk@^5.0.0, chalk@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385"
integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==
change-case@^4.1.1:
version "4.1.2"
resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12"
@ -10426,6 +10519,11 @@ child_process@^1.0.2:
resolved "https://registry.yarnpkg.com/child_process/-/child_process-1.0.2.tgz#b1f7e7fc73d25e7fd1d455adc94e143830182b5a"
integrity sha512-Wmza/JzL0SiWz7kl6MhIKT5ceIlnFPJX+lwUGj7Clhy5MMldsSoJR0+uvRzOS5Kv45Mq7t1PoE8TsOA9bzvb6g==
chmodrp@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/chmodrp/-/chmodrp-1.0.2.tgz#d1c0075dfcc97fe7f5f924252438a84bd5d26a9a"
integrity sha512-TdngOlFV1FLTzU0o1w8MB6/BFywhtLC0SzRTGJU7T9lmdjlCWeMRt1iVo0Ki+ldwNk0BqNiKoc8xpLZEQ8mY1w==
chokidar@3.5.1:
version "3.5.1"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a"
@ -10668,11 +10766,30 @@ cli-cursor@^2.1.0:
dependencies:
restore-cursor "^2.0.0"
cli-cursor@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea"
integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==
dependencies:
restore-cursor "^4.0.0"
cli-progress@^3.12.0:
version "3.12.0"
resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942"
integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==
dependencies:
string-width "^4.2.3"
cli-spinners@2.6.1, cli-spinners@^2.5.0:
version "2.6.1"
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d"
integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==
cli-spinners@^2.9.0:
version "2.9.2"
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41"
integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==
cli-table@^0.3.1:
version "0.3.6"
resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.6.tgz#e9d6aa859c7fe636981fd3787378c2a20bce92fc"
@ -10851,6 +10968,25 @@ cluster-key-slot@^1.1.0:
resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac"
integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==
cmake-js@^7.2.1:
version "7.3.0"
resolved "https://registry.yarnpkg.com/cmake-js/-/cmake-js-7.3.0.tgz#6fd6234b7aeec4545c1c806f9e3f7ffacd9798b2"
integrity sha512-dXs2zq9WxrV87bpJ+WbnGKv8WUBXDw8blNiwNHoRe/it+ptscxhQHKB1SJXa1w+kocLMeP28Tk4/eTCezg4o+w==
dependencies:
axios "^1.6.5"
debug "^4"
fs-extra "^11.2.0"
lodash.isplainobject "^4.0.6"
memory-stream "^1.0.0"
node-api-headers "^1.1.0"
npmlog "^6.0.2"
rc "^1.2.7"
semver "^7.5.4"
tar "^6.2.0"
url-join "^4.0.1"
which "^2.0.2"
yargs "^17.7.2"
cmd-shim@~2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb"
@ -11578,6 +11714,13 @@ cross-blob@^2.0.1:
blob-polyfill "^5.0.20210201"
fetch-blob "^2.1.2"
cross-env@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==
dependencies:
cross-spawn "^7.0.1"
cross-fetch@3.1.5, cross-fetch@^3.1.5:
version "3.1.5"
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f"
@ -12082,6 +12225,13 @@ debug@^3.1.0, debug@^3.2.7:
dependencies:
ms "^2.1.1"
debug@^4, debug@^4.3.5:
version "4.3.5"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e"
integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==
dependencies:
ms "2.1.2"
debuglog@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
@ -12880,6 +13030,11 @@ emoji-regex@^10.1.0:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.1.0.tgz#d50e383743c0f7a5945c47087295afc112e3cf66"
integrity sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg==
emoji-regex@^10.2.1:
version "10.3.0"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23"
integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==
emoji-regex@^7.0.1:
version "7.0.3"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
@ -12976,6 +13131,11 @@ env-paths@^2.2.0:
resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
env-var@^7.3.1:
version "7.5.0"
resolved "https://registry.yarnpkg.com/env-var/-/env-var-7.5.0.tgz#5f0c2d999d2997eaf7cf7f1437b3f857b865bf48"
integrity sha512-mKZOzLRN0ETzau2W2QXefbFjo5EF4yWq28OyKb9ICdeNhHJlOE/pHHnz4hdYJ9cNZXcJHo5xN4OT4pzuSHSNvA==
envinfo@7.8.1, envinfo@^7.3.1, envinfo@^7.7.3:
version "7.8.1"
resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475"
@ -14864,6 +15024,15 @@ fs-extra@^11.1.0:
jsonfile "^6.0.1"
universalify "^2.0.0"
fs-extra@^11.1.1, fs-extra@^11.2.0:
version "11.2.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b"
integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==
dependencies:
graceful-fs "^4.2.0"
jsonfile "^6.0.1"
universalify "^2.0.0"
fs-extra@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291"
@ -17309,6 +17478,11 @@ is-interactive@^1.0.0:
resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
is-interactive@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90"
integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==
is-ip@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-3.1.0.tgz#2ae5ddfafaf05cb8008a62093cf29734f657c5d8"
@ -17584,6 +17758,11 @@ is-unicode-supported@^0.1.0:
resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
is-unicode-supported@^1.1.0, is-unicode-supported@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714"
integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==
is-utf8@^0.2.0, is-utf8@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
@ -17679,6 +17858,11 @@ isexe@^2.0.0:
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
isexe@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d"
integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==
iso-constants@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/iso-constants/-/iso-constants-0.1.2.tgz#3d2456ed5aeaa55d18564f285ba02a47a0d885b4"
@ -19549,6 +19733,14 @@ log-symbols@4.1.0, log-symbols@^4.0.0, log-symbols@^4.1.0:
chalk "^4.1.0"
is-unicode-supported "^0.1.0"
log-symbols@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93"
integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==
dependencies:
chalk "^5.0.0"
is-unicode-supported "^1.1.0"
log-update@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1"
@ -20089,6 +20281,13 @@ memory-level@^1.0.0:
functional-red-black-tree "^1.0.1"
module-error "^1.0.1"
memory-stream@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/memory-stream/-/memory-stream-1.0.0.tgz#481dfd259ccdf57b03ec2c9632960044180e73c2"
integrity sha512-Wm13VcsPIMdG96dzILfij09PvuS3APtcKNh7M28FsCA/w6+1mjR7hhPmfFNoilX9xU7wTdhsH5lJAm6XNzdtww==
dependencies:
readable-stream "^3.4.0"
memorystream@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
@ -21434,6 +21633,11 @@ node-addon-api@^7.0.0:
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.0.tgz#71f609369379c08e251c558527a107107b5e0fdb"
integrity sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==
node-api-headers@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/node-api-headers/-/node-api-headers-1.1.0.tgz#3f9dd7bb10b29e1c3e3db675979605a308b2373c"
integrity sha512-ucQW+SbYCUPfprvmzBsnjT034IGRB2XK8rRc78BgjNKhTdFKgAwAmgW704bKIBmcYW48it0Gkjpkd39Azrwquw==
node-api-version@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/node-api-version/-/node-api-version-0.1.4.tgz#1ed46a485e462d55d66b5aa1fe2821720dedf080"
@ -21573,6 +21777,28 @@ node-int64@^0.4.0:
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
node-llama-cpp@^2.8.11:
version "2.8.12"
resolved "https://registry.yarnpkg.com/node-llama-cpp/-/node-llama-cpp-2.8.12.tgz#70c5657d5ed20971f144b4cad1a2d63701d0e1d7"
integrity sha512-7+2kFifN6G9G9XpewRTJeb0AMrefh0EQqQ97GqxEH7c86NuSoWwk0w2qujZjHFTV1TA8nG90DnvfHfdX7iUBHA==
dependencies:
chalk "^5.3.0"
chmodrp "^1.0.2"
cli-progress "^3.12.0"
cmake-js "^7.2.1"
cross-env "^7.0.3"
cross-spawn "^7.0.3"
env-var "^7.3.1"
fs-extra "^11.1.1"
log-symbols "^5.1.0"
node-addon-api "^7.0.0"
octokit "^3.1.0"
ora "^7.0.1"
simple-git "^3.19.1"
uuid "^9.0.0"
which "^4.0.0"
yargs "^17.7.2"
node-notifier@^4.2.3:
version "4.6.1"
resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-4.6.1.tgz#056d14244f3dcc1ceadfe68af9cff0c5473a33f3"
@ -22036,7 +22262,7 @@ npmlog@^4.1.2:
gauge "~2.7.3"
set-blocking "~2.0.0"
npmlog@^6.0.0:
npmlog@^6.0.0, npmlog@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830"
integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==
@ -22325,6 +22551,22 @@ octokit-pagination-methods@^1.1.0:
resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4"
integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==
octokit@^3.1.0:
version "3.2.1"
resolved "https://registry.yarnpkg.com/octokit/-/octokit-3.2.1.tgz#d376ca3b12a61c58da02a93c491d2e627069b194"
integrity sha512-u+XuSejhe3NdIvty3Jod00JvTdAE/0/+XbhIDhefHbu+2OcTRHd80aCiH6TX19ZybJmwPQBKFQmHGxp0i9mJrg==
dependencies:
"@octokit/app" "^14.0.2"
"@octokit/core" "^5.0.0"
"@octokit/oauth-app" "^6.0.0"
"@octokit/plugin-paginate-graphql" "^4.0.0"
"@octokit/plugin-paginate-rest" "11.3.1"
"@octokit/plugin-rest-endpoint-methods" "13.2.2"
"@octokit/plugin-retry" "^6.0.0"
"@octokit/plugin-throttling" "^8.0.0"
"@octokit/request-error" "^5.0.0"
"@octokit/types" "^13.0.0"
octokit@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/octokit/-/octokit-3.1.2.tgz#e574e4f2f5f8712e10412ce81fb56a74c93d4cfa"
@ -22499,6 +22741,21 @@ ora@5.4.1, ora@^5.1.0:
strip-ansi "^6.0.0"
wcwidth "^1.0.1"
ora@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/ora/-/ora-7.0.1.tgz#cdd530ecd865fe39e451a0e7697865669cb11930"
integrity sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==
dependencies:
chalk "^5.3.0"
cli-cursor "^4.0.0"
cli-spinners "^2.9.0"
is-interactive "^2.0.0"
is-unicode-supported "^1.3.0"
log-symbols "^5.1.0"
stdin-discarder "^0.1.0"
string-width "^6.1.0"
strip-ansi "^7.1.0"
ordered-read-streams@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e"
@ -24230,7 +24487,7 @@ rc@^1.0.1, rc@^1.1.6:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
rc@^1.1.1, rc@^1.2.8:
rc@^1.1.1, rc@^1.2.7, rc@^1.2.8:
version "1.2.8"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
@ -25121,6 +25378,44 @@ remark-rehype@^10.0.0:
mdast-util-to-hast "^12.1.0"
unified "^10.0.0"
remix-ai-core@^0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/remix-ai-core/-/remix-ai-core-0.0.2.tgz#4417ddcb105d7d82a6cbbe0fd2893296e7607f8e"
integrity sha512-pKo80rXYJl8dR/bDy0Lsfp4MjBlpoxNLev8jsN0gjr3UdtdqWEPuCwP5ROzvegSVvkd2XhTTMFr/Nu0yybfGZQ==
dependencies:
"@remixproject/plugin" "0.3.33"
"@remixproject/plugin-api" "0.3.33"
"@remixproject/plugin-utils" "0.3.33"
"@remixproject/plugin-ws" "0.3.33"
axios "1.6.0"
chokidar "^2.1.8"
commander "^9.4.1"
fs-extra "^3.0.1"
isbinaryfile "^3.0.2"
latest-version "^5.1.0"
semver "^6.3.0"
ws "^7.3.0"
remix-ai-core@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/remix-ai-core/-/remix-ai-core-0.0.6.tgz#92e56d86f61a055c1bb30c35f50372889c81ae8f"
integrity sha512-k+YVVl6YnOp+ZRoUCUpjLmt3s6fyELDtIQW7/I737/R3HPQzBjhAZe4Lp8uPjZdlGTucdYnVAbFoRlyNACNQWg==
dependencies:
"@remixproject/plugin" "0.3.33"
"@remixproject/plugin-api" "0.3.33"
"@remixproject/plugin-utils" "0.3.33"
"@remixproject/plugin-ws" "0.3.33"
axios "1.6.0"
chokidar "^2.1.8"
commander "^9.4.1"
fs-extra "^3.0.1"
isbinaryfile "^3.0.2"
latest-version "^5.1.0"
node-llama-cpp "^2.8.11"
remix-ai-core "^0.0.2"
semver "^6.3.0"
ws "^7.3.0"
remove-bom-buffer@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53"
@ -25410,6 +25705,14 @@ restore-cursor@^3.1.0:
onetime "^5.1.0"
signal-exit "^3.0.2"
restore-cursor@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9"
integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==
dependencies:
onetime "^5.1.0"
signal-exit "^3.0.2"
resumer@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759"
@ -26174,6 +26477,15 @@ simple-get@^4.0.1:
once "^1.3.1"
simple-concat "^1.0.0"
simple-git@^3.19.1:
version "3.25.0"
resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.25.0.tgz#3666e76d6831f0583dc380645945b97e0ac4aab6"
integrity sha512-KIY5sBnzc4yEcJXW7Tdv4viEz8KyG+nU0hay+DWZasvdFOYKeUZ6Xc25LUHHjw0tinPT7O1eY6pzX7pRT1K8rw==
dependencies:
"@kwsites/file-exists" "^1.1.1"
"@kwsites/promise-deferred" "^1.1.1"
debug "^4.3.5"
simple-swizzle@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
@ -26763,6 +27075,13 @@ std-env@^3.7.0:
resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2"
integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==
stdin-discarder@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.1.0.tgz#22b3e400393a8e28ebf53f9958f3880622efde21"
integrity sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==
dependencies:
bl "^5.0.0"
stream-browserify@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
@ -26907,6 +27226,15 @@ string-width@^5.0.0:
emoji-regex "^9.2.2"
strip-ansi "^7.0.1"
string-width@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-6.1.0.tgz#96488d6ed23f9ad5d82d13522af9e4c4c3fd7518"
integrity sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==
dependencies:
eastasianwidth "^0.2.0"
emoji-regex "^10.2.1"
strip-ansi "^7.0.1"
string.prototype.matchall@^4.0.7:
version "4.0.8"
resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3"
@ -27086,7 +27414,7 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
dependencies:
ansi-regex "^4.1.0"
strip-ansi@^7.0.1:
strip-ansi@^7.0.1, strip-ansi@^7.1.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
@ -27498,6 +27826,18 @@ tar@^6.0.5, tar@^6.1.11, tar@^6.1.2:
mkdirp "^1.0.3"
yallist "^4.0.0"
tar@^6.2.0:
version "6.2.1"
resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a"
integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==
dependencies:
chownr "^2.0.0"
fs-minipass "^2.0.0"
minipass "^5.0.0"
minizlib "^2.1.1"
mkdirp "^1.0.3"
yallist "^4.0.0"
temp-dir@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"
@ -28894,7 +29234,7 @@ uuid@^8.3.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
uuid@^9.0.1:
uuid@^9.0.0, uuid@^9.0.1:
version "9.0.1"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"
integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
@ -29704,6 +30044,13 @@ which@^1.0.5, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1:
dependencies:
isexe "^2.0.0"
which@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a"
integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==
dependencies:
isexe "^3.1.1"
wide-align@1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
@ -30183,7 +30530,7 @@ yargs@^15.3.1:
y18n "^4.0.0"
yargs-parser "^18.1.2"
yargs@^17.0.1:
yargs@^17.0.1, yargs@^17.7.2:
version "17.7.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==

Loading…
Cancel
Save