@agent-vm/agent-vm 0.0.56 → 0.0.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/dist/backup/backup-create-operation.d.ts +2 -0
  2. package/dist/backup/backup-create-operation.d.ts.map +1 -1
  3. package/dist/backup/backup-create-operation.js +23 -0
  4. package/dist/backup/backup-create-operation.js.map +1 -1
  5. package/dist/backup/backup-manager.d.ts +2 -0
  6. package/dist/backup/backup-manager.d.ts.map +1 -1
  7. package/dist/backup/backup-manager.js +1 -0
  8. package/dist/backup/backup-manager.js.map +1 -1
  9. package/dist/build/gondolin-image-builder.d.ts +1 -3
  10. package/dist/build/gondolin-image-builder.d.ts.map +1 -1
  11. package/dist/build/gondolin-image-builder.js +1 -9
  12. package/dist/build/gondolin-image-builder.js.map +1 -1
  13. package/dist/build/managed-image-dockerfile.d.ts +33 -3
  14. package/dist/build/managed-image-dockerfile.d.ts.map +1 -1
  15. package/dist/build/managed-image-dockerfile.js +174 -15
  16. package/dist/build/managed-image-dockerfile.js.map +1 -1
  17. package/dist/cli/agent-vm-entrypoint.js +1 -1
  18. package/dist/cli/agent-vm-entrypoint.js.map +1 -1
  19. package/dist/cli/backup-commands.d.ts.map +1 -1
  20. package/dist/cli/backup-commands.js +18 -0
  21. package/dist/cli/backup-commands.js.map +1 -1
  22. package/dist/cli/build-command.d.ts +3 -5
  23. package/dist/cli/build-command.d.ts.map +1 -1
  24. package/dist/cli/build-command.js +39 -15
  25. package/dist/cli/build-command.js.map +1 -1
  26. package/dist/cli/cache-commands.d.ts +1 -1
  27. package/dist/cli/cache-commands.d.ts.map +1 -1
  28. package/dist/cli/cache-commands.js +2 -3
  29. package/dist/cli/cache-commands.js.map +1 -1
  30. package/dist/cli/commands/controller-definition.d.ts +8 -8
  31. package/dist/cli/commands/controller-definition.d.ts.map +1 -1
  32. package/dist/cli/commands/controller-definition.js +1 -1
  33. package/dist/cli/commands/controller-definition.js.map +1 -1
  34. package/dist/cli/commands/create-app.d.ts +120 -46
  35. package/dist/cli/commands/create-app.d.ts.map +1 -1
  36. package/dist/cli/commands/create-app.js +2 -0
  37. package/dist/cli/commands/create-app.js.map +1 -1
  38. package/dist/cli/commands/init-definition.d.ts +4 -2
  39. package/dist/cli/commands/init-definition.d.ts.map +1 -1
  40. package/dist/cli/commands/init-definition.js +24 -1
  41. package/dist/cli/commands/init-definition.js.map +1 -1
  42. package/dist/cli/commands/resources-definition.d.ts +8 -8
  43. package/dist/cli/commands/zone-git-definition.d.ts +67 -0
  44. package/dist/cli/commands/zone-git-definition.d.ts.map +1 -0
  45. package/dist/cli/commands/zone-git-definition.js +46 -0
  46. package/dist/cli/commands/zone-git-definition.js.map +1 -0
  47. package/dist/cli/controller-operation-commands.d.ts.map +1 -1
  48. package/dist/cli/controller-operation-commands.js +20 -23
  49. package/dist/cli/controller-operation-commands.js.map +1 -1
  50. package/dist/cli/init-command.d.ts +2 -1
  51. package/dist/cli/init-command.d.ts.map +1 -1
  52. package/dist/cli/init-command.js +48 -30
  53. package/dist/cli/init-command.js.map +1 -1
  54. package/dist/cli/manual-templates.d.ts.map +1 -1
  55. package/dist/cli/manual-templates.js +76 -16
  56. package/dist/cli/manual-templates.js.map +1 -1
  57. package/dist/cli/run-task.d.ts.map +1 -1
  58. package/dist/cli/run-task.js +4 -1
  59. package/dist/cli/run-task.js.map +1 -1
  60. package/dist/cli/zone-git-commands.d.ts +13 -0
  61. package/dist/cli/zone-git-commands.d.ts.map +1 -0
  62. package/dist/cli/zone-git-commands.js +89 -0
  63. package/dist/cli/zone-git-commands.js.map +1 -0
  64. package/dist/config/system-config.d.ts +8 -1
  65. package/dist/config/system-config.d.ts.map +1 -1
  66. package/dist/config/system-config.js +22 -4
  67. package/dist/config/system-config.js.map +1 -1
  68. package/dist/controller/controller-runtime-types.d.ts +6 -0
  69. package/dist/controller/controller-runtime-types.d.ts.map +1 -1
  70. package/dist/controller/controller-runtime.d.ts.map +1 -1
  71. package/dist/controller/controller-runtime.js +49 -1
  72. package/dist/controller/controller-runtime.js.map +1 -1
  73. package/dist/controller/git-auth-support.d.ts +4 -0
  74. package/dist/controller/git-auth-support.d.ts.map +1 -1
  75. package/dist/controller/git-auth-support.js +17 -0
  76. package/dist/controller/git-auth-support.js.map +1 -1
  77. package/dist/controller/git-push-operations.d.ts.map +1 -1
  78. package/dist/controller/git-push-operations.js +9 -13
  79. package/dist/controller/git-push-operations.js.map +1 -1
  80. package/dist/controller/http/controller-http-route-support.d.ts +6 -1
  81. package/dist/controller/http/controller-http-route-support.d.ts.map +1 -1
  82. package/dist/controller/http/controller-http-route-support.js +1 -1
  83. package/dist/controller/http/controller-http-route-support.js.map +1 -1
  84. package/dist/controller/http/controller-http-routes.d.ts +2 -1
  85. package/dist/controller/http/controller-http-routes.d.ts.map +1 -1
  86. package/dist/controller/http/controller-http-routes.js +11 -5
  87. package/dist/controller/http/controller-http-routes.js.map +1 -1
  88. package/dist/controller/http/controller-request-schemas.d.ts +3 -0
  89. package/dist/controller/http/controller-request-schemas.d.ts.map +1 -1
  90. package/dist/controller/http/controller-request-schemas.js +5 -0
  91. package/dist/controller/http/controller-request-schemas.js.map +1 -1
  92. package/dist/controller/http/controller-zone-operation-routes.d.ts.map +1 -1
  93. package/dist/controller/http/controller-zone-operation-routes.js +54 -1
  94. package/dist/controller/http/controller-zone-operation-routes.js.map +1 -1
  95. package/dist/controller/leases/lease-manager.d.ts +7 -0
  96. package/dist/controller/leases/lease-manager.d.ts.map +1 -1
  97. package/dist/controller/leases/lease-manager.js +15 -0
  98. package/dist/controller/leases/lease-manager.js.map +1 -1
  99. package/dist/controller/leases/lease-work-mount-paths.d.ts +8 -1
  100. package/dist/controller/leases/lease-work-mount-paths.d.ts.map +1 -1
  101. package/dist/controller/leases/lease-work-mount-paths.js +22 -2
  102. package/dist/controller/leases/lease-work-mount-paths.js.map +1 -1
  103. package/dist/controller/zone-git/zone-git-capability-store.d.ts +16 -0
  104. package/dist/controller/zone-git/zone-git-capability-store.d.ts.map +1 -0
  105. package/dist/controller/zone-git/zone-git-capability-store.js +47 -0
  106. package/dist/controller/zone-git/zone-git-capability-store.js.map +1 -0
  107. package/dist/controller/zone-git/zone-git-operation-locks.d.ts +5 -0
  108. package/dist/controller/zone-git/zone-git-operation-locks.d.ts.map +1 -0
  109. package/dist/controller/zone-git/zone-git-operation-locks.js +23 -0
  110. package/dist/controller/zone-git/zone-git-operation-locks.js.map +1 -0
  111. package/dist/controller/zone-git/zone-git-operations.d.ts +50 -0
  112. package/dist/controller/zone-git/zone-git-operations.d.ts.map +1 -0
  113. package/dist/controller/zone-git/zone-git-operations.js +323 -0
  114. package/dist/controller/zone-git/zone-git-operations.js.map +1 -0
  115. package/dist/controller/zone-git/zone-git-paths.d.ts +28 -0
  116. package/dist/controller/zone-git/zone-git-paths.d.ts.map +1 -0
  117. package/dist/controller/zone-git/zone-git-paths.js +17 -0
  118. package/dist/controller/zone-git/zone-git-paths.js.map +1 -0
  119. package/dist/controller/zone-runtimes/openclaw-zone-runtime.d.ts.map +1 -1
  120. package/dist/controller/zone-runtimes/openclaw-zone-runtime.js +10 -1
  121. package/dist/controller/zone-runtimes/openclaw-zone-runtime.js.map +1 -1
  122. package/dist/controller/zone-runtimes/zone-runtime-types.d.ts +2 -0
  123. package/dist/controller/zone-runtimes/zone-runtime-types.d.ts.map +1 -1
  124. package/dist/gateway/gateway-image-builder.d.ts +0 -1
  125. package/dist/gateway/gateway-image-builder.d.ts.map +1 -1
  126. package/dist/gateway/gateway-image-builder.js +0 -3
  127. package/dist/gateway/gateway-image-builder.js.map +1 -1
  128. package/dist/gateway/gateway-zone-orchestrator.d.ts.map +1 -1
  129. package/dist/gateway/gateway-zone-orchestrator.js +16 -2
  130. package/dist/gateway/gateway-zone-orchestrator.js.map +1 -1
  131. package/dist/gateway/gateway-zone-support.d.ts +2 -1
  132. package/dist/gateway/gateway-zone-support.d.ts.map +1 -1
  133. package/dist/gateway/gateway-zone-support.js.map +1 -1
  134. package/dist/gateway-api-client/gateway-api-client.d.ts +1 -0
  135. package/dist/gateway-api-client/gateway-api-client.d.ts.map +1 -1
  136. package/dist/gateway-api-client/gateway-api-client.js +2 -1
  137. package/dist/gateway-api-client/gateway-api-client.js.map +1 -1
  138. package/dist/integration-tests/smoke-harness.d.ts +59 -0
  139. package/dist/integration-tests/smoke-harness.d.ts.map +1 -0
  140. package/dist/integration-tests/smoke-harness.js +244 -0
  141. package/dist/integration-tests/smoke-harness.js.map +1 -0
  142. package/dist/operations/config-validation.d.ts.map +1 -1
  143. package/dist/operations/config-validation.js +4 -28
  144. package/dist/operations/config-validation.js.map +1 -1
  145. package/dist/operations/destroy-zone.d.ts.map +1 -1
  146. package/dist/operations/destroy-zone.js +4 -0
  147. package/dist/operations/destroy-zone.js.map +1 -1
  148. package/dist/operations/doctor.d.ts.map +1 -1
  149. package/dist/operations/doctor.js +26 -23
  150. package/dist/operations/doctor.js.map +1 -1
  151. package/dist/operations/openclaw-deployment-doctor.d.ts +5 -0
  152. package/dist/operations/openclaw-deployment-doctor.d.ts.map +1 -1
  153. package/dist/operations/openclaw-deployment-doctor.js +63 -8
  154. package/dist/operations/openclaw-deployment-doctor.js.map +1 -1
  155. package/dist/operations/runtime-config-paths.d.ts +2 -0
  156. package/dist/operations/runtime-config-paths.d.ts.map +1 -1
  157. package/dist/operations/runtime-config-paths.js +13 -0
  158. package/dist/operations/runtime-config-paths.js.map +1 -1
  159. package/dist/operations/zone-git-doctor.d.ts +7 -0
  160. package/dist/operations/zone-git-doctor.d.ts.map +1 -0
  161. package/dist/operations/zone-git-doctor.js +94 -0
  162. package/dist/operations/zone-git-doctor.js.map +1 -0
  163. package/dist/tool-vm/tool-vm-lifecycle.d.ts +2 -1
  164. package/dist/tool-vm/tool-vm-lifecycle.d.ts.map +1 -1
  165. package/dist/tool-vm/tool-vm-lifecycle.js +86 -23
  166. package/dist/tool-vm/tool-vm-lifecycle.js.map +1 -1
  167. package/managed-images.json +1 -2
  168. package/package.json +12 -12
  169. package/dist/config/system-cache-identifier.d.ts +0 -19
  170. package/dist/config/system-cache-identifier.d.ts.map +0 -1
  171. package/dist/config/system-cache-identifier.js +0 -67
  172. package/dist/config/system-cache-identifier.js.map +0 -1
