Metadata-Version: 2.5
Name: formbridge
Version: 0.1.4
Summary: Toolkit-neutral reactive forms and UI bridge contracts, shared by pyqt-reactive and headless servers
Project-URL: Homepage, https://github.com/OpenHCSDev/formbridge
Project-URL: Repository, https://github.com/OpenHCSDev/formbridge
Project-URL: Issues, https://github.com/OpenHCSDev/formbridge/issues
Author-email: Tristan Simas <tristan.simas@mail.mcgill.ca>
License: MIT
License-File: LICENSE
Keywords: dataclass,forms,headless,reactive,ui-bridge
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Software Development :: User Interfaces
Requires-Python: >=3.11
Requires-Dist: docutils>=0.20
Requires-Dist: metaclass-registry>=0.4.0
Requires-Dist: objectstate<5,>=4.0.0
Requires-Dist: psutil>=5.9
Requires-Dist: python-introspect<0.3,>=0.2.7
Requires-Dist: pyzmq>=22.0
Requires-Dist: zmqruntime<0.7,>=0.6.4
Provides-Extra: dev
Requires-Dist: pytest-cov>=4.0; extra == 'dev'
Requires-Dist: pytest>=7.0; extra == 'dev'
Requires-Dist: ruff==0.16.0; extra == 'dev'
Description-Content-Type: text/markdown

# formbridge

Toolkit-neutral reactive forms and UI bridge contracts, shared by
[pyqt-reactive](https://github.com/OpenHCSDev/PyQT-reactive) and headless servers.

Importing any formbridge module loads no GUI toolkit, so a headless process (an
MCP server, a hosted HTTP service) can use the same declarations as the desktop
UI it talks to.

## What is here

- **Forms** (`formbridge.forms`): the parameter model behind generated forms:
  parameter info, type analysis, value contracts and the form service.
- **Services** (`formbridge.services`): help documents and parameter help,
  function-pattern code documents, scope tokens, the pattern data manager,
  path cache, log discovery and streaming, system metrics, ZMQ server scanning,
  window snapshot requests and their observation receipts, and
  `main_thread_dispatch`, which owns work dispatched to one owner thread
  (`QueuedMainThreadDispatcher` for a headless process; pyqt-reactive delivers
  through the Qt event loop).
- **Protocols** (`formbridge.protocols`): registries an application fills:
  form configuration, code generation, component and function selection, log
  discovery, preview formatters.
- **Running-UI bridge** (`formbridge.bridge`): the DTOs, the
  `UiBridgeOperation` family, the client service, descriptor discovery, the ZMQ
  transport and server, the provider registry and the in-process bridge. An
  application declares itself once by subclassing `UiBridgeApplication`;
  pyqt-reactive supplies the Qt window and widget introspection.

Package initializers export nothing; import each name from the module that
defines it.

## Install

```bash
pip install formbridge
```

## Development

```bash
pip install -e ".[dev]"
pytest
ruff check src tests
```
