@meterapp/car-image 1.13.0 → 1.14.1

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.
package/dist/update.js CHANGED
@@ -1,8 +1,19 @@
1
1
  import { spawn } from "node:child_process";
2
+ import { accessSync, closeSync, constants, existsSync, mkdirSync, openSync, statSync, unlinkSync, writeSync } from "node:fs";
3
+ import { posix } from "node:path";
4
+ import { fileURLToPath } from "node:url";
2
5
  import { readJsonFile, writeJsonFile } from "./config.js";
3
- import { PACKAGE_NAME } from "./version.js";
4
- export const REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}/latest`;
5
- export const UPDATE_CHECK_TTL_MS = 24 * 60 * 60 * 1000;
6
+ import { BIN_NAME, CLI_VERSION, PACKAGE_NAME } from "./version.js";
7
+ export const DEFAULT_REGISTRY = "https://registry.npmjs.org";
8
+ /** How long a registry answer stands before the next command asks again, in the background. */
9
+ export const UPDATE_CHECK_TTL_MS = 60 * 60 * 1000;
10
+ /** A notice the CLI cannot act on itself (npx, `never`, a failed install) repeats at most once a day. */
11
+ export const NOTICE_INTERVAL_MS = 24 * 60 * 60 * 1000;
12
+ /** An automatic install of one version is tried again after a day; `car-image update` tries now. */
13
+ export const INSTALL_RETRY_MS = 24 * 60 * 60 * 1000;
14
+ /** A lock older than this belongs to a worker that died. */
15
+ export const LOCK_STALE_MS = 10 * 60 * 1000;
16
+ export const INSTALL_TIMEOUT_MS = 5 * 60 * 1000;
6
17
  function parseVersion(version) {
7
18
  const match = /^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?/.exec(version.trim());
8
19
  if (!match)
@@ -32,111 +43,348 @@ export function compareVersions(a, b) {
32
43
  export function isNewer(latest, current) {
33
44
  return typeof latest === "string" && compareVersions(latest, current) > 0;
34
45
  }
35
- /** Detects the package manager that launched us from `npm_config_user_agent`. */
36
- export function detectPackageManager(env = process.env) {
37
- const agent = (env.npm_config_user_agent ?? "").toLowerCase();
38
- if (agent.startsWith("pnpm/"))
39
- return "pnpm";
40
- if (agent.startsWith("bun/"))
41
- return "bun";
42
- if (agent.startsWith("yarn/"))
43
- return "yarn";
44
- return "npm";
45
- }
46
- export function installCommand(manager, pkg = PACKAGE_NAME) {
47
- switch (manager) {
48
- case "pnpm":
49
- return { command: "pnpm", args: ["add", "-g", `${pkg}@latest`] };
50
- case "bun":
51
- return { command: "bun", args: ["add", "-g", `${pkg}@latest`] };
52
- case "yarn":
53
- return { command: "yarn", args: ["global", "add", `${pkg}@latest`] };
54
- default:
55
- return { command: "npm", args: ["install", "-g", `${pkg}@latest`] };
56
- }
57
- }
58
- /** True when running through `npx`, `pnpm dlx`, `bunx` or similar one-shot runners. */
59
- export function isNpxInvocation(env = process.env, argv1 = process.argv[1] ?? "") {
60
- if (env.npm_command === "exec")
61
- return true;
62
- if (env.npm_lifecycle_event === "npx")
63
- return true;
64
- const path = argv1.replace(/\\/g, "/");
65
- return /\/_npx\//.test(path) || /\/\.pnpm-store\/|\/dlx-[^/]*\//.test(path) || /\/\.bun\/install\/cache\//.test(path);
46
+ function truthy(value) {
47
+ return value !== undefined && value !== "" && value !== "0" && value.toLowerCase() !== "false";
66
48
  }
67
- /**
68
- * Decision matrix for the passive update check that runs before a command:
69
- * silent when nothing is newer, when there is no TTY, when `--quiet`, when
70
- * running the stdio MCP server, or when a notice was already shown today.
71
- * npx/dlx invocations only ever get a notice (they always run the latest
72
- * version anyway on the next call).
73
- */
74
- export function decideUpdate(input) {
75
- if (!isNewer(input.latest, input.current))
76
- return { action: "none", reason: "up to date" };
77
- if (input.command === "mcp" || input.command === "update")
78
- return { action: "none", reason: "command excluded" };
79
- if (!input.isTTY)
80
- return { action: "none", reason: "not a tty" };
81
- if (input.quiet)
82
- return { action: "none", reason: "quiet" };
83
- if (input.lastNoticeAt !== null && input.now - input.lastNoticeAt < UPDATE_CHECK_TTL_MS) {
84
- return { action: "none", reason: "already notified today" };
85
- }
86
- if (input.viaNpx)
87
- return { action: "notice", latest: input.latest };
88
- switch (input.autoUpdate) {
89
- case "always":
90
- return { action: "install", latest: input.latest };
91
- case "never":
92
- return { action: "notice", latest: input.latest };
93
- default:
94
- return { action: "ask", latest: input.latest };
95
- }
49
+ /** `CAR_IMAGE_NO_UPDATE_CHECK=1`, the conventional `NO_UPDATE_NOTIFIER=1`, or `CI`: no background check, install or notice. `car-image update` still works. */
50
+ export function updateChecksDisabled(env = process.env) {
51
+ return truthy(env.CAR_IMAGE_NO_UPDATE_CHECK) || truthy(env.NO_UPDATE_NOTIFIER) || truthy(env.CI);
52
+ }
53
+ /** `CAR_IMAGE_NPM_REGISTRY` for mirrors and tests; otherwise the public registry. */
54
+ export function registryUrl(env = process.env) {
55
+ return (env.CAR_IMAGE_NPM_REGISTRY?.trim() || DEFAULT_REGISTRY).replace(/\/+$/, "");
96
56
  }
97
57
  /** Latest published version from the npm registry, or null on any failure. */
98
- export async function fetchLatestVersion(fetchImpl = fetch, timeoutMs = 2500) {
58
+ export async function fetchLatestVersion(fetchImpl = fetch, timeoutMs = 2500, registry = DEFAULT_REGISTRY) {
99
59
  try {
100
- const response = await fetchImpl(REGISTRY_URL, {
60
+ const response = await fetchImpl(`${registry}/${PACKAGE_NAME}/latest`, {
101
61
  signal: AbortSignal.timeout(timeoutMs),
102
62
  headers: { Accept: "application/vnd.npm.install-v1+json, application/json" },
103
63
  });
104
64
  if (!response.ok)
105
65
  return null;
106
66
  const body = (await response.json());
107
- return typeof body.version === "string" ? body.version : null;
67
+ return typeof body.version === "string" && parseVersion(body.version) ? body.version : null;
108
68
  }
109
69
  catch {
110
70
  return null;
111
71
  }
112
72
  }
113
- /** Reads the 24h cache, refreshing it from the registry when stale or forced. */
73
+ export async function readUpdateCache(cachePath) {
74
+ const raw = await readJsonFile(cachePath);
75
+ if (!raw || typeof raw.checkedAt !== "number")
76
+ return null;
77
+ const cache = { checkedAt: raw.checkedAt, latest: typeof raw.latest === "string" ? raw.latest : null };
78
+ if (typeof raw.lastNoticeAt === "number")
79
+ cache.lastNoticeAt = raw.lastNoticeAt;
80
+ const install = raw.install;
81
+ if (install && typeof install.version === "string" && typeof install.from === "string" && typeof install.at === "number" && typeof install.ok === "boolean") {
82
+ cache.install = { version: install.version, from: install.from, at: install.at, ok: install.ok };
83
+ if (typeof install.error === "string")
84
+ cache.install.error = install.error;
85
+ if (install.announced === true)
86
+ cache.install.announced = true;
87
+ }
88
+ return cache;
89
+ }
90
+ /**
91
+ * Reads the cache, asking the registry when it is stale or forced. A lookup
92
+ * that fails keeps the last answer, so an offline machine is asked again at
93
+ * the next interval rather than on every command.
94
+ */
114
95
  export async function checkForUpdate(options) {
115
96
  const now = options.now ?? Date.now();
116
97
  const ttl = options.ttlMs ?? UPDATE_CHECK_TTL_MS;
117
- const cached = await readJsonFile(options.cachePath);
118
- if (!options.force && cached && typeof cached.checkedAt === "number" && now - cached.checkedAt < ttl) {
119
- return { latest: cached.latest ?? null, cache: cached, fromCache: true };
98
+ const cached = await readUpdateCache(options.cachePath);
99
+ if (!options.force && cached && now - cached.checkedAt < ttl) {
100
+ return { latest: cached.latest, cache: cached, fromCache: true };
120
101
  }
121
- const latest = await fetchLatestVersion(options.fetchImpl);
122
- const cache = { checkedAt: now, latest, lastNoticeAt: cached?.lastNoticeAt };
102
+ const fetched = await fetchLatestVersion(options.fetchImpl, options.timeoutMs, options.registry);
103
+ const latest = fetched ?? cached?.latest ?? null;
104
+ const cache = { ...cached, checkedAt: now, latest };
123
105
  await writeJsonFile(options.cachePath, cache, 0o600).catch(() => undefined);
124
- return { latest, cache, fromCache: false };
106
+ return { latest, cache, fromCache: fetched === null };
125
107
  }
126
108
  export async function markNoticeShown(cachePath, cache, now = Date.now()) {
127
- await writeJsonFile(cachePath, { ...cache, lastNoticeAt: now }, 0o600).catch(() => undefined);
109
+ // Re-read: a background worker may have written an install record since `cache` was read.
110
+ const current = (await readUpdateCache(cachePath)) ?? cache;
111
+ await writeJsonFile(cachePath, { ...current, lastNoticeAt: now }, 0o600).catch(() => undefined);
112
+ }
113
+ function thisModulePath() {
114
+ try {
115
+ return fileURLToPath(import.meta.url);
116
+ }
117
+ catch {
118
+ return "";
119
+ }
120
+ }
121
+ function isWritable(path) {
122
+ try {
123
+ accessSync(path, constants.W_OK);
124
+ return true;
125
+ }
126
+ catch {
127
+ return false;
128
+ }
128
129
  }
129
- /** Runs the global install in the foreground; resolves with the exit code. */
130
- export function performUpdate(manager, log) {
131
- const { command, args } = installCommand(manager);
132
- log(`Running: ${command} ${args.join(" ")}\n`);
130
+ /** npm's own entry point beside the Node binary, so the install runs without a shell and lands in that Node's prefix. */
131
+ function npmCliPath(execPath, platform, exists) {
132
+ const dir = posix.dirname(execPath.replace(/\\/g, "/"));
133
+ const candidate = platform === "win32" ? `${dir}/node_modules/npm/bin/npm-cli.js` : `${dir}/../lib/node_modules/npm/bin/npm-cli.js`;
134
+ return exists(candidate) ? posix.normalize(candidate) : null;
135
+ }
136
+ /**
137
+ * Works out from where this file lives how the CLI was installed, so an
138
+ * update goes through the same package manager into the same directory:
139
+ * a global npm install (`<prefix>/lib/node_modules`, or `<prefix>/node_modules`
140
+ * on Windows, with the `car-image` command beside it), pnpm, bun, yarn or
141
+ * Volta globals, an npx/dlx cache, a project dependency or a source build.
142
+ */
143
+ export function detectInstall(options = {}) {
144
+ const platform = options.platform ?? process.platform;
145
+ const exists = options.exists ?? existsSync;
146
+ const writable = options.writable ?? isWritable;
147
+ const spec = `${PACKAGE_NAME}@${options.version ?? "latest"}`;
148
+ const path = (options.modulePath ?? thisModulePath()).replace(/\\/g, "/");
149
+ const at = path.lastIndexOf(`/node_modules/${PACKAGE_NAME}/`);
150
+ if (at < 0)
151
+ return { method: "source", display: "rebuild it from source" };
152
+ if (path.includes("/_npx/") || /\/dlx[-/]/.test(path) || path.includes("/.bun/install/cache/")) {
153
+ return { method: "npx", display: `npx ${spec}` };
154
+ }
155
+ const nodeModules = path.slice(0, at + "/node_modules".length);
156
+ const blockedUnless = (dir) => (writable(dir) ? undefined : `${dir} is not writable by this user`);
157
+ const managed = (method, command, args) => {
158
+ const blocked = blockedUnless(nodeModules);
159
+ return { method, command, args, display: [command, ...args].join(" "), ...(blocked ? { blocked } : {}) };
160
+ };
161
+ if (path.includes("/.volta/"))
162
+ return managed("volta", "volta", ["install", spec]);
163
+ if (path.includes("/pnpm/global/") || path.includes("/.pnpm-global/"))
164
+ return managed("pnpm", "pnpm", ["add", "--global", spec]);
165
+ if (path.includes("/.bun/install/global/"))
166
+ return managed("bun", "bun", ["add", "--global", spec]);
167
+ if (path.includes("/yarn/global/"))
168
+ return managed("yarn", "yarn", ["global", "add", spec]);
169
+ const parent = posix.dirname(nodeModules);
170
+ const prefix = platform === "win32" ? parent : posix.basename(parent) === "lib" ? posix.dirname(parent) : null;
171
+ const bin = prefix === null ? null : platform === "win32" ? `${prefix}/${BIN_NAME}.cmd` : `${prefix}/bin/${BIN_NAME}`;
172
+ if (prefix === null || bin === null || !exists(bin)) {
173
+ return { method: "project", display: `npm install ${spec} in the project that depends on it` };
174
+ }
175
+ const args = ["install", "--global", "--prefix", prefix, spec];
176
+ const display = `npm install -g ${spec}`;
177
+ const blocked = blockedUnless(nodeModules) ?? blockedUnless(posix.dirname(bin));
178
+ const npmCli = npmCliPath(options.execPath ?? process.execPath, platform, exists);
179
+ const command = npmCli ? { command: options.execPath ?? process.execPath, args: [npmCli, ...args] } : { command: "npm", args };
180
+ return { method: "npm", ...command, display, ...(blocked ? { blocked } : {}) };
181
+ }
182
+ /** Quotes for cmd.exe, which `shell: true` hands the arguments to joined by spaces. */
183
+ function windowsArg(value) {
184
+ return /[\s"&|<>^]/.test(value) ? `"${value.replace(/"/g, '""')}"` : value;
185
+ }
186
+ /**
187
+ * Runs the install and resolves with its exit code; `stdio` is "inherit"
188
+ * (`car-image update`) or a file descriptor for `update.log` (the background
189
+ * worker). Never throws.
190
+ */
191
+ export function runInstall(target, stdio, timeoutMs = INSTALL_TIMEOUT_MS) {
192
+ const { command, args } = target;
193
+ if (!command || !args)
194
+ return Promise.resolve({ code: 1, error: `cannot update this copy automatically: ${target.display}` });
133
195
  return new Promise((resolve) => {
134
- const child = spawn(command, args, { stdio: "inherit", shell: process.platform === "win32" });
135
- child.on("error", (error) => {
136
- log(`Could not start ${command}: ${error.message}\n`);
137
- resolve(1);
138
- });
139
- child.on("exit", (code) => resolve(code ?? 1));
196
+ // npm through the Node binary needs no shell; a package manager's own command is a .cmd shim on Windows.
197
+ const shell = process.platform === "win32" && command !== process.execPath;
198
+ let settled = false;
199
+ const finish = (result) => {
200
+ if (settled)
201
+ return;
202
+ settled = true;
203
+ clearTimeout(timer);
204
+ resolve(result);
205
+ };
206
+ const child = spawn(command, shell ? args.map(windowsArg) : args, { stdio: typeof stdio === "number" ? ["ignore", stdio, stdio] : stdio, shell, windowsHide: true });
207
+ const timer = setTimeout(() => {
208
+ child.kill();
209
+ finish({ code: 1, error: `${target.display} took longer than ${Math.round(timeoutMs / 1000)} s` });
210
+ }, timeoutMs);
211
+ child.on("error", (error) => finish({ code: 1, error: `could not start ${command}: ${error.message}` }));
212
+ child.on("exit", (code, signal) => finish(code === 0 ? { code: 0 } : { code: code ?? 1, error: `${target.display} ${signal ? `stopped (${signal})` : `exited with ${code}`}` }));
140
213
  });
141
214
  }
