@shravansunder/agent-vm 0.0.2 → 0.0.3
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/backup/backup-encryption.d.ts +2 -2
- package/dist/backup/backup-encryption.d.ts.map +1 -1
- package/dist/backup/backup-encryption.js +29 -7
- package/dist/backup/backup-encryption.js.map +1 -1
- package/dist/build/gondolin-image-builder.d.ts.map +1 -1
- package/dist/build/gondolin-image-builder.js +3 -2
- package/dist/build/gondolin-image-builder.js.map +1 -1
- package/dist/cli/agent-vm-cli-support.d.ts +1 -0
- package/dist/cli/agent-vm-cli-support.d.ts.map +1 -1
- package/dist/cli/agent-vm-cli-support.js +4 -7
- package/dist/cli/agent-vm-cli-support.js.map +1 -1
- package/dist/cli/auth-interactive-command.d.ts.map +1 -1
- package/dist/cli/auth-interactive-command.js +9 -2
- package/dist/cli/auth-interactive-command.js.map +1 -1
- package/dist/cli/build-command.d.ts +2 -0
- package/dist/cli/build-command.d.ts.map +1 -1
- package/dist/cli/build-command.js +37 -0
- package/dist/cli/build-command.js.map +1 -1
- package/dist/cli/commands/command-definition-support.js +5 -5
- package/dist/cli/commands/command-definition-support.js.map +1 -1
- package/dist/cli/commands/controller-definition.d.ts.map +1 -1
- package/dist/cli/commands/controller-definition.js +10 -5
- package/dist/cli/commands/controller-definition.js.map +1 -1
- package/dist/cli/commands/create-app.d.ts +139 -139
- package/dist/cli/commands/create-app.js +2 -2
- package/dist/cli/commands/init-definition.js +1 -1
- package/dist/cli/init-command.d.ts +3 -2
- package/dist/cli/init-command.d.ts.map +1 -1
- package/dist/cli/init-command.js +63 -60
- package/dist/cli/init-command.js.map +1 -1
- package/dist/cli/openclaw-plugin-bundle.d.ts +10 -0
- package/dist/cli/openclaw-plugin-bundle.d.ts.map +1 -0
- package/dist/cli/openclaw-plugin-bundle.js +35 -0
- package/dist/cli/openclaw-plugin-bundle.js.map +1 -0
- package/dist/cli/ssh-commands.d.ts.map +1 -1
- package/dist/cli/ssh-commands.js +11 -1
- package/dist/cli/ssh-commands.js.map +1 -1
- package/dist/config/system-config.d.ts +22 -7
- package/dist/config/system-config.d.ts.map +1 -1
- package/dist/config/system-config.js +75 -9
- package/dist/config/system-config.js.map +1 -1
- package/dist/controller/composite-secret-resolver.d.ts +3 -0
- package/dist/controller/composite-secret-resolver.d.ts.map +1 -0
- package/dist/controller/composite-secret-resolver.js +38 -0
- package/dist/controller/composite-secret-resolver.js.map +1 -0
- package/dist/controller/controller-runtime-operations.d.ts.map +1 -1
- package/dist/controller/controller-runtime-operations.js +4 -21
- package/dist/controller/controller-runtime-operations.js.map +1 -1
- package/dist/controller/controller-runtime-support.d.ts +1 -0
- package/dist/controller/controller-runtime-support.d.ts.map +1 -1
- package/dist/controller/controller-runtime-support.js +10 -4
- package/dist/controller/controller-runtime-support.js.map +1 -1
- package/dist/controller/controller-runtime-types.d.ts +3 -1
- package/dist/controller/controller-runtime-types.d.ts.map +1 -1
- package/dist/controller/controller-runtime.d.ts.map +1 -1
- package/dist/controller/controller-runtime.js +64 -20
- package/dist/controller/controller-runtime.js.map +1 -1
- package/dist/controller/http/controller-request-schemas.d.ts.map +1 -1
- package/dist/controller/http/controller-request-schemas.js +2 -6
- package/dist/controller/http/controller-request-schemas.js.map +1 -1
- package/dist/controller/leases/lease-manager.d.ts.map +1 -1
- package/dist/controller/leases/lease-manager.js +1 -3
- package/dist/controller/leases/lease-manager.js.map +1 -1
- package/dist/controller/worker-task-runner.d.ts.map +1 -1
- package/dist/controller/worker-task-runner.js +19 -6
- package/dist/controller/worker-task-runner.js.map +1 -1
- package/dist/gateway/credential-manager.d.ts.map +1 -1
- package/dist/gateway/credential-manager.js +52 -9
- package/dist/gateway/credential-manager.js.map +1 -1
- package/dist/gateway/gateway-lifecycle-loader.js +1 -1
- package/dist/gateway/gateway-recovery.d.ts +19 -0
- package/dist/gateway/gateway-recovery.d.ts.map +1 -0
- package/dist/gateway/gateway-recovery.js +147 -0
- package/dist/gateway/gateway-recovery.js.map +1 -0
- package/dist/gateway/gateway-runtime-record.d.ts +33 -0
- package/dist/gateway/gateway-runtime-record.d.ts.map +1 -0
- package/dist/gateway/gateway-runtime-record.js +114 -0
- package/dist/gateway/gateway-runtime-record.js.map +1 -0
- package/dist/gateway/gateway-zone-orchestrator.d.ts +4 -0
- package/dist/gateway/gateway-zone-orchestrator.d.ts.map +1 -1
- package/dist/gateway/gateway-zone-orchestrator.js +60 -19
- package/dist/gateway/gateway-zone-orchestrator.js.map +1 -1
- package/dist/gateway/gateway-zone-support.d.ts +2 -1
- package/dist/gateway/gateway-zone-support.d.ts.map +1 -1
- package/dist/gateway/gateway-zone-support.js +34 -0
- package/dist/gateway/gateway-zone-support.js.map +1 -1
- package/dist/operations/doctor.d.ts.map +1 -1
- package/dist/operations/doctor.js +22 -11
- package/dist/operations/doctor.js.map +1 -1
- package/dist/operations/upgrade-zone.d.ts +0 -1
- package/dist/operations/upgrade-zone.d.ts.map +1 -1
- package/dist/operations/upgrade-zone.js +0 -1
- package/dist/operations/upgrade-zone.js.map +1 -1
- package/dist/runtime/project-namespace.d.ts +5 -0
- package/dist/runtime/project-namespace.d.ts.map +1 -0
- package/dist/runtime/project-namespace.js +22 -0
- package/dist/runtime/project-namespace.js.map +1 -0
- package/dist/tool-vm/tool-vm-lifecycle.d.ts.map +1 -1
- package/dist/tool-vm/tool-vm-lifecycle.js +2 -1
- package/dist/tool-vm/tool-vm-lifecycle.js.map +1 -1
- package/package.json +9 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-task-runner.js","sourceRoot":"","sources":["../../src/controller/worker-task-runner.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAqB,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-task-runner.js","sourceRoot":"","sources":["../../src/controller/worker-task-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-manager.d.ts","sourceRoot":"","sources":["../../src/gateway/credential-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"credential-manager.d.ts","sourceRoot":"","sources":["../../src/gateway/credential-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AA0B/D,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IACjD,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;CACxC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAwDlC"}
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
function buildSuggestedSecretRef(zoneId, secretName) {
|
|
2
|
+
switch (secretName) {
|
|
3
|
+
case 'DISCORD_BOT_TOKEN':
|
|
4
|
+
return `op://agent-vm/${zoneId}-discord/bot-token`;
|
|
5
|
+
case 'PERPLEXITY_API_KEY':
|
|
6
|
+
return `op://agent-vm/${zoneId}-perplexity/credential`;
|
|
7
|
+
case 'OPENCLAW_GATEWAY_TOKEN':
|
|
8
|
+
return `op://agent-vm/${zoneId}-gateway-auth/password`;
|
|
9
|
+
case 'OPENAI_API_KEY':
|
|
10
|
+
return `op://agent-vm/${zoneId}-openai/credential`;
|
|
11
|
+
case 'ANTHROPIC_API_KEY':
|
|
12
|
+
return `op://agent-vm/${zoneId}-anthropic/credential`;
|
|
13
|
+
default:
|
|
14
|
+
return `op://agent-vm/${zoneId}-${secretName.toLowerCase().replace(/_/gu, '-')}/credential`;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
1
17
|
function findZone(systemConfig, zoneId) {
|
|
2
18
|
return systemConfig.zones.find((zone) => zone.id === zoneId);
|
|
3
19
|
}
|
|
@@ -6,17 +22,44 @@ export async function resolveZoneSecrets(options) {
|
|
|
6
22
|
if (!zone) {
|
|
7
23
|
throw new Error(`Unknown zone '${options.zoneId}'.`);
|
|
8
24
|
}
|
|
9
|
-
const
|
|
25
|
+
const resolvedSecrets = {};
|
|
10
26
|
for (const [secretName, secretConfig] of Object.entries(zone.secrets)) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
27
|
+
let secretRef;
|
|
28
|
+
switch (secretConfig.source) {
|
|
29
|
+
case 'environment':
|
|
30
|
+
if (!secretConfig.envVar) {
|
|
31
|
+
throw new Error(`Zone '${zone.id}' secret '${secretName}' is missing 'envVar'. Add an explicit environment variable name.`);
|
|
32
|
+
}
|
|
33
|
+
secretRef = {
|
|
34
|
+
ref: secretConfig.envVar,
|
|
35
|
+
source: 'environment',
|
|
36
|
+
};
|
|
37
|
+
break;
|
|
38
|
+
case '1password':
|
|
39
|
+
if (!secretConfig.ref) {
|
|
40
|
+
throw new Error(`Zone '${zone.id}' secret '${secretName}' is missing 'ref'. Add an explicit 1Password reference such as '${buildSuggestedSecretRef(zone.id, secretName)}'.`);
|
|
41
|
+
}
|
|
42
|
+
secretRef = {
|
|
43
|
+
ref: secretConfig.ref,
|
|
44
|
+
source: '1password',
|
|
45
|
+
};
|
|
46
|
+
break;
|
|
47
|
+
default: {
|
|
48
|
+
const exhaustiveCheck = secretConfig;
|
|
49
|
+
throw new Error(`Unsupported secret config for '${secretName}': ${JSON.stringify(exhaustiveCheck)}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
// Sequential resolution gives the user exact secret context on failure.
|
|
54
|
+
// oxlint-disable-next-line eslint/no-await-in-loop
|
|
55
|
+
resolvedSecrets[secretName] = await options.secretResolver.resolve(secretRef);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
59
|
+
const sourceReference = secretConfig.source === 'environment' ? secretConfig.envVar : secretConfig.ref;
|
|
60
|
+
throw new Error(`Failed to resolve secret '${secretName}' for zone '${zone.id}' from '${sourceReference}': ${message}`, { cause: error });
|
|
14
61
|
}
|
|
15
|
-
resolvedRefs[secretName] = {
|
|
16
|
-
ref,
|
|
17
|
-
source: secretConfig.source,
|
|
18
|
-
};
|
|
19
62
|
}
|
|
20
|
-
return
|
|
63
|
+
return resolvedSecrets;
|
|
21
64
|
}
|
|
22
65
|
//# sourceMappingURL=credential-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-manager.js","sourceRoot":"","sources":["../../src/gateway/credential-manager.ts"],"names":[],"mappings":"AAIA,SAAS,QAAQ,CAChB,YAA0B,EAC1B,MAAc;IAEd,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAIxC;IACA,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,iBAAiB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,
|
|
1
|
+
{"version":3,"file":"credential-manager.js","sourceRoot":"","sources":["../../src/gateway/credential-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { openclawLifecycle } from '@shravansunder/openclaw-gateway';
|
|
2
2
|
import { workerLifecycle } from '@shravansunder/worker-gateway';
|
|
3
3
|
const lifecycleByType = {
|
|
4
|
-
|
|
4
|
+
worker: workerLifecycle,
|
|
5
5
|
openclaw: openclawLifecycle,
|
|
6
6
|
};
|
|
7
7
|
export function loadGatewayLifecycle(type) {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { deleteGatewayRuntimeRecord, loadGatewayRuntimeRecord } from './gateway-runtime-record.js';
|
|
2
|
+
export interface GatewayRecoveryDependencies {
|
|
3
|
+
readonly deleteGatewayRuntimeRecord?: typeof deleteGatewayRuntimeRecord;
|
|
4
|
+
readonly isProcessAlive?: (pid: number) => boolean;
|
|
5
|
+
readonly killProcess?: (pid: number, signal: NodeJS.Signals) => void;
|
|
6
|
+
readonly loadGatewayRuntimeRecord?: typeof loadGatewayRuntimeRecord;
|
|
7
|
+
readonly log?: (message: string) => void;
|
|
8
|
+
readonly readProcessCommand?: (pid: number) => Promise<string | null>;
|
|
9
|
+
readonly sleep?: (delayMs: number) => Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export declare function cleanupOrphanedGatewayIfPresent(options: {
|
|
12
|
+
readonly stateDir: string;
|
|
13
|
+
readonly zoneId: string;
|
|
14
|
+
}, dependencies?: GatewayRecoveryDependencies): Promise<{
|
|
15
|
+
readonly cleanedUp: boolean;
|
|
16
|
+
readonly cleanupWarning?: string;
|
|
17
|
+
readonly killedPid: number | null;
|
|
18
|
+
}>;
|
|
19
|
+
//# sourceMappingURL=gateway-recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-recovery.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-recovery.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAiJnG,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,0BAA0B,CAAC;IACxE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;IACrE,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,wBAAwB,CAAC;IACpE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAED,wBAAsB,+BAA+B,CACpD,OAAO,EAAE;IACR,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB,EACD,YAAY,GAAE,2BAAgC,GAC5C,OAAO,CAAC;IACV,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC,CAwCD"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
import { deleteGatewayRuntimeRecord, loadGatewayRuntimeRecord } from './gateway-runtime-record.js';
|
|
4
|
+
const execFileAsync = promisify(execFile);
|
|
5
|
+
function isProcessAlive(pid) {
|
|
6
|
+
try {
|
|
7
|
+
process.kill(pid, 0);
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
if (typeof error === 'object' && error !== null && 'code' in error) {
|
|
12
|
+
if (error.code === 'EPERM') {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
if (error.code === 'ESRCH') {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async function readProcessCommand(pid) {
|
|
23
|
+
try {
|
|
24
|
+
const { stdout } = await execFileAsync('ps', ['-p', String(pid), '-o', 'command=']);
|
|
25
|
+
const command = stdout.trim();
|
|
26
|
+
return command.length > 0 ? command : null;
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
if (typeof error === 'object' && error !== null && 'code' in error && error.code === 1) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function isManagedGatewayProcess(command) {
|
|
36
|
+
return /\b(qemu-system|krun)\b/u.test(command);
|
|
37
|
+
}
|
|
38
|
+
function writeRecoveryLog(message) {
|
|
39
|
+
process.stderr.write(`[agent-vm] ${message}\n`);
|
|
40
|
+
}
|
|
41
|
+
function killProcess(pid, signal) {
|
|
42
|
+
try {
|
|
43
|
+
process.kill(pid, signal);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if (typeof error === 'object' && error !== null && 'code' in error && error.code === 'ESRCH') {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (typeof error === 'object' && error !== null && 'code' in error && error.code === 'EPERM') {
|
|
50
|
+
throw new Error(`Permission denied while sending ${signal} to orphaned gateway pid ${pid}. The process is still running and may require elevated privileges to terminate.`, { cause: error });
|
|
51
|
+
}
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function isNoSuchProcessError(error) {
|
|
56
|
+
return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ESRCH';
|
|
57
|
+
}
|
|
58
|
+
async function sleep(delayMs) {
|
|
59
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
60
|
+
}
|
|
61
|
+
async function waitForExit(options) {
|
|
62
|
+
const deadline = Date.now() + options.timeoutMs;
|
|
63
|
+
while (Date.now() < deadline) {
|
|
64
|
+
if (!options.processIsAlive(options.pid)) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
// oxlint-disable-next-line no-await-in-loop -- polling loop must wait between liveness checks
|
|
68
|
+
await options.sleep(100);
|
|
69
|
+
}
|
|
70
|
+
return !options.processIsAlive(options.pid);
|
|
71
|
+
}
|
|
72
|
+
async function killOrphanedGatewayProcess(runtimeRecord, dependencies) {
|
|
73
|
+
if (!dependencies.isProcessAlive(runtimeRecord.qemuPid)) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
const processCommand = await dependencies.readProcessCommand(runtimeRecord.qemuPid);
|
|
77
|
+
if (!processCommand || !isManagedGatewayProcess(processCommand)) {
|
|
78
|
+
throw new Error(`Gateway runtime record for zone '${runtimeRecord.zoneId}' points at unexpected live process ${runtimeRecord.qemuPid}: ${processCommand ?? '(command unavailable)'}.`);
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
dependencies.killProcess(runtimeRecord.qemuPid, 'SIGTERM');
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
if (!isNoSuchProcessError(error)) {
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (await waitForExit({
|
|
89
|
+
pid: runtimeRecord.qemuPid,
|
|
90
|
+
processIsAlive: dependencies.isProcessAlive,
|
|
91
|
+
sleep: dependencies.sleep,
|
|
92
|
+
timeoutMs: 2_000,
|
|
93
|
+
})) {
|
|
94
|
+
return runtimeRecord.qemuPid;
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
dependencies.killProcess(runtimeRecord.qemuPid, 'SIGKILL');
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
if (!isNoSuchProcessError(error)) {
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (await waitForExit({
|
|
105
|
+
pid: runtimeRecord.qemuPid,
|
|
106
|
+
processIsAlive: dependencies.isProcessAlive,
|
|
107
|
+
sleep: dependencies.sleep,
|
|
108
|
+
timeoutMs: 2_000,
|
|
109
|
+
})) {
|
|
110
|
+
return runtimeRecord.qemuPid;
|
|
111
|
+
}
|
|
112
|
+
throw new Error(`Failed to terminate orphaned gateway VM process ${runtimeRecord.qemuPid} for zone '${runtimeRecord.zoneId}'.`);
|
|
113
|
+
}
|
|
114
|
+
export async function cleanupOrphanedGatewayIfPresent(options, dependencies = {}) {
|
|
115
|
+
const log = dependencies.log ?? writeRecoveryLog;
|
|
116
|
+
const runtimeRecord = await (dependencies.loadGatewayRuntimeRecord ?? loadGatewayRuntimeRecord)(options.stateDir, { log });
|
|
117
|
+
if (!runtimeRecord) {
|
|
118
|
+
return { cleanedUp: false, killedPid: null };
|
|
119
|
+
}
|
|
120
|
+
log(`Found persisted gateway runtime for zone '${runtimeRecord.zoneId}' (pid ${runtimeRecord.qemuPid}, vm ${runtimeRecord.vmId}).`);
|
|
121
|
+
const killedPid = await killOrphanedGatewayProcess(runtimeRecord, {
|
|
122
|
+
isProcessAlive: dependencies.isProcessAlive ?? isProcessAlive,
|
|
123
|
+
killProcess: dependencies.killProcess ?? killProcess,
|
|
124
|
+
readProcessCommand: dependencies.readProcessCommand ?? readProcessCommand,
|
|
125
|
+
sleep: dependencies.sleep ?? sleep,
|
|
126
|
+
});
|
|
127
|
+
try {
|
|
128
|
+
await (dependencies.deleteGatewayRuntimeRecord ?? deleteGatewayRuntimeRecord)(options.stateDir);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
const cleanupWarning = `Failed to remove stale gateway runtime record for zone '${runtimeRecord.zoneId}' at '${options.stateDir}': ${error instanceof Error ? error.message : JSON.stringify(error)}`;
|
|
132
|
+
log(cleanupWarning);
|
|
133
|
+
return {
|
|
134
|
+
cleanedUp: false,
|
|
135
|
+
cleanupWarning,
|
|
136
|
+
killedPid,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
log(killedPid === null
|
|
140
|
+
? `Removed stale gateway runtime record for zone '${runtimeRecord.zoneId}' after confirming the orphaned process was already gone.`
|
|
141
|
+
: `Removed stale gateway runtime record for zone '${runtimeRecord.zoneId}' after terminating orphaned gateway pid ${killedPid}.`);
|
|
142
|
+
return {
|
|
143
|
+
cleanedUp: true,
|
|
144
|
+
killedPid,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=gateway-recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-recovery.js","sourceRoot":"","sources":["../../src/gateway/gateway-recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type GatewayProcessSpec, type GatewayType } from '@shravansunder/gateway-interface';
|
|
2
|
+
import { type ManagedVm } from '@shravansunder/gondolin-core';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export declare const gatewayRuntimeRecordSchema: z.ZodObject<{
|
|
5
|
+
createdAt: z.ZodString;
|
|
6
|
+
gatewayType: z.ZodEnum<{
|
|
7
|
+
openclaw: "openclaw";
|
|
8
|
+
worker: "worker";
|
|
9
|
+
}>;
|
|
10
|
+
guestListenPort: z.ZodNumber;
|
|
11
|
+
ingressPort: z.ZodNumber;
|
|
12
|
+
projectNamespace: z.ZodString;
|
|
13
|
+
qemuPid: z.ZodNumber;
|
|
14
|
+
sessionLabel: z.ZodString;
|
|
15
|
+
vmId: z.ZodString;
|
|
16
|
+
zoneId: z.ZodString;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
export type GatewayRuntimeRecord = z.infer<typeof gatewayRuntimeRecordSchema>;
|
|
19
|
+
export type GatewayRuntimeLog = (message: string) => void;
|
|
20
|
+
export declare function loadGatewayRuntimeRecord(stateDirectory: string, options?: {
|
|
21
|
+
readonly log?: GatewayRuntimeLog;
|
|
22
|
+
}): Promise<GatewayRuntimeRecord | null>;
|
|
23
|
+
export declare function writeGatewayRuntimeRecord(stateDirectory: string, record: GatewayRuntimeRecord): Promise<void>;
|
|
24
|
+
export declare function deleteGatewayRuntimeRecord(stateDirectory: string): Promise<void>;
|
|
25
|
+
export declare function buildGatewayRuntimeRecord(options: {
|
|
26
|
+
readonly gatewayType: GatewayType;
|
|
27
|
+
readonly ingressPort: number;
|
|
28
|
+
readonly managedVm: ManagedVm;
|
|
29
|
+
readonly processSpec: GatewayProcessSpec;
|
|
30
|
+
readonly projectNamespace: string;
|
|
31
|
+
readonly zoneId: string;
|
|
32
|
+
}): GatewayRuntimeRecord;
|
|
33
|
+
//# sourceMappingURL=gateway-runtime-record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-runtime-record.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-runtime-record.ts"],"names":[],"mappings":"AAGA,OAAO,EAGN,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAY,CAAC,EAAE,MAAM,KAAK,CAAC;AAElC,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;iBAUrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAwC1D,wBAAsB,wBAAwB,CAC7C,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE;IACR,QAAQ,CAAC,GAAG,CAAC,EAAE,iBAAiB,CAAC;CAC5B,GACJ,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAyBtC;AAED,wBAAsB,yBAAyB,CAC9C,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAsB,0BAA0B,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtF;AAmCD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IAClD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB,GAAG,oBAAoB,CAcvB"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { buildGatewaySessionLabel, gatewayTypeValues, } from '@shravansunder/gateway-interface';
|
|
4
|
+
import { writeFileAtomically } from '@shravansunder/gondolin-core';
|
|
5
|
+
import { ZodError, z } from 'zod';
|
|
6
|
+
export const gatewayRuntimeRecordSchema = z.object({
|
|
7
|
+
createdAt: z.string().datetime(),
|
|
8
|
+
gatewayType: z.enum(gatewayTypeValues),
|
|
9
|
+
guestListenPort: z.number().int().positive(),
|
|
10
|
+
ingressPort: z.number().int().positive(),
|
|
11
|
+
projectNamespace: z.string().min(1),
|
|
12
|
+
qemuPid: z.number().int().positive(),
|
|
13
|
+
sessionLabel: z.string().min(1),
|
|
14
|
+
vmId: z.string().min(1),
|
|
15
|
+
zoneId: z.string().min(1),
|
|
16
|
+
});
|
|
17
|
+
const gatewayRuntimeRecordFileName = 'gateway-runtime.json';
|
|
18
|
+
function resolveGatewayRuntimeRecordPath(stateDirectory) {
|
|
19
|
+
return path.join(stateDirectory, gatewayRuntimeRecordFileName);
|
|
20
|
+
}
|
|
21
|
+
function resolveInvalidGatewayRuntimeRecordPath(stateDirectory) {
|
|
22
|
+
return path.join(stateDirectory, `gateway-runtime.invalid.${Date.now()}.json`);
|
|
23
|
+
}
|
|
24
|
+
function isObjectRecord(value) {
|
|
25
|
+
return typeof value === 'object' && value !== null;
|
|
26
|
+
}
|
|
27
|
+
async function quarantineMalformedGatewayRuntimeRecord(stateDirectory, runtimeRecordPath, log) {
|
|
28
|
+
const invalidRuntimeRecordPath = resolveInvalidGatewayRuntimeRecordPath(stateDirectory);
|
|
29
|
+
try {
|
|
30
|
+
await fs.rename(runtimeRecordPath, invalidRuntimeRecordPath);
|
|
31
|
+
log(`Quarantined malformed gateway runtime record '${runtimeRecordPath}' to '${invalidRuntimeRecordPath}'.`);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
await fs.rm(runtimeRecordPath, { force: true });
|
|
36
|
+
log(`Deleted malformed gateway runtime record '${runtimeRecordPath}' after quarantine rename failed: ${error instanceof Error ? error.message : JSON.stringify(error)}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function writeGatewayRuntimeLog(message) {
|
|
40
|
+
process.stderr.write(`[agent-vm] ${message}\n`);
|
|
41
|
+
}
|
|
42
|
+
export async function loadGatewayRuntimeRecord(stateDirectory, options = {}) {
|
|
43
|
+
const runtimeRecordPath = resolveGatewayRuntimeRecordPath(stateDirectory);
|
|
44
|
+
let rawRuntimeRecord;
|
|
45
|
+
try {
|
|
46
|
+
rawRuntimeRecord = await fs.readFile(runtimeRecordPath, 'utf8');
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
if (typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT') {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
return gatewayRuntimeRecordSchema.parse(JSON.parse(rawRuntimeRecord));
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
if (!(error instanceof SyntaxError) && !(error instanceof ZodError)) {
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
await quarantineMalformedGatewayRuntimeRecord(stateDirectory, runtimeRecordPath, options.log ?? writeGatewayRuntimeLog);
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export async function writeGatewayRuntimeRecord(stateDirectory, record) {
|
|
66
|
+
const runtimeRecordPath = resolveGatewayRuntimeRecordPath(stateDirectory);
|
|
67
|
+
await fs.mkdir(stateDirectory, { recursive: true });
|
|
68
|
+
await writeFileAtomically(runtimeRecordPath, `${JSON.stringify(gatewayRuntimeRecordSchema.parse(record), null, 2)}\n`, { mode: 0o600 });
|
|
69
|
+
}
|
|
70
|
+
export async function deleteGatewayRuntimeRecord(stateDirectory) {
|
|
71
|
+
await fs.rm(resolveGatewayRuntimeRecordPath(stateDirectory), { force: true });
|
|
72
|
+
}
|
|
73
|
+
function resolveManagedVmQemuPid(managedVm) {
|
|
74
|
+
const vmInstance = managedVm.getVmInstance();
|
|
75
|
+
if (!isObjectRecord(vmInstance)) {
|
|
76
|
+
throw new Error('Gateway VM runtime is missing its live VM instance.');
|
|
77
|
+
}
|
|
78
|
+
// Level 1 currently relies on Gondolin's live runtime object graph:
|
|
79
|
+
// VM -> SandboxServer -> SandboxController -> child_process.ChildProcess.
|
|
80
|
+
// If Gondolin refactors that structure, we fail closed here instead of
|
|
81
|
+
// silently persisting an invalid pid into gateway-runtime.json.
|
|
82
|
+
const server = vmInstance.server;
|
|
83
|
+
if (!isObjectRecord(server)) {
|
|
84
|
+
throw new Error('Gateway VM runtime is missing its live sandbox server.');
|
|
85
|
+
}
|
|
86
|
+
const controller = server.controller;
|
|
87
|
+
if (!isObjectRecord(controller)) {
|
|
88
|
+
throw new Error('Gateway VM runtime is missing its live sandbox controller.');
|
|
89
|
+
}
|
|
90
|
+
const child = controller.child;
|
|
91
|
+
if (!isObjectRecord(child)) {
|
|
92
|
+
throw new Error('Gateway VM runtime is missing its live QEMU child process.');
|
|
93
|
+
}
|
|
94
|
+
const qemuPid = child.pid;
|
|
95
|
+
if (typeof qemuPid !== 'number' || !Number.isInteger(qemuPid) || qemuPid <= 0) {
|
|
96
|
+
throw new Error('Gateway VM runtime is missing its live QEMU pid.');
|
|
97
|
+
}
|
|
98
|
+
return qemuPid;
|
|
99
|
+
}
|
|
100
|
+
export function buildGatewayRuntimeRecord(options) {
|
|
101
|
+
const gatewayType = gatewayRuntimeRecordSchema.shape.gatewayType.parse(options.gatewayType);
|
|
102
|
+
return {
|
|
103
|
+
createdAt: new Date().toISOString(),
|
|
104
|
+
gatewayType,
|
|
105
|
+
guestListenPort: options.processSpec.guestListenPort,
|
|
106
|
+
ingressPort: options.ingressPort,
|
|
107
|
+
projectNamespace: options.projectNamespace,
|
|
108
|
+
qemuPid: resolveManagedVmQemuPid(options.managedVm),
|
|
109
|
+
sessionLabel: buildGatewaySessionLabel(options.projectNamespace, options.zoneId),
|
|
110
|
+
vmId: options.managedVm.id,
|
|
111
|
+
zoneId: options.zoneId,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=gateway-runtime-record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-runtime-record.js","sourceRoot":"","sources":["../../src/gateway/gateway-runtime-record.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import type { GatewayLifecycle, GatewayZoneConfig } from '@shravansunder/gateway-interface';
|
|
2
2
|
import { type ManagedVm } from '@shravansunder/gondolin-core';
|
|
3
3
|
import { type GatewayImageBuilderDependencies } from './gateway-image-builder.js';
|
|
4
|
+
import { cleanupOrphanedGatewayIfPresent } from './gateway-recovery.js';
|
|
5
|
+
import { type GatewayRuntimeRecord } from './gateway-runtime-record.js';
|
|
4
6
|
import { type GatewayManagedVmFactoryOptions, type GatewayZoneStartResult, type StartGatewayZoneOptions } from './gateway-zone-support.js';
|
|
5
7
|
export interface GatewayManagerDependencies extends GatewayImageBuilderDependencies {
|
|
8
|
+
readonly cleanupOrphanedGatewayIfPresent?: typeof cleanupOrphanedGatewayIfPresent;
|
|
6
9
|
readonly createManagedVm?: (options: GatewayManagedVmFactoryOptions) => Promise<ManagedVm>;
|
|
7
10
|
readonly loadGatewayLifecycle?: (type: GatewayZoneConfig['gateway']['type']) => GatewayLifecycle;
|
|
11
|
+
readonly writeGatewayRuntimeRecord?: (stateDirectory: string, record: GatewayRuntimeRecord) => Promise<void>;
|
|
8
12
|
}
|
|
9
13
|
export declare function startGatewayZone(options: StartGatewayZoneOptions, dependencies?: GatewayManagerDependencies): Promise<GatewayZoneStartResult>;
|
|
10
14
|
//# sourceMappingURL=gateway-zone-orchestrator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-zone-orchestrator.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-zone-orchestrator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEX,gBAAgB,EAChB,iBAAiB,EACjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAEN,KAAK,SAAS,EACd,MAAM,8BAA8B,CAAC;AAItC,OAAO,EAEN,KAAK,+BAA+B,EACpC,MAAM,4BAA4B,CAAC;AAEpC,OAAO,
|
|
1
|
+
{"version":3,"file":"gateway-zone-orchestrator.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-zone-orchestrator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEX,gBAAgB,EAChB,iBAAiB,EACjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAEN,KAAK,SAAS,EACd,MAAM,8BAA8B,CAAC;AAItC,OAAO,EAEN,KAAK,+BAA+B,EACpC,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAGN,KAAK,oBAAoB,EACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAGN,KAAK,8BAA8B,EACnC,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,0BAA2B,SAAQ,+BAA+B;IAClF,QAAQ,CAAC,+BAA+B,CAAC,EAAE,OAAO,+BAA+B,CAAC;IAClF,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,8BAA8B,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3F,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,gBAAgB,CAAC;IACjG,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CACpC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,oBAAoB,KACxB,OAAO,CAAC,IAAI,CAAC,CAAC;CACnB;AA4CD,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,uBAAuB,EAChC,YAAY,GAAE,0BAA+B,GAC3C,OAAO,CAAC,sBAAsB,CAAC,CA0HjC"}
|