from typing import TypedDict
from typing_extensions import Required

DEFAULT_SUMMARY_PROMPT = """You have been working on the task described above but have not yet completed it. Write a continuation summary that will allow you (or another instance of yourself) to resume work efficiently in a future context window where the conversation history will be replaced with this summary. Your summary should be structured, concise, and actionable. Include:
1. Task Overview
The user's core request and success criteria
Any clarifications or constraints they specified
2. Current State
What has been completed so far
Files created, modified, or analyzed (with paths if relevant)
Key outputs or artifacts produced
3. Important Discoveries
Technical constraints or requirements uncovered
Decisions made and their rationale
Errors encountered and how they were resolved
What approaches were tried that didn't work (and why)
4. Next Steps
Specific actions needed to complete the task
Any blockers or open questions to resolve
Priority order if multiple steps remain
5. Context to Preserve
User preferences or style requirements
Domain-specific details that aren't obvious
Any promises made to the user
Be concise but complete—err on the side of including information that would prevent duplicate work or repeated mistakes. Write in a way that enables immediate resumption of the task.
Wrap your summary in <summary></summary> tags."""

DEFAULT_THRESHOLD = 100_000


class CompactionControl(TypedDict, total=False):
    context_token_threshold: int
    """The context token threshold at which to trigger compaction.
    
    When the cumulative token count (input + output) across all messages exceeds this threshold,
    the message history will be automatically summarized and compressed. Defaults to 150,000 tokens.
    """

    model: str
    """
    The model to use for generating the compaction summary.
    If not specified, defaults to the same model used for the tool runner.
    """

    summary_prompt: str
    """The prompt used to instruct the model on how to generate the summary."""

    enabled: Required[bool]
