chore: v2.2.73 — ASTRA-DEBUG 로그 레벨 + webview CSP font-src 보강
- ASTRA-DEBUG 정상 흐름 로그를 console.error → logInfo/console.log 로 강등 (chatHandlers, extension, slashRouter): DevTools에 ERR로 찍히던 오탐 제거 - sidebar webview에 명시적 CSP meta 추가 + font-src에 data: 허용 (sidebar.html, sidebarProvider._getHtml): VS Code outer iframe이 codicon.ttf를 data:font/ttf 로 inject하면서 기본 CSP에 막혀 매 prompt 마다 violation 경고가 찍히던 문제 해소 - 누적된 LM Studio / agent / 컨텍스트 매니저 / 테스트 갱신 동반 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -49,7 +49,9 @@ describe('contextManager.computeOutputBudget', () => {
|
||||
});
|
||||
|
||||
describe('contextManager.trimHistoryToBudget', () => {
|
||||
const marker = (n: number): BudgetMessage => ({ role: 'system', content: `[dropped ${n}]`, internal: true });
|
||||
// v2.2.69: makeMarker now also receives the dropped messages array so callers can build a real summary.
|
||||
// Tests don't need the dropped payload — just keep the signature compatible.
|
||||
const marker = (n: number, _dropped?: BudgetMessage[]): BudgetMessage => ({ role: 'system', content: `[dropped ${n}]`, internal: true });
|
||||
it('keeps everything when under budget', () => {
|
||||
const msgs: BudgetMessage[] = [{ role: 'user', content: 'hi' }, { role: 'assistant', content: 'hello' }];
|
||||
const r = trimHistoryToBudget(msgs, 10_000, marker);
|
||||
@@ -63,7 +65,25 @@ describe('contextManager.trimHistoryToBudget', () => {
|
||||
expect(r.messages[0].content).toMatch(/^\[dropped \d+\]$/);
|
||||
// most recent message survives
|
||||
expect(r.messages[r.messages.length - 1]).toEqual(msgs[msgs.length - 1]);
|
||||
expect(r.tokensAfter).toBeLessThanOrEqual(250 + estimateMessagesTokens([marker(1)]));
|
||||
expect(r.tokensAfter).toBeLessThanOrEqual(250 + estimateMessagesTokens([marker(1, [])]));
|
||||
});
|
||||
it('passes the dropped messages array to the marker factory (v2.2.69)', () => {
|
||||
const msgs: BudgetMessage[] = Array.from({ length: 6 }, (_, i) => ({
|
||||
role: i % 2 ? 'assistant' : 'user',
|
||||
content: 'x'.repeat(400),
|
||||
}));
|
||||
let observedDropped: BudgetMessage[] | undefined;
|
||||
const factory = (n: number, dropped: BudgetMessage[]): BudgetMessage => {
|
||||
observedDropped = dropped;
|
||||
return { role: 'system', content: `[summary of ${n}: first=${dropped[0]?.role}]`, internal: true };
|
||||
};
|
||||
const r = trimHistoryToBudget(msgs, 250, factory);
|
||||
expect(r.droppedCount).toBeGreaterThan(0);
|
||||
expect(observedDropped).toBeDefined();
|
||||
expect(observedDropped!.length).toBe(r.droppedCount);
|
||||
// Dropped messages are the OLDEST ones, in order.
|
||||
expect(observedDropped![0]).toEqual(msgs[0]);
|
||||
expect(r.messages[0].content).toMatch(/^\[summary of \d+: first=user\]$/);
|
||||
});
|
||||
it('always keeps at least the last message even if it alone exceeds the budget', () => {
|
||||
const msgs: BudgetMessage[] = [{ role: 'user', content: 'short' }, { role: 'user', content: 'y'.repeat(5000) }];
|
||||
|
||||
Reference in New Issue
Block a user