b556700976
* feat(api): generate routing.proto Python bindings via a proto build The runtime imports omnigent.api.routing_pb2 (bindings for the merged routing.proto). Rather than checking in ad-hoc protoc output, add a reproducible build step so the bindings stay in sync with the schema: - scripts/gen_routing_pb2.py regenerates the bindings via grpc_tools.protoc (bundles protoc + the well-known-type protos, so no system protoc and the google/protobuf/struct.proto import resolves). --check verifies freshness. - grpcio-tools added to the dev group, pinned so its bundled gencode matches the runtime protobuf; the generator reproduces the committed files exactly. - routing-pb2-fresh pre-commit hook fails if routing.proto is edited without regenerating (enforced in CI, which installs the dev extra). - Commit the generated routing_pb2.py/.pyi + omnigent/api package, and exclude the generated _pb2 files from ruff and mypy. Regenerate with: python scripts/gen_routing_pb2.py Co-authored-by: Isaac * chore(api): mark generated routing _pb2 files as linguist-generated The github-code-quality bot flagged the protoc-generated bindings for an unused import (google_dot_protobuf_dot_struct__pb2) and an unused global (_sym_db). Those are standard protoc output that can't be hand-edited away — the routing-pb2-fresh hook verifies the files reproduce byte-for-byte from the schema. Mark them linguist-generated so review/code-quality tooling skips them, mirroring the existing ruff/mypy excludes in pyproject.toml. Co-authored-by: Isaac --------- Co-authored-by: Lilly <lilly.gray@tecton.ai>