2026-02-08 13:57:26 +09:00
|
|
|
import { existsSync } from "node:fs";
|
2026-02-06 17:23:11 +09:00
|
|
|
import { dirname, isAbsolute, join, resolve } from "node:path";
|
2026-02-08 13:57:26 +09:00
|
|
|
|
|
|
|
|
import { AGENTS_FILENAME } from "./constants";
|
|
|
|
|
|
|
|
|
|
export function resolveFilePath(rootDirectory: string, path: string): string | null {
|
|
|
|
|
if (!path) return null;
|
2026-02-06 17:23:11 +09:00
|
|
|
if (isAbsolute(path)) return path;
|
2026-02-08 13:57:26 +09:00
|
|
|
return resolve(rootDirectory, path);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function findAgentsMdUp(input: {
|
|
|
|
|
startDir: string;
|
|
|
|
|
rootDir: string;
|
|
|
|
|
}): string[] {
|
|
|
|
|
const found: string[] = [];
|
|
|
|
|
let current = input.startDir;
|
|
|
|
|
|
|
|
|
|
while (true) {
|
|
|
|
|
// Skip root AGENTS.md - OpenCode's system.ts already loads it via custom()
|
|
|
|
|
// See: https://github.com/code-yeongyu/oh-my-opencode/issues/379
|
|
|
|
|
const isRootDir = current === input.rootDir;
|
|
|
|
|
if (!isRootDir) {
|
|
|
|
|
const agentsPath = join(current, AGENTS_FILENAME);
|
|
|
|
|
if (existsSync(agentsPath)) {
|
|
|
|
|
found.push(agentsPath);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isRootDir) break;
|
|
|
|
|
const parent = dirname(current);
|
|
|
|
|
if (parent === current) break;
|
|
|
|
|
if (!parent.startsWith(input.rootDir)) break;
|
|
|
|
|
current = parent;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return found.reverse();
|
|
|
|
|
}
|