diff --git a/docs/src/pages/index.mdx b/docs/src/pages/index.mdx index 43c0875d7..4a22a7174 100644 --- a/docs/src/pages/index.mdx +++ b/docs/src/pages/index.mdx @@ -20,7 +20,7 @@ import Home from "@/components/Home" export const getStaticProps = async() => { const resReleaseLatest = await fetch('https://api.github.com/repos/janhq/jan/releases/latest') - const resRelease = await fetch('https://api.github.com/repos/janhq/jan/releases') + const resRelease = await fetch('https://api.github.com/repos/janhq/jan/releases?per_page=500') const resRepo = await fetch('https://api.github.com/repos/janhq/jan') const repo = await resRepo.json() const latestRelease = await resReleaseLatest.json() diff --git a/electron/package.json b/electron/package.json index c058370a7..b8ab96dd4 100644 --- a/electron/package.json +++ b/electron/package.json @@ -80,9 +80,15 @@ "lint": "eslint . --ext \".js,.jsx,.ts,.tsx\"", "test:e2e": "DEBUG=pw:browser xvfb-maybe -- playwright test --workers=1", "copy:assets": "rimraf --glob \"./pre-install/*.tgz\" && cpx \"../pre-install/*.tgz\" \"./pre-install\"", - "version-patch": "jq '.version' package.json | tr -d '\"' > .version.bak && jq --arg ver \"0.1.$(date +%s)\" '.version = $ver' package.json > package.tmp && mv package.tmp package.json", - "version-restore": "jq --arg ver $(cat .version.bak) '.version = $ver' package.json > package.tmp && mv package.tmp package.json && rm .version.bak", - "dev": "yarn copy:assets && tsc -p . && yarn version-patch && electron . && yarn version-restore", + "version-patch": "run-script-os", + "version-patch:darwin:linux": "jq '.version' package.json | tr -d '\"' > .version.bak && jq --arg ver \"0.1.$(date +%s)\" '.version = $ver' package.json > package.tmp && mv package.tmp package.json", + "version-patch:win32": "node -e \"const fs=require('fs');const pkg=require('./package.json');const bak=pkg.version;fs.writeFileSync('.version.bak',bak);pkg.version='0.1.'+Math.floor(Date.now()/1000);fs.writeFileSync('package.json',JSON.stringify(pkg,null,2));\"", + "version-restore": "run-script-os", + "version-restore:darwin:linux": "jq --arg ver $(cat .version.bak) '.version = $ver' package.json > package.tmp && mv package.tmp package.json && rm .version.bak", + "version-restore:win32": "node -e \"const fs=require('fs');const pkg=require('./package.json');const bak=fs.readFileSync('.version.bak','utf8');pkg.version=bak;fs.writeFileSync('package.json',JSON.stringify(pkg,null,2));\"", + "dev:darwin:linux": "yarn copy:assets && tsc -p . && yarn version-patch && electron . && yarn version-restore", + "dev:windows": "yarn copy:assets && tsc -p . && electron .", + "dev": "run-script-os", "compile": "tsc -p .", "start": "electron .", "build": "yarn copy:assets && run-script-os", @@ -129,6 +135,7 @@ "electron-playwright-helpers": "^1.6.0", "eslint": "8.57.0", "eslint-plugin-react": "^7.34.0", + "jq": "^1.7.2", "rimraf": "^5.0.5", "run-script-os": "^1.1.6", "typescript": "^5.3.3", @@ -138,4 +145,4 @@ "hoistingLimits": "workspaces" }, "packageManager": "yarn@4.5.3" -} +} \ No newline at end of file diff --git a/extensions/engine-management-extension/package.json b/extensions/engine-management-extension/package.json index 2a9da41ec..5ffe2d42a 100644 --- a/extensions/engine-management-extension/package.json +++ b/extensions/engine-management-extension/package.json @@ -10,7 +10,10 @@ "scripts": { "test": "jest", "build": "rolldown -c rolldown.config.mjs", - "build:publish": "rimraf *.tgz --glob || true && yarn build && ../../.github/scripts/auto-sign.sh && npm pack && cpx *.tgz ../../pre-install" + "codesign:darwin": "../../.github/scripts/auto-sign.sh", + "codesign:win32:linux": "echo 'No codesigning required'", + "codesign": "run-script-os", + "build:publish": "rimraf *.tgz --glob || true && yarn build && yarn codesign && npm pack && cpx *.tgz ../../pre-install" }, "exports": { ".": "./dist/index.js", @@ -20,6 +23,7 @@ "cpx": "^1.5.0", "rimraf": "^3.0.2", "rolldown": "^1.0.0-beta.1", + "run-script-os": "^1.1.6", "ts-loader": "^9.5.0", "typescript": "^5.3.3" }, diff --git a/extensions/inference-cortex-extension/rolldown.config.mjs b/extensions/inference-cortex-extension/rolldown.config.mjs index 4f8a4ac06..c20bf7ed0 100644 --- a/extensions/inference-cortex-extension/rolldown.config.mjs +++ b/extensions/inference-cortex-extension/rolldown.config.mjs @@ -111,7 +111,7 @@ export default defineConfig([ SETTINGS: JSON.stringify(defaultSettingJson), CORTEX_API_URL: JSON.stringify('http://127.0.0.1:39291'), CORTEX_SOCKET_URL: JSON.stringify('ws://127.0.0.1:39291'), - CORTEX_ENGINE_VERSION: JSON.stringify('v0.1.42'), + CORTEX_ENGINE_VERSION: JSON.stringify('v0.1.43'), }, }, { diff --git a/extensions/inference-cortex-extension/src/node/index.ts b/extensions/inference-cortex-extension/src/node/index.ts index 4ce35c83d..dda92fbcf 100644 --- a/extensions/inference-cortex-extension/src/node/index.ts +++ b/extensions/inference-cortex-extension/src/node/index.ts @@ -1,6 +1,7 @@ import path from 'path' -import { getJanDataFolderPath, log, SystemInformation } from '@janhq/core/node' +import { appResourcePath, getJanDataFolderPath, log, SystemInformation } from '@janhq/core/node' import { ProcessWatchdog } from './watchdog' +import { readdir, symlink } from 'fs/promises' // The HOST address to use for the Nitro subprocess const LOCAL_PORT = '39291' @@ -17,7 +18,13 @@ function run(systemInfo?: SystemInformation): Promise { let gpuVisibleDevices = systemInfo?.gpuSetting?.gpus_in_use.join(',') ?? '' let binaryName = `cortex-server${process.platform === 'win32' ? '.exe' : ''}` const binPath = path.join(__dirname, '..', 'bin') + await createEngineSymlinks(binPath) + const executablePath = path.join(binPath, binaryName) + const sharedPath = path.join( + appResourcePath(), + 'shared' + ) // Execute the binary log(`[CORTEX]:: Spawn cortex at path: ${executablePath}`) @@ -46,6 +53,7 @@ function run(systemInfo?: SystemInformation): Promise { GGML_VK_VISIBLE_DEVICES: gpuVisibleDevices, }), }, + cwd: sharedPath, } ) watchdog.start() @@ -53,6 +61,23 @@ function run(systemInfo?: SystemInformation): Promise { }) } +/** + * Create symlinks for the engine shared libraries + * @param binPath + */ +async function createEngineSymlinks(binPath: string) { + const sharedPath = path.join(appResourcePath(), 'shared') + const sharedLibFiles = await readdir(sharedPath) + for (const sharedLibFile of sharedLibFiles) { + if (sharedLibFile.endsWith('.dll') || sharedLibFile.endsWith('.so')) { + const targetDllPath = path.join(sharedPath, sharedLibFile) + const symlinkDllPath = path.join(binPath, sharedLibFile) + await symlink(targetDllPath, symlinkDllPath).catch(console.error) + console.log(`Symlink created: ${targetDllPath} -> ${symlinkDllPath}`) + } + } +} + /** * Every module should have a dispose function * This will be called when the extension is unloaded and should clean up any resources diff --git a/package.json b/package.json index 174b39d96..743406122 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,6 @@ "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "rimraf": "^3.0.2", - "run-script-os": "^1.1.6", "wait-on": "^7.0.1" }, "version": "0.0.0",