Skip to main content

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

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ai_hats_wt-0.4.0.tar.gz (46.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ai_hats_wt-0.4.0-py3-none-any.whl (42.3 kB view details)

Uploaded Python 3

File details

Details for the file ai_hats_wt-0.4.0.tar.gz.

File metadata

  • Download URL: ai_hats_wt-0.4.0.tar.gz
  • Upload date:
  • Size: 46.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for ai_hats_wt-0.4.0.tar.gz
Algorithm Hash digest
SHA256 eb69933015f5aa90d8b3b7b4b16356393db4523ea4a82d7b1e4baa5822392b25
MD5 25ffb97fe6744a0401b4c3c26a960878
BLAKE2b-256 76b77a830858ce767fa5f0de3ab8270248ee69ce20faf15133c05621d8876cb3

See more details on using hashes here.

Provenance

The following attestation bundles were made for ai_hats_wt-0.4.0.tar.gz:

Publisher: release-packages.yml on muratovv/ai-hats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ai_hats_wt-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: ai_hats_wt-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 42.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for ai_hats_wt-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8afe53bf8231de3037f68383a4a372a9785b5f63a13b6434565148ae0781398a
MD5 8be738294b8035f526c849d34867ca15
BLAKE2b-256 6a26442aee6cc1ad6c2d46dca9580633cc6c13244aa084475d8ec8070af400fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for ai_hats_wt-0.4.0-py3-none-any.whl:

Publisher: release-packages.yml on muratovv/ai-hats

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page