Skip to content

Releases: ZelAnton/vcs-toolkit-rs

vcs-watch-v0.1.0

08 Jun 19:16

Choose a tag to compare

Added

  • Initial release: RepoWatcher filesystem-watches a git/jj repository and
  • RepoEvent (#[non_exhaustive]): HeadMoved, BranchSwitched,
  • Builder: working_tree(bool) (default off — state-dir-only watching; opt in to
  • The pure snapshot-diff is hermetically unit-tested; the notify → debounce →
  • Builder::requery_timeout(Option<Duration>) (default 30 s,
  • RepoWatcher::stats() -> WatcherStats — lock-free health counters
  • stream feature: impl futures_core::Stream for RepoWatcher, so the watcher

Notes

  • This is the workspace's first runtime tokio dependency (everything else

Changed

  • The max_wait ceiling is now exact: a dedicated timer arm fires the
  • The debounce → ceiling → re-query pipeline is now hermetically tested:

Fixed

  • A watcher on a linked git worktree now also watches the shared .git

vcs-testkit-v0.1.0

08 Jun 19:16

Choose a tag to compare

Added

  • Initial release: TempDir (unique, remove-on-drop), configure_identity,

Fixed

  • Sandboxes are isolated from the host VCS configuration: every git

vcs-mcp-v0.1.0

08 Jun 19:16

Choose a tag to compare

Added

  • Initial release: vcs-mcp, a Model Context Protocol (MCP) server exposing the
  • Read tools (always available, annotated readOnlyHint): repo_snapshot,
  • Mutating tools (gated, annotated destructiveHint): repo_commit,
  • WriteGate — the server's write policy (None / All /
  • CLI: --repo <path> (default cwd), --forge github|gitlab|gitea (override),
  • Hardened by default: the binary opens the repo with a hardened git client
  • The tool logic, write-gating, serialization, and the #[tool_router]/

Notes

  • Built on rmcp (the official MCP Rust SDK).

vcs-jj-v0.5.0

08 Jun 19:16

Choose a tag to compare

Added

  • description(dir, revset) — the full (multiline) description of the commit a
  • git_fetch_from(dir, remote) — fetch from a named git remote
  • Jj::transaction(dir, |tx| …) (also on JjAt) — run a mutation sequence with
  • git_clone(url, dest, colocate)jj git clone without a working
  • absorb(dir, from, filesets) — fold working-copy edits into the mutable
  • split_paths(dir, filesets, message) — carve named filesets out of @ into
  • duplicate(dir, revset).
  • op_log(dir, limit)Vec<Operation> (id/user/start-time/description) —
  • evolog(dir, revset, max)Vec<Change> — how a change evolved, newest
  • file_annotate(dir, path, rev)Vec<AnnotationLine> (change id + 1-based
  • capabilities()JjCapabilities { version: JjVersion } — the installed
  • Injection guards on the exposed positional arguments (bookmark names,
  • RevsetExpr validating newtype — optional up-front validation for
  • conflict module — a typed model of jj's materialized conflicts
  • Doc note: there is deliberately no Jj::hardened() — jj has no repo-local
  • Jj::workspace_roots(dir, names) — resolve several workspaces' roots in one

Changed

  • squash_paths(dir, from, into, filesets, use_destination_message) now takes a
  • Bumped processkit to 0.8 — the re-exported Error/ProcessResult carry
  • Internal: the CliClient verbs the wrapper bodies call were renamed to one
  • New off-by-default cancellation feature: pulls in processkit's
  • Internal: the diff model + parser (ChangeKind/DiffLine/Hunk/FileDiff/

vcs-gitlab-v0.1.0

08 Jun 19:16

Choose a tag to compare

Added

  • Initial release: GitLabApi trait + GitLab client wrapping the glab CLI,
  • The lean merge-request lifecycle, deserializing glab … --output json
  • auth_status documents the glab exit-code caveat ([gitlab-org/cli#911]): a

vcs-github-v0.5.0

08 Jun 19:16

Choose a tag to compare

Added

  • PR lifecycle mutations: pr_merge(dir, n, PrMerge) — a PrMerge builder
  • pr_checks(dir, n)Vec<CheckRun> (pr checks --json …). gh signals the
  • Reviews and comments: pr_review(dir, n, ReviewAction)ReviewAction
  • GitHub Actions runs: run_list(dir, limit, branch) / run_view(dir, id)
  • Issues and releases: issue_create(dir, title, body) → URL;
  • All new dir-taking methods are mirrored on the GitHubAt bound view.
  • Injection guards on the exposed positional arguments (api endpoint,

Changed

  • Breaking: pr_create now takes a single PrCreate spec
  • Breaking: ReviewAction is now a struct with private fields built via
  • Bumped processkit to 0.8 — the re-exported Error/ProcessResult carry
  • Internal: the CliClient verbs the wrapper bodies call were renamed to one
  • New off-by-default cancellation feature: pulls in processkit's
  • Internal: the argv injection guard (reject_flag_like) now comes from the
  • auth_status reports false on any non-zero exit (was: errored on exits

Fixed

  • pr_list/pr_list_for_branch/issue_list/release_list pass --limit 100

vcs-gitea-v0.1.0

08 Jun 19:16

Choose a tag to compare

Added

  • Initial release: GiteaApi trait + Gitea client wrapping the tea CLI,
  • The lean pull-request lifecycle tea supports: auth_status (a non-empty
  • Issues and releases: issue_list (Vec<Issue>), issue_view(number) (the
  • Raw escape hatches run/run_raw (+ inherent run_args/run_raw_args), and

Notes

  • Deliberately narrower than vcs-github/vcs-gitlab: tea exposes no
  • tea --output json is modeled, not the Gitea REST API. Its list

Changed

  • Bumped processkit to 0.8 — the re-exported Error/ProcessResult carry
  • Internal: the CliClient verbs the wrapper bodies call were renamed to one
  • New off-by-default cancellation feature: pulls in processkit's
  • auth_status tolerates a non-zero tea login list exit (e.g. no config file
  • pr_create doc: tea prints a textual summary (no URL) and has no flag to
  • pr_create now takes a PrCreate spec

Fixed

  • pr_list passes --limit 100 (tea's default page of 30 silently truncated

vcs-git-v0.5.0

08 Jun 19:16

Choose a tag to compare

Added

  • branch_status(dir) -> BranchStatus — a combined branch + working-tree
  • fetch_from(dir, remote) — fetch from a named remote (`fetch --quiet
  • conflicted_files(dir) — paths with unresolved merge conflicts
  • status_tracked(dir)status minus untracked files
  • Git::switch_with_stash(dir, branch) (also on GitAt) — switch branches
  • clone_repo(url, dest, CloneSpec)git clone with a CloneSpec builder
  • Tag operations: tag_create (lightweight, optional rev),
  • show_file(dir, rev, path) — file content at a revision
  • config_get(dir, key)Option<String> (config --get; exit 1 → None
  • remote_add(dir, name, url) and remote_set_url(dir, name, url).
  • blame(dir, path, rev)Vec<BlameLine> (blame --line-porcelain):
  • Sequencer: cherry_pick(dir, rev), revert(dir, rev) (--no-edit +
  • capabilities()GitCapabilities { version: GitVersion } — the installed
  • Injection guards on every exposed positional argument — names, revisions,
  • RefName and RevSpec validating newtypes — optional up-front validation
  • Git::harden() / Git::hardened() — an untrusted-repo execution profile
  • conflict module — a typed model of conflict markers: parse_conflicts

Changed

  • Breaking: four multi-option GitApi methods now take a spec/builder
  • Bumped processkit to 0.8 — the re-exported Error/ProcessResult carry
  • Internal: the CliClient verbs the wrapper bodies call were renamed to one
  • New off-by-default cancellation feature: pulls in processkit's
  • Internal: the diff model + parser (ChangeKind/DiffLine/Hunk/FileDiff/

Fixed

  • diff/diff_text pin the a/b/ diff prefixes (--src-prefix/--dst-prefix),
  • branches/is_merged/tag_list pass --no-column, so a user's
  • Commands whose failure output feeds the error classifiers (the commit,
  • show_file normalises \/ only on Windows — on Unix a backslash is a
  • branch_status runs with GIT_OPTIONAL_LOCKS=0, so the snapshot/poll
  • conflict::parse_conflicts: a repeated |-run line inside a diff3 region is

vcs-forge-v0.1.0

08 Jun 19:16

Choose a tag to compare

Added

  • Initial release: a backend-agnostic facade over vcs-github, vcs-gitlab, and
  • Explicit construction (Forge::github/gitlab/gitea over the real runner;
  • Unified DTOs (#[non_exhaustive]): ForgePr + ForgePrState
  • The lean lifecycle: auth_status, repo_view, pr_list, pr_view,
  • Issues + releases: issue_list / issue_view(number) /
  • An Error::Unsupported { forge, operation } variant: Gitea's tea has no
  • Optional serde feature: derives serde::Serialize on the public DTOs

Changed

  • Bumped processkit to 0.8Error::Forge wraps the #[non_exhaustive]
  • New off-by-default cancellation feature, forwarding to each wrapper's —
  • pr_create doc honesty: it returns the CLI's success output — a URL on

Fixed

  • GitLab repo_view no longer reports a project with absent visibility

vcs-diff-v0.1.0

08 Jun 19:16

Choose a tag to compare

Added

  • Initial release: the shared git-format unified-diff model and parser —
  • Optional serde feature: derives serde::Serialize on the public DTOs