Remove '고민' from MULTILINGUAL_KEYWORDS as it triggers false positives in everyday Korean speech. The keyword '생각' (thinking) remains for intentional think-mode activation. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
58 lines
1.9 KiB
TypeScript
58 lines
1.9 KiB
TypeScript
const ENGLISH_PATTERNS = [/\bultrathink\b/i, /\bthink\b/i]
|
|
|
|
const MULTILINGUAL_KEYWORDS = [
|
|
"생각", "검토", "제대로",
|
|
"思考", "考虑", "考慮",
|
|
"思考", "考え", "熟考",
|
|
"सोच", "विचार",
|
|
"تفكير", "تأمل",
|
|
"চিন্তা", "ভাবনা",
|
|
"думать", "думай", "размышлять", "размышляй",
|
|
"pensar", "pense", "refletir", "reflita",
|
|
"pensar", "piensa", "reflexionar", "reflexiona",
|
|
"penser", "pense", "réfléchir", "réfléchis",
|
|
"denken", "denk", "nachdenken",
|
|
"suy nghĩ", "cân nhắc",
|
|
"düşün", "düşünmek",
|
|
"pensare", "pensa", "riflettere", "rifletti",
|
|
"คิด", "พิจารณา",
|
|
"myśl", "myśleć", "zastanów",
|
|
"denken", "denk", "nadenken",
|
|
"berpikir", "pikir", "pertimbangkan",
|
|
"думати", "думай", "роздумувати",
|
|
"σκέψου", "σκέφτομαι",
|
|
"myslet", "mysli", "přemýšlet",
|
|
"gândește", "gândi", "reflectă",
|
|
"tänka", "tänk", "fundera",
|
|
"gondolkodj", "gondolkodni",
|
|
"ajattele", "ajatella", "pohdi",
|
|
"tænk", "tænke", "overvej",
|
|
"tenk", "tenke", "gruble",
|
|
"חשוב", "לחשוב", "להרהר",
|
|
"fikir", "berfikir",
|
|
]
|
|
|
|
const MULTILINGUAL_PATTERNS = MULTILINGUAL_KEYWORDS.map((kw) => new RegExp(kw, "i"))
|
|
const THINK_PATTERNS = [...ENGLISH_PATTERNS, ...MULTILINGUAL_PATTERNS]
|
|
|
|
const CODE_BLOCK_PATTERN = /```[\s\S]*?```/g
|
|
const INLINE_CODE_PATTERN = /`[^`]+`/g
|
|
|
|
function removeCodeBlocks(text: string): string {
|
|
return text.replace(CODE_BLOCK_PATTERN, "").replace(INLINE_CODE_PATTERN, "")
|
|
}
|
|
|
|
export function detectThinkKeyword(text: string): boolean {
|
|
const textWithoutCode = removeCodeBlocks(text)
|
|
return THINK_PATTERNS.some((pattern) => pattern.test(textWithoutCode))
|
|
}
|
|
|
|
export function extractPromptText(
|
|
parts: Array<{ type: string; text?: string }>
|
|
): string {
|
|
return parts
|
|
.filter((p) => p.type === "text")
|
|
.map((p) => p.text || "")
|
|
.join("")
|
|
}
|