Calculator (calc)
Expression parsing and evaluation for otter-calc and launcher =EXPR mode. Integer and float paths with bounded token buffers.
Emoji (emoji)
Emoji name search and :query completion data shared by otter-emoji and launcher.
Clipboard (clipboard, clip_history)
History store bounds and wl-copy/wl-paste compatible invocation. clip_history persists entries under XDG data paths via otter-utils helpers.
Calendar (calendar)
Month grid generation and weekday headers for otter-cal.
Duration (duration)
Human-readable duration parsing (5m, 1h30s) for otter-timer.
Weather (weather)
URL construction and response field extraction for otter-weather. No HTTP client here; apps fetch.
Color (color)
RGB/HSL/hex conversion for otter-pick and launcher color preview.
Record (record)
Encoder and container selection helpers for otter-rec (bounded list of installed tools).
Search (otter_tools_search, search_client)
Desktop search is pure Zig. No Rust or vendored fuzzy engines.
otter_tools_search expands roots (XDG user dirs, ~/.config, shallow $HOME, plus user roots), skips heavy dirs, and scores path and content hits. Submodules live under src/search/ (file_index, scanner, finder, fuzzy, content, query, scoring).
otter-search and otter-searchctl link both modules. otter-launcher only needs search_client to query a running daemon. Other tools stay free of the search core unless they import otter_tools_search.
Assist client (assist_client)
Unix-socket client for otter-assist. Covers infer, status, unload, JSON chat requests, and streamed events (message_delta, tool events, final). Used by otter-assistctl and otter-assistant.
Config (config)
Shared key paths and load helpers for tools that read small .conf fragments.
App configs
app_configs.zig defines structs for calc, emoji, clip, cal, timer, weather, pick, rec, shot, and related tools. Import from otter_tools_core.app_configs in both the app and otter-settings.
