fix(core): remove per-prompt system option (#34361)

This commit is contained in:
Kit Langton 2026-06-28 21:56:59 -04:00 committed by GitHub
commit 7073e8797f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 3 additions and 80 deletions

View file

@ -509,7 +509,6 @@ const resolvePrompt = (input: PromptInput.Prompt) =>
Prompt.make({
text: input.text,
agents: input.agents,
system: input.system,
files: input.files?.map((file) => {
const dataMime = file.uri.match(/^data:([^;,]+)[;,]/i)?.[1]
const target = URL.canParse(file.uri) ? new URL(file.uri).pathname : (file.name ?? file.uri)

View file

@ -133,7 +133,6 @@ export function update(adapter: Adapter, event: SessionEvent.Event) {
text: event.data.prompt.text,
files: event.data.prompt.files,
agents: event.data.prompt.agents,
system: event.data.prompt.system,
time: { created: event.data.timestamp },
}),
)

View file

@ -193,16 +193,13 @@ export const layer = Layer.effect(
const model = yield* models.resolve(session)
const entries = yield* SessionHistory.entriesForRunner(db, session.id, system.baselineSeq)
const context = entries.map((entry) => entry.message)
// Mirror V1 (session/llm/request.ts): append the current turn's per-request system string after the
// agent prompt and durable baseline. The current turn's user prompt is the latest user message in context.
const turnSystem = context.findLast((message) => message.type === "user")?.system
const isLastStep = agent.info?.steps !== undefined && currentStep >= agent.info.steps
const toolMaterialization = isLastStep ? undefined : yield* tools.materialize(agent.info?.permissions)
const promptCacheKey = /^ses_[0-9a-f]{64}$/.test(session.id) ? session.id.slice(4) : session.id
const request = LLM.request({
model,
providerOptions: { openai: { promptCacheKey } },
system: [agent.info?.system ? agent.info.system : SessionRunnerSystemPrompt.provider(model), system.baseline, turnSystem]
system: [agent.info?.system ? agent.info.system : SessionRunnerSystemPrompt.provider(model), system.baseline]
.filter((part): part is string => part !== undefined && part.length > 0)
.map(SystemPart.make),
messages: [...toLLMMessages(context, model), ...(isLastStep ? [Message.assistant(MAX_STEPS_PROMPT)] : [])],

View file

@ -191,33 +191,6 @@ describe("SessionV2.prompt", () => {
}),
)
it.effect("preserves an optional per-request system string through admission and projection", () =>
Effect.gen(function* () {
yield* setup
const { db } = yield* Database.Service
const session = yield* SessionV2.Service
const events = yield* EventV2.Service
const message = yield* session.prompt({
sessionID,
prompt: Prompt.make({ text: "Fix the failing tests", system: "Per-request override" }),
resume: false,
})
expect(message.prompt.system).toBe("Per-request override")
expect(yield* admitted(message.id)).toMatchObject({
id: message.id,
prompt: { text: "Fix the failing tests", system: "Per-request override" },
})
yield* SessionInput.promoteSteers(db, events, sessionID, Number.MAX_SAFE_INTEGER)
expect(yield* session.messages({ sessionID })).toMatchObject([
{ id: message.id, type: "user", text: "Fix the failing tests", system: "Per-request override" },
])
}),
)
it.effect("commits a staged revert before admitting a new prompt", () =>
Effect.gen(function* () {
yield* setup

View file

@ -894,36 +894,7 @@ describe("SessionRunnerLLM", () => {
}),
)
it.effect("appends the per-request prompt system after the agent prompt and durable baseline", () =>
Effect.gen(function* () {
yield* setup
const agent = yield* AgentV2.Service
yield* agent.transform((editor) =>
editor.update(AgentV2.ID.make("build"), (agent) => {
agent.system = "Build agent instructions"
agent.mode = "primary"
}),
)
const session = yield* SessionV2.Service
yield* session.prompt({
sessionID,
prompt: Prompt.make({ text: "First", system: "Per-request override" }),
resume: false,
})
requests.length = 0
response = fragmentFixture("text", "text-system", ["Done"]).completeEvents
yield* session.resume(sessionID)
expect(requests.at(-1)?.system.map((part) => part.text)).toEqual([
"Build agent instructions",
"Initial context",
"Per-request override",
])
}),
)
it.effect("omits the per-request system part when the prompt has no system string", () =>
it.effect("uses only the agent prompt and durable baseline as system parts", () =>
Effect.gen(function* () {
yield* setup
const agent = yield* AgentV2.Service