omniwire 2.0.0 → 2.2.1
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/.mcp.json.disabled +8 -0
- package/LICENSE +21 -21
- package/README.md +438 -316
- package/clawhub-skill/SKILL.md +354 -0
- package/dist/claude/integration.js +15 -18
- package/dist/claude/integration.js.map +1 -1
- package/dist/commands/browser.js +1 -1
- package/dist/commands/browser.js.map +1 -1
- package/dist/commands/builtins.js +6 -6
- package/dist/commands/builtins.js.map +1 -1
- package/dist/mcp/index.js +10 -3
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/rest.js +9 -1
- package/dist/mcp/rest.js.map +1 -1
- package/dist/mcp/server.js +133 -32
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/sync-tools.d.ts +3 -1
- package/dist/mcp/sync-tools.js +134 -1
- package/dist/mcp/sync-tools.js.map +1 -1
- package/dist/nodes/manager.d.ts +4 -0
- package/dist/nodes/manager.js +55 -18
- package/dist/nodes/manager.js.map +1 -1
- package/dist/nodes/transfer.js +8 -3
- package/dist/nodes/transfer.js.map +1 -1
- package/dist/protocol/config.d.ts +7 -1
- package/dist/protocol/config.js +73 -102
- package/dist/protocol/config.js.map +1 -1
- package/dist/sync/cookies.d.ts +52 -0
- package/dist/sync/cookies.js +259 -0
- package/dist/sync/cookies.js.map +1 -0
- package/dist/sync/crypto.d.ts +11 -0
- package/dist/sync/crypto.js +95 -0
- package/dist/sync/crypto.js.map +1 -0
- package/dist/sync/db.d.ts +3 -0
- package/dist/sync/db.js +21 -4
- package/dist/sync/db.js.map +1 -1
- package/dist/sync/engine.d.ts +3 -1
- package/dist/sync/engine.js +59 -8
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync/index.d.ts +2 -0
- package/dist/sync/index.js +44 -9
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/manifest.js +5 -5
- package/dist/sync/manifest.js.map +1 -1
- package/dist/sync/openclaw-bridge.d.ts +9 -0
- package/dist/sync/openclaw-bridge.js +206 -0
- package/dist/sync/openclaw-bridge.js.map +1 -0
- package/dist/sync/paths.js +6 -7
- package/dist/sync/paths.js.map +1 -1
- package/dist/sync/schema.js +2 -0
- package/dist/sync/schema.js.map +1 -1
- package/dist/sync/secrets.d.ts +32 -0
- package/dist/sync/secrets.js +221 -0
- package/dist/sync/secrets.js.map +1 -0
- package/dist/sync/types.d.ts +2 -0
- package/dist/sync/types.js +7 -7
- package/dist/sync/types.js.map +1 -1
- package/dist/sync/vault-bridge.d.ts +12 -0
- package/dist/sync/vault-bridge.js +152 -0
- package/dist/sync/vault-bridge.js.map +1 -0
- package/dist/ui/format.js +15 -14
- package/dist/ui/format.js.map +1 -1
- package/dist/update.d.ts +17 -0
- package/dist/update.js +108 -0
- package/dist/update.js.map +1 -0
- package/mesh.example.json +39 -0
- package/motd/00-cybernord +410 -0
- package/package.json +3 -36
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { SyncDB } from './db.js';
|
|
2
|
+
import type { NodeManager } from '../nodes/manager.js';
|
|
3
|
+
import type { TransferEngine } from '../nodes/transfer.js';
|
|
4
|
+
export type CookieFormat = 'json' | 'header' | 'netscape';
|
|
5
|
+
export interface Cookie {
|
|
6
|
+
domain: string;
|
|
7
|
+
name: string;
|
|
8
|
+
value: string;
|
|
9
|
+
path: string;
|
|
10
|
+
expires?: number;
|
|
11
|
+
httpOnly: boolean;
|
|
12
|
+
secure: boolean;
|
|
13
|
+
sameSite?: 'Strict' | 'Lax' | 'None';
|
|
14
|
+
}
|
|
15
|
+
export interface CookieJar {
|
|
16
|
+
domain: string;
|
|
17
|
+
cookies: Cookie[];
|
|
18
|
+
updatedAt: string;
|
|
19
|
+
source?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function cookiesToJson(cookies: Cookie[]): string;
|
|
22
|
+
export declare function cookiesToHeader(cookies: Cookie[]): string;
|
|
23
|
+
/**
|
|
24
|
+
* Netscape cookie file format (curl / wget compatible):
|
|
25
|
+
* domain includeSubdomains path secure expiry name value
|
|
26
|
+
*/
|
|
27
|
+
export declare function cookiesToNetscape(cookies: Cookie[]): string;
|
|
28
|
+
export declare function parseCookiesFromJson(raw: string): Cookie[];
|
|
29
|
+
export declare function parseCookiesFromHeader(header: string, domain: string): Cookie[];
|
|
30
|
+
export declare function parseCookiesFromNetscape(content: string): Cookie[];
|
|
31
|
+
export declare function parseCookies(raw: string, format: CookieFormat, domain?: string): Cookie[];
|
|
32
|
+
export declare function exportCookies(cookies: Cookie[], format: CookieFormat): string;
|
|
33
|
+
export declare function mirrorToVault(domain: string, cookies: Cookie[]): void;
|
|
34
|
+
export declare class CookieManager {
|
|
35
|
+
private readonly db;
|
|
36
|
+
private readonly manager?;
|
|
37
|
+
private readonly transfer?;
|
|
38
|
+
constructor(db: SyncDB, manager?: NodeManager, transfer?: TransferEngine);
|
|
39
|
+
private dbKey;
|
|
40
|
+
set(domain: string, cookies: Cookie[], source?: string): Promise<void>;
|
|
41
|
+
get(domain: string, format?: CookieFormat): Promise<string | null>;
|
|
42
|
+
list(): Promise<Array<{
|
|
43
|
+
domain: string;
|
|
44
|
+
count: number;
|
|
45
|
+
updatedAt: string;
|
|
46
|
+
source?: string;
|
|
47
|
+
}>>;
|
|
48
|
+
delete(domain: string): Promise<void>;
|
|
49
|
+
import(raw: string, format: CookieFormat, domain?: string, source?: string): Promise<Record<string, number>>;
|
|
50
|
+
syncToNodes(domain: string, nodeIds?: string[]): Promise<Record<string, boolean>>;
|
|
51
|
+
syncAllToNodes(nodeIds?: string[]): Promise<Record<string, Record<string, boolean>>>;
|
|
52
|
+
}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
// Cookie Management — format converters, PostgreSQL storage, vault mirroring, node sync
|
|
2
|
+
import { writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
// ─── Format Converters ────────────────────────────────────────────────────────
|
|
6
|
+
export function cookiesToJson(cookies) {
|
|
7
|
+
return JSON.stringify(cookies, null, 2);
|
|
8
|
+
}
|
|
9
|
+
export function cookiesToHeader(cookies) {
|
|
10
|
+
return cookies.map((c) => `${c.name}=${c.value}`).join('; ');
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Netscape cookie file format (curl / wget compatible):
|
|
14
|
+
* domain includeSubdomains path secure expiry name value
|
|
15
|
+
*/
|
|
16
|
+
export function cookiesToNetscape(cookies) {
|
|
17
|
+
const lines = [
|
|
18
|
+
'# Netscape HTTP Cookie File',
|
|
19
|
+
'# Generated by OmniWire CookieManager',
|
|
20
|
+
'',
|
|
21
|
+
];
|
|
22
|
+
for (const c of cookies) {
|
|
23
|
+
const domain = c.domain.startsWith('.') ? c.domain : `.${c.domain}`;
|
|
24
|
+
const includeSubdomains = 'TRUE';
|
|
25
|
+
const path = c.path || '/';
|
|
26
|
+
const secure = c.secure ? 'TRUE' : 'FALSE';
|
|
27
|
+
const expiry = c.expires ?? 0;
|
|
28
|
+
lines.push(`${domain}\t${includeSubdomains}\t${path}\t${secure}\t${expiry}\t${c.name}\t${c.value}`);
|
|
29
|
+
}
|
|
30
|
+
return lines.join('\n');
|
|
31
|
+
}
|
|
32
|
+
// ─── Parsers ──────────────────────────────────────────────────────────────────
|
|
33
|
+
export function parseCookiesFromJson(raw) {
|
|
34
|
+
const parsed = JSON.parse(raw);
|
|
35
|
+
if (!Array.isArray(parsed)) {
|
|
36
|
+
throw new Error('Expected JSON array of cookies');
|
|
37
|
+
}
|
|
38
|
+
return parsed;
|
|
39
|
+
}
|
|
40
|
+
export function parseCookiesFromHeader(header, domain) {
|
|
41
|
+
const cleaned = header.replace(/^Cookie:\s*/i, '').trim();
|
|
42
|
+
if (!cleaned)
|
|
43
|
+
return [];
|
|
44
|
+
return cleaned
|
|
45
|
+
.split(';')
|
|
46
|
+
.map((pair) => {
|
|
47
|
+
const eqIdx = pair.indexOf('=');
|
|
48
|
+
const name = eqIdx === -1 ? pair.trim() : pair.slice(0, eqIdx).trim();
|
|
49
|
+
const value = eqIdx === -1 ? '' : pair.slice(eqIdx + 1).trim();
|
|
50
|
+
const cookie = {
|
|
51
|
+
domain,
|
|
52
|
+
name,
|
|
53
|
+
value,
|
|
54
|
+
path: '/',
|
|
55
|
+
httpOnly: false,
|
|
56
|
+
secure: false,
|
|
57
|
+
};
|
|
58
|
+
return cookie;
|
|
59
|
+
})
|
|
60
|
+
.filter((c) => c.name.length > 0);
|
|
61
|
+
}
|
|
62
|
+
export function parseCookiesFromNetscape(content) {
|
|
63
|
+
const cookies = [];
|
|
64
|
+
for (const raw of content.split('\n')) {
|
|
65
|
+
const line = raw.trim();
|
|
66
|
+
if (!line || line.startsWith('#'))
|
|
67
|
+
continue;
|
|
68
|
+
const parts = line.split('\t');
|
|
69
|
+
if (parts.length < 7)
|
|
70
|
+
continue;
|
|
71
|
+
const [domainRaw, , path, secureStr, expiryStr, name, value] = parts;
|
|
72
|
+
const domain = domainRaw.startsWith('.') ? domainRaw.slice(1) : domainRaw;
|
|
73
|
+
const expiry = parseInt(expiryStr, 10);
|
|
74
|
+
cookies.push({
|
|
75
|
+
domain,
|
|
76
|
+
name,
|
|
77
|
+
value,
|
|
78
|
+
path: path || '/',
|
|
79
|
+
expires: expiry > 0 ? expiry : undefined,
|
|
80
|
+
httpOnly: false,
|
|
81
|
+
secure: secureStr === 'TRUE',
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return cookies;
|
|
85
|
+
}
|
|
86
|
+
export function parseCookies(raw, format, domain) {
|
|
87
|
+
switch (format) {
|
|
88
|
+
case 'json':
|
|
89
|
+
return parseCookiesFromJson(raw);
|
|
90
|
+
case 'header':
|
|
91
|
+
return parseCookiesFromHeader(raw, domain ?? '');
|
|
92
|
+
case 'netscape':
|
|
93
|
+
return parseCookiesFromNetscape(raw);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
export function exportCookies(cookies, format) {
|
|
97
|
+
switch (format) {
|
|
98
|
+
case 'json':
|
|
99
|
+
return cookiesToJson(cookies);
|
|
100
|
+
case 'header':
|
|
101
|
+
return cookiesToHeader(cookies);
|
|
102
|
+
case 'netscape':
|
|
103
|
+
return cookiesToNetscape(cookies);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// ─── Vault Mirroring ──────────────────────────────────────────────────────────
|
|
107
|
+
export function mirrorToVault(domain, cookies) {
|
|
108
|
+
const vaultDir = join(homedir(), 'Documents', 'BuisnessProjects', 'CyberBase', 'credentials', 'cookies');
|
|
109
|
+
if (!existsSync(vaultDir)) {
|
|
110
|
+
mkdirSync(vaultDir, { recursive: true });
|
|
111
|
+
}
|
|
112
|
+
const now = new Date().toISOString();
|
|
113
|
+
const tableRows = cookies
|
|
114
|
+
.map((c) => {
|
|
115
|
+
const expires = c.expires
|
|
116
|
+
? new Date(c.expires * 1000).toISOString().slice(0, 10)
|
|
117
|
+
: 'session';
|
|
118
|
+
const flags = [
|
|
119
|
+
c.httpOnly ? 'HttpOnly' : '',
|
|
120
|
+
c.secure ? 'Secure' : '',
|
|
121
|
+
c.sameSite ? `SameSite=${c.sameSite}` : '',
|
|
122
|
+
]
|
|
123
|
+
.filter(Boolean)
|
|
124
|
+
.join(', ');
|
|
125
|
+
const truncatedValue = c.value.length > 40 ? `${c.value.slice(0, 40)}…` : c.value;
|
|
126
|
+
return `| ${c.name} | ${truncatedValue} | ${c.path} | ${expires} | ${flags} |`;
|
|
127
|
+
})
|
|
128
|
+
.join('\n');
|
|
129
|
+
const content = `---
|
|
130
|
+
domain: ${domain}
|
|
131
|
+
type: cookie
|
|
132
|
+
tags:
|
|
133
|
+
- credentials
|
|
134
|
+
- cookie
|
|
135
|
+
last-updated: ${now}
|
|
136
|
+
cookie-count: ${cookies.length}
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
# Cookies — ${domain}
|
|
140
|
+
|
|
141
|
+
| Name | Value | Path | Expires | Flags |
|
|
142
|
+
|------|-------|------|---------|-------|
|
|
143
|
+
${tableRows}
|
|
144
|
+
`;
|
|
145
|
+
writeFileSync(join(vaultDir, `${domain}.md`), content, 'utf8');
|
|
146
|
+
}
|
|
147
|
+
// ─── CookieManager ────────────────────────────────────────────────────────────
|
|
148
|
+
export class CookieManager {
|
|
149
|
+
db;
|
|
150
|
+
manager;
|
|
151
|
+
transfer;
|
|
152
|
+
constructor(db, manager, transfer) {
|
|
153
|
+
this.db = db;
|
|
154
|
+
this.manager = manager;
|
|
155
|
+
this.transfer = transfer;
|
|
156
|
+
}
|
|
157
|
+
dbKey(domain) {
|
|
158
|
+
return `cookie:${domain}`;
|
|
159
|
+
}
|
|
160
|
+
async set(domain, cookies, source) {
|
|
161
|
+
const jar = {
|
|
162
|
+
domain,
|
|
163
|
+
cookies,
|
|
164
|
+
updatedAt: new Date().toISOString(),
|
|
165
|
+
source,
|
|
166
|
+
};
|
|
167
|
+
await this.db.upsertKnowledge('omniwire', this.dbKey(domain), jar);
|
|
168
|
+
mirrorToVault(domain, cookies);
|
|
169
|
+
}
|
|
170
|
+
async get(domain, format = 'json') {
|
|
171
|
+
const entries = await this.db.getKnowledgeByPrefix('omniwire', this.dbKey(domain));
|
|
172
|
+
const entry = entries.find((e) => e.key === this.dbKey(domain));
|
|
173
|
+
if (!entry)
|
|
174
|
+
return null;
|
|
175
|
+
const jar = entry.value;
|
|
176
|
+
if (!jar.cookies || jar.cookies.length === 0)
|
|
177
|
+
return null;
|
|
178
|
+
return exportCookies(jar.cookies, format);
|
|
179
|
+
}
|
|
180
|
+
async list() {
|
|
181
|
+
const entries = await this.db.getKnowledgeByPrefix('omniwire', 'cookie:');
|
|
182
|
+
return entries.map((e) => {
|
|
183
|
+
const jar = e.value;
|
|
184
|
+
return {
|
|
185
|
+
domain: jar.domain,
|
|
186
|
+
count: jar.cookies?.length ?? 0,
|
|
187
|
+
updatedAt: jar.updatedAt,
|
|
188
|
+
source: jar.source,
|
|
189
|
+
};
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
async delete(domain) {
|
|
193
|
+
const jar = {
|
|
194
|
+
domain,
|
|
195
|
+
cookies: [],
|
|
196
|
+
updatedAt: new Date().toISOString(),
|
|
197
|
+
};
|
|
198
|
+
await this.db.upsertKnowledge('omniwire', this.dbKey(domain), jar);
|
|
199
|
+
}
|
|
200
|
+
async import(raw, format, domain, source) {
|
|
201
|
+
const cookies = parseCookies(raw, format, domain);
|
|
202
|
+
// Group cookies by their embedded domain field
|
|
203
|
+
const grouped = new Map();
|
|
204
|
+
for (const cookie of cookies) {
|
|
205
|
+
const key = cookie.domain || domain || 'unknown';
|
|
206
|
+
const existing = grouped.get(key) ?? [];
|
|
207
|
+
grouped.set(key, [...existing, cookie]);
|
|
208
|
+
}
|
|
209
|
+
// If the caller provided a fallback domain and all cookies lacked one, bucket under it
|
|
210
|
+
if (grouped.size === 0 && domain) {
|
|
211
|
+
grouped.set(domain, []);
|
|
212
|
+
}
|
|
213
|
+
const results = {};
|
|
214
|
+
for (const [dom, domCookies] of grouped) {
|
|
215
|
+
await this.set(dom, domCookies, source);
|
|
216
|
+
results[dom] = domCookies.length;
|
|
217
|
+
}
|
|
218
|
+
return results;
|
|
219
|
+
}
|
|
220
|
+
async syncToNodes(domain, nodeIds) {
|
|
221
|
+
if (!this.manager || !this.transfer) {
|
|
222
|
+
throw new Error('Node manager and transfer engine are required for node sync');
|
|
223
|
+
}
|
|
224
|
+
const entries = await this.db.getKnowledgeByPrefix('omniwire', this.dbKey(domain));
|
|
225
|
+
const entry = entries.find((e) => e.key === this.dbKey(domain));
|
|
226
|
+
if (!entry) {
|
|
227
|
+
throw new Error(`No cookie jar found for domain: ${domain}`);
|
|
228
|
+
}
|
|
229
|
+
const jar = entry.value;
|
|
230
|
+
const netscape = cookiesToNetscape(jar.cookies);
|
|
231
|
+
const remotePath = `/root/.omniwire/cookies/${domain}.txt`;
|
|
232
|
+
const targets = nodeIds ?? this.manager.getOnlineNodes();
|
|
233
|
+
const results = {};
|
|
234
|
+
await Promise.allSettled(targets.map(async (nodeId) => {
|
|
235
|
+
try {
|
|
236
|
+
await this.transfer.writeFile(nodeId, remotePath, netscape);
|
|
237
|
+
results[nodeId] = true;
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
results[nodeId] = false;
|
|
241
|
+
}
|
|
242
|
+
}));
|
|
243
|
+
return results;
|
|
244
|
+
}
|
|
245
|
+
async syncAllToNodes(nodeIds) {
|
|
246
|
+
const allJars = await this.list();
|
|
247
|
+
const results = {};
|
|
248
|
+
for (const { domain } of allJars) {
|
|
249
|
+
try {
|
|
250
|
+
results[domain] = await this.syncToNodes(domain, nodeIds);
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
results[domain] = {};
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return results;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=cookies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../src/sync/cookies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const SENSITIVE_GLOBS: string[];
|
|
2
|
+
/** Load or generate the master encryption key */
|
|
3
|
+
export declare function loadOrCreateKey(): Uint8Array;
|
|
4
|
+
/** Check if encryption key exists (don't auto-create) */
|
|
5
|
+
export declare function hasEncryptionKey(): boolean;
|
|
6
|
+
/** Encrypt plaintext → { nonce (24 bytes) || ciphertext+tag } */
|
|
7
|
+
export declare function encrypt(plaintext: Buffer, key: Uint8Array): Buffer;
|
|
8
|
+
/** Decrypt { nonce (24 bytes) || ciphertext+tag } → plaintext */
|
|
9
|
+
export declare function decrypt(encrypted: Buffer, key: Uint8Array): Buffer;
|
|
10
|
+
/** Check if a relative path should be encrypted based on sensitive globs */
|
|
11
|
+
export declare function isSensitivePath(relPath: string): boolean;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// CyberSync — XChaCha20-Poly1305 encryption for sensitive sync items
|
|
2
|
+
// Uses @noble/ciphers — zero C dependencies, audited, constant-time
|
|
3
|
+
import { xchacha20poly1305 } from '@noble/ciphers/chacha.js';
|
|
4
|
+
import { randomBytes } from 'node:crypto';
|
|
5
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { homedir } from 'node:os';
|
|
8
|
+
const KEY_LENGTH = 32; // 256-bit key
|
|
9
|
+
const NONCE_LENGTH = 24; // 192-bit nonce (XChaCha20)
|
|
10
|
+
const CONFIG_DIR = join(homedir(), '.omniwire');
|
|
11
|
+
const KEY_PATH = join(CONFIG_DIR, 'secret.key');
|
|
12
|
+
// Globs that trigger encryption — files matching these are encrypted at rest
|
|
13
|
+
export const SENSITIVE_GLOBS = [
|
|
14
|
+
'settings.json',
|
|
15
|
+
'settings.local.json',
|
|
16
|
+
'.credentials.json',
|
|
17
|
+
'memory/**',
|
|
18
|
+
'*.env',
|
|
19
|
+
'config.json',
|
|
20
|
+
'opencode.json',
|
|
21
|
+
'openclaw.json',
|
|
22
|
+
];
|
|
23
|
+
let cachedKey = null;
|
|
24
|
+
/** Load or generate the master encryption key */
|
|
25
|
+
export function loadOrCreateKey() {
|
|
26
|
+
if (cachedKey)
|
|
27
|
+
return cachedKey;
|
|
28
|
+
if (existsSync(KEY_PATH)) {
|
|
29
|
+
const hex = readFileSync(KEY_PATH, 'utf-8').trim();
|
|
30
|
+
cachedKey = Buffer.from(hex, 'hex');
|
|
31
|
+
if (cachedKey.length !== KEY_LENGTH) {
|
|
32
|
+
throw new Error(`Invalid key length in ${KEY_PATH}: expected ${KEY_LENGTH} bytes, got ${cachedKey.length}`);
|
|
33
|
+
}
|
|
34
|
+
return cachedKey;
|
|
35
|
+
}
|
|
36
|
+
// Generate new key
|
|
37
|
+
if (!existsSync(CONFIG_DIR)) {
|
|
38
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
39
|
+
}
|
|
40
|
+
const key = randomBytes(KEY_LENGTH);
|
|
41
|
+
writeFileSync(KEY_PATH, Buffer.from(key).toString('hex') + '\n', { mode: 0o600 });
|
|
42
|
+
cachedKey = new Uint8Array(key);
|
|
43
|
+
return cachedKey;
|
|
44
|
+
}
|
|
45
|
+
/** Check if encryption key exists (don't auto-create) */
|
|
46
|
+
export function hasEncryptionKey() {
|
|
47
|
+
return existsSync(KEY_PATH);
|
|
48
|
+
}
|
|
49
|
+
/** Encrypt plaintext → { nonce (24 bytes) || ciphertext+tag } */
|
|
50
|
+
export function encrypt(plaintext, key) {
|
|
51
|
+
const nonce = randomBytes(NONCE_LENGTH);
|
|
52
|
+
const cipher = xchacha20poly1305(key, nonce);
|
|
53
|
+
const ciphertext = cipher.encrypt(new Uint8Array(plaintext));
|
|
54
|
+
// Prepend nonce to ciphertext for storage
|
|
55
|
+
const result = Buffer.alloc(NONCE_LENGTH + ciphertext.length);
|
|
56
|
+
result.set(nonce, 0);
|
|
57
|
+
result.set(ciphertext, NONCE_LENGTH);
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
/** Decrypt { nonce (24 bytes) || ciphertext+tag } → plaintext */
|
|
61
|
+
export function decrypt(encrypted, key) {
|
|
62
|
+
if (encrypted.length < NONCE_LENGTH + 16) {
|
|
63
|
+
throw new Error('Encrypted data too short (missing nonce or auth tag)');
|
|
64
|
+
}
|
|
65
|
+
const nonce = new Uint8Array(encrypted.subarray(0, NONCE_LENGTH));
|
|
66
|
+
const ciphertext = new Uint8Array(encrypted.subarray(NONCE_LENGTH));
|
|
67
|
+
const cipher = xchacha20poly1305(key, nonce);
|
|
68
|
+
const plaintext = cipher.decrypt(ciphertext);
|
|
69
|
+
return Buffer.from(plaintext);
|
|
70
|
+
}
|
|
71
|
+
/** Check if a relative path should be encrypted based on sensitive globs */
|
|
72
|
+
export function isSensitivePath(relPath) {
|
|
73
|
+
const normalized = relPath.replaceAll('\\', '/');
|
|
74
|
+
for (const pattern of SENSITIVE_GLOBS) {
|
|
75
|
+
if (pattern.includes('**')) {
|
|
76
|
+
// Directory glob: memory/** matches memory/anything
|
|
77
|
+
const prefix = pattern.replace('/**', '');
|
|
78
|
+
if (normalized.startsWith(prefix + '/') || normalized === prefix)
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
else if (pattern.startsWith('*.')) {
|
|
82
|
+
// Extension glob: *.env matches anything.env
|
|
83
|
+
const ext = pattern.slice(1);
|
|
84
|
+
if (normalized.endsWith(ext))
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// Exact match or filename match
|
|
89
|
+
if (normalized === pattern || normalized.endsWith('/' + pattern))
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/sync/crypto.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,oEAAoE;AAEpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,UAAU,GAAG,EAAE,CAAC,CAAO,cAAc;AAC3C,MAAM,YAAY,GAAG,EAAE,CAAC,CAAK,4BAA4B;AACzD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAEhD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,eAAe;IACf,qBAAqB;IACrB,mBAAmB;IACnB,WAAW;IACX,OAAO;IACP,aAAa;IACb,eAAe;IACf,eAAe;CAChB,CAAC;AAEF,IAAI,SAAS,GAAsB,IAAI,CAAC;AAExC,iDAAiD;AACjD,MAAM,UAAU,eAAe;IAC7B,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAEhC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACpC,IAAI,SAAS,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,cAAc,UAAU,eAAe,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9G,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACpC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAClF,SAAS,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,gBAAgB;IAC9B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,OAAO,CAAC,SAAiB,EAAE,GAAe;IACxD,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7D,0CAA0C;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACrB,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,OAAO,CAAC,SAAiB,EAAE,GAAe;IACxD,IAAI,SAAS,CAAC,MAAM,GAAG,YAAY,GAAG,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAChC,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjD,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,oDAAoD;YACpD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC1C,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,UAAU,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAC;QAChF,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,6CAA6C;YAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,gCAAgC;YAChC,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC;gBAAE,OAAO,IAAI,CAAC;QAChF,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/sync/db.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export declare class SyncDB {
|
|
|
14
14
|
contentSize: number;
|
|
15
15
|
metadata: Record<string, unknown>;
|
|
16
16
|
updatedByNode: string;
|
|
17
|
+
encrypted?: boolean;
|
|
17
18
|
}): Promise<SyncItem>;
|
|
18
19
|
markDeleted(tool: string, relPath: string, nodeId: string): Promise<void>;
|
|
19
20
|
getItem(tool: string, relPath: string): Promise<SyncItem | null>;
|
|
@@ -36,6 +37,8 @@ export declare class SyncDB {
|
|
|
36
37
|
}): Promise<SyncEvent[]>;
|
|
37
38
|
upsertKnowledge(sourceTool: string, key: string, value: Record<string, unknown>): Promise<void>;
|
|
38
39
|
searchKnowledge(query: string): Promise<KnowledgeEntry[]>;
|
|
40
|
+
getKnowledgeByPrefix(sourceTool: string, keyPrefix: string): Promise<KnowledgeEntry[]>;
|
|
41
|
+
getKnowledgeByField(sourceTool: string, field: string, value: string): Promise<KnowledgeEntry[]>;
|
|
39
42
|
upsertClaudeMemory(nodeId: string, key: string, value: string): Promise<void>;
|
|
40
43
|
getClaudeMemory(opts: {
|
|
41
44
|
nodeId?: string;
|
package/dist/sync/db.js
CHANGED
|
@@ -26,8 +26,8 @@ export class SyncDB {
|
|
|
26
26
|
}
|
|
27
27
|
// --- sync_items ---
|
|
28
28
|
async upsertItem(item) {
|
|
29
|
-
const { rows } = await this.pool.query(`INSERT INTO sync_items (tool, category, rel_path, content_hash, content, content_size, metadata, updated_by_node, is_deleted)
|
|
30
|
-
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, false)
|
|
29
|
+
const { rows } = await this.pool.query(`INSERT INTO sync_items (tool, category, rel_path, content_hash, content, content_size, metadata, updated_by_node, is_deleted, encrypted)
|
|
30
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, false, $9)
|
|
31
31
|
ON CONFLICT (tool, rel_path) DO UPDATE SET
|
|
32
32
|
content_hash = EXCLUDED.content_hash,
|
|
33
33
|
content = EXCLUDED.content,
|
|
@@ -35,9 +35,10 @@ export class SyncDB {
|
|
|
35
35
|
metadata = EXCLUDED.metadata,
|
|
36
36
|
updated_at = now(),
|
|
37
37
|
updated_by_node = EXCLUDED.updated_by_node,
|
|
38
|
-
is_deleted = false
|
|
38
|
+
is_deleted = false,
|
|
39
|
+
encrypted = EXCLUDED.encrypted
|
|
39
40
|
WHERE sync_items.content_hash != EXCLUDED.content_hash
|
|
40
|
-
RETURNING *`, [item.tool, item.category, item.relPath, item.contentHash, item.content, item.contentSize, JSON.stringify(item.metadata), item.updatedByNode]);
|
|
41
|
+
RETURNING *`, [item.tool, item.category, item.relPath, item.contentHash, item.content, item.contentSize, JSON.stringify(item.metadata), item.updatedByNode, item.encrypted ?? false]);
|
|
41
42
|
// If no rows returned, item already up-to-date — fetch existing
|
|
42
43
|
if (rows.length === 0) {
|
|
43
44
|
const existing = await this.pool.query('SELECT * FROM sync_items WHERE tool = $1 AND rel_path = $2', [item.tool, item.relPath]);
|
|
@@ -135,6 +136,21 @@ export class SyncDB {
|
|
|
135
136
|
ORDER BY updated_at DESC LIMIT 50`, [`%${query}%`]);
|
|
136
137
|
return rows;
|
|
137
138
|
}
|
|
139
|
+
// --- knowledge queries ---
|
|
140
|
+
async getKnowledgeByPrefix(sourceTool, keyPrefix) {
|
|
141
|
+
const { rows } = await this.pool.query(`SELECT id, source_tool as "sourceTool", key, value, created_at as "createdAt", updated_at as "updatedAt"
|
|
142
|
+
FROM knowledge
|
|
143
|
+
WHERE source_tool = $1 AND key LIKE $2
|
|
144
|
+
ORDER BY key`, [sourceTool, `${keyPrefix}%`]);
|
|
145
|
+
return rows;
|
|
146
|
+
}
|
|
147
|
+
async getKnowledgeByField(sourceTool, field, value) {
|
|
148
|
+
const { rows } = await this.pool.query(`SELECT id, source_tool as "sourceTool", key, value, created_at as "createdAt", updated_at as "updatedAt"
|
|
149
|
+
FROM knowledge
|
|
150
|
+
WHERE source_tool = $1 AND value->>$2 = $3
|
|
151
|
+
ORDER BY key`, [sourceTool, field, value]);
|
|
152
|
+
return rows;
|
|
153
|
+
}
|
|
138
154
|
// --- claude_memory ---
|
|
139
155
|
async upsertClaudeMemory(nodeId, key, value) {
|
|
140
156
|
await this.pool.query(`INSERT INTO claude_memory (node_id, key, value)
|
|
@@ -206,6 +222,7 @@ export class SyncDB {
|
|
|
206
222
|
updatedAt: new Date(row.updated_at ?? row.updatedAt),
|
|
207
223
|
updatedByNode: (row.updated_by_node ?? row.updatedByNode),
|
|
208
224
|
isDeleted: Boolean(row.is_deleted ?? row.isDeleted),
|
|
225
|
+
encrypted: Boolean(row.encrypted ?? false),
|
|
209
226
|
};
|
|
210
227
|
}
|
|
211
228
|
}
|
package/dist/sync/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/sync/db.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAEzD,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,OAAO,MAAM;IAGG;IAFZ,IAAI,CAAU;IAEtB,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC;YACtB,IAAI,EAAE,MAAM,CAAC,MAAM;YACnB,IAAI,EAAE,MAAM,CAAC,MAAM;YACnB,QAAQ,EAAE,MAAM,CAAC,UAAU;YAC3B,IAAI,EAAE,MAAM,CAAC,MAAM;YACnB,QAAQ,EAAE,MAAM,CAAC,UAAU;YAC3B,GAAG,EAAE,CAAC;YACN,iBAAiB,EAAE,MAAM;YACzB,uBAAuB,EAAE,KAAK;YAC9B,iBAAiB,EAAE,MAAM;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,CAAC;IAED,qBAAqB;IAErB,KAAK,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/sync/db.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAEzD,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,OAAO,MAAM;IAGG;IAFZ,IAAI,CAAU;IAEtB,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC;YACtB,IAAI,EAAE,MAAM,CAAC,MAAM;YACnB,IAAI,EAAE,MAAM,CAAC,MAAM;YACnB,QAAQ,EAAE,MAAM,CAAC,UAAU;YAC3B,IAAI,EAAE,MAAM,CAAC,MAAM;YACnB,QAAQ,EAAE,MAAM,CAAC,UAAU;YAC3B,GAAG,EAAE,CAAC;YACN,iBAAiB,EAAE,MAAM;YACzB,uBAAuB,EAAE,KAAK;YAC9B,iBAAiB,EAAE,MAAM;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,CAAC;IAED,qBAAqB;IAErB,KAAK,CAAC,UAAU,CAAC,IAUhB;QACC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC;;;;;;;;;;;;mBAYa,EACb,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,CACvK,CAAC;QACF,gEAAgE;QAChE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC,4DAA4D,EAC5D,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAC1B,CAAC;YACF,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAA4B,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAuC,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,OAAe,EAAE,MAAc;QAC7D,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB;yCACmC,EACnC,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CACxB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,OAAe;QACzC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,4DAA4D,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACtH,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAY;QAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC,mFAAmF,EACnF,CAAC,IAAI,CAAC,CACP,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC,2EAA2E,CAC5E,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,KAAW;QACpC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC,oEAAoE,EACpE,CAAC,KAAK,CAAC,CACR,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC;;uDAEiD,CAClD,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0BAA0B;IAE1B,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,MAAc,EAAE,WAAmB;QACtE,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB;;;;2BAIqB,EACrB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAC9B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAc;QACnC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC,iJAAiJ,EACjJ,CAAC,MAAM,CAAC,CACT,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAAc;QAClC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC;;;;8BAIwB,EACxB,CAAC,MAAM,CAAC,CACT,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,sBAAsB;IAEtB,KAAK,CAAC,QAAQ,CAAC,MAAqB,EAAE,MAAc,EAAE,SAAwB,EAAE,MAAqB;QACnG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB,wFAAwF,EACxF,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CACpC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAA6D;QAC3E,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,IAAI,GAAG,GAAG,CAAC,CAAC;QAEZ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,EAAE,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QACtF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,GAAG,EAAE,EAAE,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAAC,CAAC;QAE/F,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAE/B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC;0BACoB,KAAK,oCAAoC,GAAG,EAAE,EAClE,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CACnB,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oBAAoB;IAEpB,KAAK,CAAC,eAAe,CAAC,UAAkB,EAAE,GAAW,EAAE,KAA8B;QACnF,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB;;;oDAG8C,EAC9C,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CACzC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,KAAa;QACjC,2DAA2D;QAC3D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAC7C;;;yCAGmC,EACnC,CAAC,KAAK,CAAC,CACR,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAsB,EAAE,CAAC,CAAC,CAAC;QAElD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC;QAEvC,wCAAwC;QACxC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC;;;yCAGmC,EACnC,CAAC,IAAI,KAAK,GAAG,CAAC,CACf,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4BAA4B;IAE5B,KAAK,CAAC,oBAAoB,CAAC,UAAkB,EAAE,SAAiB;QAC9D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC;;;oBAGc,EACd,CAAC,UAAU,EAAE,GAAG,SAAS,GAAG,CAAC,CAC9B,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,UAAkB,EAAE,KAAa,EAAE,KAAa;QACxE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC;;;oBAGc,EACd,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAC3B,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wBAAwB;IAExB,KAAK,CAAC,kBAAkB,CAAC,MAAc,EAAE,GAAW,EAAE,KAAa;QACjE,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB;;;;6BAIuB,EACvB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CACrB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAuC;QAC3D,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,IAAI,GAAG,GAAG,CAAC,CAAC;QAEZ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,EAAE,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QACtF,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,EAAE,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QAAC,CAAC;QAEvF,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE/E,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC;4BACsB,KAAK,sCAAsC,EACjE,MAAM,CACP,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qBAAqB;IAErB,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,UAAkB,EAAE,WAAmB;QACrE,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB;;;;;8CAKwC,EACxC,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAClC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC;6CACuC,CACxC,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2BAA2B;IAE3B,KAAK,CAAC,mBAAmB,CAAC,OAA+E;QACvG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB;;;iEAG2D,EAC3D,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAC3B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,YAAoB,IAAI;QACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACxC;;SAEG,EACH,CAAC,SAAS,CAAC,CACZ,CAAC;QACF,OAAO,QAAQ,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,kBAAkB;IAEV,WAAW,CAAC,GAA4B;QAC9C,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAY;YACpB,IAAI,EAAE,GAAG,CAAC,IAAwB;YAClC,QAAQ,EAAE,GAAG,CAAC,QAAkB;YAChC,OAAO,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAW;YAChD,WAAW,EAAE,CAAC,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,WAAW,CAAW;YAC5D,OAAO,EAAE,GAAG,CAAC,OAAwB;YACrC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;YAC7D,QAAQ,EAAE,CAAC,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAA4B;YACvH,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAoB,IAAI,GAAG,CAAC,SAAmB,CAAC;YACxE,aAAa,EAAE,CAAC,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,aAAa,CAAW;YACnE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,SAAS,CAAC;YACnD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC;SAC3C,CAAC;IACJ,CAAC;CACF"}
|
package/dist/sync/engine.d.ts
CHANGED
|
@@ -2,12 +2,14 @@ import type { SyncDB } from './db.js';
|
|
|
2
2
|
import type { SyncConfig, ToolManifest, SyncDiff } from './types.js';
|
|
3
3
|
import type { NodeManager } from '../nodes/manager.js';
|
|
4
4
|
import type { TransferEngine } from '../nodes/transfer.js';
|
|
5
|
+
import { VaultBridge } from './vault-bridge.js';
|
|
5
6
|
export declare class SyncEngine {
|
|
6
7
|
private db;
|
|
7
8
|
private config;
|
|
8
9
|
private manager;
|
|
9
10
|
private transfer;
|
|
10
|
-
|
|
11
|
+
private vault;
|
|
12
|
+
constructor(db: SyncDB, config: SyncConfig, manager: NodeManager, transfer: TransferEngine, vault?: VaultBridge);
|
|
11
13
|
pushFile(tool: string, relPath: string, absPath: string, opts?: {
|
|
12
14
|
skipRemotePush?: boolean;
|
|
13
15
|
}): Promise<void>;
|