granttap-mcp 0.8.112 → 0.8.113
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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* What version a command-line tool is, without asking it twice.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Known installers write the version into the path itself and are trusted as
|
|
5
5
|
* such; anything else is asked `--version` once, and asked again only when
|
|
6
6
|
* the binary on disk changes. A path that merely contains something
|
|
7
7
|
* version-shaped — every nvm install lives under `node/v22.13.1/` — is never
|
|
@@ -25,6 +25,8 @@ export function versionFromLayout(resolvedPath: string): string | undefined {
|
|
|
25
25
|
if (claude) return claude[1] ?? claude[2];
|
|
26
26
|
const cursor = /\/cursor-agent\/versions\/([^/]+)\//.exec(resolvedPath);
|
|
27
27
|
if (cursor) return cursor[1];
|
|
28
|
+
const grok = /\/\.grok\/downloads\/grok-(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)-(?:macos|linux|windows)-(?:aarch64|x86_64)(?:\.exe)?$/.exec(resolvedPath);
|
|
29
|
+
if (grok) return grok[1];
|
|
28
30
|
const brew = /\/(?:Cellar|Caskroom)\/[^/]+\/([^/]+)\//.exec(resolvedPath);
|
|
29
31
|
return brew?.[1];
|
|
30
32
|
}
|
|
@@ -46,9 +48,21 @@ export function versionFromPackage(resolvedPath: string): string | undefined {
|
|
|
46
48
|
}
|
|
47
49
|
}
|
|
48
50
|
|
|
51
|
+
/** The bundled CLI's own manifest, rather than its containing desktop app version. */
|
|
52
|
+
function versionFromCodexBundle(resolvedPath: string): string | undefined {
|
|
53
|
+
const layout = /^(.*\/codex-cli)\/CodexCLI\.app\/Contents\/MacOS\/codex$/.exec(resolvedPath);
|
|
54
|
+
if (!layout) return undefined;
|
|
55
|
+
try {
|
|
56
|
+
const manifest = JSON.parse(readFileSync(join(layout[1]!, 'codex-package.json'), 'utf8'));
|
|
57
|
+
return manifest.layoutVersion === 1 && manifest.variant === 'codex'
|
|
58
|
+
&& typeof manifest.version === 'string' && parseVersionOutput(manifest.version) === manifest.version
|
|
59
|
+
? manifest.version : undefined;
|
|
60
|
+
} catch { return undefined; }
|
|
61
|
+
}
|
|
62
|
+
|
|
49
63
|
/** Everything a version can be read from without running the tool. */
|
|
50
64
|
export function passiveVersion(resolvedPath: string): string | undefined {
|
|
51
|
-
return versionFromLayout(resolvedPath) ?? versionFromPackage(resolvedPath);
|
|
65
|
+
return versionFromLayout(resolvedPath) ?? versionFromPackage(resolvedPath) ?? versionFromCodexBundle(resolvedPath);
|
|
52
66
|
}
|
|
53
67
|
|
|
54
68
|
export function parseVersionOutput(output: string): string | undefined {
|
package/cursor-plugin/README.md
CHANGED
|
@@ -10,7 +10,7 @@ keeps each phone response tied to the exact originating chat and prompt.
|
|
|
10
10
|
Install the supported CLI on this computer, then run:
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
|
-
npm install -g granttap-mcp@0.8.
|
|
13
|
+
npm install -g granttap-mcp@0.8.113
|
|
14
14
|
granttap setup
|
|
15
15
|
granttap status
|
|
16
16
|
```
|
package/cursor-plugin/mcp.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"command": "node",
|
|
5
5
|
"args": [
|
|
6
6
|
"-e",
|
|
7
|
-
"\"use strict\";\n\n// Cursor may start this MCP from any cwd. Execute JavaScript entry points with\n// Node itself: Windows batch shims require shell quoting that differs by host.\nconst { spawn } = require(\"node:child_process\");\nconst { existsSync } = require(\"node:fs\");\nconst { delimiter, dirname, join } = require(\"node:path\");\n\nconst PACKAGE = \"granttap-mcp@0.8.
|
|
7
|
+
"\"use strict\";\n\n// Cursor may start this MCP from any cwd. Execute JavaScript entry points with\n// Node itself: Windows batch shims require shell quoting that differs by host.\nconst { spawn } = require(\"node:child_process\");\nconst { existsSync } = require(\"node:fs\");\nconst { delimiter, dirname, join } = require(\"node:path\");\n\nconst PACKAGE = \"granttap-mcp@0.8.113\";\nconst dryRun = process.env.GRANTTAP_BOOTSTRAP_DRY_RUN === \"1\";\nconst platform = dryRun && process.env.GRANTTAP_BOOTSTRAP_PLATFORM\n ? process.env.GRANTTAP_BOOTSTRAP_PLATFORM : process.platform;\nconst nodeRoot = dryRun && process.env.GRANTTAP_BOOTSTRAP_NODE_ROOT\n ? process.env.GRANTTAP_BOOTSTRAP_NODE_ROOT : dirname(process.execPath);\nconst pathRoots = (process.env.PATH || \"\").split(delimiter).filter(Boolean);\nconst appData = process.env.APPDATA;\nconst roots = [nodeRoot, ...pathRoots, ...(appData ? [join(appData, \"npm\")] : [])];\nconst first = (paths) => paths.find((path) => existsSync(path));\n\nfunction launch() {\n if (platform !== \"win32\") {\n const installed = first(roots.map((root) => join(root, \"granttap-mcp\")));\n if (installed) return { command: installed, args: [] };\n const npx = first(roots.map((root) => join(root, \"npx\"))) || \"npx\";\n return { command: npx, args: [\"-y\", PACKAGE] };\n }\n const installed = first(roots.map((root) =>\n join(root, \"node_modules\", \"granttap-mcp\", \"bin\", \"granttap-mcp.mjs\")));\n if (installed) return { command: process.execPath, args: [installed] };\n const npx = first(roots.map((root) =>\n join(root, \"node_modules\", \"npm\", \"bin\", \"npx-cli.js\")));\n if (npx) return { command: process.execPath, args: [npx, \"-y\", PACKAGE] };\n throw new Error(\"Node.js/npm 22.13.0+ is required on this Windows device. Install npm and retry GrantTap.\");\n}\n\nlet target;\ntry { target = launch(); }\ncatch (error) {\n process.stderr.write(`[granttap] ${error.message}\\n`);\n process.exit(1);\n}\n\nif (dryRun) {\n process.stdout.write(JSON.stringify(target));\n process.exit(0);\n}\n\nconst child = spawn(target.command, target.args, { stdio: \"inherit\", windowsHide: true });\nchild.on(\"error\", (error) => {\n process.stderr.write(`[granttap] ${error.message}\\n`);\n process.exit(1);\n});\nchild.on(\"exit\", (code, signal) => {\n if (signal && platform !== \"win32\") {\n try { process.kill(process.pid, signal); } catch { process.exit(code ?? 1); }\n return;\n }\n process.exit(code ?? 1);\n});\n"
|
|
8
8
|
]
|
|
9
9
|
}
|
|
10
10
|
}
|
|
@@ -7,7 +7,7 @@ const { spawn } = require("node:child_process");
|
|
|
7
7
|
const { existsSync } = require("node:fs");
|
|
8
8
|
const { delimiter, dirname, join } = require("node:path");
|
|
9
9
|
|
|
10
|
-
const PACKAGE = "granttap-mcp@0.8.
|
|
10
|
+
const PACKAGE = "granttap-mcp@0.8.113";
|
|
11
11
|
const dryRun = process.env.GRANTTAP_BOOTSTRAP_DRY_RUN === "1";
|
|
12
12
|
const platform = dryRun && process.env.GRANTTAP_BOOTSTRAP_PLATFORM
|
|
13
13
|
? process.env.GRANTTAP_BOOTSTRAP_PLATFORM : process.platform;
|
|
@@ -57,3 +57,7 @@ including under launchd's stripped PATH. An explicit binary override keeps
|
|
|
57
57
|
priority. Version output retains prerelease suffixes so an alpha is not shown
|
|
58
58
|
as a stable release. Regression tests simulate installer output and verify the
|
|
59
59
|
original app binary remains unchanged.
|
|
60
|
+
|
|
61
|
+
MCP 0.8.113 reads installed Grok download versions and the bundled Codex CLI’s
|
|
62
|
+
own package manifest without launching either provider. Codex prerelease suffixes
|
|
63
|
+
are retained; missing or unsupported manifests remain unknown.
|