mirror of
https://github.com/badlogic/pi-mono.git
synced 2026-05-23 21:25:27 +00:00
114 lines
3.2 KiB
TypeScript
114 lines
3.2 KiB
TypeScript
import { describe, expect, test } from "vitest";
|
|
import { buildSystemPrompt } from "../src/core/system-prompt.js";
|
|
|
|
describe("buildSystemPrompt", () => {
|
|
describe("empty tools", () => {
|
|
test("shows (none) for empty tools list", () => {
|
|
const prompt = buildSystemPrompt({
|
|
selectedTools: [],
|
|
contextFiles: [],
|
|
skills: [],
|
|
cwd: process.cwd(),
|
|
});
|
|
|
|
expect(prompt).toContain("Available tools:\n(none)");
|
|
});
|
|
|
|
test("shows file paths guideline even with no tools", () => {
|
|
const prompt = buildSystemPrompt({
|
|
selectedTools: [],
|
|
contextFiles: [],
|
|
skills: [],
|
|
cwd: process.cwd(),
|
|
});
|
|
|
|
expect(prompt).toContain("Show file paths clearly");
|
|
});
|
|
});
|
|
|
|
describe("default tools", () => {
|
|
test("includes all default tools when snippets are provided", () => {
|
|
const prompt = buildSystemPrompt({
|
|
toolSnippets: {
|
|
read: "Read file contents",
|
|
bash: "Execute bash commands",
|
|
edit: "Make surgical edits",
|
|
write: "Create or overwrite files",
|
|
},
|
|
contextFiles: [],
|
|
skills: [],
|
|
cwd: process.cwd(),
|
|
});
|
|
|
|
expect(prompt).toContain("- read:");
|
|
expect(prompt).toContain("- bash:");
|
|
expect(prompt).toContain("- edit:");
|
|
expect(prompt).toContain("- write:");
|
|
});
|
|
|
|
test("instructs models to resolve pi docs and examples under absolute base paths", () => {
|
|
const prompt = buildSystemPrompt({
|
|
contextFiles: [],
|
|
skills: [],
|
|
cwd: process.cwd(),
|
|
});
|
|
|
|
expect(prompt).toContain(
|
|
"- When reading pi docs or examples, resolve docs/... under Additional docs and examples/... under Examples, not the current working directory",
|
|
);
|
|
});
|
|
});
|
|
|
|
describe("custom tool snippets", () => {
|
|
test("includes custom tools in available tools section when promptSnippet is provided", () => {
|
|
const prompt = buildSystemPrompt({
|
|
selectedTools: ["read", "dynamic_tool"],
|
|
toolSnippets: {
|
|
dynamic_tool: "Run dynamic test behavior",
|
|
},
|
|
contextFiles: [],
|
|
skills: [],
|
|
cwd: process.cwd(),
|
|
});
|
|
|
|
expect(prompt).toContain("- dynamic_tool: Run dynamic test behavior");
|
|
});
|
|
|
|
test("omits custom tools from available tools section when promptSnippet is not provided", () => {
|
|
const prompt = buildSystemPrompt({
|
|
selectedTools: ["read", "dynamic_tool"],
|
|
contextFiles: [],
|
|
skills: [],
|
|
cwd: process.cwd(),
|
|
});
|
|
|
|
expect(prompt).not.toContain("dynamic_tool");
|
|
});
|
|
});
|
|
|
|
describe("prompt guidelines", () => {
|
|
test("appends promptGuidelines to default guidelines", () => {
|
|
const prompt = buildSystemPrompt({
|
|
selectedTools: ["read", "dynamic_tool"],
|
|
promptGuidelines: ["Use dynamic_tool for project summaries."],
|
|
contextFiles: [],
|
|
skills: [],
|
|
cwd: process.cwd(),
|
|
});
|
|
|
|
expect(prompt).toContain("- Use dynamic_tool for project summaries.");
|
|
});
|
|
|
|
test("deduplicates and trims promptGuidelines", () => {
|
|
const prompt = buildSystemPrompt({
|
|
selectedTools: ["read", "dynamic_tool"],
|
|
promptGuidelines: ["Use dynamic_tool for summaries.", " Use dynamic_tool for summaries. ", " "],
|
|
contextFiles: [],
|
|
skills: [],
|
|
cwd: process.cwd(),
|
|
});
|
|
|
|
expect(prompt.match(/- Use dynamic_tool for summaries\./g)).toHaveLength(1);
|
|
});
|
|
});
|
|
});
|