@meshy-ai/cli 0.1.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.
- package/.env.example +14 -0
- package/LICENSE +21 -0
- package/README.md +376 -0
- package/dist/client/endpoints/analyze-printability.d.ts +5 -0
- package/dist/client/endpoints/analyze-printability.d.ts.map +1 -0
- package/dist/client/endpoints/analyze-printability.js +7 -0
- package/dist/client/endpoints/analyze-printability.js.map +1 -0
- package/dist/client/endpoints/animate.d.ts +6 -0
- package/dist/client/endpoints/animate.d.ts.map +1 -0
- package/dist/client/endpoints/animate.js +8 -0
- package/dist/client/endpoints/animate.js.map +1 -0
- package/dist/client/endpoints/balance.d.ts +9 -0
- package/dist/client/endpoints/balance.d.ts.map +1 -0
- package/dist/client/endpoints/balance.js +27 -0
- package/dist/client/endpoints/balance.js.map +1 -0
- package/dist/client/endpoints/base.d.ts +24 -0
- package/dist/client/endpoints/base.d.ts.map +1 -0
- package/dist/client/endpoints/base.js +87 -0
- package/dist/client/endpoints/base.js.map +1 -0
- package/dist/client/endpoints/convert.d.ts +5 -0
- package/dist/client/endpoints/convert.d.ts.map +1 -0
- package/dist/client/endpoints/convert.js +7 -0
- package/dist/client/endpoints/convert.js.map +1 -0
- package/dist/client/endpoints/image-to-3d.d.ts +5 -0
- package/dist/client/endpoints/image-to-3d.d.ts.map +1 -0
- package/dist/client/endpoints/image-to-3d.js +7 -0
- package/dist/client/endpoints/image-to-3d.js.map +1 -0
- package/dist/client/endpoints/image-to-image.d.ts +5 -0
- package/dist/client/endpoints/image-to-image.d.ts.map +1 -0
- package/dist/client/endpoints/image-to-image.js +7 -0
- package/dist/client/endpoints/image-to-image.js.map +1 -0
- package/dist/client/endpoints/multi-color-print.d.ts +5 -0
- package/dist/client/endpoints/multi-color-print.d.ts.map +1 -0
- package/dist/client/endpoints/multi-color-print.js +7 -0
- package/dist/client/endpoints/multi-color-print.js.map +1 -0
- package/dist/client/endpoints/multi-image-to-3d.d.ts +5 -0
- package/dist/client/endpoints/multi-image-to-3d.d.ts.map +1 -0
- package/dist/client/endpoints/multi-image-to-3d.js +7 -0
- package/dist/client/endpoints/multi-image-to-3d.js.map +1 -0
- package/dist/client/endpoints/remesh.d.ts +5 -0
- package/dist/client/endpoints/remesh.d.ts.map +1 -0
- package/dist/client/endpoints/remesh.js +7 -0
- package/dist/client/endpoints/remesh.js.map +1 -0
- package/dist/client/endpoints/repair-printability.d.ts +5 -0
- package/dist/client/endpoints/repair-printability.d.ts.map +1 -0
- package/dist/client/endpoints/repair-printability.js +7 -0
- package/dist/client/endpoints/repair-printability.js.map +1 -0
- package/dist/client/endpoints/resize.d.ts +5 -0
- package/dist/client/endpoints/resize.d.ts.map +1 -0
- package/dist/client/endpoints/resize.js +7 -0
- package/dist/client/endpoints/resize.js.map +1 -0
- package/dist/client/endpoints/retexture.d.ts +5 -0
- package/dist/client/endpoints/retexture.d.ts.map +1 -0
- package/dist/client/endpoints/retexture.js +7 -0
- package/dist/client/endpoints/retexture.js.map +1 -0
- package/dist/client/endpoints/rigging.d.ts +6 -0
- package/dist/client/endpoints/rigging.d.ts.map +1 -0
- package/dist/client/endpoints/rigging.js +8 -0
- package/dist/client/endpoints/rigging.js.map +1 -0
- package/dist/client/endpoints/text-to-3d.d.ts +6 -0
- package/dist/client/endpoints/text-to-3d.d.ts.map +1 -0
- package/dist/client/endpoints/text-to-3d.js +8 -0
- package/dist/client/endpoints/text-to-3d.js.map +1 -0
- package/dist/client/endpoints/text-to-image.d.ts +5 -0
- package/dist/client/endpoints/text-to-image.d.ts.map +1 -0
- package/dist/client/endpoints/text-to-image.js +7 -0
- package/dist/client/endpoints/text-to-image.js.map +1 -0
- package/dist/client/errors.d.ts +23 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/errors.js +82 -0
- package/dist/client/errors.js.map +1 -0
- package/dist/client/index.d.ts +48 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +147 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/types.d.ts +298 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +97 -0
- package/dist/client/types.js.map +1 -0
- package/dist/cmd/analyze-printability.d.ts +8 -0
- package/dist/cmd/analyze-printability.d.ts.map +1 -0
- package/dist/cmd/analyze-printability.js +34 -0
- package/dist/cmd/analyze-printability.js.map +1 -0
- package/dist/cmd/animate.d.ts +9 -0
- package/dist/cmd/animate.d.ts.map +1 -0
- package/dist/cmd/animate.js +51 -0
- package/dist/cmd/animate.js.map +1 -0
- package/dist/cmd/api.d.ts +9 -0
- package/dist/cmd/api.d.ts.map +1 -0
- package/dist/cmd/api.js +50 -0
- package/dist/cmd/api.js.map +1 -0
- package/dist/cmd/auth.d.ts +19 -0
- package/dist/cmd/auth.d.ts.map +1 -0
- package/dist/cmd/auth.js +583 -0
- package/dist/cmd/auth.js.map +1 -0
- package/dist/cmd/balance.d.ts +6 -0
- package/dist/cmd/balance.d.ts.map +1 -0
- package/dist/cmd/balance.js +14 -0
- package/dist/cmd/balance.js.map +1 -0
- package/dist/cmd/convert.d.ts +8 -0
- package/dist/cmd/convert.d.ts.map +1 -0
- package/dist/cmd/convert.js +40 -0
- package/dist/cmd/convert.js.map +1 -0
- package/dist/cmd/delete.d.ts +7 -0
- package/dist/cmd/delete.d.ts.map +1 -0
- package/dist/cmd/delete.js +19 -0
- package/dist/cmd/delete.js.map +1 -0
- package/dist/cmd/image-to-3d.d.ts +12 -0
- package/dist/cmd/image-to-3d.d.ts.map +1 -0
- package/dist/cmd/image-to-3d.js +97 -0
- package/dist/cmd/image-to-3d.js.map +1 -0
- package/dist/cmd/image-to-image.d.ts +5 -0
- package/dist/cmd/image-to-image.d.ts.map +1 -0
- package/dist/cmd/image-to-image.js +56 -0
- package/dist/cmd/image-to-image.js.map +1 -0
- package/dist/cmd/make.d.ts +31 -0
- package/dist/cmd/make.d.ts.map +1 -0
- package/dist/cmd/make.js +195 -0
- package/dist/cmd/make.js.map +1 -0
- package/dist/cmd/multi-color-print.d.ts +6 -0
- package/dist/cmd/multi-color-print.d.ts.map +1 -0
- package/dist/cmd/multi-color-print.js +44 -0
- package/dist/cmd/multi-color-print.js.map +1 -0
- package/dist/cmd/multi-image-to-3d.d.ts +5 -0
- package/dist/cmd/multi-image-to-3d.d.ts.map +1 -0
- package/dist/cmd/multi-image-to-3d.js +72 -0
- package/dist/cmd/multi-image-to-3d.js.map +1 -0
- package/dist/cmd/remesh.d.ts +8 -0
- package/dist/cmd/remesh.d.ts.map +1 -0
- package/dist/cmd/remesh.js +49 -0
- package/dist/cmd/remesh.js.map +1 -0
- package/dist/cmd/repair-printability.d.ts +7 -0
- package/dist/cmd/repair-printability.d.ts.map +1 -0
- package/dist/cmd/repair-printability.js +32 -0
- package/dist/cmd/repair-printability.js.map +1 -0
- package/dist/cmd/resize.d.ts +8 -0
- package/dist/cmd/resize.d.ts.map +1 -0
- package/dist/cmd/resize.js +51 -0
- package/dist/cmd/resize.js.map +1 -0
- package/dist/cmd/resources.d.ts +18 -0
- package/dist/cmd/resources.d.ts.map +1 -0
- package/dist/cmd/resources.js +59 -0
- package/dist/cmd/resources.js.map +1 -0
- package/dist/cmd/retexture.d.ts +5 -0
- package/dist/cmd/retexture.d.ts.map +1 -0
- package/dist/cmd/retexture.js +64 -0
- package/dist/cmd/retexture.js.map +1 -0
- package/dist/cmd/rigging.d.ts +6 -0
- package/dist/cmd/rigging.d.ts.map +1 -0
- package/dist/cmd/rigging.js +40 -0
- package/dist/cmd/rigging.js.map +1 -0
- package/dist/cmd/text-to-3d.d.ts +14 -0
- package/dist/cmd/text-to-3d.d.ts.map +1 -0
- package/dist/cmd/text-to-3d.js +76 -0
- package/dist/cmd/text-to-3d.js.map +1 -0
- package/dist/cmd/text-to-image.d.ts +5 -0
- package/dist/cmd/text-to-image.d.ts.map +1 -0
- package/dist/cmd/text-to-image.js +53 -0
- package/dist/cmd/text-to-image.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/config.d.ts +46 -0
- package/dist/internal/config.d.ts.map +1 -0
- package/dist/internal/config.js +94 -0
- package/dist/internal/config.js.map +1 -0
- package/dist/internal/credentials.d.ts +106 -0
- package/dist/internal/credentials.d.ts.map +1 -0
- package/dist/internal/credentials.js +297 -0
- package/dist/internal/credentials.js.map +1 -0
- package/dist/internal/device-state.d.ts +45 -0
- package/dist/internal/device-state.d.ts.map +1 -0
- package/dist/internal/device-state.js +180 -0
- package/dist/internal/device-state.js.map +1 -0
- package/dist/internal/device.d.ts +79 -0
- package/dist/internal/device.d.ts.map +1 -0
- package/dist/internal/device.js +374 -0
- package/dist/internal/device.js.map +1 -0
- package/dist/internal/download.d.ts +34 -0
- package/dist/internal/download.d.ts.map +1 -0
- package/dist/internal/download.js +283 -0
- package/dist/internal/download.js.map +1 -0
- package/dist/internal/errors.d.ts +66 -0
- package/dist/internal/errors.d.ts.map +1 -0
- package/dist/internal/errors.js +169 -0
- package/dist/internal/errors.js.map +1 -0
- package/dist/internal/file-input.d.ts +24 -0
- package/dist/internal/file-input.d.ts.map +1 -0
- package/dist/internal/file-input.js +164 -0
- package/dist/internal/file-input.js.map +1 -0
- package/dist/internal/flags.d.ts +9 -0
- package/dist/internal/flags.d.ts.map +1 -0
- package/dist/internal/flags.js +31 -0
- package/dist/internal/flags.js.map +1 -0
- package/dist/internal/global-options.d.ts +16 -0
- package/dist/internal/global-options.d.ts.map +1 -0
- package/dist/internal/global-options.js +57 -0
- package/dist/internal/global-options.js.map +1 -0
- package/dist/internal/headless.d.ts +69 -0
- package/dist/internal/headless.d.ts.map +1 -0
- package/dist/internal/headless.js +101 -0
- package/dist/internal/headless.js.map +1 -0
- package/dist/internal/image-models.d.ts +20 -0
- package/dist/internal/image-models.d.ts.map +1 -0
- package/dist/internal/image-models.js +40 -0
- package/dist/internal/image-models.js.map +1 -0
- package/dist/internal/logger.d.ts +14 -0
- package/dist/internal/logger.d.ts.map +1 -0
- package/dist/internal/logger.js +42 -0
- package/dist/internal/logger.js.map +1 -0
- package/dist/internal/make-plan.d.ts +41 -0
- package/dist/internal/make-plan.d.ts.map +1 -0
- package/dist/internal/make-plan.js +67 -0
- package/dist/internal/make-plan.js.map +1 -0
- package/dist/internal/oauth.d.ts +95 -0
- package/dist/internal/oauth.d.ts.map +1 -0
- package/dist/internal/oauth.js +365 -0
- package/dist/internal/oauth.js.map +1 -0
- package/dist/internal/output.d.ts +15 -0
- package/dist/internal/output.d.ts.map +1 -0
- package/dist/internal/output.js +66 -0
- package/dist/internal/output.js.map +1 -0
- package/dist/internal/payload.d.ts +9 -0
- package/dist/internal/payload.d.ts.map +1 -0
- package/dist/internal/payload.js +42 -0
- package/dist/internal/payload.js.map +1 -0
- package/dist/internal/poll.d.ts +17 -0
- package/dist/internal/poll.d.ts.map +1 -0
- package/dist/internal/poll.js +27 -0
- package/dist/internal/poll.js.map +1 -0
- package/dist/internal/pricing.d.ts +23 -0
- package/dist/internal/pricing.d.ts.map +1 -0
- package/dist/internal/pricing.js +24 -0
- package/dist/internal/pricing.js.map +1 -0
- package/dist/internal/report.d.ts +40 -0
- package/dist/internal/report.d.ts.map +1 -0
- package/dist/internal/report.js +48 -0
- package/dist/internal/report.js.map +1 -0
- package/dist/internal/runtime.d.ts +66 -0
- package/dist/internal/runtime.d.ts.map +1 -0
- package/dist/internal/runtime.js +160 -0
- package/dist/internal/runtime.js.map +1 -0
- package/dist/internal/task-command.d.ts +39 -0
- package/dist/internal/task-command.d.ts.map +1 -0
- package/dist/internal/task-command.js +189 -0
- package/dist/internal/task-command.js.map +1 -0
- package/dist/internal/update-notifier.d.ts +160 -0
- package/dist/internal/update-notifier.d.ts.map +1 -0
- package/dist/internal/update-notifier.js +445 -0
- package/dist/internal/update-notifier.js.map +1 -0
- package/dist/internal/user-agent.d.ts +6 -0
- package/dist/internal/user-agent.d.ts.map +1 -0
- package/dist/internal/user-agent.js +7 -0
- package/dist/internal/user-agent.js.map +1 -0
- package/dist/internal/version.d.ts +2 -0
- package/dist/internal/version.d.ts.map +1 -0
- package/dist/internal/version.js +11 -0
- package/dist/internal/version.js.map +1 -0
- package/dist/root.d.ts +13 -0
- package/dist/root.d.ts.map +1 -0
- package/dist/root.js +148 -0
- package/dist/root.js.map +1 -0
- package/package.json +65 -0
- package/skills/meshy-cli/SKILL.md +99 -0
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update notifier — two-channel design.
|
|
3
|
+
*
|
|
4
|
+
* Channel 1 (agents / machines): JSON outputs carry `_notice.update` when a
|
|
5
|
+
* newer version is available. Injected by attachUpdateNotice() in output.ts
|
|
6
|
+
* and report.ts.
|
|
7
|
+
*
|
|
8
|
+
* Channel 2 (humans on TTY): a single stderr line printed by
|
|
9
|
+
* printHumanUpdateHint() after emit() renders its output.
|
|
10
|
+
*
|
|
11
|
+
* Hard rule: this module MUST NEVER slow down, hang, or break the main
|
|
12
|
+
* command. Network I/O runs in a detached child process (see refreshCache)
|
|
13
|
+
* so a hung registry cannot delay process exit. All public functions are
|
|
14
|
+
* synchronous and read only from the local cache file.
|
|
15
|
+
*/
|
|
16
|
+
import { mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
17
|
+
import { homedir } from "node:os";
|
|
18
|
+
import { dirname, join } from "node:path";
|
|
19
|
+
import { spawn } from "node:child_process";
|
|
20
|
+
import { VERSION } from "./version.js";
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Constants
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
export const REGISTRY_URL = "https://registry.npmjs.org/meshy-cli/latest";
|
|
25
|
+
export const FETCH_TIMEOUT_MS = 15_000;
|
|
26
|
+
export const MAX_RESPONSE_BYTES = 256 * 1024;
|
|
27
|
+
export const CACHE_TTL_MS = 24 * 60 * 60 * 1000;
|
|
28
|
+
export const UPDATE_COMMAND = "npm i -g meshy-cli@latest";
|
|
29
|
+
/**
|
|
30
|
+
* Hidden self-command used for the detached background refresh child.
|
|
31
|
+
* CRITICAL: the child must check argv for this token and return immediately
|
|
32
|
+
* to prevent an infinite spawn chain.
|
|
33
|
+
*/
|
|
34
|
+
export const REFRESH_COMMAND = "__refresh-update-cache";
|
|
35
|
+
/** Opt-out env var. Any non-empty value disables all update checks. */
|
|
36
|
+
const NO_UPDATE_VAR = "MESHY_CLI_NO_UPDATE_NOTIFIER";
|
|
37
|
+
/** CI environment variables — any non-empty value triggers skip. */
|
|
38
|
+
const CI_VARS = ["CI", "GITHUB_ACTIONS", "BUILD_NUMBER", "RUN_ID"];
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
// Path helpers
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
/** Returns the path to the update-state cache file. */
|
|
43
|
+
export function stateFilePath() {
|
|
44
|
+
return join(homedir(), ".config", "meshy", "update-state.json");
|
|
45
|
+
}
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// shouldSkip
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
/**
|
|
50
|
+
* Returns true when the update check should be skipped entirely.
|
|
51
|
+
* Skips when:
|
|
52
|
+
* - MESHY_CLI_NO_UPDATE_NOTIFIER is a non-empty string
|
|
53
|
+
* - any CI env var (CI, GITHUB_ACTIONS, BUILD_NUMBER, RUN_ID) is non-empty
|
|
54
|
+
* - version contains "-dev"
|
|
55
|
+
* - version matches a git-describe suffix (e.g. 0.1.0-5-gdeadbee)
|
|
56
|
+
*/
|
|
57
|
+
export function shouldSkip(env = process.env, version = VERSION) {
|
|
58
|
+
if (env[NO_UPDATE_VAR])
|
|
59
|
+
return true;
|
|
60
|
+
for (const v of CI_VARS) {
|
|
61
|
+
if (env[v])
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
if (version.includes("-dev"))
|
|
65
|
+
return true;
|
|
66
|
+
if (/-\d+-g[0-9a-f]{7,}/.test(version))
|
|
67
|
+
return true;
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
// compareVersions
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
/**
|
|
74
|
+
* Semver 2.0.0-compliant comparison. Returns -1 if a < b, 0 if equal, 1 if a > b.
|
|
75
|
+
*
|
|
76
|
+
* Rules:
|
|
77
|
+
* - strips leading "v"
|
|
78
|
+
* - strips "+build" metadata (build metadata is ignored per semver §10)
|
|
79
|
+
* - splits prerelease on first "-"
|
|
80
|
+
* - compares numeric major/minor/patch (missing segments → 0, non-numeric → 0)
|
|
81
|
+
* - equal numerics: release > prerelease (semver §11.3)
|
|
82
|
+
* - both prereleases: compare dot-separated identifiers left-to-right (semver §11.4):
|
|
83
|
+
* numeric identifiers compare numerically
|
|
84
|
+
* alphanumeric identifiers compare lexically (ASCII)
|
|
85
|
+
* numeric < alphanumeric
|
|
86
|
+
* if all shared identifiers equal, shorter set has LOWER precedence
|
|
87
|
+
*/
|
|
88
|
+
export function compareVersions(a, b) {
|
|
89
|
+
const parse = (v) => {
|
|
90
|
+
// strip leading v
|
|
91
|
+
let s = v.startsWith("v") ? v.slice(1) : v;
|
|
92
|
+
// strip build metadata (ignored per semver §10)
|
|
93
|
+
const plusIdx = s.indexOf("+");
|
|
94
|
+
if (plusIdx !== -1)
|
|
95
|
+
s = s.slice(0, plusIdx);
|
|
96
|
+
// split prerelease on first "-"
|
|
97
|
+
const dashIdx = s.indexOf("-");
|
|
98
|
+
let core;
|
|
99
|
+
let pre;
|
|
100
|
+
if (dashIdx !== -1) {
|
|
101
|
+
core = s.slice(0, dashIdx);
|
|
102
|
+
pre = s.slice(dashIdx + 1).split(".");
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
core = s;
|
|
106
|
+
pre = null;
|
|
107
|
+
}
|
|
108
|
+
const parts = core.split(".");
|
|
109
|
+
const nums = [0, 1, 2].map((i) => {
|
|
110
|
+
const n = parseInt(parts[i] ?? "0", 10);
|
|
111
|
+
return isNaN(n) ? 0 : n;
|
|
112
|
+
});
|
|
113
|
+
return { nums, pre };
|
|
114
|
+
};
|
|
115
|
+
const pa = parse(a);
|
|
116
|
+
const pb = parse(b);
|
|
117
|
+
// Compare major/minor/patch numerically
|
|
118
|
+
for (let i = 0; i < 3; i++) {
|
|
119
|
+
const na = pa.nums[i];
|
|
120
|
+
const nb = pb.nums[i];
|
|
121
|
+
if (na < nb)
|
|
122
|
+
return -1;
|
|
123
|
+
if (na > nb)
|
|
124
|
+
return 1;
|
|
125
|
+
}
|
|
126
|
+
// numeric parts equal — compare prerelease (semver §11.3 and §11.4)
|
|
127
|
+
if (pa.pre === null && pb.pre === null)
|
|
128
|
+
return 0;
|
|
129
|
+
if (pa.pre === null)
|
|
130
|
+
return 1; // release > prerelease
|
|
131
|
+
if (pb.pre === null)
|
|
132
|
+
return -1; // prerelease < release
|
|
133
|
+
// Both have prerelease — compare dot-separated identifiers left-to-right
|
|
134
|
+
const len = Math.max(pa.pre.length, pb.pre.length);
|
|
135
|
+
for (let i = 0; i < len; i++) {
|
|
136
|
+
const ia = pa.pre[i];
|
|
137
|
+
const ib = pb.pre[i];
|
|
138
|
+
// Shorter set has lower precedence (semver §11.4.4)
|
|
139
|
+
if (ia === undefined)
|
|
140
|
+
return -1;
|
|
141
|
+
if (ib === undefined)
|
|
142
|
+
return 1;
|
|
143
|
+
const na = /^\d+$/.test(ia) ? parseInt(ia, 10) : NaN;
|
|
144
|
+
const nb = /^\d+$/.test(ib) ? parseInt(ib, 10) : NaN;
|
|
145
|
+
if (!isNaN(na) && !isNaN(nb)) {
|
|
146
|
+
// Both numeric — compare numerically
|
|
147
|
+
if (na < nb)
|
|
148
|
+
return -1;
|
|
149
|
+
if (na > nb)
|
|
150
|
+
return 1;
|
|
151
|
+
}
|
|
152
|
+
else if (!isNaN(na)) {
|
|
153
|
+
// Numeric < alphanumeric (semver §11.4.1)
|
|
154
|
+
return -1;
|
|
155
|
+
}
|
|
156
|
+
else if (!isNaN(nb)) {
|
|
157
|
+
return 1;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
// Both alphanumeric — compare lexically (ASCII)
|
|
161
|
+
if (ia < ib)
|
|
162
|
+
return -1;
|
|
163
|
+
if (ia > ib)
|
|
164
|
+
return 1;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return 0;
|
|
168
|
+
}
|
|
169
|
+
// ---------------------------------------------------------------------------
|
|
170
|
+
// buildNotice
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
/**
|
|
173
|
+
* Returns an UpdateNotice if latest > current, otherwise null.
|
|
174
|
+
*/
|
|
175
|
+
export function buildNotice(latest, current = VERSION) {
|
|
176
|
+
if (compareVersions(latest, current) <= 0)
|
|
177
|
+
return null;
|
|
178
|
+
return {
|
|
179
|
+
current,
|
|
180
|
+
latest,
|
|
181
|
+
message: `meshy-cli ${latest} available (current ${current}), run: ${UPDATE_COMMAND}`,
|
|
182
|
+
command: UPDATE_COMMAND,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
// ---------------------------------------------------------------------------
|
|
186
|
+
// checkCached
|
|
187
|
+
// ---------------------------------------------------------------------------
|
|
188
|
+
/**
|
|
189
|
+
* Pure read from the cache file — no network, no TTL check.
|
|
190
|
+
*
|
|
191
|
+
* Note: a newer-version fact does not expire. TTL gates only the network
|
|
192
|
+
* refresh (isCacheStale). Once we know a newer version exists, we keep
|
|
193
|
+
* surfacing the notice until the user upgrades.
|
|
194
|
+
*
|
|
195
|
+
* Returns null on missing/corrupt file, missing latest_version, or when
|
|
196
|
+
* latest is not newer than current. Never throws.
|
|
197
|
+
*/
|
|
198
|
+
export function checkCached(stateFile = stateFilePath(), current = VERSION) {
|
|
199
|
+
try {
|
|
200
|
+
const raw = readFileSync(stateFile, "utf8");
|
|
201
|
+
const state = JSON.parse(raw);
|
|
202
|
+
if (typeof state.latest_version !== "string" || !state.latest_version)
|
|
203
|
+
return null;
|
|
204
|
+
return buildNotice(state.latest_version, current);
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// ---------------------------------------------------------------------------
|
|
211
|
+
// isCacheStale
|
|
212
|
+
// ---------------------------------------------------------------------------
|
|
213
|
+
/**
|
|
214
|
+
* Returns true when the cache is missing, corrupt, has no checked_at, or
|
|
215
|
+
* is older than CACHE_TTL_MS.
|
|
216
|
+
*/
|
|
217
|
+
export function isCacheStale(stateFile = stateFilePath(), now = Date.now()) {
|
|
218
|
+
try {
|
|
219
|
+
const raw = readFileSync(stateFile, "utf8");
|
|
220
|
+
const state = JSON.parse(raw);
|
|
221
|
+
if (typeof state.checked_at !== "number")
|
|
222
|
+
return true;
|
|
223
|
+
if (state.checked_at > now)
|
|
224
|
+
return true; // clock-skewed or corrupt future timestamp
|
|
225
|
+
return now - state.checked_at > CACHE_TTL_MS;
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// ---------------------------------------------------------------------------
|
|
232
|
+
// getUpdateNotice
|
|
233
|
+
// ---------------------------------------------------------------------------
|
|
234
|
+
/**
|
|
235
|
+
* Returns the cached update notice if applicable, or null.
|
|
236
|
+
* This is what emit() and report paths call — synchronous, never throws.
|
|
237
|
+
*/
|
|
238
|
+
export function getUpdateNotice() {
|
|
239
|
+
if (shouldSkip())
|
|
240
|
+
return null;
|
|
241
|
+
return checkCached();
|
|
242
|
+
}
|
|
243
|
+
// ---------------------------------------------------------------------------
|
|
244
|
+
// attachUpdateNotice
|
|
245
|
+
// ---------------------------------------------------------------------------
|
|
246
|
+
/**
|
|
247
|
+
* Merges the update notice into an existing `_notice` value.
|
|
248
|
+
* If existing is a plain object, spreads it and adds `update`.
|
|
249
|
+
* If existing is a non-object (string/number/array/null/undefined), replaces it.
|
|
250
|
+
*/
|
|
251
|
+
function mergeNotice(existing, notice) {
|
|
252
|
+
if (existing !== null && existing !== undefined && typeof existing === "object" && !Array.isArray(existing)) {
|
|
253
|
+
return { ...existing, update: notice };
|
|
254
|
+
}
|
|
255
|
+
return { update: notice };
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Injects the update notice into a value before JSON serialization.
|
|
259
|
+
*
|
|
260
|
+
* Injection rules:
|
|
261
|
+
* - notice null → value unchanged
|
|
262
|
+
* - format "pretty" → unchanged (humans get the stderr line instead)
|
|
263
|
+
* - Array + format "ndjson": if non-empty and first element is a plain
|
|
264
|
+
* object, return new array with first element replaced by
|
|
265
|
+
* { ...first, _notice: { update: notice } }. Attaches ONCE on the first
|
|
266
|
+
* line only — never per-line.
|
|
267
|
+
* - Array + any other format (e.g. "json") → unchanged. A JSON array has
|
|
268
|
+
* no clean metadata slot without breaking the schema, so we leave it alone.
|
|
269
|
+
* - plain object → { ...value, _notice: { update: notice } }
|
|
270
|
+
* - anything else (string/number/null) → unchanged
|
|
271
|
+
*/
|
|
272
|
+
export function attachUpdateNotice(value, format, notice) {
|
|
273
|
+
if (notice === null)
|
|
274
|
+
return value;
|
|
275
|
+
if (format === "pretty")
|
|
276
|
+
return value;
|
|
277
|
+
if (Array.isArray(value)) {
|
|
278
|
+
if (format === "ndjson" && value.length > 0) {
|
|
279
|
+
const first = value[0];
|
|
280
|
+
if (first !== null && typeof first === "object" && !Array.isArray(first)) {
|
|
281
|
+
const decorated = { ...first, _notice: mergeNotice(first["_notice"], notice) };
|
|
282
|
+
return [decorated, ...value.slice(1)];
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return value;
|
|
286
|
+
}
|
|
287
|
+
if (value !== null && typeof value === "object" && !Array.isArray(value)) {
|
|
288
|
+
const obj = value;
|
|
289
|
+
return { ...obj, _notice: mergeNotice(obj["_notice"], notice) };
|
|
290
|
+
}
|
|
291
|
+
return value;
|
|
292
|
+
}
|
|
293
|
+
// ---------------------------------------------------------------------------
|
|
294
|
+
// printHumanUpdateHint
|
|
295
|
+
// ---------------------------------------------------------------------------
|
|
296
|
+
/**
|
|
297
|
+
* Writes the update message to stderr ONLY when all three of
|
|
298
|
+
* io.stdout/io.stderr/io.stdin have truthy isTTY (i.e. a fully interactive
|
|
299
|
+
* terminal). NEVER writes to stdout — stdout must stay machine-parseable.
|
|
300
|
+
*
|
|
301
|
+
* Returns true if the hint was written, false otherwise.
|
|
302
|
+
*/
|
|
303
|
+
export function printHumanUpdateHint(notice, io) {
|
|
304
|
+
if (!notice)
|
|
305
|
+
return false;
|
|
306
|
+
if (!io.stdout.isTTY || !io.stderr.isTTY || !io.stdin.isTTY)
|
|
307
|
+
return false;
|
|
308
|
+
io.stderr.write(`${notice.message}\n`);
|
|
309
|
+
return true;
|
|
310
|
+
}
|
|
311
|
+
// ---------------------------------------------------------------------------
|
|
312
|
+
// writeState
|
|
313
|
+
// ---------------------------------------------------------------------------
|
|
314
|
+
/**
|
|
315
|
+
* Atomically writes the update state to disk.
|
|
316
|
+
* Uses a tmp file + rename to avoid torn JSON from concurrent CLI runs.
|
|
317
|
+
*/
|
|
318
|
+
export function writeState(state, file = stateFilePath()) {
|
|
319
|
+
mkdirSync(dirname(file), { recursive: true });
|
|
320
|
+
const tmp = `${file}.tmp-${process.pid}`;
|
|
321
|
+
writeFileSync(tmp, JSON.stringify(state), "utf8");
|
|
322
|
+
renameSync(tmp, file);
|
|
323
|
+
}
|
|
324
|
+
// ---------------------------------------------------------------------------
|
|
325
|
+
// fetchLatestVersion
|
|
326
|
+
// ---------------------------------------------------------------------------
|
|
327
|
+
/**
|
|
328
|
+
* Fetches the latest version from the npm registry.
|
|
329
|
+
* Throws on any failure — callers must swallow.
|
|
330
|
+
*/
|
|
331
|
+
export async function fetchLatestVersion(registryUrl = REGISTRY_URL, timeoutMs = FETCH_TIMEOUT_MS) {
|
|
332
|
+
const res = await fetch(registryUrl, {
|
|
333
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
334
|
+
headers: { accept: "application/json" },
|
|
335
|
+
});
|
|
336
|
+
if (!res.ok) {
|
|
337
|
+
throw new Error(`registry responded ${res.status}`);
|
|
338
|
+
}
|
|
339
|
+
// Read body with a hard 256KB cap
|
|
340
|
+
let parsed;
|
|
341
|
+
if (res.body) {
|
|
342
|
+
const reader = res.body.getReader();
|
|
343
|
+
const chunks = [];
|
|
344
|
+
let total = 0;
|
|
345
|
+
while (true) {
|
|
346
|
+
const { done, value } = await reader.read();
|
|
347
|
+
if (done)
|
|
348
|
+
break;
|
|
349
|
+
if (value) {
|
|
350
|
+
total += value.length;
|
|
351
|
+
if (total > MAX_RESPONSE_BYTES) {
|
|
352
|
+
await reader.cancel();
|
|
353
|
+
throw new Error("registry response too large");
|
|
354
|
+
}
|
|
355
|
+
chunks.push(value);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
const combined = new Uint8Array(total);
|
|
359
|
+
let offset = 0;
|
|
360
|
+
for (const chunk of chunks) {
|
|
361
|
+
combined.set(chunk, offset);
|
|
362
|
+
offset += chunk.length;
|
|
363
|
+
}
|
|
364
|
+
const text = new TextDecoder().decode(combined);
|
|
365
|
+
parsed = JSON.parse(text);
|
|
366
|
+
}
|
|
367
|
+
else {
|
|
368
|
+
const text = await res.text();
|
|
369
|
+
if (text.length > MAX_RESPONSE_BYTES) {
|
|
370
|
+
throw new Error("registry response too large");
|
|
371
|
+
}
|
|
372
|
+
parsed = JSON.parse(text);
|
|
373
|
+
}
|
|
374
|
+
if (typeof parsed.version !== "string" || !parsed.version) {
|
|
375
|
+
throw new Error("registry response missing version field");
|
|
376
|
+
}
|
|
377
|
+
return parsed.version;
|
|
378
|
+
}
|
|
379
|
+
// ---------------------------------------------------------------------------
|
|
380
|
+
// runRefreshCommand
|
|
381
|
+
// ---------------------------------------------------------------------------
|
|
382
|
+
/**
|
|
383
|
+
* Entry point for the hidden background child command.
|
|
384
|
+
* Fetches the latest version and writes it to the cache.
|
|
385
|
+
* Must never throw — the child always exits 0.
|
|
386
|
+
*/
|
|
387
|
+
export async function runRefreshCommand() {
|
|
388
|
+
if (shouldSkip())
|
|
389
|
+
return;
|
|
390
|
+
try {
|
|
391
|
+
// @internal: MESHY_CLI_UPDATE_REGISTRY_URL is a test hook — not documented
|
|
392
|
+
const url = process.env["MESHY_CLI_UPDATE_REGISTRY_URL"] ?? REGISTRY_URL;
|
|
393
|
+
const latest = await fetchLatestVersion(url);
|
|
394
|
+
writeState({ latest_version: latest, checked_at: Date.now() });
|
|
395
|
+
}
|
|
396
|
+
catch {
|
|
397
|
+
// swallow: offline / 500 / timeout / corrupt must never surface
|
|
398
|
+
// On failure write NOTHING — next stale invocation retries
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
// ---------------------------------------------------------------------------
|
|
402
|
+
// refreshCache
|
|
403
|
+
// ---------------------------------------------------------------------------
|
|
404
|
+
/**
|
|
405
|
+
* Fire-and-forget spawner. Spawns a detached child process to refresh the
|
|
406
|
+
* update cache in the background. NEVER throws, never awaits anything.
|
|
407
|
+
*
|
|
408
|
+
* Why a detached child instead of in-process fetch:
|
|
409
|
+
* An in-flight undici/fetch keeps the Node event loop alive, so an
|
|
410
|
+
* in-process fire-and-forget fetch would delay process exit by up to the
|
|
411
|
+
* 15s timeout — violating "never slow down the main command". A detached
|
|
412
|
+
* child is fully independent and the parent can exit immediately.
|
|
413
|
+
*/
|
|
414
|
+
export function refreshCache(deps) {
|
|
415
|
+
try {
|
|
416
|
+
const env = deps?.env ?? process.env;
|
|
417
|
+
const argv = deps?.argv ?? process.argv;
|
|
418
|
+
const scriptPath = deps?.scriptPath ?? process.argv[1];
|
|
419
|
+
const stateFile = deps?.stateFile ?? stateFilePath();
|
|
420
|
+
const spawnImpl = deps?.spawnImpl ?? spawn;
|
|
421
|
+
// 1. Skip if opted out or CI
|
|
422
|
+
if (shouldSkip(env))
|
|
423
|
+
return;
|
|
424
|
+
// 2. CRITICAL: prevent infinite spawn chain — if we ARE the child, return
|
|
425
|
+
if (argv.includes(REFRESH_COMMAND))
|
|
426
|
+
return;
|
|
427
|
+
// 3. Skip if cache is still fresh
|
|
428
|
+
if (!isCacheStale(stateFile))
|
|
429
|
+
return;
|
|
430
|
+
// 4. Need a script path to spawn
|
|
431
|
+
if (!scriptPath)
|
|
432
|
+
return;
|
|
433
|
+
// 5. Spawn detached child
|
|
434
|
+
const child = spawnImpl(process.execPath, [scriptPath, REFRESH_COMMAND], {
|
|
435
|
+
detached: true,
|
|
436
|
+
stdio: "ignore",
|
|
437
|
+
});
|
|
438
|
+
child.on("error", () => { });
|
|
439
|
+
child.unref();
|
|
440
|
+
}
|
|
441
|
+
catch {
|
|
442
|
+
// Never propagate — this is fire-and-forget
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
//# sourceMappingURL=update-notifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-notifier.js","sourceRoot":"","sources":["../../src/internal/update-notifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-agent.d.ts","sourceRoot":"","sources":["../../src/internal/user-agent.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,UAAU,QAAwF,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { VERSION } from "./version.js";
|
|
2
|
+
/**
|
|
3
|
+
* Shared User-Agent string for all outbound HTTP requests (API calls and
|
|
4
|
+
* OAuth token exchanges). Format: meshy-cli/0.1.0 (darwin arm64; node v22.1.0)
|
|
5
|
+
*/
|
|
6
|
+
export const USER_AGENT = `meshy-cli/${VERSION} (${process.platform} ${process.arch}; node ${process.version})`;
|
|
7
|
+
//# sourceMappingURL=user-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-agent.js","sourceRoot":"","sources":["../../src/internal/user-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,UAAU,OAAO,CAAC,OAAO,GAAG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/internal/version.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,OAAO,QAAU,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
/**
|
|
3
|
+
* package.json is the single source of truth for the version — read it at
|
|
4
|
+
* startup instead of hardcoding. This file sits exactly two directories
|
|
5
|
+
* below package.json in both layouts that matter (src/internal/ under tsx,
|
|
6
|
+
* dist/internal/ after `tsc`), and tests/version.test.ts pins VERSION ===
|
|
7
|
+
* package.json#version so the two can never drift again.
|
|
8
|
+
*/
|
|
9
|
+
const { version } = JSON.parse(readFileSync(new URL("../../package.json", import.meta.url), "utf8"));
|
|
10
|
+
export const VERSION = version;
|
|
11
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/internal/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAC9C,CAAC;AAEzB,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
|
package/dist/root.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Root command. Wires global flags and attaches every subcommand.
|
|
3
|
+
*
|
|
4
|
+
* The per-endpoint commands are registered but hidden from the root help.
|
|
5
|
+
* They remain fully supported — `meshy resources` indexes them and
|
|
6
|
+
* `meshy <resource> --help` documents each one. The root help leads with the
|
|
7
|
+
* short list instead, because it is read on every invocation (an agent pays
|
|
8
|
+
* for the whole surface each time it runs `--help`), and because a caller who
|
|
9
|
+
* wants one model should not have to pick an endpoint first.
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from "commander";
|
|
12
|
+
export declare function buildRootCommand(): Command;
|
|
13
|
+
//# sourceMappingURL=root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../src/root.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkGpC,wBAAgB,gBAAgB,IAAI,OAAO,CAiD1C"}
|