[build-system] requires = ["setuptools>=69"] build-backend = "setuptools.build_meta" [project] name = "loopx" version = "0.4.1" description = "A lightweight Loop Engineering control plane for long-running agent goals." readme = "README.md" requires-python = ">=3.11" license = { file = "LICENSE" } authors = [{ name = "LoopX contributors" }] dependencies = [] [project.optional-dependencies] test = [ "jsonschema>=4.23,<5", "pytest>=8,<9", "pytest-cov>=5,<7", "pytest-xdist>=3,<4", "ruff>=0.12,<0.16", "mypy>=1.18,<2", ] [project.scripts] loopx = "loopx.entrypoint:main" loopx-lark-provider = "loopx.extensions.lark.provider:main" loopx-openviking-semantic-preference = "loopx.extensions.openviking_semantic_preference.provider:main" [tool.setuptools.packages.find] include = ["loopx*"] [tool.setuptools.package-data] "loopx.capabilities.auto_research" = ["worker_skill/SKILL.md"] "loopx.extensions.lark" = ["extension.toml"] "loopx.extensions.openviking_periodic_report" = ["extension.toml"] "loopx.extensions.openviking_semantic_preference" = ["extension.toml"] "loopx.opencode_goal_mode" = ["*.js", "*.mjs", "README.md"] [tool.mypy] python_version = "3.11" strict = true files = [ "loopx/claude_goal_baseline.py", "loopx/benchmarks/read_models/benchmark_run_execution_contract.py", "loopx/benchmarks/read_models/benchmark_run_failure.py", "loopx/control_plane/__init__.py", "loopx/control_plane/quota/states.py", "loopx/control_plane/runtime/active_user_assisted_pilot.py", "loopx/control_plane/runtime/event_store_migration_bridge.py", "loopx/control_plane/runtime/time.py", "loopx/control_plane/runtime/trajectory_hygiene.py", "loopx/control_plane/scheduler/time.py", "loopx/control_plane/work_items/delivery_batch_scale.py", "loopx/control_plane/work_items/delivery_outcome.py", "loopx/control_plane/work_items/lifecycle.py", "loopx/presentation/renderers/trajectory_hygiene_markdown.py", "loopx/presentation/renderers/turn_envelope_markdown.py", ]