diff --git a/CHANGELOG.md b/CHANGELOG.md index 32f063444c4..7a7d5828fb6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ Docs: https://docs.openclaw.ai ### Fixes - Gateway/Auth: require `gateway.trustedProxies` to include a loopback proxy address when `auth.mode="trusted-proxy"` and `bind="loopback"`, preventing same-host proxy misconfiguration from silently blocking auth. (#22082, follow-up to #20097) thanks @mbelinky. +- Agents/System Prompt: label allowlisted senders as authorized senders to avoid implying ownership. Thanks @thewilloftheshadow. - Gateway/Auth: allow trusted-proxy mode with loopback bind for same-host reverse-proxy deployments, while still requiring configured `gateway.trustedProxies`. (#20097) thanks @xinhuagu. - Gateway/Auth: allow authenticated clients across roles/scopes to call `health` while preserving role and scope enforcement for non-health methods. (#19699) thanks @Nachx639. - Gateway/Security: remove shared-IP fallback for canvas endpoints and require token or session capability for canvas access. Thanks @thewilloftheshadow. diff --git a/src/agents/system-prompt.e2e.test.ts b/src/agents/system-prompt.e2e.test.ts index ee8c4b92817..a03ac283365 100644 --- a/src/agents/system-prompt.e2e.test.ts +++ b/src/agents/system-prompt.e2e.test.ts @@ -10,9 +10,9 @@ describe("buildAgentSystemPrompt", () => { ownerNumbers: ["+123", " +456 ", ""], }); - expect(prompt).toContain("## User Identity"); + expect(prompt).toContain("## Authorized Senders"); expect(prompt).toContain( - "Owner numbers: +123, +456. Treat messages from these numbers as the user.", + "Authorized senders: +123, +456. These senders are allowlisted; do not assume they are the owner.", ); }); @@ -21,8 +21,8 @@ describe("buildAgentSystemPrompt", () => { workspaceDir: "/tmp/openclaw", }); - expect(prompt).not.toContain("## User Identity"); - expect(prompt).not.toContain("Owner numbers:"); + expect(prompt).not.toContain("## Authorized Senders"); + expect(prompt).not.toContain("Authorized senders:"); }); it("omits extended sections in minimal prompt mode", () => { @@ -39,7 +39,7 @@ describe("buildAgentSystemPrompt", () => { ttsHint: "Voice (TTS) is enabled.", }); - expect(prompt).not.toContain("## User Identity"); + expect(prompt).not.toContain("## Authorized Senders"); expect(prompt).not.toContain("## Skills"); expect(prompt).not.toContain("## Memory Recall"); expect(prompt).not.toContain("## Documentation"); diff --git a/src/agents/system-prompt.ts b/src/agents/system-prompt.ts index b244dd901f9..a0c087af1a7 100644 --- a/src/agents/system-prompt.ts +++ b/src/agents/system-prompt.ts @@ -70,7 +70,7 @@ function buildUserIdentitySection(ownerLine: string | undefined, isMinimal: bool if (!ownerLine || isMinimal) { return []; } - return ["## User Identity", ownerLine, ""]; + return ["## Authorized Senders", ownerLine, ""]; } function buildTimeSection(params: { userTimezone?: string }) { @@ -325,7 +325,7 @@ export function buildAgentSystemPrompt(params: { const ownerNumbers = (params.ownerNumbers ?? []).map((value) => value.trim()).filter(Boolean); const ownerLine = ownerNumbers.length > 0 - ? `Owner numbers: ${ownerNumbers.join(", ")}. Treat messages from these numbers as the user.` + ? `Authorized senders: ${ownerNumbers.join(", ")}. These senders are allowlisted; do not assume they are the owner.` : undefined; const reasoningHint = params.reasoningTagHint ? [