(env: EnvLike, deps: BootstrapDeps = defaultDeps)
| 297 | console.log('npm global prefix set to /root/.npm-global'); |
| 298 | } catch { |
| 299 | console.warn('WARNING: failed to create npm-global directory, using default prefix'); |
| 300 | } |
| 301 | } |
| 302 | |
| 303 | // pip-global-prefix: redirect pip install --user to the persistent volume |
| 304 | if (env.KILOCLAW_PIP_GLOBAL_PREFIX === 'true') { |
| 305 | try { |
| 306 | deps.mkdirSync('/root/.pip-global/bin', { recursive: true }); |
| 307 | env.PYTHONUSERBASE = '/root/.pip-global'; |
| 308 | env.PATH = `${env.PATH ?? ''}:/root/.pip-global/bin`; |
| 309 | console.log('pip global prefix set to /root/.pip-global'); |
| 310 | } catch { |
| 311 | console.warn('WARNING: failed to create pip-global directory, using default prefix'); |
| 312 | } |
| 313 | } |
| 314 | |
| 315 | // uv-global-prefix: configure uv tool/cache directories on the persistent volume |
| 316 | if (env.KILOCLAW_UV_GLOBAL_PREFIX === 'true') { |
| 317 | try { |
| 318 | deps.mkdirSync('/root/.uv/tools', { recursive: true }); |
| 319 | deps.mkdirSync('/root/.uv/bin', { recursive: true }); |
| 320 | deps.mkdirSync('/root/.uv/cache', { recursive: true }); |
| 321 | env.UV_TOOL_DIR = '/root/.uv/tools'; |
| 322 | env.UV_TOOL_BIN_DIR = '/root/.uv/bin'; |
| 323 | env.UV_CACHE_DIR = '/root/.uv/cache'; |
| 324 | env.PATH = `${env.PATH ?? ''}:/root/.uv/bin`; |
| 325 | console.log('uv global prefix set to /root/.uv'); |
| 326 | } catch { |
| 327 | console.warn('WARNING: failed to create uv directories, using defaults'); |
| 328 | } |
| 329 | } |
| 330 | |
| 331 | // kilo-cli: alias KILOCODE_API_KEY to KILO_API_KEY for the CLI's KiloAuthPlugin |
| 332 | if (env.KILOCLAW_KILO_CLI === 'true' && env.KILOCODE_API_KEY) { |
| 333 | env.KILO_API_KEY = env.KILOCODE_API_KEY; |
| 334 | console.log('Kilo CLI auto-configuration enabled'); |
| 335 | } |
| 336 | } |
| 337 | |
| 338 | export function cleanNpmCache(env: EnvLike, deps: BootstrapDeps = defaultDeps): void { |
| 339 | try { |
| 340 | deps.execFileSync('npm', ['cache', 'clean', '--force'], { |
| 341 | env: { ...process.env, ...env }, |
| 342 | stdio: 'pipe', |
| 343 | }); |
| 344 | console.log('[controller] npm cache clean completed'); |
| 345 | } catch (error) { |
| 346 | const message = error instanceof Error ? error.message : String(error); |
| 347 | console.warn('[controller] npm cache clean failed, continuing:', message); |
| 348 | } |
no test coverage detected