mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
Review fixes for #462: - resolveDshHome now treats an empty or whitespace-only $DSH_HOME as unset, so a blank override never resolves the home to cwd via resolve(''). Restores the guard telemetry's old resolver carried. - The default-env telemetry test asserts only that globalConfigDir() returns an absolute path, so a machine DSH_HOME without a .dsh suffix cannot break it.
66 lines
2.6 KiB
TypeScript
66 lines
2.6 KiB
TypeScript
/**
|
|
* Shared filesystem path helpers for DeepSeek Harness user data.
|
|
*
|
|
* @module @deepseek-ai/dsh-paths
|
|
*/
|
|
|
|
import { homedir } from 'node:os'
|
|
import { join, resolve } from 'node:path'
|
|
|
|
/** Directory name for the default DeepSeek Harness home under the OS home. */
|
|
export const DSH_HOME_DIR_NAME = '.dsh'
|
|
|
|
/** Stable user-facing display form for the default DeepSeek Harness home. */
|
|
export const DEFAULT_DSH_HOME_DISPLAY = `~/${DSH_HOME_DIR_NAME}`
|
|
|
|
/** Environment variable that overrides the default DeepSeek Harness home. */
|
|
export const DSH_HOME_ENV = 'DSH_HOME'
|
|
|
|
/**
|
|
* Resolve the default DeepSeek Harness home using Node's platform path rules.
|
|
* @returns the absolute default harness home path.
|
|
*/
|
|
export function defaultDshHome(): string {
|
|
return join(homedir(), DSH_HOME_DIR_NAME)
|
|
}
|
|
|
|
/**
|
|
* Expand supported tilde prefixes against the operating-system home.
|
|
* @param path - configured path that may begin with `~`, `~/`, or `~\`.
|
|
* @returns the expanded path, or the original value when no supported prefix is present.
|
|
*/
|
|
export function expandHomePath(path: string): string {
|
|
if (path === '~') return homedir()
|
|
if (path.startsWith('~/') || path.startsWith('~\\')) return join(homedir(), path.slice(2))
|
|
return path
|
|
}
|
|
|
|
/**
|
|
* Resolve the single-root DeepSeek Harness home.
|
|
*
|
|
* Precedence, highest first: an explicit configured path, `$DSH_HOME`, then
|
|
* `~/.dsh`. The harness keeps all user data under one root. An empty or
|
|
* whitespace-only `$DSH_HOME` is treated as unset, so a blank override never
|
|
* resolves the home to the current working directory.
|
|
* @param configured - explicit harness-home override, which has highest precedence.
|
|
* @param env - environment mapping used to read `DSH_HOME`.
|
|
* @returns the normalized absolute harness home path.
|
|
*/
|
|
export function resolveDshHome(configured?: string, env: Record<string, string | undefined> = process.env): string {
|
|
const fromEnv = env[DSH_HOME_ENV]
|
|
const selected = configured ?? (fromEnv !== undefined && fromEnv.trim().length > 0 ? fromEnv : defaultDshHome())
|
|
return resolve(expandHomePath(selected))
|
|
}
|
|
|
|
/**
|
|
* Describe a resolved harness home symbolically for user-facing display.
|
|
*
|
|
* It never returns an absolute machine path: the default home is labelled
|
|
* `~/.dsh`, and any configured home is labelled `$DSH_HOME`.
|
|
* @param resolvedHome - the absolute path returned by {@link resolveDshHome}.
|
|
* @returns `~/.dsh` for the default home, otherwise `$DSH_HOME`.
|
|
*/
|
|
export function dshHomeDisplay(resolvedHome: string): string {
|
|
return resolvedHome === resolve(defaultDshHome()) ? DEFAULT_DSH_HOME_DISPLAY : `$${DSH_HOME_ENV}`
|
|
}
|