rightsize 0.3.0 → 0.5.0

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 (68) hide show
  1. package/README.md +33 -27
  2. package/dist/backend-docker/backend.d.ts +14 -0
  3. package/dist/backend-docker/backend.d.ts.map +1 -1
  4. package/dist/backend-docker/backend.js +28 -0
  5. package/dist/backend-docker/backend.js.map +1 -1
  6. package/dist/backend-docker/cli.d.ts +4 -0
  7. package/dist/backend-docker/cli.d.ts.map +1 -1
  8. package/dist/backend-docker/cli.js +8 -0
  9. package/dist/backend-docker/cli.js.map +1 -1
  10. package/dist/backend-msb/backend.d.ts +30 -0
  11. package/dist/backend-msb/backend.d.ts.map +1 -1
  12. package/dist/backend-msb/backend.js +64 -0
  13. package/dist/backend-msb/backend.js.map +1 -1
  14. package/dist/backend-msb/commands.d.ts +6 -0
  15. package/dist/backend-msb/commands.d.ts.map +1 -1
  16. package/dist/backend-msb/commands.js +12 -0
  17. package/dist/backend-msb/commands.js.map +1 -1
  18. package/dist/backend-msb/snapshot-import.d.ts +33 -0
  19. package/dist/backend-msb/snapshot-import.d.ts.map +1 -0
  20. package/dist/backend-msb/snapshot-import.js +48 -0
  21. package/dist/backend-msb/snapshot-import.js.map +1 -0
  22. package/dist/backend-msb/snapshot-list.d.ts +43 -0
  23. package/dist/backend-msb/snapshot-list.d.ts.map +1 -0
  24. package/dist/backend-msb/snapshot-list.js +53 -0
  25. package/dist/backend-msb/snapshot-list.js.map +1 -0
  26. package/dist/core/backend.d.ts +29 -0
  27. package/dist/core/backend.d.ts.map +1 -1
  28. package/dist/core/checkpoint/api.d.ts +49 -0
  29. package/dist/core/checkpoint/api.d.ts.map +1 -1
  30. package/dist/core/checkpoint/api.js +124 -1
  31. package/dist/core/checkpoint/api.js.map +1 -1
  32. package/dist/core/checkpoint/archive.d.ts +52 -0
  33. package/dist/core/checkpoint/archive.d.ts.map +1 -0
  34. package/dist/core/checkpoint/archive.js +134 -0
  35. package/dist/core/checkpoint/archive.js.map +1 -0
  36. package/dist/core/checkpoint/registry.d.ts +2 -0
  37. package/dist/core/checkpoint/registry.d.ts.map +1 -1
  38. package/dist/core/checkpoint/registry.js +2 -1
  39. package/dist/core/checkpoint/registry.js.map +1 -1
  40. package/dist/core/checkpoint/tar-cli.d.ts +45 -0
  41. package/dist/core/checkpoint/tar-cli.d.ts.map +1 -0
  42. package/dist/core/checkpoint/tar-cli.js +86 -0
  43. package/dist/core/checkpoint/tar-cli.js.map +1 -0
  44. package/dist/core/errors.d.ts +37 -0
  45. package/dist/core/errors.d.ts.map +1 -1
  46. package/dist/core/errors.js +44 -0
  47. package/dist/core/errors.js.map +1 -1
  48. package/dist/index.d.ts +2 -2
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +2 -2
  51. package/dist/index.js.map +1 -1
  52. package/dist/modules/cassandra.d.ts +49 -0
  53. package/dist/modules/cassandra.d.ts.map +1 -0
  54. package/dist/modules/cassandra.js +69 -0
  55. package/dist/modules/cassandra.js.map +1 -0
  56. package/dist/modules/index.d.ts +4 -1
  57. package/dist/modules/index.d.ts.map +1 -1
  58. package/dist/modules/index.js +4 -1
  59. package/dist/modules/index.js.map +1 -1
  60. package/dist/modules/minio.d.ts +35 -0
  61. package/dist/modules/minio.d.ts.map +1 -0
  62. package/dist/modules/minio.js +64 -0
  63. package/dist/modules/minio.js.map +1 -0
  64. package/dist/modules/valkey.d.ts +21 -0
  65. package/dist/modules/valkey.d.ts.map +1 -0
  66. package/dist/modules/valkey.js +32 -0
  67. package/dist/modules/valkey.js.map +1 -0
  68. package/package.json +1 -1
@@ -1,7 +1,9 @@
1
1
  import { cacheDir } from "../cache-dir.js";
2
2
  import { Backends } from "../backends.js";
3
+ import { CheckpointArtifactMissingError, CheckpointBackendMismatchError } from "../errors.js";
3
4
  import { requireValidCheckpointName } from "./name.js";
4
- import { readCheckpointRegistry, removeCheckpointRegistryFile, listCheckpointNames, fromCheckpointRegistryEntry, } from "./registry.js";
5
+ import { readCheckpointRegistry, removeCheckpointRegistryFile, writeCheckpointRegistryAtomic, listCheckpointNames, fromCheckpointRegistryEntry, toCheckpointRegistrySpec, } from "./registry.js";
6
+ import { writeCheckpointArchive, readCheckpointArchive, CHECKPOINT_ARCHIVE_VERSION } from "./archive.js";
5
7
  /** Every field of a `Checkpoint` comes straight from the registry entry except `spec`, which is reconstructed via `fromCheckpointRegistryEntry` — see that function's own doc for what is and isn't meaningful in the result. */
