-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Summary
ConfigManager and getCacheDir() / getLocalCacheDir() hardcode their base directory to ~/.mpak/. This prevents downstream consumers (other CLIs, SDKs, embedded usage) from isolating their mpak state to a different directory.
Current behavior
ConfigManager (packages/cli/src/utils/config-manager.ts):
constructor() {
this.configDir = join(homedir(), ".mpak");
this.configFile = join(this.configDir, "config.json");
}getCacheDir (packages/cli/src/commands/packages/run.ts):
export function getCacheDir(packageName: string): string {
const cacheBase = join(homedir(), ".mpak", "cache");
...
}getLocalCacheDir (same file):
export function getLocalCacheDir(bundlePath: string): string {
...
return join(homedir(), ".mpak", "cache", "_local", hash);
}All three are hardcoded. No constructor parameter, no env var, no override path.
Proposed changes
1. ConfigManager: accept optional baseDir
constructor(baseDir?: string) {
this.configDir = baseDir ?? join(homedir(), ".mpak");
this.configFile = join(this.configDir, "config.json");
this.ensureConfigDir();
}No-arg construction retains current behavior (~/.mpak/). Passing a path overrides it.
2. getCacheDir / getLocalCacheDir: accept optional baseDir
export function getCacheDir(packageName: string, baseDir?: string): string {
const cacheBase = join(baseDir ?? join(homedir(), ".mpak"), "cache");
const safeName = packageName.replace("@", "").replace("/", "-");
return join(cacheBase, safeName);
}
export function getLocalCacheDir(bundlePath: string, baseDir?: string): string {
const absolutePath = resolve(bundlePath);
const hash = createHash("md5").update(absolutePath).digest("hex").slice(0, 12);
return join(baseDir ?? join(homedir(), ".mpak"), "cache", "_local", hash);
}3. Environment variable fallback (optional)
Consider supporting MPAK_HOME as a fallback before the default:
const defaultBase = process.env["MPAK_HOME"] ?? join(homedir(), ".mpak");This would be consistent with how MPAK_WORKSPACE already works for workspace paths, and follows the pattern of tools like CARGO_HOME, NPM_CONFIG_PREFIX, GOPATH, etc.
4. Export ConfigManager from SDK (optional, separate issue)
Currently ConfigManager is CLI-internal. If other tools need to read/write mpak config programmatically, it should be exported from @nimblebrain/mpak-sdk or a new @nimblebrain/mpak-config package.
Files affected
packages/cli/src/utils/config-manager.ts— Constructor signaturepackages/cli/src/commands/packages/run.ts—getCacheDir(),getLocalCacheDir()packages/cli/src/commands/config.ts— UpdateConfigManager()call sites (no change needed if no-arg default preserved)
Backward compatibility
Fully backward compatible. All changes are additive optional parameters with defaults matching current behavior.