






















@@ -19,12 +19,24 @@ type ExtractedLevel<T> = {
1919hasDirective: boolean;
2020};
212122+const compileDirectivePattern = (names: readonly string[], suffix = ""): RegExp => {
23+const namePattern = names.map(escapeRegExp).join("|");
24+return new RegExp(`(?:^|\\s)\\/(?:${namePattern})(?=$|\\s|:)${suffix}`, "i");
25+};
26+27+const THINK_DIRECTIVE_PATTERN = compileDirectivePattern(["thinking", "think", "t"]);
28+const VERBOSE_DIRECTIVE_PATTERN = compileDirectivePattern(["verbose", "v"]);
29+const TRACE_DIRECTIVE_PATTERN = compileDirectivePattern(["trace"]);
30+const FAST_DIRECTIVE_PATTERN = compileDirectivePattern(["fast"]);
31+const ELEVATED_DIRECTIVE_PATTERN = compileDirectivePattern(["elevated", "elev"]);
32+const REASONING_DIRECTIVE_PATTERN = compileDirectivePattern(["reasoning", "reason"]);
33+const STATUS_DIRECTIVE_PATTERN = compileDirectivePattern(["status"], `(?:\\s*:\\s*)?`);
34+2235const matchLevelDirective = (
2336body: string,
24-names: string[],
37+pattern: RegExp,
2538): { start: number; end: number; rawLevel?: string } | null => {
26-const namePattern = names.map(escapeRegExp).join("|");
27-const match = body.match(new RegExp(`(?:^|\\s)\\/(?:${namePattern})(?=$|\\s|:)`, "i"));
39+const match = body.match(pattern);
2840if (!match || match.index === undefined) {
2941return null;
3042}
@@ -51,10 +63,10 @@ const matchLevelDirective = (
51635264const extractLevelDirective = <T>(
5365body: string,
54-names: string[],
66+pattern: RegExp,
5567normalize: (raw?: string) => T | undefined,
5668): ExtractedLevel<T> => {
57-const match = matchLevelDirective(body, names);
69+const match = matchLevelDirective(body, pattern);
5870if (!match) {
5971return { cleaned: body.trim(), hasDirective: false };
6072}
@@ -76,12 +88,9 @@ const extractLevelDirective = <T>(
76887789const extractSimpleDirective = (
7890body: string,
79-names: string[],
91+pattern: RegExp,
8092): { cleaned: string; hasDirective: boolean } => {
81-const namePattern = names.map(escapeRegExp).join("|");
82-const match = body.match(
83-new RegExp(`(?:^|\\s)\\/(?:${namePattern})(?=$|\\s|:)(?:\\s*:\\s*)?`, "i"),
84-);
93+const match = body.match(pattern);
8594const cleaned = match ? body.replace(match[0], " ").replace(/\s+/g, " ").trim() : body.trim();
8695return {
8796 cleaned,
@@ -98,7 +107,7 @@ export function extractThinkDirective(body?: string): {
98107if (!body) {
99108return { cleaned: "", hasDirective: false };
100109}
101-const extracted = extractLevelDirective(body, ["thinking", "think", "t"], normalizeThinkLevel);
110+const extracted = extractLevelDirective(body, THINK_DIRECTIVE_PATTERN, normalizeThinkLevel);
102111return {
103112cleaned: extracted.cleaned,
104113thinkLevel: extracted.level,
@@ -116,7 +125,7 @@ export function extractVerboseDirective(body?: string): {
116125if (!body) {
117126return { cleaned: "", hasDirective: false };
118127}
119-const extracted = extractLevelDirective(body, ["verbose", "v"], normalizeVerboseLevel);
128+const extracted = extractLevelDirective(body, VERBOSE_DIRECTIVE_PATTERN, normalizeVerboseLevel);
120129return {
121130cleaned: extracted.cleaned,
122131verboseLevel: extracted.level,
@@ -134,7 +143,7 @@ export function extractTraceDirective(body?: string): {
134143if (!body) {
135144return { cleaned: "", hasDirective: false };
136145}
137-const extracted = extractLevelDirective(body, ["trace"], normalizeTraceLevel);
146+const extracted = extractLevelDirective(body, TRACE_DIRECTIVE_PATTERN, normalizeTraceLevel);
138147return {
139148cleaned: extracted.cleaned,
140149traceLevel: extracted.level,
@@ -152,7 +161,7 @@ export function extractFastDirective(body?: string): {
152161if (!body) {
153162return { cleaned: "", hasDirective: false };
154163}
155-const extracted = extractLevelDirective(body, ["fast"], normalizeFastMode);
164+const extracted = extractLevelDirective(body, FAST_DIRECTIVE_PATTERN, normalizeFastMode);
156165return {
157166cleaned: extracted.cleaned,
158167fastMode: extracted.level,
@@ -170,7 +179,7 @@ export function extractElevatedDirective(body?: string): {
170179if (!body) {
171180return { cleaned: "", hasDirective: false };
172181}
173-const extracted = extractLevelDirective(body, ["elevated", "elev"], normalizeElevatedLevel);
182+const extracted = extractLevelDirective(body, ELEVATED_DIRECTIVE_PATTERN, normalizeElevatedLevel);
174183return {
175184cleaned: extracted.cleaned,
176185elevatedLevel: extracted.level,
@@ -188,7 +197,11 @@ export function extractReasoningDirective(body?: string): {
188197if (!body) {
189198return { cleaned: "", hasDirective: false };
190199}
191-const extracted = extractLevelDirective(body, ["reasoning", "reason"], normalizeReasoningLevel);
200+const extracted = extractLevelDirective(
201+body,
202+REASONING_DIRECTIVE_PATTERN,
203+normalizeReasoningLevel,
204+);
192205return {
193206cleaned: extracted.cleaned,
194207reasoningLevel: extracted.level,
@@ -204,7 +217,7 @@ export function extractStatusDirective(body?: string): {
204217if (!body) {
205218return { cleaned: "", hasDirective: false };
206219}
207-return extractSimpleDirective(body, ["status"]);
220+return extractSimpleDirective(body, STATUS_DIRECTIVE_PATTERN);
208221}
209222210223export type { ElevatedLevel, NoticeLevel, ReasoningLevel, ThinkLevel, TraceLevel, VerboseLevel };
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。