@agent-vm/agent-vm 0.0.31 → 0.0.32

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 (144) hide show
  1. package/dist/backup/backup-create-operation.d.ts +3 -1
  2. package/dist/backup/backup-create-operation.d.ts.map +1 -1
  3. package/dist/backup/backup-create-operation.js +49 -14
  4. package/dist/backup/backup-create-operation.js.map +1 -1
  5. package/dist/backup/backup-manager.d.ts +8 -6
  6. package/dist/backup/backup-manager.d.ts.map +1 -1
  7. package/dist/backup/backup-manager.js +7 -5
  8. package/dist/backup/backup-manager.js.map +1 -1
  9. package/dist/backup/backup-restore-operation.d.ts +1 -1
  10. package/dist/backup/backup-restore-operation.d.ts.map +1 -1
  11. package/dist/backup/backup-restore-operation.js +13 -9
  12. package/dist/backup/backup-restore-operation.js.map +1 -1
  13. package/dist/build/docker-image-builder.d.ts.map +1 -1
  14. package/dist/build/docker-image-builder.js +12 -6
  15. package/dist/build/docker-image-builder.js.map +1 -1
  16. package/dist/cli/backup-commands.d.ts.map +1 -1
  17. package/dist/cli/backup-commands.js +4 -2
  18. package/dist/cli/backup-commands.js.map +1 -1
  19. package/dist/cli/commands/controller-definition.d.ts +86 -68
  20. package/dist/cli/commands/controller-definition.d.ts.map +1 -1
  21. package/dist/cli/commands/controller-definition.js +20 -0
  22. package/dist/cli/commands/controller-definition.js.map +1 -1
  23. package/dist/cli/commands/create-app.d.ts +86 -68
  24. package/dist/cli/commands/create-app.d.ts.map +1 -1
  25. package/dist/cli/commands/init-definition.d.ts.map +1 -1
  26. package/dist/cli/commands/init-definition.js +3 -1
  27. package/dist/cli/commands/init-definition.js.map +1 -1
  28. package/dist/cli/commands/paths-definition.d.ts.map +1 -1
  29. package/dist/cli/commands/paths-definition.js +9 -4
  30. package/dist/cli/commands/paths-definition.js.map +1 -1
  31. package/dist/cli/controller-operation-commands.d.ts.map +1 -1
  32. package/dist/cli/controller-operation-commands.js +70 -11
  33. package/dist/cli/controller-operation-commands.js.map +1 -1
  34. package/dist/cli/init-command.d.ts.map +1 -1
  35. package/dist/cli/init-command.js +45 -28
  36. package/dist/cli/init-command.js.map +1 -1
  37. package/dist/cli/lease-commands.d.ts.map +1 -1
  38. package/dist/cli/lease-commands.js +8 -0
  39. package/dist/cli/lease-commands.js.map +1 -1
  40. package/dist/cli/run-task.js +1 -1
  41. package/dist/cli/vm-host-system-templates.d.ts +1 -0
  42. package/dist/cli/vm-host-system-templates.d.ts.map +1 -1
  43. package/dist/cli/vm-host-system-templates.js +2 -2
  44. package/dist/cli/vm-host-system-templates.js.map +1 -1
  45. package/dist/config/system-config.d.ts +22 -9
  46. package/dist/config/system-config.d.ts.map +1 -1
  47. package/dist/config/system-config.js +72 -14
  48. package/dist/config/system-config.js.map +1 -1
  49. package/dist/controller/active-task-registry.d.ts +14 -2
  50. package/dist/controller/active-task-registry.d.ts.map +1 -1
  51. package/dist/controller/active-task-registry.js +14 -0
  52. package/dist/controller/active-task-registry.js.map +1 -1
  53. package/dist/controller/controller-runtime.d.ts.map +1 -1
  54. package/dist/controller/controller-runtime.js +27 -8
  55. package/dist/controller/controller-runtime.js.map +1 -1
  56. package/dist/controller/git-pull-default-operations.d.ts +101 -9
  57. package/dist/controller/git-pull-default-operations.d.ts.map +1 -1
  58. package/dist/controller/git-pull-default-operations.js +405 -68
  59. package/dist/controller/git-pull-default-operations.js.map +1 -1
  60. package/dist/controller/git-push-operations.d.ts +2 -0
  61. package/dist/controller/git-push-operations.d.ts.map +1 -1
  62. package/dist/controller/git-push-operations.js +267 -76
  63. package/dist/controller/git-push-operations.js.map +1 -1
  64. package/dist/controller/git-retry-support.d.ts +21 -0
  65. package/dist/controller/git-retry-support.d.ts.map +1 -0
  66. package/dist/controller/git-retry-support.js +60 -0
  67. package/dist/controller/git-retry-support.js.map +1 -0
  68. package/dist/controller/http/controller-client.d.ts +2 -0
  69. package/dist/controller/http/controller-client.d.ts.map +1 -1
  70. package/dist/controller/http/controller-client.js +13 -0
  71. package/dist/controller/http/controller-client.js.map +1 -1
  72. package/dist/controller/http/controller-http-route-support.d.ts +7 -2
  73. package/dist/controller/http/controller-http-route-support.d.ts.map +1 -1
  74. package/dist/controller/http/controller-http-route-support.js +17 -1
  75. package/dist/controller/http/controller-http-route-support.js.map +1 -1
  76. package/dist/controller/http/controller-http-routes.d.ts +4 -1
  77. package/dist/controller/http/controller-http-routes.d.ts.map +1 -1
  78. package/dist/controller/http/controller-http-routes.js +33 -6
  79. package/dist/controller/http/controller-http-routes.js.map +1 -1
  80. package/dist/controller/http/controller-lease-response-types.d.ts +17 -0
  81. package/dist/controller/http/controller-lease-response-types.d.ts.map +1 -0
  82. package/dist/controller/http/controller-lease-response-types.js +16 -0
  83. package/dist/controller/http/controller-lease-response-types.js.map +1 -0
  84. package/dist/controller/http/controller-request-schemas.d.ts +84 -13
  85. package/dist/controller/http/controller-request-schemas.d.ts.map +1 -1
  86. package/dist/controller/http/controller-request-schemas.js +110 -9
  87. package/dist/controller/http/controller-request-schemas.js.map +1 -1
  88. package/dist/controller/http/controller-zone-operation-routes.d.ts.map +1 -1
  89. package/dist/controller/http/controller-zone-operation-routes.js +10 -3
  90. package/dist/controller/http/controller-zone-operation-routes.js.map +1 -1
  91. package/dist/controller/leases/idle-reaper.d.ts +3 -1
  92. package/dist/controller/leases/idle-reaper.d.ts.map +1 -1
  93. package/dist/controller/leases/idle-reaper.js +3 -2
  94. package/dist/controller/leases/idle-reaper.js.map +1 -1
  95. package/dist/controller/leases/lease-manager.d.ts +18 -9
  96. package/dist/controller/leases/lease-manager.d.ts.map +1 -1
  97. package/dist/controller/leases/lease-manager.js +155 -57
  98. package/dist/controller/leases/lease-manager.js.map +1 -1
  99. package/dist/controller/leases/lease-workspace-paths.d.ts +14 -0
  100. package/dist/controller/leases/lease-workspace-paths.d.ts.map +1 -0
  101. package/dist/controller/leases/lease-workspace-paths.js +104 -0
  102. package/dist/controller/leases/lease-workspace-paths.js.map +1 -0
  103. package/dist/controller/runtime-instructions-builder.d.ts +1 -2
  104. package/dist/controller/runtime-instructions-builder.d.ts.map +1 -1
  105. package/dist/controller/runtime-instructions-builder.js +8 -9
  106. package/dist/controller/runtime-instructions-builder.js.map +1 -1
  107. package/dist/controller/task-config-builder.d.ts +2 -1
  108. package/dist/controller/task-config-builder.d.ts.map +1 -1
  109. package/dist/controller/task-config-builder.js +2 -1
  110. package/dist/controller/task-config-builder.js.map +1 -1
  111. package/dist/controller/worker-task-runner.d.ts +10 -4
  112. package/dist/controller/worker-task-runner.d.ts.map +1 -1
  113. package/dist/controller/worker-task-runner.js +147 -44
  114. package/dist/controller/worker-task-runner.js.map +1 -1
  115. package/dist/gateway/gateway-zone-orchestrator.d.ts.map +1 -1
  116. package/dist/gateway/gateway-zone-orchestrator.js +4 -2
  117. package/dist/gateway/gateway-zone-orchestrator.js.map +1 -1
  118. package/dist/gateway/gateway-zone-support.d.ts.map +1 -1
  119. package/dist/gateway/gateway-zone-support.js +18 -10
  120. package/dist/gateway/gateway-zone-support.js.map +1 -1
  121. package/dist/operations/config-validation.d.ts +1 -0
  122. package/dist/operations/config-validation.d.ts.map +1 -1
  123. package/dist/operations/config-validation.js +7 -3
  124. package/dist/operations/config-validation.js.map +1 -1
  125. package/dist/operations/destroy-zone.d.ts.map +1 -1
  126. package/dist/operations/destroy-zone.js +8 -1
  127. package/dist/operations/destroy-zone.js.map +1 -1
  128. package/dist/operations/doctor.d.ts +4 -0
  129. package/dist/operations/doctor.d.ts.map +1 -1
  130. package/dist/operations/doctor.js +127 -4
  131. package/dist/operations/doctor.js.map +1 -1
  132. package/dist/operations/runtime-config-paths.d.ts +4 -0
  133. package/dist/operations/runtime-config-paths.d.ts.map +1 -0
  134. package/dist/operations/runtime-config-paths.js +6 -0
  135. package/dist/operations/runtime-config-paths.js.map +1 -0
  136. package/dist/perf/gondolin-vfs-benchmark-support.d.ts +28 -0
  137. package/dist/perf/gondolin-vfs-benchmark-support.d.ts.map +1 -0
  138. package/dist/perf/gondolin-vfs-benchmark-support.js +50 -0
  139. package/dist/perf/gondolin-vfs-benchmark-support.js.map +1 -0
  140. package/dist/tool-vm/tool-vm-lifecycle.d.ts +5 -7
  141. package/dist/tool-vm/tool-vm-lifecycle.d.ts.map +1 -1
  142. package/dist/tool-vm/tool-vm-lifecycle.js +32 -27
  143. package/dist/tool-vm/tool-vm-lifecycle.js.map +1 -1
  144. package/package.json +7 -7