215
+ // ---------------------------------------------------------------------------
216
+ // The background worker
217
+ // ---------------------------------------------------------------------------
218
+ /** Takes the update lock (exclusive create); breaks a lock left by a worker that died. */
219
+ export function acquireUpdateLock(lockPath, now = Date.now()) {
220
+ try {
221
+ mkdirSync(posix.dirname(lockPath.replace(/\\/g, "/")), { recursive: true, mode: 0o700 });
222
+ }
223
+ catch {
224
+ return false;
225
+ }
226
+ for (let attempt = 0; attempt < 2; attempt += 1) {
227
+ try {
228
+ closeSync(openSync(lockPath, "wx", 0o600));
229
+ return true;
230
+ }
231
+ catch (error) {
232
+ if (error.code !== "EEXIST")
233
+ return false;
234
+ try {
235
+ if (now - statSync(lockPath).mtimeMs < LOCK_STALE_MS)
236
+ return false;
237
+ unlinkSync(lockPath);
238
+ }
239
+ catch {
240
+ return false;
241
+ }
242
+ }
243
+ }
244
+ return false;
245
+ }
246
+ export function releaseUpdateLock(lockPath) {
247
+ try {
248
+ unlinkSync(lockPath);
249
+ }
250
+ catch {
251
+ // already gone
252
+ }
253
+ }
254
+ export function updateLockHeld(lockPath, now = Date.now()) {
255
+ try {
256
+ return now - statSync(lockPath).mtimeMs < LOCK_STALE_MS;
257
+ }
258
+ catch {
259
+ return false;
260
+ }
261
+ }
262
+ function defaultCliPath() {
263
+ try {
264
+ return fileURLToPath(new URL("./bin.js", import.meta.url));
265
+ }
266
+ catch {
267
+ return undefined;
268
+ }
269
+ }
270
+ /**
271
+ * Starts `car-image update --worker` detached, so the command that
272
+ * noticed a stale check never waits for the registry or an install. False
273
+ * when there is nothing to run (tests run the TypeScript sources).
274
+ */
275
+ export function spawnBackgroundUpdate(env = process.env, cliPath = defaultCliPath()) {
276
+ if (!cliPath || !existsSync(cliPath))
277
+ return false;
278
+ try {
279
+ const child = spawn(process.execPath, [cliPath, "update", "--worker"], { detached: true, stdio: "ignore", env: env, windowsHide: true });
280
+ child.on("error", () => undefined);
281
+ child.unref();
282
+ return true;
283
+ }
284
+ catch {
285
+ return false;
286
+ }
287
+ }
288
+ /** True when the last automatic attempt at `version` is recent enough that it should not be repeated yet. */
289
+ function attemptedRecently(cache, version, now) {
290
+ const install = cache?.install;
291
+ return Boolean(install && install.version === version && now - install.at < INSTALL_RETRY_MS);
292
+ }
293
+ async function installLogged(target, logPath) {
294
+ let fd;
295
+ try {
296
+ fd = openSync(logPath, "w", 0o600);
297
+ }
298
+ catch {
299
+ return runInstall(target, "ignore");
300
+ }
301
+ try {
302
+ writeSync(fd, `${new Date().toISOString()} car-image ${CLI_VERSION}: ${target.display}\n`);
303
+ return await runInstall(target, fd);
304
+ }
305
+ finally {
306
+ closeSync(fd);
307
+ }
308
+ }
309
+ /**
310
+ * What `car-image update --worker` does: ask the registry and, in
311
+ * `always` mode, install a newer version with the package manager that
312
+ * installed this one. The next command runs the new version. One worker at
313
+ * a time; a failed version is retried after `INSTALL_RETRY_MS`.
314
+ */
315
+ export async function runBackgroundUpdate(options) {
316
+ const now = options.now ?? Date.now();
317
+ if (!acquireUpdateLock(options.lockPath, now))
318
+ return null;
319
+ try {
320
+ const { latest, cache, fromCache } = await checkForUpdate({ cachePath: options.cachePath, now, force: true, fetchImpl: options.fetchImpl, timeoutMs: 10_000, registry: options.registry });
321
+ // Only a version the registry just named is installed: offline, the next interval asks again.
322
+ if (fromCache || !isNewer(latest, CLI_VERSION) || options.autoUpdate !== "always" || attemptedRecently(cache, latest, now))
323
+ return cache;
324
+ const target = options.target ?? detectInstall({ version: latest });
325
+ if (!target.command || target.blocked)
326
+ return cache;
327
+ const outcome = await (options.install ?? installLogged)(target, options.logPath);
328
+ const install = { version: latest, from: CLI_VERSION, at: now, ok: outcome.code === 0, ...(outcome.error ? { error: outcome.error } : {}) };
329
+ const next = { ...((await readUpdateCache(options.cachePath)) ?? cache), install };
330
+ await writeJsonFile(options.cachePath, next, 0o600).catch(() => undefined);
331
+ return next;
332
+ }
333
+ finally {
334
+ releaseUpdateLock(options.lockPath);
335
+ }
336
+ }
337
+ /**
338
+ * Decides, from the cache alone (no network), whether a command should start
339
+ * the background worker and what, if anything, to tell a person at a terminal:
340
+ * that a background update landed, or that a newer version needs them (an
341
+ * npx or project copy, `never`, a directory they cannot write, an install that
342
+ * failed). `ask` prompts before the command.
343
+ */
344
+ export function planUpdate(input) {
345
+ const { cache, current, autoUpdate, target, now } = input;
346
+ const latest = cache?.latest ?? null;
347
+ const stale = !cache || now - cache.checkedAt >= UPDATE_CHECK_TTL_MS;
348
+ const installable = Boolean(target.command) && !target.blocked;
349
+ const newer = isNewer(latest, current);
350
+ // A fresh answer that names a newer version still needs a worker when nothing has tried to install it yet.
351
+ const pending = newer && autoUpdate === "always" && installable && !attemptedRecently(cache, latest, now);
352
+ const spawnWorker = stale || pending;
353
+ const install = cache?.install;
354
+ if (install?.ok && !install.announced && compareVersions(install.version, current) === 0) {
355
+ return { spawn: spawnWorker, plan: { action: "announce", from: install.from, version: install.version } };
356
+ }
357
+ // A source build is a developer's checkout: they update it with git.
358
+ if (!newer || target.method === "source")
359
+ return { spawn: spawnWorker, plan: { action: "none" } };
360
+ if (cache?.lastNoticeAt !== undefined && now - cache.lastNoticeAt < NOTICE_INTERVAL_MS)
361
+ return { spawn: spawnWorker, plan: { action: "none" } };
362
+ const head = `Update available: car-image ${current} → ${latest}.`;
363
+ if (target.method === "npx")
364
+ return { spawn: spawnWorker, plan: { action: "notice", latest, message: `${head} \`npx ${PACKAGE_NAME}@latest\` runs it.` } };
365
+ if (!target.command)
366
+ return { spawn: spawnWorker, plan: { action: "notice", latest, message: `${head} Update it with: ${target.display}.` } };
367
+ if (target.blocked)
368
+ return { spawn: spawnWorker, plan: { action: "notice", latest, message: `${head} It cannot install itself (${target.blocked}); run: ${target.display}` } };
369
+ if (autoUpdate === "ask")
370
+ return { spawn: spawnWorker, plan: { action: "ask", latest } };
371
+ if (autoUpdate === "never")
372
+ return { spawn: spawnWorker, plan: { action: "notice", latest, message: `${head} Run \`car-image update\` (automatic updates are off: \`car-image config set autoUpdate always\`).` } };
373
+ if (install && !install.ok && install.version === latest) {
374
+ return { spawn: spawnWorker, plan: { action: "notice", latest, message: `${head} The automatic update failed (${install.error ?? "see update.log"}); run \`car-image update\`.` } };
375
+ }
376
+ // `always`, and a worker is installing it or will: nothing to say yet.
377
+ return { spawn: spawnWorker, plan: { action: "none" } };
378
+ }
379
+ /** Records an install `car-image update` ran in the foreground; the person saw it, so it is not announced again. */
380
+ export async function recordInstall(cachePath, install) {
381
+ const cache = (await readUpdateCache(cachePath)) ?? { checkedAt: install.at, latest: install.version };
382
+ await writeJsonFile(cachePath, { ...cache, install: { ...install, announced: true } }, 0o600).catch(() => undefined);
383
+ }
384
+ export async function markAnnounced(cachePath) {
385
+ const cache = await readUpdateCache(cachePath);
386
+ if (!cache?.install)
387
+ return;
388
+ await writeJsonFile(cachePath, { ...cache, install: { ...cache.install, announced: true } }, 0o600).catch(() => undefined);
389
+ }
142
390
  //# sourceMappingURL=update.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
package/dist/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /** Kept in sync with package.json by `src/version.test.ts`. */
2
- export const CLI_VERSION = "1.13.0";
2
+ export const CLI_VERSION = "1.14.1";
3
3
  export const PACKAGE_NAME = "@meterapp/car-image";
4
4
  export const BIN_NAME = "car-image";
5
5
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meterapp/car-image",
3
- "version": "1.13.0",
3
+ "version": "1.14.1",
4
4
  "description": "CLI and MCP server for the Car Image API by Meter: studio-quality, transparent-background vehicle renders for agents, apps and browsers. Login, fetch images in any paint color and make logos, mint signed URLs, decode VINs, build 3D models, request missing vehicles, run diagnostics, configure agents.",
5
5
  "license": "MIT",
6
6
  "author": "Meter <support@carimage.dev> (https://meterapp.co)",
@@ -44,13 +44,14 @@
44
44
  },
45
45
  "dependencies": {
46
46
  "@meterapp/car-image-sdk": "^1.20.0",
47
- "@modelcontextprotocol/server": "^2.0.0",
48
- "zod": "^4.5.4"
47
+ "@modelcontextprotocol/server": "^2.2.0",
48
+ "zod": "^4.6.5"
49
49
  },
50
50
  "devDependencies": {
51
- "@types/node": "^22.20.1",
52
- "typescript": "^5.9.3",
53
- "vitest": "^4.1.11"
51
+ "@types/node": "^26.6.4",
52
+ "@typescript/native": "npm:typescript@^7.0.2",
53
+ "typescript": "npm:@typescript/typescript6@^6.0.2",
54
+ "vitest": "^5.0.3"
54
55
  },
55
56
  "publishConfig": {
56
57
  "access": "public"