167 lines
4.4 KiB
TypeScript
167 lines
4.4 KiB
TypeScript
import { readFileSync } from 'node:fs'
|
|
import { resolve } from 'node:path'
|
|
import react from '@vitejs/plugin-react'
|
|
import { defineConfig, externalizeDepsPlugin } from 'electron-vite'
|
|
import type { Plugin } from 'vite'
|
|
|
|
type ProjectPackage = {
|
|
dependencies?: Record<string, string>
|
|
}
|
|
|
|
const projectPackage = JSON.parse(
|
|
readFileSync(resolve('package.json'), 'utf8')
|
|
) as ProjectPackage
|
|
|
|
function requireDependencyVersion(
|
|
dependencies: Record<string, string> | undefined,
|
|
name: string
|
|
): string {
|
|
const version = dependencies?.[name]
|
|
if (!version) {
|
|
throw new Error(`Missing ${name} dependency version`)
|
|
}
|
|
return version
|
|
}
|
|
|
|
const deepSeekHarnessLlmVersion = requireDependencyVersion(
|
|
projectPackage.dependencies,
|
|
'@deepseek-ai/dsh-llm'
|
|
)
|
|
|
|
export function serializeDeepSeekHarnessBundleManifest(
|
|
version: string
|
|
): string {
|
|
return `${JSON.stringify(
|
|
{
|
|
name: '@deepseek-ai/dsh-llm',
|
|
version,
|
|
private: true,
|
|
type: 'module'
|
|
},
|
|
null,
|
|
2
|
|
)}\n`
|
|
}
|
|
|
|
function deepSeekHarnessBundleManifestPlugin(): Plugin {
|
|
return {
|
|
name: 'deepseek-harness-bundle-manifest',
|
|
generateBundle() {
|
|
this.emitFile({
|
|
type: 'asset',
|
|
fileName: 'package.json',
|
|
source: serializeDeepSeekHarnessBundleManifest(
|
|
deepSeekHarnessLlmVersion
|
|
)
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
export default defineConfig({
|
|
main: {
|
|
plugins: [
|
|
externalizeDepsPlugin({
|
|
exclude: [
|
|
'@agentclientprotocol/sdk',
|
|
'@deepseek-ai/cordis',
|
|
'@deepseek-ai/dsh-agent',
|
|
'@deepseek-ai/dsh-agent-loop',
|
|
'@deepseek-ai/dsh-bash-local',
|
|
'@deepseek-ai/dsh-credentials',
|
|
'@deepseek-ai/dsh-fs-local',
|
|
'@deepseek-ai/dsh-llm',
|
|
'@deepseek-ai/dsh-llm-pi-ai',
|
|
'@deepseek-ai/dsh-pwsh-local',
|
|
'@deepseek-ai/dsh-sandbox',
|
|
'@deepseek-ai/dsh-sandbox-policy',
|
|
'@deepseek-ai/dsh-session',
|
|
'@deepseek-ai/dsh-shell-env',
|
|
'@deepseek-ai/dsh-skill',
|
|
'@deepseek-ai/dsh-subprocess-local',
|
|
'@deepseek-ai/dsh-system-prompt',
|
|
'@deepseek-ai/dsh-token-meter',
|
|
'@deepseek-ai/dsh-tool-bash',
|
|
'@deepseek-ai/dsh-tool-fs',
|
|
'@deepseek-ai/dsh-tool-pwsh',
|
|
'@deepseek-ai/dsh-tool-skill',
|
|
'@deepseek-ai/dsh-tools',
|
|
'@deepseek-ai/dsh-user-approval',
|
|
'yaml',
|
|
'zod'
|
|
]
|
|
}),
|
|
deepSeekHarnessBundleManifestPlugin()
|
|
],
|
|
build: {
|
|
rollupOptions: {
|
|
input: {
|
|
index: resolve('src/main/index.ts'),
|
|
'wechat-sidecar': resolve(
|
|
'src/main/channels/wechat-sidecar.ts'
|
|
),
|
|
'deepseek-harness-host-bootstrap': resolve(
|
|
'src/main/deepseek-harness-host-bootstrap.ts'
|
|
)
|
|
},
|
|
external: [
|
|
'node-pty',
|
|
'koffi',
|
|
/^@koromix\/koffi-/u
|
|
],
|
|
output: {
|
|
entryFileNames(chunk) {
|
|
return chunk.name === 'deepseek-harness-host-bootstrap'
|
|
? 'deepseek-harness-host-bootstrap.js'
|
|
: '[name].js'
|
|
},
|
|
chunkFileNames(chunk) {
|
|
const moduleIds = chunk.moduleIds.join('\n')
|
|
return moduleIds.includes('deepseek-harness') ||
|
|
moduleIds.includes('deepseek-harness-utility')
|
|
? 'chunks/deepseek-harness-[name]-[hash].js'
|
|
: 'chunks/[name]-[hash].js'
|
|
},
|
|
manualChunks(id) {
|
|
if (
|
|
id.includes('@deepseek-ai/dsh-llm') ||
|
|
id.includes('@deepseek-ai/dsh-credentials') ||
|
|
id.includes('@deepseek-ai/dsh-settings') ||
|
|
id.includes('@deepseek-ai/dsh-timeout') ||
|
|
id.includes('@deepseek-ai/dsh-token-meter') ||
|
|
id.includes('@deepseek-ai/dsh-llm-pi-ai') ||
|
|
id.includes('@mariozechner/pi-ai')
|
|
) {
|
|
return 'deepseek-harness-llm'
|
|
}
|
|
return undefined
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
preload: {
|
|
plugins: [externalizeDepsPlugin()],
|
|
build: {
|
|
rollupOptions: {
|
|
output: {
|
|
entryFileNames: '[name].cjs',
|
|
format: 'cjs'
|
|
}
|
|
}
|
|
}
|
|
},
|
|
renderer: {
|
|
resolve: {
|
|
alias: {
|
|
'@renderer': resolve('src/renderer/src'),
|
|
'@shared': resolve('src/shared')
|
|
}
|
|
},
|
|
worker: {
|
|
format: 'es'
|
|
},
|
|
plugins: [react()]
|
|
}
|
|
})
|