(input: {
state: MakaPiTranscriptState;
driver: Pick<MakaSessionDriver, 'compactSession'>;
onChange?: () => void;
})
| 476 | } |
| 477 | |
| 478 | export async function submitCompactToTranscript(input: { |
| 479 | state: MakaPiTranscriptState; |
| 480 | driver: Pick<MakaSessionDriver, 'compactSession'>; |
| 481 | onChange?: () => void; |
| 482 | }): Promise<void> { |
| 483 | let completed = false; |
| 484 | let sawCompactionNotice = false; |
| 485 | try { |
| 486 | for await (const event of input.driver.compactSession()) { |
| 487 | if (event.type === 'token_usage' && contextBudgetOutcomeNotice(event.contextBudget)) |
| 488 | sawCompactionNotice = true; |
| 489 | if (event.type === 'complete' && event.stopReason === 'end_turn') completed = true; |
| 490 | applyMakaSessionEventToTranscript(input.state, event); |
| 491 | input.onChange?.(); |
| 492 | } |
| 493 | if (completed && !sawCompactionNotice) { |
| 494 | input.state.entries.push({ |
| 495 | kind: 'notice', |
| 496 | level: 'info', |
| 497 | text: 'Nothing to compact.', |
| 498 | }); |
| 499 | input.onChange?.(); |
| 500 | } |
| 501 | } catch (error) { |
| 502 | input.state.entries.push({ |
| 503 | kind: 'notice', |
| 504 | level: 'error', |
| 505 | text: error instanceof Error ? error.message : String(error), |
| 506 | }); |
| 507 | input.onChange?.(); |
| 508 | } |
| 509 | } |
| 510 | |
| 511 | export function applyMakaSessionEventToTranscript( |
| 512 | state: MakaPiTranscriptState, |
no test coverage detected