fleet-memory/hindsight-dev/pyproject.toml
Nicolò Boschi c05c491d77
feat(cli): cover every OpenAPI endpoint and request-body param (#968)
Wires the Rust CLI up to every endpoint exposed by the Hindsight OpenAPI
spec and adds CI enforcement so new endpoints or new request-body fields
cannot slip in without matching CLI coverage.

Endpoints
- New `hindsight webhook {list,create,update,delete,deliveries}` and
  `hindsight audit {list,stats}` subcommands.
- `hindsight bank` gains `set-disposition`, `consolidation-recover`,
  `export-template`, `import-template`, `template-schema`.
- `hindsight memory` gains `history` and per-memory `clear-observations`.
- `hindsight document update`, `hindsight operation retry` added.
- Brings CLI coverage from 46/62 to 62/62 operations.

Request-body parameters
- Expose missing flags that the CLI was silently hardcoding: directive
  `--priority`; mental-model `--tags` / `--max-tokens` /
  `--trigger-refresh-after-consolidation`; recall `--query-timestamp`;
  reflect `--fact-types` / `--exclude-mental-models` /
  `--exclude-mental-model-ids`; retain `--document-tags`.

CI enforcement
- New `cli-coverage-check` entry point in `hindsight-dev` parses
  openapi.json and verifies that (a) every operationId is called from
  hindsight-cli/src/ (the progenitor client method names match the
  operationId), and (b) every request-body property is present in
  main.rs as a clap field or `long = "..."` attribute.
- Intentional non-exposures live in `hindsight-cli/.openapi-coverage.toml`
  under `[skip]` / `[fields.<op>]` with a reason each (38 documented
  field skips for flattened structs, nested structs, or fields surfaced
  via a different subcommand).
- New `check-cli-coverage` job in .github/workflows/test.yml, triggered
  on cli/core/dev/ci path changes, runs the script on every PR.
- smoke-test.sh exercises the new webhook / audit / bank-template /
  set-disposition / consolidation-recover commands.
2026-04-10 16:44:56 +02:00

94 lines
2.9 KiB
TOML

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "hindsight-dev"
version = "0.5.0"
description = "Development utilities for Hindsight"
requires-python = ">=3.11"
dependencies = [
"hindsight-api",
"python-fasthtml>=0.12.33",
"streamlit>=1.54.0",
"openai>=1.0.0",
"rich>=13.0.0",
"pydantic>=2.0.0",
"httpx>=0.27.0",
]
[project.optional-dependencies]
test = [
"pytest>=8.0.0",
"httpx>=0.27.0",
"python-dotenv>=1.0.0",
]
[tool.hatch.build.targets.wheel]
packages = ["hindsight_dev", "benchmarks", "upgrade_tests"]
[tool.uv.sources]
hindsight-api = { workspace = true }
[project.scripts]
generate-openapi = "hindsight_dev.generate_openapi:generate_openapi_spec"
generate-changelog = "hindsight_dev.generate_changelog:main"
sync-cookbook = "hindsight_dev.sync_cookbook:main"
generate-llms-full = "hindsight_dev.generate_llms_full:main"
check-openapi-compatibility = "hindsight_dev.check_openapi_compatibility:main"
cli-coverage-check = "hindsight_dev.cli_coverage_check:main"
[dependency-groups]
dev = [
"ruff>=0.8.0",
"ty>=0.0.1",
]
[tool.ruff]
line-length = 120
target-version = "py311"
[tool.ruff.lint]
select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # Pyflakes
"I", # isort
]
ignore = [
"E501", # line too long (handled by formatter)
"E402", # module import not at top of file
"E712", # avoid equality comparisons to False (intentional for optional bools)
"F401", # unused import (too noisy during development)
"F403", # star imports (fasthtml uses this pattern)
"F405", # may be undefined from star imports (fasthtml uses this pattern)
"F841", # unused variable (too noisy during development)
"F811", # redefined while unused
"F821", # undefined name (forward references in type hints)
"W291", # trailing whitespace (in multiline strings)
"W293", # blank line contains whitespace (in multiline strings)
]
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
[tool.ty]
# Type checking configuration
# ty is an extremely fast Python type checker from Astral (same team as ruff/uv)
[tool.ty.environment]
python-version = "3.11"
[tool.ty.rules]
# Disable noisy rules
invalid-argument-type = "ignore" # Too many false positives
invalid-return-type = "ignore" # Often intentional
# missing-argument and unknown-argument are enabled (default)
invalid-parameter-default = "ignore" # Optional params with None default
possibly-missing-attribute = "ignore" # Common with Optional types
unsupported-operator = "ignore" # Pandas DataFrame operations
unresolved-reference = "ignore" # Forward references
unresolved-import = "ignore" # Dynamic imports
invalid-assignment = "ignore" # Intentional monkey-patching
no-matching-overload = "ignore" # Complex generic issues