test: ensure project and global instructions are loaded (#22317)
This commit is contained in:
@@ -219,6 +219,59 @@ describe("Instruction.resolve", () => {
|
|||||||
test.todo("fetches remote instructions from config URLs via HttpClient", () => {})
|
test.todo("fetches remote instructions from config URLs via HttpClient", () => {})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe("Instruction.system", () => {
|
||||||
|
test("loads both project and global AGENTS.md when both exist", async () => {
|
||||||
|
const originalConfigDir = process.env["OPENCODE_CONFIG_DIR"]
|
||||||
|
delete process.env["OPENCODE_CONFIG_DIR"]
|
||||||
|
|
||||||
|
await using globalTmp = await tmpdir({
|
||||||
|
init: async (dir) => {
|
||||||
|
await Bun.write(path.join(dir, "AGENTS.md"), "# Global Instructions")
|
||||||
|
},
|
||||||
|
})
|
||||||
|
await using projectTmp = await tmpdir({
|
||||||
|
init: async (dir) => {
|
||||||
|
await Bun.write(path.join(dir, "AGENTS.md"), "# Project Instructions")
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const originalGlobalConfig = Global.Path.config
|
||||||
|
;(Global.Path as { config: string }).config = globalTmp.path
|
||||||
|
|
||||||
|
try {
|
||||||
|
await Instance.provide({
|
||||||
|
directory: projectTmp.path,
|
||||||
|
fn: () =>
|
||||||
|
run(
|
||||||
|
Instruction.Service.use((svc) =>
|
||||||
|
Effect.gen(function* () {
|
||||||
|
const paths = yield* svc.systemPaths()
|
||||||
|
expect(paths.has(path.join(projectTmp.path, "AGENTS.md"))).toBe(true)
|
||||||
|
expect(paths.has(path.join(globalTmp.path, "AGENTS.md"))).toBe(true)
|
||||||
|
|
||||||
|
const rules = yield* svc.system()
|
||||||
|
expect(rules).toHaveLength(2)
|
||||||
|
expect(rules).toContain(
|
||||||
|
`Instructions from: ${path.join(projectTmp.path, "AGENTS.md")}\n# Project Instructions`,
|
||||||
|
)
|
||||||
|
expect(rules).toContain(
|
||||||
|
`Instructions from: ${path.join(globalTmp.path, "AGENTS.md")}\n# Global Instructions`,
|
||||||
|
)
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
})
|
||||||
|
} finally {
|
||||||
|
;(Global.Path as { config: string }).config = originalGlobalConfig
|
||||||
|
if (originalConfigDir === undefined) {
|
||||||
|
delete process.env["OPENCODE_CONFIG_DIR"]
|
||||||
|
} else {
|
||||||
|
process.env["OPENCODE_CONFIG_DIR"] = originalConfigDir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
describe("Instruction.systemPaths OPENCODE_CONFIG_DIR", () => {
|
describe("Instruction.systemPaths OPENCODE_CONFIG_DIR", () => {
|
||||||
let originalConfigDir: string | undefined
|
let originalConfigDir: string | undefined
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user