@@ -0,0 +1,50 @@
1
+ export function summarizeBenchmarkSamples(samples) {
2
+ if (samples.length === 0) {
3
+ throw new Error('Cannot summarize benchmark timings without at least one sample.');
4
+ }
5
+ return {
6
+ largeWriteMs: summarizeValues(samples.map((sample) => sample.largeWriteMs)).median,
7
+ largeWriteMsMax: summarizeValues(samples.map((sample) => sample.largeWriteMs)).max,
8
+ largeWriteMsMin: summarizeValues(samples.map((sample) => sample.largeWriteMs)).min,
9
+ smallReadMs: summarizeValues(samples.map((sample) => sample.smallReadMs)).median,
10
+ smallReadMsMax: summarizeValues(samples.map((sample) => sample.smallReadMs)).max,
11
+ smallReadMsMin: summarizeValues(samples.map((sample) => sample.smallReadMs)).min,
12
+ smallWriteMs: summarizeValues(samples.map((sample) => sample.smallWriteMs)).median,
13
+ smallWriteMsMax: summarizeValues(samples.map((sample) => sample.smallWriteMs)).max,
14
+ smallWriteMsMin: summarizeValues(samples.map((sample) => sample.smallWriteMs)).min,
15
+ };
16
+ }
17
+ export function formatDurationRange(props) {
18
+ const median = Math.round(props.median);
19
+ const min = Math.round(props.min);
20
+ const max = Math.round(props.max);
21
+ if (median === min && median === max) {
22
+ return `${median}ms`;
23
+ }
24
+ return `${median}ms median [${min}-${max}ms]`;
25
+ }
26
+ export function assertExpectedMountToken(props) {
27
+ if (props.token === null || props.mountInfo.includes(props.token)) {
28
+ return;
29
+ }
30
+ throw new Error(`Expected mount for '${props.label}' to include '${props.token}', got: ${props.mountInfo}`);
31
+ }
32
+ function summarizeValues(values) {
33
+ if (values.length === 0) {
34
+ throw new Error('Cannot summarize an empty value list.');
35
+ }
36
+ const sortedValues = values.toSorted((left, right) => left - right);
37
+ const medianIndex = Math.floor(sortedValues.length / 2);
38
+ const min = sortedValues[0];
39
+ const median = sortedValues[medianIndex];
40
+ const max = sortedValues[sortedValues.length - 1];
41
+ if (min === undefined || median === undefined || max === undefined) {
42
+ throw new Error('Cannot summarize an empty value list.');
43
+ }
44
+ return {
45
+ max,
46
+ median,
47
+ min,
48
+ };
49
+ }
50
+ //# sourceMappingURL=gondolin-vfs-benchmark-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gondolin-vfs-benchmark-support.js","sourceRoot":"","sources":["../../src/perf/gondolin-vfs-benchmark-support.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import { createManagedVm as createManagedVmFromCore, type ManagedVm } from '@agent-vm/gondolin-adapter';
1
+ import { createManagedVm as createManagedVmFromCore, type ManagedVm, type PinnedRealFsRoot } from '@agent-vm/gondolin-adapter';
2
2
  import { buildGondolinImage as buildGondolinImageDefault } from '../build/gondolin-image-builder.js';
