Tool modules — filesystem access, memory, planning, shell, and web.
Purpose
-------
Each module exports ``TOOLS`` (a dict of callables) and ``SCHEMAS``
(a list of OpenAI function definitions). Modules are registered from an
**explicit allowlist** (:data:`~oc_chat.core.tool_registry._TOOL_MODULE_ALLOWLIST`),
NOT auto-discovered by a directory glob (M8.0 WU-6 / G-2): an agent-written
file dropped here is **not** picked up. To add a new first-party tool module,
add its stem to that allowlist. Third-party tools use the
``[project.entry-points."oc_chat.tools"]`` group and load only under the
``permissive`` profile (G-3).
Responsibilities
----------------
- Mark ``oc_chat/tools/`` as a Python package.
- Hold sibling tool modules: ``filesystem``, ``shell``, ``web``,
``memory``, ``planner``, ``oct_tools``, ``migrate_sessions``.
Diagnostics
-----------
Domain: OC_CHAT.TOOLS
Levels:
L2 — lifecycle events
L3 — semantic details
L4 — deep tracing
Contracts
---------
- Module-level L4 ``_dbg`` is a diagnostics-coverage marker; it
emits nothing at default verbosity (domain default is L2).
- Tool modules with names starting with ``_`` are skipped by the
auto-discovery loop in ``build_tool_registry``.
Dependencies
------------
- oc_diagnostics (structured debug logging via _dbg)