-
Notifications
You must be signed in to change notification settings - Fork 26
Expand file tree
/
Copy pathpyproject.toml
More file actions
122 lines (111 loc) · 4.4 KB
/
Copy pathpyproject.toml
File metadata and controls
122 lines (111 loc) · 4.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
[project]
# PyPI dist name. The plain `watchmen` namespace on PyPI was already
# claimed by an unrelated package, so we publish under `dria-watchmen`.
# The CLI binary (`watchmen`) and the import name (`from watchmen import
# ...`) are unaffected — only the `pip install` / `uv tool install`
# string changes. See CONTRIBUTING.md "Releasing" for details.
name = "dria-watchmen"
version = "0.6.7"
description = "Local coding-agent session intelligence: observe, analyze, and generate skills plus workspace briefs per project"
readme = "README.md"
license = { text = "MIT" }
requires-python = ">=3.11"
dependencies = [
"fastapi>=0.115",
"uvicorn>=0.32",
"httpx>=0.27",
"bleach>=6.1",
"jinja2>=3.1",
"markdown>=3.7",
"pygments>=2.18",
"rich>=13.7",
# Arrow-key prompts for the `watchmen settings` interactive menu.
# Built on prompt_toolkit which Rich already depends on transitively,
# so the install footprint is essentially nil.
"questionary>=2.0",
]
[project.optional-dependencies]
# Dev-only deps for the test loop. Install with `uv sync --extra dev` or
# `pip install -e ".[dev]"`. CI installs this extra explicitly.
dev = [
"pytest>=8.0",
"pytest-cov>=5.0",
]
# Prompt-intent map (#111): local embeddings + 2D projection. Opt-in so the
# core install stays ML-free. `model2vec` is static embeddings (no PyTorch —
# pure numpy + a tokenizer, ~30 MB model); scikit-learn provides PCA + t-SNE.
# All CPU, nothing leaves the machine. `watchmen map` / the /map viewer route
# print an install hint when this extra is absent.
map = [
"model2vec>=0.3",
"scikit-learn>=1.3",
]
[project.scripts]
watchmen = "watchmen.cli:main"
[project.urls]
Repository = "https://github.com/firstbatchxyz/watchmen"
Issues = "https://github.com/firstbatchxyz/watchmen/issues"
Changelog = "https://github.com/firstbatchxyz/watchmen/blob/main/CHANGELOG.md"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
# Single Python package lives at src/watchmen/. Hatch picks up everything
# under it (Python + the shell hooks at src/watchmen/hooks/ + the viewer
# HTML templates). CHANGELOG.md is force-included so the CLI's "what's new"
# block can render it from the installed package, not just the source tree.
packages = ["src/watchmen"]
[tool.hatch.build.targets.wheel.force-include]
"CHANGELOG.md" = "watchmen/CHANGELOG.md"
[tool.hatch.build.targets.sdist]
include = [
"src/watchmen",
"plugin",
"plugin-codex",
".agents/plugins/marketplace.json",
".claude-plugin/marketplace.json",
"tests",
"docs/images",
".github/ISSUE_TEMPLATE",
".github/pull_request_template.md",
"README.md",
"CONTRIBUTING.md",
"CHANGELOG.md",
"CODE_OF_CONDUCT.md",
"SECURITY.md",
"LICENSE",
"pyproject.toml",
]
# ─── Linting / formatting ─────────────────────────────────────────────────
[tool.ruff]
line-length = 120
target-version = "py311"
src = ["src", "tests"]
[tool.ruff.lint]
# Minimal starter set — catches real bugs without flooding the repo with
# cosmetic changes:
# F — pyflakes (undefined names, unused imports/variables, real bugs)
# E9 — syntax errors and IO errors
# Stylistic + modernization rules are deliberately off for now; Phase 3
# will ratchet up (add B for bugbear, UP for pyupgrade, I for isort) and
# pay the import-sort + datetime-utc cleanup cost in a focused PR.
select = ["F", "E9"]
[tool.ruff.lint.per-file-ignores]
"src/watchmen/__init__.py" = ["F401"] # re-exports for public API
# ─── Tests ────────────────────────────────────────────────────────────────
[tool.pytest.ini_options]
# Tests live under tests/ and match the standard test_*.py glob. Pytest
# 8 picks up plain `def test_*()` functions without conftest.py magic;
# we only need a conftest for sys.path setup so this loop works even
# without a prior `uv sync`.
testpaths = ["tests"]
addopts = [
"-ra", # short summary for skipped/failed/errored
"--strict-markers",
"--strict-config",
]
# Treat noisy DeprecationWarnings from third-party deps as errors so
# they show up as a clear signal rather than being lost in --tb output.
filterwarnings = [
"ignore::DeprecationWarning",
]