Releases: enboxorg/gitd
v0.9.5
v0.9.4
Patch Changes
- #170
3136765Thanks @LiranCohen! - Fix daemon crash when cloning nonexistent repos (process.exit in server context) and resolve credential helper by absolute path so push auth works without PATH setup.
v0.9.3
Patch Changes
-
#167
3ae9b29Thanks @LiranCohen! - Wire credential helper automatically in git-remote-did so push auth works without runninggitd setup. Fail loudly with actionable hints when authentication cannot proceed. -
#169
347f53fThanks @LiranCohen! - Show actionable error hints when git clone/push fails via a DID remote, instead of leaving the user with git's opaque error message.
v0.9.2
Patch Changes
-
#165
3adf6adThanks @LiranCohen! - Fix push authentication deadlock when daemon is runningThe credential helper (
git-remote-did-credential) was opening the agent's
LevelDB stores directly, which deadlocked when the daemon (gitd serve)
already held the exclusive lock. The helper now calls the daemon's new
POST /auth/tokenendpoint to request credentials without touching LevelDB.Falls back to direct agent connection when no daemon is running.
v0.9.1
Patch Changes
-
#163
6c63764Thanks @LiranCohen! - Fix TTY password prompt echo and eliminate double prompt during git pushThe
/dev/ttypassword prompt introduced in PR #153 was not disabling
terminal echo, so the vault password was visible as the user typed.
Now runsstty -echobefore reading andstty echoafter, matching
the behavior ofssh,gpg, andsudo.Also fixes the double-prompt issue:
git-remote-didwas unconditionally
prompting for the vault password before resolving the DID, even when the
daemon was already running and the password wasn't needed. The prompt is
now deferred toresolveLocalDaemonand only triggered when a daemon
actually needs to be spawned. In the common case (daemon already running),
only the credential helper prompts — once.Additionally switches from byte-at-a-time reads to cooked-mode line reads
on/dev/tty, which is more reliable across shells and lets the terminal
driver handle backspace and line editing natively.
v0.9.0
Minor Changes
-
#159
4def353Thanks @LiranCohen! - Add--privateflag togitd initRepos are public by default. Pass
--privateto create a private repo
whose bundles are encrypted during sync. The visibility is stored in the
DWN repo record'svisibilitytag and is already handled downstream by
bundle-sync.tsandmigrate.ts. -
#158
13c9954Thanks @LiranCohen! - AddGET /repos/:did/:repo/pulls/:number/filesendpoint to GitHub shimReturns the list of changed files for a pull request. Since DWN revision
records store only aggregate diff stats (additions, deletions, files
changed), the response includes a summary entry with the totals. This
unblocks tools likegh pr diff --name-onlythat require this endpoint. -
#160
2214566Thanks @LiranCohen! - Protocol audit fixes-
refs.ts:
targettag is now required on ref records (a ref without
a commit SHA is meaningless). -
patches.ts:
statusChangerecords now requirefrom/totags
(matching the issues protocol) so transitions can be queried — e.g.
"all transitions that closed a PR". All callers (shim merge, CLI merge,
close, reopen) updated. -
patches.ts: Renamed
tipCommit→headCommitin the
revisionBundleschema and its callers for consistency with the
revisionrecord which already usesheadCommit. -
releases.ts:
target_commitishnow reads thecommitShatag from
the release record instead of always returning'main'. -
credential-cache.ts:
writeCachenow creates the parent directory
(mkdirSyncwith{ recursive: true }) before writing, preventing
ENOENT when~/.enboxdoesn't exist yet.
-
Patch Changes
-
#155
5055816Thanks @LiranCohen! - Fix daemon lifecycle UX: bun spawn crash, auto-backgrounding, port conflicts-
Fix bun spawn crash: Replace
createWriteStreamwithopenSyncfd in
spawnDaemon(). Bun does not supportstream.Writableas stdio — only raw
file descriptors,'pipe','ignore', and'inherit'. -
Auto-background
gitd serve: Runninggitd servenow forks a background
daemon and exits immediately (Ollama pattern). Usegitd serve --foreground
to block the terminal for debugging. Status is available viagitd serve status. -
EADDRINUSE handling: When the server port is already in use, show a clear
error message with hints (gitd serve status,gitd serve stop,--port)
instead of a raw stack trace. -
Fast-fail on spawn errors:
spawnDaemonnow detects child process errors
(e.g. ENOENT when gitd binary is missing) immediately instead of polling for
15 seconds before timing out.
-
-
#156
34e42faThanks @LiranCohen! - FixfindGitdBin()dev path heuristicThe function used
lockfilePath()(~/.enbox/daemon.lock) to derive the
source tree location, resolving to~/src/cli/main.ts— completely wrong.Now uses
import.meta.urlto resolve relative to the module file itself,
correctly findingsrc/cli/main.tsin the project tree. -
#157
298e7caThanks @LiranCohen! - Fix GitHub shim author fields to use record author instead of repo ownerAll
userfields in the GitHub shim (issues, comments, PRs, reviews) now
reflect the actual DWN record author (record.author) instead of always
showing the repository owner. Themerged_byfield on pull requests now
reads themergedByDID from the merge result data payload instead of
hardcoding the owner. Theauthor_associationfield is dynamically set
to'OWNER'or'CONTRIBUTOR'based on whether the author matches the
repository owner. -
#162
0cc5f63Thanks @LiranCohen! - Add per-repo mutex to serialize post-push sync operationsConcurrent pushes to the same repository could race on DWN record
updates (ref-sync, bundle-sync) or bundle restores, causing data
corruption. A lightweight promise-chain mutex keyed bydid/repoName
now serializes these operations per repository while allowing different
repos to proceed concurrently. -
#161
c1b863aThanks @LiranCohen! - Harden SSRF protection against DNS rebinding attacksassertNotPrivateUrlnow resolves hostnames via DNS (A + AAAA) and
checks the resulting IP addresses against private ranges. Previously,
only the hostname string was checked, allowing DNS names that resolve to
127.0.0.1to bypass the filter.Also blocks IPv6-mapped IPv4 addresses (
::ffff:127.0.0.1) and the
unspecified address (::). -
#153
ee6b661Thanks @LiranCohen! - Prompt for vault password on /dev/tty in git helpers when GITD_PASSWORD is not setBoth
git-remote-didandgit-remote-did-credentialnow open/dev/ttydirectly
to prompt for the vault password whenGITD_PASSWORDis not set in the environment.
This is the same technique used byssh,gpg, andsudoto prompt the user when
stdin/stdout are claimed by a parent process (in this case, git).Previously,
git pushwould silently fail ifGITD_PASSWORDwas not pre-set because
the credential helper had no way to obtain the password and the remote helper could not
auto-start the daemon. Now the user sees a "Vault password:" prompt and everything
just works.
v0.8.0
Minor Changes
- #150
b9d500bThanks @LiranCohen! - Auto-start the background daemon duringgitd initand other CLI commands sogit pushworks immediately without manually runninggitd serve
v0.7.0
Minor Changes
-
#106
ac391b6Thanks @LiranCohen! - Add daemon lockfile (~/.enbox/daemon.lock) sogitd serveadvertises its PID and port, andgit-remote-didresolvesdid::remotes to the local daemon before attempting DID document resolution. This removes the DID-resolution round-trip for local development. -
#110
978ff95Thanks @LiranCohen! - Add auto-managed daemon lifecycle:git-remote-didnow auto-startsgitd servein the background when no daemon is running, with idle auto-shutdown after 1 hour. New lifecycle commands:gitd serve status|stop|restart|logs. The lockfile now includes the gitd version for upgrade detection. -
#109
4724167Thanks @LiranCohen! - Add preflight git dependency check: all CLI commands (except--versionandhelp) now verify thatgit >= 2.28.0is installed, with clear error messages when it is missing or outdated. Version and help commands print a warning instead of blocking. -
#103
e6947c9Thanks @LiranCohen! - Addgitd pr checkout <number>(aliasco) to fetch a PR's bundle from DWN, import git objects, and create a local branch at the tip commit. Supports--branchto override the local branch name and--detachfor a detached HEAD. -
#102
de5dcf8Thanks @LiranCohen! - Wiregitd pr createto automatically generate a revision record and attach a scoped git bundle when run from a git repo with commits ahead of the base branch. The command now computes merge-base, diff stats, commit count, and creates arepo/patch/revision+repo/patch/revision/revisionBundlein one shot. Use--no-bundleto skip git operations and create a metadata-only PR. -
#104
98e04d5Thanks @LiranCohen! - Replace metadata-onlygitd pr mergewith actual git merge. The command now checks out the base branch, performs the merge with--merge(default),--squash, or--rebasestrategy, records the real merge commit SHA in amergeResultrecord, creates astatusChangeaudit trail record, and deletes the local PR branch (use--no-delete-branchto keep it). -
#98
18f310aThanks @LiranCohen! - Renamegitd patchCLI command togitd prfor a familiar GitHub-like UX. Thepatchsubcommand is kept as an alias. All user-facing output now says "PR" instead of "patch". Internal protocol names (repo/patch,ForgePatchesProtocol) are unchanged. -
#100
f01dab2Thanks @LiranCohen! - Addrepo/patch/revision/bundlepath to ForgePatchesProtocol for carrying git bundle binaries with PR revisions. Each revision can have at most one bundle ($recordLimit: { max: 1 }), immutable, withtipCommit/baseCommit/refCount/sizetags. This enables cross-DWN PR submissions where contributors attach scoped git bundles to their patch revisions. -
#105
5865642Thanks @LiranCohen! - Populate GitHub shim PR response fields from DWN revision and mergeResult records.head.sha,base.sha,commits,additions,deletions,changed_filesnow come from the latest revision record;merge_commit_shacomes from the mergeResult record. Theuserfield usessourceDidwhen available. Also addstatusChangeaudit trail records topr close,pr reopen, and the shim merge endpoint, and fix the migrate command'sCHANGES_REQUESTED→rejectverdict mapping. -
#136
d10a031Thanks @LiranCohen! - Replace sequential PR/issue numbers with short hash IDs derived from DWN record IDs (first 7 hex chars of SHA-256). Removenumberfrom protocol tags and data types. CLI and web UI now use short hash IDs for display and lookup. -
#101
7e3bbe4Thanks @LiranCohen! - Open ForgePatchesProtocol to external contributors: anyone can now create patches, reviews, and review comments without needing a contributor role. All child paths (revision, revisionBundle, review, reviewComment, statusChange, mergeResult) are publicly readable. This enables open-source-style PR submissions from any DID.
Patch Changes
-
#135
baa4f0eThanks @LiranCohen! - Fix audit findings: rebase merge logic, comment body parsing, issues protocol permissions, draft PR mapping, repo name validation, and enbox.repo git config -
#112
6c46f8bThanks @LiranCohen! - Add two-actor E2E collaboration test exercising the full maintainer + contributor workflow: repo creation, clone, feature branch, git bundle PR submission, review, merge, pull, and push authorization. Uses offline agent creation (DidDht with publish: false) to avoid DHT network dependency. -
#141
d07aaf9Thanks @LiranCohen! - Support--flag=valuesyntax in CLI argument parsing so flags like--port=8080work in addition to--port 8080 -
#137
0a35619Thanks @LiranCohen! - Fix potential deadlocks and unbounded memory growth in git subprocess management: drain unused stderr/stdout pipes across all spawn helpers, and handle stdin backpressure in spawnGitService -
#140
53966f0Thanks @LiranCohen! - Make issue and PR migration idempotent: store GitHub source number in the data payload and skip already-imported items on re-run -
#138
ab5f671Thanks @LiranCohen! - Guard onPushComplete behind git subprocess exit code so rejected pushes (non-fast-forward, hook failures) no longer trigger ref-sync and bundle-sync -
#139
b23a762Thanks @LiranCohen! - Prevent silent ref deletion when git fails: ref-sync now aborts instead of deleting all DWN ref records whengit for-each-refexits with a non-zero code -
#144
a8f9b1aThanks @LiranCohen! - Fixsetup --checkto report failure when symlinks point to the wrong target or when binaries exist as regular files instead of symlinks -
#143
dc22a98Thanks @LiranCohen! - Validate port number ingitd webcommand usingparsePortinstead of rawparseInt, rejecting invalid values with a clear error
v0.6.1
Patch Changes
- #88
5b0f58dThanks @LiranCohen! - Fixdid:prefix doubling when remote URL contains the full DID (did::did:dht:.../repo). The URL parser now accepts both short (dht:id/repo) and full (did:dht:id/repo) forms.
v0.6.0
Minor Changes
- #87
b94169fThanks @LiranCohen! -gitd initnow initializes a local git repo in the current directory and adds theoriginremote automatically, matching git/gh conventions. Pass--no-localto skip local setup and only create the server-side bare repo + DWN record.
Patch Changes
- #85
4794775Thanks @LiranCohen! - Eliminate CWD-relative path leaks: RESOLVERCACHE/, DATA/AGENT/, and ./repos no longer created in the working directory. All paths now resolve to ~/.enbox/profiles/default/ when no named profile is active.