LibreChat/api/server/services/Files/Code/preflight.spec.js
Danny Avila 67b7b441b2
🛂 feat: Filter Model-Bound Content by Source (#14425)
* feat: introduce optional content protection seam

* feat: enforce source-aware content filters

* feat: complete source-aware content enforcement

* test: activate skill file-text fail-close fixtures

* fix: harden source-aware content filters

* fix: harden model-bound content filtering

* fix: preserve legacy filters and generated files

* fix: inspect shared scalar metadata

* test: align mocks with current dev dependencies

* feat: add persisted content filter safeguards

* feat: complete source-aware content filter enforcement

* fix: move resume content preflight into TypeScript

* fix: close content inspection edge cases

* fix: harden content protection boundaries

* fix: complete content protection safeguards

* test: align persisted memory filter coverage

* fix: reconcile content protection with current dev

* fix: reconcile content protection with latest dev

* fix: close content protection review gaps

* fix: enforce source-aware provider boundaries

* fix: preserve legacy PII preflight semantics

* test: stabilize stored branch preflight fixture

* fix: defer agent writes until protected model admission

* perf: harden source-aware model-bound filtering

* fix: canonicalize provider lineage before validation

* fix: satisfy model-bound callback type checks

* perf: Bound content protection filtering work

* fix: Bound submission array traversal

* fix: Stabilize bounded content snapshots

* fix: Scope model-bound traversal overflows

* fix: Preserve scoped content inspection

* fix: Accumulate aggregate traversal scopes

* fix: centralize content policy boundaries

* test: align deferred tool policy context

* test: align controller policy mocks

* style: normalize content protection imports

* fix: close content policy review gaps

* fix: narrow active skill policy config

* fix: address content protection review boundaries

* fix: retain exact provenance overflow sentinel

* fix: preserve literal and scoped provenance updates

* fix: narrow persisted edit provenance

* fix: isolate exact overflow attribution

* fix: centralize stored prompt protection

* fix: fail closed on incomplete transcript evidence

* fix: align canonical transcript routing

* refactor: centralize content policy preflights

* fix: isolate upload policy error typing

* style: sort policy preflight imports

* refactor: centralize content policy boundaries
2026-08-21 22:43:32 -04:00

69 lines
2 KiB
JavaScript

const mockRunCodeOutputBatchPreflight = jest.fn();
const mockPrepareCodeOutputForInspection = jest.fn();
jest.mock('@librechat/data-schemas', () => ({
logger: { warn: jest.fn() },
}));
jest.mock('@librechat/api', () => ({
preflightCodeOutputBatch: (...args) => mockRunCodeOutputBatchPreflight(...args),
}));
jest.mock('librechat-data-provider', () => ({
EModelEndpoint: { agents: 'agents' },
mergeFileConfig: jest.fn(() => ({ serverFileSizeLimit: 32 })),
getEndpointFileConfig: jest.fn(() => ({
fileLimit: 4,
fileSizeLimit: 8,
totalSizeLimit: 16,
})),
}));
jest.mock('./process', () => ({
prepareCodeOutputForInspection: (...args) => mockPrepareCodeOutputForInspection(...args),
}));
const { preflightCodeOutputBatch } = require('./preflight');
describe('preflightCodeOutputBatch Code API routing', () => {
beforeEach(() => {
jest.clearAllMocks();
mockPrepareCodeOutputForInspection.mockResolvedValue({
buffer: Buffer.from('safe'),
file: { name: 'output.txt', content: 'safe' },
});
mockRunCodeOutputBatchPreflight.mockImplementation(async ({ prepare }) => {
await prepare({
file: { id: 'file-1', name: 'output.txt' },
sessionId: 'session-1',
maxBytes: 8,
inspectContent: true,
});
return [];
});
});
it('forwards the trusted per-agent Code API route to inspection downloads', async () => {
const req = { config: {}, user: { id: 'user-1' } };
await preflightCodeOutputBatch({
req,
artifact: { files: [{ id: 'file-1', name: 'output.txt' }] },
codeExecutionContext: {
baseUrl: 'https://code-stateful.example.com',
executionProfile: 'stateful',
},
});
expect(mockPrepareCodeOutputForInspection).toHaveBeenCalledWith({
req,
id: 'file-1',
name: 'output.txt',
session_id: 'session-1',
maxBytes: 8,
inspectContent: true,
codeApiBaseUrl: 'https://code-stateful.example.com',
executionProfile: 'stateful',
});
});
});