godot-cli 0.16.2 → 0.17.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.
Files changed (49) hide show
  1. package/dist/commands/configure.js +24 -1
  2. package/dist/commands/configure.js.map +1 -1
  3. package/dist/commands/install-plugin.js +99 -7
  4. package/dist/commands/install-plugin.js.map +1 -1
  5. package/dist/commands/login.js +53 -15
  6. package/dist/commands/login.js.map +1 -1
  7. package/dist/lib/configure-agent.d.ts +20 -0
  8. package/dist/lib/configure-agent.js +115 -0
  9. package/dist/lib/configure-agent.js.map +1 -0
  10. package/dist/lib/enroll.d.ts +21 -0
  11. package/dist/lib/enroll.js +100 -0
  12. package/dist/lib/enroll.js.map +1 -0
  13. package/dist/lib/install-server.d.ts +25 -0
  14. package/dist/lib/install-server.js +234 -0
  15. package/dist/lib/install-server.js.map +1 -0
  16. package/dist/lib/setup-mcp.d.ts +28 -0
  17. package/dist/lib/setup-mcp.js +61 -1
  18. package/dist/lib/setup-mcp.js.map +1 -1
  19. package/dist/lib/types.d.ts +138 -0
  20. package/dist/lib.d.ts +4 -1
  21. package/dist/lib.js +3 -0
  22. package/dist/lib.js.map +1 -1
  23. package/dist/utils/addon-deps.js +2 -2
  24. package/dist/utils/addon-deps.js.map +1 -1
  25. package/dist/utils/agents.d.ts +12 -0
  26. package/dist/utils/agents.js +24 -0
  27. package/dist/utils/agents.js.map +1 -1
  28. package/dist/utils/cloud-login.d.ts +22 -4
  29. package/dist/utils/cloud-login.js +40 -17
  30. package/dist/utils/cloud-login.js.map +1 -1
  31. package/dist/utils/connection.d.ts +4 -7
  32. package/dist/utils/connection.js +8 -10
  33. package/dist/utils/connection.js.map +1 -1
  34. package/dist/utils/enroll.d.ts +39 -0
  35. package/dist/utils/enroll.js +66 -0
  36. package/dist/utils/enroll.js.map +1 -0
  37. package/dist/utils/machine-credentials.d.ts +74 -0
  38. package/dist/utils/machine-credentials.js +182 -0
  39. package/dist/utils/machine-credentials.js.map +1 -0
  40. package/dist/utils/project-identity.d.ts +76 -0
  41. package/dist/utils/project-identity.js +111 -0
  42. package/dist/utils/project-identity.js.map +1 -0
  43. package/dist/utils/project-marker.d.ts +64 -0
  44. package/dist/utils/project-marker.js +192 -0
  45. package/dist/utils/project-marker.js.map +1 -0
  46. package/dist/utils/server-source.d.ts +84 -0
  47. package/dist/utils/server-source.js +217 -0
  48. package/dist/utils/server-source.js.map +1 -0
  49. package/package.json +1 -1
