fix(start-work): prevent overwriting session agent if already set; inherit parent model for subagent types (#1201)
* fix(start-work): prevent overwriting session agent if already set; inherit parent model for subagent types * fix(model): include variant in StoredMessage model structure for better context propagation * fix(injector): include variant in model structure for hook message injection
This commit is contained in:
parent
0c3fbd724b
commit
faca80caa9
@ -55,7 +55,6 @@ ${REFACTOR_TEMPLATE}
|
|||||||
},
|
},
|
||||||
"start-work": {
|
"start-work": {
|
||||||
description: "(builtin) Start Sisyphus work session from Prometheus plan",
|
description: "(builtin) Start Sisyphus work session from Prometheus plan",
|
||||||
agent: "atlas",
|
|
||||||
template: `<command-instruction>
|
template: `<command-instruction>
|
||||||
${START_WORK_TEMPLATE}
|
${START_WORK_TEMPLATE}
|
||||||
</command-instruction>
|
</command-instruction>
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import type { MessageMeta, OriginalMessageContext, TextPart, ToolPermission } fr
|
|||||||
|
|
||||||
export interface StoredMessage {
|
export interface StoredMessage {
|
||||||
agent?: string
|
agent?: string
|
||||||
model?: { providerID?: string; modelID?: string }
|
model?: { providerID?: string; modelID?: string; variant?: string }
|
||||||
tools?: Record<string, ToolPermission>
|
tools?: Record<string, ToolPermission>
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,9 +141,17 @@ export function injectHookMessage(
|
|||||||
const resolvedAgent = originalMessage.agent ?? fallback?.agent ?? "general"
|
const resolvedAgent = originalMessage.agent ?? fallback?.agent ?? "general"
|
||||||
const resolvedModel =
|
const resolvedModel =
|
||||||
originalMessage.model?.providerID && originalMessage.model?.modelID
|
originalMessage.model?.providerID && originalMessage.model?.modelID
|
||||||
? { providerID: originalMessage.model.providerID, modelID: originalMessage.model.modelID }
|
? {
|
||||||
|
providerID: originalMessage.model.providerID,
|
||||||
|
modelID: originalMessage.model.modelID,
|
||||||
|
...(originalMessage.model.variant ? { variant: originalMessage.model.variant } : {})
|
||||||
|
}
|
||||||
: fallback?.model?.providerID && fallback?.model?.modelID
|
: fallback?.model?.providerID && fallback?.model?.modelID
|
||||||
? { providerID: fallback.model.providerID, modelID: fallback.model.modelID }
|
? {
|
||||||
|
providerID: fallback.model.providerID,
|
||||||
|
modelID: fallback.model.modelID,
|
||||||
|
...(fallback.model.variant ? { variant: fallback.model.variant } : {})
|
||||||
|
}
|
||||||
: undefined
|
: undefined
|
||||||
const resolvedTools = originalMessage.tools ?? fallback?.tools
|
const resolvedTools = originalMessage.tools ?? fallback?.tools
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,7 @@ export interface MessageMeta {
|
|||||||
model?: {
|
model?: {
|
||||||
providerID: string
|
providerID: string
|
||||||
modelID: string
|
modelID: string
|
||||||
|
variant?: string
|
||||||
}
|
}
|
||||||
path?: {
|
path?: {
|
||||||
cwd: string
|
cwd: string
|
||||||
@ -25,6 +26,7 @@ export interface OriginalMessageContext {
|
|||||||
model?: {
|
model?: {
|
||||||
providerID?: string
|
providerID?: string
|
||||||
modelID?: string
|
modelID?: string
|
||||||
|
variant?: string
|
||||||
}
|
}
|
||||||
path?: {
|
path?: {
|
||||||
cwd?: string
|
cwd?: string
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import {
|
|||||||
clearBoulderState,
|
clearBoulderState,
|
||||||
} from "../../features/boulder-state"
|
} from "../../features/boulder-state"
|
||||||
import { log } from "../../shared/logger"
|
import { log } from "../../shared/logger"
|
||||||
import { updateSessionAgent } from "../../features/claude-code-session-state"
|
import { getSessionAgent, updateSessionAgent } from "../../features/claude-code-session-state"
|
||||||
|
|
||||||
export const HOOK_NAME = "start-work"
|
export const HOOK_NAME = "start-work"
|
||||||
|
|
||||||
@ -71,7 +71,10 @@ export function createStartWorkHook(ctx: PluginInput) {
|
|||||||
sessionID: input.sessionID,
|
sessionID: input.sessionID,
|
||||||
})
|
})
|
||||||
|
|
||||||
updateSessionAgent(input.sessionID, "atlas")
|
const currentAgent = getSessionAgent(input.sessionID)
|
||||||
|
if (!currentAgent) {
|
||||||
|
updateSessionAgent(input.sessionID, "atlas")
|
||||||
|
}
|
||||||
|
|
||||||
const existingState = readBoulderState(ctx.directory)
|
const existingState = readBoulderState(ctx.directory)
|
||||||
const sessionId = input.sessionID
|
const sessionId = input.sessionID
|
||||||
|
|||||||
@ -205,7 +205,11 @@ export function createTodoContinuationEnforcer(
|
|||||||
const prevMessage = messageDir ? findNearestMessageWithFields(messageDir) : null
|
const prevMessage = messageDir ? findNearestMessageWithFields(messageDir) : null
|
||||||
agentName = agentName ?? prevMessage?.agent
|
agentName = agentName ?? prevMessage?.agent
|
||||||
model = model ?? (prevMessage?.model?.providerID && prevMessage?.model?.modelID
|
model = model ?? (prevMessage?.model?.providerID && prevMessage?.model?.modelID
|
||||||
? { providerID: prevMessage.model.providerID, modelID: prevMessage.model.modelID }
|
? {
|
||||||
|
providerID: prevMessage.model.providerID,
|
||||||
|
modelID: prevMessage.model.modelID,
|
||||||
|
...(prevMessage.model.variant ? { variant: prevMessage.model.variant } : {})
|
||||||
|
}
|
||||||
: undefined)
|
: undefined)
|
||||||
tools = tools ?? prevMessage?.tools
|
tools = tools ?? prevMessage?.tools
|
||||||
}
|
}
|
||||||
|
|||||||
@ -80,7 +80,11 @@ export function createBackgroundTask(manager: BackgroundManager): ToolDefinition
|
|||||||
})
|
})
|
||||||
|
|
||||||
const parentModel = prevMessage?.model?.providerID && prevMessage?.model?.modelID
|
const parentModel = prevMessage?.model?.providerID && prevMessage?.model?.modelID
|
||||||
? { providerID: prevMessage.model.providerID, modelID: prevMessage.model.modelID }
|
? {
|
||||||
|
providerID: prevMessage.model.providerID,
|
||||||
|
modelID: prevMessage.model.modelID,
|
||||||
|
...(prevMessage.model.variant ? { variant: prevMessage.model.variant } : {})
|
||||||
|
}
|
||||||
: undefined
|
: undefined
|
||||||
|
|
||||||
const task = await manager.launch({
|
const task = await manager.launch({
|
||||||
|
|||||||
@ -287,7 +287,11 @@ Prompts MUST be in English.`
|
|||||||
resolvedParentAgent: parentAgent,
|
resolvedParentAgent: parentAgent,
|
||||||
})
|
})
|
||||||
const parentModel = prevMessage?.model?.providerID && prevMessage?.model?.modelID
|
const parentModel = prevMessage?.model?.providerID && prevMessage?.model?.modelID
|
||||||
? { providerID: prevMessage.model.providerID, modelID: prevMessage.model.modelID }
|
? {
|
||||||
|
providerID: prevMessage.model.providerID,
|
||||||
|
modelID: prevMessage.model.modelID,
|
||||||
|
...(prevMessage.model.variant ? { variant: prevMessage.model.variant } : {})
|
||||||
|
}
|
||||||
: undefined
|
: undefined
|
||||||
|
|
||||||
if (args.session_id) {
|
if (args.session_id) {
|
||||||
@ -806,6 +810,13 @@ Create the work plan directly - that's your job as the planning agent.`
|
|||||||
} catch {
|
} catch {
|
||||||
// If we can't fetch agents, proceed anyway - the session.prompt will fail with a clearer error
|
// If we can't fetch agents, proceed anyway - the session.prompt will fail with a clearer error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// When using subagent_type directly, inherit parent model so agents don't default
|
||||||
|
// to their hardcoded models (like grok-code) which may not be available
|
||||||
|
if (parentModel) {
|
||||||
|
categoryModel = parentModel
|
||||||
|
modelInfo = { model: `${parentModel.providerID}/${parentModel.modelID}`, type: "inherited" }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const systemContent = buildSystemContent({ skillContent, categoryPromptAppend, agentName: agentToUse })
|
const systemContent = buildSystemContent({ skillContent, categoryPromptAppend, agentName: agentToUse })
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user