fix(openclaw): reduce skills-mode triage prompt footprint (#5502)
This commit is contained in:
@@ -2,7 +2,12 @@
|
||||
* Tests for path traversal prevention in skill-loader.
|
||||
*/
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { safePath, loadSkill } from "./skill-loader.ts";
|
||||
import {
|
||||
safePath,
|
||||
loadSkill,
|
||||
loadTriagePrompt,
|
||||
loadCompactTriagePrompt,
|
||||
} from "./skill-loader.ts";
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// safePath — path containment
|
||||
@@ -68,3 +73,71 @@ describe("loadSkill path traversal", () => {
|
||||
expect(result?.prompt).toBeTruthy();
|
||||
});
|
||||
});
|
||||
|
||||
describe("loadCompactTriagePrompt", () => {
|
||||
it("keeps the core triage instructions without inlining the full skill body", () => {
|
||||
const prompt = loadCompactTriagePrompt();
|
||||
|
||||
expect(prompt).toContain("Use `memory_add` tool for ALL user facts");
|
||||
expect(prompt).toContain("Batch facts by CATEGORY");
|
||||
expect(prompt).toContain("ALWAYS rewrite the query");
|
||||
expect(prompt).not.toContain("## Worked Examples");
|
||||
expect(prompt).not.toContain("### memory_search");
|
||||
expect(prompt).not.toContain("Conference requires at least 4 breakout rooms");
|
||||
expect(prompt.length).toBeLessThan(3500);
|
||||
});
|
||||
|
||||
it("keeps the always-recall guidance aligned with the full triage prompt", () => {
|
||||
const config = { recall: { strategy: "always" as const } };
|
||||
const expected =
|
||||
"Automatic recall runs for both long-term and session memory. Use manual searches only when you need more specific context.";
|
||||
|
||||
expect(loadCompactTriagePrompt(config)).toContain(expected);
|
||||
expect(loadTriagePrompt(config)).toContain(expected);
|
||||
});
|
||||
|
||||
it("keeps the manual-recall guidance in compact mode", () => {
|
||||
const prompt = loadCompactTriagePrompt({
|
||||
recall: { strategy: "manual" },
|
||||
});
|
||||
|
||||
expect(prompt).toContain("No automatic recall happens in manual mode.");
|
||||
});
|
||||
|
||||
it("includes short config summaries and truncates oversized custom rules", () => {
|
||||
const prompt = loadCompactTriagePrompt({
|
||||
categories: {
|
||||
travel: { importance: 0.7, ttl: "30d" },
|
||||
},
|
||||
customRules: {
|
||||
include: [
|
||||
"Always remember workshop venue requirements.",
|
||||
"Keep track of recurring conference planning constraints.",
|
||||
"Capture every catering preference, transit note, and presenter dependency in detail.",
|
||||
],
|
||||
exclude: [
|
||||
"Never store one-off demo logs, temporary ETA chatter, or transitory checklist updates.",
|
||||
"Skip verbose retrospectives unless the user explicitly says the lesson should persist.",
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
expect(prompt).toContain("travel (importance 0.7, expires: 30d)");
|
||||
expect(prompt).toContain("include rule(s) and 2 exclude rule(s) are configured");
|
||||
expect(prompt).toContain("Prompt kept compact, full rule text omitted");
|
||||
expect(prompt).toContain('Preview: include "Always remember workshop venue requirements."');
|
||||
});
|
||||
|
||||
it("omits default credential patterns in compact mode unless custom patterns are configured", () => {
|
||||
const defaultPrompt = loadCompactTriagePrompt();
|
||||
const customPrompt = loadCompactTriagePrompt({
|
||||
triage: {
|
||||
credentialPatterns: ["mem0-secret=", "Bearer "],
|
||||
},
|
||||
});
|
||||
|
||||
expect(defaultPrompt).not.toContain("Credential patterns to scan");
|
||||
expect(customPrompt).toContain("Credential patterns to scan");
|
||||
expect(customPrompt).toContain("mem0-secret=");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user