diff --git a/packages/core/src/session/context-entry.ts b/packages/core/src/session/context-entry.ts
index 96d3367b97b..1f3ffdb0531 100644
--- a/packages/core/src/session/context-entry.ts
+++ b/packages/core/src/session/context-entry.ts
@@ -33,22 +33,20 @@ const renderValue = (value: Schema.Json) => (typeof value === "string" ? value :
const renderBlock = (key: Key, value: Schema.Json) =>
[``, renderValue(value), ""].join("\n")
+// Rendering stays mechanism-neutral: the model sees session context, not how
+// it was attached. Only chronological updates and removals carry narration.
const source = (entry: Info) =>
SystemContext.make({
key: SystemContext.Key.make(`api/${entry.key}`),
codec: Schema.toCodecJson(Schema.Json),
load: Effect.succeed(entry.value),
- baseline: (value) =>
- [
- `An API client attached the following context to this session under "${entry.key}":`,
- renderBlock(entry.key, value),
- ].join("\n"),
+ baseline: (value) => renderBlock(entry.key, value),
update: (_previous, value) =>
[
- `The attached context "${entry.key}" changed. This value supersedes the previous one:`,
+ `The context under "${entry.key}" changed and supersedes the previous value:`,
renderBlock(entry.key, value),
].join("\n"),
- removed: () => `The attached context "${entry.key}" was removed. Disregard it.`,
+ removed: () => `The context under "${entry.key}" no longer applies. Disregard it.`,
})
const layer = Layer.effect(
diff --git a/packages/core/test/session-runner.test.ts b/packages/core/test/session-runner.test.ts
index 2cf947aa841..d09b9ea34ca 100644
--- a/packages/core/test/session-runner.test.ts
+++ b/packages/core/test/session-runner.test.ts
@@ -1108,14 +1108,7 @@ describe("SessionRunnerLLM", () => {
// String values render verbatim inside the tagged block at baseline.
expect(requests[0]?.system.map((part) => part.text)).toEqual([
defaultSystem,
- [
- "Initial context",
- "",
- 'An API client attached the following context to this session under "deploy-target":',
- '',
- "production",
- "",
- ].join("\n"),
+ ["Initial context", "", '', "production", ""].join("\n"),
])
// Non-string JSON pretty-prints; the change narrates as a System update.
@@ -1128,7 +1121,7 @@ describe("SessionRunnerLLM", () => {
{
type: "text",
text: [
- 'The attached context "deploy-target" changed. This value supersedes the previous one:',
+ 'The context under "deploy-target" changed and supersedes the previous value:',
'',
"{",
' "region": "us-east-1"',
@@ -1146,7 +1139,7 @@ describe("SessionRunnerLLM", () => {
expect(requests[2]?.messages.map((message) => message.role)).toEqual(["user", "system", "user", "system", "user"])
expect(requests[2]?.messages.at(-2)?.content).toEqual([
- { type: "text", text: 'The attached context "deploy-target" was removed. Disregard it.' },
+ { type: "text", text: 'The context under "deploy-target" no longer applies. Disregard it.' },
])
expect(yield* contextEntries.list(sessionID)).toEqual([])
}),