@shravansunder/agent-vm 0.0.2 → 0.0.4
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 +29 -7
- 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
|
@@ -25,7 +25,7 @@ function writeStderr(message) {
|
|
|
25
25
|
}
|
|
26
26
|
const taskStatusResponseSchema = z
|
|
27
27
|
.object({
|
|
28
|
-
status: z.string()
|
|
28
|
+
status: z.string(),
|
|
29
29
|
})
|
|
30
30
|
.passthrough();
|
|
31
31
|
async function readJsonObjectFile(filePath, options) {
|
|
@@ -45,6 +45,13 @@ async function readJsonObjectFile(filePath, options) {
|
|
|
45
45
|
throw new Error(`Invalid ${options.label}: ${message}`, { cause: error });
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
+
async function copyLocalWorkerTarballIfConfigured(stateDir) {
|
|
49
|
+
const localWorkerTarballPath = process.env.AGENT_VM_WORKER_TARBALL_PATH;
|
|
50
|
+
if (!localWorkerTarballPath) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
await fs.copyFile(localWorkerTarballPath, path.join(stateDir, 'agent-vm-worker.tgz'));
|
|
54
|
+
}
|
|
48
55
|
function deriveRepoDirectoryName(repoUrl, usedNames) {
|
|
49
56
|
const cleanedUrl = repoUrl.replace(/\.git$/, '');
|
|
50
57
|
const baseName = cleanedUrl.split('/').pop()?.trim() ?? 'repo';
|
|
@@ -65,6 +72,7 @@ export async function preStartGateway(taskInput, zoneConfig) {
|
|
|
65
72
|
let composeFilePaths = [];
|
|
66
73
|
await fs.mkdir(workspaceDir, { recursive: true });
|
|
67
74
|
await fs.mkdir(stateDir, { recursive: true });
|
|
75
|
+
await copyLocalWorkerTarballIfConfigured(stateDir);
|
|
68
76
|
try {
|
|
69
77
|
const usedRepoNames = new Set();
|
|
70
78
|
const clonedRepoHostDirs = [];
|
|
@@ -120,19 +128,30 @@ export async function preStartGateway(taskInput, zoneConfig) {
|
|
|
120
128
|
}
|
|
121
129
|
export async function postStopGateway(taskId, zoneConfig, composeFilePaths = []) {
|
|
122
130
|
const taskRoot = path.join(zoneConfig.gateway.stateDir, 'tasks', taskId);
|
|
131
|
+
const workspaceDir = path.join(taskRoot, 'workspace');
|
|
123
132
|
let cleanupError = null;
|
|
133
|
+
let workspaceRemovalError = null;
|
|
124
134
|
try {
|
|
125
135
|
await stopDockerServicesForTask(composeFilePaths);
|
|
126
136
|
}
|
|
127
137
|
catch (error) {
|
|
128
|
-
cleanupError = error;
|
|
138
|
+
cleanupError = error instanceof Error ? error : new Error(String(error));
|
|
129
139
|
}
|
|
130
|
-
|
|
131
|
-
await fs.rm(
|
|
140
|
+
try {
|
|
141
|
+
await fs.rm(workspaceDir, { recursive: true, force: true });
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
workspaceRemovalError = error instanceof Error ? error : new Error(String(error));
|
|
145
|
+
}
|
|
146
|
+
if (cleanupError && workspaceRemovalError) {
|
|
147
|
+
throw new AggregateError([cleanupError, workspaceRemovalError], `Failed to stop Docker services and prune the task workspace for ${taskId}.`);
|
|
132
148
|
}
|
|
133
149
|
if (cleanupError) {
|
|
134
150
|
throw cleanupError;
|
|
135
151
|
}
|
|
152
|
+
if (workspaceRemovalError) {
|
|
153
|
+
throw workspaceRemovalError;
|
|
154
|
+
}
|
|
136
155
|
}
|
|
137
156
|
async function fetchJson(url, init) {
|
|
138
157
|
const response = await fetch(url, init);
|
|
@@ -146,8 +165,8 @@ export async function runWorkerTask(options) {
|
|
|
146
165
|
if (!zone) {
|
|
147
166
|
throw new Error(`Unknown zone '${options.zoneId}'.`);
|
|
148
167
|
}
|
|
149
|
-
if (zone.gateway.type !== '
|
|
150
|
-
throw new Error(`Zone '${options.zoneId}' is not a
|
|
168
|
+
if (zone.gateway.type !== 'worker') {
|
|
169
|
+
throw new Error(`Zone '${options.zoneId}' is not a worker zone.`);
|
|
151
170
|
}
|
|
152
171
|
const preStartResult = await preStartGateway(options.input, zone);
|
|
153
172
|
const taskZoneConfig = {
|
|
@@ -191,6 +210,9 @@ export async function runWorkerTask(options) {
|
|
|
191
210
|
consecutivePollFailures = 0;
|
|
192
211
|
}
|
|
193
212
|
catch (error) {
|
|
213
|
+
if (error instanceof z.ZodError) {
|
|
214
|
+
throw new Error(`Worker task status response did not match the expected schema for task ${preStartResult.taskId}.`, { cause: error });
|
|
215
|
+
}
|
|
194
216
|
consecutivePollFailures += 1;
|
|
195
217
|
const message = error instanceof Error ? error.message : String(error);
|
|
196
218
|
writeStderr(`[worker-task-runner] Poll failure ${consecutivePollFailures} for task ${preStartResult.taskId}: ${message}`);
|
|
@@ -204,7 +226,7 @@ export async function runWorkerTask(options) {
|
|
|
204
226
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
205
227
|
continue;
|
|
206
228
|
}
|
|
207
|
-
if (state.status === 'completed' || state.status === 'failed') {
|
|
229
|
+
if (state.status === 'completed' || state.status === 'failed' || state.status === 'closed') {
|
|
208
230
|
return {
|
|
209
231
|
taskId: preStartResult.taskId,
|
|
210
232
|
finalState: state,
|
|
@@ -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":"AAIA,SAAS,uBAAuB,CAAC,MAAc,EAAE,UAAkB;IAClE,QAAQ,UAAU,EAAE,CAAC;QACpB,KAAK,mBAAmB;YACvB,OAAO,iBAAiB,MAAM,oBAAoB,CAAC;QACpD,KAAK,oBAAoB;YACxB,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;QACxD,KAAK,wBAAwB;YAC5B,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;QACxD,KAAK,gBAAgB;YACpB,OAAO,iBAAiB,MAAM,oBAAoB,CAAC;QACpD,KAAK,mBAAmB;YACvB,OAAO,iBAAiB,MAAM,uBAAuB,CAAC;QACvD;YACC,OAAO,iBAAiB,MAAM,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,aAAa,CAAC;IAC9F,CAAC;AACF,CAAC;AAED,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,eAAe,GAA2B,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvE,IAAI,SAAoB,CAAC;QACzB,QAAQ,YAAY,CAAC,MAAM,EAAE,CAAC;YAC7B,KAAK,aAAa;gBACjB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;oBAC1B,MAAM,IAAI,KAAK,CACd,SAAS,IAAI,CAAC,EAAE,aAAa,UAAU,mEAAmE,CAC1G,CAAC;gBACH,CAAC;gBACD,SAAS,GAAG;oBACX,GAAG,EAAE,YAAY,CAAC,MAAM;oBACxB,MAAM,EAAE,aAAa;iBACrB,CAAC;gBACF,MAAM;YACP,KAAK,WAAW;gBACf,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;oBACvB,MAAM,IAAI,KAAK,CACd,SAAS,IAAI,CAAC,EAAE,aAAa,UAAU,oEAAoE,uBAAuB,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAC3J,CAAC;gBACH,CAAC;gBACD,SAAS,GAAG;oBACX,GAAG,EAAE,YAAY,CAAC,GAAG;oBACrB,MAAM,EAAE,WAAW;iBACnB,CAAC;gBACF,MAAM;YACP,OAAO,CAAC,CAAC,CAAC;gBACT,MAAM,eAAe,GAAU,YAAY,CAAC;gBAC5C,MAAM,IAAI,KAAK,CACd,kCAAkC,UAAU,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CACnF,CAAC;YACH,CAAC;QACF,CAAC;QAED,IAAI,CAAC;YACJ,wEAAwE;YACxE,mDAAmD;YACnD,eAAe,CAAC,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,eAAe,GACpB,YAAY,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC;YAChF,MAAM,IAAI,KAAK,CACd,6BAA6B,UAAU,eAAe,IAAI,CAAC,EAAE,WAAW,eAAe,MAAM,OAAO,EAAE,EACtG,EAAE,KAAK,EAAE,KAAK,EAAE,CAChB,CAAC;QACH,CAAC;IACF,CAAC;IAED,OAAO,eAAe,CAAC;AACxB,CAAC"}
|
|
@@ -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"}
|