Metadata-Version: 2.4
Name: orditect-adapter-ui
Version: 0.1.7
Summary: UI adapter reference implementation for the Orditect ecosystem: consumer-side read (trace-bundle) + action sink (HITL/MCP/agent interaction)
Author: Orditect Contributors
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/orditect/orditect
Project-URL: Repository, https://github.com/orditect/orditect
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3.12
Classifier: Typing :: Typed
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: orditect-protocol<0.2,>=0.1.7
Requires-Dist: orditect-flow<0.2,>=0.1.7
Provides-Extra: test
Requires-Dist: pytest>=8.0; extra == "test"
Requires-Dist: pytest-asyncio>=0.26; extra == "test"
Requires-Dist: orditect-adapter-local<0.2,>=0.1.7; extra == "test"
Requires-Dist: orditect-adapter-memory<0.2,>=0.1.7; extra == "test"
Dynamic: license-file

# orditect-adapter-ui

UI adapter **reference implementation** for the Orditect ecosystem.

## Purpose

- Consumer-side read: parse a **trace bundle** (ndjson + JSON produced by
  `orditect-adapter-local` or any conformant adapter) without importing
  orditect-core / orditect-flow internals.
- Action sink: a protocolized channel for **HITL / MCP / agent** to drive
  pause / retry / resume on a task tree, delegated to orditect-flow's
  public operation surface.

This is a **reference implementation**, not a frontend product. It exists
to prove the UI adapter protocol (consumer read + action sink) is
implementable.

## Two halves

| Half | Surface | Certification |
|---|---|---|
| consumer (read) | snapshot/dependency/audit/result/content queries over a trace bundle directory | consumer profile |
| action (write) | `pause_node` / `retry_node` / `retry_scope` / `resume_tree` | action profile |

## Usage

```python
from orditect.adapter.ui import TraceBundleReader, ActionSinkAdapter

reader = TraceBundleReader("/path/to/trace-bundle")
tree = await reader.snapshot.get_tree("root-task")
events = await reader.audit.query(task_id="child-1")

sink = ActionSinkAdapter(orchestrator, recovery_service)
await sink.pause_node("node-3")
await sink.retry_scope("root-task", scope={"node-a", "node-b"})
await sink.resume_tree("root-task")
