Hook-agnostic git-worktree engine for the ai-hats framework (WorktreeManager + the L1-L4 concurrency model).
Project description
ai-hats-wt
A hook-agnostic git-worktree engine: create, merge, and discard linked git
worktrees with a layered file-locking concurrency model — from a bare git
repository, with no configuration.
ai-hats-wt is the worktree core extracted from the
ai-hats framework. It has no dependency on
ai-hats: everything below runs against a plain git init with no ai-hats.yaml,
no composition, and no tracker. Its only runtime dependencies are
ai-hats-core (dependency-free
filesystem primitives) and filelock.
Install
pip install ai-hats-wt
Requires Python 3.11+.
Quickstart
Drive the full create → merge (or → discard) lifecycle on any git repo:
from pathlib import Path
from ai_hats_wt import WorktreeManager
project = Path("/path/to/a/git/repo")
# A manager for one linked worktree on its own branch.
mgr = WorktreeManager(project, branch_name="feature/x")
wt_path = mgr.create() # linked worktree checked out on feature/x
mgr.save_state() # persist state under <project>/.wt
# ... make commits inside wt_path ...
mgr.merge() # land the branch on the base, remove the worktree
# or:
# mgr.discard() # throw the worktree + branch away, land nothing
That is the entire happy path. WorktreeManager defaults to the no-op
lifecycle and a project-local state directory (<project>/.wt), so a bare
consumer needs nothing else. The same flow is exercised end-to-end by the
package's test_wt_standalone.py.
Public API
The supported surface is ai_hats_wt.__all__:
| Symbol | Purpose |
|---|---|
WorktreeManager |
Create / merge / discard a linked worktree; the git probes. |
IsolationMode |
Isolation / teardown mode (DISCARD, SQUASH, BRANCH, NONE). |
assert_head_is_canonical_base |
Guard: refuse to branch off a non-canonical HEAD. |
WorktreeLifecycle, LifecycleContext, NOOP_LIFECYCLE |
The lifecycle extension-point (see below). |
WorktreeDirtyError, WorktreeCreateError, WorktreeDriftError, … |
Typed exceptions — the clean failure seam. |
The full exception set (WorktreePartialCleanupError, WorktreeRemoveError,
OriginalBranchMissingError, WorktreeStateLostError,
WorktreeStateIncompleteError, WorktreeBaseBranchError,
WorktreeBaseBranchMismatchError, WorktreeMainRepoMidMergeError,
WorktreeTeardownAborted, WorktreeLockError) lets a host catch precise
failures instead of parsing git stderr. Per-method behaviour is documented on
the code — import a symbol and read its docstring; this README is the entry
point, not the reference.
Lifecycle hooks (extension-point)
WorktreeManager runs no hooks by default (NOOP_LIFECYCLE). A host can inject
behaviour at the create/merge/discard boundaries by passing its own
WorktreeLifecycle bundle:
from ai_hats_wt import WorktreeManager, WorktreeLifecycle, LifecycleContext
class MyLifecycle(WorktreeLifecycle):
def on_created(self, ctx: LifecycleContext) -> None:
... # e.g. seed files into ctx.worktree_path
def before_teardown(self, event: str, ctx: LifecycleContext) -> None:
... # event is "merge" / "discard" / "cleanup"
mgr = WorktreeManager(project, branch_name="feature/x", lifecycle=MyLifecycle())
This is the seam ai-hats uses to run its own carry/hook layer; a standalone consumer typically leaves the default no-op in place.
Concurrency
Worktree operations are serialized by a layered file-locking model (state locks,
git-index-lock retry, ref-lock waits) so that concurrent create / merge
calls on the same repo do not corrupt each other. It is on by default; there is
nothing to configure.
Dependencies
ai-hats-core— atomic filesystem I/O.filelock— the cross-process lock backend.
Everything else is the Python standard library.
Versioning
SemVer. The public API is ai_hats_wt.__all__; breaking
changes to it bump the major version. Submodule internals (anything not in
__all__) are not part of the contract.
License
MIT. See the ai-hats repository for the full license and contribution guide.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ai_hats_wt-0.2.1.tar.gz.
File metadata
- Download URL: ai_hats_wt-0.2.1.tar.gz
- Upload date:
- Size: 43.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
554fdab906bddbc208e7e43318816949ae79b291de0247cf262c3b64ea757c97
|
|
| MD5 |
489311b12e0e2e3acbc02e616eed73dc
|
|
| BLAKE2b-256 |
51a375069cc195df05662061ecada19e4b7c677bd1b39b7c4f5849f010e4a299
|
Provenance
The following attestation bundles were made for ai_hats_wt-0.2.1.tar.gz:
Publisher:
release-packages.yml on muratovv/ai-hats
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ai_hats_wt-0.2.1.tar.gz -
Subject digest:
554fdab906bddbc208e7e43318816949ae79b291de0247cf262c3b64ea757c97 - Sigstore transparency entry: 2086555448
- Sigstore integration time:
-
Permalink:
muratovv/ai-hats@a55277be3386dc12a6cc454516f91612df15f03b -
Branch / Tag:
refs/heads/master - Owner: https://github.com/muratovv
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-packages.yml@a55277be3386dc12a6cc454516f91612df15f03b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file ai_hats_wt-0.2.1-py3-none-any.whl.
File metadata
- Download URL: ai_hats_wt-0.2.1-py3-none-any.whl
- Upload date:
- Size: 40.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f8afa6659e3dfd4101d5722fbd3b39050cdf24f6705ab9e9f54971dee717a6fc
|
|
| MD5 |
a90a7760a4442413a17777564786a9eb
|
|
| BLAKE2b-256 |
7376e35bf42ee1e146c9d0ccdf7488caa968fc140c58a99b78183d1b4eafa1eb
|
Provenance
The following attestation bundles were made for ai_hats_wt-0.2.1-py3-none-any.whl:
Publisher:
release-packages.yml on muratovv/ai-hats
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ai_hats_wt-0.2.1-py3-none-any.whl -
Subject digest:
f8afa6659e3dfd4101d5722fbd3b39050cdf24f6705ab9e9f54971dee717a6fc - Sigstore transparency entry: 2086555617
- Sigstore integration time:
-
Permalink:
muratovv/ai-hats@a55277be3386dc12a6cc454516f91612df15f03b -
Branch / Tag:
refs/heads/master - Owner: https://github.com/muratovv
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-packages.yml@a55277be3386dc12a6cc454516f91612df15f03b -
Trigger Event:
workflow_dispatch
-
Statement type: