@heyditto/cli 2.34.0 → 2.36.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.
@@ -0,0 +1,447 @@
1
+ import { createHash, randomUUID, timingSafeEqual } from "node:crypto";
2
+ import { link, lstat, mkdir, readdir, rename, rm, writeFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { gunzipSync } from "node:zlib";
6
+ import { Parser } from "tar";
7
+ import { satisfies } from "semver";
8
+ import { effectiveUpdatePolicy, newerVersion, privateDirectory, readUpdateJSON, recordCachedActivation, selectCachedRelease, stableVersion, supportsNode, updateLeaseSlot, updateTarget, updateResultExitCode, writeUpdateJSON } from "./self-update.js";
9
+ const NAME = "@heyditto/cli";
10
+ const REGISTRY = "https://registry.npmjs.org";
11
+ const LATEST = `${REGISTRY}/%40heyditto%2Fcli/latest`;
12
+ export const UPDATE_LIMITS = { timeoutMs: 60000, metadataBytes: 1024 * 1024, archiveBytes: 24 * 1024 * 1024, downloadBytes: 128 * 1024 * 1024, unpackedBytes: 512 * 1024 * 1024, archiveUnpackedBytes: 96 * 1024 * 1024, cacheBytes: 2 * 1024 * 1024 * 1024, files: 50000, packages: 256 };
13
+ export function registryURL(value) {
14
+ if (typeof value !== "string")
15
+ throw new Error("invalid registry URL");
16
+ const url = new URL(value);
17
+ if (url.origin !== REGISTRY || url.username || url.password || url.hash || url.search || !url.pathname.startsWith("/"))
18
+ throw new Error("updates require the public npm registry without redirects");
19
+ return url.href;
20
+ }
21
+ function verifyIntegrity(bytes, integrity) {
22
+ if (typeof integrity !== "string" || !/^sha512-[A-Za-z0-9+/]{86}==$/.test(integrity))
23
+ throw new Error("missing SHA512 archive integrity");
24
+ const expected = Buffer.from(integrity.slice(7), "base64"), actual = createHash("sha512").update(bytes).digest();
25
+ if (expected.length !== actual.length || !timingSafeEqual(expected, actual))
26
+ throw new Error("archive integrity mismatch");
27
+ }
28
+ function safeRelative(value) {
29
+ if (!value || value.startsWith("/") || /[\\:\x00-\x1f\x7f]/.test(value) || value.split("/").some(p => !p || p === "." || p === ".."))
30
+ throw new Error("unsafe update archive path");
31
+ return value;
32
+ }
33
+ function dependencyPath(value) {
34
+ safeRelative(value);
35
+ const parts = value.split("/");
36
+ for (let i = 0; i < parts.length;) {
37
+ if (parts[i++] !== "node_modules")
38
+ throw new Error("invalid locked dependency path");
39
+ const name = parts[i++];
40
+ if (!name || name === ".bin")
41
+ throw new Error("invalid locked dependency name");
42
+ if (name.startsWith("@") && !parts[i++])
43
+ throw new Error("invalid locked scope");
44
+ }
45
+ return value;
46
+ }
47
+ /** Parse into bounded memory BEFORE making any filesystem writes. No links or
48
+ * special files are extracted, and mode bits are reduced to 0644/0755. */
49
+ export async function unpackArchive(bytes, limits = UPDATE_LIMITS) {
50
+ let raw;
51
+ try {
52
+ raw = gunzipSync(bytes, { maxOutputLength: limits.archiveUnpackedBytes });
53
+ }
54
+ catch {
55
+ throw new Error("invalid or oversized compressed update archive");
56
+ }
57
+ const files = new Map(), names = new Set();
58
+ let total = 0;
59
+ await new Promise((resolve, reject) => {
60
+ const parser = new Parser({ strict: true, maxMetaEntrySize: 65536, onReadEntry(entry) {
61
+ try {
62
+ const full = entry.path.replace(/\/$/, "");
63
+ if (full === "package" && entry.type === "Directory") {
64
+ entry.resume();
65
+ return;
66
+ }
67
+ if (!full.startsWith("package/"))
68
+ throw new Error("archive is not an npm package");
69
+ const relative = safeRelative(full.slice(8));
70
+ if (entry.type === "Directory") {
71
+ entry.resume();
72
+ return;
73
+ }
74
+ if (!["File", "OldFile"].includes(entry.type) || entry.linkpath)
75
+ throw new Error("update archives cannot contain links or special files");
76
+ const key = relative.normalize("NFC").toLowerCase();
77
+ if (names.has(key))
78
+ throw new Error("duplicate update archive path");
79
+ names.add(key);
80
+ total += entry.size;
81
+ if (names.size > limits.files || total > limits.archiveUnpackedBytes)
82
+ throw new Error("update archive exceeds file limits");
83
+ const chunks = [];
84
+ let size = 0;
85
+ entry.on("data", (chunk) => { size += chunk.length; chunks.push(chunk); });
86
+ entry.on("end", () => {
87
+ if (size !== entry.size)
88
+ return parser.abort(new Error("truncated update archive entry"));
89
+ files.set(relative, { data: Buffer.concat(chunks), mode: (entry.mode ?? 0) & 0o111 ? 0o755 : 0o644 });
90
+ });
91
+ }
92
+ catch (error) {
93
+ parser.abort(error instanceof Error ? error : new Error("invalid update archive"));
94
+ }
95
+ } });
96
+ parser.once("error", reject);
97
+ parser.once("end", resolve);
98
+ parser.end(raw);
99
+ });
100
+ if (!files.has("package.json"))
101
+ throw new Error("update archive has no package metadata");
102
+ for (const name of files.keys()) {
103
+ const parts = name.split("/");
104
+ for (let n = 1; n < parts.length; n++)
105
+ if (files.has(parts.slice(0, n).join("/")))
106
+ throw new Error("update archive file/directory collision");
107
+ }
108
+ return files;
109
+ }
110
+ function parseJSON(files, name) {
111
+ const file = files.get(name);
112
+ if (!file || file.data.length > 1024 * 1024)
113
+ throw new Error("missing bounded update metadata");
114
+ return JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(file.data));
115
+ }
116
+ function platformMatches(values, current) {
117
+ if (!values?.length)
118
+ return true;
119
+ if (values.includes(`!${current}`))
120
+ return false;
121
+ return !values.some(v => !v.startsWith("!")) || values.includes(current) || values.includes("any");
122
+ }
123
+ async function writeArchive(directory, files, signal) {
124
+ await mkdir(directory, { recursive: true, mode: 0o700 });
125
+ for (const [relative, file] of files) {
126
+ if (signal.aborted)
127
+ throw new Error("update timed out");
128
+ const target = path.join(directory, relative);
129
+ await mkdir(path.dirname(target), { recursive: true, mode: 0o700 });
130
+ await writeFile(target, file.data, { flag: "wx", mode: file.mode });
131
+ }
132
+ }
133
+ async function cacheSize(directory, cap, signal) {
134
+ let size = 0, count = 0;
135
+ const walk = async (folder) => {
136
+ for (const entry of await readdir(folder, { withFileTypes: true })) {
137
+ if (signal.aborted)
138
+ throw new Error("update timed out");
139
+ if (++count > 250000)
140
+ throw new Error("updater cache requires manual cleanup");
141
+ const file = path.join(folder, entry.name), stat = await lstat(file);
142
+ if (stat.isSymbolicLink())
143
+ throw new Error("updater cache contains a symlink");
144
+ if (stat.isDirectory())
145
+ await walk(file);
146
+ else if (stat.isFile())
147
+ size += stat.size;
148
+ else
149
+ throw new Error("updater cache contains a special file");
150
+ if (size > cap)
151
+ throw new Error("updater cache requires manual cleanup");
152
+ }
153
+ };
154
+ await walk(directory);
155
+ return size;
156
+ }
157
+ function validateDependencies(root, packages, all, selected) {
158
+ for (const [relative, pkg] of packages) {
159
+ if ([pkg.bundledDependencies, pkg.bundleDependencies].some(value => value === true || Array.isArray(value) && value.length > 0))
160
+ throw new Error("bundled dependencies need an updated manifest format");
161
+ const optional = { ...Object.fromEntries(Object.entries(pkg.peerDependencies ?? {}).filter(([name]) => pkg.peerDependenciesMeta?.[name]?.optional)), ...pkg.optionalDependencies };
162
+ for (const [name, range] of Object.entries({ ...pkg.peerDependencies, ...pkg.dependencies, ...optional })) {
163
+ if (!/^(?:@[a-z0-9._-]+\/)?[a-z0-9._-]+$/i.test(name))
164
+ throw new Error("invalid dependency name");
165
+ let current = path.join(root, relative), found, incompatible = false;
166
+ for (;;) {
167
+ if (path.basename(current) !== "node_modules") {
168
+ const candidate = path.relative(root, path.join(current, "node_modules", name)).split(path.sep).join("/");
169
+ if (selected.has(candidate)) {
170
+ found = candidate;
171
+ break;
172
+ }
173
+ if (all.has(candidate))
174
+ incompatible = true;
175
+ }
176
+ if (current === root)
177
+ break;
178
+ const parent = path.dirname(current);
179
+ if (!parent.startsWith(root))
180
+ break;
181
+ current = parent;
182
+ }
183
+ if (!found) {
184
+ if (name in optional && (incompatible || pkg.peerDependenciesMeta?.[name]?.optional))
185
+ continue;
186
+ throw new Error("locked update is missing a compatible dependency");
187
+ }
188
+ if (!satisfies(packages.get(found).version, range, { includePrerelease: true }))
189
+ throw new Error("locked dependency version does not satisfy its consumer");
190
+ }
191
+ }
192
+ }
193
+ function workerResult(health) {
194
+ const status = health.status === "current" ? "current" : health.status === "pinned" ? "pinned" : health.status?.startsWith("activated ") ? "activated" : health.status?.startsWith("staged ") ? "staged" : health.status === "adjacent worker active" ? "busy" : health.status === "failed" ? "failed" : "incomplete";
195
+ return { status, detail: (health.detail ?? health.status ?? "worker did not complete").slice(0, 180) };
196
+ }
197
+ export async function runUpdate(options) {
198
+ const limits = { ...UPDATE_LIMITS, ...options.limits }, cache = path.resolve(options.cache);
199
+ const fetcher = options.fetch ?? fetch, platform = options.platform ?? process.platform, arch = options.arch ?? process.arch;
200
+ const target = updateTarget(platform, arch, options.libc), libc = target.split("-")[2];
201
+ if (path.basename(path.dirname(cache)) === "updates" && /^[a-z0-9]+-[a-z0-9]+-(?:glibc|musl|none)$/.test(path.basename(cache)) && path.basename(cache) !== target)
202
+ throw new Error("updater process target differs from its cache namespace");
203
+ await privateDirectory(cache);
204
+ const clock = options.now ?? Date.now, started = performance.now(), now = clock(), nonce = randomUUID();
205
+ const window = updateLeaseSlot(now).slice(0, -5), slot = options.manual ? `${window}-manual-${nonce}.json` : `${window}.json`;
206
+ const leases = path.join(cache, "leases");
207
+ await privateDirectory(leases);
208
+ if ((await readdir(leases)).length >= 4096) {
209
+ await writeUpdateJSON(path.join(cache, "health.json"), { lastAttemptAt: now, status: "paused", detail: "update lease metadata requires manual cleanup" });
210
+ return { status: "incomplete", detail: "update lease metadata requires manual cleanup" };
211
+ }
212
+ const lease = path.join(leases, slot);
213
+ const pending = path.join(leases, `.pending-${nonce}`);
214
+ const owner = { pid: process.pid, nonce, createdAt: now, deadlineAt: now + limits.timeoutMs };
215
+ // Publish complete owner data atomically. A crash has no ownerless-lock
216
+ // window, and a later time slot never steals or deletes an earlier lease.
217
+ await writeFile(pending, JSON.stringify(owner), { flag: "wx", mode: 0o600 });
218
+ try {
219
+ await link(pending, lease);
220
+ }
221
+ catch (error) {
222
+ if (error.code === "EEXIST")
223
+ return { status: "busy", detail: "an update worker already claimed this time window" };
224
+ throw error;
225
+ }
226
+ finally {
227
+ await rm(pending, { force: true });
228
+ }
229
+ const identity = await lstat(lease);
230
+ const controller = new AbortController();
231
+ const timer = setTimeout(() => controller.abort(new Error("update timed out")), limits.timeoutMs);
232
+ let stage, health = { lastAttemptAt: now, status: "checking", lease: slot };
233
+ const check = () => { if (controller.signal.aborted || clock() >= owner.deadlineAt || performance.now() - started >= limits.timeoutMs)
234
+ throw new Error("update timed out"); };
235
+ const assertLease = async () => {
236
+ check();
237
+ const current = await lstat(lease), data = await readUpdateJSON(lease, 4096);
238
+ if (!current.isFile() || current.isSymbolicLink() || current.ino !== identity.ino || current.dev !== identity.dev || data?.nonce !== nonce)
239
+ throw new Error("update worker lost its lease");
240
+ };
241
+ const assertPublishable = async () => {
242
+ await assertLease();
243
+ const policy = await effectiveUpdatePolicy(cache, target);
244
+ if (policy.pinnedVersion || policy.enabled === false && !options.manual)
245
+ throw new Error("update policy changed before publication");
246
+ };
247
+ try {
248
+ await assertLease();
249
+ if (window !== updateLeaseSlot(clock()).slice(0, -5)) {
250
+ health.status = "lease window passed";
251
+ return workerResult(health);
252
+ }
253
+ for (const name of await readdir(leases)) {
254
+ if (name === slot || !/^\d+(?:-manual-[0-9a-f-]{36})?\.json$/.test(name) || Math.abs(Number(name.split(/[.-]/)[0]) - Number(window)) > 1)
255
+ continue;
256
+ const other = await readUpdateJSON(path.join(leases, name), 4096);
257
+ if (!other || !Number.isSafeInteger(other.pid) || other.pid <= 0 || other.deadlineAt <= now)
258
+ continue;
259
+ let alive = true;
260
+ try {
261
+ process.kill(other.pid, 0);
262
+ }
263
+ catch (error) {
264
+ if (error.code === "ESRCH")
265
+ alive = false;
266
+ }
267
+ if (alive) {
268
+ health.status = "adjacent worker active";
269
+ return workerResult(health);
270
+ }
271
+ }
272
+ const policy = await effectiveUpdatePolicy(cache, target);
273
+ if (policy.enabled === false && !options.manual || policy.pinnedVersion) {
274
+ health.status = policy.pinnedVersion ? "pinned" : "disabled";
275
+ return workerResult(health);
276
+ }
277
+ await writeUpdateJSON(path.join(cache, "health.json"), health);
278
+ let downloaded = 0;
279
+ const download = async (url, cap) => {
280
+ await assertLease();
281
+ const response = await fetcher(registryURL(url), { redirect: "error", signal: controller.signal, headers: { accept: "application/json, application/octet-stream" } });
282
+ if (!response.ok || !response.body)
283
+ throw new Error(`public registry request failed (${response.status})`);
284
+ if (Number(response.headers.get("content-length")) > cap)
285
+ throw new Error("update download exceeds size limit");
286
+ const chunks = [];
287
+ let size = 0;
288
+ const reader = response.body.getReader();
289
+ try {
290
+ for (;;) {
291
+ const { done, value } = await reader.read();
292
+ if (done)
293
+ break;
294
+ check();
295
+ size += value.length;
296
+ downloaded += value.length;
297
+ if (size > cap || downloaded > limits.downloadBytes)
298
+ throw new Error("update downloads exceed size limit");
299
+ chunks.push(Buffer.from(value));
300
+ }
301
+ }
302
+ finally {
303
+ await reader.cancel().catch(() => undefined);
304
+ }
305
+ return Buffer.concat(chunks);
306
+ };
307
+ const metadata = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(await download(LATEST, limits.metadataBytes)));
308
+ if (metadata.name !== NAME || !stableVersion(metadata.version) || metadata.repository?.url !== "git+https://github.com/ditto-assistant/ditto-cli.git")
309
+ throw new Error("unexpected public CLI package identity");
310
+ if (!newerVersion(metadata.version, options.currentVersion)) {
311
+ health.status = "current";
312
+ return workerResult(health);
313
+ }
314
+ if (!supportsNode(metadata.engines?.node, options.nodeVersion))
315
+ throw new Error("new CLI version does not support this Node runtime");
316
+ const completed = await selectCachedRelease(cache, options.currentVersion, { pinnedVersion: metadata.version }, options.nodeVersion, target).catch(() => undefined);
317
+ if (completed) {
318
+ const receipt = await readUpdateJSON(path.join(path.dirname(completed.root), "verified.json"), 4096);
319
+ if (receipt?.rootIntegrity !== metadata.dist?.integrity)
320
+ throw new Error("immutable version integrity changed at the registry");
321
+ await writeUpdateJSON(path.join(cache, "current.json"), { version: metadata.version, installedAt: new Date().toISOString(), target }, assertPublishable);
322
+ if (options.manual)
323
+ await recordCachedActivation(cache, metadata.version, target);
324
+ health = { ...health, status: options.manual ? "activated verified cached version" : "staged verified cached version", lastSuccessAt: Date.now() };
325
+ return workerResult(health);
326
+ }
327
+ const rootArchive = await download(metadata.dist?.tarball, limits.archiveBytes);
328
+ verifyIntegrity(rootArchive, metadata.dist?.integrity);
329
+ const rootFiles = await unpackArchive(rootArchive, limits);
330
+ const pkg = parseJSON(rootFiles, "package.json"), lock = parseJSON(rootFiles, "dist/update-lock.json");
331
+ if (pkg.name !== NAME || pkg.version !== metadata.version || typeof pkg.bin !== "object" || pkg.bin.heyditto !== "dist/entry.js" || !supportsNode(pkg.engines?.node, options.nodeVersion) || lock.version !== 1 || lock.bootstrap !== 1 || lock.name !== NAME || lock.packageVersion !== pkg.version || !Array.isArray(lock.packages) || lock.packages.length > limits.packages)
332
+ throw new Error("CLI archive and dependency manifest do not match the published candidate");
333
+ for (const name of ["dist/entry.js", "dist/cli.js", "dist/update-worker.js"])
334
+ if (!rootFiles.has(name))
335
+ throw new Error("CLI archive is missing its safe launcher");
336
+ const all = new Set(), selected = new Set();
337
+ for (const item of lock.packages) {
338
+ dependencyPath(item.path);
339
+ registryURL(item.resolved);
340
+ const parts = item.path.split("/");
341
+ if (all.has(item.path) || item.name !== parts.slice(parts.lastIndexOf("node_modules") + 1).join("/"))
342
+ throw new Error("invalid or duplicate locked package identity");
343
+ all.add(item.path);
344
+ const compatible = platformMatches(item.os, platform) && platformMatches(item.cpu, arch) && platformMatches(item.libc, libc);
345
+ if (compatible)
346
+ selected.add(item.path);
347
+ else if (!item.optional)
348
+ throw new Error("required dependency does not support this platform");
349
+ }
350
+ const existingBytes = await cacheSize(cache, limits.cacheBytes, controller.signal);
351
+ stage = path.join(cache, `stage-${randomUUID()}`);
352
+ await mkdir(stage, { mode: 0o700 });
353
+ const packageRoot = path.join(stage, "package"), packages = new Map([["", pkg]]);
354
+ let unpacked = [...rootFiles.values()].reduce((n, f) => n + f.data.length, 0), fileCount = rootFiles.size;
355
+ if (unpacked > limits.unpackedBytes || existingBytes + unpacked > limits.cacheBytes || fileCount > limits.files)
356
+ throw new Error("update exceeds cache capacity; manual cleanup is needed");
357
+ await writeArchive(packageRoot, rootFiles, controller.signal);
358
+ for (const item of lock.packages) {
359
+ check();
360
+ if (!selected.has(item.path))
361
+ continue;
362
+ const archive = await download(item.resolved, limits.archiveBytes);
363
+ verifyIntegrity(archive, item.integrity);
364
+ const files = await unpackArchive(archive, limits), dependency = parseJSON(files, "package.json");
365
+ if (dependency.name !== item.name || dependency.version !== item.version)
366
+ throw new Error("dependency archive identity differs from the lock");
367
+ if (!platformMatches(dependency.os, platform) || !platformMatches(dependency.cpu, arch) || !platformMatches(dependency.libc, libc))
368
+ throw new Error("dependency archive does not support this platform");
369
+ if (dependency.engines?.node && !supportsNode(dependency.engines.node, options.nodeVersion))
370
+ throw new Error("dependency does not support this Node runtime");
371
+ unpacked += [...files.values()].reduce((n, f) => n + f.data.length, 0);
372
+ fileCount += files.size;
373
+ if (unpacked > limits.unpackedBytes || existingBytes + unpacked > limits.cacheBytes || fileCount > limits.files)
374
+ throw new Error("update exceeds cache capacity; manual cleanup is needed");
375
+ packages.set(item.path, dependency);
376
+ await writeArchive(path.join(packageRoot, item.path), files, controller.signal);
377
+ }
378
+ validateDependencies(packageRoot, packages, all, selected);
379
+ const receipt = { version: pkg.version, rootIntegrity: metadata.dist?.integrity, target, nodeRanges: [...new Set([...packages.values()].map(value => value.engines?.node).filter((range) => typeof range === "string"))] };
380
+ if (Buffer.byteLength(JSON.stringify(receipt)) > 65536)
381
+ throw new Error("update compatibility receipt exceeds its bound");
382
+ await writeUpdateJSON(path.join(stage, "verified.json"), receipt);
383
+ // Supported PTY platform packages are required by their consumer graph;
384
+ // binaries/helper executables keep only ordinary execute bits, no scripts.
385
+ check();
386
+ const latestPolicy = await effectiveUpdatePolicy(cache, target);
387
+ if (latestPolicy.enabled === false && !options.manual || latestPolicy.pinnedVersion) {
388
+ health.status = "disabled during download";
389
+ return workerResult(health);
390
+ }
391
+ await privateDirectory(path.join(cache, "versions"));
392
+ const destination = path.join(cache, "versions", pkg.version);
393
+ try {
394
+ await lstat(destination);
395
+ throw new Error("candidate version already exists; retaining the current version");
396
+ }
397
+ catch (error) {
398
+ if (error.code !== "ENOENT")
399
+ throw error;
400
+ }
401
+ await rename(stage, destination);
402
+ stage = undefined;
403
+ await writeUpdateJSON(path.join(cache, "current.json"), { version: pkg.version, installedAt: new Date().toISOString(), target }, assertPublishable);
404
+ if (options.manual)
405
+ await recordCachedActivation(cache, pkg.version, target);
406
+ health = { ...health, status: options.manual ? "activated for next invocation" : "staged for next enabled invocation", lastSuccessAt: Date.now() };
407
+ }
408
+ catch (error) {
409
+ health.status = "failed";
410
+ health.detail = (error instanceof Error ? error.message : "update failed").slice(0, 180);
411
+ }
412
+ finally {
413
+ clearTimeout(timer);
414
+ if (stage)
415
+ await rm(stage, { recursive: true, force: true }).catch(() => undefined);
416
+ await writeUpdateJSON(path.join(cache, "health.json"), health).catch(() => undefined);
417
+ // Immutable lease slots remain as bounded metadata. No active bundle or
418
+ // other worker's lease is ever removed, including after SIGKILL recovery.
419
+ }
420
+ return workerResult(health);
421
+ }
422
+ if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
423
+ const [cache, currentVersion, manual] = process.argv.slice(2);
424
+ if (cache && path.isAbsolute(cache) && stableVersion(currentVersion)) {
425
+ // The worker is a separate process even for an explicit check. A hard stop
426
+ // also bounds filesystem stalls; atomic publication keeps partial stages
427
+ // from becoming the selected version. No caller command is restarted.
428
+ const hardDeadline = setTimeout(() => process.exit(1), UPDATE_LIMITS.timeoutMs + 5000);
429
+ hardDeadline.unref();
430
+ const isManual = manual === "--manual";
431
+ const finish = (result) => {
432
+ if (isManual)
433
+ process.exitCode = updateResultExitCode(result);
434
+ if (isManual && process.send && process.connected)
435
+ process.send({ type: "manual-update-result", result }, () => { clearTimeout(hardDeadline); if (process.connected)
436
+ process.disconnect?.(); });
437
+ else
438
+ clearTimeout(hardDeadline);
439
+ };
440
+ void runUpdate({ cache, currentVersion, manual: isManual }).then(finish).catch(error => {
441
+ if (!isManual)
442
+ process.exitCode = 1;
443
+ finish({ status: "failed", detail: (error instanceof Error ? error.message : "update failed before completion").slice(0, 180) });
444
+ });
445
+ }
446
+ }
447
+ //# sourceMappingURL=update-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-worker.js","sourceRoot":"","sources":["../src/update-worker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@heyditto/cli",
3
- "version": "2.34.0",
3
+ "version": "2.36.0",
4
4
  "description": "Ditto Memory CLI — save, search, fetch, and traverse the Ditto memory graph from the shell.",
