contextmate 0.2.4 → 0.2.6
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 +24 -33
- package/dist/src/cli/daemon.d.ts.map +1 -1
- package/dist/src/cli/daemon.js +12 -1
- package/dist/src/cli/daemon.js.map +1 -1
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +3 -1
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/setup.d.ts +3 -0
- package/dist/src/cli/setup.d.ts.map +1 -0
- package/dist/src/cli/setup.js +529 -0
- package/dist/src/cli/setup.js.map +1 -0
- package/dist/src/sync/client.d.ts.map +1 -1
- package/dist/src/sync/client.js +2 -1
- package/dist/src/sync/client.js.map +1 -1
- package/dist/src/sync/engine.d.ts +2 -1
- package/dist/src/sync/engine.d.ts.map +1 -1
- package/dist/src/sync/engine.js +71 -4
- package/dist/src/sync/engine.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -26,31 +26,42 @@ ContextMate syncs them everywhere:
|
|
|
26
26
|
|
|
27
27
|
## Quick Start
|
|
28
28
|
|
|
29
|
-
**
|
|
29
|
+
**One command does everything:**
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
|
-
contextmate
|
|
32
|
+
contextmate setup
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
This guided setup will:
|
|
36
|
+
1. Create your account (or log into an existing one)
|
|
37
|
+
2. Auto-detect Claude Code and OpenClaw
|
|
38
|
+
3. Import your skills, rules, and memories
|
|
39
|
+
4. Ask which directories to scan for project skills
|
|
40
|
+
5. Sync all files to the cloud
|
|
41
|
+
6. Open the web dashboard at [app.contextmate.dev](https://app.contextmate.dev)
|
|
42
|
+
7. Start the sync daemon
|
|
36
43
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
44
|
+
That's it. Your AI context is now encrypted, synced, and accessible from any device.
|
|
45
|
+
|
|
46
|
+
### Web Dashboard
|
|
47
|
+
|
|
48
|
+
Manage your vault, devices, and API keys from [app.contextmate.dev](https://app.contextmate.dev). View synced files, edit per-device scan paths, and create API keys -- all from the browser.
|
|
49
|
+
|
|
50
|
+
### Multi-device
|
|
41
51
|
|
|
42
|
-
|
|
52
|
+
On a second machine, run the same command and choose "Log into existing account":
|
|
43
53
|
|
|
44
54
|
```bash
|
|
45
|
-
contextmate
|
|
55
|
+
contextmate setup
|
|
56
|
+
# Choose: 2. Log into existing account
|
|
57
|
+
# Enter your User ID and passphrase
|
|
46
58
|
```
|
|
47
59
|
|
|
48
|
-
That's it. File changes are detected, encrypted locally, and pushed to the cloud. Other devices pull and decrypt in real time via WebSocket.
|
|
49
|
-
|
|
50
60
|
## CLI Reference
|
|
51
61
|
|
|
52
62
|
| Command | Description |
|
|
53
63
|
|---------|-------------|
|
|
64
|
+
| **`contextmate setup`** | **Complete guided setup -- account, adapters, sync, and dashboard** |
|
|
54
65
|
| `contextmate init` | Create a new account or log into an existing one |
|
|
55
66
|
| `contextmate status` | Show connection status, account info, and sync state |
|
|
56
67
|
| `contextmate adapter claude init` | Import Claude Code files and create symlinks |
|
|
@@ -68,27 +79,7 @@ That's it. File changes are detected, encrypted locally, and pushed to the cloud
|
|
|
68
79
|
| `contextmate mcp api-key` | Manage MCP API keys |
|
|
69
80
|
| `contextmate reset` | Remove all ContextMate data and symlinks from this machine |
|
|
70
81
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
To set up ContextMate on a second machine, install and choose "Log into existing account" during init. You'll need your User ID and passphrase.
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
contextmate init
|
|
77
|
-
# Choose: Log into existing account
|
|
78
|
-
# Enter your User ID and passphrase
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
### Scanning project-specific skills
|
|
82
|
-
|
|
83
|
-
To import skills from project directories (e.g. `.claude/skills/` inside your repos), add `scanPaths` to your config:
|
|
84
|
-
|
|
85
|
-
```toml
|
|
86
|
-
# ~/.contextmate/config.toml
|
|
87
|
-
[adapters.claude]
|
|
88
|
-
scanPaths = ["/Users/you/Developer"]
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
Then re-run `contextmate adapter claude init` to pick them up.
|
|
82
|
+
Most users only need `contextmate setup`. The other commands are available for advanced usage and troubleshooting.
|
|
92
83
|
|
|
93
84
|
## Architecture
|
|
94
85
|
|
|
@@ -156,7 +147,7 @@ npm test
|
|
|
156
147
|
```
|
|
157
148
|
src/ # CLI client
|
|
158
149
|
bin/ # Entry point
|
|
159
|
-
cli/ # Commands (init, status, adapter, daemon, mcp, files, log, reset)
|
|
150
|
+
cli/ # Commands (setup, init, status, adapter, daemon, mcp, files, log, reset)
|
|
160
151
|
crypto/ # Encryption (AES-256-GCM, Argon2id, HKDF, BLAKE3)
|
|
161
152
|
sync/ # Sync engine (watcher, state, WebSocket)
|
|
162
153
|
adapters/ # Agent adapters (Claude Code, OpenClaw)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/cli/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/cli/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4OpC,eAAO,MAAM,aAAa,SAIK,CAAC"}
|
package/dist/src/cli/daemon.js
CHANGED
|
@@ -89,13 +89,24 @@ const startCommand = new Command('start')
|
|
|
89
89
|
console.error(chalk.red('Error: Invalid passphrase.'));
|
|
90
90
|
process.exit(1);
|
|
91
91
|
}
|
|
92
|
+
// Load auth token
|
|
93
|
+
let authToken = '';
|
|
94
|
+
try {
|
|
95
|
+
const authPath = join(config.data.path, 'auth.json');
|
|
96
|
+
const auth = JSON.parse(await readFile(authPath, 'utf-8'));
|
|
97
|
+
authToken = auth.token || '';
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
console.error(chalk.red('No auth token found. Run "contextmate init" first.'));
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
92
103
|
// Write PID file
|
|
93
104
|
await writeFile(pidFile, String(process.pid), 'utf-8');
|
|
94
105
|
// Start sync engine (foreground)
|
|
95
106
|
console.log(chalk.green(`Daemon started (PID: ${process.pid})`));
|
|
96
107
|
console.log(chalk.dim('Press Ctrl+C to stop.'));
|
|
97
108
|
const { SyncEngine } = await import('../sync/index.js');
|
|
98
|
-
const engine = new SyncEngine(config, vaultKey);
|
|
109
|
+
const engine = new SyncEngine(config, vaultKey, authToken);
|
|
99
110
|
await engine.start();
|
|
100
111
|
// Handle graceful shutdown
|
|
101
112
|
const shutdown = async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/cli/daemon.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/cli/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,OAAO,SAGD,CAAC"}
|
package/dist/src/cli/index.js
CHANGED
|
@@ -7,10 +7,12 @@ import { daemonCommand } from './daemon.js';
|
|
|
7
7
|
import { logCommand } from './log.js';
|
|
8
8
|
import { filesCommand } from './files.js';
|
|
9
9
|
import { resetCommand } from './reset.js';
|
|
10
|
+
import { setupCommand } from './setup.js';
|
|
10
11
|
export const program = new Command()
|
|
11
12
|
.name('contextmate')
|
|
12
13
|
.description('Zero-knowledge encrypted sync for AI agent context')
|
|
13
|
-
.version('0.2.
|
|
14
|
+
.version('0.2.6');
|
|
15
|
+
program.addCommand(setupCommand);
|
|
14
16
|
program.addCommand(initCommand);
|
|
15
17
|
program.addCommand(statusCommand);
|
|
16
18
|
program.addCommand(adapterCommand);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KACjC,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,oDAAoD,CAAC;KACjE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KACjC,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,oDAAoD,CAAC;KACjE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuLpC,eAAO,MAAM,YAAY,SAsbrB,CAAC"}
|
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import * as readline from 'node:readline/promises';
|
|
4
|
+
import { stdin, stdout } from 'node:process';
|
|
5
|
+
import { access, readFile, writeFile, unlink } from 'node:fs/promises';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { hostname, homedir } from 'node:os';
|
|
8
|
+
import { exec } from 'node:child_process';
|
|
9
|
+
import { bytesToHex, hexToBytes } from '@noble/hashes/utils';
|
|
10
|
+
import { generateSalt, deriveMasterKey, deriveAuthKey, deriveVaultKey, encryptString, decryptString, createAuthHash, encryptFile, hashContent, deriveKeyForPath, } from '../crypto/index.js';
|
|
11
|
+
import { getConfigPath, getDefaultConfig, loadConfig, saveConfig, ensureDirectories, } from '../config.js';
|
|
12
|
+
import { getAdapter } from '../adapters/index.js';
|
|
13
|
+
import { getBackupsPath, getPidFilePath } from '../utils/paths.js';
|
|
14
|
+
async function ask(prompt) {
|
|
15
|
+
const rl = readline.createInterface({ input: stdin, output: stdout });
|
|
16
|
+
const answer = await rl.question(prompt);
|
|
17
|
+
rl.close();
|
|
18
|
+
return answer;
|
|
19
|
+
}
|
|
20
|
+
function openBrowser(url) {
|
|
21
|
+
const cmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
22
|
+
exec(`${cmd} ${url}`);
|
|
23
|
+
}
|
|
24
|
+
function isPidRunning(pid) {
|
|
25
|
+
try {
|
|
26
|
+
process.kill(pid, 0);
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async function registerDevice(serverUrl, token) {
|
|
34
|
+
try {
|
|
35
|
+
const res = await fetch(`${serverUrl}/api/auth/devices`, {
|
|
36
|
+
method: 'POST',
|
|
37
|
+
headers: {
|
|
38
|
+
'Content-Type': 'application/json',
|
|
39
|
+
'Authorization': `Bearer ${token}`,
|
|
40
|
+
},
|
|
41
|
+
body: JSON.stringify({ name: hostname() }),
|
|
42
|
+
});
|
|
43
|
+
if (res.ok) {
|
|
44
|
+
const { deviceId } = (await res.json());
|
|
45
|
+
return deviceId;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Non-critical
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
async function pushDeviceSettings(config, token, deviceId, vaultKey) {
|
|
54
|
+
const settings = {
|
|
55
|
+
scanPaths: config.adapters.claude.scanPaths,
|
|
56
|
+
adapters: {
|
|
57
|
+
claude: config.adapters.claude.enabled,
|
|
58
|
+
openclaw: config.adapters.openclaw.enabled,
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
const encrypted = encryptString(JSON.stringify(settings), vaultKey);
|
|
62
|
+
const encryptedHex = bytesToHex(encrypted);
|
|
63
|
+
try {
|
|
64
|
+
await fetch(`${config.server.url}/api/auth/devices/${deviceId}/settings`, {
|
|
65
|
+
method: 'PUT',
|
|
66
|
+
headers: {
|
|
67
|
+
'Content-Type': 'application/json',
|
|
68
|
+
'Authorization': `Bearer ${token}`,
|
|
69
|
+
},
|
|
70
|
+
body: JSON.stringify({ encryptedSettings: encryptedHex }),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Non-critical
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function initialSync(config, vaultKey, token) {
|
|
78
|
+
let uploaded = 0;
|
|
79
|
+
let errors = 0;
|
|
80
|
+
// Discover all files in the vault
|
|
81
|
+
const files = await discoverFiles(config.vault.path, config.vault.path);
|
|
82
|
+
for (const filePath of files) {
|
|
83
|
+
try {
|
|
84
|
+
const absolutePath = join(config.vault.path, filePath);
|
|
85
|
+
const content = await readFile(absolutePath);
|
|
86
|
+
const contentBytes = new Uint8Array(content);
|
|
87
|
+
const fileKey = deriveKeyForPath(vaultKey, filePath);
|
|
88
|
+
const encrypted = encryptFile(contentBytes, fileKey);
|
|
89
|
+
const encryptedHash = hashContent(encrypted);
|
|
90
|
+
const res = await fetch(`${config.server.url}/api/files/${encodeURIComponent(filePath)}`, {
|
|
91
|
+
method: 'PUT',
|
|
92
|
+
headers: {
|
|
93
|
+
'Content-Type': 'application/octet-stream',
|
|
94
|
+
'Authorization': `Bearer ${token}`,
|
|
95
|
+
'X-Content-Hash': encryptedHash,
|
|
96
|
+
'X-Version': '0',
|
|
97
|
+
},
|
|
98
|
+
body: encrypted,
|
|
99
|
+
});
|
|
100
|
+
if (res.ok || res.status === 409) {
|
|
101
|
+
uploaded++;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
errors++;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
errors++;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return { uploaded, errors };
|
|
112
|
+
}
|
|
113
|
+
async function discoverFiles(dir, base) {
|
|
114
|
+
const { readdir, stat } = await import('node:fs/promises');
|
|
115
|
+
const { relative } = await import('node:path');
|
|
116
|
+
const paths = [];
|
|
117
|
+
let entries;
|
|
118
|
+
try {
|
|
119
|
+
entries = await readdir(dir);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return paths;
|
|
123
|
+
}
|
|
124
|
+
for (const name of entries) {
|
|
125
|
+
if (name.startsWith('.') || name === 'node_modules')
|
|
126
|
+
continue;
|
|
127
|
+
const full = join(dir, name);
|
|
128
|
+
try {
|
|
129
|
+
const s = await stat(full);
|
|
130
|
+
if (s.isDirectory()) {
|
|
131
|
+
paths.push(...await discoverFiles(full, base));
|
|
132
|
+
}
|
|
133
|
+
else if (s.isFile()) {
|
|
134
|
+
paths.push(relative(base, full));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// Skip
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return paths;
|
|
142
|
+
}
|
|
143
|
+
function countByPrefix(items, prefix) {
|
|
144
|
+
return items.filter((i) => i.startsWith(prefix)).length;
|
|
145
|
+
}
|
|
146
|
+
export const setupCommand = new Command('setup')
|
|
147
|
+
.description('Complete guided setup — account, adapters, sync, and dashboard')
|
|
148
|
+
.action(async () => {
|
|
149
|
+
try {
|
|
150
|
+
console.log('');
|
|
151
|
+
console.log(chalk.bold.cyan('ContextMate Setup'));
|
|
152
|
+
console.log(chalk.dim('─'.repeat(40)));
|
|
153
|
+
console.log('');
|
|
154
|
+
// ─── Step 1: Account ───
|
|
155
|
+
let config;
|
|
156
|
+
let token;
|
|
157
|
+
let userId;
|
|
158
|
+
let vaultKey;
|
|
159
|
+
let deviceId = null;
|
|
160
|
+
const configPath = getConfigPath();
|
|
161
|
+
let alreadyInitialized = false;
|
|
162
|
+
try {
|
|
163
|
+
await access(configPath);
|
|
164
|
+
alreadyInitialized = true;
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// Not initialized
|
|
168
|
+
}
|
|
169
|
+
// Check for existing account
|
|
170
|
+
let existingAuth = {};
|
|
171
|
+
if (alreadyInitialized) {
|
|
172
|
+
try {
|
|
173
|
+
config = await loadConfig();
|
|
174
|
+
const authPath = join(config.data.path, 'auth.json');
|
|
175
|
+
existingAuth = JSON.parse(await readFile(authPath, 'utf-8'));
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// No auth
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (existingAuth.userId && existingAuth.token) {
|
|
182
|
+
console.log(chalk.green('✓ Account found'));
|
|
183
|
+
console.log(` User ID: ${existingAuth.userId}`);
|
|
184
|
+
console.log('');
|
|
185
|
+
const choice = await ask(chalk.bold('Use this account? (Y/n): '));
|
|
186
|
+
if (choice.trim().toLowerCase() === 'n') {
|
|
187
|
+
console.log(chalk.dim('Run "contextmate init" to switch accounts, then run setup again.'));
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
config = await loadConfig();
|
|
191
|
+
userId = existingAuth.userId;
|
|
192
|
+
token = existingAuth.token;
|
|
193
|
+
deviceId = existingAuth.deviceId || null;
|
|
194
|
+
// We need the vault key — ask for passphrase
|
|
195
|
+
console.log('');
|
|
196
|
+
const passphrase = await ask(chalk.bold('Passphrase: '));
|
|
197
|
+
if (!passphrase || !passphrase.trim()) {
|
|
198
|
+
console.error(chalk.red('Error: Passphrase cannot be empty.'));
|
|
199
|
+
process.exit(1);
|
|
200
|
+
}
|
|
201
|
+
// Load salt and derive keys
|
|
202
|
+
const credPath = join(config.data.path, 'credentials.json');
|
|
203
|
+
const creds = JSON.parse(await readFile(credPath, 'utf-8'));
|
|
204
|
+
const salt = hexToBytes(creds.salt);
|
|
205
|
+
const masterKey = await deriveMasterKey(passphrase, salt);
|
|
206
|
+
vaultKey = deriveVaultKey(masterKey);
|
|
207
|
+
// Verify passphrase
|
|
208
|
+
try {
|
|
209
|
+
decryptString(hexToBytes(creds.encryptedMasterKey), vaultKey);
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
console.error(chalk.red('Error: Incorrect passphrase.'));
|
|
213
|
+
process.exit(1);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
// Fresh setup
|
|
218
|
+
console.log(' 1. Create new account');
|
|
219
|
+
console.log(' 2. Log into existing account');
|
|
220
|
+
console.log('');
|
|
221
|
+
const choice = await ask(chalk.bold('Choose (1 or 2): '));
|
|
222
|
+
const isLogin = choice.trim() === '2';
|
|
223
|
+
if (isLogin) {
|
|
224
|
+
// Login flow
|
|
225
|
+
userId = (await ask(chalk.bold('User ID: '))).trim();
|
|
226
|
+
if (!userId) {
|
|
227
|
+
console.error(chalk.red('Error: User ID cannot be empty.'));
|
|
228
|
+
process.exit(1);
|
|
229
|
+
}
|
|
230
|
+
const passphrase = await ask(chalk.bold('Passphrase: '));
|
|
231
|
+
if (!passphrase || !passphrase.trim()) {
|
|
232
|
+
console.error(chalk.red('Error: Passphrase cannot be empty.'));
|
|
233
|
+
process.exit(1);
|
|
234
|
+
}
|
|
235
|
+
config = getDefaultConfig();
|
|
236
|
+
await ensureDirectories(config);
|
|
237
|
+
await saveConfig(config);
|
|
238
|
+
// Fetch salt from server
|
|
239
|
+
console.log(chalk.dim('Connecting to server...'));
|
|
240
|
+
const saltRes = await fetch(`${config.server.url}/api/auth/salt/${encodeURIComponent(userId)}`);
|
|
241
|
+
if (saltRes.status === 404) {
|
|
242
|
+
console.error(chalk.red('Error: User ID not found.'));
|
|
243
|
+
process.exit(1);
|
|
244
|
+
}
|
|
245
|
+
if (!saltRes.ok) {
|
|
246
|
+
console.error(chalk.red(`Error: Server returned ${saltRes.status}.`));
|
|
247
|
+
process.exit(1);
|
|
248
|
+
}
|
|
249
|
+
const { salt: saltHex } = (await saltRes.json());
|
|
250
|
+
const salt = hexToBytes(saltHex);
|
|
251
|
+
console.log(chalk.dim('Deriving encryption keys...'));
|
|
252
|
+
const masterKey = await deriveMasterKey(passphrase, salt);
|
|
253
|
+
const authKey = deriveAuthKey(masterKey);
|
|
254
|
+
vaultKey = deriveVaultKey(masterKey);
|
|
255
|
+
const authHash = createAuthHash(authKey);
|
|
256
|
+
// Login
|
|
257
|
+
console.log(chalk.dim('Authenticating...'));
|
|
258
|
+
const loginRes = await fetch(`${config.server.url}/api/auth/login`, {
|
|
259
|
+
method: 'POST',
|
|
260
|
+
headers: { 'Content-Type': 'application/json' },
|
|
261
|
+
body: JSON.stringify({ authKeyHash: authHash }),
|
|
262
|
+
});
|
|
263
|
+
if (loginRes.status === 401) {
|
|
264
|
+
console.error(chalk.red('Error: Incorrect passphrase.'));
|
|
265
|
+
process.exit(1);
|
|
266
|
+
}
|
|
267
|
+
if (!loginRes.ok) {
|
|
268
|
+
console.error(chalk.red(`Error: Server returned ${loginRes.status}.`));
|
|
269
|
+
process.exit(1);
|
|
270
|
+
}
|
|
271
|
+
const loginData = (await loginRes.json());
|
|
272
|
+
token = loginData.token;
|
|
273
|
+
userId = loginData.userId;
|
|
274
|
+
// Save credentials
|
|
275
|
+
const encryptedMasterKey = encryptString(bytesToHex(masterKey), vaultKey);
|
|
276
|
+
await writeFile(join(config.data.path, 'credentials.json'), JSON.stringify({ salt: saltHex, encryptedMasterKey: bytesToHex(encryptedMasterKey) }, null, 2), { mode: 0o600 });
|
|
277
|
+
deviceId = await registerDevice(config.server.url, token);
|
|
278
|
+
await writeFile(join(config.data.path, 'auth.json'), JSON.stringify({ authHash, userId, token, deviceId }, null, 2), { mode: 0o600 });
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
// Create account flow
|
|
282
|
+
const passphrase = await ask(chalk.bold('Choose a passphrase: '));
|
|
283
|
+
if (!passphrase || !passphrase.trim()) {
|
|
284
|
+
console.error(chalk.red('Error: Passphrase cannot be empty.'));
|
|
285
|
+
process.exit(1);
|
|
286
|
+
}
|
|
287
|
+
const confirmation = await ask(chalk.bold('Confirm passphrase: '));
|
|
288
|
+
if (passphrase !== confirmation) {
|
|
289
|
+
console.error(chalk.red('Error: Passphrases do not match.'));
|
|
290
|
+
process.exit(1);
|
|
291
|
+
}
|
|
292
|
+
console.log(chalk.dim('Deriving encryption keys...'));
|
|
293
|
+
const salt = generateSalt();
|
|
294
|
+
const masterKey = await deriveMasterKey(passphrase, salt);
|
|
295
|
+
const authKey = deriveAuthKey(masterKey);
|
|
296
|
+
vaultKey = deriveVaultKey(masterKey);
|
|
297
|
+
config = getDefaultConfig();
|
|
298
|
+
await ensureDirectories(config);
|
|
299
|
+
await saveConfig(config);
|
|
300
|
+
const encryptedMasterKey = encryptString(bytesToHex(masterKey), vaultKey);
|
|
301
|
+
await writeFile(join(config.data.path, 'credentials.json'), JSON.stringify({
|
|
302
|
+
salt: bytesToHex(salt),
|
|
303
|
+
encryptedMasterKey: bytesToHex(encryptedMasterKey),
|
|
304
|
+
}, null, 2), { mode: 0o600 });
|
|
305
|
+
const authHash = createAuthHash(authKey);
|
|
306
|
+
console.log(chalk.dim('Registering with server...'));
|
|
307
|
+
const regRes = await fetch(`${config.server.url}/api/auth/register`, {
|
|
308
|
+
method: 'POST',
|
|
309
|
+
headers: { 'Content-Type': 'application/json' },
|
|
310
|
+
body: JSON.stringify({
|
|
311
|
+
authKeyHash: authHash,
|
|
312
|
+
salt: bytesToHex(salt),
|
|
313
|
+
encryptedMasterKey: bytesToHex(encryptedMasterKey),
|
|
314
|
+
}),
|
|
315
|
+
});
|
|
316
|
+
if (regRes.ok) {
|
|
317
|
+
const regData = (await regRes.json());
|
|
318
|
+
token = regData.token;
|
|
319
|
+
userId = regData.userId;
|
|
320
|
+
deviceId = await registerDevice(config.server.url, token);
|
|
321
|
+
await writeFile(join(config.data.path, 'auth.json'), JSON.stringify({ authHash, userId, token, deviceId }, null, 2), { mode: 0o600 });
|
|
322
|
+
}
|
|
323
|
+
else if (regRes.status === 409) {
|
|
324
|
+
console.error(chalk.red('Error: An account with this passphrase already exists.'));
|
|
325
|
+
process.exit(1);
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
console.error(chalk.red(`Error: Server returned ${regRes.status}.`));
|
|
329
|
+
process.exit(1);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
console.log(chalk.green('✓ Account ready'));
|
|
333
|
+
console.log(` User ID: ${userId}`);
|
|
334
|
+
console.log('');
|
|
335
|
+
console.log(chalk.yellow.bold(' ⚠ Save your User ID and passphrase somewhere safe.'));
|
|
336
|
+
console.log('');
|
|
337
|
+
}
|
|
338
|
+
// Register device if we don't have one
|
|
339
|
+
if (!deviceId) {
|
|
340
|
+
deviceId = await registerDevice(config.server.url, token);
|
|
341
|
+
if (deviceId) {
|
|
342
|
+
// Update auth.json with deviceId
|
|
343
|
+
try {
|
|
344
|
+
const authPath = join(config.data.path, 'auth.json');
|
|
345
|
+
const auth = JSON.parse(await readFile(authPath, 'utf-8'));
|
|
346
|
+
auth.deviceId = deviceId;
|
|
347
|
+
await writeFile(authPath, JSON.stringify(auth, null, 2), { mode: 0o600 });
|
|
348
|
+
}
|
|
349
|
+
catch {
|
|
350
|
+
// Non-critical
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
// ─── Step 2: Adapters ───
|
|
355
|
+
console.log(chalk.bold('Detecting AI agents...'));
|
|
356
|
+
console.log('');
|
|
357
|
+
// Claude
|
|
358
|
+
const claudeDir = join(homedir(), '.claude');
|
|
359
|
+
let claudeDetected = false;
|
|
360
|
+
try {
|
|
361
|
+
await access(claudeDir);
|
|
362
|
+
claudeDetected = true;
|
|
363
|
+
}
|
|
364
|
+
catch {
|
|
365
|
+
// Not found
|
|
366
|
+
}
|
|
367
|
+
if (claudeDetected) {
|
|
368
|
+
console.log(chalk.green(' ✓ Claude Code detected'));
|
|
369
|
+
const adapter = getAdapter('claude', {
|
|
370
|
+
vaultPath: config.vault.path,
|
|
371
|
+
backupsPath: getBackupsPath(),
|
|
372
|
+
scanPaths: config.adapters.claude.scanPaths,
|
|
373
|
+
});
|
|
374
|
+
// Import files
|
|
375
|
+
console.log(chalk.dim(' Importing files...'));
|
|
376
|
+
const importResult = await adapter.import(claudeDir);
|
|
377
|
+
const skills = countByPrefix(importResult.imported, 'skills/') +
|
|
378
|
+
countByPrefix(importResult.skipped, 'skills/');
|
|
379
|
+
const rules = countByPrefix(importResult.imported, 'claude/rules/') +
|
|
380
|
+
countByPrefix(importResult.skipped, 'claude/rules/');
|
|
381
|
+
console.log(` ${skills} skills, ${rules} rules`);
|
|
382
|
+
console.log(` ${chalk.green(`${importResult.imported.length} new`)}, ` +
|
|
383
|
+
`${chalk.dim(`${importResult.skipped.length} unchanged`)}`);
|
|
384
|
+
// Create symlinks
|
|
385
|
+
console.log(chalk.dim(' Creating symlinks...'));
|
|
386
|
+
const symlinkResult = await adapter.createSymlinks(claudeDir);
|
|
387
|
+
console.log(` ${chalk.green(`${symlinkResult.created.length} symlinks`)}`);
|
|
388
|
+
config.adapters.claude.enabled = true;
|
|
389
|
+
config.adapters.claude.claudeDir = claudeDir;
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
console.log(chalk.dim(' ○ Claude Code not detected'));
|
|
393
|
+
}
|
|
394
|
+
// OpenClaw
|
|
395
|
+
const openclawDir = join(homedir(), '.openclaw', 'workspace');
|
|
396
|
+
let openclawDetected = false;
|
|
397
|
+
try {
|
|
398
|
+
await access(openclawDir);
|
|
399
|
+
openclawDetected = true;
|
|
400
|
+
}
|
|
401
|
+
catch {
|
|
402
|
+
// Not found
|
|
403
|
+
}
|
|
404
|
+
if (openclawDetected) {
|
|
405
|
+
console.log(chalk.green(' ✓ OpenClaw detected'));
|
|
406
|
+
const adapter = getAdapter('openclaw', {
|
|
407
|
+
vaultPath: config.vault.path,
|
|
408
|
+
backupsPath: getBackupsPath(),
|
|
409
|
+
scanPaths: [],
|
|
410
|
+
});
|
|
411
|
+
console.log(chalk.dim(' Importing files...'));
|
|
412
|
+
const importResult = await adapter.import(openclawDir);
|
|
413
|
+
console.log(` ${chalk.green(`${importResult.imported.length} new`)}, ` +
|
|
414
|
+
`${chalk.dim(`${importResult.skipped.length} unchanged`)}`);
|
|
415
|
+
console.log(chalk.dim(' Creating symlinks...'));
|
|
416
|
+
const symlinkResult = await adapter.createSymlinks(openclawDir);
|
|
417
|
+
console.log(` ${chalk.green(`${symlinkResult.created.length} symlinks`)}`);
|
|
418
|
+
config.adapters.openclaw.enabled = true;
|
|
419
|
+
config.adapters.openclaw.workspacePath = openclawDir;
|
|
420
|
+
}
|
|
421
|
+
else {
|
|
422
|
+
console.log(chalk.dim(' ○ OpenClaw not detected'));
|
|
423
|
+
}
|
|
424
|
+
console.log('');
|
|
425
|
+
// ─── Step 3: Scan paths ───
|
|
426
|
+
if (claudeDetected && config.adapters.claude.scanPaths.length === 0) {
|
|
427
|
+
console.log(chalk.bold('Project skills'));
|
|
428
|
+
console.log(chalk.dim(' ContextMate can scan directories for project-specific'));
|
|
429
|
+
console.log(chalk.dim(' skills in .claude/skills/ folders inside each repo.'));
|
|
430
|
+
console.log('');
|
|
431
|
+
const scanPath = await ask(chalk.bold(' Directory to scan (e.g. ~/Developer), or Enter to skip: '));
|
|
432
|
+
const trimmed = scanPath.trim();
|
|
433
|
+
if (trimmed) {
|
|
434
|
+
const resolved = trimmed.startsWith('~') ? trimmed.replace('~', homedir()) : trimmed;
|
|
435
|
+
config.adapters.claude.scanPaths = [resolved];
|
|
436
|
+
console.log(chalk.green(` ✓ Scan path added: ${resolved}`));
|
|
437
|
+
// Re-import with scan paths
|
|
438
|
+
const adapter = getAdapter('claude', {
|
|
439
|
+
vaultPath: config.vault.path,
|
|
440
|
+
backupsPath: getBackupsPath(),
|
|
441
|
+
scanPaths: config.adapters.claude.scanPaths,
|
|
442
|
+
});
|
|
443
|
+
console.log(chalk.dim(' Scanning for project skills...'));
|
|
444
|
+
const importResult = await adapter.import(claudeDir);
|
|
445
|
+
if (importResult.imported.length > 0) {
|
|
446
|
+
console.log(` ${chalk.green(`${importResult.imported.length} additional files imported`)}`);
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
console.log('');
|
|
450
|
+
}
|
|
451
|
+
// Save config
|
|
452
|
+
await saveConfig(config);
|
|
453
|
+
// ─── Step 4: Push device settings ───
|
|
454
|
+
if (deviceId) {
|
|
455
|
+
await pushDeviceSettings(config, token, deviceId, vaultKey);
|
|
456
|
+
}
|
|
457
|
+
// ─── Step 5: Initial sync ───
|
|
458
|
+
console.log(chalk.bold('Syncing files to server...'));
|
|
459
|
+
const syncResult = await initialSync(config, vaultKey, token);
|
|
460
|
+
if (syncResult.uploaded > 0) {
|
|
461
|
+
console.log(chalk.green(` ✓ ${syncResult.uploaded} files uploaded`));
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
console.log(chalk.dim(' No files to sync'));
|
|
465
|
+
}
|
|
466
|
+
if (syncResult.errors > 0) {
|
|
467
|
+
console.log(chalk.yellow(` ${syncResult.errors} files failed`));
|
|
468
|
+
}
|
|
469
|
+
console.log('');
|
|
470
|
+
// ─── Step 6: Open dashboard ───
|
|
471
|
+
console.log(chalk.bold('Opening web dashboard...'));
|
|
472
|
+
openBrowser('https://app.contextmate.dev');
|
|
473
|
+
console.log(chalk.dim(' app.contextmate.dev'));
|
|
474
|
+
console.log('');
|
|
475
|
+
// ─── Step 7: Start daemon ───
|
|
476
|
+
console.log(chalk.dim('─'.repeat(40)));
|
|
477
|
+
console.log('');
|
|
478
|
+
console.log(chalk.green.bold('Setup complete!'));
|
|
479
|
+
console.log('');
|
|
480
|
+
console.log(` ${chalk.bold('User ID:')} ${userId}`);
|
|
481
|
+
console.log(` ${chalk.bold('Server:')} ${config.server.url}`);
|
|
482
|
+
console.log(` ${chalk.bold('Dashboard:')} https://app.contextmate.dev`);
|
|
483
|
+
console.log('');
|
|
484
|
+
const startDaemon = await ask(chalk.bold('Start sync daemon now? (Y/n): '));
|
|
485
|
+
if (startDaemon.trim().toLowerCase() === 'n') {
|
|
486
|
+
console.log('');
|
|
487
|
+
console.log(chalk.dim('Run "contextmate daemon start" whenever you\'re ready to sync.'));
|
|
488
|
+
return;
|
|
489
|
+
}
|
|
490
|
+
// Start daemon
|
|
491
|
+
const pidFile = getPidFilePath(config);
|
|
492
|
+
try {
|
|
493
|
+
await access(pidFile);
|
|
494
|
+
const pidStr = await readFile(pidFile, 'utf-8');
|
|
495
|
+
const pid = parseInt(pidStr.trim(), 10);
|
|
496
|
+
if (isPidRunning(pid)) {
|
|
497
|
+
console.log(chalk.green(`Daemon already running (PID: ${pid}).`));
|
|
498
|
+
return;
|
|
499
|
+
}
|
|
500
|
+
await unlink(pidFile);
|
|
501
|
+
}
|
|
502
|
+
catch {
|
|
503
|
+
// No PID file
|
|
504
|
+
}
|
|
505
|
+
await writeFile(pidFile, String(process.pid), 'utf-8');
|
|
506
|
+
console.log(chalk.green(`Daemon started (PID: ${process.pid})`));
|
|
507
|
+
console.log(chalk.dim('Press Ctrl+C to stop.'));
|
|
508
|
+
const { SyncEngine } = await import('../sync/index.js');
|
|
509
|
+
const engine = new SyncEngine(config, vaultKey, token);
|
|
510
|
+
await engine.start();
|
|
511
|
+
const shutdown = async () => {
|
|
512
|
+
console.log(chalk.dim('\nStopping daemon...'));
|
|
513
|
+
await engine.stop();
|
|
514
|
+
try {
|
|
515
|
+
await unlink(pidFile);
|
|
516
|
+
}
|
|
517
|
+
catch { /* Already removed */ }
|
|
518
|
+
console.log(chalk.green('Daemon stopped.'));
|
|
519
|
+
process.exit(0);
|
|
520
|
+
};
|
|
521
|
+
process.on('SIGINT', () => void shutdown());
|
|
522
|
+
process.on('SIGTERM', () => void shutdown());
|
|
523
|
+
}
|
|
524
|
+
catch (err) {
|
|
525
|
+
console.error(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));
|
|
526
|
+
process.exit(1);
|
|
527
|
+
}
|
|
528
|
+
});
|
|
529
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/sync/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1E,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAK;gBAEpB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAKxC,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,UAAU,EACzB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA0BzB,YAAY,CAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAiBlE,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/sync/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1E,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAK;gBAEpB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAKxC,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,UAAU,EACzB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA0BzB,YAAY,CAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAiBlE,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAc1C,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAaxD,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBhE,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAa5B,cAAc;CAkC7B;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,SAAgB,QAAQ,EAAE,MAAM,CAAC;gBAErB,QAAQ,EAAE,MAAM;CAK7B"}
|
package/dist/src/sync/client.js
CHANGED
|
@@ -40,7 +40,8 @@ export class SyncClient {
|
|
|
40
40
|
if (!response.ok) {
|
|
41
41
|
throw new Error(`List files failed: ${response.status} ${response.statusText}`);
|
|
42
42
|
}
|
|
43
|
-
|
|
43
|
+
const data = (await response.json());
|
|
44
|
+
return data.files;
|
|
44
45
|
}
|
|
45
46
|
async getRemoteChanges(since) {
|
|
46
47
|
const response = await this.fetchWithRetry(`${this.baseUrl}/api/changes?since=${since}`, { method: 'GET' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/sync/client.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IACJ,OAAO,CAAS;IAChB,SAAS,CAAS;IAClB,UAAU,GAAG,CAAC,CAAC;IAEhC,YAAY,OAAe,EAAE,SAAiB;QAC5C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,UAAU,CACd,IAAY,EACZ,aAAyB,EACzB,aAAqB,EACrB,OAAe;QAEf,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CACxC,GAAG,IAAI,CAAC,OAAO,cAAc,kBAAkB,CAAC,IAAI,CAAC,EAAE,EACvD;YACE,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,cAAc,EAAE,0BAA0B;gBAC1C,gBAAgB,EAAE,aAAa;gBAC/B,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC;aAC7B;YACD,IAAI,EAAE,aAA+C;SACtD,CACF,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAC;QAC9D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,IAAY;QAEZ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CACxC,GAAG,IAAI,CAAC,OAAO,cAAc,kBAAkB,CAAC,IAAI,CAAC,EAAE,EACvD,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5F,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC;QACjE,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAEnE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CACxC,GAAG,IAAI,CAAC,OAAO,YAAY,EAC3B,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/sync/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,11 +8,12 @@ export declare class SyncEngine {
|
|
|
8
8
|
private readonly vaultKey;
|
|
9
9
|
private readonly config;
|
|
10
10
|
private pollTimer;
|
|
11
|
-
constructor(config: ContextMateConfig, vaultKey: Uint8Array);
|
|
11
|
+
constructor(config: ContextMateConfig, vaultKey: Uint8Array, authToken?: string);
|
|
12
12
|
start(): Promise<void>;
|
|
13
13
|
stop(): Promise<void>;
|
|
14
14
|
handleLocalChange(relativePath: string): Promise<void>;
|
|
15
15
|
handleRemoteUpdate(path: string, version: number): Promise<void>;
|
|
16
|
+
private discoverLocalFiles;
|
|
16
17
|
syncAll(): Promise<SyncResult>;
|
|
17
18
|
private handleLocalDelete;
|
|
18
19
|
private handleRemoteDelete;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/sync/engine.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,EAAE,CAA8B;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,SAAS,CAA+C;gBAEpD,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/sync/engine.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,EAAE,CAA8B;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,SAAS,CAA+C;gBAEpD,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM;IAMzE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2CtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBrB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4DtD,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAoDxD,kBAAkB;IAyB1B,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;YA0JtB,iBAAiB;YAMjB,kBAAkB;YAMlB,yBAAyB;CAmCxC"}
|
package/dist/src/sync/engine.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
2
|
-
import { join, dirname } from 'node:path';
|
|
1
|
+
import { readFile, writeFile, mkdir, readdir, stat } from 'node:fs/promises';
|
|
2
|
+
import { join, dirname, relative } from 'node:path';
|
|
3
3
|
import { randomUUID } from 'node:crypto';
|
|
4
4
|
import { FileWatcher } from './watcher.js';
|
|
5
5
|
import { SyncStateDB } from './state.js';
|
|
@@ -15,10 +15,10 @@ export class SyncEngine {
|
|
|
15
15
|
vaultKey;
|
|
16
16
|
config;
|
|
17
17
|
pollTimer = null;
|
|
18
|
-
constructor(config, vaultKey) {
|
|
18
|
+
constructor(config, vaultKey, authToken) {
|
|
19
19
|
this.config = config;
|
|
20
20
|
this.vaultKey = vaultKey;
|
|
21
|
-
this.client = new SyncClient(config.server.url, config.server.apiKey
|
|
21
|
+
this.client = new SyncClient(config.server.url, authToken || config.server.apiKey || '');
|
|
22
22
|
}
|
|
23
23
|
async start() {
|
|
24
24
|
// Initialize state database
|
|
@@ -170,6 +170,34 @@ export class SyncEngine {
|
|
|
170
170
|
this.stateDb.addSyncLog('error', path, message);
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
|
+
async discoverLocalFiles(dir, base) {
|
|
174
|
+
const paths = [];
|
|
175
|
+
let entries;
|
|
176
|
+
try {
|
|
177
|
+
entries = await readdir(dir);
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return paths;
|
|
181
|
+
}
|
|
182
|
+
for (const name of entries) {
|
|
183
|
+
if (name.startsWith('.') || name === 'node_modules')
|
|
184
|
+
continue;
|
|
185
|
+
const full = join(dir, name);
|
|
186
|
+
try {
|
|
187
|
+
const s = await stat(full);
|
|
188
|
+
if (s.isDirectory()) {
|
|
189
|
+
paths.push(...await this.discoverLocalFiles(full, base));
|
|
190
|
+
}
|
|
191
|
+
else if (s.isFile()) {
|
|
192
|
+
paths.push(relative(base, full));
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
// Skip inaccessible entries
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return paths;
|
|
200
|
+
}
|
|
173
201
|
async syncAll() {
|
|
174
202
|
const result = {
|
|
175
203
|
uploaded: [],
|
|
@@ -184,6 +212,45 @@ export class SyncEngine {
|
|
|
184
212
|
const remoteFiles = await this.client.listRemoteFiles();
|
|
185
213
|
const localFiles = this.stateDb.getAllFiles();
|
|
186
214
|
const localFileMap = new Map(localFiles.map((f) => [f.path, f]));
|
|
215
|
+
const remoteFileMap = new Map(remoteFiles.map((f) => [f.path, f]));
|
|
216
|
+
// Discover untracked local files and upload them
|
|
217
|
+
const localDiskFiles = await this.discoverLocalFiles(this.config.vault.path, this.config.vault.path);
|
|
218
|
+
for (const filePath of localDiskFiles) {
|
|
219
|
+
if (filePath.endsWith('.conflict.md'))
|
|
220
|
+
continue;
|
|
221
|
+
if (localFileMap.has(filePath))
|
|
222
|
+
continue; // Already tracked
|
|
223
|
+
if (remoteFileMap.has(filePath))
|
|
224
|
+
continue; // Will be handled by pull logic
|
|
225
|
+
try {
|
|
226
|
+
const absolutePath = join(this.config.vault.path, filePath);
|
|
227
|
+
const content = await readFile(absolutePath);
|
|
228
|
+
const contentBytes = new Uint8Array(content);
|
|
229
|
+
const contentHash = hashContent(contentBytes);
|
|
230
|
+
const fileKey = deriveKeyForPath(this.vaultKey, filePath);
|
|
231
|
+
const encrypted = encryptFile(contentBytes, fileKey);
|
|
232
|
+
const encryptedHash = hashContent(encrypted);
|
|
233
|
+
const uploadResult = await this.client.uploadFile(filePath, encrypted, encryptedHash, 0);
|
|
234
|
+
this.stateDb.upsertFile({
|
|
235
|
+
id: randomUUID(),
|
|
236
|
+
path: filePath,
|
|
237
|
+
contentHash,
|
|
238
|
+
encryptedHash,
|
|
239
|
+
version: uploadResult.version,
|
|
240
|
+
size: contentBytes.length,
|
|
241
|
+
syncState: 'synced',
|
|
242
|
+
lastModified: Date.now(),
|
|
243
|
+
});
|
|
244
|
+
this.stateDb.addSyncLog('upload', filePath);
|
|
245
|
+
result.uploaded.push(filePath);
|
|
246
|
+
}
|
|
247
|
+
catch (err) {
|
|
248
|
+
result.errors.push({
|
|
249
|
+
path: filePath,
|
|
250
|
+
error: err instanceof Error ? err.message : String(err),
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
}
|
|
187
254
|
// Push local changes (modified/pending files)
|
|
188
255
|
const modifiedFiles = this.stateDb.getModifiedFiles();
|
|
189
256
|
for (const file of modifiedFiles) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/sync/engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/sync/engine.ts"],"names":[],"mappings":"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"}
|