summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--packages/opencode/test/session/instruction.test.ts53
1 files changed, 53 insertions, 0 deletions
diff --git a/packages/opencode/test/session/instruction.test.ts b/packages/opencode/test/session/instruction.test.ts
index 4ba3b78e4..c46bbd20b 100644
--- a/packages/opencode/test/session/instruction.test.ts
+++ b/packages/opencode/test/session/instruction.test.ts
@@ -219,6 +219,59 @@ describe("Instruction.resolve", () => {
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", () => {
let originalConfigDir: string | undefined