Ctrl K
ComunidadGuías…

pyproject.toml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
[project]
# `clique` on PyPI is taken by an unrelated library (a numerical-collection
# manager, still published). The *command* is still `clique`; only the name you
# install by differs, which is ordinary — plenty of tools work that way.
name = "clique-panel"
# Read from clique/__init__.py, so the release process has one number to bump
# and the wheel can never disagree with what the panel reports about itself.
dynamic = ["version"]
description = "Your private clique of CLIs. Folder-organised, CLI-agnostic coding sessions in a browser, persisted in tmux"
readme = "README.md"
license = { file = "LICENSE" }
requires-python = ">=3.11"
dependencies = []          # deliberate: stdlib only, so it still starts in two years
authors = [{ name = "Justin Willhite" }]
keywords = ["tmux", "terminal", "session-manager", "web-terminal",
            "coding-agents", "claude-code", "self-hosted", "multi-agent"]
classifiers = [
  "Development Status :: 4 - Beta",
  "Environment :: Console",
  "Environment :: Web Environment",
  "Intended Audience :: Developers",
  "License :: OSI Approved :: MIT License",
  "Operating System :: POSIX :: Linux",
  "Operating System :: MacOS",
  "Programming Language :: Python :: 3 :: Only",
  "Programming Language :: Python :: 3.11",
  "Topic :: Software Development",
  "Topic :: Terminals :: Terminal Emulators/X Terminals",
  "Topic :: Utilities",
]

# The one opt-in extra. Base CLIque stays dependency-free; storing a
# bring-your-own-key provider secret needs real authenticated encryption, and
# the stdlib has no cipher — so `pip install 'clique-panel[llm]'` pulls in one
# vetted crypto library, and only for operators who actually use that feature.
[project.optional-dependencies]
llm = ["cryptography>=41"]

[project.urls]
Homepage = "https://github.com/thejdubb02/clique"
Changelog = "https://github.com/thejdubb02/clique/blob/main/CHANGELOG.md"
Issues = "https://github.com/thejdubb02/clique/issues"
API = "https://github.com/thejdubb02/clique/blob/main/API.md"

[project.scripts]
clique = "clique.__main__:main"

[build-system]
requires = ["setuptools>=68"]
build-backend = "setuptools.build_meta"

[tool.setuptools.dynamic]
version = { attr = "clique.__version__" }

[tool.setuptools.packages.find]
include = ["clique*"]

# The panel is the product, and it is all static files. Without this the wheel
# ships the server and none of the interface, which starts and serves 404s.
[tool.setuptools.package-data]
clique = [
  "web/*.html", "web/*.css", "web/*.js", "web/*.webmanifest",
  "web/vendor/*", "web/icons/*", "web/brand/*", "web/art/*",
  "config/*.toml",
]

[tool.ruff]
line-length = 100
target-version = "py311"

[tool.ruff.lint]
# "S" is flake8-bandit. On permanently: this thing hands out a terminal, so a
# security regression should fail the build rather than wait to be noticed.
# Everything it flags is either fixed or annotated at the line with the reason.
select = ["E", "F", "W", "I", "UP", "B", "SIM", "RUF", "BLE", "S"]
ignore = ["E501"]          # long lines are almost always a comment explaining why

[tool.ruff.lint.per-file-ignores]
"tools/*" = [
  "E402",                  # sys.path insert before imports, on purpose
  "S101",                  # asserts are how a test suite states a fact
  "S108",                  # /tmp is where a smoke test belongs
  "S310", "S603", "S607",  # the suite drives its own server and its own tmux
]
# Running `tmux` and `git` from PATH is not a finding, it is the product: this
# is a tmux front end, and pinning an absolute path would break every machine
# that installs it somewhere else. Every call passes argv as a list, so no
# shell ever sees any of it — which is the actual protection S603 is proxying
# for. Annotating fourteen call sites individually would say the same thing
# fourteen times and train the reader to skim noqa comments.
"clique/tmux.py" = ["S603", "S607"]
"clique/__init__.py" = ["S603", "S607"]
# Fullwidth punctuation is not a typo in Japanese or Chinese, it is the correct
# character. RUF001 cannot know that and flags every one of them.
"tools/site_i18n.py" = ["RUF001", "RUF002", "RUF003"]