141 lines
4.4 KiB
Diff
141 lines
4.4 KiB
Diff
diff --git a/packages/coding-agent/src/core/package-manager.ts b/packages/coding-agent/src/core/package-manager.ts
|
|
--- a/packages/coding-agent/src/core/package-manager.ts
|
|
+++ b/packages/coding-agent/src/core/package-manager.ts
|
|
@@ -459,14 +459,14 @@ function findGitRepoRoot(startDir: string): string | null {
|
|
}
|
|
}
|
|
|
|
-function collectAncestorAgentsSkillDirs(startDir: string): string[] {
|
|
- const skillDirs: string[] = [];
|
|
+function collectAncestorConfigDirs(startDir: string, configDirName: string): string[] {
|
|
+ const configDirs: string[] = [];
|
|
const resolvedStartDir = resolve(startDir);
|
|
const gitRepoRoot = findGitRepoRoot(resolvedStartDir);
|
|
|
|
let dir = resolvedStartDir;
|
|
while (true) {
|
|
- skillDirs.push(join(dir, ".agents", "skills"));
|
|
+ configDirs.push(join(dir, configDirName));
|
|
if (gitRepoRoot && dir === gitRepoRoot) {
|
|
break;
|
|
}
|
|
@@ -477,7 +477,7 @@ function collectAncestorAgentsSkillDirs(startDir: string): string[] {
|
|
dir = parent;
|
|
}
|
|
|
|
- return skillDirs;
|
|
+ return configDirs;
|
|
}
|
|
|
|
function collectAutoPromptEntries(dir: string): string[] {
|
|
@@ -2388,16 +2388,13 @@ export class DefaultPackageManager implements PackageManager {
|
|
prompts: join(globalBaseDir, "prompts"),
|
|
themes: join(globalBaseDir, "themes"),
|
|
};
|
|
- const projectDirs = {
|
|
- extensions: join(projectBaseDir, "extensions"),
|
|
- skills: join(projectBaseDir, "skills"),
|
|
- prompts: join(projectBaseDir, "prompts"),
|
|
- themes: join(projectBaseDir, "themes"),
|
|
- };
|
|
const userAgentsSkillsDir = join(getHomeDir(), ".agents", "skills");
|
|
const projectTrusted = this.settingsManager.isProjectTrusted();
|
|
- const projectAgentsSkillDirs = projectTrusted
|
|
- ? collectAncestorAgentsSkillDirs(this.cwd).filter((dir) => resolve(dir) !== resolve(userAgentsSkillsDir))
|
|
+ const projectConfigDirs = projectTrusted
|
|
+ ? collectAncestorConfigDirs(this.cwd, CONFIG_DIR_NAME).filter((dir) => resolve(dir) !== resolve(globalBaseDir))
|
|
+ : [];
|
|
+ const projectAgentsDirs = projectTrusted
|
|
+ ? collectAncestorConfigDirs(this.cwd, ".agents").filter((dir) => resolve(dir) !== resolve(dirname(userAgentsSkillsDir)))
|
|
: [];
|
|
|
|
const addResources = (
|
|
@@ -2414,56 +2411,54 @@ export class DefaultPackageManager implements PackageManager {
|
|
}
|
|
};
|
|
|
|
- if (projectTrusted) {
|
|
- // Project extensions from .pi/
|
|
+ // Project resources from .pi/ in cwd and ancestors.
|
|
+ for (const configDir of projectConfigDirs) {
|
|
+ const configMetadata: PathMetadata = {
|
|
+ ...projectMetadata,
|
|
+ baseDir: configDir,
|
|
+ };
|
|
addResources(
|
|
"extensions",
|
|
- collectAutoExtensionEntries(projectDirs.extensions),
|
|
- projectMetadata,
|
|
+ collectAutoExtensionEntries(join(configDir, "extensions")),
|
|
+ configMetadata,
|
|
projectOverrides.extensions,
|
|
- projectBaseDir,
|
|
+ configDir,
|
|
);
|
|
-
|
|
- // Project skills from .pi/
|
|
addResources(
|
|
"skills",
|
|
- collectAutoSkillEntries(projectDirs.skills, "pi"),
|
|
- projectMetadata,
|
|
+ collectAutoSkillEntries(join(configDir, "skills"), "pi"),
|
|
+ configMetadata,
|
|
projectOverrides.skills,
|
|
- projectBaseDir,
|
|
+ configDir,
|
|
+ );
|
|
+ addResources(
|
|
+ "prompts",
|
|
+ collectAutoPromptEntries(join(configDir, "prompts")),
|
|
+ configMetadata,
|
|
+ projectOverrides.prompts,
|
|
+ configDir,
|
|
+ );
|
|
+ addResources(
|
|
+ "themes",
|
|
+ collectAutoThemeEntries(join(configDir, "themes")),
|
|
+ configMetadata,
|
|
+ projectOverrides.themes,
|
|
+ configDir,
|
|
);
|
|
}
|
|
|
|
- // Project skills from .agents/ (each with its own baseDir)
|
|
- for (const agentsSkillsDir of projectAgentsSkillDirs) {
|
|
- const agentsBaseDir = dirname(agentsSkillsDir); // the .agents directory
|
|
+ // Project skills from .agents/ in cwd and ancestors.
|
|
+ for (const agentsDir of projectAgentsDirs) {
|
|
const agentsMetadata: PathMetadata = {
|
|
...projectMetadata,
|
|
- baseDir: agentsBaseDir,
|
|
+ baseDir: agentsDir,
|
|
};
|
|
addResources(
|
|
"skills",
|
|
- collectAutoSkillEntries(agentsSkillsDir, "agents"),
|
|
+ collectAutoSkillEntries(join(agentsDir, "skills"), "agents"),
|
|
agentsMetadata,
|
|
projectOverrides.skills,
|
|
- agentsBaseDir,
|
|
- );
|
|
- }
|
|
-
|
|
- if (projectTrusted) {
|
|
- addResources(
|
|
- "prompts",
|
|
- collectAutoPromptEntries(projectDirs.prompts),
|
|
- projectMetadata,
|
|
- projectOverrides.prompts,
|
|
- projectBaseDir,
|
|
- );
|
|
- addResources(
|
|
- "themes",
|
|
- collectAutoThemeEntries(projectDirs.themes),
|
|
- projectMetadata,
|
|
- projectOverrides.themes,
|
|
- projectBaseDir,
|
|
+ agentsDir,
|
|
);
|
|
}
|
|
|