MCPcopy Create free account
hub / github.com/TraderAlice/OpenAlice / forceCompact

Function forceCompact

src/core/compaction.ts:285–308  ·  view source on GitHub ↗
(
  session: ISessionStore,
  summarize: (prompt: string) => Promise<string>,
)

Source from the content-addressed store, hash-verified

283 * Returns token count before compaction, or null if session was empty.
284 */
285export async function forceCompact(
286 session: ISessionStore,
287 summarize: (prompt: string) => Promise<string>,
288): Promise<{ preTokens: number } | null> {
289 const allEntries = await session.readAll()
290 const activeEntries = getActiveEntries(allEntries)
291 if (activeEntries.length === 0) return null
292
293 const currentTokens = estimateSessionTokens(activeEntries)
294 console.log(`compaction: manual compact for session ${session.id} (~${currentTokens} tokens, ${activeEntries.length} entries)`)
295
296 const prompt = buildSummarizationPrompt(activeEntries)
297 const summaryText = await summarize(prompt)
298
299 const lastEntry = allEntries[allEntries.length - 1]
300 const boundary = createCompactBoundary('manual', currentTokens, session.id, lastEntry?.uuid ?? null)
301 const summary = createSummaryEntry(summaryText, session.id, boundary.uuid)
302
303 await session.appendRaw(boundary)
304 await session.appendRaw(summary)
305
306 console.log(`compaction: manual compact done. ${activeEntries.length} entries → summary`)
307 return { preTokens: currentTokens }
308}

Callers 1

compaction.spec.tsFile · 0.85

Calls 8

getActiveEntriesFunction · 0.85
estimateSessionTokensFunction · 0.85
buildSummarizationPromptFunction · 0.85
createCompactBoundaryFunction · 0.85
createSummaryEntryFunction · 0.85
readAllMethod · 0.65
logMethod · 0.65
appendRawMethod · 0.65

Tested by

no test coverage detected