Skip to content

v0.4.0 — Production Hardening + ClipboardToolkit

Choose a tag to compare

@chiruu12 chiruu12 released this 27 May 23:33
· 87 commits to main since this release

What's New

Bug fixes found while building Mutter/Hum, new toolkit APIs for host applications, and the ClipboardToolkit.

Bug Fixes (Critical)

  • tc.arguments None crashtool.call(**tc.arguments) crashed when LLM called tools with no required params (e.g. list_alarms()). Fixed in both run() and run_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 to str with int(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 -mlx suffix).

New Features

  • ClipboardToolkitcopy_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 titleAlarmChecker(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