Merge remote-tracking branch 'origin/dev' into claude/ptc-progress-cli-display-ws0lb0

This commit is contained in:
Claude 2026-08-22 20:24:37 +00:00
commit 4bf68e18a4
No known key found for this signature in database
2 changed files with 49 additions and 1 deletions

View file

@ -3211,6 +3211,52 @@ describe('AgentClient - titleConvo', () => {
).toThrow(expect.objectContaining({ code: 'content_filter_block' })); ).toThrow(expect.objectContaining({ code: 'content_filter_block' }));
}); });
it('preserves persisted assistant attribution at the final agent provider boundary', async () => {
const marker = 'E2E-PERSISTED-UNATTRIBUTED-ASSISTANT';
mockReq.config.filters = {
messages: {
pii: {
fields: ['text'],
starterPatterns: [],
customPatterns: [
{
id: 'persisted-unattributed-assistant',
label: 'persisted unattributed assistant content',
regex: `^${marker}$`,
},
],
},
unattributedAssistantContent: 'inspect',
},
};
const storedMessage = {
messageId: 'legacy-assistant',
parentMessageId: null,
sender: 'Assistant',
text: marker,
isCreatedByUser: false,
};
client.setModelBoundStoredMessages([storedMessage]);
const result = await client.buildMessages([storedMessage], 'legacy-assistant', {}, {});
const { messages: providerMessages } = jest
.requireActual('@librechat/agents')
.formatAgentMessages(result.prompt);
expect(() =>
client
.createModelBoundChatModelCallback()
.handleChatModelStart(undefined, [providerMessages]),
).toThrow(expect.objectContaining({ code: 'content_filter_block' }));
client.setModelBoundStoredMessages([{ ...storedMessage, isUserSubmitted: false }]);
expect(() =>
client
.createModelBoundChatModelCallback()
.handleChatModelStart(undefined, [providerMessages]),
).not.toThrow();
});
it('ignores historical file refs when this agent does not replay files', async () => { it('ignores historical file refs when this agent does not replay files', async () => {
mockReq.config.filters = { mockReq.config.filters = {
files: { files: {

View file

@ -1986,7 +1986,9 @@ function projectStoredMessageForProvider(
role: message.role, role: message.role,
isCreatedByUser: message.isCreatedByUser, isCreatedByUser: message.isCreatedByUser,
isUserSubmitted: message.isUserSubmitted, isUserSubmitted: message.isUserSubmitted,
...(selectedContentPartIndices == null && messageContentCandidate == null && storedText != null ...(messageContentCandidate == null &&
storedText != null &&
(selectedContentPartIndices == null || selectedContentPartIndices.has(0))
? { text: storedText } ? { text: storedText }
: {}), : {}),
...(attribution === 'user' && { ...(attribution === 'user' && {