[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "tokeneconomizer" version = "0.1.0" description = "Experience-driven black-box cost control for coding agents (Claude Code, Codex, Copilot CLI, Pi), as a plugin." readme = "README.md" requires-python = ">=3.10" license = { text = "Apache-2.0" } authors = [{ name = "TokenEconomizer authors" }] keywords = ["llm-agents", "cost-optimization", "swe-bench", "token-economy"] # The package is STDLIB-ONLY: the three mechanisms, the trace reader, the ledger and the plugin # runtime import nothing outside the standard library, so it runs on any Python >=3.10 with zero # install-time dependencies. dependencies = [] [project.scripts] # The plugin's command line (status, microskills, toolprune, config, ...). The plugin ships its # own launcher (plugin/scripts/te) and does not need the package installed. te = "tokeneconomizer.plugin.cli:main" [project.optional-dependencies] # Test suite is offline (no Docker / no datasets). test = ["pytest>=7.0"] # The reference task-execution harness under experiments/te_harness/ (see # experiments/README.md). It adds no # PyPI dependency -- it is stdlib-only at import time and the official SWE-bench grader is # imported lazily from a checkout named by TE_SWEBENCH_REPO -- so this extra installs # nothing. It exists to give "I intend to run the harness" a name, since what the harness # actually needs cannot come from pip: Docker, an agent CLI on PATH, an API key, the # benchmark images, and for Web-Bench a built Rush monorepo. harness = [] # The repo-map external baseline (experiments/te_bench/baselines/repomap.py) generates aider's # token-budgeted map on the HOST -- the task container's Python is pinned to the issue's # era and cannot run a modern tree-sitter stack. This is the ONLY baseline with a host # dependency: rtk ships a static binary and Serena installs itself in-container. # # It stays an EXTRA: aider is imported inside `preflight()`, and the generator both the # baseline and the plugin's opt-in map run (tokeneconomizer/plugin/repomap_gen.py) is a subprocess # that nothing imports, so `import tokeneconomizer` keeps its zero-dependency guarantee. A # machine that will never make a repo map never needs aider installed. baselines = ["aider-chat>=0.60"] [tool.setuptools.packages.find] # The package ONLY. The reproduction code (experiments/, including te_harness and te_bench) is # deliberately not distributed: `import tokeneconomizer` must not be able to reach Docker or a # benchmark harness, and excluding it here is what makes that structural. include = ["tokeneconomizer*"] exclude = ["experiments*", "te_harness*", "tests*", "scripts*"] [tool.pytest.ini_options] testpaths = ["tests", "experiments/tests"] addopts = "-q" [tool.setuptools.package-data] # The Claude Code tool-description snapshot the catalog reader joins against. tokeneconomizer = ["trace/*.json"]