@xcraftmind/mastermind 0.22.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/LICENSE +21 -0
- package/README.md +105 -0
- package/bin/mastermind.js +118 -0
- package/bin/mmcg.js +101 -0
- package/package.json +47 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Mastermind contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# @xcraftmind/mastermind
|
|
2
|
+
|
|
3
|
+
Mastermind workflow CLI + mmcg codegraph for AI coding agents — verify-spec / audit-spec gates, MCP server, multi-language tree-sitter indexer (Python, TypeScript, JavaScript, Rust, C#, Go, Java, PHP, C/C++).
|
|
4
|
+
|
|
5
|
+
Prebuilt native binaries via optional platform packages — **no Rust toolchain required**.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
### One-shot (no install)
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
npx -y @xcraftmind/mastermind doctor
|
|
13
|
+
npx -y @xcraftmind/mastermind init --profile typescript-api
|
|
14
|
+
npx -y @xcraftmind/mastermind run-task .mastermind/tasks/042-feature.md
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
`npx` is great for these one-shot commands. **Avoid it for the MCP server**, though: an MCP config that runs `npx ... serve` pays an npm-cache/network resolution cost on every Claude Code launch and is less deterministic than a real install. For `setup claude`, prefer **global** or **project-local** (below). If you do register via npx, `setup claude` pins the version (`npx -y @xcraftmind/mastermind@<ver> serve`) so at least the version is stable — but it's an escape hatch, not the recommended path.
|
|
18
|
+
|
|
19
|
+
### Global (recommended for most users)
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
npm install -g @xcraftmind/mastermind
|
|
23
|
+
mastermind setup claude --write-mcp # register mmcg as an MCP server
|
|
24
|
+
mastermind doctor # verify the environment
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
`setup claude` writes `~/.claude/.mcp.json` with `command: "mastermind"` so Claude Code launches the wrapper from PATH.
|
|
28
|
+
|
|
29
|
+
### Project-local
|
|
30
|
+
|
|
31
|
+
```sh
|
|
32
|
+
npm install -D @xcraftmind/mastermind
|
|
33
|
+
npx mastermind setup claude --project . --write-mcp
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`setup claude --project .` writes `./.mcp.json` with `command: "./node_modules/.bin/mastermind"` so the project gets a reproducible, version-pinned MCP server.
|
|
37
|
+
|
|
38
|
+
### Build from source (contributors / unsupported platforms)
|
|
39
|
+
|
|
40
|
+
```sh
|
|
41
|
+
cargo install mmcg
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Requires Rust 1.75+. The cargo-installed binary is `mmcg`, not `mastermind` — same code, same subcommands, only the wrapper name differs.
|
|
45
|
+
|
|
46
|
+
## Supported platforms
|
|
47
|
+
|
|
48
|
+
Prebuilt binaries ship for:
|
|
49
|
+
|
|
50
|
+
| Platform | Architecture |
|
|
51
|
+
|---|---|
|
|
52
|
+
| macOS (Apple Silicon) | aarch64 |
|
|
53
|
+
| macOS (Intel) | x86_64 |
|
|
54
|
+
| Linux glibc | x86_64, aarch64 |
|
|
55
|
+
| Linux musl (Alpine) | x86_64, aarch64 |
|
|
56
|
+
| Windows | x86_64 |
|
|
57
|
+
|
|
58
|
+
Other targets fall back to `cargo install mmcg`.
|
|
59
|
+
|
|
60
|
+
## What's in the box
|
|
61
|
+
|
|
62
|
+
- `mastermind` — public CLI command (alias for `mmcg` with install-mode hints)
|
|
63
|
+
- `mmcg` — compatibility command (same binary, same subcommands as cargo-installed `mmcg`)
|
|
64
|
+
|
|
65
|
+
Both commands resolve to the same native binary. Use whichever your team has documented.
|
|
66
|
+
|
|
67
|
+
### Top-level subcommands
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
mastermind init --profile typescript-api # scaffold .mastermind/ with stack-specific CONTEXT.md
|
|
71
|
+
mastermind index . # build/refresh the codegraph index
|
|
72
|
+
mastermind watch # long-running watcher (re-indexes on file changes)
|
|
73
|
+
mastermind doctor # environment health check
|
|
74
|
+
mastermind serve # MCP stdio server
|
|
75
|
+
mastermind setup claude --write-mcp # register with Claude Code's MCP layer
|
|
76
|
+
mastermind verify-spec <path> # pre-execution mechanical gate on a task spec
|
|
77
|
+
mastermind audit-spec <path> --since main # post-execution audit vs git baseline
|
|
78
|
+
mastermind run-task <path> # two-phase orchestrator: verify → executor → audit
|
|
79
|
+
mastermind query callers <symbol> # one-shot CLI query (use MCP for agents)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
See `mastermind <subcommand> --help` for full options.
|
|
83
|
+
|
|
84
|
+
## Architecture
|
|
85
|
+
|
|
86
|
+
The npm package uses the prebuilt-platform-package pattern (same as `esbuild`, `swc`, `lefthook`, `turbo`). The root `@xcraftmind/mastermind` package contains only JavaScript wrappers and lists all seven platform packages as `optionalDependencies`. npm installs only the package matching the host's `os` + `cpu` (+ `libc` for Linux); the others are skipped.
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
@xcraftmind/mastermind # JS wrappers + optionalDependencies
|
|
90
|
+
├── @xcraftmind/mmcg-darwin-arm64 # one of these installs, the rest skip
|
|
91
|
+
├── @xcraftmind/mmcg-darwin-x64
|
|
92
|
+
├── @xcraftmind/mmcg-linux-x64-gnu
|
|
93
|
+
├── @xcraftmind/mmcg-linux-arm64-gnu
|
|
94
|
+
├── @xcraftmind/mmcg-linux-x64-musl
|
|
95
|
+
├── @xcraftmind/mmcg-linux-arm64-musl
|
|
96
|
+
└── @xcraftmind/mmcg-win32-x64-msvc
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
No `postinstall` script. No network calls beyond the npm registry itself.
|
|
100
|
+
|
|
101
|
+
## Links
|
|
102
|
+
|
|
103
|
+
- Source: [github.com/xcrft/mastermind](https://github.com/xcrft/mastermind)
|
|
104
|
+
- mmcg Rust crate: [crates.io/crates/mmcg](https://crates.io/crates/mmcg)
|
|
105
|
+
- MCP protocol: [modelcontextprotocol.io](https://modelcontextprotocol.io)
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// `mastermind` — public command. Same native binary as `mmcg`, but injects
|
|
3
|
+
// install-mode hints into the environment so `setup claude` writes the right
|
|
4
|
+
// MCP `command` form for each installation method (npx vs global npm vs
|
|
5
|
+
// project-local npm vs cargo).
|
|
6
|
+
|
|
7
|
+
import { spawn } from "node:child_process";
|
|
8
|
+
import { createRequire } from "node:module";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import process from "node:process";
|
|
11
|
+
|
|
12
|
+
const require = createRequire(import.meta.url);
|
|
13
|
+
const pkg = require("../package.json");
|
|
14
|
+
|
|
15
|
+
function detectLibc() {
|
|
16
|
+
if (process.platform !== "linux") return null;
|
|
17
|
+
const report = process.report?.getReport?.();
|
|
18
|
+
if (report?.header?.glibcVersionRuntime) return "gnu";
|
|
19
|
+
return "musl";
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function packageName() {
|
|
23
|
+
const platform = process.platform;
|
|
24
|
+
const arch = process.arch;
|
|
25
|
+
if (platform === "darwin" && arch === "arm64") return "@xcraftmind/mmcg-darwin-arm64";
|
|
26
|
+
if (platform === "darwin" && arch === "x64") return "@xcraftmind/mmcg-darwin-x64";
|
|
27
|
+
if (platform === "win32" && arch === "x64") return "@xcraftmind/mmcg-win32-x64-msvc";
|
|
28
|
+
if (platform === "linux") {
|
|
29
|
+
const libc = detectLibc();
|
|
30
|
+
if (arch === "x64") return `@xcraftmind/mmcg-linux-x64-${libc}`;
|
|
31
|
+
if (arch === "arm64") return `@xcraftmind/mmcg-linux-arm64-${libc}`;
|
|
32
|
+
}
|
|
33
|
+
throw new Error(`unsupported platform: ${platform}-${arch}`);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function resolveBinary() {
|
|
37
|
+
const pkgName = packageName();
|
|
38
|
+
const exe = process.platform === "win32" ? "mmcg.exe" : "mmcg";
|
|
39
|
+
try {
|
|
40
|
+
return require.resolve(`${pkgName}/bin/${exe}`);
|
|
41
|
+
} catch (err) {
|
|
42
|
+
const lines = [
|
|
43
|
+
`Could not locate the native mmcg binary for ${process.platform}-${process.arch}.`,
|
|
44
|
+
"",
|
|
45
|
+
`Platform package \`${pkgName}\` is not installed. Fix:`,
|
|
46
|
+
" npm install --include=optional @xcraftmind/mastermind # force optional install",
|
|
47
|
+
" cargo install mmcg # build from source (needs Rust)",
|
|
48
|
+
"",
|
|
49
|
+
`(underlying: ${String(err?.message ?? err)})`,
|
|
50
|
+
];
|
|
51
|
+
console.error(lines.join("\n"));
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Detect how this wrapper was invoked so `setup claude` can write a stable
|
|
58
|
+
* MCP `command` form per install mode.
|
|
59
|
+
*
|
|
60
|
+
* npx — process.argv[1] lives under an npx cache (`/_npx/` or `\_npx\`)
|
|
61
|
+
* project — wrapper lives under `<cwd>/node_modules` (any depth)
|
|
62
|
+
* global — wrapper lives under a known npm global prefix
|
|
63
|
+
* cargo — never reached here (cargo users invoke `mmcg` directly, no JS)
|
|
64
|
+
*
|
|
65
|
+
* Best-effort: if none match cleanly, returns "unknown" — the Rust side
|
|
66
|
+
* falls back to `command: mastermind` which works for any PATH-installed case.
|
|
67
|
+
*/
|
|
68
|
+
function detectInstallMode() {
|
|
69
|
+
const self = process.argv[1] || "";
|
|
70
|
+
// npx caches keep packages under `_npx` directories on every platform.
|
|
71
|
+
if (self.includes(`${path.sep}_npx${path.sep}`) || self.includes("/_npx/")) {
|
|
72
|
+
return "npx";
|
|
73
|
+
}
|
|
74
|
+
const cwd = process.cwd();
|
|
75
|
+
const projectNodeModules = path.join(cwd, "node_modules") + path.sep;
|
|
76
|
+
if (self.startsWith(projectNodeModules)) {
|
|
77
|
+
return "project";
|
|
78
|
+
}
|
|
79
|
+
// Heuristic for global install: bin path lands under a directory whose
|
|
80
|
+
// name suggests global npm (e.g. /usr/local/lib/node_modules, ~/.npm-global,
|
|
81
|
+
// C:\\Program Files\\nodejs\\node_modules). Any node_modules path that
|
|
82
|
+
// isn't under cwd qualifies.
|
|
83
|
+
if (self.includes(`${path.sep}node_modules${path.sep}`)) {
|
|
84
|
+
return "global";
|
|
85
|
+
}
|
|
86
|
+
return "unknown";
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const bin = resolveBinary();
|
|
90
|
+
const installMode = detectInstallMode();
|
|
91
|
+
|
|
92
|
+
// Inject hints for `setup claude` and any other subcommand that benefits from
|
|
93
|
+
// knowing how it was invoked. The Rust side reads these env vars; absence is
|
|
94
|
+
// treated as "cargo-style install" and the existing behavior is preserved.
|
|
95
|
+
const env = {
|
|
96
|
+
...process.env,
|
|
97
|
+
MASTERMIND_INSTALL_MODE: installMode,
|
|
98
|
+
MASTERMIND_VERSION: pkg.version,
|
|
99
|
+
MASTERMIND_PACKAGE: pkg.name,
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const child = spawn(bin, process.argv.slice(2), {
|
|
103
|
+
stdio: "inherit",
|
|
104
|
+
env,
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
child.on("error", (err) => {
|
|
108
|
+
console.error(`failed to launch native binary at ${bin}: ${err.message}`);
|
|
109
|
+
process.exit(1);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
child.on("exit", (code, signal) => {
|
|
113
|
+
if (signal) {
|
|
114
|
+
process.kill(process.pid, signal);
|
|
115
|
+
} else {
|
|
116
|
+
process.exit(code ?? 1);
|
|
117
|
+
}
|
|
118
|
+
});
|
package/bin/mmcg.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// `mmcg` — compatibility command. Resolves the platform-specific binary from
|
|
3
|
+
// the optional dependency installed by npm and execs it with argv pass-through.
|
|
4
|
+
//
|
|
5
|
+
// Most users should run `mastermind` (the public command). This file exists so
|
|
6
|
+
// scripts written against the cargo-installed `mmcg` keep working after npm
|
|
7
|
+
// adoption — same binary, same subcommands, same exit codes.
|
|
8
|
+
|
|
9
|
+
import { spawn } from "node:child_process";
|
|
10
|
+
import { createRequire } from "node:module";
|
|
11
|
+
import process from "node:process";
|
|
12
|
+
|
|
13
|
+
const require = createRequire(import.meta.url);
|
|
14
|
+
const pkg = require("../package.json");
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Detect glibc vs musl on Linux. `process.report.getReport()` includes
|
|
18
|
+
* `glibcVersionRuntime` when the host libc is glibc; absent on musl/Alpine.
|
|
19
|
+
* Node 18+ ships `process.report` enabled by default.
|
|
20
|
+
*
|
|
21
|
+
* Returns "gnu" on glibc hosts, "musl" otherwise. Conservative fallback to
|
|
22
|
+
* musl when detection is ambiguous (better to fail at require.resolve than
|
|
23
|
+
* silently grab the wrong binary).
|
|
24
|
+
*/
|
|
25
|
+
function detectLibc() {
|
|
26
|
+
if (process.platform !== "linux") return null;
|
|
27
|
+
const report = process.report?.getReport?.();
|
|
28
|
+
if (report?.header?.glibcVersionRuntime) return "gnu";
|
|
29
|
+
return "musl";
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Map (platform, arch[, libc]) → the npm scoped package name. */
|
|
33
|
+
function packageName() {
|
|
34
|
+
const platform = process.platform;
|
|
35
|
+
const arch = process.arch;
|
|
36
|
+
|
|
37
|
+
if (platform === "darwin" && arch === "arm64") return "@xcraftmind/mmcg-darwin-arm64";
|
|
38
|
+
if (platform === "darwin" && arch === "x64") return "@xcraftmind/mmcg-darwin-x64";
|
|
39
|
+
if (platform === "win32" && arch === "x64") return "@xcraftmind/mmcg-win32-x64-msvc";
|
|
40
|
+
|
|
41
|
+
if (platform === "linux") {
|
|
42
|
+
const libc = detectLibc();
|
|
43
|
+
if (arch === "x64") return `@xcraftmind/mmcg-linux-x64-${libc}`;
|
|
44
|
+
if (arch === "arm64") return `@xcraftmind/mmcg-linux-arm64-${libc}`;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
throw new Error(`unsupported platform: ${platform}-${arch}`);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function resolveBinary() {
|
|
51
|
+
const pkgName = packageName();
|
|
52
|
+
const exe = process.platform === "win32" ? "mmcg.exe" : "mmcg";
|
|
53
|
+
try {
|
|
54
|
+
return require.resolve(`${pkgName}/bin/${exe}`);
|
|
55
|
+
} catch (err) {
|
|
56
|
+
const lines = [
|
|
57
|
+
`Could not locate the native mmcg binary for ${process.platform}-${process.arch}.`,
|
|
58
|
+
"",
|
|
59
|
+
"The platform-specific package was not installed. This usually means:",
|
|
60
|
+
` - npm skipped \`${pkgName}\` because optional-dependency install failed`,
|
|
61
|
+
" - your platform is not in the supported set (see README)",
|
|
62
|
+
"",
|
|
63
|
+
"Fixes:",
|
|
64
|
+
" - npm install --include=optional @xcraftmind/mastermind # force optional install",
|
|
65
|
+
" - cargo install mmcg # build from source (needs Rust)",
|
|
66
|
+
"",
|
|
67
|
+
`(underlying error: ${String(err?.message ?? err)})`,
|
|
68
|
+
];
|
|
69
|
+
console.error(lines.join("\n"));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const bin = resolveBinary();
|
|
75
|
+
|
|
76
|
+
// `spawn` (not `spawnSync`) so signals (SIGINT / SIGTERM) propagate to the
|
|
77
|
+
// child correctly — important for `mmcg watch` and `mmcg serve` which are
|
|
78
|
+
// long-running.
|
|
79
|
+
const child = spawn(bin, process.argv.slice(2), {
|
|
80
|
+
stdio: "inherit",
|
|
81
|
+
// Propagate environment unchanged. `mastermind.js` injects extra env vars
|
|
82
|
+
// before spawning this script when needed (install-mode detection).
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
child.on("error", (err) => {
|
|
86
|
+
console.error(`failed to launch mmcg binary at ${bin}: ${err.message}`);
|
|
87
|
+
process.exit(1);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
child.on("exit", (code, signal) => {
|
|
91
|
+
if (signal) {
|
|
92
|
+
// Re-raise the signal so the parent shell sees the canonical exit code.
|
|
93
|
+
process.kill(process.pid, signal);
|
|
94
|
+
} else {
|
|
95
|
+
process.exit(code ?? 1);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
// Re-export the version for diagnostics: `mmcg --version` is the binary's
|
|
100
|
+
// version; this is the wrapper / package version. Equal when shipped together.
|
|
101
|
+
export const wrapperVersion = pkg.version;
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xcraftmind/mastermind",
|
|
3
|
+
"version": "0.22.0",
|
|
4
|
+
"description": "Mastermind workflow CLI + mmcg codegraph for AI coding agents — verify-spec / audit-spec gates, MCP server, multi-language tree-sitter indexer (Python, TypeScript, JavaScript, Rust, C#, Go, Java, PHP, C/C++). Prebuilt native binaries via optional platform packages — no Rust toolchain required.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/xcrft/mastermind.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/xcrft/mastermind",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/xcrft/mastermind/issues"
|
|
14
|
+
},
|
|
15
|
+
"bin": {
|
|
16
|
+
"mastermind": "./bin/mastermind.js",
|
|
17
|
+
"mmcg": "./bin/mmcg.js"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"bin/",
|
|
21
|
+
"README.md",
|
|
22
|
+
"LICENSE"
|
|
23
|
+
],
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">=18"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"mcp",
|
|
29
|
+
"codegraph",
|
|
30
|
+
"ai",
|
|
31
|
+
"claude",
|
|
32
|
+
"tree-sitter",
|
|
33
|
+
"indexer",
|
|
34
|
+
"rust",
|
|
35
|
+
"cli",
|
|
36
|
+
"mastermind"
|
|
37
|
+
],
|
|
38
|
+
"optionalDependencies": {
|
|
39
|
+
"@xcraftmind/mmcg-darwin-arm64": "0.22.0",
|
|
40
|
+
"@xcraftmind/mmcg-darwin-x64": "0.22.0",
|
|
41
|
+
"@xcraftmind/mmcg-linux-x64-gnu": "0.22.0",
|
|
42
|
+
"@xcraftmind/mmcg-linux-arm64-gnu": "0.22.0",
|
|
43
|
+
"@xcraftmind/mmcg-linux-x64-musl": "0.22.0",
|
|
44
|
+
"@xcraftmind/mmcg-linux-arm64-musl": "0.22.0",
|
|
45
|
+
"@xcraftmind/mmcg-win32-x64-msvc": "0.22.0"
|
|
46
|
+
}
|
|
47
|
+
}
|