@@ -1,8 +1,16 @@
1
+ import { realpath } from 'node:fs/promises';
1
2
  import path from 'node:path';
2
3
  import { buildToolSessionLabel } from '@agent-vm/gateway-interface';
3
4
  import { closePinnedRealFsRoot as closePinnedRealFsRootDefault, createManagedVm as createManagedVmFromCore, pinRealFsRoot as pinRealFsRootDefault, } from '@agent-vm/gondolin-adapter';
4
5
  import { buildGondolinImage as buildGondolinImageDefault } from '../build/gondolin-image-builder.js';
5
6
  import { validateResolvedToolWorkMountDir as validateResolvedToolWorkMountDirDefault } from '../controller/leases/lease-work-mount-paths.js';
7
+ import { OPENCLAW_ZONE_FILES_GUEST_ROOT, OPENCLAW_ZONE_GIT_GUEST_ROOT, resolveZoneGitPaths, } from '../controller/zone-git/zone-git-paths.js';
8
+ async function configureZoneGitToolVm(toolVm) {
9
+ const result = await toolVm.exec(`git config --global --add safe.directory ${OPENCLAW_ZONE_FILES_GUEST_ROOT}`);
10
+ if (result.exitCode !== 0) {
11
+ throw new Error(`Failed to configure Tool VM Git safe.directory for ${OPENCLAW_ZONE_FILES_GUEST_ROOT}: ${result.stderr || result.stdout}`);
12
+ }
13
+ }
6
14
  export async function createToolVm(options, dependencies = {}) {
7
15
  const buildGondolinImage = dependencies.buildGondolinImage ?? buildGondolinImageDefault;
8
16
  const createManagedVm = dependencies.createManagedVm ?? createManagedVmFromCore;
@@ -24,7 +32,6 @@ export async function createToolVm(options, dependencies = {}) {
24
32
  });
