Clide is being rebuilt as a Flutter desktop app. The Python Textual implementation moves wholesale into legacy/ rather than being deleted: its pane model, panel set, git skills, and panel communication design are real thought that should remain readable next to the new code while the rebuild finds its shape. Git's rename tracking preserves history, so `git log -- legacy/` still works. The Flutter rebuild lives at the repo root alongside a Go sidecar (the architecture claudian was heading toward, which folds into clide as a core component rather than a separate plugin project). Bootstrap of the new shape lands in subsequent commits. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
140 lines
3.5 KiB
TOML
140 lines
3.5 KiB
TOML
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[project]
|
|
name = "clide"
|
|
version = "1.0.0"
|
|
description = "A TUI CLI IDE for Claude Code CLI"
|
|
readme = "README.md"
|
|
requires-python = ">=3.12"
|
|
license = "MIT"
|
|
authors = [
|
|
{ name = "Jeroen Schweitzer", email = "you@example.com" }
|
|
]
|
|
classifiers = [
|
|
"Development Status :: 3 - Alpha",
|
|
"Environment :: Console",
|
|
"Intended Audience :: Developers",
|
|
"License :: OSI Approved :: MIT License",
|
|
"Operating System :: OS Independent",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Programming Language :: Python :: 3.13",
|
|
"Topic :: Software Development :: User Interfaces",
|
|
]
|
|
dependencies = [
|
|
"textual>=0.50.0",
|
|
"pyte>=0.8.0",
|
|
"typer>=0.12.0",
|
|
"pydantic>=2.0.0",
|
|
"pydantic-settings>=2.0.0",
|
|
"pluggy>=1.4.0",
|
|
"rich>=13.0.0",
|
|
"watchdog>=4.0.0",
|
|
"wcwidth>=0.2.0", # Required by vendored pyte
|
|
"sqlmodel>=0.0.16",
|
|
"aiosqlite>=0.20",
|
|
# Tree-sitter for syntax highlighting
|
|
"tree-sitter>=0.21.0",
|
|
"tree-sitter-python>=0.21.0",
|
|
"tree-sitter-javascript>=0.21.0",
|
|
"tree-sitter-typescript>=0.21.0",
|
|
"tree-sitter-html>=0.21.0",
|
|
"tree-sitter-css>=0.21.0",
|
|
"tree-sitter-json>=0.21.0",
|
|
"tree-sitter-yaml>=0.5.0",
|
|
"tree-sitter-toml>=0.5.0",
|
|
"tree-sitter-markdown>=0.2.0",
|
|
"tree-sitter-rust>=0.21.0",
|
|
"tree-sitter-go>=0.21.0",
|
|
"tree-sitter-java>=0.21.0",
|
|
"tree-sitter-bash>=0.21.0",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest>=8.0.0",
|
|
"pytest-asyncio>=0.23.0",
|
|
"pytest-textual-snapshot>=0.4.0",
|
|
"pytest-cov>=4.0.0",
|
|
"mypy>=1.8.0",
|
|
"ruff>=0.3.0",
|
|
"pre-commit>=3.0.0",
|
|
]
|
|
build = [
|
|
"pyinstaller>=6.0.0",
|
|
]
|
|
|
|
[project.scripts]
|
|
clide = "clide.cli:app"
|
|
|
|
[project.entry-points."clide.extensions"]
|
|
# Built-in extensions registered here
|
|
# example = "clide.extensions.builtin.example:ExampleExtension"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["clide"]
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
asyncio_mode = "auto"
|
|
asyncio_default_fixture_loop_scope = "function"
|
|
addopts = [
|
|
"-v",
|
|
"--tb=short",
|
|
"--snapshot-report=logs/snapshot_report.html",
|
|
]
|
|
|
|
[tool.mypy]
|
|
python_version = "3.12"
|
|
strict = true
|
|
warn_return_any = true
|
|
warn_unused_configs = true
|
|
exclude = ["tests", "dist", "build"]
|
|
|
|
[tool.ruff]
|
|
target-version = "py312"
|
|
line-length = 100
|
|
src = ["clide", "tests"]
|
|
exclude = ["clide/vendor"]
|
|
|
|
[tool.ruff.lint]
|
|
select = [
|
|
"E", # pycodestyle errors
|
|
"W", # pycodestyle warnings
|
|
"F", # Pyflakes
|
|
"I", # isort
|
|
"B", # flake8-bugbear
|
|
"C4", # flake8-comprehensions
|
|
"UP", # pyupgrade
|
|
"ARG", # flake8-unused-arguments
|
|
"SIM", # flake8-simplify
|
|
"TCH", # flake8-type-checking
|
|
"PTH", # flake8-use-pathlib
|
|
"ASYNC", # flake8-async
|
|
]
|
|
ignore = [
|
|
"E501", # line too long (handled by formatter)
|
|
"ARG002", # unused method argument (Textual event handlers require these)
|
|
"SIM102", # nested if (sometimes clearer)
|
|
"SIM105", # contextlib.suppress (try-except-pass is clearer in context)
|
|
"SIM115", # context handler for files (sometimes not applicable)
|
|
"PTH123", # Path.open() vs open() (not always cleaner)
|
|
"TCH002", # move third-party imports to TYPE_CHECKING (clutters code)
|
|
"TCH003", # move stdlib imports to TYPE_CHECKING (clutters code)
|
|
]
|
|
|
|
[tool.ruff.lint.isort]
|
|
known-first-party = ["clide"]
|
|
|
|
[tool.coverage.run]
|
|
source = ["clide"]
|
|
branch = true
|
|
|
|
[tool.coverage.report]
|
|
exclude_lines = [
|
|
"pragma: no cover",
|
|
"if TYPE_CHECKING:",
|
|
"raise NotImplementedError",
|
|
]
|