omniwire 2.1.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 (59) 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 +8 -2
  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 +119 -34
  16. package/dist/mcp/server.js.map +1 -1
  17. package/dist/mcp/sync-tools.d.ts +2 -1
  18. package/dist/mcp/sync-tools.js +77 -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/db.d.ts +2 -0
  32. package/dist/sync/db.js +15 -0
  33. package/dist/sync/db.js.map +1 -1
  34. package/dist/sync/engine.d.ts +3 -1
  35. package/dist/sync/engine.js +22 -3
  36. package/dist/sync/engine.js.map +1 -1
  37. package/dist/sync/index.d.ts +2 -0
  38. package/dist/sync/index.js +44 -9
  39. package/dist/sync/index.js.map +1 -1
  40. package/dist/sync/manifest.js +5 -5
  41. package/dist/sync/manifest.js.map +1 -1
  42. package/dist/sync/openclaw-bridge.d.ts +9 -0
  43. package/dist/sync/openclaw-bridge.js +206 -0
  44. package/dist/sync/openclaw-bridge.js.map +1 -0
  45. package/dist/sync/paths.js +6 -7
  46. package/dist/sync/paths.js.map +1 -1
  47. package/dist/sync/secrets.js +14 -11
  48. package/dist/sync/secrets.js.map +1 -1
  49. package/dist/sync/types.d.ts +1 -0
  50. package/dist/sync/types.js +7 -7
  51. package/dist/sync/types.js.map +1 -1
  52. package/dist/sync/vault-bridge.d.ts +12 -0
  53. package/dist/sync/vault-bridge.js +152 -0
  54. package/dist/sync/vault-bridge.js.map +1 -0
  55. package/dist/ui/format.js +15 -14
  56. package/dist/ui/format.js.map +1 -1
  57. package/mesh.example.json +39 -0
  58. package/motd/00-cybernord +410 -0
  59. package/package.json +3 -37
@@ -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,39 @@
1
+ {
2
+ "nodes": [
3
+ {
4
+ "id": "server1",
5
+ "alias": "s1",
6
+ "host": "10.0.0.1",
7
+ "port": 22,
8
+ "user": "root",
9
+ "identityFile": "id_ed25519",
10
+ "os": "linux",
11
+ "role": "storage",
12
+ "tags": ["vps", "primary", "docker"]
13
+ },
14
+ {
15
+ "id": "server2",
16
+ "alias": "s2",
17
+ "host": "10.0.0.2",
18
+ "port": 22,
19
+ "user": "root",
20
+ "identityFile": "id_ed25519",
21
+ "os": "linux",
22
+ "role": "compute",
23
+ "tags": ["vps", "secondary"]
24
+ },
25
+ {
26
+ "id": "laptop",
27
+ "alias": "lp",
28
+ "host": "10.0.0.3",
29
+ "port": 22,
30
+ "user": "root",
31
+ "identityFile": "id_ed25519",
32
+ "os": "linux",
33
+ "role": "gpu+browser",
34
+ "tags": ["laptop", "gpu"]
35
+ }
36
+ ],
37
+ "meshSubnet": "10.0.0.0/24",
38
+ "defaultNode": "local"
39
+ }