76c530a9e5
Suite went from 27 failures plus one permanent hang (never finished) to 1846 passed / 0 failed in ~85s, including under FORCE_COLOR. - office_shutdown_lifecycle: construct WSHandler via the real __init__ (helper) instead of hand-copied __new__ stubs that drift from the constructor (#11 added _runtime_status_sync_task and the stubs hung); the formerly-hanging wait now has a 5s wait_for. - import-time patch hygiene: company_recruiter / company_reorg / engine_session_defaults replaced module-level permanent tempfile.TemporaryDirectory monkeypatching with paired setUpModule/tearDownModule, fixing order-dependent sqlite failures in transcript_pagination during full runs. - stale tests updated to current product semantics: resume stubs use status="done" (failed is deliberately non-resumable), fix4 asserts the native review contract through build_company_work_item_contract, delivery fixture carries user_visible/feedback_scope=final, ownership doc names progress_log, session compression calls maybe_compact_session(force=True) explicitly, hard delete removes the work item row, parallel-isolation asserts delegate rebind and stubs _get_project_delegate, role update goes through OrgService on an editable custom org (plus read-only rejection case), collab_rpc patches the single os.name decision point instead of poisoning pathlib, codex no-pty builds inside the patch, identity-guard false positives reworded. - cli_board actions rewritten against the real OfficeServiceFactory seam with a tempdir OPC_HOME (old direct-engine stubs were never consulted and the tests wrote into the real OPC home). - cli_app assertions strip ANSI via _plain_output so a color-forcing shell (FORCE_COLOR) cannot break plain-text expectations. - deleted never-runnable test_org_concurrency (pytest.mark.asyncio without the plugin, stdlib-only assertions) and three dead skipped filesystem-handoff tests. - pyproject: dev extra (pytest, pytest-timeout) and a 300s per-test timeout backstop so a wedged test fails instead of stalling the suite. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
106 lines
2.6 KiB
TOML
106 lines
2.6 KiB
TOML
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[project]
|
|
name = "opc"
|
|
version = "0.1.0"
|
|
description = "One-Person Company — Autonomous AI Agent collaboration system with natural language interface"
|
|
readme = "README.md"
|
|
requires-python = ">=3.10"
|
|
license = {text = "MIT"}
|
|
|
|
dependencies = [
|
|
"typer[all]>=0.9.0",
|
|
"rich>=13.0",
|
|
"prompt-toolkit>=3.0",
|
|
"litellm==1.82.1",
|
|
"pydantic>=2.0",
|
|
"pydantic-settings>=2.0",
|
|
"pyyaml>=6.0",
|
|
"aiosqlite>=0.19.0",
|
|
"chromadb>=0.4.0",
|
|
"httpx>=0.27.0",
|
|
"loguru>=0.7.0",
|
|
"playwright>=1.40",
|
|
"mcp>=1.0.0",
|
|
"anyio>=4.0",
|
|
"python-docx>=1.1.0",
|
|
"openpyxl>=3.1.0",
|
|
"python-pptx>=0.6.21",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
# Backwards-compatible alias: browser tools are now native and the dependency
|
|
# is installed with the base package.
|
|
browser = []
|
|
# Optional legacy CLI board/TUI inspector; not installed by default.
|
|
cli-board = ["textual>=8.1.1"]
|
|
channels-telegram = ["python-telegram-bot>=21.0"]
|
|
channels-whatsapp = ["websockets>=12.0"]
|
|
channels-discord = ["discord.py>=2.3"]
|
|
channels-feishu = ["lark-oapi>=1.4.0"]
|
|
channels-mochat = ["python-socketio[asyncio_client]>=5.11.0"]
|
|
channels-dingtalk = ["dingtalk-stream>=0.21.0"]
|
|
channels-email = []
|
|
channels-slack = ["slack-sdk>=3.27.0"]
|
|
channels-qq = ["qq-botpy>=1.2.1"]
|
|
channels-matrix = ["matrix-nio>=0.24.0"]
|
|
channels-bridges = [
|
|
"websockets>=12.0",
|
|
"python-socketio[asyncio_client]>=5.11.0",
|
|
]
|
|
channels-all = [
|
|
"python-telegram-bot>=21.0",
|
|
"websockets>=12.0",
|
|
"discord.py>=2.3",
|
|
"lark-oapi>=1.4.0",
|
|
"python-socketio[asyncio_client]>=5.11.0",
|
|
"dingtalk-stream>=0.21.0",
|
|
"slack-sdk>=3.27.0",
|
|
"qq-botpy>=1.2.1",
|
|
"matrix-nio>=0.24.0",
|
|
]
|
|
all = [
|
|
"python-telegram-bot>=21.0",
|
|
"websockets>=12.0",
|
|
"discord.py>=2.3",
|
|
"lark-oapi>=1.4.0",
|
|
"python-socketio[asyncio_client]>=5.11.0",
|
|
"dingtalk-stream>=0.21.0",
|
|
"slack-sdk>=3.27.0",
|
|
"qq-botpy>=1.2.1",
|
|
"matrix-nio>=0.24.0",
|
|
]
|
|
|
|
dev = [
|
|
"pytest>=9.0",
|
|
"pytest-timeout>=2.3",
|
|
]
|
|
|
|
[project.scripts]
|
|
opc = "opc.cli.app:main"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["opc"]
|
|
|
|
[tool.hatch.build.targets.wheel.force-include]
|
|
"config" = "opc/config_templates"
|
|
"skills/core" = "opc/skills_assets/core"
|
|
|
|
[tool.hatch.build.targets.sdist]
|
|
include = [
|
|
"opc",
|
|
"config",
|
|
"skills/core",
|
|
"docs",
|
|
"scripts",
|
|
"README.md",
|
|
"pyproject.toml",
|
|
]
|
|
|
|
[tool.pytest.ini_options]
|
|
# Backstop against wedged tests: a hung test fails after 5 minutes instead
|
|
# of stalling the whole suite (requires pytest-timeout, in the `dev` extra).
|
|
timeout = 300
|