@einsia/agent-git 0.1.1 → 0.2.0

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 CHANGED
@@ -6,6 +6,103 @@ Every notable change to agit, the AgentGit CLI, by release. The format follows
6
6
  its [GitHub Release](https://github.com/Einsia/agent-git/releases), and the
7
7
  `@einsia/agent-git` npm package ships this file.
8
8
 
9
+ ## [0.2.0] - 2026-09-16
10
+
11
+ ### Added
12
+
13
+ - **Daemon peers and Cloud tunnels.** `agitd` manages local harness sessions while
14
+ independent SSH or Cloud tunnel workers transport peer messages. Controllers can
15
+ discover and operate sessions on another executor through the same peer protocol.
16
+ Peer hosting is available on Linux and macOS. Cloud connections require a Hub
17
+ with peer relay support enabled.
18
+ - **Independent control and inbound access.** A local controller can connect to
19
+ another device while its own inbound access stays disabled. Cloud admission and
20
+ executor session permissions are enforced separately. Adapters can constrain
21
+ requests to a lower role, enforced by the executor when a queued write runs.
22
+ - **More native conversation sources.** Discover and import OpenClaw, Hermes and
23
+ WorkBuddy sessions, with runtime-specific setup and transcript handling.
24
+ - **Large session files.** Stage binary deliverables with `agit file add --lfs`;
25
+ verify payloads during upload and download before publishing or materializing them.
26
+ - **Local and scoped search.** Search saved local history without Hub requests, or
27
+ limit remote session searches to an organization or the current code origin.
28
+ - **Optional automatic publishing.** Configure `push.auto` per user or repository
29
+ to publish settled turns, while keeping explicit publication available.
30
+ - **Usage statistics controls.** Inspect collection with `agit telemetry`, disable
31
+ it with `agit telemetry disable` or `DO_NOT_TRACK=1`, and preview the field policy.
32
+ Setup discloses the default-on choice; a recorded opt-out is preserved. See the
33
+ [collection and privacy details](docs/telemetry.md).
34
+
35
+ ### Changed
36
+
37
+ - **Use `agit run` for saved sources.** `agit open` is removed. Update scripts to
38
+ use `agit run owner/repo@ref`; `agit resume` still continues a selected session.
39
+ - Review a frozen publication in an interactive agent before pushing, including
40
+ explicit handling of credential findings.
41
+ - Status includes bounded native session details, shared files, merge progress and
42
+ project metadata without unbounded transcript scans.
43
+ - Interactive startup can offer to install an available update after confirmation.
44
+ Non-interactive update notices go to stderr and preserve JSON output.
45
+ - Repository secret dictionaries keep their encryption keys in local Git metadata,
46
+ avoiding repeated Keychain prompts after migration. Neither the dictionary nor
47
+ its key is uploaded by push.
48
+
49
+ ### Fixed
50
+
51
+ - Recover from expired CLI credentials and retry browser sign-in choices without
52
+ losing the selected Hub or repository.
53
+ - Keep session discovery and native watch preparation responsive, hide internal
54
+ runtime sessions, and preserve transcript identity across polling and replay.
55
+ - Correlate canonical Codex user history and prevent duplicate Claude prompts.
56
+ - Preserve native Codex session titles and recover remote session history reliably.
57
+ - Keep controller requests, tunnel failures and harness failures within their
58
+ ownership boundaries, with bounded queues and diagnostic logs for recovery.
59
+ - Support Hub SOCKS proxies and preserve Windows browser launch, process ownership
60
+ and named-pipe behavior.
61
+ - Scope installed AgentGit skills to explicit session operations and retire legacy
62
+ home-directory instructions without replacing unrelated user content.
63
+
64
+ ## [0.1.2] - 2026-09-12
65
+
66
+ ### Added
67
+
68
+ - **Session files with explicit staging.** Use `agit file` to add, inspect, commit,
69
+ retrieve and link deliverables in a selected branch without changing its conversation
70
+ VIEW. File staging remains separate from automatic turn settlement.
71
+ - **Windows x64 distribution.** Install the native Windows CLI through npm or
72
+ download the executable from the GitHub Release, including remote-control support.
73
+ - **More remote-control workflows.** Connect existing Codex conversations through
74
+ the native inbox, use OpenCode remote control and transcript snapshots, and navigate
75
+ between connected machines and their workspaces.
76
+ - **Richer history inspection.** Inspect saved VIEWs and LOGs, raw native JSONL and
77
+ archived evidence; compare semantic prefixes and unsettled native turns with `diff`.
78
+ - **Scoped search and integrity checks.** Search authenticated repository scopes,
79
+ inspect incomplete-result diagnostics, and run bounded, read-only `doctor` checks.
80
+ - **Safer import and review.** Choose native-session lineage explicitly, preview and
81
+ name sessions interactively, and review committed VIEWs with guarded scan remedies.
82
+
83
+ ### Changed
84
+
85
+ - **Explicit session targeting.** Use `owner/repo@branch` or `AGIT_SESSION` for
86
+ automation. Interactive commands offer target selection; `agit switch` and implicit
87
+ workspace targeting are removed. Update scripts that depended on those defaults.
88
+ - **Structured agent output.** JSON output includes typed recovery actions, while
89
+ human output identifies verified targets and quiet mode suppresses progress output.
90
+ - Merge-agent exploration remains available as archived evidence and visible session
91
+ history without adding that exploration to the merged VIEW.
92
+
93
+ ### Fixed
94
+
95
+ - Preserve Codex fork history, portable provider metadata, mixed-runtime sharing and
96
+ paired tool evidence during capture, resume and export.
97
+ - Preserve reference, network, authentication, policy and cancellation error categories;
98
+ bind credentials to the selected Hub and validate setup before applying changes.
99
+ - Keep failed remote API turns responsive, preserve shared-message authors and native
100
+ execution feedback, and support HTTP CONNECT proxies between `agitd` and the Hub.
101
+ - Validate imports before adoption, prevent duplicate runtime claims, guard resume
102
+ against tracking divergence, and preserve private-publication checks.
103
+ - Avoid repository-wide migration scans on clean stores and skip tags already present
104
+ on a verified remote during push.
105
+
9
106
  ## [0.1.1] - 2026-09-04
10
107
 
11
108
  ### Added
@@ -65,5 +162,7 @@ First public release.
65
162
  per-platform packages for Linux and macOS on x64 and arm64, and GitHub Release
66
163
  artifacts with `SHA256SUMS`.
67
164
 
165
+ [0.2.0]: https://github.com/Einsia/agent-git/releases/tag/agit-v0.2.0
166
+ [0.1.2]: https://github.com/Einsia/agent-git/releases/tag/agit-v0.1.2
68
167
  [0.1.1]: https://github.com/Einsia/agent-git/releases/tag/agit-v0.1.1
69
168
  [0.1.0]: https://github.com/Einsia/agent-git/releases/tag/agit-v0.1.0
package/README.md CHANGED
@@ -11,13 +11,24 @@ 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 run owner/repo@ref open a saved source, forking when needed
14
22
  ```
15
- agit import <session> -n <agent> adopt an existing claude / codex / opencode / cursor session and record its first version
16
- agit commit <agent> record another version (snapshot of the session's full current content)
17
- agit push <agent> publish to the hub, get a link
18
- agit clone <owner>/<agent> fetch (with git history) and pick up right away; --mine creates a copy under your name
19
- agit upgrade upgrade the CLI itself to the latest release the hub announces
20
- ```
23
+
24
+ These bare commands open their interfaces in a human terminal. `agit resume`
25
+ continues the same session and never forks; `agit run` can start a new writable
26
+ session from a tag, historical point or another author's source.
27
+
28
+ Inside an adopted agent session, `agit commit` saves completed turns and
29
+ `agit push` publishes that session. For scripts, pass the target explicitly,
30
+ for example `agit push owner/repo@branch --json`. Directory branch pins do not
31
+ choose targets for `commit`, `push` or `share`.
21
32
 
22
33
  On user-facing startup, `agit` checks for a newer release at most once a day and prints a
23
34
  reminder to stderr; it never upgrades automatically. JSON/quiet/CI and internal hook/MCP paths
@@ -27,12 +38,18 @@ Adopting and recording the first version are one command — the in-between
27
38
  state ("linked, but unversioned") means nothing to anyone. To mark a session
28
39
  without versioning it (e.g. offline), pass `--link-only`.
29
40
 
30
- `agit clone` is **read-only by default**: nothing is created in your name,
31
- `origin` points at the source, the session is installed into your runtime and
32
- you can `agit commit` locally as usual. When you decide to take over, use
33
- `--mine` that creates your copy on the hub, repoints `origin` at it, and
34
- remembers the source as `upstream`. Running `agit push` from a read-only
35
- checkout offers exactly that.
41
+ Use a full native session ID and an explicit runtime and destination for lineage discovery.
42
+ The terminal offers verified local bases, independent import, or cancellation. Noninteractive
43
+ calls return choices without writing; pass `--onto <ref>` or `--independent` to select a path.
44
+ `--propose-lineage` prints a read-only report without adopting the session.
45
+ Inspecting lineage in an existing repository requires NUL-framed Git worktree output,
46
+ normally available in Git 2.36 or newer. An unsupported Git reports `git_worktree_format`;
47
+ explicit `--onto`, `--independent`, and `--link-only` imports retain their ordinary checks.
48
+
49
+ `agit clone` fetches repository history locally. Use `agit run` or `agit resume`
50
+ to start a runtime. A clone is **read-only by default** on the Hub: nothing is
51
+ created in your name and `origin` points at the source. `agit clone --mine`
52
+ creates your copy, repoints `origin` and remembers the source as `upstream`.
36
53
 
37
54
  The full command list is in `agit --help`.
38
55
 
@@ -49,9 +66,13 @@ agit --version
49
66
 
50
67
  Both routes install a prebuilt binary — no Rust toolchain required. npm
51
68
  picks the platform sub-package matching your `os`/`cpu`; on platforms with no
52
- prebuilt binary (e.g. Windows) running `agit` prints the source-build recipe.
69
+ prebuilt binary (e.g. FreeBSD) running `agit` prints the source-build recipe.
53
70
  Details and environment variables: [`npm/README.md`](npm/README.md).
54
71
 
72
+ Windows x64 packages include the local RC daemon. Its control channel uses a local named
73
+ pipe restricted to the current Windows user. RC state requires a private, user-owned
74
+ directory; shared or redirected RC paths are rejected.
75
+
55
76
  pnpm (v10+) does not run dependency install scripts by default, so the
56
77
  automatic `agit setup` is skipped there — run `agit setup` once yourself
57
78
  after installing.
@@ -84,7 +105,7 @@ the binary to `~/.local/bin/agit`. Common flags:
84
105
  ```
85
106
 
86
107
  To build a binary whose built-in hub is the staging deployment, set the build-time default
87
- explicitly. Runtime `AGIT_HUB_URL` and `agit config set hub.url ...` still take precedence:
108
+ explicitly. Runtime `AGIT_HUB_URL` and `agit config hub.url ...` still take precedence:
88
109
 
89
110
  ```sh
90
111
  AGIT_DEFAULT_HUB_URL=https://staging.agent-git.com cargo build --release --locked
@@ -139,10 +160,15 @@ The section becomes the GitHub Release body (`scripts/release-notes.mjs` extract
139
160
  `release.yml`, with repository-relative links pinned to the release tag) and ships inside
140
161
  the `@einsia/agent-git` package.
141
162
 
142
- Pushing the tag runs the whole chain binaries first, npm right after:
163
+ After the source release commit passes CI and is synchronized to GitHub `main`,
164
+ verify the mirrored files and create the tag in that GitHub checkout. The mirror
165
+ rewrites commit IDs, so the source repository's SHA is not the release SHA.
166
+ Pushing the tag to GitHub runs the whole chain — binaries first, npm right after:
143
167
 
144
168
  ```sh
145
- git tag agit-v0.1.0 && git push origin agit-v0.1.0 # release.yml builds, smoke-tests, attaches artifacts
169
+ # Run from the verified Einsia/agent-git GitHub mirror checkout.
170
+ git tag agit-v0.1.0
171
+ git push git@github.com:Einsia/agent-git.git refs/tags/agit-v0.1.0
146
172
  ```
147
173
 
148
174
  Distribution to users runs through the npm registry: each target ships as a
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 platforms (including Windows) get no prebuilt binary: running
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.
@@ -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. No win32: the release pipeline
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
- // Returns this machine's platform key; an unsupported platform (win32, for
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 (win32, freebsd, ...). This block is often everything
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}.`);
@@ -37,7 +37,10 @@ function run() {
37
37
  process.exit(127);
38
38
  }
39
39
 
40
- const r = spawnSync(bin, process.argv.slice(2), { stdio: 'inherit' });
40
+ const r = spawnSync(bin, process.argv.slice(2), {
41
+ stdio: 'inherit',
42
+ env: { ...process.env, AGIT_INSTALL_CHANNEL: 'npm_global' },
43
+ });
41
44
  if (r.error) {
42
45
  log.error(`failed to start ${bin}: ${r.error.message}`);
43
46
  process.exit(1);
@@ -42,15 +42,25 @@ function main() {
42
42
  }
43
43
  if (!bin) return; // unsupported platform: the shim gives full instructions on the next command.
44
44
 
45
- const check = spawnSync(bin, ['--version'], { encoding: 'utf8' });
45
+ const env = { ...process.env, AGIT_TELEMETRY_DEFER: '1', AGIT_INSTALL_CHANNEL: 'npm_global' };
46
+ const check = spawnSync(bin, ['--version'], { encoding: 'utf8', env });
46
47
  if (check.error || check.status !== 0) {
47
48
  log.warn(`installed binary does not run: ${bin}`);
48
49
  log.warn((check.stderr || check.error?.message || `exit ${check.status}`).trim());
49
50
  return;
50
51
  }
51
52
 
53
+ // npx create-agit owns its durable-copy receipt and passes the browser acquisition key.
54
+ if (process.env.npm_command !== 'exec') {
55
+ const receiptArgs = ['--internal-install-completed'];
56
+ if (!truthy(process.env.npm_config_foreground_scripts)) receiptArgs.push('--defer-notice');
57
+ spawnSync(bin, receiptArgs, {
58
+ stdio: ['ignore', 'inherit', 'inherit'],
59
+ env: { ...process.env, AGIT_INSTALL_CHANNEL: 'npm_global' },
60
+ });
61
+ }
52
62
  if (truthy(process.env.AGIT_SKIP_SETUP)) return;
53
- const setup = spawnSync(bin, ['setup'], { stdio: 'inherit' });
63
+ const setup = spawnSync(bin, ['setup'], { stdio: 'inherit', env });
54
64
  if (setup.status !== 0) {
55
65
  log.warn('`agit setup` did not fully succeed — re-run it any time; the CLI itself is installed.');
56
66
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@einsia/agent-git",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
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",
@@ -49,9 +49,10 @@
49
49
  "access": "public"
50
50
  },
51
51
  "optionalDependencies": {
52
- "@einsia/agent-git-linux-x64": "0.1.1",
53
- "@einsia/agent-git-linux-arm64": "0.1.1",
54
- "@einsia/agent-git-darwin-x64": "0.1.1",
55
- "@einsia/agent-git-darwin-arm64": "0.1.1"
52
+ "@einsia/agent-git-linux-x64": "0.2.0",
53
+ "@einsia/agent-git-linux-arm64": "0.2.0",
54
+ "@einsia/agent-git-darwin-x64": "0.2.0",
55
+ "@einsia/agent-git-darwin-arm64": "0.2.0",
56
+ "@einsia/agent-git-win32-x64": "0.2.0"
56
57
  }
57
58
  }