Enable keyword detection on first message using direct parts transformation
Previously, first messages were skipped entirely to avoid interfering with title generation. Now, keywords detected on the first message are injected directly into the message parts instead of using the hook message injection system, allowing keywords like 'ultrawork' to activate on the first message of a session. This change: - Removes the early return that skipped first message keyword detection - Moves keyword context generation before the isFirstMessage check - For first messages: transforms message parts directly by prepending keyword context - For subsequent messages: maintains existing hook message injection behavior 🤖 GENERATED WITH ASSISTANCE OF [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
This commit is contained in:
@@ -25,11 +25,6 @@ export function createKeywordDetectorHook() {
|
|||||||
const isFirstMessage = !sessionFirstMessageProcessed.has(input.sessionID)
|
const isFirstMessage = !sessionFirstMessageProcessed.has(input.sessionID)
|
||||||
sessionFirstMessageProcessed.add(input.sessionID)
|
sessionFirstMessageProcessed.add(input.sessionID)
|
||||||
|
|
||||||
if (isFirstMessage) {
|
|
||||||
log("Skipping keyword detection on first message for title generation", { sessionID: input.sessionID })
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const promptText = extractPromptText(output.parts)
|
const promptText = extractPromptText(output.parts)
|
||||||
const messages = detectKeywords(promptText)
|
const messages = detectKeywords(promptText)
|
||||||
|
|
||||||
@@ -37,6 +32,19 @@ export function createKeywordDetectorHook() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const context = messages.join("\n")
|
||||||
|
|
||||||
|
// First message: transform parts directly (for title generation compatibility)
|
||||||
|
if (isFirstMessage) {
|
||||||
|
log(`Keywords detected on first message, transforming parts directly`, { sessionID: input.sessionID, keywordCount: messages.length })
|
||||||
|
const idx = output.parts.findIndex((p) => p.type === "text" && p.text)
|
||||||
|
if (idx >= 0) {
|
||||||
|
output.parts[idx].text = `${context}\n\n---\n\n${output.parts[idx].text ?? ""}`
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Subsequent messages: inject as separate message
|
||||||
log(`Keywords detected: ${messages.length}`, { sessionID: input.sessionID })
|
log(`Keywords detected: ${messages.length}`, { sessionID: input.sessionID })
|
||||||
|
|
||||||
const message = output.message as {
|
const message = output.message as {
|
||||||
@@ -46,7 +54,6 @@ export function createKeywordDetectorHook() {
|
|||||||
tools?: Record<string, boolean>
|
tools?: Record<string, boolean>
|
||||||
}
|
}
|
||||||
|
|
||||||
const context = messages.join("\n")
|
|
||||||
log(`[keyword-detector] Injecting context for ${messages.length} keywords`, { sessionID: input.sessionID, contextLength: context.length })
|
log(`[keyword-detector] Injecting context for ${messages.length} keywords`, { sessionID: input.sessionID, contextLength: context.length })
|
||||||
const success = injectHookMessage(input.sessionID, context, {
|
const success = injectHookMessage(input.sessionID, context, {
|
||||||
agent: message.agent,
|
agent: message.agent,
|
||||||
|
|||||||
Reference in New Issue
Block a user