@kodrunhq/claudefy 1.1.3 → 1.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 +46 -4
- package/dist/commands/init.js +1 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/join.js +9 -5
- package/dist/commands/join.js.map +1 -1
- package/dist/commands/override.js +1 -0
- package/dist/commands/override.js.map +1 -1
- package/dist/commands/pull.d.ts +6 -0
- package/dist/commands/pull.js +185 -140
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.js +128 -100
- package/dist/commands/push.js.map +1 -1
- package/dist/encryptor/encryptor.d.ts +5 -2
- package/dist/encryptor/encryptor.js +34 -23
- package/dist/encryptor/encryptor.js.map +1 -1
- package/dist/encryptor/file-encryptor.d.ts +8 -0
- package/dist/encryptor/file-encryptor.js +30 -0
- package/dist/encryptor/file-encryptor.js.map +1 -0
- package/dist/encryptor/key-derivation.d.ts +2 -0
- package/dist/encryptor/key-derivation.js +20 -0
- package/dist/encryptor/key-derivation.js.map +1 -0
- package/dist/encryptor/line-encryptor.d.ts +10 -0
- package/dist/encryptor/line-encryptor.js +41 -0
- package/dist/encryptor/line-encryptor.js.map +1 -0
- package/dist/git-adapter/git-adapter.d.ts +11 -1
- package/dist/git-adapter/git-adapter.js +117 -3
- package/dist/git-adapter/git-adapter.js.map +1 -1
- package/dist/machine-registry/machine-registry.d.ts +1 -0
- package/dist/machine-registry/machine-registry.js +21 -0
- package/dist/machine-registry/machine-registry.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -7,11 +7,36 @@ Sync your Claude Code environment across machines.
|
|
|
7
7
|
claudefy syncs your `~/.claude` directory (commands, skills, agents, hooks, rules, plans, plugins, settings, and project configs) across multiple machines using a private git repository as the backend. It handles:
|
|
8
8
|
|
|
9
9
|
- **Selective sync** — three-tier filter (allow/deny/unknown) controls what syncs
|
|
10
|
-
- **Encryption** — sensitive and unknown files encrypted with
|
|
10
|
+
- **Encryption** — sensitive and unknown files encrypted with AES-256-SIV before push
|
|
11
11
|
- **Path remapping** — machine-specific paths normalized to canonical IDs
|
|
12
12
|
- **Deep merge** — settings.json merged at the key level; other files use last-write-wins
|
|
13
13
|
- **Override** — wipe remote and push local as source of truth when needed
|
|
14
14
|
|
|
15
|
+
## Architecture
|
|
16
|
+
|
|
17
|
+
claudefy uses a private git repository as the sync backend, with per-machine branches to avoid conflicts.
|
|
18
|
+
|
|
19
|
+
**Branch model:**
|
|
20
|
+
- Each machine syncs to its own branch: `machines/<machineId>`
|
|
21
|
+
- `main` holds the merged state from all machines
|
|
22
|
+
|
|
23
|
+
**Push (SessionEnd):**
|
|
24
|
+
Commits local `~/.claude` changes to the machine branch, merges into `main`, and pushes both.
|
|
25
|
+
|
|
26
|
+
**Pull (SessionStart):**
|
|
27
|
+
Fetches `main`, merges into the machine branch, decrypts, remaps paths, and applies to `~/.claude`.
|
|
28
|
+
|
|
29
|
+
**Override:**
|
|
30
|
+
Wipes `main` and force-updates it to match your machine's current state. Useful when one machine should become the canonical source of truth.
|
|
31
|
+
|
|
32
|
+
## What Gets Synced
|
|
33
|
+
|
|
34
|
+
| Category | Items | Notes |
|
|
35
|
+
|----------|-------|-------|
|
|
36
|
+
| **Synced** | commands, agents, skills, hooks, rules, plans, plugins, agent-memory, projects, settings.json, history.jsonl, package.json | Core config that should travel with you |
|
|
37
|
+
| **Never synced** | cache, backups, file-history, shell-snapshots, paste-cache, session-env, tasks, .credentials.json | Machine-local or sensitive data |
|
|
38
|
+
| **Unknown** | Anything not in either list | Encrypted by default before commit |
|
|
39
|
+
|
|
15
40
|
## Install
|
|
16
41
|
|
|
17
42
|
```bash
|
|
@@ -95,7 +120,14 @@ Pass `--hooks` to `init` or `join` to install auto-sync hooks automatically.
|
|
|
95
120
|
|
|
96
121
|
## Encryption
|
|
97
122
|
|
|
98
|
-
claudefy encrypts files using
|
|
123
|
+
claudefy encrypts files using AES-256-SIV deterministic encryption via `@noble/ciphers`.
|
|
124
|
+
|
|
125
|
+
**Why deterministic?** Same plaintext always produces the same ciphertext. This means unchanged files produce no git diff, and git's merge machinery can work with encrypted content.
|
|
126
|
+
|
|
127
|
+
**How different file types are handled:**
|
|
128
|
+
- **Session transcripts (.jsonl):** encrypted per-line, so git can diff and merge individual lines
|
|
129
|
+
- **Other files:** encrypted as a whole file; deterministic output avoids spurious diffs
|
|
130
|
+
- **Size overhead:** ~38% from base64 encoding
|
|
99
131
|
|
|
100
132
|
**Passphrase resolution order:**
|
|
101
133
|
1. `--passphrase` CLI flag (highest priority; avoid — visible in process list)
|
|
@@ -135,13 +167,23 @@ claudefy config set encryption.enabled false
|
|
|
135
167
|
claudefy config set encryption.useKeychain true
|
|
136
168
|
```
|
|
137
169
|
|
|
138
|
-
## Security
|
|
170
|
+
## Security Model
|
|
139
171
|
|
|
172
|
+
- `.credentials.json` is never synced (hardcoded in the deny list)
|
|
173
|
+
- All hooks from remote are stripped on pull to prevent code injection
|
|
174
|
+
- Secret scanner detects common patterns (API keys, tokens, high-entropy strings) before push — not exhaustive, but catches the obvious ones
|
|
175
|
+
- Files with detected secrets are encrypted before commit rather than blocking the push
|
|
140
176
|
- Passphrases never stored in plain text on disk
|
|
141
|
-
- Secret scanner detects API keys, tokens, and high-entropy strings before push
|
|
142
177
|
- Unknown files always encrypted — never pushed in cleartext
|
|
143
178
|
- `--passphrase` CLI flag warns about process list exposure
|
|
144
179
|
|
|
180
|
+
## Multi-Machine Workflow
|
|
181
|
+
|
|
182
|
+
1. **First machine:** `claudefy init --backend <url> --hooks` — creates the store and installs auto-sync hooks
|
|
183
|
+
2. **Other machines:** `claudefy join --backend <url> --hooks` — clones the store, registers the machine, pulls config, installs hooks
|
|
184
|
+
3. **Automatic sync:** with hooks installed, `pull` runs on SessionStart and `push` runs on SessionEnd — no manual steps needed
|
|
185
|
+
4. **Canonical override:** if one machine has the "right" config, run `claudefy override --confirm` to wipe main and push that machine's state as the source of truth
|
|
186
|
+
|
|
145
187
|
## License
|
|
146
188
|
|
|
147
189
|
MIT
|
package/dist/commands/init.js
CHANGED
|
@@ -60,6 +60,7 @@ export class InitCommand {
|
|
|
60
60
|
// 2. Initialize git store
|
|
61
61
|
const gitAdapter = new GitAdapter(join(this.homeDir, ".claudefy"));
|
|
62
62
|
await gitAdapter.initStore(backend);
|
|
63
|
+
await gitAdapter.ensureMachineBranch(config.machineId);
|
|
63
64
|
// 3. Write .gitattributes for LFS tracking of large session files
|
|
64
65
|
await writeFile(join(gitAdapter.getStorePath(), ".gitattributes"), LFS_GITATTRIBUTES);
|
|
65
66
|
// 4. Run initial push
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/join.js
CHANGED
|
@@ -24,17 +24,21 @@ export class JoinCommand {
|
|
|
24
24
|
// 2. Initialize git store and pull
|
|
25
25
|
const gitAdapter = new GitAdapter(join(this.homeDir, ".claudefy"));
|
|
26
26
|
await gitAdapter.initStore(options.backend);
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
await registry.register(config.machineId, hostname(), platform());
|
|
30
|
-
await gitAdapter.commitAndPush(`sync: ${config.machineId} joined`);
|
|
31
|
-
// 4. Run pull to get remote config
|
|
27
|
+
await gitAdapter.ensureMachineBranch(config.machineId);
|
|
28
|
+
// 3. Run pull to get remote config
|
|
32
29
|
const pullCommand = new PullCommand(this.homeDir);
|
|
33
30
|
await pullCommand.execute({
|
|
34
31
|
quiet: options.quiet,
|
|
35
32
|
skipEncryption: options.skipEncryption,
|
|
36
33
|
passphrase: options.passphrase,
|
|
37
34
|
});
|
|
35
|
+
// 4. Register this machine and commit
|
|
36
|
+
const registry = new MachineRegistry(join(gitAdapter.getStorePath(), "manifest.json"));
|
|
37
|
+
await registry.register(config.machineId, hostname(), platform());
|
|
38
|
+
const commitResult = await gitAdapter.commitAndPush(`sync: ${config.machineId} joined`, config.machineId);
|
|
39
|
+
if (!commitResult.pushed && !options.quiet) {
|
|
40
|
+
output.warn("Machine registry update could not be pushed to the remote. Check your connection and try 'claudefy push'.");
|
|
41
|
+
}
|
|
38
42
|
// 5. Install hooks if requested
|
|
39
43
|
if (options.installHooks) {
|
|
40
44
|
const hookManager = new HookManager(join(this.homeDir, ".claude", "settings.json"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join.js","sourceRoot":"","sources":["../../src/commands/join.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAUtC,MAAM,OAAO,WAAW;IACd,OAAO,CAAS;IAExB,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAoB;QAChC,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEtD,IAAI,aAAa,CAAC,aAAa,EAAE,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QAED,uBAAuB;QACvB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE/D,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,gCAAgC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,mCAAmC;QACnC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;QACnE,MAAM,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"join.js","sourceRoot":"","sources":["../../src/commands/join.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,7 @@ export class OverrideCommand {
|
|
|
21
21
|
// 1. Initialize git adapter
|
|
22
22
|
const gitAdapter = new GitAdapter(join(this.homeDir, ".claudefy"));
|
|
23
23
|
await gitAdapter.initStore(config.backend.url);
|
|
24
|
+
await gitAdapter.ensureMachineBranch(config.machineId);
|
|
24
25
|
try {
|
|
25
26
|
await gitAdapter.pull();
|
|
26
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"override.js","sourceRoot":"","sources":["../../src/commands/override.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAStC,MAAM,OAAO,eAAe;IAClB,OAAO,CAAS;IAChB,aAAa,CAAgB;IAErC,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAwB;QACpC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,0GAA0G,CAC3G,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAE/C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,uCAAuC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,4BAA4B;QAC5B,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;QACnE,MAAM,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;QAC3C,CAAC;QAED,2CAA2C;QAC3C,MAAM,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE/C,gDAAgD;QAChD,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,WAAW,CAAC,OAAO,CAAC;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,OAAO,CACZ,8EAA8E,CAC/E,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"override.js","sourceRoot":"","sources":["../../src/commands/override.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAStC,MAAM,OAAO,eAAe;IAClB,OAAO,CAAS;IAChB,aAAa,CAAgB;IAErC,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAwB;QACpC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,0GAA0G,CAC3G,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAE/C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,uCAAuC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,4BAA4B;QAC5B,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;QACnE,MAAM,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;QAC3C,CAAC;QAED,2CAA2C;QAC3C,MAAM,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE/C,gDAAgD;QAChD,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,WAAW,CAAC,OAAO,CAAC;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,OAAO,CACZ,8EAA8E,CAC/E,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
package/dist/commands/pull.d.ts
CHANGED
|
@@ -14,6 +14,12 @@ export declare class PullCommand {
|
|
|
14
14
|
private configManager;
|
|
15
15
|
constructor(homeDir: string);
|
|
16
16
|
execute(options: PullOptions): Promise<PullResult>;
|
|
17
|
+
/**
|
|
18
|
+
* Check for an override marker. First checks current branch, then checks
|
|
19
|
+
* the main branch (override markers may not survive merge into machine branch
|
|
20
|
+
* due to conflicts from wipeAndPush).
|
|
21
|
+
*/
|
|
22
|
+
private checkOverrideOnMain;
|
|
17
23
|
private collectAgeFiles;
|
|
18
24
|
private walkAgeFiles;
|
|
19
25
|
}
|
package/dist/commands/pull.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { cp, mkdir, readdir, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
2
|
-
import { join, resolve } from "node:path";
|
|
2
|
+
import { join, relative, resolve } from "node:path";
|
|
3
3
|
import { existsSync } from "node:fs";
|
|
4
4
|
import { ConfigManager } from "../config/config-manager.js";
|
|
5
5
|
import { GitAdapter } from "../git-adapter/git-adapter.js";
|
|
6
6
|
import { PathMapper } from "../path-mapper/path-mapper.js";
|
|
7
|
-
import { MachineRegistry } from "../machine-registry/machine-registry.js";
|
|
8
7
|
import { Encryptor } from "../encryptor/encryptor.js";
|
|
9
8
|
import { Merger } from "../merger/merger.js";
|
|
10
9
|
import { BackupManager } from "../backup-manager/backup-manager.js";
|
|
@@ -21,22 +20,21 @@ export class PullCommand {
|
|
|
21
20
|
async execute(options) {
|
|
22
21
|
const config = await this.configManager.load();
|
|
23
22
|
const result = { overrideDetected: false, filesUpdated: 0 };
|
|
24
|
-
// 1. Initialize git adapter
|
|
23
|
+
// 1. Initialize git adapter, switch to machine branch, pull & merge main
|
|
25
24
|
const claudefyDir = join(this.homeDir, ".claudefy");
|
|
26
25
|
const gitAdapter = new GitAdapter(claudefyDir);
|
|
27
26
|
await gitAdapter.initStore(config.backend.url);
|
|
27
|
+
await gitAdapter.ensureMachineBranch(config.machineId);
|
|
28
28
|
try {
|
|
29
|
-
await gitAdapter.
|
|
29
|
+
await gitAdapter.pullAndMergeMain();
|
|
30
30
|
}
|
|
31
31
|
catch {
|
|
32
32
|
// Fresh store with no remote history yet
|
|
33
33
|
}
|
|
34
34
|
const storePath = gitAdapter.getStorePath();
|
|
35
|
-
const configDir = join(storePath, "config");
|
|
36
|
-
const unknownDir = join(storePath, "unknown");
|
|
37
35
|
const resolvedClaudeDir = resolve(this.claudeDir);
|
|
38
|
-
// 2. Check for override marker
|
|
39
|
-
const override = await
|
|
36
|
+
// 2. Check for override marker (check on main branch where overrides are written)
|
|
37
|
+
const override = await this.checkOverrideOnMain(gitAdapter);
|
|
40
38
|
if (override) {
|
|
41
39
|
result.overrideDetected = true;
|
|
42
40
|
if (!options.quiet) {
|
|
@@ -50,160 +48,207 @@ export class PullCommand {
|
|
|
50
48
|
if (!options.quiet && result.backupPath) {
|
|
51
49
|
output.info(`Backup created at: ${result.backupPath}`);
|
|
52
50
|
}
|
|
53
|
-
//
|
|
51
|
+
// Reset machine branch to main so we apply the override content
|
|
52
|
+
const { simpleGit: sg } = await import("simple-git");
|
|
53
|
+
const git = sg(storePath);
|
|
54
|
+
await git.reset(["--hard", "main"]);
|
|
55
|
+
// Remove override marker and commit the acknowledgement locally.
|
|
56
|
+
// The commit will be pushed on the next normal push.
|
|
54
57
|
await gitAdapter.removeOverrideMarker();
|
|
55
|
-
|
|
58
|
+
const { simpleGit: sgCommit } = await import("simple-git");
|
|
59
|
+
const gitCommit = sgCommit(storePath);
|
|
60
|
+
await gitCommit.add(["."]);
|
|
61
|
+
const status = await gitCommit.status();
|
|
62
|
+
if (!status.isClean()) {
|
|
63
|
+
await gitCommit.commit("acknowledge override marker removal");
|
|
64
|
+
}
|
|
56
65
|
}
|
|
57
|
-
// 3.
|
|
58
|
-
const
|
|
59
|
-
if (
|
|
60
|
-
|
|
61
|
-
|
|
66
|
+
// 3. Create temp working directory
|
|
67
|
+
const tmpDir = join(claudefyDir, ".pull-tmp");
|
|
68
|
+
if (existsSync(tmpDir))
|
|
69
|
+
await rm(tmpDir, { recursive: true });
|
|
70
|
+
await mkdir(tmpDir, { recursive: true });
|
|
71
|
+
try {
|
|
72
|
+
// 4. Copy store to temp dir
|
|
73
|
+
const storeConfigDir = join(storePath, "config");
|
|
74
|
+
const storeUnknownDir = join(storePath, "unknown");
|
|
75
|
+
const tmpConfigDir = join(tmpDir, "config");
|
|
76
|
+
const tmpUnknownDir = join(tmpDir, "unknown");
|
|
77
|
+
if (existsSync(storeConfigDir))
|
|
78
|
+
await cp(storeConfigDir, tmpConfigDir, { recursive: true });
|
|
79
|
+
if (existsSync(storeUnknownDir))
|
|
80
|
+
await cp(storeUnknownDir, tmpUnknownDir, { recursive: true });
|
|
81
|
+
// 5. Decrypt any .age files in temp dir
|
|
82
|
+
const encryptedFiles = await this.collectAgeFiles(tmpConfigDir, tmpUnknownDir);
|
|
83
|
+
if (encryptedFiles.length > 0 && !options.skipEncryption) {
|
|
84
|
+
if (!options.passphrase) {
|
|
85
|
+
throw new Error("Encrypted files found but no passphrase available. Set CLAUDEFY_PASSPHRASE or store it in your OS keychain via 'claudefy init'.");
|
|
86
|
+
}
|
|
87
|
+
const encryptor = new Encryptor(options.passphrase);
|
|
88
|
+
if (existsSync(tmpConfigDir)) {
|
|
89
|
+
await encryptor.decryptDirectory(tmpConfigDir);
|
|
90
|
+
}
|
|
91
|
+
if (existsSync(tmpUnknownDir)) {
|
|
92
|
+
await encryptor.decryptDirectory(tmpUnknownDir);
|
|
93
|
+
}
|
|
62
94
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
95
|
+
// 6. Remap paths (canonical -> local) in temp dir
|
|
96
|
+
const links = await this.configManager.getLinks();
|
|
97
|
+
const pathMapper = new PathMapper(links);
|
|
98
|
+
// settings.json
|
|
99
|
+
const remoteSettingsPath = join(tmpConfigDir, "settings.json");
|
|
100
|
+
if (existsSync(remoteSettingsPath)) {
|
|
101
|
+
const settings = JSON.parse(await readFile(remoteSettingsPath, "utf-8"));
|
|
102
|
+
const remapped = pathMapper.remapSettingsPaths(settings, this.claudeDir);
|
|
103
|
+
await writeFile(remoteSettingsPath, JSON.stringify(remapped, null, 2));
|
|
66
104
|
}
|
|
67
|
-
|
|
68
|
-
|
|
105
|
+
// installed_plugins.json
|
|
106
|
+
const pluginsJsonPath = join(tmpConfigDir, "plugins", "installed_plugins.json");
|
|
107
|
+
if (existsSync(pluginsJsonPath)) {
|
|
108
|
+
const plugins = JSON.parse(await readFile(pluginsJsonPath, "utf-8"));
|
|
109
|
+
const remapped = pathMapper.remapPluginPaths(plugins, this.claudeDir);
|
|
110
|
+
await writeFile(pluginsJsonPath, JSON.stringify(remapped, null, 2));
|
|
69
111
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
if (existsSync(remoteSettingsPath)) {
|
|
77
|
-
const settings = JSON.parse(await readFile(remoteSettingsPath, "utf-8"));
|
|
78
|
-
const remapped = pathMapper.remapSettingsPaths(settings, this.claudeDir);
|
|
79
|
-
await writeFile(remoteSettingsPath, JSON.stringify(remapped, null, 2));
|
|
80
|
-
}
|
|
81
|
-
// installed_plugins.json
|
|
82
|
-
const pluginsJsonPath = join(configDir, "plugins", "installed_plugins.json");
|
|
83
|
-
if (existsSync(pluginsJsonPath)) {
|
|
84
|
-
const plugins = JSON.parse(await readFile(pluginsJsonPath, "utf-8"));
|
|
85
|
-
const remapped = pathMapper.remapPluginPaths(plugins, this.claudeDir);
|
|
86
|
-
await writeFile(pluginsJsonPath, JSON.stringify(remapped, null, 2));
|
|
87
|
-
}
|
|
88
|
-
// known_marketplaces.json
|
|
89
|
-
const marketplacesPath = join(configDir, "plugins", "known_marketplaces.json");
|
|
90
|
-
if (existsSync(marketplacesPath)) {
|
|
91
|
-
const mp = JSON.parse(await readFile(marketplacesPath, "utf-8"));
|
|
92
|
-
const remapped = pathMapper.remapPluginPaths(mp, this.claudeDir);
|
|
93
|
-
await writeFile(marketplacesPath, JSON.stringify(remapped, null, 2));
|
|
94
|
-
}
|
|
95
|
-
// history.jsonl
|
|
96
|
-
const historyPath = join(configDir, "history.jsonl");
|
|
97
|
-
if (existsSync(historyPath)) {
|
|
98
|
-
const content = await readFile(historyPath, "utf-8");
|
|
99
|
-
const remapped = content
|
|
100
|
-
.split("\n")
|
|
101
|
-
.filter(Boolean)
|
|
102
|
-
.map((line) => pathMapper.remapJsonlLine(line))
|
|
103
|
-
.join("\n") + "\n";
|
|
104
|
-
await writeFile(historyPath, remapped);
|
|
105
|
-
}
|
|
106
|
-
// projects/ directory renaming (canonical → local)
|
|
107
|
-
const projectsDir = join(configDir, "projects");
|
|
108
|
-
if (existsSync(projectsDir)) {
|
|
109
|
-
const projectDirs = await readdir(projectsDir);
|
|
110
|
-
for (const dirName of projectDirs) {
|
|
111
|
-
const localName = pathMapper.remapDirName(dirName);
|
|
112
|
-
if (localName) {
|
|
113
|
-
const destPath = resolve(join(projectsDir, localName));
|
|
114
|
-
// Path containment: ensure renamed dir stays within projects/
|
|
115
|
-
if (!destPath.startsWith(resolve(projectsDir) + "/")) {
|
|
116
|
-
console.warn(`Skipping directory rename "${dirName}" → "${localName}": path escapes projects directory`);
|
|
117
|
-
continue;
|
|
118
|
-
}
|
|
119
|
-
await rename(join(projectsDir, dirName), destPath);
|
|
120
|
-
}
|
|
112
|
+
// known_marketplaces.json
|
|
113
|
+
const marketplacesPath = join(tmpConfigDir, "plugins", "known_marketplaces.json");
|
|
114
|
+
if (existsSync(marketplacesPath)) {
|
|
115
|
+
const mp = JSON.parse(await readFile(marketplacesPath, "utf-8"));
|
|
116
|
+
const remapped = pathMapper.remapPluginPaths(mp, this.claudeDir);
|
|
117
|
+
await writeFile(marketplacesPath, JSON.stringify(remapped, null, 2));
|
|
121
118
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
// store access could inject arbitrary shell commands via SessionStart/SessionEnd hooks.
|
|
133
|
-
delete remoteSettings.hooks;
|
|
134
|
-
if (existsSync(localSettingsPath) && !result.overrideDetected) {
|
|
135
|
-
const localSettings = JSON.parse(await readFile(localSettingsPath, "utf-8"));
|
|
136
|
-
const merged = merger.deepMergeJson(localSettings, remoteSettings);
|
|
137
|
-
await writeFile(localSettingsPath, JSON.stringify(merged, null, 2));
|
|
119
|
+
// history.jsonl
|
|
120
|
+
const historyPath = join(tmpConfigDir, "history.jsonl");
|
|
121
|
+
if (existsSync(historyPath)) {
|
|
122
|
+
const content = await readFile(historyPath, "utf-8");
|
|
123
|
+
const remapped = content
|
|
124
|
+
.split("\n")
|
|
125
|
+
.filter(Boolean)
|
|
126
|
+
.map((line) => pathMapper.remapJsonlLine(line))
|
|
127
|
+
.join("\n") + "\n";
|
|
128
|
+
await writeFile(historyPath, remapped);
|
|
138
129
|
}
|
|
139
|
-
|
|
140
|
-
|
|
130
|
+
// projects/ directory renaming (canonical -> local)
|
|
131
|
+
const projectsDir = join(tmpConfigDir, "projects");
|
|
132
|
+
if (existsSync(projectsDir)) {
|
|
133
|
+
const projectDirs = await readdir(projectsDir);
|
|
134
|
+
for (const dirName of projectDirs) {
|
|
135
|
+
const localName = pathMapper.remapDirName(dirName);
|
|
136
|
+
if (localName) {
|
|
137
|
+
const destPath = resolve(join(projectsDir, localName));
|
|
138
|
+
// Path containment: ensure renamed dir stays within projects/
|
|
139
|
+
const rel = relative(resolve(projectsDir), destPath);
|
|
140
|
+
if (rel.startsWith("..") || resolve(destPath) === resolve(projectsDir)) {
|
|
141
|
+
output.warn(`Skipping directory rename "${dirName}" -> "${localName}": path escapes projects directory`);
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
await rename(join(projectsDir, dirName), destPath);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
141
147
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
console.warn(`Skipping symlink in config store: ${entry.name}`);
|
|
153
|
-
continue;
|
|
148
|
+
// 7. Merge and copy to ~/.claude
|
|
149
|
+
const merger = new Merger();
|
|
150
|
+
await mkdir(this.claudeDir, { recursive: true });
|
|
151
|
+
// 7a. Deep merge settings.json with hook filtering
|
|
152
|
+
if (existsSync(remoteSettingsPath)) {
|
|
153
|
+
const localSettingsPath = join(this.claudeDir, "settings.json");
|
|
154
|
+
const remoteSettings = JSON.parse(await readFile(remoteSettingsPath, "utf-8"));
|
|
155
|
+
// Security: strip all hooks from remote to prevent code injection
|
|
156
|
+
if (remoteSettings && typeof remoteSettings === "object" && "hooks" in remoteSettings) {
|
|
157
|
+
delete remoteSettings.hooks;
|
|
154
158
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
159
|
+
if (existsSync(localSettingsPath) && !result.overrideDetected) {
|
|
160
|
+
const localSettings = JSON.parse(await readFile(localSettingsPath, "utf-8"));
|
|
161
|
+
const merged = merger.deepMergeJson(localSettings, remoteSettings);
|
|
162
|
+
await writeFile(localSettingsPath, JSON.stringify(merged, null, 2));
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
await writeFile(localSettingsPath, JSON.stringify(remoteSettings, null, 2));
|
|
161
166
|
}
|
|
162
|
-
await cp(src, dest, { recursive: true, force: true });
|
|
163
167
|
result.filesUpdated++;
|
|
164
168
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
169
|
+
// 7b. Copy remaining config items (remote overwrites local)
|
|
170
|
+
if (existsSync(tmpConfigDir)) {
|
|
171
|
+
const entries = await readdir(tmpConfigDir, { withFileTypes: true });
|
|
172
|
+
for (const entry of entries) {
|
|
173
|
+
if (entry.name === "settings.json")
|
|
174
|
+
continue; // Already handled
|
|
175
|
+
// Security: skip symlinks to prevent path traversal attacks
|
|
176
|
+
if (entry.isSymbolicLink()) {
|
|
177
|
+
output.warn(`Skipping symlink in config store: ${entry.name}`);
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
const src = join(tmpConfigDir, entry.name);
|
|
181
|
+
const dest = resolve(join(this.claudeDir, entry.name));
|
|
182
|
+
// Path containment: ensure destination stays within ~/.claude/
|
|
183
|
+
const relPath = relative(resolvedClaudeDir, dest);
|
|
184
|
+
if (relPath.startsWith("..") || resolve(dest) === resolvedClaudeDir) {
|
|
185
|
+
output.warn(`Skipping "${entry.name}": resolved path escapes ~/.claude/`);
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
await cp(src, dest, { recursive: true, force: true });
|
|
189
|
+
result.filesUpdated++;
|
|
181
190
|
}
|
|
182
|
-
await cp(src, dest, { recursive: true, force: true });
|
|
183
|
-
result.filesUpdated++;
|
|
184
191
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
192
|
+
// 7c. Copy unknown items back
|
|
193
|
+
if (existsSync(tmpUnknownDir)) {
|
|
194
|
+
const entries = await readdir(tmpUnknownDir, { withFileTypes: true });
|
|
195
|
+
for (const entry of entries) {
|
|
196
|
+
// Security: skip symlinks to prevent path traversal attacks
|
|
197
|
+
if (entry.isSymbolicLink()) {
|
|
198
|
+
output.warn(`Skipping symlink in unknown store: ${entry.name}`);
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
const src = join(tmpUnknownDir, entry.name);
|
|
202
|
+
const dest = resolve(join(this.claudeDir, entry.name));
|
|
203
|
+
// Path containment: ensure destination stays within ~/.claude/
|
|
204
|
+
const relPath = relative(resolvedClaudeDir, dest);
|
|
205
|
+
if (relPath.startsWith("..") || resolve(dest) === resolvedClaudeDir) {
|
|
206
|
+
output.warn(`Skipping "${entry.name}": resolved path escapes ~/.claude/`);
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
await cp(src, dest, { recursive: true, force: true });
|
|
210
|
+
result.filesUpdated++;
|
|
195
211
|
}
|
|
196
212
|
}
|
|
197
213
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
214
|
+
finally {
|
|
215
|
+
if (existsSync(tmpDir))
|
|
216
|
+
await rm(tmpDir, { recursive: true });
|
|
217
|
+
}
|
|
218
|
+
// NO re-encryption step (store is never modified)
|
|
219
|
+
// NO commitAndPush (pull should not create commits)
|
|
202
220
|
if (!options.quiet) {
|
|
203
221
|
output.success(`Pull complete. ${result.filesUpdated} items updated.`);
|
|
204
222
|
}
|
|
205
223
|
return result;
|
|
206
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* Check for an override marker. First checks current branch, then checks
|
|
227
|
+
* the main branch (override markers may not survive merge into machine branch
|
|
228
|
+
* due to conflicts from wipeAndPush).
|
|
229
|
+
*/
|
|
230
|
+
async checkOverrideOnMain(gitAdapter) {
|
|
231
|
+
// First check on current branch (works when merge succeeded)
|
|
232
|
+
const override = await gitAdapter.checkOverrideMarker();
|
|
233
|
+
if (override)
|
|
234
|
+
return override;
|
|
235
|
+
// If not found, check on main branch by temporarily switching
|
|
236
|
+
const currentBranch = await gitAdapter.getCurrentBranch();
|
|
237
|
+
if (currentBranch === "main")
|
|
238
|
+
return null;
|
|
239
|
+
const storePath = gitAdapter.getStorePath();
|
|
240
|
+
try {
|
|
241
|
+
const { simpleGit } = await import("simple-git");
|
|
242
|
+
const git = simpleGit(storePath);
|
|
243
|
+
// Use git show to read .override from main without switching branches
|
|
244
|
+
const content = await git.show(["main:.override"]);
|
|
245
|
+
const marker = JSON.parse(content);
|
|
246
|
+
return { machine: marker.machine, timestamp: marker.timestamp };
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
207
252
|
async collectAgeFiles(...dirs) {
|
|
208
253
|
const results = [];
|
|
209
254
|
for (const dir of dirs) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"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"}
|