6
8
  function toCheckpoint(entry) {
7
9
  return { ref: entry.ref, backend: entry.backend, spec: fromCheckpointRegistryEntry(entry) };
@@ -120,6 +122,123 @@ export async function remove(name) {
120
122
  await removeCheckpointRegistryFile(dir, name);
121
123
  return true;
122
124
  }
125
+ /**
126
+ * Reverse lookup: the registry entry (if any) whose `ref`/`backend` match a
127
+ * `Checkpoint`'s own — `exportTo`'s only way to learn whether the checkpoint
128
+ * it's given was ever named, and under what name, since a `Checkpoint`
129
+ * object itself never carries one (see `toCheckpoint` above). Scans every
130
+ * registered name the same way `list()` does; a corrupt entry is silently
131
+ * skipped, matching `list()`'s own tolerance.
132
+ */
133
+ async function findRegistryEntryByRef(dir, ref, backend) {
134
+ const names = await listCheckpointNames(dir);
135
+ for (const name of names) {
136
+ const read = await readCheckpointRegistry(dir, name);
137
+ if (read.kind === "found" && read.entry.ref === ref && read.entry.backend === backend) {
138
+ return read.entry;
139
+ }
140
+ }
141
+ return undefined;
142
+ }
143
+ /**
144
+ * Bundles `cp` into a self-describing archive at `destPath`: `checkpoint.json`
145
+ * (the pinned metadata — format version, this checkpoint's name if it was
146
+ * ever registered under one, ref, backend, creation time, and spec) plus an
147
+ * `artifact` member holding the backend's own payload, byte-for-byte what
148
+ * `SandboxBackend.exportCheckpoint` produces. See the
149
+ * [checkpoints guide](/guide/checkpoints#moving-checkpoints-between-machines)
150
+ * for the full CI-cache pattern this exists for.
151
+ *
152
+ * Requires the ACTIVE backend to equal `cp.backend` — the same
153
+ * `CheckpointBackendMismatchError` `fromCheckpoint(cp).start()` throws —
154
+ * before any backend or filesystem work. Then probes the artifact still
155
+ * exists via `hasCheckpoint`: exporting a stale checkpoint throws
156
+ * `CheckpointArtifactMissingError` rather than producing a broken archive.
157
+ * Only once both checks pass does this stage the export in a fresh unique
158
+ * temp directory (removed in a `finally` regardless of outcome) and tar it
159
+ * into `destPath` (parent directories created; a pre-existing file there is
160
+ * overwritten). Works on an ephemeral (unnamed) checkpoint too — the
161
+ * resulting archive just carries `name: null`.
162
+ */
163
+ export async function exportTo(cp, destPath) {
164
+ const active = Backends.active();
165
+ if (cp.backend !== active.name) {
166
+ throw new CheckpointBackendMismatchError(cp.backend, active.name);
167
+ }
168
+ const exists = await active.hasCheckpoint(cp.ref);
169
+ if (!exists) {
170
+ throw new CheckpointArtifactMissingError(cp.ref, cp.backend);
171
+ }
172
+ const dir = cacheDir();
173
+ const registryEntry = await findRegistryEntryByRef(dir, cp.ref, cp.backend);
174
+ const metadata = {
175
+ rightsizeArchive: CHECKPOINT_ARCHIVE_VERSION,
176
+ name: registryEntry?.name ?? null,
177
+ ref: cp.ref,
178
+ backend: cp.backend,
179
+ createdIso: registryEntry?.createdIso ?? new Date().toISOString(),
180
+ spec: toCheckpointRegistrySpec(cp.spec),
181
+ };
182
+ await writeCheckpointArchive(destPath, metadata, (artifactPath) => active.exportCheckpoint(cp.ref, artifactPath));
183
+ }
184
+ /**
185
+ * The inverse of `exportTo`: extracts `srcPath`, validates its
186
+ * `checkpoint.json` (format version, `name` against
187
+ * `CHECKPOINT_NAME_PATTERN` when non-null, backend against the ACTIVE
188
+ * backend — a `MalformedCheckpointArchiveError` or `CheckpointBackendMismatchError`
189
+ * either way, before any backend call or registry write), then hands the
190
+ * extracted `artifact` to `SandboxBackend.importCheckpoint`, which
191
+ * materializes it and returns the EFFECTIVE ref (docker: the same `ref` the
192
+ * archive recorded; microsandbox: the digest `snapshot import` actually
193
+ * assigned it — never necessarily the archive's own `ref`).
194
+ *
195
+ * A NAMED archive (`name` non-null) gets replace semantics matching
196
+ * `checkpoint(name)`: if a registry entry already exists for that name under
197
+ * a DIFFERENT ref and its recorded backend matches the active one, its old
198
+ * artifact is best-effort removed first (never a foreign-backend
199
+ * `removeCheckpoint` call — the same gate `remove()` applies); the registry
200
+ * entry is then written (or overwritten) with the effective ref. A NAMELESS
201
+ * archive writes no registry entry at all — the returned `Checkpoint` is
202
+ * purely ephemeral, the same as an unnamed `checkpoint()` call's result.
203
+ * Either way, the returned `Checkpoint` restores via the existing
204
+ * `fromCheckpoint()` path with zero changes — refs are opaque throughout
205
+ * this library.
206
+ */
207
+ export async function importFrom(srcPath) {
208
+ const active = Backends.active();
209
+ return readCheckpointArchive(srcPath, async (metadata, artifactPath) => {
210
+ if (metadata.name !== null) {
211
+ requireValidCheckpointName(metadata.name);
212
+ }
213
+ if (metadata.backend !== active.name) {
214
+ throw new CheckpointBackendMismatchError(metadata.backend, active.name);
215
+ }
216
+ const effectiveRef = await active.importCheckpoint(artifactPath, metadata.ref);
217
+ const spec = fromCheckpointRegistryEntry({
218
+ name: metadata.name ?? "",
219
+ ref: effectiveRef,
220
+ backend: active.name,
221
+ createdIso: metadata.createdIso,
222
+ spec: metadata.spec,
223
+ });
224
+ if (metadata.name !== null) {
225
+ const dir = cacheDir();
226
+ const existing = await readCheckpointRegistry(dir, metadata.name);
227
+ if (existing.kind === "found" && existing.entry.ref !== effectiveRef && existing.entry.backend === active.name) {
228
+ await active.removeCheckpoint(existing.entry.ref).catch(() => { });
229
+ }
230
+ const entry = {
231
+ name: metadata.name,
232
+ ref: effectiveRef,
233
+ backend: active.name,
234
+ createdIso: metadata.createdIso,
235
+ spec: metadata.spec,
236
+ };
237
+ await writeCheckpointRegistryAtomic(dir, metadata.name, entry);
238
+ }
239
+ return { ref: effectiveRef, backend: active.name, spec };
240
+ });
241
+ }
123
242
  /**
124
243
  * The library's entry point for rediscovering NAMED checkpoints across
125
244
  * processes — see the [checkpoints guide](/guide/checkpoints#reusing-checkpoints-across-runs)
@@ -134,5 +253,9 @@ export const Checkpoints = {
134
253
  list,
135
254
  /** Deletes a named checkpoint — see `remove` above. */
136
255
  remove,
256
+ /** Bundles a checkpoint into a portable archive — see `exportTo` above. */
257
+ exportTo,
258
+ /** Materializes a portable archive on this machine — see `importFrom` above. */
259
+ importFrom,
137
260
  };