@@ -0,0 +1,84 @@
1
+ /**
2
+ * The DEFAULT shared-server version `--with-server` downloads. Single-sourced
3
+ * from the addon's `GodotMcpServerView.ServerVersion` constant (parity-tested).
4
+ * `--server-version <v>` overrides it; `--server-source <path>` skips the
5
+ * download entirely (offline / CI). Bumping the addon's server pin requires
6
+ * bumping this in the same PR or the parity test goes red.
7
+ */
8
+ export declare const DEFAULT_SERVER_VERSION = "9.0.0";
9
+ /** GitHub-release host the server zip + manifest are downloaded from. NOTHING else is trusted. */
10
+ export declare const TRUSTED_DOWNLOAD_HOST = "github.com";
11
+ /** The `owner/repo` the shared server releases live under. */
12
+ export declare const SERVER_RELEASE_REPO = "IvanMurzak/GameDev-MCP-Server";
13
+ /** The server-binary base name (matches the addon's `GodotMcpServerView.ExecutableName`). */
14
+ export declare const SERVER_EXECUTABLE_NAME = "gamedev-mcp-server";
15
+ /** The release-asset / RID prefix (matches the addon's `AssetPrefix`). */
16
+ export declare const SERVER_ASSET_PREFIX = "gamedev-mcp-server";
17
+ /** The integrity-manifest asset attached to every GameDev-MCP-Server release. */
18
+ export declare const SHA256SUMS_ASSET_NAME = "SHA256SUMS";
19
+ /** Map a Node `process.platform` token to the .NET RID os segment (`win`/`osx`/`linux`). */
20
+ export declare function osToken(platform?: NodeJS.Platform): string;
21
+ /** Map a Node `process.arch` token to the .NET RID arch segment (`x86`/`x64`/`arm`/`arm64`). */
22
+ export declare function archToken(arch?: string): string;
23
+ /**
24
+ * The RID-style platform name `<os>-<arch>` (e.g. `win-x64`) for the given (or
25
+ * current) host. Matches the addon's `GodotMcpServerView.PlatformName` and the
26
+ * GameDev-MCP-Server release asset RIDs (linux-arm64/linux-x64/osx-arm64/osx-x64/
27
+ * win-arm64/win-x64/win-x86). Pure.
28
+ */
29
+ export declare function detectHostRid(platform?: NodeJS.Platform, arch?: string): string;
30
+ /** The on-disk executable file name for an os: `gamedev-mcp-server.exe` on Windows, else `gamedev-mcp-server`. */
31
+ export declare function serverExecutableFileName(platform?: NodeJS.Platform): string;
32
+ /** The GitHub release-zip asset name for a RID: `gamedev-mcp-server-<rid>.zip`. Pure. */
33
+ export declare function serverAssetName(rid: string): string;
34
+ /** The git release TAG for a server version: the version with a leading `v` (`9.0.0` → `v9.0.0`). Pure. */
35
+ export declare function serverReleaseTag(version: string): string;
36
+ /**
37
+ * The download URL for a server version's per-RID zip:
38
+ * `https://github.com/IvanMurzak/GameDev-MCP-Server/releases/download/v<version>/gamedev-mcp-server-<rid>.zip`.
39
+ * Mirrors `GodotMcpServerView.DownloadUrl`. The host is always `github.com` by
40
+ * construction; `assertTrustedServerUrl` re-checks a URL before any network call. Pure.
41
+ */
42
+ export declare function serverDownloadUrl(version: string, rid: string): string;
43
+ /**
44
+ * The `SHA256SUMS` manifest URL — the sibling of the per-RID zip under the SAME
45
+ * `v<version>` release tag. Mirrors `GodotMcpServerView.Sha256SumsUrl`. Pure.
46
+ */
47
+ export declare function sha256SumsUrl(version: string): string;
48
+ /**
49
+ * Fail-closed host trust check: throw unless `url` is an HTTPS URL whose host is
50
+ * EXACTLY `github.com` (no subdomains, no `github.com.evil.test`, no http). The
51
+ * security boundary the task requires for the server download. Returns the parsed
52
+ * URL on success. Pure (throws on the unhappy path; callers turn it into a
53
+ * structured failure so nothing escapes the public boundary).
54
+ */
55
+ export declare function assertTrustedServerUrl(url: string): URL;
56
+ /**
57
+ * Parse a coreutils `sha256sum` manifest into a `{filename → lowercase-hex-digest}`
58
+ * map. One line per file: a 64-char hex digest, whitespace, then the file name.
59
+ * Tolerances (matching the C# reference): CRLF + bare-LF; blank lines skipped;
60
+ * leading/trailing whitespace trimmed; the binary-mode `*` marker before the
61
+ * filename stripped; a line whose first token is not 64-hex, or which has no
62
+ * filename, is skipped (never a spurious entry — fail-closed at lookup). On a
63
+ * duplicate filename the LAST entry wins. Never throws. Pure.
64
+ */
65
+ export declare function parseSha256Sums(sha256SumsText: string | null | undefined): Map<string, string>;
66
+ /** Look up the expected digest for an asset zip name in a parsed manifest, or null when absent. Pure. */
67
+ export declare function lookupDigest(parsed: Map<string, string>, assetZipName: string): string | null;
68
+ /** Case-insensitive hex-digest equality (both trimmed). A null/empty side is NEVER a match (fail-closed). Pure. */
69
+ export declare function digestMatches(expectedHexDigest: string | null | undefined, actualHexDigest: string | null | undefined): boolean;
70
+ /** The verdict of verifying a downloaded zip against a release `SHA256SUMS` manifest. */
71
+ export type ChecksumVerdict = 'verified' | 'manifest-unparsable' | 'missing-entry' | 'digest-mismatch';
72
+ /**
73
+ * The single fail-closed integrity decision the installer calls BEFORE extract:
74
+ * parse the release `SHA256SUMS`, find the entry for `assetZipName`, and compare
75
+ * it (case-insensitive hex) against the locally-computed SHA256 of the downloaded
76
+ * zip. Returns `'verified'` ONLY when the manifest parsed, contained the asset,
77
+ * and the digest matched; every other outcome is a distinct fail-closed verdict
78
+ * the caller MUST treat as "do NOT extract". Never throws. Pure.
79
+ */
80
+ export declare function verifyZipChecksum(sha256SumsText: string | null | undefined, assetZipName: string, actualZipHexDigest: string | null | undefined): ChecksumVerdict;
81
+ /** A short, actionable reason for a non-`verified` verdict, for the installer's fail-closed error. Pure. */
82
+ export declare function checksumFailureReason(verdict: ChecksumVerdict, assetZipName: string): string;
83
+ /** The lowercase hex SHA256 of a byte buffer (the downloaded zip). Pure. */
84
+ export declare function sha256Hex(bytes: Buffer): string;
@@ -0,0 +1,217 @@
1
+ // Pure helpers for resolving WHERE the shared `gamedev-mcp-server` binary comes
2
+ // from when `install-plugin --with-server` materializes it: RID detection, the
3
+ // trusted GitHub-release download URL, the `SHA256SUMS` integrity manifest, and
4
+ // the fail-closed verify verdict. These MIRROR the addon's own server logic in
5
+ // `addons/godot_mcp/Runtime/Connection/GodotMcpServerView.cs` (github.com only,
6
+ // `releases/download/v<version>/gamedev-mcp-server-<rid>.zip`, verify-before-
7
+ // extract against `SHA256SUMS`). No side effects; unit-testable with no network.
8
+ //
9
+ // The DEFAULT server version is single-sourced from the addon's pinned
10
+ // `ServerVersion` constant (a parity test — `cli/tests/server-source-parity.test.ts`
11
+ // — reads `GodotMcpServerView.cs` and FAILS the build if this drifts), so the CLI
12
+ // and the addon can never download two different server versions.
13
+ import { createHash } from 'crypto';
14
+ /**
15
+ * The DEFAULT shared-server version `--with-server` downloads. Single-sourced
16
+ * from the addon's `GodotMcpServerView.ServerVersion` constant (parity-tested).
17
+ * `--server-version <v>` overrides it; `--server-source <path>` skips the
18
+ * download entirely (offline / CI). Bumping the addon's server pin requires
19
+ * bumping this in the same PR or the parity test goes red.
20
+ */
21
+ export const DEFAULT_SERVER_VERSION = '9.0.0';
22
+ /** GitHub-release host the server zip + manifest are downloaded from. NOTHING else is trusted. */
23
+ export const TRUSTED_DOWNLOAD_HOST = 'github.com';
24
+ /** The `owner/repo` the shared server releases live under. */
25
+ export const SERVER_RELEASE_REPO = 'IvanMurzak/GameDev-MCP-Server';
26
+ /** The server-binary base name (matches the addon's `GodotMcpServerView.ExecutableName`). */
27
+ export const SERVER_EXECUTABLE_NAME = 'gamedev-mcp-server';
28
+ /** The release-asset / RID prefix (matches the addon's `AssetPrefix`). */
29
+ export const SERVER_ASSET_PREFIX = SERVER_EXECUTABLE_NAME;
30
+ /** The integrity-manifest asset attached to every GameDev-MCP-Server release. */
31
+ export const SHA256SUMS_ASSET_NAME = 'SHA256SUMS';
32
+ /** Map a Node `process.platform` token to the .NET RID os segment (`win`/`osx`/`linux`). */
33
+ export function osToken(platform = process.platform) {
34
+ switch (platform) {
35
+ case 'win32':
36
+ return 'win';
37
+ case 'darwin':
38
+ return 'osx';
39
+ case 'linux':
40
+ return 'linux';
41
+ default:
42
+ return 'unknown';
43
+ }
44
+ }
45
+ /** Map a Node `process.arch` token to the .NET RID arch segment (`x86`/`x64`/`arm`/`arm64`). */
46
+ export function archToken(arch = process.arch) {
47
+ switch (arch) {
48
+ case 'x64':
49
+ return 'x64';
50
+ case 'arm64':
51
+ return 'arm64';
52
+ case 'ia32':
53
+ return 'x86';
54
+ case 'arm':
55
+ return 'arm';
56
+ default:
57
+ return 'unknown';
58
+ }
59
+ }
60
+ /**
61
+ * The RID-style platform name `<os>-<arch>` (e.g. `win-x64`) for the given (or
62
+ * current) host. Matches the addon's `GodotMcpServerView.PlatformName` and the
63
+ * GameDev-MCP-Server release asset RIDs (linux-arm64/linux-x64/osx-arm64/osx-x64/
64
+ * win-arm64/win-x64/win-x86). Pure.
65
+ */
66
+ export function detectHostRid(platform = process.platform, arch = process.arch) {
67
+ return `${osToken(platform)}-${archToken(arch)}`;
68
+ }
69
+ /** The on-disk executable file name for an os: `gamedev-mcp-server.exe` on Windows, else `gamedev-mcp-server`. */
70
+ export function serverExecutableFileName(platform = process.platform) {
71
+ return platform === 'win32' ? `${SERVER_EXECUTABLE_NAME}.exe` : SERVER_EXECUTABLE_NAME;
72
+ }
73
+ /** The GitHub release-zip asset name for a RID: `gamedev-mcp-server-<rid>.zip`. Pure. */
74
+ export function serverAssetName(rid) {
75
+ return `${SERVER_ASSET_PREFIX}-${rid}.zip`;
76
+ }
77
+ /** The git release TAG for a server version: the version with a leading `v` (`9.0.0` → `v9.0.0`). Pure. */
78
+ export function serverReleaseTag(version) {
79
+ const v = (version ?? '').trim();
80
+ return v.startsWith('v') ? v : `v${v}`;
81
+ }
82
+ /**
83
+ * The download URL for a server version's per-RID zip:
84
+ * `https://github.com/IvanMurzak/GameDev-MCP-Server/releases/download/v<version>/gamedev-mcp-server-<rid>.zip`.
85
+ * Mirrors `GodotMcpServerView.DownloadUrl`. The host is always `github.com` by
86
+ * construction; `assertTrustedServerUrl` re-checks a URL before any network call. Pure.
87
+ */
88
+ export function serverDownloadUrl(version, rid) {
89
+ return `https://${TRUSTED_DOWNLOAD_HOST}/${SERVER_RELEASE_REPO}/releases/download/${serverReleaseTag(version)}/${serverAssetName(rid)}`;
90
+ }
91
+ /**
92
+ * The `SHA256SUMS` manifest URL — the sibling of the per-RID zip under the SAME
93
+ * `v<version>` release tag. Mirrors `GodotMcpServerView.Sha256SumsUrl`. Pure.
94
+ */
95
+ export function sha256SumsUrl(version) {
96
+ return `https://${TRUSTED_DOWNLOAD_HOST}/${SERVER_RELEASE_REPO}/releases/download/${serverReleaseTag(version)}/${SHA256SUMS_ASSET_NAME}`;
97
+ }
98
+ /**
99
+ * Fail-closed host trust check: throw unless `url` is an HTTPS URL whose host is
100
+ * EXACTLY `github.com` (no subdomains, no `github.com.evil.test`, no http). The
101
+ * security boundary the task requires for the server download. Returns the parsed
102
+ * URL on success. Pure (throws on the unhappy path; callers turn it into a
103
+ * structured failure so nothing escapes the public boundary).
104
+ */
105
+ export function assertTrustedServerUrl(url) {
106
+ let parsed;
107
+ try {
108
+ parsed = new URL(url);
109
+ }
110
+ catch {
111
+ throw new Error(`Refusing to download server: malformed URL "${url}".`);
112
+ }
113
+ if (parsed.protocol !== 'https:') {
114
+ throw new Error(`Refusing to download server: only https is allowed, got "${parsed.protocol}" (${url}).`);
115
+ }
116
+ if (parsed.hostname.toLowerCase() !== TRUSTED_DOWNLOAD_HOST) {
117
+ throw new Error(`Refusing to download server from untrusted host "${parsed.hostname}". Only ${TRUSTED_DOWNLOAD_HOST} is trusted.`);
118
+ }
119
+ return parsed;
120
+ }
121
+ // --- SHA256SUMS integrity manifest (download-verify-before-extract, fail-closed) ---
122
+ // Ported from GodotMcpServerView.{ParseSha256Sums,LookupDigest,DigestMatches,VerifyZipChecksum}
123
+ // so the CLI and the addon apply byte-identical integrity rules.
124
+ /** True when `value` is exactly 64 ASCII hex characters (a SHA256 hex digest). */
125
+ function isHex64(value) {
126
+ if (value.length !== 64)
127
+ return false;
128
+ return /^[0-9a-fA-F]{64}$/.test(value);
129
+ }
130
+ /**
131
+ * Parse a coreutils `sha256sum` manifest into a `{filename → lowercase-hex-digest}`
132
+ * map. One line per file: a 64-char hex digest, whitespace, then the file name.
133
+ * Tolerances (matching the C# reference): CRLF + bare-LF; blank lines skipped;
134
+ * leading/trailing whitespace trimmed; the binary-mode `*` marker before the
135
+ * filename stripped; a line whose first token is not 64-hex, or which has no
136
+ * filename, is skipped (never a spurious entry — fail-closed at lookup). On a
137
+ * duplicate filename the LAST entry wins. Never throws. Pure.
138
+ */
139
+ export function parseSha256Sums(sha256SumsText) {
140
+ const map = new Map();
141
+ if (!sha256SumsText)
142
+ return map;
143
+ for (const rawLine of sha256SumsText.replace(/\r\n/g, '\n').split('\n')) {
144
+ const line = rawLine.trim();
145
+ if (line.length === 0)
146
+ continue;
147
+ // Split into the digest token and the remainder (the filename) on the FIRST
148
+ // run of whitespace, so single-space/tab variants still parse.
149
+ let sepIndex = -1;
150
+ for (let i = 0; i < line.length; i++) {
151
+ if (line[i] === ' ' || line[i] === '\t') {
152
+ sepIndex = i;
153
+ break;
154
+ }
155
+ }
156
+ if (sepIndex <= 0 || sepIndex >= line.length - 1)
157
+ continue;
158
+ const digestToken = line.slice(0, sepIndex);
159
+ if (!isHex64(digestToken))
160
+ continue;
161
+ let fileName = line.slice(sepIndex + 1).replace(/^[ \t]+/, '');
162
+ if (fileName.startsWith('*'))
163
+ fileName = fileName.slice(1);
164
+ fileName = fileName.trim();
165
+ if (fileName.length === 0)
166
+ continue;
167
+ map.set(fileName, digestToken.toLowerCase());
168
+ }
169
+ return map;
170
+ }
171
+ /** Look up the expected digest for an asset zip name in a parsed manifest, or null when absent. Pure. */
172
+ export function lookupDigest(parsed, assetZipName) {
173
+ if (!parsed || !assetZipName)
174
+ return null;
175
+ return parsed.get(assetZipName) ?? null;
176
+ }
177
+ /** Case-insensitive hex-digest equality (both trimmed). A null/empty side is NEVER a match (fail-closed). Pure. */
178
+ export function digestMatches(expectedHexDigest, actualHexDigest) {
179
+ if (!expectedHexDigest || !expectedHexDigest.trim() || !actualHexDigest || !actualHexDigest.trim())
180
+ return false;
181
+ return expectedHexDigest.trim().toLowerCase() === actualHexDigest.trim().toLowerCase();
182
+ }
183
+ /**
184
+ * The single fail-closed integrity decision the installer calls BEFORE extract:
185
+ * parse the release `SHA256SUMS`, find the entry for `assetZipName`, and compare
186
+ * it (case-insensitive hex) against the locally-computed SHA256 of the downloaded
187
+ * zip. Returns `'verified'` ONLY when the manifest parsed, contained the asset,
188
+ * and the digest matched; every other outcome is a distinct fail-closed verdict
189
+ * the caller MUST treat as "do NOT extract". Never throws. Pure.
190
+ */
191
+ export function verifyZipChecksum(sha256SumsText, assetZipName, actualZipHexDigest) {
192
+ const parsed = parseSha256Sums(sha256SumsText);
193
+ if (parsed.size === 0)
194
+ return 'manifest-unparsable';
195
+ const expected = lookupDigest(parsed, assetZipName);
196
+ if (expected === null)
197
+ return 'missing-entry';
198
+ return digestMatches(expected, actualZipHexDigest) ? 'verified' : 'digest-mismatch';
199
+ }
200
+ /** A short, actionable reason for a non-`verified` verdict, for the installer's fail-closed error. Pure. */
201
+ export function checksumFailureReason(verdict, assetZipName) {
202
+ switch (verdict) {
203
+ case 'manifest-unparsable':
204
+ return `the downloaded ${SHA256SUMS_ASSET_NAME} manifest was empty or unparsable`;
205
+ case 'missing-entry':
206
+ return `the ${SHA256SUMS_ASSET_NAME} manifest has no entry for '${assetZipName}'`;
207
+ case 'digest-mismatch':
208
+ return `the downloaded '${assetZipName}' SHA256 did not match the ${SHA256SUMS_ASSET_NAME} manifest entry`;
209
+ default:
210
+ return 'the checksum was verified';
211
+ }
212
+ }
213
+ /** The lowercase hex SHA256 of a byte buffer (the downloaded zip). Pure. */
214
+ export function sha256Hex(bytes) {
215
+ return createHash('sha256').update(bytes).digest('hex');
216
+ }
217
+ //# sourceMappingURL=server-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-source.js","sourceRoot":"","sources":["../../src/utils/server-source.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "godot-cli",
3
- "version": "0.16.2",
3
+ "version": "0.17.1",
4
4
  "description": "Cross-platform CLI tool for Godot-MCP (Skills & MCP). Resolves and launches the Godot editor with MCP connection env vars, runs MCP/system tools over HTTP, probes server health, configures AI agents (Claude Code, Cursor, VS Code, …), and enables/disables the godot_mcp addon. Works with Claude Code, Cursor, Copilot, and any MCP client.",
5
5
  "type": "module",
6
6
  "main": "dist/lib.js",