25
33
  const toolImage = await buildGondolinImage({
26
34
  buildConfigPath: toolImageProfile.buildConfig,
27
- systemCacheIdentifierPath: options.systemConfig.systemCacheIdentifierPath,
28
35
  cacheDir: path.join(options.cacheDir, 'tool-vm-images', options.profile.imageProfile),
29
36
  });
30
37
  // Internal createToolVm callers bypass the /lease route; validate and pin
@@ -33,33 +40,89 @@ export async function createToolVm(options, dependencies = {}) {
33
40
  hostWorkMountDir: options.hostWorkMountDir,
34
41
  zone,
35
42
  });
36
- const pinnedWorkMountRoot = pinRealFsRoot(hostWorkMountDirectory);
43
+ const pinnedRoots = [];
44
+ const pinRoot = (hostPath) => {
45
+ const pinnedRoot = pinRealFsRoot(hostPath);
46
+ pinnedRoots.push(pinnedRoot);
47
+ return pinnedRoot;
48
+ };
49
+ let toolVm;
37
50
  try {
38
- await validateResolvedToolWorkMountDir({
39
- hostWorkMountDir: pinnedWorkMountRoot.realPath,
40
- zone,
51
+ let vfsMounts;
52
+ if (options.zoneGitMount) {
53
+ const hostZoneFilesDirectory = await validateResolvedToolWorkMountDir({
54
+ hostWorkMountDir: options.zoneGitMount.hostZoneFilesDir,
55
+ zone,
56
+ });
57
+ const hostZoneGitRoot = await realpath(options.zoneGitMount.hostZoneGitRoot);
58
+ const expectedZoneGitRoot = await realpath(resolveZoneGitPaths({
59
+ runtimeDir: options.systemConfig.runtimeDir,
60
+ zoneId: options.zoneId,
61
+ }).hostZoneGitRoot);
62
+ if (hostZoneGitRoot !== expectedZoneGitRoot) {
63
+ throw new Error(`Zone Git root '${hostZoneGitRoot}' does not match expected runtime path '${expectedZoneGitRoot}' for zone '${options.zoneId}'.`);
64
+ }
65
+ const pinnedZoneFilesRoot = pinRoot(hostZoneFilesDirectory);
66
+ const pinnedZoneGitRoot = pinRoot(hostZoneGitRoot);
67
+ await validateResolvedToolWorkMountDir({
68
+ hostWorkMountDir: pinnedZoneFilesRoot.realPath,
69
+ zone,
70
+ });
71
+ vfsMounts = {
72
+ [OPENCLAW_ZONE_GIT_GUEST_ROOT]: {
73
+ hostPath: hostZoneGitRoot,
74
+ kind: 'realfs',
75
+ pinnedHostRoot: pinnedZoneGitRoot,
76
+ },
77
+ [OPENCLAW_ZONE_FILES_GUEST_ROOT]: {
78
+ hostPath: hostZoneFilesDirectory,
79
+ kind: 'realfs',
80
+ pinnedHostRoot: pinnedZoneFilesRoot,
81
+ },
82
+ };
83
+ }
84
+ else {
85
+ const pinnedWorkMountRoot = pinRoot(hostWorkMountDirectory);
86
+ await validateResolvedToolWorkMountDir({
87
+ hostWorkMountDir: pinnedWorkMountRoot.realPath,
88
+ zone,
89
+ });
90
+ vfsMounts = {
91
+ '/work': {
92
+ hostPath: hostWorkMountDirectory,
93
+ kind: 'realfs',
94
+ pinnedHostRoot: pinnedWorkMountRoot,
95
+ },
96
+ };
97
+ }
98
+ toolVm = await createManagedVm({
99
+ allowedHosts: [],
100
+ cpus: options.profile.cpus,
101
+ imagePath: toolImage.imagePath,
102
+ memory: options.profile.memory,
103
+ rootfsMode: 'memory',
104
+ sessionLabel: buildToolSessionLabel(options.systemConfig.host.projectNamespace, options.zoneId, options.tcpSlot),
105
+ secrets: {},
106
+ vfsMounts,
41
107
  });
108
+ if (options.zoneGitMount) {
109
+ await configureZoneGitToolVm(toolVm);
110
+ }
111
+ return toolVm;
42
112
  }
43
113
  catch (error) {
44
- closePinnedRealFsRoot(pinnedWorkMountRoot);
114
+ if (toolVm) {
115
+ try {
116
+ await toolVm.close();
117
+ }
118
+ catch (closeError) {
119
+ process.stderr.write(`Failed to close Tool VM after create failure: ${closeError instanceof Error ? closeError.message : String(closeError)}\n`);
120
+ }
121
+ }
122
+ for (const pinnedRoot of pinnedRoots) {
123
+ closePinnedRealFsRoot(pinnedRoot);
124
+ }
45
125
  throw error;
46
126
  }
47
- const toolVm = await createManagedVm({
48
- allowedHosts: [],
49
- cpus: options.profile.cpus,
50
- imagePath: toolImage.imagePath,
51
- memory: options.profile.memory,
52
- rootfsMode: 'memory',
53
- sessionLabel: buildToolSessionLabel(options.systemConfig.host.projectNamespace, options.zoneId, options.tcpSlot),
54
- secrets: {},
55
- vfsMounts: {
56
- '/work': {
57
- hostPath: hostWorkMountDirectory,
58
- kind: 'realfs',
59
- pinnedHostRoot: pinnedWorkMountRoot,
60
- },
61
- },
62
- });
63
- return toolVm;
64
127
  }
65
128
  //# sourceMappingURL=tool-vm-lifecycle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-vm-lifecycle.js","sourceRoot":"","sources":["../../src/tool-vm/tool-vm-lifecycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-vm-lifecycle.js","sourceRoot":"","sources":["../../src/tool-vm/tool-vm-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,5 @@
14
14
  "tag": "2026.05.07.1"
15
15
  }
