fix(agents): include .agents skills in agent awareness
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -8,6 +8,7 @@ import * as sisyphusJunior from "../agents/sisyphus-junior"
|
|||||||
import type { OhMyOpenCodeConfig } from "../config"
|
import type { OhMyOpenCodeConfig } from "../config"
|
||||||
import * as agentLoader from "../features/claude-code-agent-loader"
|
import * as agentLoader from "../features/claude-code-agent-loader"
|
||||||
import * as skillLoader from "../features/opencode-skill-loader"
|
import * as skillLoader from "../features/opencode-skill-loader"
|
||||||
|
import type { LoadedSkill } from "../features/opencode-skill-loader"
|
||||||
import { getAgentDisplayName } from "../shared/agent-display-names"
|
import { getAgentDisplayName } from "../shared/agent-display-names"
|
||||||
import { applyAgentConfig } from "./agent-config-handler"
|
import { applyAgentConfig } from "./agent-config-handler"
|
||||||
import type { PluginComponents } from "./plugin-components-loader"
|
import type { PluginComponents } from "./plugin-components-loader"
|
||||||
@@ -51,6 +52,8 @@ describe("applyAgentConfig builtin override protection", () => {
|
|||||||
let discoverProjectClaudeSkillsSpy: ReturnType<typeof spyOn>
|
let discoverProjectClaudeSkillsSpy: ReturnType<typeof spyOn>
|
||||||
let discoverOpencodeGlobalSkillsSpy: ReturnType<typeof spyOn>
|
let discoverOpencodeGlobalSkillsSpy: ReturnType<typeof spyOn>
|
||||||
let discoverOpencodeProjectSkillsSpy: ReturnType<typeof spyOn>
|
let discoverOpencodeProjectSkillsSpy: ReturnType<typeof spyOn>
|
||||||
|
let discoverProjectAgentsSkillsSpy: ReturnType<typeof spyOn>
|
||||||
|
let discoverGlobalAgentsSkillsSpy: ReturnType<typeof spyOn>
|
||||||
let loadUserAgentsSpy: ReturnType<typeof spyOn>
|
let loadUserAgentsSpy: ReturnType<typeof spyOn>
|
||||||
let loadProjectAgentsSpy: ReturnType<typeof spyOn>
|
let loadProjectAgentsSpy: ReturnType<typeof spyOn>
|
||||||
let migrateAgentConfigSpy: ReturnType<typeof spyOn>
|
let migrateAgentConfigSpy: ReturnType<typeof spyOn>
|
||||||
@@ -121,6 +124,14 @@ describe("applyAgentConfig builtin override protection", () => {
|
|||||||
skillLoader,
|
skillLoader,
|
||||||
"discoverOpencodeProjectSkills",
|
"discoverOpencodeProjectSkills",
|
||||||
).mockResolvedValue([])
|
).mockResolvedValue([])
|
||||||
|
discoverProjectAgentsSkillsSpy = spyOn(
|
||||||
|
skillLoader,
|
||||||
|
"discoverProjectAgentsSkills",
|
||||||
|
).mockResolvedValue([])
|
||||||
|
discoverGlobalAgentsSkillsSpy = spyOn(
|
||||||
|
skillLoader,
|
||||||
|
"discoverGlobalAgentsSkills",
|
||||||
|
).mockResolvedValue([])
|
||||||
|
|
||||||
loadUserAgentsSpy = spyOn(agentLoader, "loadUserAgents").mockReturnValue({})
|
loadUserAgentsSpy = spyOn(agentLoader, "loadUserAgents").mockReturnValue({})
|
||||||
loadProjectAgentsSpy = spyOn(agentLoader, "loadProjectAgents").mockReturnValue({})
|
loadProjectAgentsSpy = spyOn(agentLoader, "loadProjectAgents").mockReturnValue({})
|
||||||
@@ -139,6 +150,8 @@ describe("applyAgentConfig builtin override protection", () => {
|
|||||||
discoverProjectClaudeSkillsSpy.mockRestore()
|
discoverProjectClaudeSkillsSpy.mockRestore()
|
||||||
discoverOpencodeGlobalSkillsSpy.mockRestore()
|
discoverOpencodeGlobalSkillsSpy.mockRestore()
|
||||||
discoverOpencodeProjectSkillsSpy.mockRestore()
|
discoverOpencodeProjectSkillsSpy.mockRestore()
|
||||||
|
discoverProjectAgentsSkillsSpy.mockRestore()
|
||||||
|
discoverGlobalAgentsSkillsSpy.mockRestore()
|
||||||
loadUserAgentsSpy.mockRestore()
|
loadUserAgentsSpy.mockRestore()
|
||||||
loadProjectAgentsSpy.mockRestore()
|
loadProjectAgentsSpy.mockRestore()
|
||||||
migrateAgentConfigSpy.mockRestore()
|
migrateAgentConfigSpy.mockRestore()
|
||||||
@@ -279,4 +292,45 @@ describe("applyAgentConfig builtin override protection", () => {
|
|||||||
// then
|
// then
|
||||||
expect(createSisyphusJuniorAgentSpy).toHaveBeenCalledWith(undefined, "openai/gpt-5.4", false)
|
expect(createSisyphusJuniorAgentSpy).toHaveBeenCalledWith(undefined, "openai/gpt-5.4", false)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test("includes project and global .agents skills in builtin agent awareness", async () => {
|
||||||
|
// given
|
||||||
|
const projectAgentsSkill = {
|
||||||
|
name: "project-agent-skill",
|
||||||
|
definition: {
|
||||||
|
name: "project-agent-skill",
|
||||||
|
description: "Project agent skill",
|
||||||
|
template: "template",
|
||||||
|
},
|
||||||
|
scope: "project",
|
||||||
|
} satisfies LoadedSkill
|
||||||
|
const globalAgentsSkill = {
|
||||||
|
name: "global-agent-skill",
|
||||||
|
definition: {
|
||||||
|
name: "global-agent-skill",
|
||||||
|
description: "Global agent skill",
|
||||||
|
template: "template",
|
||||||
|
},
|
||||||
|
scope: "user",
|
||||||
|
} satisfies LoadedSkill
|
||||||
|
discoverProjectAgentsSkillsSpy.mockResolvedValue([projectAgentsSkill])
|
||||||
|
discoverGlobalAgentsSkillsSpy.mockResolvedValue([globalAgentsSkill])
|
||||||
|
|
||||||
|
// when
|
||||||
|
await applyAgentConfig({
|
||||||
|
config: createBaseConfig(),
|
||||||
|
pluginConfig: createPluginConfig(),
|
||||||
|
ctx: { directory: "/tmp" },
|
||||||
|
pluginComponents: createPluginComponents(),
|
||||||
|
})
|
||||||
|
|
||||||
|
// then
|
||||||
|
const discoveredSkills = createBuiltinAgentsSpy.mock.calls[0]?.[6]
|
||||||
|
expect(discoveredSkills).toEqual(
|
||||||
|
expect.arrayContaining([
|
||||||
|
expect.objectContaining({ name: "project-agent-skill" }),
|
||||||
|
expect.objectContaining({ name: "global-agent-skill" }),
|
||||||
|
]),
|
||||||
|
)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -6,8 +6,10 @@ import { AGENT_NAME_MAP } from "../shared/migration";
|
|||||||
import { getAgentDisplayName } from "../shared/agent-display-names";
|
import { getAgentDisplayName } from "../shared/agent-display-names";
|
||||||
import {
|
import {
|
||||||
discoverConfigSourceSkills,
|
discoverConfigSourceSkills,
|
||||||
|
discoverGlobalAgentsSkills,
|
||||||
discoverOpencodeGlobalSkills,
|
discoverOpencodeGlobalSkills,
|
||||||
discoverOpencodeProjectSkills,
|
discoverOpencodeProjectSkills,
|
||||||
|
discoverProjectAgentsSkills,
|
||||||
discoverProjectClaudeSkills,
|
discoverProjectClaudeSkills,
|
||||||
discoverUserClaudeSkills,
|
discoverUserClaudeSkills,
|
||||||
} from "../features/opencode-skill-loader";
|
} from "../features/opencode-skill-loader";
|
||||||
@@ -52,8 +54,10 @@ export async function applyAgentConfig(params: {
|
|||||||
discoveredConfigSourceSkills,
|
discoveredConfigSourceSkills,
|
||||||
discoveredUserSkills,
|
discoveredUserSkills,
|
||||||
discoveredProjectSkills,
|
discoveredProjectSkills,
|
||||||
|
discoveredProjectAgentsSkills,
|
||||||
discoveredOpencodeGlobalSkills,
|
discoveredOpencodeGlobalSkills,
|
||||||
discoveredOpencodeProjectSkills,
|
discoveredOpencodeProjectSkills,
|
||||||
|
discoveredGlobalAgentsSkills,
|
||||||
] = await Promise.all([
|
] = await Promise.all([
|
||||||
discoverConfigSourceSkills({
|
discoverConfigSourceSkills({
|
||||||
config: params.pluginConfig.skills,
|
config: params.pluginConfig.skills,
|
||||||
@@ -63,16 +67,22 @@ export async function applyAgentConfig(params: {
|
|||||||
includeClaudeSkillsForAwareness
|
includeClaudeSkillsForAwareness
|
||||||
? discoverProjectClaudeSkills(params.ctx.directory)
|
? discoverProjectClaudeSkills(params.ctx.directory)
|
||||||
: Promise.resolve([]),
|
: Promise.resolve([]),
|
||||||
|
includeClaudeSkillsForAwareness
|
||||||
|
? discoverProjectAgentsSkills(params.ctx.directory)
|
||||||
|
: Promise.resolve([]),
|
||||||
discoverOpencodeGlobalSkills(),
|
discoverOpencodeGlobalSkills(),
|
||||||
discoverOpencodeProjectSkills(params.ctx.directory),
|
discoverOpencodeProjectSkills(params.ctx.directory),
|
||||||
|
includeClaudeSkillsForAwareness ? discoverGlobalAgentsSkills() : Promise.resolve([]),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const allDiscoveredSkills = [
|
const allDiscoveredSkills = [
|
||||||
...discoveredConfigSourceSkills,
|
...discoveredConfigSourceSkills,
|
||||||
...discoveredOpencodeProjectSkills,
|
...discoveredOpencodeProjectSkills,
|
||||||
...discoveredProjectSkills,
|
...discoveredProjectSkills,
|
||||||
|
...discoveredProjectAgentsSkills,
|
||||||
...discoveredOpencodeGlobalSkills,
|
...discoveredOpencodeGlobalSkills,
|
||||||
...discoveredUserSkills,
|
...discoveredUserSkills,
|
||||||
|
...discoveredGlobalAgentsSkills,
|
||||||
];
|
];
|
||||||
|
|
||||||
const browserProvider =
|
const browserProvider =
|
||||||
|
|||||||
Reference in New Issue
Block a user