3504ff234c
Phase 2 of multi-repository task support: every per-call git endpoint gains an optional `repo` field (form param for GET, JSON for POST) that selects a sub-directory of the workspace. Empty `repo` = workspace root, preserving single-repo behavior verbatim. - Manager.GitOperatorFor(subpath) returns a per-subpath GitOperator (cached). Validates the subpath against path traversal, absolute paths, and missing directories. - New api server helper gitOpForRepo() emits a 400 with a per-operation GitOperationResult on invalid subpaths. - Repo field added to: pull, push, rebase, merge, abort, commit, rename-branch, stage, unstage, discard, create-pr, revert-commit, show-commit, reset, log, cumulative-diff. (git/status still reads from the workspace tracker — that endpoint will gain multi-repo support when the tracker itself is split per repo.) - Tests cover empty subpath, valid subpath caching, traversal rejection, and missing-directory rejection. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>