16
16
  },
17
- "openClawVersion": "2026.5.2",
18
- "openClawAgentVmPluginVersion": "0.0.56"
17
+ "openClawVersion": "2026.5.7"
19
18
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-vm/agent-vm",
3
- "version": "0.0.56",
3
+ "version": "0.0.58",
4
4
  "description": "Controller CLI and HTTP server for sandboxed VM coding agents.",
5
5
  "homepage": "https://github.com/ShravanSunder/agent-vm#readme",
6
6
  "bugs": {
@@ -33,19 +33,19 @@
33
33
  "access": "public"
34
34
  },
35
35
  "dependencies": {
36
- "@hono/node-server": "^1.19.14",
37
- "cmd-ts": "^0.14.0",
38
- "execa": "^9.5.2",
39
- "hono": "^4.12.16",
36
+ "@hono/node-server": "^2.0.2",
37
+ "cmd-ts": "^0.15.0",
38
+ "execa": "^9.6.1",
39
+ "hono": "^4.12.18",
40
40
  "jsonc-parser": "^3.3.1",
41
41
  "tasuku": "^2.3.0",
42
- "zod": "^4",
43
- "@agent-vm/agent-vm-worker": "0.0.56",
44
- "@agent-vm/gondolin-adapter": "0.0.56",
45
- "@agent-vm/gateway-interface": "0.0.56",
46
- "@agent-vm/openclaw-agent-vm-plugin": "0.0.56",
47
- "@agent-vm/worker-gateway": "0.0.56",
48
- "@agent-vm/openclaw-gateway": "0.0.56"
42
+ "zod": "^4.4.3",
43
+ "@agent-vm/agent-vm-worker": "0.0.58",
44
+ "@agent-vm/gondolin-adapter": "0.0.58",
45
+ "@agent-vm/openclaw-gateway": "0.0.58",
46
+ "@agent-vm/gateway-interface": "0.0.58",
47
+ "@agent-vm/worker-gateway": "0.0.58",
48
+ "@agent-vm/openclaw-agent-vm-plugin": "0.0.58"
49
49
  },