138
261
  //# sourceMappingURL=api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/core/checkpoint/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/core/checkpoint/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { CheckpointRegistrySpec } from "./registry.js";
2
+ /** The one archive format version this library understands — pinned identically across every rightsize language implementation. */
3
+ export declare const CHECKPOINT_ARCHIVE_VERSION = 1;
4
+ /**
5
+ * `checkpoint.json`'s exact shape — pinned identically in every rightsize
6
+ * language implementation. `name` is `null` for an archive built from an
7
+ * unnamed (ephemeral) checkpoint; every other field mirrors
8
+ * `CheckpointRegistryEntry` plus the format version.
9
+ */
10
+ export interface CheckpointArchiveMetadata {
11
+ readonly rightsizeArchive: 1;
12
+ readonly name: string | null;
13
+ readonly ref: string;
14
+ readonly backend: string;
15
+ readonly createdIso: string;
16
+ readonly spec: CheckpointRegistrySpec;
17
+ }
18
+ /**
19
+ * Parses and validates `text` (the extracted archive's `checkpoint.json`
20
+ * content) into a `CheckpointArchiveMetadata`. Every failure — invalid JSON,
21
+ * a `rightsizeArchive` value other than `CHECKPOINT_ARCHIVE_VERSION` (named
22
+ * in the thrown error, per the pinned format's own contract), a malformed
23
+ * `name`/`ref`/`backend`/`createdIso`/`spec` — throws
24
+ * `MalformedCheckpointArchiveError` naming `archivePath` (the ORIGINAL
25
+ * archive the caller passed to `importFrom`, not the temp-extracted json
26
+ * path, so the error is actionable). Never touches a backend or the
27
+ * registry — pure parsing.
28
+ */
29
+ export declare function parseCheckpointArchiveMetadata(text: string, archivePath: string): CheckpointArchiveMetadata;
30
+ /**
31
+ * Builds a checkpoint archive at `destPath`: stages `checkpoint.json` and an
32
+ * `artifact` file (written by `exportArtifact`, the backend's own
33
+ * `exportCheckpoint` call) in a fresh temp directory, then tars exactly
34
+ * those two members at the archive's root — never nested under the temp
35
+ * dir's own path. `destPath`'s parent directories are created first; a
36
+ * pre-existing file at `destPath` is overwritten (tar's own default
37
+ * behavior). The temp directory is removed in a `finally`, on success and on
38
+ * failure alike.
39
+ */
40
+ export declare function writeCheckpointArchive(destPath: string, metadata: CheckpointArchiveMetadata, exportArtifact: (artifactPath: string) => Promise<void>): Promise<void>;
41
+ /**
42
+ * Extracts `srcPath` into a fresh temp directory, parses and validates
43
+ * `checkpoint.json` (see `parseCheckpointArchiveMetadata`), confirms the
44
+ * `artifact` member is present, then hands both to `importArtifact` — the
45
+ * caller's own backend/registry validation and `importCheckpoint` call —
46
+ * before the temp directory is removed in a `finally`. `srcPath` not
47
+ * existing, or not being a valid tar, or missing its `checkpoint.json`
48
+ * member each throw `MalformedCheckpointArchiveError` naming `srcPath`
49
+ * itself, before any backend call.
50
+ */
51
+ export declare function readCheckpointArchive<T>(srcPath: string, importArtifact: (metadata: CheckpointArchiveMetadata, artifactPath: string) => Promise<T>): Promise<T>;
52
+ //# sourceMappingURL=archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/core/checkpoint/archive.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAG5D,mIAAmI;AACnI,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAU5C;;;;;GAKG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;CACvC;AAWD;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,yBAAyB,CAwC3G;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,yBAAyB,EACnC,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACtD,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAC3C,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,CAAC,QAAQ,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACxF,OAAO,CAAC,CAAC,CAAC,CAsCZ"}
@@ -0,0 +1,134 @@
1
+ import * as fsp from "node:fs/promises";
2
+ import * as os from "node:os";
3
+ import * as path from "node:path";
4
+ import { BackendError, MalformedCheckpointArchiveError } from "../errors.js";
5
+ import { isCheckpointRegistrySpec } from "./registry.js";
6
+ import { TarCli, runTar } from "./tar-cli.js";
7
+ /** The one archive format version this library understands — pinned identically across every rightsize language implementation. */
8
+ export const CHECKPOINT_ARCHIVE_VERSION = 1;
9
+ /**
10
+ * An archive bundles a full backend artifact (a zstd-compressed msb snapshot
11
+ * or a saved docker image) — generous relative to a plain `msb copy`/`docker
12
+ * cp`, matching the backend's own export/import budget for the payload
13
+ * itself.
14
+ */
15
+ const ARCHIVE_TAR_TIMEOUT_MS = 300_000;
16
+ async function withTempDir(prefix, fn) {
17
+ const dir = await fsp.mkdtemp(path.join(os.tmpdir(), prefix));
18
+ try {
19
+ return await fn(dir);
20
+ }
21
+ finally {
22
+ await fsp.rm(dir, { recursive: true, force: true });
23
+ }
24
+ }
25
+ /**
26
+ * Parses and validates `text` (the extracted archive's `checkpoint.json`
27
+ * content) into a `CheckpointArchiveMetadata`. Every failure — invalid JSON,
28
+ * a `rightsizeArchive` value other than `CHECKPOINT_ARCHIVE_VERSION` (named
29
+ * in the thrown error, per the pinned format's own contract), a malformed
30
+ * `name`/`ref`/`backend`/`createdIso`/`spec` — throws
31
+ * `MalformedCheckpointArchiveError` naming `archivePath` (the ORIGINAL
32
+ * archive the caller passed to `importFrom`, not the temp-extracted json
33
+ * path, so the error is actionable). Never touches a backend or the
34
+ * registry — pure parsing.
35
+ */
36
+ export function parseCheckpointArchiveMetadata(text, archivePath) {
37
+ let parsed;
38
+ try {
39
+ parsed = JSON.parse(text);
40
+ }
41
+ catch {
42
+ throw new MalformedCheckpointArchiveError(archivePath, "checkpoint.json is not valid JSON");
43
+ }
44
+ if (typeof parsed !== "object" || parsed === null) {
45
+ throw new MalformedCheckpointArchiveError(archivePath, "checkpoint.json is not a JSON object");
46
+ }
47
+ const rec = parsed;
48
+ if (rec["rightsizeArchive"] !== CHECKPOINT_ARCHIVE_VERSION) {
49
+ throw new MalformedCheckpointArchiveError(archivePath, `unsupported rightsizeArchive version ${JSON.stringify(rec["rightsizeArchive"])} (this library reads version ${CHECKPOINT_ARCHIVE_VERSION})`);
50
+ }
51
+ const name = rec["name"];
52
+ if (name !== null && typeof name !== "string") {
53
+ throw new MalformedCheckpointArchiveError(archivePath, "checkpoint.json's 'name' field must be a string or null");
54
+ }
55
+ if (typeof rec["ref"] !== "string" || typeof rec["backend"] !== "string" || typeof rec["createdIso"] !== "string") {
56
+ throw new MalformedCheckpointArchiveError(archivePath, "checkpoint.json is missing one of the required string fields 'ref', 'backend', 'createdIso'");
57
+ }
58
+ if (!isCheckpointRegistrySpec(rec["spec"])) {
59
+ throw new MalformedCheckpointArchiveError(archivePath, "checkpoint.json's 'spec' field is missing or malformed");
60
+ }
61
+ return {
62
+ rightsizeArchive: 1,
63
+ name,
64
+ ref: rec["ref"],
65
+ backend: rec["backend"],
66
+ createdIso: rec["createdIso"],
67
+ spec: rec["spec"],
68
+ };
69
+ }
70
+ /**
71
+ * Builds a checkpoint archive at `destPath`: stages `checkpoint.json` and an
72
+ * `artifact` file (written by `exportArtifact`, the backend's own
73
+ * `exportCheckpoint` call) in a fresh temp directory, then tars exactly
74
+ * those two members at the archive's root — never nested under the temp
75
+ * dir's own path. `destPath`'s parent directories are created first; a
76
+ * pre-existing file at `destPath` is overwritten (tar's own default
77
+ * behavior). The temp directory is removed in a `finally`, on success and on
78
+ * failure alike.
79
+ */
80
+ export async function writeCheckpointArchive(destPath, metadata, exportArtifact) {
81
+ await fsp.mkdir(path.dirname(destPath), { recursive: true });
82
+ await withTempDir("rightsize-checkpoint-export-", async (workDir) => {
83
+ const artifactPath = path.join(workDir, "artifact");
84
+ await exportArtifact(artifactPath);
85
+ await fsp.writeFile(path.join(workDir, "checkpoint.json"), JSON.stringify(metadata));
86
+ const result = await runTar(TarCli.create(path.basename(destPath), workDir, ["checkpoint.json", "artifact"]), ARCHIVE_TAR_TIMEOUT_MS, path.dirname(destPath));
87
+ if (result.exitCode !== 0) {
88
+ throw new BackendError(`tar could not create checkpoint archive '${destPath}' (exit ${result.exitCode}): ${result.stderr.trim()}`);
89
+ }
90
+ });
91
+ }
92
+ /**
93
+ * Extracts `srcPath` into a fresh temp directory, parses and validates
94
+ * `checkpoint.json` (see `parseCheckpointArchiveMetadata`), confirms the
95
+ * `artifact` member is present, then hands both to `importArtifact` — the
96
+ * caller's own backend/registry validation and `importCheckpoint` call —
97
+ * before the temp directory is removed in a `finally`. `srcPath` not
98
+ * existing, or not being a valid tar, or missing its `checkpoint.json`
99
+ * member each throw `MalformedCheckpointArchiveError` naming `srcPath`
100
+ * itself, before any backend call.
101
+ */
102
+ export async function readCheckpointArchive(srcPath, importArtifact) {
103
+ const exists = await fsp
104
+ .stat(srcPath)
105
+ .then((s) => s.isFile())
106
+ .catch(() => false);
107
+ if (!exists) {
108
+ throw new MalformedCheckpointArchiveError(srcPath, "the file does not exist");
109
+ }
110
+ return withTempDir("rightsize-checkpoint-import-", async (workDir) => {
111
+ const extracted = await runTar(TarCli.extract(path.basename(srcPath), workDir), ARCHIVE_TAR_TIMEOUT_MS, path.dirname(srcPath));
112
+ if (extracted.exitCode !== 0) {
113
+ throw new MalformedCheckpointArchiveError(srcPath, `not a valid tar archive: ${extracted.stderr.trim()}`);
114
+ }
115
+ let text;
116
+ try {
117
+ text = await fsp.readFile(path.join(workDir, "checkpoint.json"), "utf8");
118
+ }
119
+ catch {
120
+ throw new MalformedCheckpointArchiveError(srcPath, "missing checkpoint.json");
121
+ }
122
+ const metadata = parseCheckpointArchiveMetadata(text, srcPath);
123
+ const artifactPath = path.join(workDir, "artifact");
124
+ const hasArtifact = await fsp
125
+ .stat(artifactPath)
126
+ .then(() => true)
127
+ .catch(() => false);
128
+ if (!hasArtifact) {
129
+ throw new MalformedCheckpointArchiveError(srcPath, "missing artifact");
130
+ }
131
+ return importArtifact(metadata, artifactPath);
132
+ });
133
+ }
134
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../src/core/checkpoint/archive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE9C,mIAAmI;AACnI,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,sBAAsB,GAAG,OAAO,CAAC;AAiBvC,KAAK,UAAU,WAAW,CAAI,MAAc,EAAE,EAA+B;IAC3E,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,8BAA8B,CAAC,IAAY,EAAE,WAAmB;IAC9E,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,+BAA+B,CAAC,WAAW,EAAE,mCAAmC,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,MAAM,IAAI,+BAA+B,CAAC,WAAW,EAAE,sCAAsC,CAAC,CAAC;IACjG,CAAC;IACD,MAAM,GAAG,GAAG,MAAiC,CAAC;IAE9C,IAAI,GAAG,CAAC,kBAAkB,CAAC,KAAK,0BAA0B,EAAE,CAAC;QAC3D,MAAM,IAAI,+BAA+B,CACvC,WAAW,EACX,wCAAwC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,gCAAgC,0BAA0B,GAAG,CAC7I,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,IAAI,+BAA+B,CAAC,WAAW,EAAE,yDAAyD,CAAC,CAAC;IACpH,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,YAAY,CAAC,KAAK,QAAQ,EAAE,CAAC;QAClH,MAAM,IAAI,+BAA+B,CACvC,WAAW,EACX,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,+BAA+B,CAAC,WAAW,EAAE,wDAAwD,CAAC,CAAC;IACnH,CAAC;IAED,OAAO;QACL,gBAAgB,EAAE,CAAC;QACnB,IAAI;QACJ,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;QACf,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC;QACvB,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC;QAC7B,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;KAClB,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,QAAgB,EAChB,QAAmC,EACnC,cAAuD;IAEvD,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,WAAW,CAAC,8BAA8B,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAClE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACpD,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;QACnC,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAErF,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC,EAChF,sBAAsB,EACtB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CACvB,CAAC;QACF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,YAAY,CACpB,4CAA4C,QAAQ,WAAW,MAAM,CAAC,QAAQ,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAC3G,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAe,EACf,cAAyF;IAEzF,MAAM,MAAM,GAAG,MAAM,GAAG;SACrB,IAAI,CAAC,OAAO,CAAC;SACb,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACvB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,+BAA+B,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,WAAW,CAAC,8BAA8B,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACnE,MAAM,SAAS,GAAG,MAAM,MAAM,CAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,EAC/C,sBAAsB,EACtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CACtB,CAAC;QACF,IAAI,SAAS,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,+BAA+B,CAAC,OAAO,EAAE,4BAA4B,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5G,CAAC;QAED,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3E,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,+BAA+B,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;QAChF,CAAC;QACD,MAAM,QAAQ,GAAG,8BAA8B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAE/D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,MAAM,GAAG;aAC1B,IAAI,CAAC,YAAY,CAAC;aAClB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;aAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,+BAA+B,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -43,6 +43,8 @@ export declare function checkpointsDir(cacheDir: string): string;
43
43
  * forgets `requireValidCheckpointName` at its own boundary.
44
44
  */
45
45
  export declare function checkpointRegistryPath(cacheDir: string, name: string): string;
46
+ /** Structural validator for `CheckpointRegistrySpec` — also the shape a checkpoint archive's `checkpoint.json` `spec` field must match, see `checkpoint/archive.ts`. */
47
+ export declare function isCheckpointRegistrySpec(value: unknown): value is CheckpointRegistrySpec;
46
48
  /** The three outcomes reading a registry file can settle to — corrupt is deliberately distinct from missing, since `find`/`remove` react differently to each (see their own docs). */
47
49
  export type CheckpointRegistryReadResult = {
48
50
  readonly kind: "missing";
@@ -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;AAkDD,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;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,uBAAuB,GAAG,aAAa,CAezF"}
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;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,uBAAuB,GAAG,aAAa,CAezF"}
@@ -18,7 +18,8 @@ export function checkpointRegistryPath(cacheDir, name) {
18
18
  requireValidCheckpointName(name);
19
19
  return path.join(checkpointsDir(cacheDir), `${name}.json`);
20
20
  }
21
- function isCheckpointRegistrySpec(value) {
21
+ /** Structural validator for `CheckpointRegistrySpec` — also the shape a checkpoint archive's `checkpoint.json` `spec` field must match, see `checkpoint/archive.ts`. */
22
+ export function isCheckpointRegistrySpec(value) {
22
23
  if (typeof value !== "object" || value === null) {
23
24
  return false;
24
25
  }
@@ -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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"}
@@ -0,0 +1,45 @@
1
+ /** One `tar <args>` invocation's outcome — never rejects on a nonzero exit, only on spawn failure or timeout (mirrors `backend-docker/cli.ts`'s own `runDockerCli` contract). */
2
+ export interface TarCliResult {
3
+ readonly exitCode: number;
4
+ readonly stdout: string;
5
+ readonly stderr: string;
6
+ }
7
+ /**
8
+ * Pure argv construction for the host `tar` binary — the archive container
9
+ * tool a checkpoint archive is built with (see the checkpoints guide's own
10
+ * note on why a plain tar, not a project-specific packer): present on Linux,
11
+ * macOS, and Windows 10+ (bsdtar as `tar.exe`). Kept separate from
12
+ * `runTar` so the shape can be unit-tested without ever spawning the real
13
+ * binary.
14
+ */
15
+ export declare const TarCli: {
16
+ /**
17
+ * `tar -cf <archive basename> -C <workDir> <members...>` — members are written at
18
+ * the tar's root, never nested under `workDir`'s own path. The archive is named by
19
+ * BASENAME only: an absolute Windows path in the `-f` argument (`C:\...`) is parsed
20
+ * by GNU tar as a `host:path` remote-archive spec ("Cannot connect to C"), and which
21
+ * flavor `tar` resolves to on Windows depends on PATH order (System32's bsdtar vs
22
+ * Git's GNU tar). `runTar` pairs this with `cwd` = the archive's parent directory,
23
+ * which both flavors handle identically.
24
+ */
25
+ create(archiveBasename: string, workDir: string, members: readonly string[]): string[];
26
+ /** `tar -xf <archive basename> -C <destDir>` — extracts every member into `destDir`; same basename-plus-cwd contract as {@link TarCli.create}. */
27
+ extract(archiveBasename: string, destDir: string): string[];
28
+ };
29
+ /**
30
+ * Normalizes a directory path for tar's `-C` argument: on Windows, Git's GNU
31
+ * (MSYS) tar mangles backslash paths (`C:\Users\...` arrives as
32
+ * `C\:\\Users\\...` and fails "Cannot open"), while both it and System32's
33
+ * bsdtar accept the same path with forward slashes. Elsewhere the path is
34
+ * returned untouched — a backslash is a legal filename character on POSIX.
35
+ */
36
+ export declare function tarDirArg(dir: string, platform?: NodeJS.Platform): string;
37
+ /**
38
+ * Runs one `tar <args>` invocation to completion over a child process — the
39
+ * one operation a checkpoint archive needs that isn't a backend CLI call.
40
+ * Shelling out rather than a tar-writing dependency for the same reason
41
+ * `backend-docker/cli.ts` shells out to `docker cp`: the tool already exists
42
+ * on every platform this library ships for.
43
+ */
44
+ export declare function runTar(args: readonly string[], timeoutMs: number, cwd: string): Promise<TarCliResult>;
45
+ //# sourceMappingURL=tar-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tar-cli.d.ts","sourceRoot":"","sources":["../../../src/core/checkpoint/tar-cli.ts"],"names":[],"mappings":"AAGA,iLAAiL;AACjL,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM;IACjB;;;;;;;;OAQG;4BACqB,MAAM,WAAW,MAAM,WAAW,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE;IAGtF,kJAAkJ;6BACzH,MAAM,WAAW,MAAM,GAAG,MAAM,EAAE;CAG5D,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,MAAM,CAE3F;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA0CrG"}
@@ -0,0 +1,86 @@
1
+ import { spawn } from "node:child_process";
2
+ import { BackendError } from "../errors.js";
3
+ /**
4
+ * Pure argv construction for the host `tar` binary — the archive container
5
+ * tool a checkpoint archive is built with (see the checkpoints guide's own
6
+ * note on why a plain tar, not a project-specific packer): present on Linux,
7
+ * macOS, and Windows 10+ (bsdtar as `tar.exe`). Kept separate from
8
+ * `runTar` so the shape can be unit-tested without ever spawning the real
9
+ * binary.
10
+ */
11
+ export const TarCli = {
12
+ /**
13
+ * `tar -cf <archive basename> -C <workDir> <members...>` — members are written at
14
+ * the tar's root, never nested under `workDir`'s own path. The archive is named by
15
+ * BASENAME only: an absolute Windows path in the `-f` argument (`C:\...`) is parsed
16
+ * by GNU tar as a `host:path` remote-archive spec ("Cannot connect to C"), and which
17
+ * flavor `tar` resolves to on Windows depends on PATH order (System32's bsdtar vs
18
+ * Git's GNU tar). `runTar` pairs this with `cwd` = the archive's parent directory,
19
+ * which both flavors handle identically.
20
+ */
21
+ create(archiveBasename, workDir, members) {
22
+ return ["-cf", archiveBasename, "-C", tarDirArg(workDir), ...members];
23
+ },
24
+ /** `tar -xf <archive basename> -C <destDir>` — extracts every member into `destDir`; same basename-plus-cwd contract as {@link TarCli.create}. */
25
+ extract(archiveBasename, destDir) {
26
+ return ["-xf", archiveBasename, "-C", tarDirArg(destDir)];
27
+ },
28
+ };
29
+ /**
30
+ * Normalizes a directory path for tar's `-C` argument: on Windows, Git's GNU
31
+ * (MSYS) tar mangles backslash paths (`C:\Users\...` arrives as
32
+ * `C\:\\Users\\...` and fails "Cannot open"), while both it and System32's
33
+ * bsdtar accept the same path with forward slashes. Elsewhere the path is
34
+ * returned untouched — a backslash is a legal filename character on POSIX.
35
+ */
36
+ export function tarDirArg(dir, platform = process.platform) {
37
+ return platform === "win32" ? dir.replaceAll("\\", "/") : dir;
38
+ }
39
+ /**
40
+ * Runs one `tar <args>` invocation to completion over a child process — the
41
+ * one operation a checkpoint archive needs that isn't a backend CLI call.
42
+ * Shelling out rather than a tar-writing dependency for the same reason
43
+ * `backend-docker/cli.ts` shells out to `docker cp`: the tool already exists
44
+ * on every platform this library ships for.
45
+ */
46
+ export function runTar(args, timeoutMs, cwd) {
47
+ return new Promise((resolveTar, rejectTar) => {
48
+ const child = spawn("tar", args, { stdio: ["ignore", "pipe", "pipe"], cwd });
49
+ let stdout = "";
50
+ let stderr = "";
51
+ child.stdout.setEncoding("utf8");
52
+ child.stderr.setEncoding("utf8");
53
+ child.stdout.on("data", (chunk) => {
54
+ stdout += chunk;
55
+ });
56
+ child.stderr.on("data", (chunk) => {
57
+ stderr += chunk;
58
+ });
59
+ let settled = false;
60
+ const timer = setTimeout(() => {
61
+ if (settled) {
62
+ return;
63
+ }
64
+ settled = true;
65
+ child.kill("SIGKILL");
66
+ rejectTar(new BackendError(`tar ${args.join(" ")} timed out after ${timeoutMs}ms and was force-killed`));
67
+ }, timeoutMs);
68
+ child.once("error", (err) => {
69
+ if (settled) {
70
+ return;
71
+ }
72
+ settled = true;
73
+ clearTimeout(timer);
74
+ rejectTar(new BackendError(`failed to spawn 'tar ${args.join(" ")}': ${err.message}`));
75
+ });
76
+ child.once("close", (code) => {
77
+ if (settled) {
78
+ return;
79
+ }
80
+ settled = true;
81
+ clearTimeout(timer);
82
+ resolveTar({ exitCode: code ?? -1, stdout, stderr });
83
+ });
84
+ });
85
+ }
86
+ //# sourceMappingURL=tar-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tar-cli.js","sourceRoot":"","sources":["../../../src/core/checkpoint/tar-cli.ts"],"names":[],"mappings":"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"}
@@ -145,4 +145,41 @@ export declare class InvalidCheckpointNameError extends Error {
145
145
  /** The rejected name, exactly as passed in. */
146
146
  checkpointName: string);
147
147
  }
148
+ /**
149
+ * Thrown by `Checkpoints.exportTo` when the checkpoint's own backend artifact
150
+ * no longer exists (`hasCheckpoint` reports `false`) — exporting a stale
151
+ * checkpoint would otherwise produce an archive whose `artifact` member the
152
+ * backend simply failed to write. Thrown before any filesystem work (no temp
153
+ * dir, no tar), after the backend-match check has already passed.
154
+ */
155
+ export declare class CheckpointArtifactMissingError extends Error {
156
+ /** The checkpoint's ref, exactly as recorded on the `Checkpoint` being exported. */
157
+ readonly ref: string;
158
+ /** The backend this ref was supposed to exist on. */
159
+ readonly backend: string;
160
+ constructor(
161
+ /** The checkpoint's ref, exactly as recorded on the `Checkpoint` being exported. */
162
+ ref: string,
163
+ /** The backend this ref was supposed to exist on. */
164
+ backend: string);
165
+ }
166
+ /**
167
+ * Thrown by `Checkpoints.importFrom` when `srcPath` isn't a well-formed
168
+ * rightsize checkpoint archive: the file doesn't exist, it isn't a valid tar,
169
+ * it has no `checkpoint.json` member, that member isn't valid JSON, isn't
170
+ * shaped like the pinned archive format, or its `rightsizeArchive` field
171
+ * isn't the version this library understands. Thrown before any backend call
172
+ * and before any registry write.
173
+ */
174
+ export declare class MalformedCheckpointArchiveError extends Error {
175
+ /** The archive path passed to `importFrom`, exactly as given. */
176
+ readonly archivePath: string;
177
+ /** A noun-phrase-ish description of what's wrong with it. */
178
+ readonly reason: string;
179
+ constructor(
180
+ /** The archive path passed to `importFrom`, exactly as given. */
181
+ archivePath: string,
182
+ /** A noun-phrase-ish description of what's wrong with it. */
183
+ reason: string);
184
+ }
148
185
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAEhD,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,qFAAqF;IACrF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;;IALxB,uDAAuD;IAC9C,OAAO,EAAE,MAAM;IACxB,yDAAyD;IAChD,OAAO,EAAE,MAAM;IACxB,qFAAqF;IAC5E,MAAM,CAAC,EAAE,MAAM,YAAA;CAK3B;AAED;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAG5C,4FAA4F;IAC5F,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;gBAFxB,OAAO,EAAE,MAAM;IACf,4FAA4F;IACnF,KAAK,CAAC,EAAE,OAAO,YAAA;CAK3B;AAED,gFAAgF;AAChF,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED,8EAA8E;AAC9E,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAI5B;AAED,kIAAkI;AAClI,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;;CAS/C;AAED;;;;;;GAMG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAE7C,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM;;IADxB,mDAAmD;IAC1C,OAAO,EAAE,MAAM;CAS3B;AAED;;;;;;;GAOG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IAEjD,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM;;IADxB,yDAAyD;IAChD,OAAO,EAAE,MAAM;CAQ3B;AAED;;;;;;GAMG;AACH,qBAAa,8BAA+B,SAAQ,KAAK;IAErD,+CAA+C;IAC/C,QAAQ,CAAC,gBAAgB,EAAE,MAAM;IACjC,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,EAAE,MAAM;;IAH9B,+CAA+C;IACtC,gBAAgB,EAAE,MAAM;IACjC,+CAA+C;IACtC,aAAa,EAAE,MAAM;CASjC;AAED;;;;;;;GAOG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;;CASlD;AAED;;;;;GAKG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IAEjD,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,EAAE,MAAM;;IAD9B,+CAA+C;IACtC,aAAa,EAAE,MAAM;CAKjC;AAED;;;;;GAKG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IAEjD,+CAA+C;IAC/C,QAAQ,CAAC,cAAc,EAAE,MAAM;;IAD/B,+CAA+C;IACtC,cAAc,EAAE,MAAM;CASlC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAEhD,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,qFAAqF;IACrF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;;IALxB,uDAAuD;IAC9C,OAAO,EAAE,MAAM;IACxB,yDAAyD;IAChD,OAAO,EAAE,MAAM;IACxB,qFAAqF;IAC5E,MAAM,CAAC,EAAE,MAAM,YAAA;CAK3B;AAED;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAG5C,4FAA4F;IAC5F,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;gBAFxB,OAAO,EAAE,MAAM;IACf,4FAA4F;IACnF,KAAK,CAAC,EAAE,OAAO,YAAA;CAK3B;AAED,gFAAgF;AAChF,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED,8EAA8E;AAC9E,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAI5B;AAED,kIAAkI;AAClI,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;;CAS/C;AAED;;;;;;GAMG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAE7C,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM;;IADxB,mDAAmD;IAC1C,OAAO,EAAE,MAAM;CAS3B;AAED;;;;;;;GAOG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IAEjD,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM;;IADxB,yDAAyD;IAChD,OAAO,EAAE,MAAM;CAQ3B;AAED;;;;;;GAMG;AACH,qBAAa,8BAA+B,SAAQ,KAAK;IAErD,+CAA+C;IAC/C,QAAQ,CAAC,gBAAgB,EAAE,MAAM;IACjC,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,EAAE,MAAM;;IAH9B,+CAA+C;IACtC,gBAAgB,EAAE,MAAM;IACjC,+CAA+C;IACtC,aAAa,EAAE,MAAM;CASjC;AAED;;;;;;;GAOG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;;CASlD;AAED;;;;;GAKG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IAEjD,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,EAAE,MAAM;;IAD9B,+CAA+C;IACtC,aAAa,EAAE,MAAM;CAKjC;AAED;;;;;GAKG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IAEjD,+CAA+C;IAC/C,QAAQ,CAAC,cAAc,EAAE,MAAM;;IAD/B,+CAA+C;IACtC,cAAc,EAAE,MAAM;CASlC;AAED;;;;;;GAMG;AACH,qBAAa,8BAA+B,SAAQ,KAAK;IAErD,oFAAoF;IACpF,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM;;IAHxB,oFAAoF;IAC3E,GAAG,EAAE,MAAM;IACpB,qDAAqD;IAC5C,OAAO,EAAE,MAAM;CAQ3B;AAED;;;;;;;GAOG;AACH,qBAAa,+BAAgC,SAAQ,KAAK;IAEtD,iEAAiE;IACjE,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC5B,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM;;IAHvB,iEAAiE;IACxD,WAAW,EAAE,MAAM;IAC5B,6DAA6D;IACpD,MAAM,EAAE,MAAM;CAK1B"}