mirror of
https://github.com/hanzoai/python-sdk.git
synced 2026-10-23 20:23:00 +00:00
- Add hanzo-tools-code: code analysis and transformation tools - Add hanzo-tools-net: network and HTTP tools - Add hanzo-tools-plan: planning and task management tools - Add hanzo-tools-test: testing tools - Add hanzo-tools-vcs: version control tools - Add install command for dependency management - Improve CDP bridge server with better error handling - Add ui_tool for computer tools - Add unified tool loading and id_tool - Add HIP documentation (HIP-0300, HIP-0301)
257 lines
5.4 KiB
Markdown
257 lines
5.4 KiB
Markdown
# VCS Tool
|
|
|
|
Version control operations: status, diff, commit, log (HIP-0300 operator).
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
pip install hanzo-tools-vcs
|
|
```
|
|
|
|
## Overview
|
|
|
|
The `vcs` tool handles all version control operations:
|
|
|
|
| Action | Signature | Effect |
|
|
|--------|-----------|--------|
|
|
| `status` | `() → {staged, unstaged, untracked}` | DETERMINISTIC |
|
|
| `diff` | `(ref1?, ref2?, paths?) → Diff` | DETERMINISTIC |
|
|
| `commit` | `(message, files?) → {sha, message}` | DETERMINISTIC |
|
|
| `log` | `(n?, since?, path?) → [Commit]` | DETERMINISTIC |
|
|
| `branch` | `(name?, action?) → {current, branches}` | DETERMINISTIC |
|
|
| `stash` | `(action, message?) → {ok}` | DETERMINISTIC |
|
|
| `apply` | `(patch) → {ok, files_changed}` | DETERMINISTIC |
|
|
| `checkout` | `(ref, paths?) → {ok}` | DETERMINISTIC |
|
|
|
|
## Actions
|
|
|
|
### status
|
|
|
|
Get working tree status.
|
|
|
|
```python
|
|
vcs(action="status")
|
|
# Returns: {
|
|
# staged: [
|
|
# {path: "src/main.py", status: "modified"},
|
|
# {path: "src/utils.py", status: "added"}
|
|
# ],
|
|
# unstaged: [
|
|
# {path: "src/config.py", status: "modified"}
|
|
# ],
|
|
# untracked: ["temp.txt", "notes.md"],
|
|
# branch: "feature/auth",
|
|
# ahead: 2,
|
|
# behind: 0
|
|
# }
|
|
```
|
|
|
|
### diff
|
|
|
|
Show differences between commits, branches, or working tree.
|
|
|
|
```python
|
|
# Working tree diff (unstaged)
|
|
vcs(action="diff")
|
|
# Returns: {
|
|
# diff: "diff --git a/src/main.py b/src/main.py\n...",
|
|
# files: ["src/main.py"],
|
|
# additions: 15,
|
|
# deletions: 3
|
|
# }
|
|
|
|
# Staged diff
|
|
vcs(action="diff", staged=True)
|
|
|
|
# Between commits
|
|
vcs(action="diff", ref1="HEAD~3", ref2="HEAD")
|
|
|
|
# Specific files
|
|
vcs(action="diff", paths=["src/auth.py", "src/users.py"])
|
|
|
|
# Between branches
|
|
vcs(action="diff", ref1="main", ref2="feature/auth")
|
|
```
|
|
|
|
### commit
|
|
|
|
Create a commit.
|
|
|
|
```python
|
|
vcs(action="commit", message="Add user authentication")
|
|
# Returns: {
|
|
# sha: "abc123def456",
|
|
# message: "Add user authentication",
|
|
# files_changed: 3
|
|
# }
|
|
|
|
# Commit specific files
|
|
vcs(action="commit", message="Fix bug in auth", files=["src/auth.py"])
|
|
|
|
# Amend last commit
|
|
vcs(action="commit", message="Updated message", amend=True)
|
|
```
|
|
|
|
### log
|
|
|
|
View commit history.
|
|
|
|
```python
|
|
vcs(action="log")
|
|
# Returns: {
|
|
# commits: [
|
|
# {sha: "abc123", message: "Add auth", author: "...", date: "..."},
|
|
# {sha: "def456", message: "Fix bug", author: "...", date: "..."}
|
|
# ]
|
|
# }
|
|
|
|
# Limit results
|
|
vcs(action="log", n=10)
|
|
|
|
# Filter by date
|
|
vcs(action="log", since="2024-01-01", until="2024-01-31")
|
|
|
|
# Filter by path
|
|
vcs(action="log", path="src/auth.py")
|
|
|
|
# Show full diff with each commit
|
|
vcs(action="log", n=5, show_diff=True)
|
|
```
|
|
|
|
### branch
|
|
|
|
Branch operations.
|
|
|
|
```python
|
|
# List branches
|
|
vcs(action="branch")
|
|
# Returns: {
|
|
# current: "feature/auth",
|
|
# local: ["main", "feature/auth", "bugfix/login"],
|
|
# remote: ["origin/main", "origin/develop"]
|
|
# }
|
|
|
|
# Create branch
|
|
vcs(action="branch", name="feature/new-feature", create=True)
|
|
|
|
# Delete branch
|
|
vcs(action="branch", name="old-branch", delete=True)
|
|
```
|
|
|
|
### stash
|
|
|
|
Stash operations.
|
|
|
|
```python
|
|
# Save stash
|
|
vcs(action="stash", push=True, message="WIP: auth changes")
|
|
# Returns: {ok: True, stash: "stash@{0}"}
|
|
|
|
# List stashes
|
|
vcs(action="stash", list=True)
|
|
# Returns: {stashes: [{ref: "stash@{0}", message: "..."}]}
|
|
|
|
# Apply stash
|
|
vcs(action="stash", apply=True)
|
|
|
|
# Pop stash (apply and remove)
|
|
vcs(action="stash", pop=True)
|
|
```
|
|
|
|
### apply
|
|
|
|
Apply a patch (unified diff format).
|
|
|
|
```python
|
|
patch = """
|
|
diff --git a/src/main.py b/src/main.py
|
|
--- a/src/main.py
|
|
+++ b/src/main.py
|
|
@@ -1,3 +1,4 @@
|
|
+# New header comment
|
|
def main():
|
|
pass
|
|
"""
|
|
|
|
vcs(action="apply", patch=patch)
|
|
# Returns: {ok: True, files_changed: ["src/main.py"]}
|
|
```
|
|
|
|
### checkout
|
|
|
|
Switch branches or restore files.
|
|
|
|
```python
|
|
# Switch branch
|
|
vcs(action="checkout", ref="main")
|
|
# Returns: {ok: True, branch: "main"}
|
|
|
|
# Create and switch
|
|
vcs(action="checkout", ref="feature/new", create=True)
|
|
|
|
# Restore specific files
|
|
vcs(action="checkout", ref="HEAD", paths=["src/main.py"])
|
|
```
|
|
|
|
## Usage Examples
|
|
|
|
### Safe Commit Workflow
|
|
|
|
```python
|
|
# 1. Check status
|
|
status = vcs(action="status")
|
|
|
|
# 2. Review diff
|
|
if status["data"]["unstaged"]:
|
|
diff = vcs(action="diff")
|
|
print(diff["data"]["diff"])
|
|
|
|
# 3. Stage and commit
|
|
vcs(action="commit", message="Implement user authentication",
|
|
files=["src/auth.py", "tests/test_auth.py"])
|
|
```
|
|
|
|
### Code Review Workflow
|
|
|
|
```python
|
|
# 1. Get diff between branches
|
|
diff = vcs(action="diff", ref1="main", ref2="feature/auth")
|
|
|
|
# 2. Summarize with code tool
|
|
from hanzo_tools.code import code_tool
|
|
summary = code_tool(action="summarize", diff=diff["data"]["diff"])
|
|
|
|
print(f"Changes: +{diff['data']['additions']} -{diff['data']['deletions']}")
|
|
print(f"Summary: {summary['data']['summary']}")
|
|
```
|
|
|
|
### History Analysis
|
|
|
|
```python
|
|
# Get recent changes to a file
|
|
commits = vcs(action="log", path="src/api.py", n=10, show_diff=True)
|
|
|
|
for commit in commits["data"]["commits"]:
|
|
print(f"{commit['sha'][:7]} {commit['message']}")
|
|
```
|
|
|
|
## Integration with fs.patch
|
|
|
|
VCS diffs integrate with `fs.patch` for applying changes:
|
|
|
|
```python
|
|
# Generate diff
|
|
diff = vcs(action="diff", ref1="main", ref2="feature/fix")
|
|
|
|
# Apply to another location
|
|
fs(action="patch", path="/other/project/src/main.py",
|
|
patch=diff["data"]["diff"])
|
|
```
|
|
|
|
## See Also
|
|
|
|
- [HIP-0300](../hip/HIP-0300.md) - Unified Tools Architecture
|
|
- [Filesystem Tool](fs.md) - For `fs.patch` to apply diffs
|
|
- [Code Tool](code.md) - For `code.summarize` on diffs
|
|
- [Test Tool](test.md) - For validation after commits
|