@henryqw/pi-deps

Prepare Node and uv dependencies when opted-in Git worktrees are created.

Packages

Package details

extension

Install @henryqw/pi-deps from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:@henryqw/pi-deps
Package
@henryqw/pi-deps
Version
0.3.2
Published
Aug 24, 2026
Downloads
537/mo · 537/wk
Author
henrywang
License
MIT
Types
extension
Size
17.5 KB
Dependencies
0 dependencies · 2 peers
Pi manifest JSON
{
  "extensions": [
    "./extensions/deps.ts"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

@henryqw/pi-deps

Prepare locked Node and uv dependencies whenever Git creates a new worktree for an opted-in repository.

Why

  • Created for: Installing locked dependencies whenever Git creates a new worktree in an opted-in repository.
  • Advantage: Prepares each checkout regardless of which tool created it, without paying install cost at every Pi startup.

Install

pi install npm:@henryqw/pi-deps

Node 22.19 or newer, Git, and each selected package manager must be available on PATH used by Git.

Supported managers

Only current major versions are supported; older majors are not handled and fall back to the lockfile default below.

Manager Command Lockfile
npm npm ci package-lock.json, npm-shrinkwrap.json
pnpm pnpm install --frozen-lockfile pnpm-lock.yaml
Yarn yarn install --immutable yarn.lock (Yarn Classic 1.x is not supported)
Bun bun install --frozen-lockfile bun.lock, bun.lockb
uv uv sync --locked uv.lock

Use

Surface Type Purpose
/deps command Toggle dependency preparation for future worktrees in current repository.

Run /deps once from any worktree to enable preparation through repository's shared post-checkout hook. Run it again to disable. Hooks without this package's marker are never overwritten or removed. After updating the package, run /deps twice in each opted-in repository to replace the copied hook with the current version. A configured core.hooksPath replaces the shared hooks directory, so /deps refuses instead of installing where Git would ignore or share the hook.

Only Git-root lockfiles are inspected. npm, pnpm, Yarn, and Bun use frozen installs; uv uses uv sync --locked. Node and uv both run when both lockfile types exist. Root npm and uv workspaces remain package-manager concerns; nested independent projects are not scanned.

Creation returns immediately. The hook validates lockfiles synchronously — conflicting Node lockfiles, packageManager mismatches, and unsupported declarations still fail the worktree command fast — then a detached installer runs the frozen installs in the background. Its outcome lands in <worktree gitdir>/pi-deps/status.json with command output in the adjacent install.log; the file is removed once a Pi session reports it. A Pi session opened in the worktree shows an editor widget while installing, auto-dismisses success after five seconds, and keeps install failures visible (including missing executables). Other tools creating worktrees get the same background install but must consume the status file themselves. Already-present node_modules, .pnp.cjs, or .venv are skipped. Worktrees created with git worktree add --no-checkout never run post-checkout, so they are not prepared. Because installs finish after creation returns, a consumer may start using a worktree before dependencies are ready.

Dependency installation may execute repository-controlled build and install scripts. Enable only repositories you trust.

Remove

Disable each opted-in repository before removing package because copied Git hook is self-contained:

/deps
pi remove npm:@henryqw/pi-deps

Development

npm test --workspace @henryqw/pi-deps
npm run typecheck --workspace @henryqw/pi-deps
npm run pack:check --workspace @henryqw/pi-deps