50
50
  "scripts": {
51
51
  "build": "rm -rf dist && tsc -p tsconfig.build.json",
@@ -1,19 +0,0 @@
1
- export declare const SYSTEM_CACHE_IDENTIFIER_FILENAME = "systemCacheIdentifier.json";
2
- export interface LoadSystemCacheIdentifierOptions {
3
- readonly filePath: string;
4
- }
5
- export interface SystemCacheIdentifierPlatformDependencies {
6
- readonly hostSystemType?: HostSystemType;
7
- readonly imageCacheFormat?: string;
8
- }
9
- export type HostSystemType = 'bare-metal' | 'container';
10
- export interface DefaultSystemCacheIdentifier {
11
- readonly $comment: string;
12
- readonly schemaVersion: 1;
13
- readonly hostSystemType: HostSystemType;
14
- readonly imageCacheFormat: string;
15
- }
16
- export declare function resolveSystemCacheIdentifierPath(systemConfigPath: string): string;
17
- export declare function buildDefaultSystemCacheIdentifier(dependencies?: SystemCacheIdentifierPlatformDependencies): DefaultSystemCacheIdentifier;
18
- export declare function loadSystemCacheIdentifier(options: LoadSystemCacheIdentifierOptions): Promise<Record<string, unknown>>;
19
- //# sourceMappingURL=system-cache-identifier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"system-cache-identifier.d.ts","sourceRoot":"","sources":["../../src/config/system-cache-identifier.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,gCAAgC,+BAA+B,CAAC;AAE7E,MAAM,WAAW,gCAAgC;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,yCAAyC;IACzD,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,WAAW,CAAC;AAExD,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CAClC;AAuBD,wBAAgB,gCAAgC,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED,wBAAgB,iCAAiC,CAChD,YAAY,GAAE,yCAA8C,GAC1D,4BAA4B,CAO9B;AAED,wBAAsB,yBAAyB,CAC9C,OAAO,EAAE,gCAAgC,GACvC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA6ClC"}
@@ -1,67 +0,0 @@
1
- import fs from 'node:fs/promises';
2
- import path from 'node:path';
3
- import { z } from 'zod';
4
- export const SYSTEM_CACHE_IDENTIFIER_FILENAME = 'systemCacheIdentifier.json';
5
- const systemCacheIdentifierComment = 'Cache compatibility identifier. Contents hash into Gondolin image fingerprints. Change imageCacheFormat when the image cache contract changes.';
6
- const legacySystemCacheIdentifierSchema = z.object({}).passthrough();
7
- const systemCacheIdentifierV1Schema = z
8
- .object({
9
- $comment: z.string(),
10
- schemaVersion: z.literal(1),
11
- hostSystemType: z.enum(['bare-metal', 'container']),
12
- imageCacheFormat: z.string().min(1),
13
- })
14
- .strict();
15
- function getErrorMessage(error) {
16
- return error instanceof Error ? error.message : String(error);
17
- }
18
- function isMissingFileError(error) {
19
- return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT';
20
- }
21
- export function resolveSystemCacheIdentifierPath(systemConfigPath) {
22
- return path.join(path.dirname(path.resolve(systemConfigPath)), SYSTEM_CACHE_IDENTIFIER_FILENAME);
23
- }
24
- export function buildDefaultSystemCacheIdentifier(dependencies = {}) {
25
- return {
26
- $comment: systemCacheIdentifierComment,
27
- schemaVersion: 1,
28
- hostSystemType: dependencies.hostSystemType ?? 'bare-metal',
29
- imageCacheFormat: dependencies.imageCacheFormat ?? 'gondolin-image-cache-v1',
30
- };
31
- }
32
- export async function loadSystemCacheIdentifier(options) {
33
- let rawContents;
34
- try {
35
- rawContents = await fs.readFile(options.filePath, 'utf8');
36
- }
37
- catch (error) {
38
- if (isMissingFileError(error)) {
39
- throw new Error(`Missing system cache identifier '${options.filePath}'.`, { cause: error });
40
- }
41
- throw new Error(`Failed to read system cache identifier '${options.filePath}': ${getErrorMessage(error)}`, { cause: error });
42
- }
43
- let parsedContents;
44
- try {
45
- parsedContents = JSON.parse(rawContents);
46
- }
47
- catch (error) {
48
- throw new Error(`Failed to parse system cache identifier '${options.filePath}': ${getErrorMessage(error)}`, { cause: error });
49
- }
50
- const legacyResult = legacySystemCacheIdentifierSchema.safeParse(parsedContents);
51
- if (!legacyResult.success) {
52
- throw new Error(`Invalid system cache identifier '${options.filePath}': expected JSON object.`, {
53
- cause: legacyResult.error,
54
- });
55
- }
56
- if (!('schemaVersion' in legacyResult.data)) {
57
- return legacyResult.data;
58
- }
59
- const v1Result = systemCacheIdentifierV1Schema.safeParse(legacyResult.data);
60
- if (!v1Result.success) {
61
- throw new Error(`Invalid system cache identifier '${options.filePath}': v1 schema mismatch.`, {
62
- cause: v1Result.error,
63
- });
64
- }
65
- return v1Result.data;
66
- }
67
- //# sourceMappingURL=system-cache-identifier.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"system-cache-identifier.js","sourceRoot":"","sources":["../../src/config/system-cache-identifier.ts"],"names":[],"mappings":"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"}