@askalf/claude-sync 0.1.0 → 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/README.md +37 -4
- package/dist/cli.js +154 -48
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +31 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/ssh.d.ts +66 -0
- package/dist/ssh.d.ts.map +1 -0
- package/dist/ssh.js +216 -0
- package/dist/ssh.js.map +1 -0
- package/dist/transport.d.ts +33 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +35 -0
- package/dist/transport.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -22,7 +22,7 @@ Claude Code stores sessions locally at `~/.claude/projects/<encoded-cwd>/<sessio
|
|
|
22
22
|
`claude-sync` solves both:
|
|
23
23
|
|
|
24
24
|
- **Canonical project key** = `git:<host>/<owner>/<repo>`, derived from the git remote. Same logical repo → same key, regardless of where it's checked out or which protocol you cloned with — SSH and HTTPS remotes normalize to the same key. (Falls back to `name:<basename>` when there's no git remote.)
|
|
25
|
-
- **You choose the cadence.** `push` from machine A and `pull` on machine B by hand, or run `claude-sync watch` to push-on-change and pull-on-interval automatically. The transport is a directory you nominate (Dropbox / iCloud / Syncthing / a USB stick)
|
|
25
|
+
- **You choose the cadence.** `push` from machine A and `pull` on machine B by hand, or run `claude-sync watch` to push-on-change and pull-on-interval automatically. The transport is either a local directory you nominate (Dropbox / iCloud / Syncthing / a USB stick) **or a directory on a remote host over SSH** (a dev box). Each machine writes its own file under its own machine name, so two machines pushing the same session don't collide.
|
|
26
26
|
|
|
27
27
|
## Use it
|
|
28
28
|
|
|
@@ -87,6 +87,32 @@ It's still poll-based, not real-time co-editing: don't run the *same* session
|
|
|
87
87
|
live on two machines at once (see [Concurrency](#concurrency)). Watch is for
|
|
88
88
|
"pick up where the other machine left off without thinking about it."
|
|
89
89
|
|
|
90
|
+
### Sync over SSH (no Dropbox needed)
|
|
91
|
+
|
|
92
|
+
If you run Claude Code on a **dev server** and on a **laptop**, point the
|
|
93
|
+
transport straight at a directory on the server — no third-party sync folder in
|
|
94
|
+
the middle:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# On the laptop: the syncDir lives on the remote box, reached over SSH.
|
|
98
|
+
claude-sync init --ssh me@devbox:/home/me/claude-sync --name laptop
|
|
99
|
+
claude-sync doctor # live connectivity + remote-dir check
|
|
100
|
+
|
|
101
|
+
# On the server: a plain filesystem transport pointed at the same dir.
|
|
102
|
+
claude-sync init /home/me/claude-sync --name devbox
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Now `push` / `pull` / `watch` on the laptop shuttle sessions to and from the
|
|
106
|
+
server with no manual `scp`. Options: `--port <n>`, `--identity <keyfile>`.
|
|
107
|
+
It uses your system `ssh`, honors your `~/.ssh/config`, runs in `BatchMode`
|
|
108
|
+
(so it fails fast instead of prompting), and multiplexes connections on
|
|
109
|
+
macOS/Linux so a `pull`'s round-trips share one SSH session.
|
|
110
|
+
|
|
111
|
+
> The remote layout is identical to the filesystem transport, so the server's
|
|
112
|
+
> `fs` transport and the laptop's `ssh` transport — both pointed at
|
|
113
|
+
> `/home/me/claude-sync` — interoperate. The remote host needs a POSIX shell
|
|
114
|
+
> with `find`/`tar` (any Linux box).
|
|
115
|
+
|
|
90
116
|
### Starting on a fresh clone
|
|
91
117
|
|
|
92
118
|
`pull` can only deliver a session to a directory it knows about. On a machine
|
|
@@ -133,6 +159,7 @@ So: use `watch` to hand a project *back and forth* between machines hands-free;
|
|
|
133
159
|
|
|
134
160
|
```text
|
|
135
161
|
claude-sync init <syncDir> [--name <machine>]
|
|
162
|
+
claude-sync init --ssh <[user@]host:/path> [--port <n>] [--identity <keyfile>] [--name <machine>]
|
|
136
163
|
claude-sync list
|
|
137
164
|
claude-sync register [cwd]
|
|
138
165
|
claude-sync export [session-id] [-o <file>]
|
|
@@ -168,7 +195,7 @@ Schema-versioned. Version 1 is the only thing the current release understands; i
|
|
|
168
195
|
## What it isn't
|
|
169
196
|
|
|
170
197
|
- **Not real-time co-editing.** `watch` polls on an interval; it isn't a locking protocol. If both machines drive the *same* session simultaneously, the second to sync overwrites the other's in-progress copy (the loser is kept as `<id>-copy.jsonl`). Use it to hand a project between machines, not to co-edit one session live.
|
|
171
|
-
- **Not a relay service.**
|
|
198
|
+
- **Not a relay service.** Two transports ship — a local synced folder and a remote directory over SSH. There's no hosted relay; S3 / gist / WebSocket transports would be straightforward additions on the `Transport` interface, but aren't shipped yet.
|
|
172
199
|
- **Not a CC re-implementation.** It just shuffles JSONL. CC's session schema can change without breaking claude-sync — we never parse the events.
|
|
173
200
|
|
|
174
201
|
## Library API
|
|
@@ -180,11 +207,17 @@ import {
|
|
|
180
207
|
listSessions, listSessionStats, countSessionLines, readSession, writeSession,
|
|
181
208
|
buildCcsync, parseCcsync, readCcsyncFile, writeCcsyncFile,
|
|
182
209
|
projectKey, normalizeGitRemote, registerProject, registerProjectKey, lookupCwd,
|
|
183
|
-
|
|
210
|
+
// Transports: the abstraction + both backends.
|
|
211
|
+
createTransport, resolveTransportConfig, FsTransport, SshTransport,
|
|
212
|
+
type Transport, type TransportConfig,
|
|
184
213
|
} from '@askalf/claude-sync';
|
|
185
214
|
```
|
|
186
215
|
|
|
187
|
-
|
|
216
|
+
Everything is built on these exports — `listSessionStats` for cheap change
|
|
217
|
+
detection, the `Transport` interface (`push` / `listEntries` / …) for the sync,
|
|
218
|
+
`registerProject` for first-contact. A custom transport is one class
|
|
219
|
+
implementing `Transport`; `SshTransport` takes an injectable `SshExecutor`, so
|
|
220
|
+
you can wrap it or swap the wire entirely.
|
|
188
221
|
|
|
189
222
|
See `src/index.ts` for the full surface. Zero runtime dependencies.
|
|
190
223
|
|
package/dist/cli.js
CHANGED
|
@@ -20,20 +20,23 @@
|
|
|
20
20
|
import { existsSync } from 'node:fs';
|
|
21
21
|
import { resolve } from 'node:path';
|
|
22
22
|
import { VERSION } from './index.js';
|
|
23
|
-
import { loadConfig, saveConfig, configExists, buildDefaultConfig, } from './config.js';
|
|
23
|
+
import { loadConfig, saveConfig, configExists, buildDefaultConfig, defaultMachineName, resolveTransportConfig, } from './config.js';
|
|
24
24
|
import { encodeProjectDir, registerProject, registerProjectKey, loadRegistry, lookupCwd, claudeProjectsRoot, } from './project.js';
|
|
25
25
|
import { listSessions, listSessionStats, countSessionLines, readSession, writeSession, assignFreshId, } from './session.js';
|
|
26
26
|
import { buildCcsync, readCcsyncFile, writeCcsyncFile, } from './format.js';
|
|
27
|
-
import {
|
|
27
|
+
import { createTransport, } from './transport.js';
|
|
28
28
|
const HELP = `claude-sync ${VERSION}
|
|
29
29
|
|
|
30
30
|
Usage: claude-sync <command> [options]
|
|
31
31
|
|
|
32
32
|
Commands:
|
|
33
33
|
init <syncDir> [--name <machine>]
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
init --ssh <[user@]host:/path> [--port <n>] [--identity <keyfile>] [--name <machine>]
|
|
35
|
+
Scaffold ~/.claude-sync/config.json. The first form syncs through a
|
|
36
|
+
local <syncDir> mirrored across machines (Dropbox, iCloud, Syncthing,
|
|
37
|
+
a USB drive). The --ssh form syncs to a directory on a remote host
|
|
38
|
+
over SSH (a dev box) — handy when you run Claude Code on a server and
|
|
39
|
+
a laptop. --name defaults to your hostname.
|
|
37
40
|
|
|
38
41
|
list
|
|
39
42
|
List Claude Code sessions for the current working directory,
|
|
@@ -106,17 +109,88 @@ async function main(argv) {
|
|
|
106
109
|
}
|
|
107
110
|
// ── init ───────────────────────────────────────────────────────────
|
|
108
111
|
function cmdInit(args) {
|
|
112
|
+
const nameIdx = args.indexOf('--name');
|
|
113
|
+
const machineName = nameIdx >= 0 ? args[nameIdx + 1] : undefined;
|
|
114
|
+
if (nameIdx >= 0 && (!machineName || machineName.startsWith('--'))) {
|
|
115
|
+
process.stderr.write('Error: --name requires a value.\n');
|
|
116
|
+
return 1;
|
|
117
|
+
}
|
|
118
|
+
// Validate the invocation BEFORE checking for an existing config, so a
|
|
119
|
+
// malformed `init` always reports the usage error, never "config exists".
|
|
120
|
+
const exists = () => {
|
|
121
|
+
if (configExists()) {
|
|
122
|
+
process.stderr.write('Config already exists at ~/.claude-sync/config.json. Edit it manually to change settings.\n');
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
return false;
|
|
126
|
+
};
|
|
127
|
+
// ── SSH transport ──
|
|
128
|
+
const sshIdx = args.indexOf('--ssh');
|
|
129
|
+
if (sshIdx >= 0) {
|
|
130
|
+
const target = args[sshIdx + 1];
|
|
131
|
+
if (!target || target.startsWith('--')) {
|
|
132
|
+
process.stderr.write('Error: --ssh requires a target: <[user@]host:/path>\n');
|
|
133
|
+
return 1;
|
|
134
|
+
}
|
|
135
|
+
const m = /^(?:([^@]+)@)?([^@:]+):(.+)$/.exec(target);
|
|
136
|
+
const user = m?.[1];
|
|
137
|
+
const host = m?.[2];
|
|
138
|
+
const dir = m?.[3];
|
|
139
|
+
if (!m || !host || !dir) {
|
|
140
|
+
process.stderr.write('Error: --ssh target must look like [user@]host:/path (IPv6 literals not supported).\n');
|
|
141
|
+
return 1;
|
|
142
|
+
}
|
|
143
|
+
let port;
|
|
144
|
+
const portIdx = args.indexOf('--port');
|
|
145
|
+
if (portIdx >= 0) {
|
|
146
|
+
const pv = Number(args[portIdx + 1]);
|
|
147
|
+
if (!Number.isInteger(pv) || pv < 1 || pv > 65535) {
|
|
148
|
+
process.stderr.write('Error: --port must be an integer 1–65535.\n');
|
|
149
|
+
return 1;
|
|
150
|
+
}
|
|
151
|
+
port = pv;
|
|
152
|
+
}
|
|
153
|
+
const idIdx = args.indexOf('--identity');
|
|
154
|
+
const identityFile = idIdx >= 0 ? args[idIdx + 1] : undefined;
|
|
155
|
+
if (idIdx >= 0 && (!identityFile || identityFile.startsWith('--'))) {
|
|
156
|
+
process.stderr.write('Error: --identity requires a path to a private key.\n');
|
|
157
|
+
return 1;
|
|
158
|
+
}
|
|
159
|
+
if (exists())
|
|
160
|
+
return 1;
|
|
161
|
+
const transport = {
|
|
162
|
+
type: 'ssh',
|
|
163
|
+
host,
|
|
164
|
+
dir,
|
|
165
|
+
...(user ? { user } : {}),
|
|
166
|
+
...(port !== undefined ? { port } : {}),
|
|
167
|
+
...(identityFile ? { identityFile } : {}),
|
|
168
|
+
};
|
|
169
|
+
const cfg = {
|
|
170
|
+
_schemaVersion: 1,
|
|
171
|
+
machineName: machineName ?? defaultMachineName(),
|
|
172
|
+
transport,
|
|
173
|
+
};
|
|
174
|
+
saveConfig(cfg);
|
|
175
|
+
process.stdout.write(`Created ~/.claude-sync/config.json\n` +
|
|
176
|
+
` transport: ssh ${user ? `${user}@` : ''}${host}${port ? `:${port}` : ''} ${dir}\n` +
|
|
177
|
+
` machineName: ${cfg.machineName}\n\n` +
|
|
178
|
+
`Next steps:\n` +
|
|
179
|
+
` 1. Check connectivity: \`claude-sync doctor\`.\n` +
|
|
180
|
+
` 2. Run \`claude-sync push\` (or \`watch\`) to ship a session to the remote box.\n` +
|
|
181
|
+
` 3. On the remote box: \`claude-sync init <that-path>\` (filesystem, different --name), then \`pull\`.\n`);
|
|
182
|
+
return 0;
|
|
183
|
+
}
|
|
184
|
+
// ── Filesystem transport ──
|
|
109
185
|
const syncDir = args[0];
|
|
110
186
|
if (!syncDir || syncDir.startsWith('--')) {
|
|
111
|
-
process.stderr.write('Error: <syncDir> is required.\
|
|
187
|
+
process.stderr.write('Error: <syncDir> is required.\n' +
|
|
188
|
+
'Usage: claude-sync init <syncDir> [--name <machine>]\n' +
|
|
189
|
+
' or: claude-sync init --ssh <[user@]host:/path> [--port <n>] [--identity <keyfile>] [--name <machine>]\n');
|
|
112
190
|
return 1;
|
|
113
191
|
}
|
|
114
|
-
|
|
115
|
-
const machineName = nameIdx >= 0 ? args[nameIdx + 1] : undefined;
|
|
116
|
-
if (configExists()) {
|
|
117
|
-
process.stderr.write('Config already exists at ~/.claude-sync/config.json. Edit it manually to change settings.\n');
|
|
192
|
+
if (exists())
|
|
118
193
|
return 1;
|
|
119
|
-
}
|
|
120
194
|
const cfg = buildDefaultConfig(resolve(syncDir), machineName);
|
|
121
195
|
saveConfig(cfg);
|
|
122
196
|
process.stdout.write(`Created ~/.claude-sync/config.json\n` +
|
|
@@ -220,12 +294,15 @@ function cmdPush(args) {
|
|
|
220
294
|
const cfg = mustLoadConfig();
|
|
221
295
|
if (!cfg)
|
|
222
296
|
return 1;
|
|
297
|
+
const transport = mustResolveTransport(cfg);
|
|
298
|
+
if (!transport)
|
|
299
|
+
return 1;
|
|
223
300
|
const cwd = process.cwd();
|
|
224
301
|
const sessionId = args[0] && !args[0].startsWith('-') ? args[0] : undefined;
|
|
225
302
|
const session = pickSession(cwd, sessionId);
|
|
226
303
|
if (!session)
|
|
227
304
|
return 1;
|
|
228
|
-
const written = exportToTransport(
|
|
305
|
+
const written = exportToTransport(transport, cwd, cfg.machineName, session);
|
|
229
306
|
process.stdout.write(`Pushed ${session.id} → ${written}\n`);
|
|
230
307
|
return 0;
|
|
231
308
|
}
|
|
@@ -234,11 +311,14 @@ function cmdPull(_args) {
|
|
|
234
311
|
const cfg = mustLoadConfig();
|
|
235
312
|
if (!cfg)
|
|
236
313
|
return 1;
|
|
237
|
-
|
|
238
|
-
|
|
314
|
+
const transport = mustResolveTransport(cfg);
|
|
315
|
+
if (!transport)
|
|
316
|
+
return 1;
|
|
317
|
+
if (transport.listProjectKeys().length === 0) {
|
|
318
|
+
process.stdout.write(`Nothing to pull — ${transport.describe()} is empty.\n`);
|
|
239
319
|
return 0;
|
|
240
320
|
}
|
|
241
|
-
const { imported, skipped } = runPull(cfg, {
|
|
321
|
+
const { imported, skipped } = runPull(transport, cfg.machineName, {
|
|
242
322
|
onSkip: (msg) => process.stdout.write(` ${msg}\n`),
|
|
243
323
|
});
|
|
244
324
|
process.stdout.write(`\nDone — imported ${imported} session(s), skipped ${skipped}.\n`);
|
|
@@ -252,9 +332,9 @@ function cmdPull(_args) {
|
|
|
252
332
|
* announced by `installCcsync` itself. Idempotent: a session already at
|
|
253
333
|
* or beyond the transport's line count is skipped, so repeated calls
|
|
254
334
|
* (every watch tick) do nothing once converged. */
|
|
255
|
-
function runPull(
|
|
335
|
+
function runPull(transport, machineName, opts = {}) {
|
|
256
336
|
const reg = loadRegistry();
|
|
257
|
-
const projectKeys = listProjectKeys(
|
|
337
|
+
const projectKeys = transport.listProjectKeys();
|
|
258
338
|
let imported = 0;
|
|
259
339
|
let skipped = 0;
|
|
260
340
|
for (const encodedKey of projectKeys) {
|
|
@@ -273,7 +353,7 @@ function runPull(cfg, opts = {}) {
|
|
|
273
353
|
}
|
|
274
354
|
// Per-session: take the freshest entry that's newer than what we
|
|
275
355
|
// already have locally.
|
|
276
|
-
const entries =
|
|
356
|
+
const entries = transport.listEntries(rawKey, machineName);
|
|
277
357
|
const localSessions = new Map(listSessions(cwd).map((s) => [s.id, s]));
|
|
278
358
|
for (const entry of entries) {
|
|
279
359
|
const local = localSessions.get(entry.file.sessionId);
|
|
@@ -294,6 +374,9 @@ async function cmdWatch(args) {
|
|
|
294
374
|
const cfg = mustLoadConfig();
|
|
295
375
|
if (!cfg)
|
|
296
376
|
return 1;
|
|
377
|
+
const transport = mustResolveTransport(cfg);
|
|
378
|
+
if (!transport)
|
|
379
|
+
return 1;
|
|
297
380
|
const once = args.includes('--once');
|
|
298
381
|
const pushAll = args.includes('--all');
|
|
299
382
|
let intervalSec = 10;
|
|
@@ -317,9 +400,9 @@ async function cmdWatch(args) {
|
|
|
317
400
|
? `session ${sessionId}`
|
|
318
401
|
: pushAll ? 'every changed session' : 'most-recent changed session';
|
|
319
402
|
process.stdout.write(`claude-sync watch — ${cfg.machineName}\n` +
|
|
320
|
-
` project:
|
|
321
|
-
` cwd:
|
|
322
|
-
`
|
|
403
|
+
` project: ${key}\n` +
|
|
404
|
+
` cwd: ${cwd}\n` +
|
|
405
|
+
` transport: ${transport.describe()}\n` +
|
|
323
406
|
` every ${intervalSec}s · push ${pushDesc} · pull all projects\n` +
|
|
324
407
|
` Ctrl-C to stop.\n\n`);
|
|
325
408
|
}
|
|
@@ -333,13 +416,13 @@ async function cmdWatch(args) {
|
|
|
333
416
|
try {
|
|
334
417
|
do {
|
|
335
418
|
try {
|
|
336
|
-
watchPushTick(
|
|
419
|
+
watchPushTick(transport, cwd, cfg.machineName, { sessionId, pushAll, lastPushed });
|
|
337
420
|
}
|
|
338
421
|
catch (err) {
|
|
339
422
|
process.stderr.write(` ! push error: ${err instanceof Error ? err.message : err}\n`);
|
|
340
423
|
}
|
|
341
424
|
try {
|
|
342
|
-
runPull(cfg);
|
|
425
|
+
runPull(transport, cfg.machineName);
|
|
343
426
|
}
|
|
344
427
|
catch (err) {
|
|
345
428
|
process.stderr.write(` ! pull error: ${err instanceof Error ? err.message : err}\n`);
|
|
@@ -361,7 +444,7 @@ async function cmdWatch(args) {
|
|
|
361
444
|
* last pushed them and ship each. Uses the stat-only listing (no line
|
|
362
445
|
* reads) for change detection, only counting lines for the few that
|
|
363
446
|
* actually changed. */
|
|
364
|
-
function watchPushTick(
|
|
447
|
+
function watchPushTick(transport, cwd, machineName, state) {
|
|
365
448
|
const stats = listSessionStats(cwd);
|
|
366
449
|
let candidates = stats;
|
|
367
450
|
if (state.sessionId) {
|
|
@@ -376,7 +459,7 @@ function watchPushTick(cfg, cwd, state) {
|
|
|
376
459
|
if (prev !== undefined && prev >= s.modifiedAt)
|
|
377
460
|
continue; // unchanged since last push
|
|
378
461
|
const lineCount = countSessionLines(s.path);
|
|
379
|
-
exportToTransport(
|
|
462
|
+
exportToTransport(transport, cwd, machineName, { id: s.id, path: s.path, lineCount });
|
|
380
463
|
state.lastPushed.set(s.id, s.modifiedAt);
|
|
381
464
|
process.stdout.write(` ↑ pushed ${s.id} (${lineCount} lines)\n`);
|
|
382
465
|
}
|
|
@@ -402,27 +485,39 @@ function cmdDoctor(_args) {
|
|
|
402
485
|
process.stdout.write(`claude-sync ${VERSION}\n\n`);
|
|
403
486
|
if (configExists()) {
|
|
404
487
|
const cfg = loadConfig();
|
|
405
|
-
ok(`config:
|
|
406
|
-
|
|
407
|
-
|
|
488
|
+
ok(`config: machineName ${cfg.machineName}`);
|
|
489
|
+
let transport = null;
|
|
490
|
+
try {
|
|
491
|
+
transport = createTransport(resolveTransportConfig(cfg));
|
|
492
|
+
}
|
|
493
|
+
catch (err) {
|
|
494
|
+
warn(`transport: ${err instanceof Error ? err.message : err}`);
|
|
408
495
|
}
|
|
409
|
-
|
|
496
|
+
if (transport) {
|
|
497
|
+
const h = transport.health();
|
|
498
|
+
if (h.ok)
|
|
499
|
+
ok(`transport: ${h.detail}`);
|
|
500
|
+
else
|
|
501
|
+
warn(`transport: ${h.detail}`);
|
|
410
502
|
// Duplicate-machineName footgun: pull self-filters files whose
|
|
411
503
|
// machineName matches ours, so if every file in the transport
|
|
412
504
|
// carries this machine's name (two machines sharing a hostname),
|
|
413
|
-
// pull silently imports nothing.
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
const
|
|
418
|
-
if (
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
`
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
505
|
+
// pull silently imports nothing. Only scan when the transport is
|
|
506
|
+
// reachable (avoids a confusing second error on an unreachable host).
|
|
507
|
+
if (h.ok) {
|
|
508
|
+
const machines = transport.listMachines();
|
|
509
|
+
const total = [...machines.values()].reduce((acc, n) => acc + n, 0);
|
|
510
|
+
if (total > 0) {
|
|
511
|
+
const peers = [...machines.keys()].filter((m) => m !== cfg.machineName);
|
|
512
|
+
if (peers.length === 0) {
|
|
513
|
+
warn(`all ${total} file(s) in the transport use machineName "${cfg.machineName}" — ` +
|
|
514
|
+
`the same as this machine. \`pull\` self-filters these, so it imports nothing. ` +
|
|
515
|
+
`Give each machine a distinct name: re-run \`init --name <name>\` on a fresh ` +
|
|
516
|
+
`machine, or edit machineName in ~/.claude-sync/config.json.`);
|
|
517
|
+
}
|
|
518
|
+
else {
|
|
519
|
+
ok(`transport peers: ${peers.sort().join(', ')} (${total} file(s) total)`);
|
|
520
|
+
}
|
|
426
521
|
}
|
|
427
522
|
}
|
|
428
523
|
}
|
|
@@ -455,22 +550,33 @@ function mustLoadConfig() {
|
|
|
455
550
|
}
|
|
456
551
|
return loadConfig();
|
|
457
552
|
}
|
|
553
|
+
/** Resolve the configured transport (fs or ssh), printing a helpful error
|
|
554
|
+
* and returning null if the config has none. */
|
|
555
|
+
function mustResolveTransport(cfg) {
|
|
556
|
+
try {
|
|
557
|
+
return createTransport(resolveTransportConfig(cfg));
|
|
558
|
+
}
|
|
559
|
+
catch (err) {
|
|
560
|
+
process.stderr.write(`${err instanceof Error ? err.message : err}\n`);
|
|
561
|
+
return null;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
458
564
|
/** Build a `.ccsync` for `session` (in `cwd`) and write it to the
|
|
459
|
-
*
|
|
460
|
-
*
|
|
461
|
-
*
|
|
462
|
-
function exportToTransport(
|
|
565
|
+
* transport, returning the written location. Registers the cwd's project
|
|
566
|
+
* key as a side effect, so pushing from a never-before-seen directory
|
|
567
|
+
* self-registers. Shared by `push` and `watch`. */
|
|
568
|
+
function exportToTransport(transport, cwd, machineName, session) {
|
|
463
569
|
const { key } = registerProject(cwd);
|
|
464
570
|
const ccsync = buildCcsync({
|
|
465
571
|
sessionId: session.id,
|
|
466
572
|
projectKey: key,
|
|
467
573
|
originalCwd: cwd,
|
|
468
|
-
machineName
|
|
574
|
+
machineName,
|
|
469
575
|
exportedAt: Date.now(),
|
|
470
576
|
lineCount: session.lineCount,
|
|
471
577
|
jsonl: readSession(session.path),
|
|
472
578
|
});
|
|
473
|
-
return
|
|
579
|
+
return transport.push(ccsync);
|
|
474
580
|
}
|
|
475
581
|
function pickSession(cwd, requestedId) {
|
|
476
582
|
const sessions = listSessions(cwd);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -19,16 +19,43 @@
|
|
|
19
19
|
* overwriting each other (machineName disambiguates)
|
|
20
20
|
* - `pull` can list project subdirs and import the freshest file
|
|
21
21
|
*/
|
|
22
|
+
/** Where `.ccsync` files are shuttled. Two backends:
|
|
23
|
+
* - `fs` — a local directory (Dropbox / iCloud / Syncthing / USB).
|
|
24
|
+
* - `ssh` — a directory on a remote host reached over SSH (a dev box).
|
|
25
|
+
* The optional `ssh` fields default sensibly (current user, port 22,
|
|
26
|
+
* ssh's default identity). */
|
|
27
|
+
export type TransportConfig = {
|
|
28
|
+
type: 'fs';
|
|
29
|
+
dir: string;
|
|
30
|
+
} | {
|
|
31
|
+
type: 'ssh';
|
|
32
|
+
/** Remote hostname or IP. */
|
|
33
|
+
host: string;
|
|
34
|
+
/** Absolute (or ~-relative) directory on the remote host. */
|
|
35
|
+
dir: string;
|
|
36
|
+
/** SSH user. Defaults to ssh's own default (current user / ssh_config). */
|
|
37
|
+
user?: string;
|
|
38
|
+
/** SSH port. Defaults to 22. */
|
|
39
|
+
port?: number;
|
|
40
|
+
/** Path to a private key (`ssh -i`). Defaults to ssh's default keys. */
|
|
41
|
+
identityFile?: string;
|
|
42
|
+
};
|
|
22
43
|
export interface Config {
|
|
23
44
|
_schemaVersion: 1;
|
|
24
|
-
/** Path to the sync directory. Anything that ends up here gets
|
|
25
|
-
* picked up by `claude-sync pull` on the other side. The user
|
|
26
|
-
* points this at a Dropbox / iCloud / Syncthing-mirrored path. */
|
|
27
|
-
syncDir: string;
|
|
28
45
|
/** Machine name used in .ccsync metadata. Defaults to `os.hostname()`
|
|
29
46
|
* at init time; can be changed manually. */
|
|
30
47
|
machineName: string;
|
|
48
|
+
/** Legacy filesystem sync directory. Still honored for back-compat —
|
|
49
|
+
* a config with only `syncDir` is treated as `transport: {type:'fs'}`.
|
|
50
|
+
* New configs written by `init` use `transport` instead. */
|
|
51
|
+
syncDir?: string;
|
|
52
|
+
/** Explicit transport backend. When present, takes precedence over the
|
|
53
|
+
* legacy `syncDir`. */
|
|
54
|
+
transport?: TransportConfig;
|
|
31
55
|
}
|
|
56
|
+
/** Resolve the effective transport from a (possibly legacy) config.
|
|
57
|
+
* Precedence: explicit `transport` → legacy `syncDir` (as `fs`) → error. */
|
|
58
|
+
export declare function resolveTransportConfig(cfg: Config): TransportConfig;
|
|
32
59
|
export declare function configExists(): boolean;
|
|
33
60
|
export declare function loadConfig(): Config;
|
|
34
61
|
export declare function saveConfig(cfg: Config): void;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAOH,MAAM,WAAW,MAAM;IACrB,cAAc,EAAE,CAAC,CAAC;IAClB;;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAOH;;;;+BAI+B;AAC/B,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC3B;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,GAAG,EAAE,MAAM,CAAC;IACZ,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEN,MAAM,WAAW,MAAM;IACrB,cAAc,EAAE,CAAC,CAAC;IAClB;iDAC6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB;;iEAE6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;4BACwB;IACxB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED;6EAC6E;AAC7E,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAOnE;AAID,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAYnC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI5C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAMhF"}
|
package/dist/config.js
CHANGED
|
@@ -23,6 +23,16 @@ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
|
23
23
|
import { dirname, join } from 'node:path';
|
|
24
24
|
import { hostname } from 'node:os';
|
|
25
25
|
import { syncRoot, stripBom } from './project.js';
|
|
26
|
+
/** Resolve the effective transport from a (possibly legacy) config.
|
|
27
|
+
* Precedence: explicit `transport` → legacy `syncDir` (as `fs`) → error. */
|
|
28
|
+
export function resolveTransportConfig(cfg) {
|
|
29
|
+
if (cfg.transport)
|
|
30
|
+
return cfg.transport;
|
|
31
|
+
if (cfg.syncDir)
|
|
32
|
+
return { type: 'fs', dir: cfg.syncDir };
|
|
33
|
+
throw new Error('Config has no transport configured. Re-run `claude-sync init <syncDir>` ' +
|
|
34
|
+
'or `claude-sync init --ssh <[user@]host:/path>`.');
|
|
35
|
+
}
|
|
26
36
|
const CONFIG_PATH = () => join(syncRoot(), 'config.json');
|
|
27
37
|
export function configExists() {
|
|
28
38
|
return existsSync(CONFIG_PATH());
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAqClD;6EAC6E;AAC7E,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,IAAI,GAAG,CAAC,SAAS;QAAE,OAAO,GAAG,CAAC,SAAS,CAAC;IACxC,IAAI,GAAG,CAAC,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IACzD,MAAM,IAAI,KAAK,CACb,0EAA0E;QAC1E,kDAAkD,CACnD,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,CAAC;AAElE,MAAM,UAAU,YAAY;IAC1B,OAAO,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,sBAAsB,IAAI,6CAA6C,CACxE,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAW,CAAC;IAC3E,IAAI,MAAM,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,sCAAsC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9E,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,oEAAoE;IACpE,4CAA4C;IAC5C,OAAO,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,WAAoB;IACtE,OAAO;QACL,cAAc,EAAE,CAAC;QACjB,OAAO;QACP,WAAW,EAAE,WAAW,IAAI,kBAAkB,EAAE;KACjD,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
export { encodeProjectDir, stripBom, claudeProjectsRoot, syncRoot, gitRemoteUrl, normalizeGitRemote, projectKey, loadRegistry, saveRegistry, registerProject, registerProjectKey, lookupCwd, type ProjectRegistry, } from './project.js';
|
|
11
11
|
export { listSessions, listSessionStats, countSessionLines, readSession, writeSession, assignFreshId, type SessionMetadata, type SessionStat, } from './session.js';
|
|
12
12
|
export { buildCcsync, serializeCcsync, parseCcsync, readCcsyncFile, writeCcsyncFile, CURRENT_SCHEMA_VERSION, type CcsyncFile, } from './format.js';
|
|
13
|
-
export { loadConfig, saveConfig, configExists, defaultMachineName, buildDefaultConfig, type Config, } from './config.js';
|
|
14
|
-
export { projectSubdir, pushToTransport, listTransport, listTransportMachines, listProjectKeys, type TransportEntry, } from './transport.js';
|
|
13
|
+
export { loadConfig, saveConfig, configExists, defaultMachineName, buildDefaultConfig, resolveTransportConfig, type Config, type TransportConfig, } from './config.js';
|
|
14
|
+
export { projectSubdir, pushToTransport, listTransport, listTransportMachines, listProjectKeys, createTransport, FsTransport, type Transport, type TransportEntry, type TransportHealth, } from './transport.js';
|
|
15
|
+
export { SshTransport, realSshExecutor, buildSshArgs, shQuote, posixJoin, type SshExecutor, type SshExecResult, type SshConfig, } from './ssh.js';
|
|
15
16
|
/** Single source of truth: read the version straight from package.json
|
|
16
17
|
* so the published version can never drift from the runtime/CLI banner.
|
|
17
18
|
* dist layout is `dist/index.js`, so `../package.json` resolves to the
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,SAAS,EACT,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,KAAK,eAAe,EACpB,KAAK,WAAW,GACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,WAAW,EACX,eAAe,EACf,WAAW,EACX,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,SAAS,EACT,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,KAAK,eAAe,EACpB,KAAK,WAAW,GACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,WAAW,EACX,eAAe,EACf,WAAW,EACX,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,KAAK,MAAM,EACX,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,aAAa,EACb,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,WAAW,EACX,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,OAAO,EACP,SAAS,EACT,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,SAAS,GACf,MAAM,UAAU,CAAC;AAElB;;;8CAG8C;AAC9C,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -11,8 +11,9 @@ import pkg from '../package.json' with { type: 'json' };
|
|
|
11
11
|
export { encodeProjectDir, stripBom, claudeProjectsRoot, syncRoot, gitRemoteUrl, normalizeGitRemote, projectKey, loadRegistry, saveRegistry, registerProject, registerProjectKey, lookupCwd, } from './project.js';
|
|
12
12
|
export { listSessions, listSessionStats, countSessionLines, readSession, writeSession, assignFreshId, } from './session.js';
|
|
13
13
|
export { buildCcsync, serializeCcsync, parseCcsync, readCcsyncFile, writeCcsyncFile, CURRENT_SCHEMA_VERSION, } from './format.js';
|
|
14
|
-
export { loadConfig, saveConfig, configExists, defaultMachineName, buildDefaultConfig, } from './config.js';
|
|
15
|
-
export { projectSubdir, pushToTransport, listTransport, listTransportMachines, listProjectKeys, } from './transport.js';
|
|
14
|
+
export { loadConfig, saveConfig, configExists, defaultMachineName, buildDefaultConfig, resolveTransportConfig, } from './config.js';
|
|
15
|
+
export { projectSubdir, pushToTransport, listTransport, listTransportMachines, listProjectKeys, createTransport, FsTransport, } from './transport.js';
|
|
16
|
+
export { SshTransport, realSshExecutor, buildSshArgs, shQuote, posixJoin, } from './ssh.js';
|
|
16
17
|
/** Single source of truth: read the version straight from package.json
|
|
17
18
|
* so the published version can never drift from the runtime/CLI banner.
|
|
18
19
|
* dist layout is `dist/index.js`, so `../package.json` resolves to the
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAExD,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,SAAS,GAEV,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,aAAa,GAGd,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,WAAW,EACX,eAAe,EACf,WAAW,EACX,cAAc,EACd,eAAe,EACf,sBAAsB,GAEvB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAExD,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,SAAS,GAEV,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,aAAa,GAGd,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,WAAW,EACX,eAAe,EACf,WAAW,EACX,cAAc,EACd,eAAe,EACf,sBAAsB,GAEvB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,GAGvB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,aAAa,EACb,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,WAAW,GAIZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,OAAO,EACP,SAAS,GAIV,MAAM,UAAU,CAAC;AAElB;;;8CAG8C;AAC9C,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC"}
|
package/dist/ssh.d.ts
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSH transport — `.ccsync` files live in a directory on a remote host,
|
|
3
|
+
* reached over SSH. The target audience is "I run Claude Code on a dev
|
|
4
|
+
* server AND on my laptop"; the round-trip validation showed manual `scp`
|
|
5
|
+
* shuttling was the real friction, so this makes the remote box a
|
|
6
|
+
* first-class transport.
|
|
7
|
+
*
|
|
8
|
+
* Mechanics: every operation is one (or a few) `ssh host <command>` calls,
|
|
9
|
+
* where <command> is a small POSIX shell pipeline (mkdir / cat / mv /
|
|
10
|
+
* find). The remote layout is identical to the filesystem transport —
|
|
11
|
+
* `<dir>/<encoded-project-key>/<sessionId>-<machine>.ccsync` — so the two
|
|
12
|
+
* backends are wire-compatible (a server on `fs` and a laptop on `ssh`
|
|
13
|
+
* pointed at the same dir sync cleanly).
|
|
14
|
+
*
|
|
15
|
+
* Quoting: ssh concatenates its command args with spaces and hands the
|
|
16
|
+
* result to the remote login shell, which re-parses it. So every
|
|
17
|
+
* interpolated value is POSIX single-quoted via `shQuote`; file *lists*
|
|
18
|
+
* are never interpolated (we `find` them remotely and read by path).
|
|
19
|
+
*
|
|
20
|
+
* Testability: the actual `ssh` invocation sits behind `SshExecutor`.
|
|
21
|
+
* Tests inject a fake executor (to assert command construction) or a
|
|
22
|
+
* local-shell executor (to run the real pipelines against a temp dir
|
|
23
|
+
* without an sshd). `realSshExecutor` is the production one.
|
|
24
|
+
*/
|
|
25
|
+
import { type CcsyncFile } from './format.js';
|
|
26
|
+
import type { Transport, TransportEntry, TransportHealth } from './transport.js';
|
|
27
|
+
import type { TransportConfig } from './config.js';
|
|
28
|
+
/** The `ssh` member of the transport-config union. */
|
|
29
|
+
export type SshConfig = Extract<TransportConfig, {
|
|
30
|
+
type: 'ssh';
|
|
31
|
+
}>;
|
|
32
|
+
export interface SshExecResult {
|
|
33
|
+
status: number;
|
|
34
|
+
stdout: string;
|
|
35
|
+
stderr: string;
|
|
36
|
+
}
|
|
37
|
+
/** Runs a single command on the remote host, optionally piping `input` to
|
|
38
|
+
* its stdin, and returns the captured result. The production impl shells
|
|
39
|
+
* out to `ssh`; tests inject fakes. */
|
|
40
|
+
export interface SshExecutor {
|
|
41
|
+
run(remoteCommand: string, input?: string): SshExecResult;
|
|
42
|
+
}
|
|
43
|
+
/** POSIX single-quote `s` for safe interpolation into a remote shell
|
|
44
|
+
* command: wrap in '…' and rewrite each embedded ' as '\'' . */
|
|
45
|
+
export declare function shQuote(s: string): string;
|
|
46
|
+
/** Join remote (POSIX) path segments with `/`, trimming stray slashes but
|
|
47
|
+
* preserving a leading `/` on the first segment (absolute remote dirs). */
|
|
48
|
+
export declare function posixJoin(...parts: string[]): string;
|
|
49
|
+
/** Build the `ssh` argv (everything before the remote command). Pure +
|
|
50
|
+
* exported so it can be unit-tested without spawning. */
|
|
51
|
+
export declare function buildSshArgs(cfg: SshConfig, controlPath?: string): string[];
|
|
52
|
+
/** Production executor: shells out to the system `ssh`. */
|
|
53
|
+
export declare function realSshExecutor(cfg: SshConfig): SshExecutor;
|
|
54
|
+
export declare class SshTransport implements Transport {
|
|
55
|
+
private readonly cfg;
|
|
56
|
+
private readonly exec;
|
|
57
|
+
constructor(cfg: SshConfig, exec?: SshExecutor);
|
|
58
|
+
describe(): string;
|
|
59
|
+
push(file: CcsyncFile): string;
|
|
60
|
+
listProjectKeys(): string[];
|
|
61
|
+
listEntries(projectKey: string, selfMachineName: string): TransportEntry[];
|
|
62
|
+
listMachines(): Map<string, number>;
|
|
63
|
+
health(): TransportHealth;
|
|
64
|
+
private readFile;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=ssh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../src/ssh.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAOH,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,sDAAsD;AACtD,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,EAAE;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC;AAElE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;wCAEwC;AACxC,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;CAC3D;AAED;iEACiE;AACjE,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzC;AAaD;4EAC4E;AAC5E,wBAAgB,SAAS,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAKpD;AAMD;0DAC0D;AAC1D,wBAAgB,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAkB3E;AAcD,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,WAAW,CAa3D;AAiBD,qBAAa,YAAa,YAAW,SAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;gBAEvB,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,WAAW;IAK9C,QAAQ,IAAI,MAAM;IAMlB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAgB9B,eAAe,IAAI,MAAM,EAAE;IAO3B,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,cAAc,EAAE;IAyB1E,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAmBnC,MAAM,IAAI,eAAe;IAYzB,OAAO,CAAC,QAAQ;CAIjB"}
|
package/dist/ssh.js
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSH transport — `.ccsync` files live in a directory on a remote host,
|
|
3
|
+
* reached over SSH. The target audience is "I run Claude Code on a dev
|
|
4
|
+
* server AND on my laptop"; the round-trip validation showed manual `scp`
|
|
5
|
+
* shuttling was the real friction, so this makes the remote box a
|
|
6
|
+
* first-class transport.
|
|
7
|
+
*
|
|
8
|
+
* Mechanics: every operation is one (or a few) `ssh host <command>` calls,
|
|
9
|
+
* where <command> is a small POSIX shell pipeline (mkdir / cat / mv /
|
|
10
|
+
* find). The remote layout is identical to the filesystem transport —
|
|
11
|
+
* `<dir>/<encoded-project-key>/<sessionId>-<machine>.ccsync` — so the two
|
|
12
|
+
* backends are wire-compatible (a server on `fs` and a laptop on `ssh`
|
|
13
|
+
* pointed at the same dir sync cleanly).
|
|
14
|
+
*
|
|
15
|
+
* Quoting: ssh concatenates its command args with spaces and hands the
|
|
16
|
+
* result to the remote login shell, which re-parses it. So every
|
|
17
|
+
* interpolated value is POSIX single-quoted via `shQuote`; file *lists*
|
|
18
|
+
* are never interpolated (we `find` them remotely and read by path).
|
|
19
|
+
*
|
|
20
|
+
* Testability: the actual `ssh` invocation sits behind `SshExecutor`.
|
|
21
|
+
* Tests inject a fake executor (to assert command construction) or a
|
|
22
|
+
* local-shell executor (to run the real pipelines against a temp dir
|
|
23
|
+
* without an sshd). `realSshExecutor` is the production one.
|
|
24
|
+
*/
|
|
25
|
+
import { spawnSync } from 'node:child_process';
|
|
26
|
+
import { createHash } from 'node:crypto';
|
|
27
|
+
import { tmpdir, homedir } from 'node:os';
|
|
28
|
+
import { join } from 'node:path';
|
|
29
|
+
import { encodeProjectDir } from './project.js';
|
|
30
|
+
import { parseCcsync, serializeCcsync } from './format.js';
|
|
31
|
+
/** POSIX single-quote `s` for safe interpolation into a remote shell
|
|
32
|
+
* command: wrap in '…' and rewrite each embedded ' as '\'' . */
|
|
33
|
+
export function shQuote(s) {
|
|
34
|
+
return `'${s.split("'").join("'\\''")}'`;
|
|
35
|
+
}
|
|
36
|
+
/** Strip leading and/or trailing `/` with a linear two-pointer scan — NOT
|
|
37
|
+
* `/\/+$/`, which is a polynomial-ReDoS vector on the config-derived path
|
|
38
|
+
* (CodeQL flags it). */
|
|
39
|
+
function trimSlashes(s, leading, trailing) {
|
|
40
|
+
let lo = 0;
|
|
41
|
+
let hi = s.length;
|
|
42
|
+
if (leading)
|
|
43
|
+
while (lo < hi && s[lo] === '/')
|
|
44
|
+
lo++;
|
|
45
|
+
if (trailing)
|
|
46
|
+
while (hi > lo && s[hi - 1] === '/')
|
|
47
|
+
hi--;
|
|
48
|
+
return s.slice(lo, hi);
|
|
49
|
+
}
|
|
50
|
+
/** Join remote (POSIX) path segments with `/`, trimming stray slashes but
|
|
51
|
+
* preserving a leading `/` on the first segment (absolute remote dirs). */
|
|
52
|
+
export function posixJoin(...parts) {
|
|
53
|
+
return parts
|
|
54
|
+
.map((p, i) => (i === 0 ? trimSlashes(p, false, true) : trimSlashes(p, true, true)))
|
|
55
|
+
.filter((p) => p.length > 0)
|
|
56
|
+
.join('/');
|
|
57
|
+
}
|
|
58
|
+
function expandHome(p) {
|
|
59
|
+
return p === '~' || p.startsWith('~/') ? join(homedir(), p.slice(1)) : p;
|
|
60
|
+
}
|
|
61
|
+
/** Build the `ssh` argv (everything before the remote command). Pure +
|
|
62
|
+
* exported so it can be unit-tested without spawning. */
|
|
63
|
+
export function buildSshArgs(cfg, controlPath) {
|
|
64
|
+
const args = [];
|
|
65
|
+
if (cfg.port)
|
|
66
|
+
args.push('-p', String(cfg.port));
|
|
67
|
+
if (cfg.identityFile)
|
|
68
|
+
args.push('-i', expandHome(cfg.identityFile));
|
|
69
|
+
// BatchMode: never block on a password/passphrase prompt — fail fast so
|
|
70
|
+
// `watch` / scripts don't hang. ConnectTimeout bounds an unreachable host.
|
|
71
|
+
args.push('-o', 'BatchMode=yes', '-o', 'ConnectTimeout=10');
|
|
72
|
+
if (controlPath) {
|
|
73
|
+
// Multiplex over one connection so the many small round-trips a single
|
|
74
|
+
// pull makes don't each pay a full TCP+auth handshake.
|
|
75
|
+
args.push('-o', 'ControlMaster=auto', '-o', `ControlPath=${controlPath}`, '-o', 'ControlPersist=60');
|
|
76
|
+
}
|
|
77
|
+
args.push(cfg.user ? `${cfg.user}@${cfg.host}` : cfg.host);
|
|
78
|
+
return args;
|
|
79
|
+
}
|
|
80
|
+
/** ControlMaster socket path for connection reuse — POSIX only (Windows
|
|
81
|
+
* OpenSSH historically lacks Unix-socket multiplexing, so we skip it and
|
|
82
|
+
* pay per-call connection cost there). */
|
|
83
|
+
function controlPathFor(cfg) {
|
|
84
|
+
if (process.platform === 'win32')
|
|
85
|
+
return undefined;
|
|
86
|
+
const id = createHash('sha256')
|
|
87
|
+
.update(`${cfg.user ?? ''}@${cfg.host}:${cfg.port ?? 22}`)
|
|
88
|
+
.digest('hex')
|
|
89
|
+
.slice(0, 12);
|
|
90
|
+
return join(tmpdir(), `cs-ssh-${id}`);
|
|
91
|
+
}
|
|
92
|
+
/** Production executor: shells out to the system `ssh`. */
|
|
93
|
+
export function realSshExecutor(cfg) {
|
|
94
|
+
const baseArgs = buildSshArgs(cfg, controlPathFor(cfg));
|
|
95
|
+
return {
|
|
96
|
+
run(remoteCommand, input) {
|
|
97
|
+
const r = spawnSync('ssh', [...baseArgs, remoteCommand], {
|
|
98
|
+
input,
|
|
99
|
+
encoding: 'utf-8',
|
|
100
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
101
|
+
});
|
|
102
|
+
if (r.error)
|
|
103
|
+
return { status: 1, stdout: '', stderr: r.error.message };
|
|
104
|
+
return { status: r.status ?? 1, stdout: r.stdout ?? '', stderr: r.stderr ?? '' };
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/** Parse `find -printf '%T@\t%f\n'` output into {mtimeMs, name} rows. */
|
|
109
|
+
function parseFindRows(out) {
|
|
110
|
+
const rows = [];
|
|
111
|
+
for (const line of out.split('\n')) {
|
|
112
|
+
if (!line)
|
|
113
|
+
continue;
|
|
114
|
+
const tab = line.indexOf('\t');
|
|
115
|
+
if (tab < 0)
|
|
116
|
+
continue;
|
|
117
|
+
const mt = parseFloat(line.slice(0, tab));
|
|
118
|
+
const name = line.slice(tab + 1);
|
|
119
|
+
if (!name || !Number.isFinite(mt))
|
|
120
|
+
continue;
|
|
121
|
+
rows.push({ mtimeMs: mt * 1000, name });
|
|
122
|
+
}
|
|
123
|
+
return rows;
|
|
124
|
+
}
|
|
125
|
+
export class SshTransport {
|
|
126
|
+
cfg;
|
|
127
|
+
exec;
|
|
128
|
+
constructor(cfg, exec) {
|
|
129
|
+
this.cfg = cfg;
|
|
130
|
+
this.exec = exec ?? realSshExecutor(cfg);
|
|
131
|
+
}
|
|
132
|
+
describe() {
|
|
133
|
+
const who = this.cfg.user ? `${this.cfg.user}@${this.cfg.host}` : this.cfg.host;
|
|
134
|
+
const port = this.cfg.port && this.cfg.port !== 22 ? `:${this.cfg.port}` : '';
|
|
135
|
+
return `ssh ${who}${port} ${this.cfg.dir}`;
|
|
136
|
+
}
|
|
137
|
+
push(file) {
|
|
138
|
+
const enc = encodeProjectDir(file.projectKey);
|
|
139
|
+
const dir = posixJoin(this.cfg.dir, enc);
|
|
140
|
+
const name = `${file.sessionId}-${file.machineName}.ccsync`;
|
|
141
|
+
const path = posixJoin(dir, name);
|
|
142
|
+
const tmp = `${path}.tmp`;
|
|
143
|
+
// mkdir -p, stream content to a tmp file via stdin, atomic rename.
|
|
144
|
+
const cmd = `mkdir -p ${shQuote(dir)} && cat > ${shQuote(tmp)} && mv -f ${shQuote(tmp)} ${shQuote(path)}`;
|
|
145
|
+
const r = this.exec.run(cmd, serializeCcsync(file));
|
|
146
|
+
if (r.status !== 0) {
|
|
147
|
+
throw new Error(`ssh push failed (${this.describe()}): ${r.stderr.trim() || `exit ${r.status}`}`);
|
|
148
|
+
}
|
|
149
|
+
return `${this.describe()} → ${enc}/${name}`;
|
|
150
|
+
}
|
|
151
|
+
listProjectKeys() {
|
|
152
|
+
const cmd = `find ${shQuote(this.cfg.dir)} -mindepth 1 -maxdepth 1 -type d -printf '%f\\n' 2>/dev/null`;
|
|
153
|
+
const r = this.exec.run(cmd);
|
|
154
|
+
return r.stdout.split('\n').map((s) => s.trim()).filter(Boolean).sort();
|
|
155
|
+
}
|
|
156
|
+
listEntries(projectKey, selfMachineName) {
|
|
157
|
+
const enc = encodeProjectDir(projectKey);
|
|
158
|
+
const dir = posixJoin(this.cfg.dir, enc);
|
|
159
|
+
const listCmd = `find ${shQuote(dir)} -mindepth 1 -maxdepth 1 -type f -name '*.ccsync' ` +
|
|
160
|
+
`-printf '%T@\\t%f\\n' 2>/dev/null`;
|
|
161
|
+
const rows = parseFindRows(this.exec.run(listCmd).stdout);
|
|
162
|
+
const entries = [];
|
|
163
|
+
for (const row of rows) {
|
|
164
|
+
const content = this.readFile(posixJoin(dir, row.name));
|
|
165
|
+
if (content == null)
|
|
166
|
+
continue;
|
|
167
|
+
let file;
|
|
168
|
+
try {
|
|
169
|
+
file = parseCcsync(content);
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
continue; // malformed / mid-write — skip quietly, like the fs transport
|
|
173
|
+
}
|
|
174
|
+
if (file.machineName === selfMachineName)
|
|
175
|
+
continue;
|
|
176
|
+
entries.push({ path: `${this.describe()}/${enc}/${row.name}`, file, mtime: row.mtimeMs });
|
|
177
|
+
}
|
|
178
|
+
entries.sort((a, b) => b.mtime - a.mtime);
|
|
179
|
+
return entries;
|
|
180
|
+
}
|
|
181
|
+
listMachines() {
|
|
182
|
+
const counts = new Map();
|
|
183
|
+
// Files live exactly two levels under the root: <dir>/<key>/<file>.
|
|
184
|
+
const listCmd = `find ${shQuote(this.cfg.dir)} -mindepth 2 -maxdepth 2 -type f -name '*.ccsync' 2>/dev/null`;
|
|
185
|
+
const paths = this.exec.run(listCmd).stdout.split('\n').map((s) => s.trim()).filter(Boolean);
|
|
186
|
+
for (const p of paths) {
|
|
187
|
+
const content = this.readFile(p);
|
|
188
|
+
if (content == null)
|
|
189
|
+
continue;
|
|
190
|
+
try {
|
|
191
|
+
const file = parseCcsync(content);
|
|
192
|
+
counts.set(file.machineName, (counts.get(file.machineName) ?? 0) + 1);
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
// skip malformed
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return counts;
|
|
199
|
+
}
|
|
200
|
+
health() {
|
|
201
|
+
const cmd = `test -d ${shQuote(this.cfg.dir)} && echo DIR_OK || echo DIR_MISSING`;
|
|
202
|
+
const r = this.exec.run(cmd);
|
|
203
|
+
if (!r.stdout.includes('DIR_OK') && !r.stdout.includes('DIR_MISSING')) {
|
|
204
|
+
return { ok: false, detail: `unreachable: ${r.stderr.trim() || `ssh exit ${r.status}`}` };
|
|
205
|
+
}
|
|
206
|
+
if (r.stdout.includes('DIR_MISSING')) {
|
|
207
|
+
return { ok: true, detail: `${this.describe()} (remote dir absent — created on first push)` };
|
|
208
|
+
}
|
|
209
|
+
return { ok: true, detail: this.describe() };
|
|
210
|
+
}
|
|
211
|
+
readFile(remotePath) {
|
|
212
|
+
const r = this.exec.run(`cat -- ${shQuote(remotePath)} 2>/dev/null`);
|
|
213
|
+
return r.status === 0 ? r.stdout : null;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=ssh.js.map
|
package/dist/ssh.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssh.js","sourceRoot":"","sources":["../src/ssh.ts"],"names":[],"mappings":"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"}
|
package/dist/transport.d.ts
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* `pull` picks the newest non-self file per session id.
|
|
19
19
|
*/
|
|
20
20
|
import type { CcsyncFile } from './format.js';
|
|
21
|
+
import type { TransportConfig } from './config.js';
|
|
21
22
|
export declare function projectSubdir(syncDir: string, projectKey: string): string;
|
|
22
23
|
/** Write a .ccsync file into the project's transport subdir. The
|
|
23
24
|
* filename includes the machine name so the receiver can tell who
|
|
@@ -41,6 +42,38 @@ export declare function listTransport(syncDir: string, projectKey: string, selfM
|
|
|
41
42
|
* e.g. both defaulted to the same hostname — pull silently imports
|
|
42
43
|
* nothing. Malformed files are skipped quietly. */
|
|
43
44
|
export declare function listTransportMachines(syncDir: string): Map<string, number>;
|
|
45
|
+
export interface TransportHealth {
|
|
46
|
+
ok: boolean;
|
|
47
|
+
detail: string;
|
|
48
|
+
}
|
|
49
|
+
export interface Transport {
|
|
50
|
+
/** Write a .ccsync into the transport; return a human-readable location. */
|
|
51
|
+
push(file: CcsyncFile): string;
|
|
52
|
+
/** Newest-first entries for a project key, excluding self-authored files. */
|
|
53
|
+
listEntries(projectKey: string, selfMachineName: string): TransportEntry[];
|
|
54
|
+
/** All project keys (encoded form) present in the transport. */
|
|
55
|
+
listProjectKeys(): string[];
|
|
56
|
+
/** machineName → file count across the whole transport. */
|
|
57
|
+
listMachines(): Map<string, number>;
|
|
58
|
+
/** One-line description for banners / doctor. */
|
|
59
|
+
describe(): string;
|
|
60
|
+
/** Reachability + presence check for `doctor`. */
|
|
61
|
+
health(): TransportHealth;
|
|
62
|
+
}
|
|
63
|
+
/** Filesystem transport — thin object wrapper over the functions above so
|
|
64
|
+
* it satisfies the `Transport` interface. */
|
|
65
|
+
export declare class FsTransport implements Transport {
|
|
66
|
+
private readonly dir;
|
|
67
|
+
constructor(dir: string);
|
|
68
|
+
push(file: CcsyncFile): string;
|
|
69
|
+
listEntries(projectKey: string, selfMachineName: string): TransportEntry[];
|
|
70
|
+
listProjectKeys(): string[];
|
|
71
|
+
listMachines(): Map<string, number>;
|
|
72
|
+
describe(): string;
|
|
73
|
+
health(): TransportHealth;
|
|
74
|
+
}
|
|
75
|
+
/** Build the concrete transport for a resolved config. */
|
|
76
|
+
export declare function createTransport(tc: TransportConfig): Transport;
|
|
44
77
|
/** List all project keys present in the transport. Used by the CLI's
|
|
45
78
|
* `pull` (no args) form to fan out across every known project. */
|
|
46
79
|
export declare function listProjectKeys(syncDir: string): string[];
|
package/dist/transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;;gBAGgB;AAChB,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAWzE;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;4CAG4C;AAC5C,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,GACtB,cAAc,EAAE,CA0BlB;AAED;;;;;oDAKoD;AACpD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAkB1E;AAQD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,4EAA4E;IAC5E,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC/B,6EAA6E;IAC7E,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,cAAc,EAAE,CAAC;IAC3E,gEAAgE;IAChE,eAAe,IAAI,MAAM,EAAE,CAAC;IAC5B,2DAA2D;IAC3D,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,iDAAiD;IACjD,QAAQ,IAAI,MAAM,CAAC;IACnB,kDAAkD;IAClD,MAAM,IAAI,eAAe,CAAC;CAC3B;AAED;8CAC8C;AAC9C,qBAAa,WAAY,YAAW,SAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,MAAM;IAExC,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAG9B,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,cAAc,EAAE;IAG1E,eAAe,IAAI,MAAM,EAAE;IAG3B,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAGnC,QAAQ,IAAI,MAAM;IAGlB,MAAM,IAAI,eAAe;CAK1B;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,EAAE,EAAE,eAAe,GAAG,SAAS,CAG9D;AAED;mEACmE;AACnE,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAWzD"}
|
package/dist/transport.js
CHANGED
|
@@ -21,6 +21,7 @@ import { existsSync, mkdirSync, readdirSync, statSync, writeFileSync, readFileSy
|
|
|
21
21
|
import { join } from 'node:path';
|
|
22
22
|
import { encodeProjectDir } from './project.js';
|
|
23
23
|
import { parseCcsync, serializeCcsync } from './format.js';
|
|
24
|
+
import { SshTransport } from './ssh.js';
|
|
24
25
|
export function projectSubdir(syncDir, projectKey) {
|
|
25
26
|
return join(syncDir, encodeProjectDir(projectKey));
|
|
26
27
|
}
|
|
@@ -101,6 +102,40 @@ export function listTransportMachines(syncDir) {
|
|
|
101
102
|
}
|
|
102
103
|
return counts;
|
|
103
104
|
}
|
|
105
|
+
/** Filesystem transport — thin object wrapper over the functions above so
|
|
106
|
+
* it satisfies the `Transport` interface. */
|
|
107
|
+
export class FsTransport {
|
|
108
|
+
dir;
|
|
109
|
+
constructor(dir) {
|
|
110
|
+
this.dir = dir;
|
|
111
|
+
}
|
|
112
|
+
push(file) {
|
|
113
|
+
return pushToTransport(this.dir, file);
|
|
114
|
+
}
|
|
115
|
+
listEntries(projectKey, selfMachineName) {
|
|
116
|
+
return listTransport(this.dir, projectKey, selfMachineName);
|
|
117
|
+
}
|
|
118
|
+
listProjectKeys() {
|
|
119
|
+
return listProjectKeys(this.dir);
|
|
120
|
+
}
|
|
121
|
+
listMachines() {
|
|
122
|
+
return listTransportMachines(this.dir);
|
|
123
|
+
}
|
|
124
|
+
describe() {
|
|
125
|
+
return this.dir;
|
|
126
|
+
}
|
|
127
|
+
health() {
|
|
128
|
+
return existsSync(this.dir)
|
|
129
|
+
? { ok: true, detail: this.dir }
|
|
130
|
+
: { ok: false, detail: `directory does not exist: ${this.dir}` };
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/** Build the concrete transport for a resolved config. */
|
|
134
|
+
export function createTransport(tc) {
|
|
135
|
+
if (tc.type === 'ssh')
|
|
136
|
+
return new SshTransport(tc);
|
|
137
|
+
return new FsTransport(tc.dir);
|
|
138
|
+
}
|
|
104
139
|
/** List all project keys present in the transport. Used by the CLI's
|
|
105
140
|
* `pull` (no args) form to fan out across every known project. */
|
|
106
141
|
export function listProjectKeys(syncDir) {
|
package/dist/transport.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@askalf/claude-sync",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "own your sessions — move Claude Code sessions across machines. Part of Own Your Stack.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
],
|
|
22
22
|
"scripts": {
|
|
23
23
|
"build": "tsc",
|
|
24
|
-
"test": "node --test test/project.test.mjs test/format.test.mjs test/session.test.mjs test/transport.test.mjs test/cli.test.mjs test/watch.test.mjs test/version.test.mjs",
|
|
24
|
+
"test": "node --test test/project.test.mjs test/format.test.mjs test/session.test.mjs test/transport.test.mjs test/config.test.mjs test/ssh.test.mjs test/cli.test.mjs test/watch.test.mjs test/version.test.mjs",
|
|
25
25
|
"typecheck": "tsc --noEmit",
|
|
26
26
|
"audit": "npm audit --production --audit-level=high",
|
|
27
27
|
"prepublishOnly": "npm run build",
|