mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-11 00:43:18 +08:00
重构主控编排与运行时预热链路,统一工作区提示词/专家调度协议并补齐 wiki 记忆注入与写回闭环。
同时收敛启动与运维脚本默认行为(含 wiki worker)、更新 Admin 可观测性与相关测试,降低首轮时延并提高运行稳定性。 Made-with: Cursor
This commit is contained in:
parent
4a23b715a2
commit
dbbe3add6a
14438 changed files with 2693620 additions and 2546 deletions
|
|
@ -0,0 +1,107 @@
|
|||
import { describe, expect, it } from "vitest";
|
||||
import { detectReflectedContent } from "./reflection-guard.js";
|
||||
|
||||
describe("detectReflectedContent", () => {
|
||||
it("returns false for empty text", () => {
|
||||
expect(detectReflectedContent("").isReflection).toBe(false);
|
||||
});
|
||||
|
||||
it("returns false for normal user text", () => {
|
||||
const result = detectReflectedContent("Hey, what's the weather today?");
|
||||
expect(result.isReflection).toBe(false);
|
||||
expect(result.matchedLabels).toEqual([]);
|
||||
});
|
||||
|
||||
it("detects +#+#+#+# separator pattern", () => {
|
||||
const result = detectReflectedContent("NO_REPLY +#+#+#+#+#+assistant to=final");
|
||||
expect(result.isReflection).toBe(true);
|
||||
expect(result.matchedLabels).toContain("internal-separator");
|
||||
});
|
||||
|
||||
it("detects assistant to=final marker", () => {
|
||||
const result = detectReflectedContent("some text assistant to=final rest");
|
||||
expect(result.isReflection).toBe(true);
|
||||
expect(result.matchedLabels).toContain("assistant-role-marker");
|
||||
});
|
||||
|
||||
it("detects <thinking> tags", () => {
|
||||
const result = detectReflectedContent("<thinking>internal reasoning</thinking>");
|
||||
expect(result.isReflection).toBe(true);
|
||||
expect(result.matchedLabels).toContain("thinking-tag");
|
||||
});
|
||||
|
||||
it("detects <thought> tags", () => {
|
||||
const result = detectReflectedContent("<thought>secret</thought>");
|
||||
expect(result.isReflection).toBe(true);
|
||||
expect(result.matchedLabels).toContain("thinking-tag");
|
||||
});
|
||||
|
||||
it("detects <relevant_memories> tags", () => {
|
||||
const result = detectReflectedContent("<relevant_memories>data</relevant_memories>");
|
||||
expect(result.isReflection).toBe(true);
|
||||
expect(result.matchedLabels).toContain("relevant-memories-tag");
|
||||
});
|
||||
|
||||
it("detects <final> tags", () => {
|
||||
const result = detectReflectedContent("<final>visible</final>");
|
||||
expect(result.isReflection).toBe(true);
|
||||
expect(result.matchedLabels).toContain("final-tag");
|
||||
});
|
||||
|
||||
it("returns multiple matched labels for combined markers", () => {
|
||||
const text = "NO_REPLY +#+#+#+# <thinking>step</thinking> assistant to=final";
|
||||
const result = detectReflectedContent(text);
|
||||
expect(result.isReflection).toBe(true);
|
||||
expect(result.matchedLabels.length).toBeGreaterThanOrEqual(3);
|
||||
});
|
||||
|
||||
it("ignores reflection markers inside inline code", () => {
|
||||
const result = detectReflectedContent(
|
||||
"Please keep `<thinking>debug trace</thinking>` in the example output",
|
||||
);
|
||||
expect(result.isReflection).toBe(false);
|
||||
expect(result.matchedLabels).toEqual([]);
|
||||
});
|
||||
|
||||
it("ignores reflection markers inside fenced code blocks", () => {
|
||||
const result = detectReflectedContent(
|
||||
[
|
||||
"User pasted a repro snippet:",
|
||||
"```xml",
|
||||
"<relevant_memories>cached</relevant_memories>",
|
||||
"assistant to=final",
|
||||
"```",
|
||||
].join("\n"),
|
||||
);
|
||||
expect(result.isReflection).toBe(false);
|
||||
expect(result.matchedLabels).toEqual([]);
|
||||
});
|
||||
|
||||
it("still flags markers that appear outside code blocks", () => {
|
||||
const result = detectReflectedContent(
|
||||
["```xml", "<thinking>inside code</thinking>", "```", "", "assistant to=final"].join("\n"),
|
||||
);
|
||||
expect(result.isReflection).toBe(true);
|
||||
expect(result.matchedLabels).toContain("assistant-role-marker");
|
||||
});
|
||||
|
||||
it("does not flag normal code discussion about thinking", () => {
|
||||
const result = detectReflectedContent("I was thinking about your question");
|
||||
expect(result.isReflection).toBe(false);
|
||||
});
|
||||
|
||||
it("flags '<final answer>' as reflection when it forms a complete tag", () => {
|
||||
const result = detectReflectedContent("Here is my <final answer>");
|
||||
expect(result.isReflection).toBe(true);
|
||||
});
|
||||
|
||||
it("does not flag partial tag without closing bracket", () => {
|
||||
const result = detectReflectedContent("I sent a <final draft, see below");
|
||||
expect(result.isReflection).toBe(false);
|
||||
});
|
||||
|
||||
it("does not flag '<thought experiment>' phrase without closing bracket", () => {
|
||||
const result = detectReflectedContent("This is a <thought experiment I ran");
|
||||
expect(result.isReflection).toBe(false);
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue