rightsize 0.7.8 → 0.7.10

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 (75) hide show
  1. package/dist/backend-docker/backend.d.ts +4 -1
  2. package/dist/backend-docker/backend.d.ts.map +1 -1
  3. package/dist/backend-docker/backend.js +4 -0
  4. package/dist/backend-docker/backend.js.map +1 -1
  5. package/dist/backend-msb/backend.d.ts +618 -68
  6. package/dist/backend-msb/backend.d.ts.map +1 -1
  7. package/dist/backend-msb/backend.js +1236 -133
  8. package/dist/backend-msb/backend.js.map +1 -1
  9. package/dist/backend-msb/commands.d.ts +160 -16
  10. package/dist/backend-msb/commands.d.ts.map +1 -1
  11. package/dist/backend-msb/commands.js +197 -31
  12. package/dist/backend-msb/commands.js.map +1 -1
  13. package/dist/backend-msb/provisioner.d.ts +1 -1
  14. package/dist/backend-msb/provisioner.d.ts.map +1 -1
  15. package/dist/backend-msb/provisioner.js +1 -1
  16. package/dist/backend-msb/provisioner.js.map +1 -1
  17. package/dist/backend-msb/restore-access-denied.d.ts +50 -0
  18. package/dist/backend-msb/restore-access-denied.d.ts.map +1 -0
  19. package/dist/backend-msb/restore-access-denied.js +52 -0
  20. package/dist/backend-msb/restore-access-denied.js.map +1 -0
  21. package/dist/backend-msb/restore-broker.d.ts +181 -0
  22. package/dist/backend-msb/restore-broker.d.ts.map +1 -0
  23. package/dist/backend-msb/restore-broker.js +264 -0
  24. package/dist/backend-msb/restore-broker.js.map +1 -0
  25. package/dist/backend-msb/sandbox-already-exists.d.ts +32 -0
  26. package/dist/backend-msb/sandbox-already-exists.d.ts.map +1 -0
  27. package/dist/backend-msb/sandbox-already-exists.js +35 -0
  28. package/dist/backend-msb/sandbox-already-exists.js.map +1 -0
  29. package/dist/backend-msb/snapshot-create.d.ts +22 -0
  30. package/dist/backend-msb/snapshot-create.d.ts.map +1 -0
  31. package/dist/backend-msb/snapshot-create.js +33 -0
  32. package/dist/backend-msb/snapshot-create.js.map +1 -0
  33. package/dist/backend-msb/snapshot-import.d.ts +30 -14
  34. package/dist/backend-msb/snapshot-import.d.ts.map +1 -1
  35. package/dist/backend-msb/snapshot-import.js +35 -17
  36. package/dist/backend-msb/snapshot-import.js.map +1 -1
  37. package/dist/backend-msb/snapshot-rm.d.ts +28 -0
  38. package/dist/backend-msb/snapshot-rm.d.ts.map +1 -0
  39. package/dist/backend-msb/snapshot-rm.js +30 -0
  40. package/dist/backend-msb/snapshot-rm.js.map +1 -0
  41. package/dist/core/backend.d.ts +53 -22
  42. package/dist/core/backend.d.ts.map +1 -1
  43. package/dist/core/checkpoint/api.d.ts +2 -2
  44. package/dist/core/checkpoint/api.js +2 -2
  45. package/dist/core/checkpoint/registry.d.ts +34 -0
  46. package/dist/core/checkpoint/registry.d.ts.map +1 -1
  47. package/dist/core/checkpoint/registry.js +20 -1
  48. package/dist/core/checkpoint/registry.js.map +1 -1
  49. package/dist/core/errors.d.ts +49 -0
  50. package/dist/core/errors.d.ts.map +1 -1
  51. package/dist/core/errors.js +61 -0
  52. package/dist/core/errors.js.map +1 -1
  53. package/dist/core/generic-container.d.ts +58 -10
  54. package/dist/core/generic-container.d.ts.map +1 -1
  55. package/dist/core/generic-container.js +222 -27
  56. package/dist/core/generic-container.js.map +1 -1
  57. package/dist/core/model.d.ts +3 -2
  58. package/dist/core/model.d.ts.map +1 -1
  59. package/dist/core/sandbox-name.d.ts +3 -0
  60. package/dist/core/sandbox-name.d.ts.map +1 -0
  61. package/dist/core/sandbox-name.js +19 -0
  62. package/dist/core/sandbox-name.js.map +1 -0
  63. package/dist/index.d.ts +1 -1
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +1 -1
  66. package/dist/index.js.map +1 -1
  67. package/dist/modules/minio.d.ts +5 -3
  68. package/dist/modules/minio.d.ts.map +1 -1
  69. package/dist/modules/minio.js +14 -4
  70. package/dist/modules/minio.js.map +1 -1
  71. package/package.json +1 -1
  72. package/dist/backend-msb/snapshot-list.d.ts +0 -43
  73. package/dist/backend-msb/snapshot-list.d.ts.map +0 -1
  74. package/dist/backend-msb/snapshot-list.js +0 -53
  75. package/dist/backend-msb/snapshot-list.js.map +0 -1
@@ -12,22 +12,38 @@
12
12
  * one rather than surfacing it. Deliberately a substring match on the stable
13
13
  * prefix, the same reasoning `isSnapshotNotFoundError` applies to its own
14
14
  * wording: the trailing path varies per host and msb has no structured/typed
15
- * error for this.
15
+ * error for this. Not re-verified against 0.7.1 specifically (the rename to
16
+ * `save`/`load` did not touch this message in any captured output), so this
17
+ * stays a defensive fallback rather than the primary success path.
16
18
  */
17
19
  export declare function isSnapshotAlreadyExistsError(stderr: string): boolean;
18
20
  /**
19
- * Extracts the digest-dir basename from one `msb snapshot load`
20
- * invocation's output. Verified against the real msb 0.6.8 binary: on both a
21
- * success (the printed stdout line) and an already-exists failure (the
22
- * `error: snapshot already exists: <path>` stderr line), the relevant line
23
- * ENDS with the artifact path under `~/.microsandbox/snapshots/`, whose
24
- * basename is the digest-derived directory name (e.g.
25
- * `sha256-b9c0448ee9d54e33`) — never the original archive's own recorded
26
- * ref. Callers pass whichever stream actually carries the signal (stdout on
27
- * success, stderr on an already-exists failure). `undefined` means the
28
- * output carried no recognizable trailing path — a shape this backend
29
- * doesn't understand, which the caller turns into its own actionable error
30
- * rather than guessing.
21
+ * Extracts the loaded artifact's absolute path from one `msb snapshot load`
22
+ * invocation's output — the EFFECTIVE ref `importCheckpoint` hands back.
23
+ * EMPIRICALLY VERIFIED against a real msb 0.7.1 binary: a successful load
24
+ * prints a `group msb-<hex>: head snap_<digest> (Initialized)` line, then a
25
+ * digest line, then the loaded artifact's absolute path as the LAST line —
26
+ * `<destDir>/<generated-group>/snap_<digest>`, where `<destDir>` is whatever
27
+ * `--dest` was given (see `MsbCommands.snapshotImport`). The same defensive
28
+ * pattern `parseSnapshotCreateArtifactPath` uses for `snapshot create`'s own
29
+ * trailing-path output: trims the whole output, keeps only non-empty lines,
30
+ * takes the LAST one, and requires it to be an absolute path — anything else
31
+ * (empty output, a relative-looking last line, msb's own preceding "group"/
32
+ * digest lines mistaken for the answer) resolves `undefined` rather than
33
+ * guessing, so the caller fails loudly with the raw output quoted verbatim
34
+ * instead of minting a checkpoint ref from a misread line. This replaces the
35
+ * pre-0.7.1 approach of parsing out just the digest-dir BASENAME and then
36
+ * confirming it via a separate `msb snapshot list` call — 0.7.1's `load`
37
+ * already prints the full, directly-usable ref, so that second call is gone.
38
+ *
39
+ * The already-exists failure path (see `isSnapshotAlreadyExistsError`) has a
40
+ * different last-line shape than a success's: msb's own message prefixes
41
+ * the path with prose on the SAME line (`error: snapshot already exists:
42
+ * <path>`), captured verbatim from the real 0.6.8 binary and not
43
+ * re-verified against 0.7.1 — so a whole-line match never fires for it.
44
+ * When the whole line isn't itself an absolute path, this falls back to the
45
+ * line's trailing whitespace-delimited token and requires THAT to be
46
+ * absolute instead, rather than guessing a ref out of prose.
31
47
  */
32
- export declare function parseImportedDigestDirName(output: string): string | undefined;
48
+ export declare function parseImportedArtifactPath(output: string): string | undefined;
33
49
  //# sourceMappingURL=snapshot-import.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot-import.d.ts","sourceRoot":"","sources":["../../src/backend-msb/snapshot-import.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAY7E"}
