refactor(hooks): rename ultrawork-mode to keyword-detector with multi-keyword support

- Detect ultrawork, search, analyze keywords (EN/KO/JP/CN/VN)
- Add session-based injection tracking (once per session)
- Remove unnecessary state management

🤖 GENERATED WITH ASSISTANCE OF [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
This commit is contained in:
YeonGyu-Kim
2025-12-14 11:38:33 +09:00
parent 25a5c2eeb4
commit 0fcfe21b27
7 changed files with 151 additions and 179 deletions

View File

@@ -0,0 +1,72 @@
import { detectKeywords, extractPromptText } from "./detector"
import { log } from "../../shared"
import { injectHookMessage } from "../../features/hook-message-injector"
export * from "./detector"
export * from "./constants"
export * from "./types"
const injectedSessions = new Set<string>()
export function createKeywordDetectorHook() {
return {
"chat.message": async (
input: {
sessionID: string
agent?: string
model?: { providerID: string; modelID: string }
messageID?: string
},
output: {
message: Record<string, unknown>
parts: Array<{ type: string; text?: string; [key: string]: unknown }>
}
): Promise<void> => {
if (injectedSessions.has(input.sessionID)) {
return
}
const promptText = extractPromptText(output.parts)
const messages = detectKeywords(promptText)
if (messages.length === 0) {
return
}
log(`Keywords detected: ${messages.length}`, { sessionID: input.sessionID })
const message = output.message as {
agent?: string
model?: { modelID?: string; providerID?: string }
path?: { cwd?: string; root?: string }
tools?: Record<string, boolean>
}
const context = messages.join("\n")
const success = injectHookMessage(input.sessionID, context, {
agent: message.agent,
model: message.model,
path: message.path,
tools: message.tools,
})
if (success) {
injectedSessions.add(input.sessionID)
log("Keyword context injected", { sessionID: input.sessionID })
}
},
event: async ({
event,
}: {
event: { type: string; properties?: unknown }
}) => {
if (event.type === "session.deleted") {
const props = event.properties as { info?: { id?: string } } | undefined
if (props?.info?.id) {
injectedSessions.delete(props.info.id)
}
}
},
}
}