Metadata-Version: 2.5
Name: harness-sdk-python
Version: 0.15.0
Summary: RunManager: the harness-sdk runs subsystem for Python Statewire hosts
Project-URL: Repository, https://github.com/assistant-ui/harness-sdk
License-Expression: MIT
Requires-Python: <4.0,>=3.12
Requires-Dist: statewire<0.9,>=0.8.1
Provides-Extra: deepagents
Requires-Dist: deepagents>=0.6.12; extra == 'deepagents'
Requires-Dist: langchain-core>=0.3; extra == 'deepagents'
Requires-Dist: langchain-openai>=0.3; extra == 'deepagents'
Requires-Dist: langgraph>=1.0.0; extra == 'deepagents'
Requires-Dist: uvicorn[standard]>=0.30.0; extra == 'deepagents'
Provides-Extra: postgres
Requires-Dist: langgraph-checkpoint-postgres>=2.0.0; extra == 'postgres'
Description-Content-Type: text/markdown

# harness-sdk-python

RunManager: the harness-sdk runs subsystem for Python Statewire hosts — the
`run/*` command protocol (queues, steering, edit/reload, stop/resume, crash
replay) driving a single async `start(ctx)` executor entrypoint.

```python
class MyHost(Statewire):
    async def lifespan(self):
        self.state = initial_state()
        self.runs = RunManager(
            state=self.state,
            start=self._start,
            thread=self._thread,
            create_task=self.create_task,
            capabilities=("rewind",),
        )
        yield

    @command("run/enqueue")
    async def run_enqueue(self, params, *, caller):
        return await self.runs.enqueue(params, caller=caller)

    @command("run/steer")
    async def run_steer(self, params, *, caller):
        return await self.runs.steer(params, caller=caller)

    @command("run/dequeue")
    async def run_dequeue(self, params):
        return await self.runs.dequeue(params)

    @command("run/edit")
    async def run_edit(self, params):
        return await self.runs.edit(params)

    @command("run/reload")
    async def run_reload(self, params):
        return await self.runs.reload(params)

    @command("run/stop")
    async def run_stop(self):
        return await self.runs.stop()

    @command("run/continue")
    async def run_continue(self):
        return await self.runs.continue_run()
```