5
5
  "type": "module",
6
6
  "bin": {
7
- "ditto": "dist/cli.js",
8
- "heyditto": "dist/cli.js"
7
+ "ditto": "dist/entry.js",
8
+ "heyditto": "dist/entry.js"
9
9
  },
10
10
  "files": [
11
11
  "dist",
@@ -16,7 +16,7 @@
16
16
  "access": "public"
17
17
  },
18
18
  "scripts": {
19
- "build": "tsc -p tsconfig.json",
19
+ "build": "tsc -p tsconfig.json && node scripts/build-update-lock.mjs",
20
20
  "check": "tsc -p tsconfig.json --noEmit",
21
21
  "test": "node --test",
22
22
  "prepack": "npm run build",
@@ -41,7 +41,9 @@
41
41
  "dependencies": {
42
42
  "@modelcontextprotocol/sdk": "^1.29.0",
43
43
  "commander": "^15.0.0",
44
- "smol-toml": "^1.8.0"
44
+ "semver": "^7.8.5",
45
+ "smol-toml": "^1.8.0",
46
+ "tar": "^7.5.22"
45
47
  },
46
48
  "devDependencies": {
47
49
  "@semantic-release/commit-analyzer": "^13.0.1",
@@ -50,6 +52,7 @@
50
52
  "@semantic-release/npm": "^13.1.5",
51
53
  "@semantic-release/release-notes-generator": "^14.1.1",
52
54
  "@types/node": "^26.1.0",
55
+ "@types/semver": "^7.8.0",
53
56
  "semantic-release": "^25.0.5",
54
57
  "typescript": "^6.0.3",
55
58
  "ws": "^8.21.3"