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
package/dist/sync/paths.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const LINUX_HOME = process.env.OMNIWIRE_LINUX_HOME ?? '/root';
|
|
1
|
+
// CyberSync — Windows/Linux path adaptation for JSON content
|
|
2
|
+
const WIN_HOME = 'C:/Users/Admin';
|
|
3
|
+
const WIN_HOME_BACKSLASH = 'C:\\Users\\Admin';
|
|
4
|
+
const LINUX_HOME = '/root';
|
|
6
5
|
const PATH_MAPS = [
|
|
7
6
|
[WIN_HOME_BACKSLASH, LINUX_HOME],
|
|
8
7
|
[WIN_HOME, LINUX_HOME],
|
|
@@ -28,9 +27,9 @@ export function getToolBaseDir(tool, os) {
|
|
|
28
27
|
const home = os === 'windows' ? WIN_HOME : LINUX_HOME;
|
|
29
28
|
switch (tool) {
|
|
30
29
|
case 'claude-code':
|
|
31
|
-
return `${home}/.claude`;
|
|
30
|
+
return os === 'windows' ? `${home}/.claude` : `${home}/.claude`;
|
|
32
31
|
case 'opencode':
|
|
33
|
-
return `${home}/.config/opencode`;
|
|
32
|
+
return os === 'windows' ? `${home}/.config/opencode` : `${home}/.config/opencode`;
|
|
34
33
|
case 'openclaw':
|
|
35
34
|
return `${home}/.openclaw`;
|
|
36
35
|
case 'codex':
|
package/dist/sync/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/sync/paths.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/sync/paths.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,MAAM,QAAQ,GAAG,gBAAgB,CAAC;AAClC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAC9C,MAAM,UAAU,GAAG,OAAO,CAAC;AAE3B,MAAM,SAAS,GAA6C;IAC1D,CAAC,kBAAkB,EAAE,UAAU,CAAC;IAChC,CAAC,QAAQ,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,IAAI,MAAM,GAAG,OAAO,CAAC;IACrB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QACrC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,MAAM,GAAG,OAAO,CAAC;IACrB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QACrC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,QAA6B;IAC9E,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,EAAuB;IAClE,MAAM,IAAI,GAAG,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;IAEtD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,aAAa;YAChB,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC;QAClE,KAAK,UAAU;YACb,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,mBAAmB,CAAC;QACpF,KAAK,UAAU;YACb,OAAO,GAAG,IAAI,YAAY,CAAC;QAC7B,KAAK,OAAO;YACV,OAAO,GAAG,IAAI,SAAS,CAAC;QAC1B,KAAK,QAAQ;YACX,OAAO,GAAG,IAAI,UAAU,CAAC;QAC3B,KAAK,WAAW;YACd,OAAO,GAAG,IAAI,aAAa,CAAC;QAC9B;YACE,OAAO,GAAG,IAAI,KAAK,IAAI,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC"}
|
package/dist/sync/schema.js
CHANGED
|
@@ -63,6 +63,8 @@ const STATEMENTS = [
|
|
|
63
63
|
to_tsvector('english', key || ' ' || value::text)
|
|
64
64
|
)`,
|
|
65
65
|
'CREATE INDEX IF NOT EXISTS idx_sync_events_created_desc ON sync_events(created_at DESC)',
|
|
66
|
+
// v2.2 migration: encrypted flag for at-rest encryption
|
|
67
|
+
`ALTER TABLE sync_items ADD COLUMN IF NOT EXISTS encrypted BOOLEAN DEFAULT false`,
|
|
66
68
|
];
|
|
67
69
|
export async function runMigrations(pool) {
|
|
68
70
|
for (const sql of STATEMENTS) {
|
package/dist/sync/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/sync/schema.ts"],"names":[],"mappings":"AAAA,mDAAmD;AAInD,MAAM,UAAU,GAAsB;IACpC;;;;;;;;;;;;;IAaE;IACF;;;;;;IAME;IACF;;;;;;;IAOE;IACF;;;;;;;IAOE;IACF;;;;;;;IAOE;IACF;;;;;IAKE;IACF,oEAAoE;IACpE,6EAA6E;IAC7E,yEAAyE;IACzE,+EAA+E;IAC/E,gEAAgE;IAChE,6EAA6E;IAC7E,4DAA4D;IAC5D,yFAAyF;IACzF;;IAEE;IACF,yFAAyF;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/sync/schema.ts"],"names":[],"mappings":"AAAA,mDAAmD;AAInD,MAAM,UAAU,GAAsB;IACpC;;;;;;;;;;;;;IAaE;IACF;;;;;;IAME;IACF;;;;;;;IAOE;IACF;;;;;;;IAOE;IACF;;;;;;;IAOE;IACF;;;;;IAKE;IACF,oEAAoE;IACpE,6EAA6E;IAC7E,yEAAyE;IACzE,+EAA+E;IAC/E,gEAAgE;IAChE,6EAA6E;IAC7E,4DAA4D;IAC5D,yFAAyF;IACzF;;IAEE;IACF,yFAAyF;IACzF,wDAAwD;IACxD,iFAAiF;CAClF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAa;IAC/C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type SecretsBackend = 'onepassword' | 'file' | 'env';
|
|
2
|
+
export interface SecretEntry {
|
|
3
|
+
readonly key: string;
|
|
4
|
+
readonly value: string;
|
|
5
|
+
readonly vault?: string;
|
|
6
|
+
readonly updatedAt?: string;
|
|
7
|
+
}
|
|
8
|
+
interface SecretsConfig {
|
|
9
|
+
readonly backend: SecretsBackend;
|
|
10
|
+
readonly vault?: string;
|
|
11
|
+
readonly itemPrefix?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class SecretsManager {
|
|
14
|
+
private config;
|
|
15
|
+
private vault;
|
|
16
|
+
private prefix;
|
|
17
|
+
constructor(config?: Partial<SecretsConfig>);
|
|
18
|
+
get backend(): SecretsBackend;
|
|
19
|
+
/** Get a secret by key */
|
|
20
|
+
get(key: string): Promise<string | null>;
|
|
21
|
+
/** Set a secret */
|
|
22
|
+
set(key: string, value: string): Promise<boolean>;
|
|
23
|
+
/** Delete a secret */
|
|
24
|
+
delete(key: string): Promise<boolean>;
|
|
25
|
+
/** List all secrets (values omitted for security) */
|
|
26
|
+
list(): Promise<SecretEntry[]>;
|
|
27
|
+
/** Sync a secret to all mesh nodes via SSH2 (NodeManager.exec) */
|
|
28
|
+
syncToNodes(key: string, nodeIds: string[], manager: import('../nodes/manager.js').NodeManager): Promise<Record<string, boolean>>;
|
|
29
|
+
/** Check if 1Password CLI is available */
|
|
30
|
+
isOnePasswordAvailable(): Promise<boolean>;
|
|
31
|
+
}
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
// CyberSync — Pluggable secrets backend (1Password, env vars, file-based)
|
|
2
|
+
// Stores and retrieves secrets across all mesh nodes via a central vault
|
|
3
|
+
// 1Password uses the `op` CLI (execFile, not exec) — works on all platforms/architectures
|
|
4
|
+
// NOTE: All remote commands use NodeManager.exec() which is SSH2 client.exec()
|
|
5
|
+
import { execFile } from 'node:child_process';
|
|
6
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { homedir } from 'node:os';
|
|
9
|
+
const CONFIG_DIR = join(homedir(), '.omniwire');
|
|
10
|
+
const SECRETS_CONFIG_PATH = join(CONFIG_DIR, 'secrets.json');
|
|
11
|
+
const FILE_SECRETS_PATH = join(CONFIG_DIR, 'secrets.enc');
|
|
12
|
+
function loadSecretsConfig() {
|
|
13
|
+
if (existsSync(SECRETS_CONFIG_PATH)) {
|
|
14
|
+
try {
|
|
15
|
+
return JSON.parse(readFileSync(SECRETS_CONFIG_PATH, 'utf-8'));
|
|
16
|
+
}
|
|
17
|
+
catch { /* fall through */ }
|
|
18
|
+
}
|
|
19
|
+
return { backend: 'file' };
|
|
20
|
+
}
|
|
21
|
+
// Uses execFile (not exec) — arguments are passed as array, not interpolated into shell
|
|
22
|
+
function run(cmd, args) {
|
|
23
|
+
return new Promise((resolve) => {
|
|
24
|
+
execFile(cmd, args, { timeout: 30_000 }, (err, stdout) => {
|
|
25
|
+
resolve({ stdout: (stdout ?? '').trim(), code: err ? 1 : 0 });
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
// ── 1Password Backend (via `op` CLI, execFile with explicit argv) ────────
|
|
30
|
+
async function opAvailable() {
|
|
31
|
+
const { code } = await run('op', ['--version']);
|
|
32
|
+
return code === 0;
|
|
33
|
+
}
|
|
34
|
+
async function opGet(key, vault) {
|
|
35
|
+
const { stdout, code } = await run('op', [
|
|
36
|
+
'item', 'get', key,
|
|
37
|
+
'--vault', vault,
|
|
38
|
+
'--field', 'password',
|
|
39
|
+
]);
|
|
40
|
+
if (code !== 0)
|
|
41
|
+
return null;
|
|
42
|
+
const trimmed = stdout.trim();
|
|
43
|
+
if (!trimmed)
|
|
44
|
+
return null;
|
|
45
|
+
if (trimmed.startsWith('{')) {
|
|
46
|
+
try {
|
|
47
|
+
const parsed = JSON.parse(trimmed);
|
|
48
|
+
return parsed.value ?? parsed.password ?? trimmed;
|
|
49
|
+
}
|
|
50
|
+
catch { /* use raw */ }
|
|
51
|
+
}
|
|
52
|
+
return trimmed;
|
|
53
|
+
}
|
|
54
|
+
async function opSet(key, value, vault) {
|
|
55
|
+
// Try edit first (update existing)
|
|
56
|
+
const edit = await run('op', [
|
|
57
|
+
'item', 'edit', key,
|
|
58
|
+
'--vault', vault,
|
|
59
|
+
`password[password]=${value}`,
|
|
60
|
+
]);
|
|
61
|
+
if (edit.code === 0)
|
|
62
|
+
return true;
|
|
63
|
+
// Create new item
|
|
64
|
+
const create = await run('op', [
|
|
65
|
+
'item', 'create',
|
|
66
|
+
'--category', 'password',
|
|
67
|
+
'--vault', vault,
|
|
68
|
+
'--title', key,
|
|
69
|
+
`password[password]=${value}`,
|
|
70
|
+
]);
|
|
71
|
+
return create.code === 0;
|
|
72
|
+
}
|
|
73
|
+
async function opDelete(key, vault) {
|
|
74
|
+
const { code } = await run('op', ['item', 'delete', key, '--vault', vault]);
|
|
75
|
+
return code === 0;
|
|
76
|
+
}
|
|
77
|
+
async function opList(vault, prefix) {
|
|
78
|
+
const { stdout, code } = await run('op', [
|
|
79
|
+
'item', 'list',
|
|
80
|
+
'--vault', vault,
|
|
81
|
+
'--format', 'json',
|
|
82
|
+
]);
|
|
83
|
+
if (code !== 0)
|
|
84
|
+
return [];
|
|
85
|
+
try {
|
|
86
|
+
const items = JSON.parse(stdout);
|
|
87
|
+
return items
|
|
88
|
+
.filter((i) => i.title.startsWith(prefix))
|
|
89
|
+
.map((i) => ({ key: i.title, value: '', updatedAt: i.updated_at, vault }));
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// ── File Backend ─────────────────────────────────────────────────────────
|
|
96
|
+
function fileLoad() {
|
|
97
|
+
if (!existsSync(FILE_SECRETS_PATH))
|
|
98
|
+
return {};
|
|
99
|
+
try {
|
|
100
|
+
return JSON.parse(readFileSync(FILE_SECRETS_PATH, 'utf-8'));
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return {};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function fileSave(data) {
|
|
107
|
+
if (!existsSync(CONFIG_DIR))
|
|
108
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
109
|
+
writeFileSync(FILE_SECRETS_PATH, JSON.stringify(data, null, 2), { mode: 0o600 });
|
|
110
|
+
}
|
|
111
|
+
// ── Unified Secrets API ──────────────────────────────────────────────────
|
|
112
|
+
export class SecretsManager {
|
|
113
|
+
config;
|
|
114
|
+
vault;
|
|
115
|
+
prefix;
|
|
116
|
+
constructor(config) {
|
|
117
|
+
const loaded = loadSecretsConfig();
|
|
118
|
+
this.config = { ...loaded, ...config };
|
|
119
|
+
this.vault = this.config.vault ?? 'OmniWire';
|
|
120
|
+
this.prefix = this.config.itemPrefix ?? 'omniwire/';
|
|
121
|
+
}
|
|
122
|
+
get backend() {
|
|
123
|
+
return this.config.backend;
|
|
124
|
+
}
|
|
125
|
+
/** Get a secret by key */
|
|
126
|
+
async get(key) {
|
|
127
|
+
const fullKey = this.prefix + key;
|
|
128
|
+
switch (this.config.backend) {
|
|
129
|
+
case 'onepassword':
|
|
130
|
+
return opGet(fullKey, this.vault);
|
|
131
|
+
case 'env':
|
|
132
|
+
return process.env[key.toUpperCase().replace(/[^A-Z0-9]/g, '_')] ?? null;
|
|
133
|
+
case 'file':
|
|
134
|
+
default: {
|
|
135
|
+
const data = fileLoad();
|
|
136
|
+
return data[key] ?? null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/** Set a secret */
|
|
141
|
+
async set(key, value) {
|
|
142
|
+
const fullKey = this.prefix + key;
|
|
143
|
+
switch (this.config.backend) {
|
|
144
|
+
case 'onepassword':
|
|
145
|
+
return opSet(fullKey, value, this.vault);
|
|
146
|
+
case 'env':
|
|
147
|
+
process.env[key.toUpperCase().replace(/[^A-Z0-9]/g, '_')] = value;
|
|
148
|
+
return true;
|
|
149
|
+
case 'file':
|
|
150
|
+
default: {
|
|
151
|
+
const data = fileLoad();
|
|
152
|
+
data[key] = value;
|
|
153
|
+
fileSave(data);
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/** Delete a secret */
|
|
159
|
+
async delete(key) {
|
|
160
|
+
const fullKey = this.prefix + key;
|
|
161
|
+
switch (this.config.backend) {
|
|
162
|
+
case 'onepassword':
|
|
163
|
+
return opDelete(fullKey, this.vault);
|
|
164
|
+
case 'env':
|
|
165
|
+
delete process.env[key.toUpperCase().replace(/[^A-Z0-9]/g, '_')];
|
|
166
|
+
return true;
|
|
167
|
+
case 'file':
|
|
168
|
+
default: {
|
|
169
|
+
const data = fileLoad();
|
|
170
|
+
delete data[key];
|
|
171
|
+
fileSave(data);
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/** List all secrets (values omitted for security) */
|
|
177
|
+
async list() {
|
|
178
|
+
switch (this.config.backend) {
|
|
179
|
+
case 'onepassword':
|
|
180
|
+
return opList(this.vault, this.prefix);
|
|
181
|
+
case 'file':
|
|
182
|
+
default: {
|
|
183
|
+
const data = fileLoad();
|
|
184
|
+
return Object.keys(data).map((key) => ({ key, value: '***' }));
|
|
185
|
+
}
|
|
186
|
+
case 'env':
|
|
187
|
+
return [];
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/** Sync a secret to all mesh nodes via SSH2 (NodeManager.exec) */
|
|
191
|
+
async syncToNodes(key, nodeIds, manager) {
|
|
192
|
+
const value = await this.get(key);
|
|
193
|
+
if (!value)
|
|
194
|
+
return Object.fromEntries(nodeIds.map((id) => [id, false]));
|
|
195
|
+
const results = {};
|
|
196
|
+
const b64Value = Buffer.from(JSON.stringify({ [key]: value })).toString('base64');
|
|
197
|
+
await Promise.allSettled(nodeIds.map(async (nodeId) => {
|
|
198
|
+
try {
|
|
199
|
+
// Merge into remote node's secrets file via SSH2 (base64 to avoid shell issues)
|
|
200
|
+
const remoteDir = '/root/.omniwire';
|
|
201
|
+
const remotePath = `${remoteDir}/secrets.enc`;
|
|
202
|
+
// Read existing, merge, write back — all via SSH2 client.exec()
|
|
203
|
+
const writeResult = await manager.exec(nodeId, `mkdir -p "${remoteDir}" && ` +
|
|
204
|
+
`existing=$(cat "${remotePath}" 2>/dev/null || echo "{}") && ` +
|
|
205
|
+
`echo '${b64Value}' | base64 -d | python3 -c "import sys,json; ` +
|
|
206
|
+
`e=json.loads(sys.stdin.read()); o=json.loads('''$existing'''); o.update(e); ` +
|
|
207
|
+
`print(json.dumps(o))" > "${remotePath}" && chmod 600 "${remotePath}"`);
|
|
208
|
+
results[nodeId] = writeResult.code === 0;
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
results[nodeId] = false;
|
|
212
|
+
}
|
|
213
|
+
}));
|
|
214
|
+
return results;
|
|
215
|
+
}
|
|
216
|
+
/** Check if 1Password CLI is available */
|
|
217
|
+
async isOnePasswordAvailable() {
|
|
218
|
+
return opAvailable();
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/sync/secrets.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,yEAAyE;AACzE,0FAA0F;AAC1F,+EAA+E;AAE/E,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,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;AAiBlC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAChD,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAC7D,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAE1D,SAAS,iBAAiB;IACxB,IAAI,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED,wFAAwF;AACxF,SAAS,GAAG,CAAC,GAAW,EAAE,IAAc;IACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YACvD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,4EAA4E;AAE5E,KAAK,UAAU,WAAW;IACxB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAChD,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,GAAW,EAAE,KAAa;IAC7C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;QACvC,MAAM,EAAE,KAAK,EAAE,GAAG;QAClB,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IACH,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,GAAW,EAAE,KAAa,EAAE,KAAa;IAC5D,mCAAmC;IACnC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;QAC3B,MAAM,EAAE,MAAM,EAAE,GAAG;QACnB,SAAS,EAAE,KAAK;QAChB,sBAAsB,KAAK,EAAE;KAC9B,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjC,kBAAkB;IAClB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;QAC7B,MAAM,EAAE,QAAQ;QAChB,YAAY,EAAE,UAAU;QACxB,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,GAAG;QACd,sBAAsB,KAAK,EAAE;KAC9B,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,KAAa;IAChD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5E,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,KAAa,EAAE,MAAc;IACjD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;QACvC,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,MAAM;KACnB,CAAC,CAAC;IACH,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAkD,CAAC;QAClF,OAAO,KAAK;aACT,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;aACzC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,4EAA4E;AAE5E,SAAS,QAAQ;IACf,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,IAA4B;IAC5C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,aAAa,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,4EAA4E;AAE5E,MAAM,OAAO,cAAc;IACjB,MAAM,CAAgB;IACtB,KAAK,CAAS;IACd,MAAM,CAAS;IAEvB,YAAY,MAA+B;QACzC,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,WAAW,CAAC;IACtD,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC7B,CAAC;IAED,0BAA0B;IAC1B,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAClC,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC5B,KAAK,aAAa;gBAChB,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACpC,KAAK,KAAK;gBACR,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;YAC3E,KAAK,MAAM,CAAC;YACZ,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAClC,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC5B,KAAK,aAAa;gBAChB,OAAO,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3C,KAAK,KAAK;gBACR,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;gBAClE,OAAO,IAAI,CAAC;YACd,KAAK,MAAM,CAAC;YACZ,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAClB,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACf,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAClC,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC5B,KAAK,aAAa;gBAChB,OAAO,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,KAAK,KAAK;gBACR,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;gBACjE,OAAO,IAAI,CAAC;YACd,KAAK,MAAM,CAAC;YACZ,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACf,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,KAAK,CAAC,IAAI;QACR,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC5B,KAAK,aAAa;gBAChB,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,KAAK,MAAM,CAAC;YACZ,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;gBACxB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACjE,CAAC;YACD,KAAK,KAAK;gBACR,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,KAAK,CAAC,WAAW,CAAC,GAAW,EAAE,OAAiB,EAAE,OAAkD;QAClG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAExE,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAElF,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACpD,IAAI,CAAC;gBACH,gFAAgF;gBAChF,MAAM,SAAS,GAAG,iBAAiB,CAAC;gBACpC,MAAM,UAAU,GAAG,GAAG,SAAS,cAAc,CAAC;gBAC9C,gEAAgE;gBAChE,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAC3C,aAAa,SAAS,OAAO;oBAC7B,mBAAmB,UAAU,iCAAiC;oBAC9D,SAAS,QAAQ,+CAA+C;oBAChE,8EAA8E;oBAC9E,4BAA4B,UAAU,mBAAmB,UAAU,GAAG,CACvE,CAAC;gBACF,OAAO,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,KAAK,CAAC,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC,CAAC,CAAC;QACJ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,0CAA0C;IAC1C,KAAK,CAAC,sBAAsB;QAC1B,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;CACF"}
|
package/dist/sync/types.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export interface SyncItem {
|
|
|
10
10
|
readonly updatedAt: Date;
|
|
11
11
|
readonly updatedByNode: string;
|
|
12
12
|
readonly isDeleted: boolean;
|
|
13
|
+
readonly encrypted: boolean;
|
|
13
14
|
}
|
|
14
15
|
export interface NodeSyncState {
|
|
15
16
|
readonly nodeId: string;
|
|
@@ -54,6 +55,7 @@ export interface ToolManifest {
|
|
|
54
55
|
readonly syncGlobs: readonly string[];
|
|
55
56
|
readonly excludeGlobs: readonly string[];
|
|
56
57
|
readonly ingestDb?: string;
|
|
58
|
+
readonly ingestDirs?: readonly string[];
|
|
57
59
|
}
|
|
58
60
|
export interface SyncDiff {
|
|
59
61
|
readonly itemId: string;
|
package/dist/sync/types.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
// CyberSync
|
|
1
|
+
// CyberSync â Type definitions for unified mesh sync
|
|
2
2
|
export const DEFAULT_SYNC_CONFIG = {
|
|
3
|
-
pgHost:
|
|
4
|
-
pgPort:
|
|
5
|
-
pgDatabase:
|
|
6
|
-
pgUser:
|
|
7
|
-
pgPassword: process.env.
|
|
3
|
+
pgHost: '10.10.0.1',
|
|
4
|
+
pgPort: 5432,
|
|
5
|
+
pgDatabase: 'cyberbase',
|
|
6
|
+
pgUser: 'cyberbase',
|
|
7
|
+
pgPassword: process.env.OW_PG_PASSWORD ?? 'cyberbase',
|
|
8
8
|
watchDebounceMs: 300,
|
|
9
|
-
reconcileIntervalMs:
|
|
9
|
+
reconcileIntervalMs: 2 * 60 * 1000, // 2min (was 5min) faster convergence
|
|
10
10
|
};
|
|
11
11
|
//# sourceMappingURL=types.js.map
|
package/dist/sync/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAkGvD,MAAM,CAAC,MAAM,mBAAmB,GAA+B;IAC7D,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,IAAI;IACZ,UAAU,EAAE,WAAW;IACvB,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,WAAW;IACrD,eAAe,EAAE,GAAG;IACpB,mBAAmB,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAG,uCAAuC;CAC7E,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class VaultBridge {
|
|
2
|
+
private vaultPath;
|
|
3
|
+
constructor(vaultPathOverride?: string);
|
|
4
|
+
getVaultPath(): string;
|
|
5
|
+
writeSyncItem(tool: string, relPath: string, content: string | Buffer, meta?: Record<string, unknown>): Promise<void>;
|
|
6
|
+
writeKnowledge(sourceTool: string, key: string, value: Record<string, unknown>): Promise<void>;
|
|
7
|
+
writeMemory(nodeId: string, key: string, value: string): Promise<void>;
|
|
8
|
+
logEvent(eventType: string, detail: string, nodeId: string): Promise<void>;
|
|
9
|
+
deleteSyncItem(tool: string, relPath: string): Promise<void>;
|
|
10
|
+
writeIndex(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export declare function createVaultBridge(vaultPath?: string): VaultBridge;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
// CyberBase Obsidian Vault Bridge � mirrors PostgreSQL data as Obsidian markdown
|
|
2
|
+
// Every sync item, knowledge entry, and memory gets a .md file in the vault
|
|
3
|
+
// Obsidian Sync handles cloud backup automatically
|
|
4
|
+
import { writeFile, mkdir, unlink } from 'node:fs/promises';
|
|
5
|
+
import { join, dirname } from 'node:path';
|
|
6
|
+
import { homedir, platform } from 'node:os';
|
|
7
|
+
const VAULT_PATHS = {
|
|
8
|
+
windows: join(homedir(), 'Documents', 'BuisnessProjects', 'CyberBase'),
|
|
9
|
+
linux: join(homedir(), '.cyberbase', 'vault'),
|
|
10
|
+
};
|
|
11
|
+
function getVaultPath() {
|
|
12
|
+
return VAULT_PATHS[platform() === 'win32' ? 'windows' : 'linux'];
|
|
13
|
+
}
|
|
14
|
+
function sanitizeFilename(name) {
|
|
15
|
+
return name.replace(/[<>:"/\|?*]/g, '_').replace(/\s+/g, ' ').trim();
|
|
16
|
+
}
|
|
17
|
+
function toFrontmatter(meta) {
|
|
18
|
+
const lines = ['---'];
|
|
19
|
+
for (const [k, v] of Object.entries(meta)) {
|
|
20
|
+
if (v === null || v === undefined)
|
|
21
|
+
continue;
|
|
22
|
+
if (typeof v === 'object') {
|
|
23
|
+
lines.push(`${k}: ${JSON.stringify(v)}`);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
lines.push(`${k}: ${String(v)}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
lines.push('---');
|
|
30
|
+
return lines.join('\n');
|
|
31
|
+
}
|
|
32
|
+
export class VaultBridge {
|
|
33
|
+
vaultPath;
|
|
34
|
+
constructor(vaultPathOverride) {
|
|
35
|
+
this.vaultPath = vaultPathOverride ?? getVaultPath();
|
|
36
|
+
}
|
|
37
|
+
getVaultPath() {
|
|
38
|
+
return this.vaultPath;
|
|
39
|
+
}
|
|
40
|
+
// Write a sync item as markdown
|
|
41
|
+
async writeSyncItem(tool, relPath, content, meta) {
|
|
42
|
+
const folder = join(this.vaultPath, 'sync', sanitizeFilename(tool));
|
|
43
|
+
const filename = sanitizeFilename(relPath.replace(/\//g, '_'));
|
|
44
|
+
const absPath = join(folder, filename.endsWith('.md') ? filename : `${filename}.md`);
|
|
45
|
+
const textContent = Buffer.isBuffer(content) ? content.toString('utf-8') : content;
|
|
46
|
+
const frontmatter = toFrontmatter({
|
|
47
|
+
tool,
|
|
48
|
+
path: relPath,
|
|
49
|
+
synced: new Date().toISOString(),
|
|
50
|
+
...meta,
|
|
51
|
+
});
|
|
52
|
+
const md = `${frontmatter}\n\n${textContent}\n`;
|
|
53
|
+
await mkdir(dirname(absPath), { recursive: true });
|
|
54
|
+
await writeFile(absPath, md, 'utf-8');
|
|
55
|
+
}
|
|
56
|
+
// Write a knowledge entry
|
|
57
|
+
async writeKnowledge(sourceTool, key, value) {
|
|
58
|
+
const folder = join(this.vaultPath, 'knowledge', sanitizeFilename(sourceTool));
|
|
59
|
+
const filename = sanitizeFilename(key);
|
|
60
|
+
const absPath = join(folder, `${filename}.md`);
|
|
61
|
+
const frontmatter = toFrontmatter({
|
|
62
|
+
source: sourceTool,
|
|
63
|
+
key,
|
|
64
|
+
updated: new Date().toISOString(),
|
|
65
|
+
});
|
|
66
|
+
const body = typeof value === 'string' ? value : JSON.stringify(value, null, 2);
|
|
67
|
+
const md = `${frontmatter}\n\n${body}\n`;
|
|
68
|
+
await mkdir(dirname(absPath), { recursive: true });
|
|
69
|
+
await writeFile(absPath, md, 'utf-8');
|
|
70
|
+
}
|
|
71
|
+
// Write a Claude memory entry
|
|
72
|
+
async writeMemory(nodeId, key, value) {
|
|
73
|
+
const folder = join(this.vaultPath, 'memory', sanitizeFilename(nodeId));
|
|
74
|
+
const filename = sanitizeFilename(key);
|
|
75
|
+
const absPath = join(folder, `${filename}.md`);
|
|
76
|
+
const frontmatter = toFrontmatter({
|
|
77
|
+
node: nodeId,
|
|
78
|
+
key,
|
|
79
|
+
ingested: new Date().toISOString(),
|
|
80
|
+
});
|
|
81
|
+
const md = `${frontmatter}\n\n${value}\n`;
|
|
82
|
+
await mkdir(dirname(absPath), { recursive: true });
|
|
83
|
+
await writeFile(absPath, md, 'utf-8');
|
|
84
|
+
}
|
|
85
|
+
// Write a sync event log entry (append to daily log)
|
|
86
|
+
async logEvent(eventType, detail, nodeId) {
|
|
87
|
+
const today = new Date().toISOString().split('T')[0];
|
|
88
|
+
const folder = join(this.vaultPath, 'logs');
|
|
89
|
+
const absPath = join(folder, `${today}.md`);
|
|
90
|
+
const line = `- **${new Date().toISOString().split('T')[1].slice(0, 8)}** \`${eventType}\` [${nodeId}] ${detail}\n`;
|
|
91
|
+
await mkdir(folder, { recursive: true });
|
|
92
|
+
try {
|
|
93
|
+
const { appendFile } = await import('node:fs/promises');
|
|
94
|
+
await appendFile(absPath, line, 'utf-8');
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
await writeFile(absPath, `# CyberBase Sync Log \u2014 ${today}\n\n${line}`, 'utf-8');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Delete a sync item from vault
|
|
101
|
+
async deleteSyncItem(tool, relPath) {
|
|
102
|
+
const folder = join(this.vaultPath, 'sync', sanitizeFilename(tool));
|
|
103
|
+
const filename = sanitizeFilename(relPath.replace(/\//g, '_'));
|
|
104
|
+
const absPath = join(folder, filename.endsWith('.md') ? filename : `${filename}.md`);
|
|
105
|
+
try {
|
|
106
|
+
await unlink(absPath);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// File doesn't exist, that's fine
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Write vault index (MOC - Map of Content)
|
|
113
|
+
async writeIndex() {
|
|
114
|
+
const absPath = join(this.vaultPath, 'CyberBase.md');
|
|
115
|
+
const md = `---
|
|
116
|
+
aliases: [CyberBase, Home]
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
# CyberBase
|
|
120
|
+
|
|
121
|
+
> Unified knowledge layer \u2014 PostgreSQL primary + Obsidian backup
|
|
122
|
+
|
|
123
|
+
## Sections
|
|
124
|
+
|
|
125
|
+
- [[sync/]] \u2014 Synced config files across all nodes
|
|
126
|
+
- [[knowledge/]] \u2014 Tool knowledge base entries
|
|
127
|
+
- [[memory/]] \u2014 Claude memory entries per node
|
|
128
|
+
- [[logs/]] \u2014 Daily sync event logs
|
|
129
|
+
|
|
130
|
+
## Nodes
|
|
131
|
+
|
|
132
|
+
| Node | Role | Status |
|
|
133
|
+
|------|------|--------|
|
|
134
|
+
| windows | controller | local |
|
|
135
|
+
| contabo | storage | remote |
|
|
136
|
+
| hostinger | compute | remote |
|
|
137
|
+
| thinkpad | gpu | remote |
|
|
138
|
+
|
|
139
|
+
## Database
|
|
140
|
+
|
|
141
|
+
- **Host:** 10.10.0.1:5432
|
|
142
|
+
- **Database:** cyberbase
|
|
143
|
+
- **Engine:** PostgreSQL 16
|
|
144
|
+
`;
|
|
145
|
+
await mkdir(dirname(absPath), { recursive: true });
|
|
146
|
+
await writeFile(absPath, md, 'utf-8');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
export function createVaultBridge(vaultPath) {
|
|
150
|
+
return new VaultBridge(vaultPath);
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=vault-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-bridge.js","sourceRoot":"","sources":["../../src/sync/vault-bridge.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/format.js
CHANGED
|
@@ -11,22 +11,20 @@ export const magenta = chalk.magenta;
|
|
|
11
11
|
export const blue = chalk.blue;
|
|
12
12
|
export const gray = chalk.gray;
|
|
13
13
|
export const white = chalk.white;
|
|
14
|
-
// Node-specific colors
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
colorIndex++;
|
|
22
|
-
}
|
|
23
|
-
return NODE_COLORS[nodeId];
|
|
24
|
-
}
|
|
14
|
+
// Node-specific colors
|
|
15
|
+
const NODE_COLORS = {
|
|
16
|
+
windows: chalk.blue.bold,
|
|
17
|
+
contabo: chalk.green.bold,
|
|
18
|
+
hostinger: chalk.magenta.bold,
|
|
19
|
+
thinkpad: chalk.cyan.bold,
|
|
20
|
+
};
|
|
25
21
|
export function nodeColor(nodeId) {
|
|
26
|
-
|
|
22
|
+
const colorFn = NODE_COLORS[nodeId] ?? chalk.white.bold;
|
|
23
|
+
return colorFn(`[${nodeId}]`);
|
|
27
24
|
}
|
|
28
25
|
export function nodeTag(nodeId) {
|
|
29
|
-
|
|
26
|
+
const colorFn = NODE_COLORS[nodeId] ?? chalk.white;
|
|
27
|
+
return colorFn(nodeId);
|
|
30
28
|
}
|
|
31
29
|
// Simple ASCII table formatter
|
|
32
30
|
export function formatTable(headers, rows) {
|
|
@@ -101,7 +99,10 @@ ${bold(cyan('╚═════════════════════
|
|
|
101
99
|
// Prompt string with node indicators
|
|
102
100
|
export function prompt(onlineNodes) {
|
|
103
101
|
const indicators = onlineNodes
|
|
104
|
-
.map((id) =>
|
|
102
|
+
.map((id) => {
|
|
103
|
+
const colorFn = NODE_COLORS[id] ?? chalk.white;
|
|
104
|
+
return colorFn('●');
|
|
105
|
+
})
|
|
105
106
|
.join('');
|
|
106
107
|
return `${indicators} ${bold(cyan('omniwire'))}${dim('>')} `;
|
|
107
108
|
}
|
package/dist/ui/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,iDAAiD;AACjD,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AAC7B,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AAC7B,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AACjC,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AACnC,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AACrC,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AAEjC,
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"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"}
|
package/dist/update.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
interface UpdateResult {
|
|
2
|
+
readonly currentVersion: string;
|
|
3
|
+
readonly latestVersion: string;
|
|
4
|
+
readonly updated: boolean;
|
|
5
|
+
readonly message: string;
|
|
6
|
+
}
|
|
7
|
+
/** Check if a newer version is available on npm */
|
|
8
|
+
export declare function checkForUpdate(): Promise<{
|
|
9
|
+
current: string;
|
|
10
|
+
latest: string;
|
|
11
|
+
updateAvailable: boolean;
|
|
12
|
+
}>;
|
|
13
|
+
/** Self-update OmniWire to the latest version */
|
|
14
|
+
export declare function selfUpdate(): Promise<UpdateResult>;
|
|
15
|
+
/** Get system info for diagnostics */
|
|
16
|
+
export declare function getSystemInfo(): Record<string, string>;
|
|
17
|
+
export {};
|