orquesta-agent 0.2.11 → 0.2.12
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/daemon.d.ts.map +1 -1
- package/dist/daemon.js +89 -1
- package/dist/daemon.js.map +1 -1
- package/package.json +1 -1
package/dist/daemon.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmFH,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAuCD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAiJxD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC"}
|
package/dist/daemon.js
CHANGED
|
@@ -2,12 +2,85 @@
|
|
|
2
2
|
* Daemon mode for orquesta-agent
|
|
3
3
|
* Provides automatic restart functionality similar to systemd
|
|
4
4
|
*/
|
|
5
|
-
import { spawn } from 'child_process';
|
|
5
|
+
import { spawn, execSync } from 'child_process';
|
|
6
|
+
import * as fs from 'fs';
|
|
6
7
|
import * as path from 'path';
|
|
7
8
|
import { fileURLToPath } from 'url';
|
|
8
9
|
import * as logger from './logger.js';
|
|
9
10
|
const __filename = fileURLToPath(import.meta.url);
|
|
10
11
|
const __dirname = path.dirname(__filename);
|
|
12
|
+
// How often to check for updates while the agent is running (4 hours)
|
|
13
|
+
const PERIODIC_UPDATE_INTERVAL_MS = 4 * 60 * 60 * 1000;
|
|
14
|
+
function getCurrentVersion() {
|
|
15
|
+
try {
|
|
16
|
+
const pkgPath = path.join(__dirname, '..', 'package.json');
|
|
17
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
18
|
+
return pkg.version;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return '0.0.0';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// Returns true if semver a is strictly newer than b
|
|
25
|
+
function isNewerVersion(a, b) {
|
|
26
|
+
const parse = (v) => v.split('.').map(n => parseInt(n, 10));
|
|
27
|
+
const [aMaj, aMin, aPatch] = parse(a);
|
|
28
|
+
const [bMaj, bMin, bPatch] = parse(b);
|
|
29
|
+
if (aMaj !== bMaj)
|
|
30
|
+
return aMaj > bMaj;
|
|
31
|
+
if (aMin !== bMin)
|
|
32
|
+
return aMin > bMin;
|
|
33
|
+
return aPatch > bPatch;
|
|
34
|
+
}
|
|
35
|
+
// Query npm registry for the latest published version
|
|
36
|
+
function getLatestNpmVersion() {
|
|
37
|
+
try {
|
|
38
|
+
const result = execSync('npm view orquesta-agent version', {
|
|
39
|
+
encoding: 'utf-8',
|
|
40
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
41
|
+
timeout: 15000,
|
|
42
|
+
}).trim();
|
|
43
|
+
return result || null;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Try npm install -g, first without sudo then with sudo
|
|
50
|
+
function installUpdate(version) {
|
|
51
|
+
const cmds = [
|
|
52
|
+
`npm install -g orquesta-agent@${version}`,
|
|
53
|
+
`sudo npm install -g orquesta-agent@${version}`,
|
|
54
|
+
];
|
|
55
|
+
for (const cmd of cmds) {
|
|
56
|
+
try {
|
|
57
|
+
execSync(cmd, { stdio: 'pipe', timeout: 120000 });
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// try next method
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
// Returns true if a new version was installed
|
|
67
|
+
function checkAndUpdate(currentVersion) {
|
|
68
|
+
const latest = getLatestNpmVersion();
|
|
69
|
+
if (!latest)
|
|
70
|
+
return false;
|
|
71
|
+
if (!isNewerVersion(latest, currentVersion))
|
|
72
|
+
return false;
|
|
73
|
+
logger.info(`Auto-update: new version ${latest} available (current: ${currentVersion})`);
|
|
74
|
+
logger.info('Installing update...');
|
|
75
|
+
const success = installUpdate(latest);
|
|
76
|
+
if (success) {
|
|
77
|
+
logger.success(`Updated to orquesta-agent@${latest}`);
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
logger.warn('Auto-update failed — continuing with current version');
|
|
81
|
+
logger.warn('To update manually: npm install -g orquesta-agent@latest');
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
11
84
|
const DEFAULT_OPTIONS = {
|
|
12
85
|
maxRestarts: 0, // Unlimited by default
|
|
13
86
|
minRestartDelay: 1000, // 1 second
|
|
@@ -42,6 +115,7 @@ function formatUptime(ms) {
|
|
|
42
115
|
*/
|
|
43
116
|
export function startDaemon(options) {
|
|
44
117
|
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
118
|
+
const currentVersion = getCurrentVersion();
|
|
45
119
|
const state = {
|
|
46
120
|
restartCount: 0,
|
|
47
121
|
lastStartTime: 0,
|
|
@@ -133,6 +207,8 @@ export function startDaemon(options) {
|
|
|
133
207
|
const delay = calculateDelay(state.consecutiveFailures, opts.minRestartDelay, opts.maxRestartDelay);
|
|
134
208
|
logger.info(`Restarting agent in ${delay / 1000}s (failures: ${state.consecutiveFailures})...`);
|
|
135
209
|
setTimeout(() => {
|
|
210
|
+
// Check for updates before each restart
|
|
211
|
+
checkAndUpdate(currentVersion);
|
|
136
212
|
spawnAgent();
|
|
137
213
|
}, delay);
|
|
138
214
|
}
|
|
@@ -149,6 +225,18 @@ export function startDaemon(options) {
|
|
|
149
225
|
console.log('');
|
|
150
226
|
// Start the agent
|
|
151
227
|
spawnAgent();
|
|
228
|
+
// Periodically check for updates and restart child if a new version is found
|
|
229
|
+
const updateTimer = setInterval(() => {
|
|
230
|
+
if (isShuttingDown || !child)
|
|
231
|
+
return;
|
|
232
|
+
const updated = checkAndUpdate(currentVersion);
|
|
233
|
+
if (updated && child && !isShuttingDown) {
|
|
234
|
+
logger.info('Restarting agent to apply update...');
|
|
235
|
+
child.kill('SIGTERM');
|
|
236
|
+
// scheduleRestart fires automatically via child's exit handler
|
|
237
|
+
}
|
|
238
|
+
}, PERIODIC_UPDATE_INTERVAL_MS);
|
|
239
|
+
updateTimer.unref(); // don't keep process alive just for the timer
|
|
152
240
|
}
|
|
153
241
|
/**
|
|
154
242
|
* Check if running as daemon child process
|
package/dist/daemon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|