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}"
|