File size: 2,911 Bytes
5dc5419
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
"""BriefTool - Generate briefings for Stack 2.9"""

import json
from datetime import datetime
from pathlib import Path
from typing import Any, Dict, List, Optional

from .base import BaseTool, ToolResult
from .registry import tool_registry


class BriefTool(BaseTool):
    """Generate a briefing for a task."""

    name = "brief"
    description = "Generate a structured briefing for a task"

    input_schema = {
        "type": "object",
        "properties": {
            "task": {"type": "string", "description": "Main task or goal"},
            "context": {"type": "string", "description": "Additional context"},
            "constraints": {"type": "array", "items": {"type": "string"}, "description": "Constraints or requirements"},
            "hints": {"type": "array", "items": {"type": "string"}, "description": " Helpful hints"},
            "format": {"type": "string", "enum": ["concise", "detailed"], "default": "concise"}
        },
        "required": ["task"]
    }

    async def execute(self, task: str, context: Optional[str] = None, constraints: Optional[List[str]] = None, hints: Optional[List[str]] = None, format: str = "concise") -> ToolResult:
        """Generate brief."""
        brief_id = f"brief_{datetime.now().strftime('%Y%m%d_%H%M%S')}"

        sections = {
            "id": brief_id,
            "task": task,
            "created_at": datetime.now().isoformat()
        }

        if context:
            sections["context"] = context

        if constraints:
            sections["constraints"] = constraints

        if hints:
            sections["hints"] = hints

        if format == "detailed":
            sections["format_version"] = "detailed"
            sections["priority"] = "medium"
            sections["estimated_complexity"] = "unknown"
        else:
            sections["format_version"] = "concise"

        return ToolResult(success=True, data=sections)


class BriefSummaryTool(BaseTool):
    """Summarize a previous brief or conversation."""

    name = "brief_summary"
    description = "Generate a summary briefing"

    input_schema = {
        "type": "object",
        "properties": {
            "content": {"type": "string", "description": "Content to summarize"},
            "max_points": {"type": "number", "default": 5, "description": "Maximum key points"}
        },
        "required": ["content"]
    }

    async def execute(self, content: str, max_points: int = 5) -> ToolResult:
        """Generate summary."""
        # Simple extractive summarization
        lines = [l.strip() for l in content.split('\n') if l.strip()]
        points = lines[:max_points]

        return ToolResult(success=True, data={
            "summary": points,
            "total_lines": len(lines),
            "points_extracted": len(points)
        })


# Register tools
tool_registry.register(BriefTool())
tool_registry.register(BriefSummaryTool())