36 lines
1.1 KiB
JavaScript
36 lines
1.1 KiB
JavaScript
/**
|
|
* Legacy Claude Code source detection.
|
|
*
|
|
* After #37/#38 the DSH runtime prefers `~/.dsh` for skills and roles. The
|
|
* `~/.claude` locations stay as a migration fallback: a machine that has not
|
|
* rerun `dsh/install.sh --skills --roles` keeps working, but the agent should
|
|
* say so once instead of serving legacy paths silently.
|
|
*/
|
|
|
|
import { homedir } from 'node:os'
|
|
import { join, sep } from 'node:path'
|
|
|
|
const warned = new Set()
|
|
|
|
/** Whether `path` lives under `<home>/.claude` (the legacy source root). */
|
|
export function isLegacyClaudePath(path, home = homedir()) {
|
|
if (typeof path !== 'string' || path === '') return false
|
|
return path.startsWith(join(home, '.claude') + sep)
|
|
}
|
|
|
|
/**
|
|
* Warn once per process and per kind+path: `agent/pre-step` runs on every
|
|
* step, so an unconditional warning would flood the log.
|
|
*/
|
|
export function warnLegacyOnce(logger, kind, path, flag = kind) {
|
|
const key = `${kind}|${path}`
|
|
if (warned.has(key)) return
|
|
warned.add(key)
|
|
logger?.warn?.(
|
|
'[dsh-harness] legacy Claude Code source in use for %s: %s; run dsh/install.sh --%s',
|
|
kind,
|
|
path,
|
|
flag,
|
|
)
|
|
}
|