UNPKG

framework

Version:

The (AI) Framework: turnkey, zero-config AI orchestration that wraps a coding-agent CLI (Claude Code) as a black box and takes you from an idea to a running app. Vite for AI.

62 lines 3.2 kB
import { type GitRunner } from './project.js'; import { type WorktreeDirEntry } from './store/index.js'; /** The filesystem the reconcile needs; `node:fs/promises` in production. */ export interface LinksFs { /** Names under `dir`; a missing dir yields `[]`. */ readdir(dir: string): Promise<string[]>; /** Recursive mkdir. */ mkdir(dir: string): Promise<void>; /** Create a symlink at `path` pointing to `target`. */ symlink(target: string, path: string): Promise<void>; /** A symlink's target, or `undefined` when `path` is missing or not a symlink. */ readlink(path: string): Promise<string | undefined>; /** Remove one file or symlink. */ unlink(path: string): Promise<void>; /** Whether anything (file, dir, or dangling link) sits at `path`. */ lexists(path: string): Promise<boolean>; } /** A {@link LinksFs} over `node:fs/promises`, dynamically imported like {@link nodeDirLister}. */ export declare function nodeLinksFs(): LinksFs; /** Injectable seams for {@link reconcileBranchLinks}. */ export interface BranchLinksDeps { git?: GitRunner; fs?: LinksFs; /** The checkouts on disk (default {@link worktreeDirEntries}). */ worktrees?: (cwd: string) => Promise<WorktreeDirEntry[]>; /** The branch a worktree is on (default {@link currentBranch}). */ branchOf?: (path: string) => Promise<string | undefined>; /** Hide a repo-root entry from git (default {@link excludeFromGit} over `git`). */ exclude?: (repo: string, rule: string) => Promise<void>; } /** * Bring one project's `branches/` links in line with its worktrees: one link per worktree, named * as the branch the worktree is on right now, plus the repo-root shortcut. Renames are covered by * the same rule — the old name stops being wanted and is dropped, the new one is created. * * Touches only what is provably ours: a link is created, replaced, or removed only when it points * (or would point) into `worktrees/`; anything else at those paths — a user's own file, dir, or * symlink — is left alone. Never throws. */ export declare function reconcileBranchLinks(cwd: string, deps?: BranchLinksDeps): Promise<void>; /** A running reconcile pass, in the shape the daemon's other background services use. */ export interface BranchLinksPass { /** Run one pass now, awaiting it. */ tick: () => Promise<void>; stop: () => void; } /** What {@link startBranchLinksPass} needs from the daemon. */ export interface BranchLinksOptions { projects: () => Promise<readonly { path: string; }[]>; /** The per-project reconcile (default {@link reconcileBranchLinks}). */ reconcile?: (cwd: string) => Promise<void>; } /** * Keep every registered project's branch links current, one turn per call. Runs on the daemon's * clock; renames and reclaimed worktrees settle within a tick, and a freshly-allocated worktree * gets its link immediately because allocation calls the reconcile too. Quiet on purpose: links * are presentation, and narrating every rename would drown the log. */ export declare function startBranchLinksPass(opts: BranchLinksOptions): BranchLinksPass; //# sourceMappingURL=branch-links.d.ts.map