omniwire 3.0.1 → 3.1.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/dist/update.js CHANGED
@@ -1,11 +1,16 @@
1
- // OmniWire — self-update via npm registry
2
- // Checks for new versions and updates in-place
1
+ // OmniWire — self-update via npm registry + GitHub releases
2
+ // Supports: auto-update on startup, periodic checks, mesh-wide updates, GitHub + npm sources
3
3
  // Works on all architectures: x64, arm64, armv7l (RPi), darwin, linux, win32
4
- import { execFile } from 'node:child_process';
5
- import { readFileSync } from 'node:fs';
4
+ import { exec } from 'node:child_process';
5
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
6
6
  import { join, dirname } from 'node:path';
7
7
  import { fileURLToPath } from 'node:url';
8
8
  const __dirname = dirname(fileURLToPath(import.meta.url));
9
+ const GITHUB_REPO = 'VoidChecksum/omniwire';
10
+ const NPM_PACKAGE = 'omniwire';
11
+ const UPDATE_CHECK_INTERVAL_MS = 3_600_000; // 1 hour
12
+ const STATE_DIR = join(__dirname, '..', '.omniwire-state');
13
+ const STATE_FILE = join(STATE_DIR, 'update-state.json');
9
14
  function getCurrentVersion() {
10
15
  try {
11
16
  const pkgPath = join(__dirname, '..', 'package.json');
@@ -16,9 +21,11 @@ function getCurrentVersion() {
16
21
  return '0.0.0';
17
22
  }
18
23
  }
19
- function runCommand(cmd, args) {
24
+ function runCommand(cmd, args, timeoutMs = 60_000) {
20
25
  return new Promise((resolve) => {
21
- execFile(cmd, args, { timeout: 60_000 }, (err, stdout, stderr) => {
26
+ // Quote args and use exec() works on all platforms including .cmd/.bat on Windows
27
+ const escaped = args.map((a) => a.includes(' ') || a.includes('"') ? `"${a.replace(/"/g, '\\"')}"` : a);
28
+ exec(`${cmd} ${escaped.join(' ')}`, { timeout: timeoutMs, windowsHide: true }, (err, stdout, stderr) => {
22
29
  resolve({
23
30
  stdout: (stdout ?? '').trim(),
24
31
  stderr: (stderr ?? '').trim(),
@@ -27,73 +34,241 @@ function runCommand(cmd, args) {
27
34
  });
28
35
  });
29
36
  }
30
- /** Check if a newer version is available on npm */
31
- export async function checkForUpdate() {
37
+ /** Compare semver strings: returns >0 if a > b, <0 if a < b, 0 if equal */
38
+ function compareVersions(a, b) {
39
+ const pa = a.split('.').map(Number);
40
+ const pb = b.split('.').map(Number);
41
+ for (let i = 0; i < 3; i++) {
42
+ const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
43
+ if (diff !== 0)
44
+ return diff;
45
+ }
46
+ return 0;
47
+ }
48
+ function loadState() {
49
+ try {
50
+ if (existsSync(STATE_FILE)) {
51
+ return JSON.parse(readFileSync(STATE_FILE, 'utf-8'));
52
+ }
53
+ }
54
+ catch { /* fresh state */ }
55
+ return { lastCheck: 0, lastVersion: getCurrentVersion(), autoUpdateEnabled: true, source: 'auto', checkIntervalMs: UPDATE_CHECK_INTERVAL_MS };
56
+ }
57
+ function saveState(state) {
58
+ try {
59
+ if (!existsSync(STATE_DIR))
60
+ mkdirSync(STATE_DIR, { recursive: true });
61
+ writeFileSync(STATE_FILE, JSON.stringify(state, null, 2));
62
+ }
63
+ catch { /* non-critical */ }
64
+ }
65
+ // --- Check sources ---
66
+ /** Check npm registry for latest version */
67
+ async function checkNpm() {
68
+ const result = await runCommand(process.platform === 'win32' ? 'npm.cmd' : 'npm', ['view', NPM_PACKAGE, 'version'], 15_000);
69
+ const version = result.stdout.trim();
70
+ if (version && result.code === 0)
71
+ return { version, source: 'npm' };
72
+ return null;
73
+ }
74
+ /** Check GitHub releases for latest version */
75
+ async function checkGitHub() {
76
+ const url = `https://api.github.com/repos/${GITHUB_REPO}/releases/latest`;
77
+ // Try native fetch first (Node 18+), then curl, then PowerShell
78
+ let resultStdout = '';
79
+ try {
80
+ const controller = new AbortController();
81
+ const timeout = setTimeout(() => controller.abort(), 10_000);
82
+ const resp = await fetch(url, { headers: { Accept: 'application/vnd.github+json' }, signal: controller.signal });
83
+ clearTimeout(timeout);
84
+ resultStdout = await resp.text();
85
+ }
86
+ catch {
87
+ // Fallback: curl (Linux/macOS) or PowerShell (Windows)
88
+ const result = process.platform === 'win32'
89
+ ? await runCommand('powershell', ['-NoProfile', '-Command', `(Invoke-WebRequest -Uri '${url}' -Headers @{Accept='application/vnd.github+json'} -TimeoutSec 10 -UseBasicParsing).Content`], 15_000)
90
+ : await runCommand('curl', ['-s', '--max-time', '10', '-H', 'Accept: application/vnd.github+json', url], 15_000);
91
+ if (result.code !== 0 || !result.stdout)
92
+ return null;
93
+ resultStdout = result.stdout;
94
+ }
95
+ if (!resultStdout)
96
+ return null;
97
+ try {
98
+ const release = JSON.parse(resultStdout);
99
+ const tag = (release.tag_name ?? '').replace(/^v/, '');
100
+ const tarball = release.tarball_url ?? `https://github.com/${GITHUB_REPO}/archive/refs/tags/${release.tag_name}.tar.gz`;
101
+ if (tag)
102
+ return { version: tag, tarballUrl: tarball, source: 'github' };
103
+ }
104
+ catch { /* parse error */ }
105
+ return null;
106
+ }
107
+ /** Check for update from best available source */
108
+ export async function checkForUpdate(source = 'auto') {
32
109
  const current = getCurrentVersion();
33
- // Use npm view to check latest — works on all platforms/architectures
34
- const result = await runCommand('npm', ['view', 'omniwire', 'version']);
35
- const latest = result.stdout.trim();
36
- if (!latest || result.code !== 0) {
37
- return { current, latest: current, updateAvailable: false };
110
+ if (source === 'npm' || source === 'auto') {
111
+ const npm = await checkNpm();
112
+ if (npm && compareVersions(npm.version, current) > 0) {
113
+ return { current, latest: npm.version, updateAvailable: true, source: 'npm' };
114
+ }
115
+ if (source === 'npm')
116
+ return { current, latest: npm?.version ?? current, updateAvailable: false, source: 'npm' };
38
117
  }
39
- return {
40
- current,
41
- latest,
42
- updateAvailable: latest !== current && compareVersions(latest, current) > 0,
43
- };
118
+ if (source === 'github' || source === 'auto') {
119
+ const gh = await checkGitHub();
120
+ if (gh && compareVersions(gh.version, current) > 0) {
121
+ return { current, latest: gh.version, updateAvailable: true, source: 'github' };
122
+ }
123
+ if (source === 'github')
124
+ return { current, latest: gh?.version ?? current, updateAvailable: false, source: 'github' };
125
+ }
126
+ return { current, latest: current, updateAvailable: false, source: 'auto' };
127
+ }
128
+ // --- Update methods ---
129
+ /** Update via npm */
130
+ async function updateViaNpm(version) {
131
+ const npmCmd = process.platform === 'win32' ? 'npm.cmd' : 'npm';
132
+ // Try global update first
133
+ const global = await runCommand(npmCmd, ['install', '-g', `${NPM_PACKAGE}@${version}`]);
134
+ if (global.code === 0)
135
+ return { ok: true, message: `npm global: ${version}` };
136
+ // Fallback: local
137
+ const local = await runCommand(npmCmd, ['install', `${NPM_PACKAGE}@${version}`]);
138
+ if (local.code === 0)
139
+ return { ok: true, message: `npm local: ${version}` };
140
+ return { ok: false, message: global.stderr || local.stderr || 'npm update failed' };
141
+ }
142
+ /** Update via GitHub release tarball */
143
+ async function updateViaGitHub(version) {
144
+ const tag = `v${version}`;
145
+ const tarball = `https://github.com/${GITHUB_REPO}/archive/refs/tags/${tag}.tar.gz`;
146
+ const tmpDir = process.platform === 'win32' ? '%TEMP%' : '/tmp';
147
+ const archive = `${tmpDir}/omniwire-${version}.tar.gz`;
148
+ // Download
149
+ const dl = await runCommand('curl', ['-sL', '-o', archive, tarball], 30_000);
150
+ if (dl.code !== 0)
151
+ return { ok: false, message: `download failed: ${dl.stderr}` };
152
+ // Determine install location
153
+ const installDir = join(__dirname, '..');
154
+ if (process.platform === 'win32') {
155
+ // Windows: extract with tar (available on Win10+)
156
+ const extract = await runCommand('tar', ['-xzf', archive, '-C', tmpDir]);
157
+ if (extract.code !== 0)
158
+ return { ok: false, message: `extract failed: ${extract.stderr}` };
159
+ // Copy files over (xcopy)
160
+ const src = `${tmpDir}\\omniwire-${version}`;
161
+ const copy = await runCommand('xcopy', ['/E', '/Y', '/I', src, installDir]);
162
+ return { ok: copy.code === 0, message: copy.code === 0 ? `github: ${version}` : copy.stderr };
163
+ }
164
+ // Linux/macOS: extract and install
165
+ const extract = await runCommand('tar', ['-xzf', archive, '-C', '/tmp']);
166
+ if (extract.code !== 0)
167
+ return { ok: false, message: `extract failed: ${extract.stderr}` };
168
+ const src = `/tmp/omniwire-${version}`;
169
+ // npm install from extracted dir to rebuild
170
+ const install = await runCommand('bash', ['-c', `cd ${src} && npm install --production && npm run build 2>/dev/null; cp -r dist/* ${installDir}/dist/ 2>/dev/null; cp package.json ${installDir}/ 2>/dev/null; echo "ok"`]);
171
+ return { ok: install.stdout.includes('ok'), message: install.stdout.includes('ok') ? `github: ${version}` : install.stderr };
44
172
  }
45
173
  /** Self-update OmniWire to the latest version */
46
- export async function selfUpdate() {
174
+ export async function selfUpdate(source = 'auto') {
47
175
  const current = getCurrentVersion();
48
- // Check latest version
49
- const check = await checkForUpdate();
176
+ const check = await checkForUpdate(source);
50
177
  if (!check.updateAvailable) {
51
178
  return {
52
179
  currentVersion: current,
53
180
  latestVersion: check.latest,
54
181
  updated: false,
55
182
  message: `Already on latest version (${current})`,
183
+ source: check.source,
56
184
  };
57
185
  }
58
- // Detect package manager (npm or global install)
59
- const npmCmd = process.platform === 'win32' ? 'npm.cmd' : 'npm';
60
- // Try global update first
61
- const globalResult = await runCommand(npmCmd, ['install', '-g', `omniwire@${check.latest}`]);
62
- if (globalResult.code === 0) {
63
- return {
64
- currentVersion: current,
65
- latestVersion: check.latest,
66
- updated: true,
67
- message: `Updated ${current} → ${check.latest} (global)`,
68
- };
186
+ // Try npm first (most reliable), then GitHub
187
+ let result;
188
+ let usedSource;
189
+ if (check.source === 'npm' || source === 'npm') {
190
+ result = await updateViaNpm(check.latest);
191
+ usedSource = 'npm';
69
192
  }
70
- // Fallback: local update (for non-global installs)
71
- const localResult = await runCommand(npmCmd, ['install', `omniwire@${check.latest}`]);
72
- if (localResult.code === 0) {
73
- return {
74
- currentVersion: current,
75
- latestVersion: check.latest,
76
- updated: true,
77
- message: `Updated ${current} → ${check.latest} (local)`,
78
- };
193
+ else if (check.source === 'github' || source === 'github') {
194
+ result = await updateViaGitHub(check.latest);
195
+ usedSource = 'github';
196
+ }
197
+ else {
198
+ // Auto: try npm, fallback to github
199
+ result = await updateViaNpm(check.latest);
200
+ usedSource = 'npm';
201
+ if (!result.ok) {
202
+ result = await updateViaGitHub(check.latest);
203
+ usedSource = 'github';
204
+ }
205
+ }
206
+ if (result.ok) {
207
+ const state = loadState();
208
+ saveState({ ...state, lastCheck: Date.now(), lastVersion: check.latest });
79
209
  }
80
210
  return {
81
211
  currentVersion: current,
82
212
  latestVersion: check.latest,
83
- updated: false,
84
- message: `Update failed: ${globalResult.stderr || localResult.stderr}`,
213
+ updated: result.ok,
214
+ message: result.ok ? `Updated ${current} → ${check.latest} via ${usedSource}` : `Update failed: ${result.message}`,
215
+ source: usedSource,
85
216
  };
86
217
  }
87
- /** Compare semver strings: returns >0 if a > b, <0 if a < b, 0 if equal */
88
- function compareVersions(a, b) {
89
- const pa = a.split('.').map(Number);
90
- const pb = b.split('.').map(Number);
91
- for (let i = 0; i < 3; i++) {
92
- const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
93
- if (diff !== 0)
94
- return diff;
218
+ // --- Auto-update ---
219
+ let autoUpdateTimer = null;
220
+ /** Start auto-update background checker */
221
+ export function startAutoUpdate(intervalMs, onUpdate) {
222
+ stopAutoUpdate(); // Clear any existing timer
223
+ const state = loadState();
224
+ const interval = intervalMs ?? state.checkIntervalMs;
225
+ saveState({ ...state, autoUpdateEnabled: true, checkIntervalMs: interval });
226
+ // Run check immediately if enough time has passed
227
+ const timeSinceCheck = Date.now() - state.lastCheck;
228
+ if (timeSinceCheck >= interval) {
229
+ void autoUpdateCheck(onUpdate);
95
230
  }
96
- return 0;
231
+ autoUpdateTimer = setInterval(() => void autoUpdateCheck(onUpdate), interval);
232
+ // Don't keep process alive just for updates
233
+ if (autoUpdateTimer && 'unref' in autoUpdateTimer) {
234
+ autoUpdateTimer.unref();
235
+ }
236
+ }
237
+ /** Stop auto-update background checker */
238
+ export function stopAutoUpdate() {
239
+ if (autoUpdateTimer) {
240
+ clearInterval(autoUpdateTimer);
241
+ autoUpdateTimer = null;
242
+ }
243
+ const state = loadState();
244
+ saveState({ ...state, autoUpdateEnabled: false });
245
+ }
246
+ /** Single auto-update check + apply */
247
+ async function autoUpdateCheck(onUpdate) {
248
+ try {
249
+ const check = await checkForUpdate('auto');
250
+ if (check.updateAvailable) {
251
+ const result = await selfUpdate('auto');
252
+ saveState({ ...loadState(), lastCheck: Date.now() });
253
+ onUpdate?.(result);
254
+ }
255
+ else {
256
+ saveState({ ...loadState(), lastCheck: Date.now() });
257
+ }
258
+ }
259
+ catch { /* silent fail for background checks */ }
260
+ }
261
+ /** Check if auto-update is enabled */
262
+ export function isAutoUpdateEnabled() {
263
+ return loadState().autoUpdateEnabled;
264
+ }
265
+ /** Get auto-update state info */
266
+ export function getAutoUpdateState() {
267
+ return {
268
+ ...loadState(),
269
+ currentVersion: getCurrentVersion(),
270
+ timerActive: autoUpdateTimer !== null,
271
+ };
97
272
  }
98
273
  /** Get system info for diagnostics */
99
274
  export function getSystemInfo() {
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "omniwire",
3
- "version": "3.0.1",
4
- "description": "Infrastructure layer for AI agent swarms — 75+ MCP tools · A2A · VPN · firewall · CDP · cookies · CyberBase · background dispatch",
3
+ "version": "3.1.1",
4
+ "description": "Infrastructure layer for AI agent swarms — 81 MCP tools · A2A · OmniMesh VPN · firewall · CDP · cookies · CyberBase · background dispatch",
5
+ "license": "GPL-3.0-only",
5
6
  "type": "module",
6
7
  "bin": {
7
8
  "omniwire": "./dist/index.js",
@@ -26,6 +27,7 @@
26
27
  "pg": "^8.13.0",
27
28
  "picomatch": "^4.0.3",
28
29
  "ssh2": "^1.16.0",
30
+ "ws": "^8.18.0",
29
31
  "zod": "^4.3.6"
30
32
  },
31
33
  "devDependencies": {
@@ -34,6 +36,7 @@
34
36
  "@types/pg": "^8.11.0",
35
37
  "@types/picomatch": "^4.0.2",
36
38
  "@types/ssh2": "^1.15.0",
39
+ "@types/ws": "^8.5.0",
37
40
  "typescript": "^5.7.0"
38
41
  }
39
42
  }