diff --git a/packages/opencode/test/session/instruction.test.ts b/packages/opencode/test/session/instruction.test.ts new file mode 100644 index 0000000000..2c44a266e0 --- /dev/null +++ b/packages/opencode/test/session/instruction.test.ts @@ -0,0 +1,46 @@ +import { describe, expect, test } from "bun:test" +import path from "path" +import { InstructionPrompt } from "../../src/session/instruction" +import { Instance } from "../../src/project/instance" +import { tmpdir } from "../fixture/fixture" + +describe("InstructionPrompt.resolve", () => { + test("returns empty when AGENTS.md is at project root (already in systemPaths)", async () => { + await using tmp = await tmpdir({ + init: async (dir) => { + await Bun.write(path.join(dir, "AGENTS.md"), "# Root Instructions") + await Bun.write(path.join(dir, "src", "file.ts"), "const x = 1") + }, + }) + await Instance.provide({ + directory: tmp.path, + fn: async () => { + const system = await InstructionPrompt.systemPaths() + expect(system.has(path.join(tmp.path, "AGENTS.md"))).toBe(true) + + const results = await InstructionPrompt.resolve([], path.join(tmp.path, "src", "file.ts")) + expect(results).toEqual([]) + }, + }) + }) + + test("returns AGENTS.md from subdirectory (not in systemPaths)", async () => { + await using tmp = await tmpdir({ + init: async (dir) => { + await Bun.write(path.join(dir, "subdir", "AGENTS.md"), "# Subdir Instructions") + await Bun.write(path.join(dir, "subdir", "nested", "file.ts"), "const x = 1") + }, + }) + await Instance.provide({ + directory: tmp.path, + fn: async () => { + const system = await InstructionPrompt.systemPaths() + expect(system.has(path.join(tmp.path, "subdir", "AGENTS.md"))).toBe(false) + + const results = await InstructionPrompt.resolve([], path.join(tmp.path, "subdir", "nested", "file.ts")) + expect(results.length).toBe(1) + expect(results[0].filepath).toBe(path.join(tmp.path, "subdir", "AGENTS.md")) + }, + }) + }) +}) diff --git a/packages/opencode/test/tool/read.test.ts b/packages/opencode/test/tool/read.test.ts index 94d009f8dc..afa14bc6cb 100644 --- a/packages/opencode/test/tool/read.test.ts +++ b/packages/opencode/test/tool/read.test.ts @@ -331,3 +331,26 @@ root_type Monster;` }) }) }) + +describe("tool.read loaded instructions", () => { + test("loads AGENTS.md from parent directory and includes in metadata", async () => { + await using tmp = await tmpdir({ + init: async (dir) => { + await Bun.write(path.join(dir, "subdir", "AGENTS.md"), "# Test Instructions\nDo something special.") + await Bun.write(path.join(dir, "subdir", "nested", "test.txt"), "test content") + }, + }) + await Instance.provide({ + directory: tmp.path, + fn: async () => { + const read = await ReadTool.init() + const result = await read.execute({ filePath: path.join(tmp.path, "subdir", "nested", "test.txt") }, ctx) + expect(result.output).toContain("test content") + expect(result.output).toContain("system-reminder") + expect(result.output).toContain("Test Instructions") + expect(result.metadata.loaded).toBeDefined() + expect(result.metadata.loaded).toContain(path.join(tmp.path, "subdir", "AGENTS.md")) + }, + }) + }) +})