devsync-ai 0.1.0-rc.6 → 0.1.0-rc.8

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/README.md CHANGED
@@ -1,10 +1,69 @@
1
1
  # devsync-ai
2
2
 
3
- This package name is reserved for DevSync (https://devsync.ai), a neutral command surface for AI coding agents.
3
+ DevSync (https://devsync.ai): one dashboard and command line for your AI coding agents (Claude Code, Codex and more), with memory that follows you across machines.
4
4
 
5
- It is under development. This 0.0.1 release is a placeholder and contains no functionality.
5
+ Read this from any machine, before or after installing:
6
6
 
7
- ## Distribution
7
+ ```
8
+ npm view devsync-ai@next readme # before installing
9
+ cat "$(npm root -g)/devsync-ai/README.md" # after installing
10
+ ```
11
+
12
+ ## Upgrading to 0.1.0-rc.8 (the Go version)
13
+
14
+ Do this on every machine, in a terminal on that machine. Your Claude sessions keep running throughout: DevSync starts them as background sessions, and quitting DevSync only closes its view of them.
15
+
16
+ 1. **Stop the old DevSync.** Quit every DevSync dashboard (`q`), then:
17
+ ```
18
+ devsync daemon stop
19
+ ```
20
+ Never run rc.7 and rc.8 at the same time: an old process left open beside the new one can corrupt the store.
21
+ 2. **Install:**
22
+ ```
23
+ npm install -g devsync-ai@next
24
+ devsync --version # devsync 0.1.0-rc.8
25
+ ```
26
+ 3. **Set it up:**
27
+ ```
28
+ devsync install-hooks # puts the new hook in ~/.devsync/bin and points Claude Code at it
29
+ devsync mcp sync # registers DevSync's MCP server with Claude Code
30
+ devsync doctor # expect: hooks 14 of 14, no errors
31
+ ```
32
+ 4. **Shared memory (optional).** Link your private rules repo. On a work computer, add `--pull-only`: it takes rules and can never send any.
33
+ ```
34
+ devsync global init <your-rules-repo-url> --pull-only
35
+ devsync global status
36
+ ```
37
+ On your own machine, leave out `--pull-only`. `devsync global push` shows exactly what will leave the machine and asks y/N.
38
+
39
+ ## Rolling back if rc.8 fails
40
+
41
+ rc.8 uses the same store as rc.7 (schema v36), so rc.7 opens it unchanged.
42
+
43
+ 1. Quit every DevSync dashboard (`q`), then `devsync daemon stop`.
44
+ 2. Put rc.7 back:
45
+ ```
46
+ npm install -g devsync-ai@0.1.0-rc.7
47
+ devsync install-hooks # puts rc.7's hook back
48
+ devsync doctor
49
+ ```
50
+ 3. Only if the store itself went bad, restore a backup. DevSync makes one daily, and `devsync backup` makes one now:
51
+ ```
52
+ ls ~/.devsync/backups/
53
+ devsync store restore ~/.devsync/backups/devsync-<date>.db.gz
54
+ ```
55
+ It refuses while anything has the store open, and sets the old files aside instead of deleting them.
56
+
57
+ ## What's new in 0.1.0-rc.8
58
+
59
+ - DevSync is rebuilt in Go: same screens, commands and store, with the old bugs fixed.
60
+ - The store-corruption bug is fixed at its root.
61
+ - Pinned sessions load at launch (F1-F9 opens them at once), and a session follows a Remote Control switch instead of dropping you back on the dashboard.
62
+ - Remote Control is only on your own sessions, not the ones agents start.
63
+ - Auto-compact: sessions compact at 40% of the model's window. Change it with `devsync config set auto-compact <10..95|off>`.
64
+ - Shared memory across machines with `devsync global`.
65
+
66
+ ## For maintainers: distribution
8
67
 
9
68
  How DevSync ships on npm (decision D12). Nothing here is published by agents; the user publishes.
10
69
 
@@ -62,14 +121,13 @@ Agents build and pack; only the user publishes.
62
121
 
63
122
  ```
64
123
  scripts/build.sh 1.2.3 # dist/<platform>/{devsync,devsync-hook} + dist/SHA256SUMS
65
- scripts/test-build.sh # missing toolchains, reproducible host build, archs, no local paths
66
124
  scripts/pack.sh 1.2.3 # pack/devsync-ai-<platform>-1.2.3.tgz and pack/devsync-ai-1.2.3.tgz
67
125
  npm test # the launcher (node --test)
68
126
  ```
69
127
 
70
- `build.sh` builds the host and the Linux targets; the macOS targets build only on a Mac, because linking them needs Apple's SDK (chrono's local time zone pulls in CoreFoundation). With no platforms named it builds `linux-x64` and `linux-arm64`, plus both `darwin-*` on a Mac. Linux targets other than the host need `cargo-zigbuild` and `zig` (its header says how to add them). A release tag builds all four on GitHub runners, macOS natively on a Mac (`.github/workflows/release.yml`). `pack.sh` checks each binary against `dist/SHA256SUMS` and pins every platform package to exactly the same version.
128
+ `build.sh` builds the Go binaries (`go/cmd/devsync`, `go/cmd/devsync-hook`, cgo for SQLCipher) for the host's own platform; another platform needs its own C toolchain, so a release tag builds the four on GitHub runners of their own (`.github/workflows/release.yml`: Linux x64 and arm64 natively, both macOS arches on one Apple-silicon Mac). A release holds the Go binaries alone: no Rust binary. `pack.sh` checks each binary against `dist/SHA256SUMS` and pins every platform package to exactly the same version.
71
129
 
72
- To ship a release, bump the workspace version in `tui/Cargo.toml` on main, then run:
130
+ To ship a release, bump the version in `go/internal/version/version.go` and the workspace version in `tui/Cargo.toml` (`release.sh` reads the second) on main, then run:
73
131
 
74
132
  ```
75
133
  npm-devsync-ai/scripts/release.sh # the workspace version; --dry-run first to see the plan
@@ -77,6 +135,18 @@ npm-devsync-ai/scripts/release.sh # the workspace version; --dry-run
77
135
 
78
136
  It tags main as `v<version>` and pushes the tag (and main, if you say so), waits for the release workflow, downloads its tarballs and checks their names and versions, then publishes them in the order below with `--tag next` for a prerelease (`latest` otherwise; `--dist-tag` overrides). It asks before pushing and before publishing, and a rerun skips whatever is already done.
79
137
 
138
+ Without GitHub Actions (the release workflow can't run), the Rust-era local scripts below still describe the old zigbuild release and have not been moved to Go; build with `scripts/build.sh` on each platform and `scripts/pack.sh` instead:
139
+
140
+ ```
141
+ npm-devsync-ai/scripts/release-local.sh # gate, linux-x64 + linux-arm64 (zigbuild, glibc 2.28), npm test, pack, sums, install check
142
+ # on the Mac, from pack/devsync-src-<version>.tar.gz or a checkout of the same commit:
143
+ npm-devsync-ai/scripts/build-macos.sh --test # darwin-arm64 + darwin-x64 -> devsync-macos-<version>.tar.gz
144
+ # back here:
145
+ npm-devsync-ai/scripts/release-local.sh --macos devsync-macos-<version>.tar.gz
146
+ ```
147
+
148
+ `release-local.sh` stops before anything is tagged, pushed or published, and prints the publish commands; it exits 3 while the macOS binaries are missing. The macOS binaries can't be linked from Linux: they need Apple's SDK (Security for the Keychain, CoreFoundation), whose licence allows it only on Apple hardware. Each script's header lists its steps.
149
+
80
150
  By hand, publish the platform packages first, so `devsync-ai`'s optional dependencies exist when it lands:
81
151
 
82
152
  ```
package/bin/devsync.js CHANGED
@@ -45,7 +45,10 @@ function locate(platform, arch, resolve) {
45
45
 
46
46
  /** Run `binary` with `args`, passing signals on, and exit as it does. */
47
47
  function run(binary, args) {
48
- const child = spawn(binary, args, { stdio: 'inherit' });
48
+ // Handlers go in before the spawn: the binary can print and be signalled
49
+ // before this process runs again, and an unhandled SIGINT would kill the
50
+ // launcher and orphan the binary.
51
+ let child = null;
49
52
  const forward = ['SIGINT', 'SIGTERM', 'SIGHUP', 'SIGQUIT'];
50
53
  const handlers = forward.map((sig) => {
51
54
  const h = () => {
@@ -58,6 +61,7 @@ function run(binary, args) {
58
61
  process.on(sig, h);
59
62
  return [sig, h];
60
63
  });
64
+ child = spawn(binary, args, { stdio: 'inherit' });
61
65
  child.on('error', (e) => {
62
66
  process.stderr.write(`devsync: can't run ${binary}: ${e.message}\n`);
63
67
  process.exit(1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devsync-ai",
3
- "version": "0.1.0-rc.6",
3
+ "version": "0.1.0-rc.8",
4
4
  "description": "DevSync (devsync.ai): one terminal screen over your coding-agent sessions, and the roadmap they work from.",
5
5
  "homepage": "https://devsync.ai",
6
6
  "keywords": [
@@ -19,9 +19,9 @@
19
19
  "node": ">=18"
20
20
  },
21
21
  "optionalDependencies": {
22
- "devsync-ai-linux-x64": "0.1.0-rc.6",
23
- "devsync-ai-linux-arm64": "0.1.0-rc.6",
24
- "devsync-ai-darwin-x64": "0.1.0-rc.6",
25
- "devsync-ai-darwin-arm64": "0.1.0-rc.6"
22
+ "devsync-ai-linux-x64": "0.1.0-rc.8",
23
+ "devsync-ai-linux-arm64": "0.1.0-rc.8",
24
+ "devsync-ai-darwin-x64": "0.1.0-rc.8",
25
+ "devsync-ai-darwin-arm64": "0.1.0-rc.8"
26
26
  }
27
27
  }