- compaction.ts: usable/isOverflow/estimate/turns/select/buildPrompt/process
- compaction-prompt.ts: SUMMARY_TEMPLATE verbatim from opencode
- schema: messages.{compacted_at,summary,tail_start_id} + chats.needs_compaction
- inference: auto-trigger on overflow, pre-fetch compaction before next turn
- /compact slash command rewired to new path
- WS: chat_status working/idle around compaction + compacted frame
- frontend: SummaryCard + sonner toast on compacted
- 24 unit tests for pure functions
41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
// v1.11: anchored rolling summary template. Verbatim port from opencode
|
|
// (packages/opencode/src/session/compaction.ts SUMMARY_TEMPLATE). Kept in a
|
|
// separate module so the long template literal doesn't bloat compaction.ts.
|
|
|
|
export const SUMMARY_TEMPLATE = `Output exactly the Markdown structure shown inside <template> and keep the section order unchanged. Do not include the <template> tags in your response.
|
|
<template>
|
|
## Goal
|
|
- [single-sentence task summary]
|
|
|
|
## Constraints & Preferences
|
|
- [user constraints, preferences, specs, or "(none)"]
|
|
|
|
## Progress
|
|
### Done
|
|
- [completed work or "(none)"]
|
|
|
|
### In Progress
|
|
- [current work or "(none)"]
|
|
|
|
### Blocked
|
|
- [blockers or "(none)"]
|
|
|
|
## Key Decisions
|
|
- [decision and why, or "(none)"]
|
|
|
|
## Next Steps
|
|
- [ordered next actions or "(none)"]
|
|
|
|
## Critical Context
|
|
- [important technical facts, errors, open questions, or "(none)"]
|
|
|
|
## Relevant Files
|
|
- [file or directory path: why it matters, or "(none)"]
|
|
</template>
|
|
|
|
Rules:
|
|
- Keep every section, even when empty.
|
|
- Use terse bullets, not prose paragraphs.
|
|
- Preserve exact file paths, commands, error strings, and identifiers when known.
|
|
- Do not mention the summary process or that context was compacted.`;
|