mirror of
https://github.com/tiennm99/serena.git
synced 2026-06-17 22:48:47 +00:00
61f7c15b15
* Add LLM prompt factory (yaml-based)
* Add list_dir tool
* Add onboarding tool (which returns prompt only, as registered MCP prompts
do not appear to be usable by Claude Desktop)
267 lines
4.5 KiB
TOML
267 lines
4.5 KiB
TOML
[build-system]
|
|
build-backend = "hatchling.build"
|
|
requires = [
|
|
"hatchling"
|
|
]
|
|
|
|
[project]
|
|
name = "serena"
|
|
version = "0.1.0"
|
|
description = ""
|
|
authors = [
|
|
{name = "Oraios AI", email = "michael.panchenko@oraios-ai.de"}
|
|
]
|
|
readme = "README.md"
|
|
requires-python = ">=3.11, <3.12"
|
|
classifiers = [
|
|
"License :: OSI Approved :: MIT License",
|
|
"Programming Language :: Python :: 3.11"
|
|
]
|
|
dependencies = [
|
|
"pandas>=2.2.1",
|
|
"plotly>=5.19.0",
|
|
"requests>=2.32.3,<3",
|
|
"pyright>=1.1.396,<2",
|
|
"overrides>=7.7.0,<8",
|
|
"python-dotenv>=1.0.0, <2",
|
|
"mcp>=1.5.0",
|
|
"fastmcp>=0.4.1",
|
|
"sensai-utils>=1.4.0",
|
|
]
|
|
|
|
[project.license]
|
|
text = "MIT"
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"black[jupyter]>=23.7.0",
|
|
"docutils>=0.20.1",
|
|
"jinja2",
|
|
"jupyter>=1.0.0",
|
|
# In version 1.0.4 we get a NoneType error related to some config conversion (yml_analytics is None and should be a list)
|
|
"jupyter-book==1.0.0",
|
|
"mypy>=1.4.1",
|
|
"nbqa>=1.7.1",
|
|
"nbstripout>=0.6.1",
|
|
"poethepoet>=0.20.0",
|
|
"pre-commit>=3.3.3",
|
|
"pytest>=8.0.2",
|
|
"pytest-cov",
|
|
"ruff>=0.0.285",
|
|
"sphinx>=7",
|
|
"sphinx-book-theme>=1.0.1",
|
|
"sphinx-comments>=0.0.3",
|
|
"sphinx-copybutton>=0.5.2",
|
|
"sphinx-jupyterbook-latex>=1.0.0",
|
|
"toml-sort>=0.24.2",
|
|
"sphinx-togglebutton>=0.3.2",
|
|
"sphinx-toolbox>=3.5.0",
|
|
"sphinxcontrib-bibtex",
|
|
"sphinxcontrib-spelling>=8.0.0",
|
|
]
|
|
|
|
[project.urls]
|
|
Homepage = "https://github.com/oraios/serena"
|
|
|
|
[tool.black]
|
|
line-length = 140
|
|
target-version = [
|
|
"py311"
|
|
]
|
|
|
|
[tool.doc8]
|
|
max-line-length = 1000
|
|
|
|
[tool.mypy]
|
|
allow_redefinition = true
|
|
check_untyped_defs = true
|
|
disallow_incomplete_defs = true
|
|
disallow_untyped_defs = true
|
|
ignore_missing_imports = true
|
|
no_implicit_optional = true
|
|
pretty = true
|
|
show_error_codes = true
|
|
show_error_context = true
|
|
show_traceback = true
|
|
strict_equality = true
|
|
strict_optional = true
|
|
warn_no_return = true
|
|
warn_redundant_casts = true
|
|
warn_unreachable = true
|
|
warn_unused_configs = true
|
|
warn_unused_ignores = true
|
|
exclude = "^build/|^docs/"
|
|
|
|
[tool.nbqa.exclude]
|
|
ruff = "\\.jupyter_cache|jupyter_execute"
|
|
mypy = "\\.jupyter_cache|jupyter_execute"
|
|
|
|
[tool.poe.env]
|
|
PYDEVD_DISABLE_FILE_VALIDATION = "1"
|
|
|
|
[tool.poe.tasks]
|
|
test = "pytest test --cov=serena --cov-report=xml --cov-report=term-missing --durations=0 -v --color=yes"
|
|
_black_check = "black --check --exclude src/multilspy/ ."
|
|
_ruff_check = "ruff check --exclude .venv/|src/multilspy/ ."
|
|
_ruff_check_nb = "nbqa ruff check docs"
|
|
_black_format = "black --exclude .venv/|src/multilspy/ ."
|
|
_ruff_format = "ruff check --exclude src/multilspy/ --fix ."
|
|
_ruff_format_nb = "nbqa ruff --fix docs"
|
|
lint = [
|
|
"_black_check",
|
|
"_ruff_check",
|
|
"_ruff_check_nb"
|
|
]
|
|
clean-nbs = "python docs/nbstripout.py"
|
|
format = [
|
|
"_ruff_format",
|
|
"_ruff_format_nb",
|
|
"_black_format"
|
|
]
|
|
_autogen_rst = "python docs/autogen_rst.py"
|
|
_sphinx_build = "sphinx-build -W -b html docs docs/_build"
|
|
_jb_generate_toc = "python docs/create_toc.py"
|
|
_jb_generate_config = "jupyter-book config sphinx docs/"
|
|
doc-clean = "rm -rf docs/_build"
|
|
doc-generate-files = [
|
|
"_autogen_rst",
|
|
"_jb_generate_toc",
|
|
"_jb_generate_config"
|
|
]
|
|
doc-spellcheck = "sphinx-build -W -b spelling docs docs/_build"
|
|
doc-build = [
|
|
"doc-generate-files",
|
|
"doc-spellcheck",
|
|
"_sphinx_build"
|
|
]
|
|
_mypy = "mypy src/serena"
|
|
_mypy_nb = "nbqa mypy docs"
|
|
type-check = [
|
|
"_mypy",
|
|
"_mypy_nb"
|
|
]
|
|
|
|
[tool.ruff]
|
|
target-version = "py311"
|
|
line-length = 140
|
|
|
|
[tool.ruff.format]
|
|
quote-style = "double"
|
|
indent-style = "space"
|
|
line-ending = "auto"
|
|
skip-magic-trailing-comma = false
|
|
docstring-code-format = true
|
|
|
|
[tool.ruff.lint]
|
|
select = [
|
|
"ASYNC",
|
|
"B",
|
|
"C4",
|
|
"C90",
|
|
"COM",
|
|
"D",
|
|
"DTZ",
|
|
"E",
|
|
"F",
|
|
"FLY",
|
|
"G",
|
|
"I",
|
|
"ISC",
|
|
"PIE",
|
|
"PLC",
|
|
"PLE",
|
|
"PLW",
|
|
"RET",
|
|
"RUF",
|
|
"RSE",
|
|
"SIM",
|
|
"TID",
|
|
"UP",
|
|
"W",
|
|
"YTT"
|
|
]
|
|
ignore = [
|
|
"RUF002",
|
|
"RUF005",
|
|
"SIM118",
|
|
"SIM108",
|
|
"E501",
|
|
"E741",
|
|
"B008",
|
|
"B011",
|
|
"B028",
|
|
"D100",
|
|
"D101",
|
|
"D102",
|
|
"D103",
|
|
"D104",
|
|
"D105",
|
|
"D107",
|
|
"D200",
|
|
"D203",
|
|
"D213",
|
|
"D401",
|
|
"D402",
|
|
"DTZ005",
|
|
"E402",
|
|
"E501",
|
|
"E701",
|
|
"E731",
|
|
"C408",
|
|
"E203",
|
|
"G004",
|
|
"RET505",
|
|
"D106",
|
|
"D205",
|
|
"D212",
|
|
"PLW2901",
|
|
"B027",
|
|
"D404",
|
|
"D407",
|
|
"D408",
|
|
"D409",
|
|
"D400",
|
|
"D415",
|
|
"COM812",
|
|
"RET503",
|
|
"RET504",
|
|
"UP038",
|
|
"F403",
|
|
"F405",
|
|
"C401",
|
|
"C901",
|
|
"ASYNC230",
|
|
"ISC003",
|
|
"B024",
|
|
"B007",
|
|
"SIM102",
|
|
]
|
|
unfixable = [
|
|
"F841",
|
|
"F601",
|
|
"F602",
|
|
"B018"
|
|
]
|
|
extend-fixable = [
|
|
"F401",
|
|
"B905",
|
|
"W291"
|
|
]
|
|
|
|
[tool.ruff.lint.mccabe]
|
|
max-complexity = 20
|
|
|
|
[tool.ruff.lint.per-file-ignores]
|
|
"tests/**" = [
|
|
"D103"
|
|
]
|
|
"docs/**" = [
|
|
"D103"
|
|
]
|
|
"examples/**" = [
|
|
"D103"
|
|
]
|
|
"scripts/**" = [
|
|
"D103"
|
|
]
|