Files
Xi Zhang 7959495a13 feat(deploy): add EvoSci deploy subcommand (#228)
* feat(deploy): implement standalone LangGraph server and CLI command for deployment

* feat(deploy): enhance port validation and environment variable management for deployment

* Refactor langgraph dev deployment and introduce workspace sidecar protocol

- Updated the deployment mode handling in `server.py` to use a single environment variable `EVOSCIENTIST_DEPLOY_MODE` with values `full` and `stripped`.
- Enhanced the `manager.py` to implement a workspace fingerprint sidecar, allowing cross-process reuse of langgraph dev instances while ensuring workspace consistency.
- Introduced functions to write and read the workspace sidecar, with error handling for missing or corrupt data.
- Added tests for the workspace sidecar functionality, including validation of the JSON schema and ensuring proper error handling for workspace mismatches.
- Updated existing tests to reflect changes in deployment mode handling and added new tests for signal handling during shutdown.
- Ensured that cleanup routines remove the workspace sidecar alongside the PID file during shutdown.

* fix(langgraph): improve workspace sidecar checks for process ownership and stale handles
2026-05-20 11:06:35 +01:00

23 lines
809 B
Python

"""EvoScientist deploy mode.
Standalone LangGraph server launcher. ``EvoSci deploy`` starts a
``langgraph dev`` subprocess hosting the fully-equipped main agent
(MCP + async sub-agents enabled), exposed at
``http://localhost:{port}`` for external LangChain-compatible UIs
and SDK clients.
This module is intentionally separate from ``EvoScientist.cli``:
deploy mode does NOT load an in-process CLI agent, session DB, channel
runtime, or TUI — those are all TUI / serve concerns. Deploy only
manages the lifecycle of the langgraph dev subprocess (and ccproxy if
OAuth is configured).
"""
from __future__ import annotations
# Importing the server submodule registers the ``@app.command()`` decorator
# on the shared Typer ``app`` from ``EvoScientist.cli._app``.
from . import server
__all__ = ["server"]