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.
Files changed (68) hide show
  1. package/.mcp.json.disabled +8 -0
  2. package/LICENSE +21 -21
  3. package/README.md +438 -316
  4. package/clawhub-skill/SKILL.md +354 -0
  5. package/dist/claude/integration.js +15 -18
  6. package/dist/claude/integration.js.map +1 -1
  7. package/dist/commands/browser.js +1 -1
  8. package/dist/commands/browser.js.map +1 -1
  9. package/dist/commands/builtins.js +6 -6
  10. package/dist/commands/builtins.js.map +1 -1
  11. package/dist/mcp/index.js +10 -3
  12. package/dist/mcp/index.js.map +1 -1
  13. package/dist/mcp/rest.js +9 -1
  14. package/dist/mcp/rest.js.map +1 -1
  15. package/dist/mcp/server.js +133 -32
  16. package/dist/mcp/server.js.map +1 -1
  17. package/dist/mcp/sync-tools.d.ts +3 -1
  18. package/dist/mcp/sync-tools.js +134 -1
  19. package/dist/mcp/sync-tools.js.map +1 -1
  20. package/dist/nodes/manager.d.ts +4 -0
  21. package/dist/nodes/manager.js +55 -18
  22. package/dist/nodes/manager.js.map +1 -1
  23. package/dist/nodes/transfer.js +8 -3
  24. package/dist/nodes/transfer.js.map +1 -1
  25. package/dist/protocol/config.d.ts +7 -1
  26. package/dist/protocol/config.js +73 -102
  27. package/dist/protocol/config.js.map +1 -1
  28. package/dist/sync/cookies.d.ts +52 -0
  29. package/dist/sync/cookies.js +259 -0
  30. package/dist/sync/cookies.js.map +1 -0
  31. package/dist/sync/crypto.d.ts +11 -0
  32. package/dist/sync/crypto.js +95 -0
  33. package/dist/sync/crypto.js.map +1 -0
  34. package/dist/sync/db.d.ts +3 -0
  35. package/dist/sync/db.js +21 -4
  36. package/dist/sync/db.js.map +1 -1
  37. package/dist/sync/engine.d.ts +3 -1
  38. package/dist/sync/engine.js +59 -8
  39. package/dist/sync/engine.js.map +1 -1
  40. package/dist/sync/index.d.ts +2 -0
  41. package/dist/sync/index.js +44 -9
  42. package/dist/sync/index.js.map +1 -1
  43. package/dist/sync/manifest.js +5 -5
  44. package/dist/sync/manifest.js.map +1 -1
  45. package/dist/sync/openclaw-bridge.d.ts +9 -0
  46. package/dist/sync/openclaw-bridge.js +206 -0
  47. package/dist/sync/openclaw-bridge.js.map +1 -0
  48. package/dist/sync/paths.js +6 -7
  49. package/dist/sync/paths.js.map +1 -1
  50. package/dist/sync/schema.js +2 -0
  51. package/dist/sync/schema.js.map +1 -1
  52. package/dist/sync/secrets.d.ts +32 -0
  53. package/dist/sync/secrets.js +221 -0
  54. package/dist/sync/secrets.js.map +1 -0
  55. package/dist/sync/types.d.ts +2 -0
  56. package/dist/sync/types.js +7 -7
  57. package/dist/sync/types.js.map +1 -1
  58. package/dist/sync/vault-bridge.d.ts +12 -0
  59. package/dist/sync/vault-bridge.js +152 -0
  60. package/dist/sync/vault-bridge.js.map +1 -0
  61. package/dist/ui/format.js +15 -14
  62. package/dist/ui/format.js.map +1 -1
  63. package/dist/update.d.ts +17 -0
  64. package/dist/update.js +108 -0
  65. package/dist/update.js.map +1 -0
  66. package/mesh.example.json +39 -0
  67. package/motd/00-cybernord +410 -0
  68. package/package.json +3 -36
@@ -1,8 +1,7 @@
1
- // OmniWire Sync — Windows/Linux path adaptation for JSON content
2
- import { homedir } from 'node:os';
3
- const WIN_HOME = homedir().replaceAll('\\', '/');
4
- const WIN_HOME_BACKSLASH = homedir();
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':
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/sync/paths.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACjD,MAAM,kBAAkB,GAAG,OAAO,EAAE,CAAC;AACrC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC;AAE9D,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,GAAG,IAAI,UAAU,CAAC;QAC3B,KAAK,UAAU;YACb,OAAO,GAAG,IAAI,mBAAmB,CAAC;QACpC,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"}
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"}
@@ -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) {
@@ -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;CAC1F,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"}
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":"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"}
@@ -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;
@@ -1,11 +1,11 @@
1
- // CyberSync Type definitions for unified mesh sync
1
+ // CyberSync — Type definitions for unified mesh sync
2
2
  export const DEFAULT_SYNC_CONFIG = {
3
- pgHost: process.env.CYBERSYNC_PG_HOST ?? 'localhost',
4
- pgPort: parseInt(process.env.CYBERSYNC_PG_PORT ?? '5432'),
5
- pgDatabase: process.env.CYBERSYNC_PG_DATABASE ?? 'cybersync',
6
- pgUser: process.env.CYBERSYNC_PG_USER ?? 'cybersync',
7
- pgPassword: process.env.CYBERSYNC_PG_PASSWORD ?? '',
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: 5 * 60 * 1000,
9
+ reconcileIntervalMs: 2 * 60 * 1000, // 2min (was 5min) — faster convergence
10
10
  };
11
11
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAgGrD,MAAM,CAAC,MAAM,mBAAmB,GAA+B;IAC7D,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,WAAW;IACpD,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,MAAM,CAAC;IACzD,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,WAAW;IAC5D,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,WAAW;IACpD,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE;IACnD,eAAe,EAAE,GAAG;IACpB,mBAAmB,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;CACnC,CAAC"}
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 — auto-assigned from palette on first use
15
- const COLOR_PALETTE = [chalk.blue.bold, chalk.green.bold, chalk.magenta.bold, chalk.cyan.bold, chalk.yellow.bold, chalk.red.bold];
16
- const NODE_COLORS = {};
17
- let colorIndex = 0;
18
- function getNodeColorFn(nodeId) {
19
- if (!NODE_COLORS[nodeId]) {
20
- NODE_COLORS[nodeId] = COLOR_PALETTE[colorIndex % COLOR_PALETTE.length];
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
- return getNodeColorFn(nodeId)(`[${nodeId}]`);
22
+ const colorFn = NODE_COLORS[nodeId] ?? chalk.white.bold;
23
+ return colorFn(`[${nodeId}]`);
27
24
  }
28
25
  export function nodeTag(nodeId) {
29
- return getNodeColorFn(nodeId)(nodeId);
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) => getNodeColorFn(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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"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"}
@@ -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 {};