v0.4.0 — Production Hardening + ClipboardToolkit
What's New
Bug fixes found while building Mutter/Hum, new toolkit APIs for host applications, and the ClipboardToolkit.
Bug Fixes (Critical)
tc.argumentsNone crash —tool.call(**tc.arguments)crashed when LLM called tools with no required params (e.g.list_alarms()). Fixed in bothrun()andrun_once().- Integer params break Groq — Groq's API rejects
"type": "integer"in JSON schema when the LLM sends strings. All LLM-facing numeric params changed tostrwithint(float())parsing. Affected: AlarmToolkit, KnowledgeToolkit, LinkToolkit, A2AToolkit. - WhisperLocal blocking inference — ML inference now runs in
run_in_executor()to avoid blocking the event loop. - MLX whisper model map — Fixed HuggingFace repo names (base/small/large-v3 repos renamed with
-mlxsuffix).
New Features
- ClipboardToolkit —
copy_to_clipboard,copy_note,copy_task,copy_link. Uses pbcopy (macOS) / xclip (Linux). - Public query methods on toolkits for host applications:
TaskToolkit.query_tasks(status)/query_all_tasks(status)AlarmToolkit.query_pending_alarms()/query_all_pending_alarms()KnowledgeToolkit.query_recent(limit)→list[dict]
- Configurable notification title —
AlarmChecker(notification_title="Hum") - Agent auto-rebinds toolkits — Per-request Agent creation with shared toolkits just works.
- Metadata search in TFIDF — Tags, URLs, and metadata are now indexed alongside content.
Stats
- 796 tests passing
- CI: 5/5 green (lint, mypy, tests 3.11/3.12/3.13, build wheel)
- Verified with 5 end-to-end test scenarios including live API calls
Full Changelog: v0.3.2...v0.4.0