1
+ {"version":3,"file":"snapshot-import.d.ts","sourceRoot":"","sources":["../../src/backend-msb/snapshot-import.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAc5E"}
@@ -13,26 +13,42 @@ import * as path from "node:path";
13
13
  * one rather than surfacing it. Deliberately a substring match on the stable
14
14
  * prefix, the same reasoning `isSnapshotNotFoundError` applies to its own
15
15
  * wording: the trailing path varies per host and msb has no structured/typed
16
- * error for this.
16
+ * error for this. Not re-verified against 0.7.1 specifically (the rename to
17
+ * `save`/`load` did not touch this message in any captured output), so this
18
+ * stays a defensive fallback rather than the primary success path.
17
19
  */
18
20
  export function isSnapshotAlreadyExistsError(stderr) {
19
21
  return stderr.includes("snapshot already exists");
20
22
  }
21
23
  /**
22
- * Extracts the digest-dir basename from one `msb snapshot load`
23
- * invocation's output. Verified against the real msb 0.6.8 binary: on both a
24
- * success (the printed stdout line) and an already-exists failure (the
25
- * `error: snapshot already exists: <path>` stderr line), the relevant line
26
- * ENDS with the artifact path under `~/.microsandbox/snapshots/`, whose
27
- * basename is the digest-derived directory name (e.g.
28
- * `sha256-b9c0448ee9d54e33`) — never the original archive's own recorded
29
- * ref. Callers pass whichever stream actually carries the signal (stdout on
30
- * success, stderr on an already-exists failure). `undefined` means the
31
- * output carried no recognizable trailing path — a shape this backend
32
- * doesn't understand, which the caller turns into its own actionable error
33
- * rather than guessing.
24
+ * Extracts the loaded artifact's absolute path from one `msb snapshot load`
25
+ * invocation's output — the EFFECTIVE ref `importCheckpoint` hands back.
26
+ * EMPIRICALLY VERIFIED against a real msb 0.7.1 binary: a successful load
27
+ * prints a `group msb-<hex>: head snap_<digest> (Initialized)` line, then a
28
+ * digest line, then the loaded artifact's absolute path as the LAST line —
29
+ * `<destDir>/<generated-group>/snap_<digest>`, where `<destDir>` is whatever
30
+ * `--dest` was given (see `MsbCommands.snapshotImport`). The same defensive
31
+ * pattern `parseSnapshotCreateArtifactPath` uses for `snapshot create`'s own
32
+ * trailing-path output: trims the whole output, keeps only non-empty lines,
33
+ * takes the LAST one, and requires it to be an absolute path — anything else
34
+ * (empty output, a relative-looking last line, msb's own preceding "group"/
35
+ * digest lines mistaken for the answer) resolves `undefined` rather than
36
+ * guessing, so the caller fails loudly with the raw output quoted verbatim
37
+ * instead of minting a checkpoint ref from a misread line. This replaces the
38
+ * pre-0.7.1 approach of parsing out just the digest-dir BASENAME and then
39
+ * confirming it via a separate `msb snapshot list` call — 0.7.1's `load`
40
+ * already prints the full, directly-usable ref, so that second call is gone.
41
+ *
42
+ * The already-exists failure path (see `isSnapshotAlreadyExistsError`) has a
43
+ * different last-line shape than a success's: msb's own message prefixes
44
+ * the path with prose on the SAME line (`error: snapshot already exists:
45
+ * <path>`), captured verbatim from the real 0.6.8 binary and not
46
+ * re-verified against 0.7.1 — so a whole-line match never fires for it.
47
+ * When the whole line isn't itself an absolute path, this falls back to the
48
+ * line's trailing whitespace-delimited token and requires THAT to be
49
+ * absolute instead, rather than guessing a ref out of prose.
34
50
  */
35
- export function parseImportedDigestDirName(output) {
51
+ export function parseImportedArtifactPath(output) {
36
52
  const lines = output
37
53
  .split("\n")
38
54
  .map((line) => line.trim())
@@ -41,8 +57,10 @@ export function parseImportedDigestDirName(output) {
41
57
  if (lastLine === undefined) {
42
58
  return undefined;
43
59
  }
44
- const match = /(\S+)\s*$/.exec(lastLine);
45
- const artifactPath = match?.[1];
46
- return artifactPath === undefined ? undefined : path.basename(artifactPath);
60
+ if (path.isAbsolute(lastLine)) {
61
+ return lastLine;
62
+ }
63
+ const trailingToken = /(\S+)\s*$/.exec(lastLine)?.[1];
64
+ return trailingToken !== undefined && path.isAbsolute(trailingToken) ? trailingToken : undefined;
47
65
  }
48
66
  //# sourceMappingURL=snapshot-import.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot-import.js","sourceRoot":"","sources":["../../src/backend-msb/snapshot-import.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAc;IACzD,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAc;IACvD,MAAM,KAAK,GAAG,MAAM;SACjB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAChC,OAAO,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAC9E,CAAC"}
1
+ {"version":3,"file":"snapshot-import.js","sourceRoot":"","sources":["../../src/backend-msb/snapshot-import.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAc;IACzD,OAAO,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAc;IACtD,MAAM,KAAK,GAAG,MAAM;SACjB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;AACnG,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * True if `stderr` (an `msb snapshot rm <artifact-path> -f` non-zero exit)
3
+ * names msb's own "this snapshot is the current head of other snapshots
4
+ * from the same source sandbox" refusal, as opposed to a genuine "not
5
+ * found" (which `removeCheckpoint` treats as success, the same best-effort
6
+ * contract `removeByName` has) or some other, unrelated failure.
7
+ * EMPIRICALLY VERIFIED against a real msb 0.7.1 binary:
8
+ *
9
+ * ```
10
+ * error: invalid config: cannot remove current head snap_<digest>; first
11
+ * select another snapshot with 'msb snapshot head src:<snapshot>'
12
+ * ```
13
+ *
14
+ * Removing a non-head member, or a group's ONLY member, succeeds — this
15
+ * refusal is specifically "older siblings from the same source sandbox
16
+ * still exist and this is still the newest of them." `removeCheckpoint`
17
+ * propagates this one verbatim instead of swallowing it alongside an
18
+ * ordinary "not found": the caller has an actionable remedy (`msb snapshot
19
+ * head ...`, named in msb's own message), and this library deliberately
20
+ * does not attempt automatic head rotation on the caller's behalf — see the
21
+ * checkpoints guide's cleanup section for the documented limitation.
22
+ * Deliberately a substring match on the stable "cannot remove current head"
23
+ * phrase, the same reasoning `isSnapshotNotFoundError` applies to its own
24
+ * wording — the snapshot id and the exact command hint vary per occurrence,
25
+ * and msb has no structured/typed error for this.
26
+ */
27
+ export declare function isSnapshotHeadRemovalRefused(stderr: string): boolean;
28
+ //# sourceMappingURL=snapshot-rm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-rm.d.ts","sourceRoot":"","sources":["../../src/backend-msb/snapshot-rm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEpE"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * True if `stderr` (an `msb snapshot rm <artifact-path> -f` non-zero exit)
3
+ * names msb's own "this snapshot is the current head of other snapshots
4
+ * from the same source sandbox" refusal, as opposed to a genuine "not
5
+ * found" (which `removeCheckpoint` treats as success, the same best-effort
6
+ * contract `removeByName` has) or some other, unrelated failure.
7
+ * EMPIRICALLY VERIFIED against a real msb 0.7.1 binary:
8
+ *
9
+ * ```
10
+ * error: invalid config: cannot remove current head snap_<digest>; first
11
+ * select another snapshot with 'msb snapshot head src:<snapshot>'
12
+ * ```
13
+ *
14
+ * Removing a non-head member, or a group's ONLY member, succeeds — this
15
+ * refusal is specifically "older siblings from the same source sandbox
16
+ * still exist and this is still the newest of them." `removeCheckpoint`
17
+ * propagates this one verbatim instead of swallowing it alongside an
18
+ * ordinary "not found": the caller has an actionable remedy (`msb snapshot
19
+ * head ...`, named in msb's own message), and this library deliberately
20
+ * does not attempt automatic head rotation on the caller's behalf — see the
21
+ * checkpoints guide's cleanup section for the documented limitation.
22
+ * Deliberately a substring match on the stable "cannot remove current head"
23
+ * phrase, the same reasoning `isSnapshotNotFoundError` applies to its own
24
+ * wording — the snapshot id and the exact command hint vary per occurrence,
25
+ * and msb has no structured/typed error for this.
26
+ */
27
+ export function isSnapshotHeadRemovalRefused(stderr) {
28
+ return stderr.includes("cannot remove current head");
29
+ }
30
+ //# sourceMappingURL=snapshot-rm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-rm.js","sourceRoot":"","sources":["../../src/backend-msb/snapshot-rm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAc;IACzD,OAAO,MAAM,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;AACvD,CAAC"}
@@ -100,19 +100,49 @@ export interface SandboxBackend {
100
100
  /** Best-effort removal of the backend-native resource; callers swallow failures during teardown. */
101
101
  remove(handle: SandboxHandle): Promise<void>;
102
102
  /**
103
- * Captures `handle`'s current state under `ref` —
104
- * `GenericContainer.checkpoint()`'s backend call, gated on
103
+ * Captures `handle`'s current state and returns the EFFECTIVE ref to use
104
+ * from here on — `GenericContainer.checkpoint()`'s backend call, gated on
105
105
  * `capabilities.checkpoint` BEFORE this is ever reached, so an
106
106
  * unsupported backend never has to implement this for real (it may throw
107
- * defensively). Docker: commits the running container to image `ref`,
108
- * undisturbed. Microsandbox: stop the sandbox, `msb snapshot create` a
109
- * disk snapshot under `ref` (an absolute `<cacheDir>/checkpoints/rz-ckpt-*`
110
- * path — via `--dest-dir`, not msb's own default snapshot store), then
111
- * start the sandbox back up — the workload restarts, which is why
112
- * `capabilities.checkpointRestartsWorkload` exists. Never called on a
113
- * backend whose `capabilities.checkpoint` is `false`.
107
+ * defensively). `ref` is the WORKING ref the caller asks this to
108
+ * checkpoint under; the returned value is not necessarily `ref` itself —
109
+ * the same asymmetry `importCheckpoint` already has, for the same reason.
110
+ * Docker: commits the running container to image `ref`, undisturbed, and
111
+ * returns `ref` unchanged (docker's tag round-trips exactly). Microsandbox:
112
+ * stop the sandbox, `msb snapshot create` a disk snapshot (via `--dest-dir`,
113
+ * not msb's own default snapshot store), then start the sandbox back up —
114
+ * the workload restarts, which is why `capabilities.checkpointRestartsWorkload`
115
+ * exists. Since msb 0.7.1, `snapshot create`'s own artifact placement is
116
+ * content-addressed and `ref` never determines it (see `MsbCliBackend`'s
117
+ * own doc), so the microsandbox backend parses the real artifact path back
118
+ * out of that command's stdout and returns THAT as the effective ref — the
119
+ * caller (`GenericContainer.checkpoint()`) stores whatever this returns in
120
+ * the named-checkpoint registry and on the `Checkpoint` it hands back,
121
+ * never `ref` itself. Never called on a backend whose
122
+ * `capabilities.checkpoint` is `false`.
114
123
  */
115
- createCheckpoint(handle: SandboxHandle, ref: string): Promise<void>;
124
+ createCheckpoint(handle: SandboxHandle, ref: string): Promise<string>;
125
+ /**
126
+ * OPTIONAL: the workload argv this backend captured from `handle`'s guest
127
+ * during its MOST RECENT `createCheckpoint` call, when that call's source
128
+ * container had no explicit `spec.command` — `undefined` when nothing was
129
+ * captured (an explicit command needed no capture, the capture attempt
130
+ * itself failed, or this backend never captures at all). `createCheckpoint`
131
+ * itself never surfaces this — it stays `Promise<string>`, unchanged — so
132
+ * `GenericContainer.checkpoint()` calls this SEPARATELY, right after
133
+ * `createCheckpoint` returns, to fold the result into a NAMED checkpoint's
134
+ * registry entry (`CheckpointRegistryEntry.capturedCommand`) and into the
135
+ * `Checkpoint.spec.command` it hands back, so a later restore — registry-
136
+ * mediated or not — has the fully-resolved workload argv without a second
137
+ * capture attempt against a sandbox that (on msb) no longer even runs the
138
+ * old one. A backend that never captures (docker: restoring a checkpoint
139
+ * is an ordinary boot from the committed image, whose own baked
140
+ * ENTRYPOINT/CMD already reproduces the workload with no capture needed)
141
+ * simply omits this method — every existing implementation keeps compiling
142
+ * and behaving unchanged. See `MsbCliBackend.createCheckpoint`'s own doc
143
+ * for when and how the microsandbox backend actually captures one.
144
+ */
145
+ capturedWorkloadCommand?(handle: SandboxHandle): ReadonlyArray<string> | undefined;
116
146
  /**
117
147
  * Best-effort removal of a checkpoint identified by `ref` (docker: `rmi`;
118
148
  * microsandbox: `msb snapshot rm`) — "not found" is success, the same
@@ -155,18 +185,19 @@ export interface SandboxBackend {
155
185
  * Materializes an exported archive's backend payload from `srcFile` and
156
186
  * returns the EFFECTIVE ref to use from here on — not necessarily `ref`
157
187
  * itself. docker preserves the original tag on `docker load`, so its
158
- * effective ref IS `ref`; microsandbox's `snapshot load` writes under a
159
- * digest-derived DIRECTORY NAME (e.g. `sha256-b9c0448ee9d54e33`) it never
160
- * lets the caller choose, so its effective ref is that directory name,
161
- * confirmed present via `snapshot list --format json` — never the full
162
- * `sha256:<64hex>` digest, which does not resolve as a snapshot ref at
163
- * all. An already-exists failure for a content-addressed archive is
164
- * treated as success. `ref` is the archive's own recorded ref (from
165
- * `checkpoint.json`), passed through for backends (docker) that have no
166
- * new ref to derive. Only ever called once the generic layer has already
167
- * validated the archive's `checkpoint.json` (version, name, backend)
168
- * against the active backend; any failure other than "already imported"
169
- * surfaces the underlying tool's stderr in a `BackendError`.
188
+ * effective ref IS `ref`; microsandbox's `snapshot load --dest
189
+ * <checkpointsDir>` writes under a path msb itself generates (never the
190
+ * caller's `ref`, never a name the caller can choose), which this backend
191
+ * parses straight out of `load`'s own printed output — no separate
192
+ * confirmation call needed, since 0.7.1 already prints the full, directly
193
+ * usable path (see `MsbCliBackend.importCheckpoint`). An already-exists
194
+ * failure for a content-addressed archive is treated as success. `ref` is
195
+ * the archive's own recorded ref (from `checkpoint.json`), passed through
196
+ * for backends (docker) that have no new ref to derive. Only ever called
197
+ * once the generic layer has already validated the archive's
198
+ * `checkpoint.json` (version, name, backend) against the active backend;
199
+ * any failure other than "already imported" surfaces the underlying
200
+ * tool's stderr in a `BackendError`.
170
201
  */
171
202
  importCheckpoint(srcFile: string, ref: string): Promise<string>;
172
203
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/core/backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/core/backend.ts"],"names":[],"mappings":"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"}
@@ -91,8 +91,8 @@ export declare function exportTo(cp: Checkpoint, destPath: string): Promise<void
91
91
  * either way, before any backend call or registry write), then hands the
92
92
  * extracted `artifact` to `SandboxBackend.importCheckpoint`, which
93
93
  * materializes it and returns the EFFECTIVE ref (docker: the same `ref` the
94
- * archive recorded; microsandbox: the digest `snapshot load` actually
95
- * assigned it — never necessarily the archive's own `ref`).
94
+ * archive recorded; microsandbox: the loaded artifact's own path `snapshot
95
+ * load` actually assigned it — never necessarily the archive's own `ref`).
96
96
  *
97
97
  * A NAMED archive (`name` non-null) gets replace semantics matching
98
98
  * `checkpoint(name)`: if a registry entry already exists for that name under
@@ -189,8 +189,8 @@ export async function exportTo(cp, destPath) {
189
189
  * either way, before any backend call or registry write), then hands the
190
190
  * extracted `artifact` to `SandboxBackend.importCheckpoint`, which
191
191
  * materializes it and returns the EFFECTIVE ref (docker: the same `ref` the
192
- * archive recorded; microsandbox: the digest `snapshot load` actually
193
- * assigned it — never necessarily the archive's own `ref`).
192
+ * archive recorded; microsandbox: the loaded artifact's own path `snapshot
193
+ * load` actually assigned it — never necessarily the archive's own `ref`).
194
194
  *
195
195
  * A NAMED archive (`name` non-null) gets replace semantics matching
196
196
  * `checkpoint(name)`: if a registry entry already exists for that name under
@@ -30,6 +30,28 @@ export interface CheckpointRegistryEntry {
30
30
  readonly backend: string;
31
31
  readonly createdIso: string;
32
32
  readonly spec: CheckpointRegistrySpec;
33
+ /**
34
+ * The workload argv `GenericContainer.checkpoint()` captured from the
35
+ * guest at checkpoint time (via `SandboxBackend.capturedWorkloadCommand`),
36
+ * for a source container whose own `spec.command` was `undefined` — the
37
+ * image's default entrypoint was running, so there is no explicit command
38
+ * to fall back on at restore time. msb-only in practice today: `msb
39
+ * restore` boots a restored sandbox with only its guest agent inside and
40
+ * never re-runs a captured workload on its own (EMPIRICALLY VERIFIED
41
+ * against msb 0.7.1 — see `MsbCliBackend.bootRestoreOnce`'s own doc), so
42
+ * this library restarts it itself, using this field as the argv source
43
+ * when the checkpoint carries no explicit `spec.command`.
44
+ *
45
+ * ADDITIVE and OPTIONAL — deliberately NOT part of the pinned, cross-
46
+ * language `CheckpointRegistrySpec` shape `spec` above carries: absent on
47
+ * every entry written before this field existed, and on any entry whose
48
+ * source container already had an explicit `spec.command` (nothing to
49
+ * capture). Reading an old entry without it is not an error — only
50
+ * restoring FROM one, when the entry also has no explicit `spec.command`,
51
+ * throws `CheckpointWorkloadCommandMissingError` rather than booting a
52
+ * workload-less sandbox silently (see `fromCheckpointRegistryEntry` below).
53
+ */
54
+ readonly capturedCommand?: ReadonlyArray<string>;
33
55
  }
34
56
  /** `<cacheDir>/checkpoints` — the directory every named checkpoint's registry file lives under. */
35
57
  export declare function checkpointsDir(cacheDir: string): string;
@@ -106,6 +128,18 @@ export declare function toCheckpointRegistrySpec(spec: ContainerSpec): Checkpoin
106
128
  * pointing at itself. `diskLimitMb`/`tmpfsRootMb`/`networkDisabled` are
107
129
  * placeholders too — the registry's pinned `CheckpointRegistrySpec` shape
108
130
  * doesn't carry them, same as it never carried `keepAlive`.
131
+ *
132
+ * `command` resolves with `entry.capturedCommand` as its fallback: when the
133
+ * source container had an explicit command, `entry.spec.command` already
134
+ * carries it and `capturedCommand` (never set for that case) never enters
135
+ * into it; when it did not, this substitutes whatever guest cmdline
136
+ * `checkpoint()` captured, so the restored `ContainerSpec`'s `command` is
137
+ * already the fully-resolved workload argv a restore-side backend (msb)
138
+ * needs to revive it, with no separate lookup needed at restore time. When
139
+ * NEITHER is present (an entry written before capture existed, or one whose
140
+ * capture attempt itself failed), `command` stays `undefined` exactly as
141
+ * before, and it is the restoring backend's own job to refuse rather than
142
+ * boot that sandbox silently idle (see `MsbCliBackend.bootRestoreOnce`).
109
143
  */
110
144
  export declare function fromCheckpointRegistryEntry(entry: CheckpointRegistryEntry): ContainerSpec;
111
145
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/core/checkpoint/registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD;;;;;;;;;GASG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAC/C,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,mLAAmL;IACnL,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;CACvC;AAED,mGAAmG;AACnG,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7E;AAED,wKAAwK;AACxK,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,sBAAsB,CA8BxF;AAkBD,sLAAsL;AACtL,MAAM,MAAM,4BAA4B,GACpC;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAA;CAAE,CAAC;AAExE;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAkBlH;AAED;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOjI;AAED,4FAA4F;AAC5F,wBAAsB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhG;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQ7E;AAOD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,aAAa,GAAG,sBAAsB,CAWpF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,uBAAuB,GAAG,aAAa,CAkBzF"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/core/checkpoint/registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD;;;;;;;;;GASG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAC/C,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,mLAAmL;IACnL,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAClD;AAED,mGAAmG;AACnG,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7E;AAED,wKAAwK;AACxK,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,sBAAsB,CA8BxF;AAyBD,sLAAsL;AACtL,MAAM,MAAM,4BAA4B,GACpC;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAA;CAAE,CAAC;AAExE;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAkBlH;AAED;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOjI;AAED,4FAA4F;AAC5F,wBAAsB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhG;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQ7E;AAOD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,aAAa,GAAG,sBAAsB,CAWpF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,uBAAuB,GAAG,aAAa,CAkBzF"}
@@ -56,6 +56,13 @@ function isCheckpointRegistryEntry(value) {
56
56
  typeof rec["createdIso"] !== "string") {
57
57
  return false;
58
58
  }
59
+ // Additive and optional (see CheckpointRegistryEntry's own doc): an entry
60
+ // written before this field existed simply omits the key, which is fine —
61
+ // only a PRESENT-but-malformed value (not an array of strings) is corrupt.
62
+ const capturedCommand = rec["capturedCommand"];
63
+ if (capturedCommand !== undefined && !(Array.isArray(capturedCommand) && capturedCommand.every((c) => typeof c === "string"))) {
64
+ return false;
65
+ }
59
66
  return isCheckpointRegistrySpec(rec["spec"]);
60
67
  }
61
68
  /**
@@ -163,13 +170,25 @@ export function toCheckpointRegistrySpec(spec) {
163
170
  * pointing at itself. `diskLimitMb`/`tmpfsRootMb`/`networkDisabled` are
164
171
  * placeholders too — the registry's pinned `CheckpointRegistrySpec` shape
165
172
  * doesn't carry them, same as it never carried `keepAlive`.
173
+ *
174
+ * `command` resolves with `entry.capturedCommand` as its fallback: when the
175
+ * source container had an explicit command, `entry.spec.command` already
176
+ * carries it and `capturedCommand` (never set for that case) never enters
177
+ * into it; when it did not, this substitutes whatever guest cmdline
178
+ * `checkpoint()` captured, so the restored `ContainerSpec`'s `command` is
179
+ * already the fully-resolved workload argv a restore-side backend (msb)
180
+ * needs to revive it, with no separate lookup needed at restore time. When
181
+ * NEITHER is present (an entry written before capture existed, or one whose
182
+ * capture attempt itself failed), `command` stays `undefined` exactly as
183
+ * before, and it is the restoring backend's own job to refuse rather than
184
+ * boot that sandbox silently idle (see `MsbCliBackend.bootRestoreOnce`).
166
185
  */
167
186
  export function fromCheckpointRegistryEntry(entry) {
168
187
  return {
169
188
  name: entry.name,
170
189
  image: entry.ref,
171
190
  env: envRecordToPairs(entry.spec.env),
172
- command: entry.spec.command ?? undefined,
191
+ command: entry.spec.command ?? entry.capturedCommand ?? undefined,
173
192
  ports: entry.spec.exposedPorts.map((guestPort) => ({ hostPort: 0, guestPort })),
174
193
  mounts: [],
175
194
  networkId: undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/checkpoint/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/checkpoint/registry.ts"],"names":[],"mappings":"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"}
@@ -119,6 +119,34 @@ export declare class CheckpointBackendMismatchError extends Error {
119
119
  export declare class ReuseFromCheckpointError extends Error {
120
120
  constructor();
121
121
  }
122
+ /**
123
+ * Thrown at `start()` when a container built via `GenericContainer.fromCheckpoint()`
124
+ * carries an env that no longer matches the checkpoint's own captured env —
125
+ * an extra `withEnv()` call, or one overriding a key the checkpoint already
126
+ * set — and the active backend has no way to apply that at restore time.
127
+ *
128
+ * msb is the one backend this affects: 0.7.1 replaced `run --from-snapshot`
129
+ * with a dedicated `msb restore` command that has no `-e`/`--env` flag at
130
+ * all (a disk-only restore replays the sandbox's own captured
131
+ * configuration). Before 0.7.1, an overridden or extended env silently
132
+ * reached the restored guest via `run -e`; since there is now no msb
133
+ * invocation this library could emit that would honor it, silently dropping
134
+ * it would let the workload boot with env the caller never asked for and
135
+ * without env it did ask for — a correctness bug, not a graceful
136
+ * degradation — so this throws instead, before any backend call. Restoring
137
+ * with the checkpoint's own env completely unchanged never hits this: only
138
+ * a call that actually changes what would be sent does. docker is
139
+ * unaffected — restoring there is an ordinary `docker create`/`run` against
140
+ * the committed image with a fresh env array, so this is never thrown when
141
+ * the active backend is `"docker"`.
142
+ */
143
+ export declare class CheckpointRestoreEnvOverrideError extends Error {
144
+ /** The active backend's name — always `"microsandbox"` today, the one backend this affects. */
145
+ readonly backend: string;
146
+ constructor(
147
+ /** The active backend's name — always `"microsandbox"` today, the one backend this affects. */
148
+ backend: string);
149
+ }
122
150
  /**
123
151
  * Thrown by `copyFileToContainer`/`copyContentToContainer`/
124
152
  * `copyFileFromContainer` when `containerPath` is not absolute — both
@@ -251,4 +279,25 @@ export declare class NetworkDisabledConflictError extends Error {
251
279
  export declare class TmpfsRootCheckpointError extends Error {
252
280
  constructor();
253
281
  }
282
+ /**
283
+ * Thrown restoring a microsandbox checkpoint whose source container had no
284
+ * explicit command (the image's own default entrypoint was running) and
285
+ * whose registry entry carries no captured workload cmdline either —
286
+ * `msb restore` boots a restored sandbox with only its guest agent inside
287
+ * and never re-runs anything on its own (EMPIRICALLY VERIFIED against msb
288
+ * 0.7.1 — see `MsbCliBackend.bootRestoreOnce`'s own doc), so without EITHER
289
+ * source this library has no workload argv left to revive. Thrown instead of
290
+ * silently booting the sandbox idle — the checkpoint either predates
291
+ * workload-cmdline capture, or its capture attempt failed at checkpoint time
292
+ * (see `CheckpointRegistryEntry.capturedCommand`'s own doc on why a capture
293
+ * failure never fails the checkpoint that created it, only a later restore
294
+ * of it). Only ever thrown by the microsandbox backend.
295
+ */
296
+ export declare class CheckpointWorkloadCommandMissingError extends Error {
297
+ /** The checkpoint ref being restored. */
298
+ readonly ref: string;
299
+ constructor(
300
+ /** The checkpoint ref being restored. */
301
+ ref: string);
302
+ }
254
303
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"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"}