@einsia/agent-git 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +112 -0
- package/README.md +48 -14
- package/npm/README.md +8 -1
- package/npm/lib/platform.js +4 -4
- package/npm/lib/run.js +1 -1
- package/package.json +8 -6
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Every notable change to agit, the AgentGit CLI, by release. The format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and versions follow
|
|
5
|
+
[Semantic Versioning](https://semver.org/). A version's section here is the body of
|
|
6
|
+
its [GitHub Release](https://github.com/Einsia/agent-git/releases), and the
|
|
7
|
+
`@einsia/agent-git` npm package ships this file.
|
|
8
|
+
|
|
9
|
+
## [0.1.2] - 2026-09-12
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **Session files with explicit staging.** Use `agit file` to add, inspect, commit,
|
|
14
|
+
retrieve and link deliverables in a selected branch without changing its conversation
|
|
15
|
+
VIEW. File staging remains separate from automatic turn settlement.
|
|
16
|
+
- **Windows x64 distribution.** Install the native Windows CLI through npm or
|
|
17
|
+
download the executable from the GitHub Release, including remote-control support.
|
|
18
|
+
- **More remote-control workflows.** Connect existing Codex conversations through
|
|
19
|
+
the native inbox, use OpenCode remote control and transcript snapshots, and navigate
|
|
20
|
+
between connected machines and their workspaces.
|
|
21
|
+
- **Richer history inspection.** Inspect saved VIEWs and LOGs, raw native JSONL and
|
|
22
|
+
archived evidence; compare semantic prefixes and unsettled native turns with `diff`.
|
|
23
|
+
- **Scoped search and integrity checks.** Search authenticated repository scopes,
|
|
24
|
+
inspect incomplete-result diagnostics, and run bounded, read-only `doctor` checks.
|
|
25
|
+
- **Safer import and review.** Choose native-session lineage explicitly, preview and
|
|
26
|
+
name sessions interactively, and review committed VIEWs with guarded scan remedies.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- **Explicit session targeting.** Use `owner/repo@branch` or `AGIT_SESSION` for
|
|
31
|
+
automation. Interactive commands offer target selection; `agit switch` and implicit
|
|
32
|
+
workspace targeting are removed. Update scripts that depended on those defaults.
|
|
33
|
+
- **Structured agent output.** JSON output includes typed recovery actions, while
|
|
34
|
+
human output identifies verified targets and quiet mode suppresses progress output.
|
|
35
|
+
- Merge-agent exploration remains available as archived evidence and visible session
|
|
36
|
+
history without adding that exploration to the merged VIEW.
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
|
|
40
|
+
- Preserve Codex fork history, portable provider metadata, mixed-runtime sharing and
|
|
41
|
+
paired tool evidence during capture, resume and export.
|
|
42
|
+
- Preserve reference, network, authentication, policy and cancellation error categories;
|
|
43
|
+
bind credentials to the selected Hub and validate setup before applying changes.
|
|
44
|
+
- Keep failed remote API turns responsive, preserve shared-message authors and native
|
|
45
|
+
execution feedback, and support HTTP CONNECT proxies between `agitd` and the Hub.
|
|
46
|
+
- Validate imports before adoption, prevent duplicate runtime claims, guard resume
|
|
47
|
+
against tracking divergence, and preserve private-publication checks.
|
|
48
|
+
- Avoid repository-wide migration scans on clean stores and skip tags already present
|
|
49
|
+
on a verified remote during push.
|
|
50
|
+
|
|
51
|
+
## [0.1.1] - 2026-09-04
|
|
52
|
+
|
|
53
|
+
### Added
|
|
54
|
+
|
|
55
|
+
- **A terminal interface for people.** `agit`, `agit resume`, `agit new`, `agit log`,
|
|
56
|
+
`agit import`, `agit init` and `agit config` open a full-screen interface when run in
|
|
57
|
+
an interactive terminal without their key argument: browse sessions, repositories,
|
|
58
|
+
the timeline and conversation content; name and adopt sessions that are not tracked
|
|
59
|
+
yet; an `init` wizard and a `config` editor; hand the terminal to Claude Code or
|
|
60
|
+
Codex and come back to refreshed lists. Pipes, CI, scripts and agent sessions keep
|
|
61
|
+
the existing output, and `--no-tui`, `AGIT_TUI=0` or any machine-output flag
|
|
62
|
+
(`--json`, `-q`, `-y`) turns it off. See [docs/07_tui.md](docs/07_tui.md).
|
|
63
|
+
- **Update check.** On user-facing startup agit checks, at most once a day, whether the
|
|
64
|
+
hub announces a newer release and prints a reminder; `agit upgrade` installs it.
|
|
65
|
+
Nothing upgrades on its own.
|
|
66
|
+
- **A file keystore for machines without a credential store.** On an SSH login or a CI
|
|
67
|
+
runner no Secret Service answers, so the secret-filter key had nowhere to go and the
|
|
68
|
+
first `agit commit` whose transcript carried a heuristic finding failed with "cannot
|
|
69
|
+
open the operating-system credential store". `agit config secrets.keystore file` (or
|
|
70
|
+
`AGIT_SECRETS_KEYSTORE=file`) keeps the key in a private file under
|
|
71
|
+
`$AGIT_HOME/keystore/` instead. Unix only, chosen explicitly and never a silent
|
|
72
|
+
fallback; its protection is the file mode, so a backup of `$AGIT_HOME` carries the key
|
|
73
|
+
along with the global vault — the boundary is drawn in
|
|
74
|
+
[docs/05_global_secret_filter.md](docs/05_global_secret_filter.md).
|
|
75
|
+
- **`agit doctor` reports the secret keystore.** It probes the configured store the way
|
|
76
|
+
a commit uses it and unlocks the vault if one exists, so a machine that cannot hold
|
|
77
|
+
the key shows up at setup time rather than at the first commit that finds a secret.
|
|
78
|
+
|
|
79
|
+
### Fixed
|
|
80
|
+
|
|
81
|
+
- `agit fork` of a sealed branch no longer produces a sealed branch: the seal marker is
|
|
82
|
+
branch-local and is dropped when the fork gets its identity (issue 23).
|
|
83
|
+
- Codex sessions under a custom `CODEX_HOME` are discovered and settled, and the
|
|
84
|
+
SessionStart and Stop hooks locate the session and settle it correctly.
|
|
85
|
+
- Missing local branches, phantom `origin` branches, the log limit's performance, and
|
|
86
|
+
cursor restoration after leaving the interface.
|
|
87
|
+
- When the OS credential store is unavailable, the error names both remedies — install
|
|
88
|
+
and configure a credential store, or select the file keystore. Every other keyring
|
|
89
|
+
error keeps its own meaning.
|
|
90
|
+
- Hints are highlighted in bright magenta so they stand out from ordinary output.
|
|
91
|
+
|
|
92
|
+
### Internal
|
|
93
|
+
|
|
94
|
+
- The GitHub mirror job clears stale replace refs before planting the graft, so a reused
|
|
95
|
+
runner checkout no longer aborts the mirror.
|
|
96
|
+
|
|
97
|
+
## [0.1.0] - 2026-09-01
|
|
98
|
+
|
|
99
|
+
First public release.
|
|
100
|
+
|
|
101
|
+
- Lossless version control for agent sessions: `agit import`, `commit`, `push`, `clone`
|
|
102
|
+
and `resume` for Claude Code, Codex, OpenCode and Cursor.
|
|
103
|
+
- Session lines as branches, workspaces, forks and merges across several people.
|
|
104
|
+
- Secret scanning before publishing, a device-local filter for registered low-entropy
|
|
105
|
+
secrets, and reversible repository-local placeholders.
|
|
106
|
+
- Distribution through npm — `npx -y create-agit` or `npm i -g @einsia/agent-git` — with
|
|
107
|
+
per-platform packages for Linux and macOS on x64 and arm64, and GitHub Release
|
|
108
|
+
artifacts with `SHA256SUMS`.
|
|
109
|
+
|
|
110
|
+
[0.1.2]: https://github.com/Einsia/agent-git/releases/tag/agit-v0.1.2
|
|
111
|
+
[0.1.1]: https://github.com/Einsia/agent-git/releases/tag/agit-v0.1.1
|
|
112
|
+
[0.1.0]: https://github.com/Einsia/agent-git/releases/tag/agit-v0.1.0
|
package/README.md
CHANGED
|
@@ -11,24 +11,46 @@ cleaned up at any moment. `agit` puts snapshots and versions on top of them,
|
|
|
11
11
|
so "that conversation last Wednesday that finally cracked the bug" becomes
|
|
12
12
|
something you can find, continue, and hand to a teammate.
|
|
13
13
|
|
|
14
|
+
```text
|
|
15
|
+
agit choose a session to continue
|
|
16
|
+
agit new choose a repo and name a fresh conversation
|
|
17
|
+
agit import choose an existing runtime conversation to adopt
|
|
18
|
+
agit log choose a session and browse its history
|
|
19
|
+
agit push choose a saved session to publish
|
|
20
|
+
agit share choose a session and review link settings
|
|
21
|
+
agit open owner/repo@ref open a saved source, forking when needed
|
|
14
22
|
```
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
23
|
+
|
|
24
|
+
These bare commands open their interfaces in a human terminal. `agit resume`
|
|
25
|
+
continues the same session and never forks; `agit open` can start a new writable
|
|
26
|
+
session from a tag, historical point or another author's source. `agit run`
|
|
27
|
+
remains a compatibility alias for `open`.
|
|
28
|
+
|
|
29
|
+
Inside an adopted agent session, `agit commit` saves completed turns and
|
|
30
|
+
`agit push` publishes that session. For scripts, pass the target explicitly,
|
|
31
|
+
for example `agit push owner/repo@branch --json`. Directory branch pins do not
|
|
32
|
+
choose targets for `commit`, `push` or `share`.
|
|
33
|
+
|
|
34
|
+
On user-facing startup, `agit` checks for a newer release at most once a day and prints a
|
|
35
|
+
reminder to stderr; it never upgrades automatically. JSON/quiet/CI and internal hook/MCP paths
|
|
36
|
+
skip this reminder.
|
|
21
37
|
|
|
22
38
|
Adopting and recording the first version are one command — the in-between
|
|
23
39
|
state ("linked, but unversioned") means nothing to anyone. To mark a session
|
|
24
40
|
without versioning it (e.g. offline), pass `--link-only`.
|
|
25
41
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
`--
|
|
30
|
-
|
|
31
|
-
|
|
42
|
+
Use a full native session ID and an explicit runtime and destination for lineage discovery.
|
|
43
|
+
The terminal offers verified local bases, independent import, or cancellation. Noninteractive
|
|
44
|
+
calls return choices without writing; pass `--onto <ref>` or `--independent` to select a path.
|
|
45
|
+
`--propose-lineage` prints a read-only report without adopting the session.
|
|
46
|
+
Inspecting lineage in an existing repository requires NUL-framed Git worktree output,
|
|
47
|
+
normally available in Git 2.36 or newer. An unsupported Git reports `git_worktree_format`;
|
|
48
|
+
explicit `--onto`, `--independent`, and `--link-only` imports retain their ordinary checks.
|
|
49
|
+
|
|
50
|
+
`agit clone` fetches repository history locally. Use `agit open` or `agit resume`
|
|
51
|
+
to start a runtime. A clone is **read-only by default** on the Hub: nothing is
|
|
52
|
+
created in your name and `origin` points at the source. `agit clone --mine`
|
|
53
|
+
creates your copy, repoints `origin` and remembers the source as `upstream`.
|
|
32
54
|
|
|
33
55
|
The full command list is in `agit --help`.
|
|
34
56
|
|
|
@@ -45,9 +67,13 @@ agit --version
|
|
|
45
67
|
|
|
46
68
|
Both routes install a prebuilt binary — no Rust toolchain required. npm
|
|
47
69
|
picks the platform sub-package matching your `os`/`cpu`; on platforms with no
|
|
48
|
-
prebuilt binary (e.g.
|
|
70
|
+
prebuilt binary (e.g. FreeBSD) running `agit` prints the source-build recipe.
|
|
49
71
|
Details and environment variables: [`npm/README.md`](npm/README.md).
|
|
50
72
|
|
|
73
|
+
Windows x64 packages include the local RC daemon. Its control channel uses a local named
|
|
74
|
+
pipe restricted to the current Windows user. RC state requires a private, user-owned
|
|
75
|
+
directory; shared or redirected RC paths are rejected.
|
|
76
|
+
|
|
51
77
|
pnpm (v10+) does not run dependency install scripts by default, so the
|
|
52
78
|
automatic `agit setup` is skipped there — run `agit setup` once yourself
|
|
53
79
|
after installing.
|
|
@@ -80,7 +106,7 @@ the binary to `~/.local/bin/agit`. Common flags:
|
|
|
80
106
|
```
|
|
81
107
|
|
|
82
108
|
To build a binary whose built-in hub is the staging deployment, set the build-time default
|
|
83
|
-
explicitly. Runtime `AGIT_HUB_URL` and `agit config
|
|
109
|
+
explicitly. Runtime `AGIT_HUB_URL` and `agit config hub.url ...` still take precedence:
|
|
84
110
|
|
|
85
111
|
```sh
|
|
86
112
|
AGIT_DEFAULT_HUB_URL=https://staging.agent-git.com cargo build --release --locked
|
|
@@ -114,6 +140,7 @@ unreleased versions".
|
|
|
114
140
|
| Probed storage formats of each runtime | [`docs/mechanism-probing/`](docs/mechanism-probing/) |
|
|
115
141
|
| npm package behavior and env vars | [`npm/README.md`](npm/README.md) |
|
|
116
142
|
| Release artifact naming contract | [`.github/RELEASE_ARTIFACTS.md`](.github/RELEASE_ARTIFACTS.md) |
|
|
143
|
+
| What changed in each release | [`CHANGELOG.md`](CHANGELOG.md) |
|
|
117
144
|
|
|
118
145
|
The server (**AgentGit**) is a separate repository, deployed on its own.
|
|
119
146
|
|
|
@@ -127,6 +154,13 @@ agree with it (`node scripts/check-version.js` — run in CI and before
|
|
|
127
154
|
node scripts/bump-version.mjs 0.1.0 # Cargo.toml + Cargo.lock + all npm manifests
|
|
128
155
|
```
|
|
129
156
|
|
|
157
|
+
Release notes live in [`CHANGELOG.md`](CHANGELOG.md), and they come first: write the
|
|
158
|
+
version's `## [x.y.z]` section, then bump. `bump-version.mjs` refuses to touch a file for
|
|
159
|
+
a version that has no section, and `check-version.js` refuses one in CI and before `npm pack`.
|
|
160
|
+
The section becomes the GitHub Release body (`scripts/release-notes.mjs` extracts it in
|
|
161
|
+
`release.yml`, with repository-relative links pinned to the release tag) and ships inside
|
|
162
|
+
the `@einsia/agent-git` package.
|
|
163
|
+
|
|
130
164
|
Pushing the tag runs the whole chain — binaries first, npm right after:
|
|
131
165
|
|
|
132
166
|
```sh
|
package/npm/README.md
CHANGED
|
@@ -40,6 +40,7 @@ The hub (**AgentGit**) is not in this package; it deploys separately.
|
|
|
40
40
|
| Linux | aarch64/arm64 | `@einsia/agent-git-linux-arm64` |
|
|
41
41
|
| macOS | x86_64 | `@einsia/agent-git-darwin-x64` |
|
|
42
42
|
| macOS | arm64 | `@einsia/agent-git-darwin-arm64` |
|
|
43
|
+
| Windows | x86_64 | `@einsia/agent-git-win32-x64` |
|
|
43
44
|
|
|
44
45
|
**Linux binaries are musl static-linked — no glibc floor.** Verified on Alpine,
|
|
45
46
|
Amazon Linux 2 (glibc 2.26), Debian 11/12, Ubuntu 20.04–24.04, x86_64 and
|
|
@@ -48,7 +49,7 @@ arm64. No more `libc.so.6: version 'GLIBC_2.xx' not found`.
|
|
|
48
49
|
On macOS, if Node runs under Rosetta (it reports itself as x64) the installer
|
|
49
50
|
detects it and installs the arm64 build.
|
|
50
51
|
|
|
51
|
-
Unsupported
|
|
52
|
+
Unsupported operating system and architecture pairs get no prebuilt binary: running
|
|
52
53
|
`agit` prints build-from-source instructions. On WSL, the Linux binary works.
|
|
53
54
|
|
|
54
55
|
## Failure behavior
|
|
@@ -73,3 +74,9 @@ Unsupported platforms (including Windows) get no prebuilt binary: running
|
|
|
73
74
|
`agit upgrade` asks the hub for the latest CLI version and downloads the
|
|
74
75
|
platform package tarball straight from the npm registry, verified against the
|
|
75
76
|
registry's SRI (sha512) before anything is replaced.
|
|
77
|
+
|
|
78
|
+
Windows packages contain `agit.exe`. The `create-agit` installer writes it to
|
|
79
|
+
`%USERPROFILE%\.local\bin`; add that directory to your user PATH if the installer
|
|
80
|
+
reports that it is missing. Windows source builds need Rust and the MSVC C/C++
|
|
81
|
+
toolchain. The local RC daemon uses a current-user Windows named pipe and private
|
|
82
|
+
RC state. It refuses shared or redirected RC paths instead of changing their permissions.
|
package/npm/lib/platform.js
CHANGED
|
@@ -10,13 +10,13 @@ const { spawnSync } = require('child_process');
|
|
|
10
10
|
//
|
|
11
11
|
// Linux is musl static linking: a gnu artifact built on ubuntu:24.04 locks in
|
|
12
12
|
// GLIBC_2.39 and nothing starts on older distributions; musl's static-pie has
|
|
13
|
-
// no interpreter, so it has no glibc floor.
|
|
14
|
-
// produces no windows artifacts.
|
|
13
|
+
// no interpreter, so it has no glibc floor.
|
|
15
14
|
const KEYS = {
|
|
16
15
|
'linux/x64': 'linux-x64',
|
|
17
16
|
'linux/arm64': 'linux-arm64',
|
|
18
17
|
'darwin/x64': 'darwin-x64',
|
|
19
18
|
'darwin/arm64': 'darwin-arm64',
|
|
19
|
+
'win32/x64': 'win32-x64',
|
|
20
20
|
};
|
|
21
21
|
|
|
22
22
|
// Platform key → Rust target triple (CI names artifact archives by triple).
|
|
@@ -25,6 +25,7 @@ const TRIPLES = {
|
|
|
25
25
|
'linux-arm64': 'aarch64-unknown-linux-musl',
|
|
26
26
|
'darwin-x64': 'x86_64-apple-darwin',
|
|
27
27
|
'darwin-arm64': 'aarch64-apple-darwin',
|
|
28
|
+
'win32-x64': 'x86_64-pc-windows-msvc',
|
|
28
29
|
};
|
|
29
30
|
|
|
30
31
|
function packageName(key) {
|
|
@@ -42,8 +43,7 @@ function realArch(nodePlatform, nodeArch) {
|
|
|
42
43
|
return !r.error && r.status === 0 && (r.stdout || '').trim() === '1' ? 'arm64' : arch;
|
|
43
44
|
}
|
|
44
45
|
|
|
45
|
-
//
|
|
46
|
-
// example) returns null and the caller picks the wording.
|
|
46
|
+
// Unsupported operating system and architecture pairs have no platform key.
|
|
47
47
|
function packageKey(nodePlatform, nodeArch) {
|
|
48
48
|
const platform = nodePlatform || process.platform;
|
|
49
49
|
const arch = nodeArch === undefined ? realArch() : nodeArch;
|
package/npm/lib/run.js
CHANGED
|
@@ -21,7 +21,7 @@ function run() {
|
|
|
21
21
|
|
|
22
22
|
if (!bin) {
|
|
23
23
|
// npm skipped the optional dep for this os/cpu = this platform has no
|
|
24
|
-
// prebuilt artifact (
|
|
24
|
+
// prebuilt artifact (freebsd, ...). This block is often everything
|
|
25
25
|
// the user sees, so on its own it has to say why there is no binary and
|
|
26
26
|
// which command fixes it.
|
|
27
27
|
log.error(`no prebuilt agit binary for ${process.platform}/${process.arch}.`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@einsia/agent-git",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Version control for agent sessions — the agit CLI plus skills/hooks/MCP wiring for Claude Code, Codex, OpenCode and Cursor. The AgentGit hub deploys separately.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agit",
|
|
@@ -33,7 +33,8 @@
|
|
|
33
33
|
"npm/postinstall.js",
|
|
34
34
|
"npm/lib/",
|
|
35
35
|
"npm/README.md",
|
|
36
|
-
"README.md"
|
|
36
|
+
"README.md",
|
|
37
|
+
"CHANGELOG.md"
|
|
37
38
|
],
|
|
38
39
|
"scripts": {
|
|
39
40
|
"postinstall": "node npm/postinstall.js",
|
|
@@ -48,9 +49,10 @@
|
|
|
48
49
|
"access": "public"
|
|
49
50
|
},
|
|
50
51
|
"optionalDependencies": {
|
|
51
|
-
"@einsia/agent-git-linux-x64": "0.1.
|
|
52
|
-
"@einsia/agent-git-linux-arm64": "0.1.
|
|
53
|
-
"@einsia/agent-git-darwin-x64": "0.1.
|
|
54
|
-
"@einsia/agent-git-darwin-arm64": "0.1.
|
|
52
|
+
"@einsia/agent-git-linux-x64": "0.1.2",
|
|
53
|
+
"@einsia/agent-git-linux-arm64": "0.1.2",
|
|
54
|
+
"@einsia/agent-git-darwin-x64": "0.1.2",
|
|
55
|
+
"@einsia/agent-git-darwin-arm64": "0.1.2",
|
|
56
|
+
"@einsia/agent-git-win32-x64": "0.1.2"
|
|
55
57
|
}
|
|
56
58
|
}
|