3
3
  import type { LoadedSystemConfig } from '../config/system-config.js';
4
4
  import type { ToolProfile } from '../controller/leases/lease-manager.js';
5
+ import { validateResolvedToolWorkspaceDir as validateResolvedToolWorkspaceDirDefault } from '../controller/leases/lease-workspace-paths.js';
5
6
  export interface ToolVmLifecycleDependencies {
6
7
  readonly buildGondolinImage?: (options: {
7
8
  readonly buildConfigPath: string;
@@ -10,13 +11,10 @@ export interface ToolVmLifecycleDependencies {
10
11
  readonly fullReset?: boolean;
11
12
  }) => ReturnType<typeof buildGondolinImageDefault>;
12
13
  readonly createManagedVm?: typeof createManagedVmFromCore;
14
+ readonly closePinnedRealFsRoot?: (root: PinnedRealFsRoot) => void;
15
+ readonly pinRealFsRoot?: (hostPath: string) => PinnedRealFsRoot;
16
+ readonly validateResolvedToolWorkspaceDir?: typeof validateResolvedToolWorkspaceDirDefault;
13
17
  }
14
- export declare function resolveToolVmWorkspaceDirectory(options: {
15
- readonly profile: ToolProfile;
16
- readonly tcpSlot: number;
17
- readonly zoneId: string;
18
- }): string;
19
- export declare function cleanToolVmWorkspace(workspaceDirectory: string): Promise<void>;
20
18
  export declare function createToolVm(options: {
21
19
  readonly cacheDir: string;
22
20
  readonly profile: ToolProfile;
@@ -1 +1 @@
1
- {"version":3,"file":"tool-vm-lifecycle.d.ts","sourceRoot":"","sources":["../../src/tool-vm/tool-vm-lifecycle.ts"],"names":[],"mappings":"AAIA,OAAO,EACN,eAAe,IAAI,uBAAuB,EAC1C,KAAK,SAAS,EACd,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,kBAAkB,IAAI,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACrG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAEzE,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE;QACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;QACjC,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;QAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;KAC7B,KAAK,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;IACnD,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,uBAAuB,CAAC;CAC1D;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE;IACxD,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB,GAAG,MAAM,CAET;AAED,wBAAsB,oBAAoB,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAepF;AAED,wBAAsB,YAAY,CACjC,OAAO,EAAE;IACR,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB,EACD,YAAY,GAAE,2BAAgC,GAC5C,OAAO,CAAC,SAAS,CAAC,CAyCpB"}
1
+ {"version":3,"file":"tool-vm-lifecycle.d.ts","sourceRoot":"","sources":["../../src/tool-vm/tool-vm-lifecycle.ts"],"names":[],"mappings":"AAGA,OAAO,EAEN,eAAe,IAAI,uBAAuB,EAE1C,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,kBAAkB,IAAI,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACrG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,gCAAgC,IAAI,uCAAuC,EAAE,MAAM,+CAA+C,CAAC;AAE5I,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE;QACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;QACjC,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;QAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;KAC7B,KAAK,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;IACnD,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,uBAAuB,CAAC;IAC1D,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAClE,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,gBAAgB,CAAC;IAChE,QAAQ,CAAC,gCAAgC,CAAC,EAAE,OAAO,uCAAuC,CAAC;CAC3F;AAED,wBAAsB,YAAY,CACjC,OAAO,EAAE;IACR,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB,EACD,YAAY,GAAE,2BAAgC,GAC5C,OAAO,CAAC,SAAS,CAAC,CAkEpB"}
@@ -1,45 +1,49 @@
1
- import fs from 'node:fs/promises';
2
1
  import path from 'node:path';
3
2
  import { buildToolSessionLabel } from '@agent-vm/gateway-interface';
4
- import { createManagedVm as createManagedVmFromCore, } from '@agent-vm/gondolin-adapter';
3
+ import { closePinnedRealFsRoot as closePinnedRealFsRootDefault, createManagedVm as createManagedVmFromCore, pinRealFsRoot as pinRealFsRootDefault, } from '@agent-vm/gondolin-adapter';
5
4
  import { buildGondolinImage as buildGondolinImageDefault } from '../build/gondolin-image-builder.js';
6
- export function resolveToolVmWorkspaceDirectory(options) {
7
- return path.resolve(options.profile.workspaceRoot, `${options.zoneId}-${options.tcpSlot}`);
8
- }
9
- export async function cleanToolVmWorkspace(workspaceDirectory) {
10
- let entryNames;
11
- try {
12
- entryNames = await fs.readdir(workspaceDirectory);
13
- }
14
- catch {
15
- return;
16
- }
17
- for (const entryName of entryNames) {
18
- // oxlint-disable-next-line eslint/no-await-in-loop -- cleanup must be deterministic per entry
19
- await fs.rm(path.join(workspaceDirectory, entryName), {
20
- force: true,
21
- recursive: true,
22
- });
23
- }
24
- }
5
+ import { validateResolvedToolWorkspaceDir as validateResolvedToolWorkspaceDirDefault } from '../controller/leases/lease-workspace-paths.js';
25
6
  export async function createToolVm(options, dependencies = {}) {
26
7
  const buildGondolinImage = dependencies.buildGondolinImage ?? buildGondolinImageDefault;
27
8
  const createManagedVm = dependencies.createManagedVm ?? createManagedVmFromCore;
9
+ const closePinnedRealFsRoot = dependencies.closePinnedRealFsRoot ?? closePinnedRealFsRootDefault;
10
+ const pinRealFsRoot = dependencies.pinRealFsRoot ?? pinRealFsRootDefault;
11
+ const validateResolvedToolWorkspaceDir = dependencies.validateResolvedToolWorkspaceDir ?? validateResolvedToolWorkspaceDirDefault;
12
+ const zone = options.systemConfig.zones.find((configuredZone) => configuredZone.id === options.zoneId);
13
+ if (!zone) {
14
+ throw new Error(`Zone '${options.zoneId}' is not configured.`);
15
+ }
28
16
  const toolImageProfile = options.systemConfig.imageProfiles.toolVms[options.profile.imageProfile];
29
17
  if (!toolImageProfile) {
30
18
  throw new Error(`Tool VM image profile '${options.profile.imageProfile}' is not configured.`);
31
19
  }
20
+ // Fail bad lease paths before doing any expensive image work.
21
+ await validateResolvedToolWorkspaceDir({
22
+ workspaceDir: options.workspaceDir,
23
+ zone,
24
+ });
32
25
  const toolImage = await buildGondolinImage({
33
26
  buildConfigPath: toolImageProfile.buildConfig,
34
27
  systemCacheIdentifierPath: options.systemConfig.systemCacheIdentifierPath,
35
28
  cacheDir: path.join(options.cacheDir, 'tool-vm-images', options.profile.imageProfile),
36
29
  });
37
- const hostWorkspaceDirectory = resolveToolVmWorkspaceDirectory({
38
- profile: options.profile,
39
- tcpSlot: options.tcpSlot,
40
- zoneId: options.zoneId,
30
+ // Internal createToolVm callers bypass the /lease route; validate and pin
31
+ // immediately before handing the RealFS root to the VM adapter.
32
+ const hostWorkspaceDirectory = await validateResolvedToolWorkspaceDir({
33
+ workspaceDir: options.workspaceDir,
34
+ zone,
41
35
  });
42
- await fs.mkdir(hostWorkspaceDirectory, { recursive: true });
36
+ const pinnedWorkspaceRoot = pinRealFsRoot(hostWorkspaceDirectory);
37
+ try {
38
+ await validateResolvedToolWorkspaceDir({
39
+ workspaceDir: pinnedWorkspaceRoot.realPath,
40
+ zone,
41
+ });
42
+ }
43
+ catch (error) {
44
+ closePinnedRealFsRoot(pinnedWorkspaceRoot);
45
+ throw error;
46
+ }
43
47
  const toolVm = await createManagedVm({
44
48
  allowedHosts: [],
45
49
  cpus: options.profile.cpus,
@@ -49,9 +53,10 @@ export async function createToolVm(options, dependencies = {}) {
49
53
  sessionLabel: buildToolSessionLabel(options.systemConfig.host.projectNamespace, options.zoneId, options.tcpSlot),
50
54
  secrets: {},
51
55
  vfsMounts: {
52
- '/workspace': {
56
+ '/work': {
53
57
  hostPath: hostWorkspaceDirectory,
54
58
  kind: 'realfs',
59
+ pinnedHostRoot: pinnedWorkspaceRoot,
55
60
  },
56
61
  },
57
62
  });
@@ -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":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EACN,qBAAqB,IAAI,4BAA4B,EACrD,eAAe,IAAI,uBAAuB,EAC1C,aAAa,IAAI,oBAAoB,GAGrC,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,kBAAkB,IAAI,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAGrG,OAAO,EAAE,gCAAgC,IAAI,uCAAuC,EAAE,MAAM,+CAA+C,CAAC;AAe5I,MAAM,CAAC,KAAK,UAAU,YAAY,CACjC,OAOC,EACD,eAA4C,EAAE;IAE9C,MAAM,kBAAkB,GAAG,YAAY,CAAC,kBAAkB,IAAI,yBAAyB,CAAC;IACxF,MAAM,eAAe,GAAG,YAAY,CAAC,eAAe,IAAI,uBAAuB,CAAC;IAChF,MAAM,qBAAqB,GAAG,YAAY,CAAC,qBAAqB,IAAI,4BAA4B,CAAC;IACjG,MAAM,aAAa,GAAG,YAAY,CAAC,aAAa,IAAI,oBAAoB,CAAC;IACzE,MAAM,gCAAgC,GACrC,YAAY,CAAC,gCAAgC,IAAI,uCAAuC,CAAC;IAC1F,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAC3C,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,KAAK,OAAO,CAAC,MAAM,CACxD,CAAC;IACF,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,CAAC,MAAM,sBAAsB,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAClG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,CAAC,OAAO,CAAC,YAAY,sBAAsB,CAAC,CAAC;IAC/F,CAAC;IACD,8DAA8D;IAC9D,MAAM,gCAAgC,CAAC;QACtC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,IAAI;KACJ,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC;QAC1C,eAAe,EAAE,gBAAgB,CAAC,WAAW;QAC7C,yBAAyB,EAAE,OAAO,CAAC,YAAY,CAAC,yBAAyB;QACzE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;KACrF,CAAC,CAAC;IAEH,0EAA0E;IAC1E,gEAAgE;IAChE,MAAM,sBAAsB,GAAG,MAAM,gCAAgC,CAAC;QACrE,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,IAAI;KACJ,CAAC,CAAC;IACH,MAAM,mBAAmB,GAAG,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAClE,IAAI,CAAC;QACJ,MAAM,gCAAgC,CAAC;YACtC,YAAY,EAAE,mBAAmB,CAAC,QAAQ;YAC1C,IAAI;SACJ,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;QAC3C,MAAM,KAAK,CAAC;IACb,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACpC,YAAY,EAAE,EAAE;QAChB,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;QAC1B,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;QAC9B,UAAU,EAAE,QAAQ;QACpB,YAAY,EAAE,qBAAqB,CAClC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAC1C,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,OAAO,CACf;QACD,OAAO,EAAE,EAAE;QACX,SAAS,EAAE;YACV,OAAO,EAAE;gBACR,QAAQ,EAAE,sBAAsB;gBAChC,IAAI,EAAE,QAAQ;gBACd,cAAc,EAAE,mBAAmB;aACnC;SACD;KACD,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-vm/agent-vm",
3
- "version": "0.0.31",
3
+ "version": "0.0.32",
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": {
@@ -38,12 +38,12 @@
38
38
  "hono": "^4.12.14",
39
39
  "tasuku": "^2.3.0",
40
40
  "zod": "^4",
41
- "@agent-vm/gondolin-adapter": "0.0.31",
42
- "@agent-vm/agent-vm-worker": "0.0.31",
43
- "@agent-vm/openclaw-agent-vm-plugin": "0.0.31",
44
- "@agent-vm/worker-gateway": "0.0.31",
45
- "@agent-vm/gateway-interface": "0.0.31",
46
- "@agent-vm/openclaw-gateway": "0.0.31"
41
+ "@agent-vm/agent-vm-worker": "0.0.32",
42
+ "@agent-vm/gateway-interface": "0.0.32",
43
+ "@agent-vm/gondolin-adapter": "0.0.32",
44
+ "@agent-vm/openclaw-agent-vm-plugin": "0.0.32",
45
+ "@agent-vm/openclaw-gateway": "0.0.32",
46
+ "@agent-vm/worker-gateway": "0.0.32"
47
47
  },
48
48
  "scripts": {
49
49
  "build": "rm -rf dist && tsc -p tsconfig.build.json",