Merge pull request #4190 from herjarsa/feat/default-mode
feat(default-mode): auto-activate ultrawork and ralph loop without commands
This commit is contained in:
@@ -304,6 +304,25 @@ export function createChatMessageHandler(args: {
|
||||
} else if (isCancelRalphTemplate || rawLoopCommand?.command === "cancel-ralph") {
|
||||
hooks.ralphLoop.cancelLoop(input.sessionID)
|
||||
}
|
||||
|
||||
if (
|
||||
!isRalphLoopTemplate
|
||||
&& !isUlwLoopTemplate
|
||||
&& !isCancelRalphTemplate
|
||||
&& !rawLoopCommand
|
||||
&& isFirstMessage
|
||||
&& pluginConfig.default_mode?.ralph_loop
|
||||
) {
|
||||
const loopPrompt = promptText
|
||||
const ultrawork = pluginConfig.default_mode?.ultrawork ?? false
|
||||
hooks.ralphLoop.startLoop(input.sessionID, loopPrompt, {
|
||||
ultrawork,
|
||||
})
|
||||
log("[chat-message] Default ralph loop auto-started", {
|
||||
sessionID: input.sessionID,
|
||||
ultrawork,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
await applyUltraworkModelOverrideOnMessage(
|
||||
|
||||
@@ -61,6 +61,7 @@ export function createTransformHooks(args: {
|
||||
contextCollector,
|
||||
ralphLoop ?? undefined,
|
||||
pluginConfig.keyword_detector,
|
||||
pluginConfig.default_mode,
|
||||
),
|
||||
{ enabled: safeHookEnabled },
|
||||
)
|
||||
|
||||
@@ -1,6 +1,32 @@
|
||||
export function createSystemTransformHandler(): (
|
||||
import type { DefaultModeConfig } from "../config/schema/default-mode"
|
||||
|
||||
const ULTRAWORK_MODE_TAG = "<ultrawork-mode>"
|
||||
|
||||
export function createSystemTransformHandler(
|
||||
defaultMode?: DefaultModeConfig,
|
||||
getUltraworkMessage?: (agentName?: string, modelID?: string) => string,
|
||||
): (
|
||||
input: { sessionID?: string; model: { id: string; providerID: string; [key: string]: unknown } },
|
||||
output: { system: string[] },
|
||||
) => Promise<void> {
|
||||
return async (): Promise<void> => {}
|
||||
return async (input, output): Promise<void> => {
|
||||
if (!defaultMode?.ultrawork || !getUltraworkMessage) return
|
||||
|
||||
// When ralph_loop is also enabled, skip system prompt injection: the loop's
|
||||
// own continuation mechanism handles ultrawork re-injection on each iteration.
|
||||
// Injecting both would be redundant — the continuation prompt prepends
|
||||
// "ultrawork" and re-triggers keyword detection, defeating invisibility.
|
||||
// The `ultrawork` flag still controls loop behavior (500 iters + Oracle gate).
|
||||
if (defaultMode?.ralph_loop) return
|
||||
|
||||
// Avoid re-injecting if the ultrawork prompt is already in the system prompt
|
||||
// (e.g. after compaction the system prompt is rebuilt and this hook fires again)
|
||||
if (output.system.some((part) => part.includes(ULTRAWORK_MODE_TAG))) return
|
||||
|
||||
const modelID = input.model?.id
|
||||
const ultraworkMessage = getUltraworkMessage("sisyphus", modelID)
|
||||
if (!ultraworkMessage) return
|
||||
|
||||
output.system.push(ultraworkMessage)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user