Prefer AGENTS.md over CLAUDE.md for project instructions (#439)
* Prefer AGENTS.md over CLAUDE.md for project instructions * fix: preserve CLAUDE.md fallback behavior * fix: isolate onboarding tests and preserve legacy init * fix: restore full fsOperations exports in test mock and align compact cwd * Fix onboarding test isolation and init migration guidance * Tighten init prompt coverage and onboarding copy * Handle nested project instruction paths consistently * Fix NEW_INIT feature gate for Bun build --------- Co-authored-by: 赵小落 <zhaoxiaoluo@zhaoxiaoluodeMac-mini.local> Co-authored-by: zhaomo01 <zhaomo01@baidu.com>
This commit is contained in:
55
src/utils/projectInstructions.ts
Normal file
55
src/utils/projectInstructions.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
import { dirname, join } from 'path'
|
||||
|
||||
export const PRIMARY_PROJECT_INSTRUCTION_FILE = 'AGENTS.md'
|
||||
export const FALLBACK_PROJECT_INSTRUCTION_FILE = 'CLAUDE.md'
|
||||
|
||||
export function getProjectInstructionFilePaths(dir: string): string[] {
|
||||
return [
|
||||
join(dir, PRIMARY_PROJECT_INSTRUCTION_FILE),
|
||||
join(dir, FALLBACK_PROJECT_INSTRUCTION_FILE),
|
||||
]
|
||||
}
|
||||
|
||||
export function getProjectInstructionFilePath(
|
||||
dir: string,
|
||||
existsSync: (path: string) => boolean,
|
||||
): string {
|
||||
const [primaryPath, fallbackPath] = getProjectInstructionFilePaths(dir)
|
||||
return existsSync(primaryPath)
|
||||
? primaryPath
|
||||
: fallbackPath
|
||||
}
|
||||
|
||||
export function hasProjectInstructionFile(
|
||||
dir: string,
|
||||
existsSync: (path: string) => boolean,
|
||||
): boolean {
|
||||
return getProjectInstructionFilePaths(dir).some(path => existsSync(path))
|
||||
}
|
||||
|
||||
export function findProjectInstructionFilePathInAncestors(
|
||||
startDir: string,
|
||||
existsSync: (path: string) => boolean,
|
||||
): string | null {
|
||||
let currentDir = startDir
|
||||
|
||||
while (true) {
|
||||
if (hasProjectInstructionFile(currentDir, existsSync)) {
|
||||
return getProjectInstructionFilePath(currentDir, existsSync)
|
||||
}
|
||||
|
||||
const parentDir = dirname(currentDir)
|
||||
if (parentDir === currentDir) {
|
||||
return null
|
||||
}
|
||||
|
||||
currentDir = parentDir
|
||||
}
|
||||
}
|
||||
|
||||
export function isProjectInstructionFileName(name: string): boolean {
|
||||
return (
|
||||
name === PRIMARY_PROJECT_INSTRUCTION_FILE ||
|
||||
name === FALLBACK_PROJECT_INSTRUCTION_FILE
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user