File size: 2,376 Bytes
53b2ac9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# SPDX-License-Identifier: MIT
"""
TrashClaw Plugin — Timer

Measure elapsed time for operations. Start, check, and stop timers
to benchmark how long tasks take.
"""

import time
import json

# Simple in-memory timer storage
_timers = {}

TOOL_DEF = {
    "name": "timer",
    "description": "Start, check, or stop a named timer. Useful for benchmarking operations, measuring how long tasks take, or setting reminders.",
    "parameters": {
        "type": "object",
        "properties": {
            "action": {
                "type": "string",
                "description": "Action: 'start', 'check', 'stop', or 'list'"
            },
            "name": {
                "type": "string",
                "description": "Timer name (default: 'default')"
            }
        },
        "required": ["action"]
    }
}


def run(action: str = "start", name: str = "default", **kwargs) -> str:
    """Manage named timers for benchmarking."""
    try:
        if action == "start":
            _timers[name] = time.time()
            return f"Timer '{name}' started."

        elif action == "check":
            if name not in _timers:
                return f"Timer '{name}' not found. Start it first."
            elapsed = time.time() - _timers[name]
            return f"Timer '{name}': {elapsed:.2f}s elapsed (still running)"

        elif action == "stop":
            if name not in _timers:
                return f"Timer '{name}' not found. Start it first."
            elapsed = time.time() - _timers.pop(name)
            if elapsed < 60:
                return f"Timer '{name}' stopped: {elapsed:.2f} seconds"
            elif elapsed < 3600:
                return f"Timer '{name}' stopped: {elapsed / 60:.1f} minutes ({elapsed:.1f}s)"
            else:
                return f"Timer '{name}' stopped: {elapsed / 3600:.1f} hours ({elapsed:.0f}s)"

        elif action == "list":
            if not _timers:
                return "No active timers."
            now = time.time()
            lines = []
            for n, t in _timers.items():
                elapsed = now - t
                lines.append(f"  {n}: {elapsed:.1f}s running")
            return "Active timers:\n" + "\n".join(lines)

        else:
            return f"Unknown action '{action}'. Use: start, check, stop, list"
    except Exception as e:
        return f"Timer error: {e}"