@createsomething/ground-mcp 0.2.4 → 0.3.2

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/README.md CHANGED
@@ -20,6 +20,56 @@ Works with Claude Code, Cursor, Windsurf, VS Code Copilot, Claude Desktop, and a
20
20
 
21
21
  **The difference**: Ground requires computation before claims. No hallucinated analysis.
22
22
 
23
+ ## Recommended agent path
24
+
25
+ Use CTX and Ground for different evidence:
26
+
27
+ - **CTX** retrieves the history of earlier agent work.
28
+ - **Ground** computes facts about the code that is on disk now.
29
+
30
+ For a current-source review, start with the compact verified loop:
31
+
32
+ 1. `ground_analyze` — get machine-readable findings for a directory.
33
+ 2. `ground_diff` — restrict the same checks to changes since a Git baseline.
34
+ 3. `ground_verify_fix` — confirm the specific reported issue is gone.
35
+ 4. `ground_explain` — inspect why Ground included, excluded, or scored a result.
36
+
37
+ The MCP server also retains targeted and graph tools for deeper investigations.
38
+ The installed CLI exposes the same batch and Git-aware entry points:
39
+
40
+ ```bash
41
+ ground analyze ./src --checks duplicates,dead_exports
42
+ ground diff ./src --base origin/main --checks duplicates
43
+ ```
44
+
45
+ Both commands print JSON evidence. `ground diff` only returns files inside the
46
+ requested directory and resolves Git paths from the repository root, so it is
47
+ safe to run from a package inside a monorepo.
48
+
49
+ ### Diff coverage
50
+
51
+ `ground diff` determines analyzability from the requested checks. Its current
52
+ duplicate and orphan checks cover TypeScript, JavaScript, and `.mjs` source
53
+ paths. The legacy `changed_files` and `changed_file_list` fields continue to
54
+ describe only analyzable source files. Use the added
55
+ `discovered_changed_files`, `analyzable_changed_files`, and
56
+ `excluded_changed_files` fields to see the full Git change scope and why a path
57
+ was not analyzed, including `unsupported_by_requested_checks`. If no changed
58
+ source is eligible, the result explicitly says so; it does not describe
59
+ excluded files as clean.
60
+
61
+ For promotion evidence, inspect `check_coverage.<check>.status`,
62
+ `analyzed_changed_files`, and `excluded_changed_files`. Ground 0.3.2 removes
63
+ `ground diff`'s silent 500-file truncation and makes source traversal
64
+ deterministic and cycle-safe. Diff mode parses the complete corpus but only
65
+ compares pairs involving changed files. A changed file is only listed as
66
+ analyzed for a check after that check completed for the file; partial or failed
67
+ analysis stays explicit in the per-check exclusions. Standalone broad duplicate
68
+ scans retain their safety bound and report `scan_complete: false` when it is hit.
69
+
70
+ The release package includes the native Apple Silicon binaries directly; other
71
+ supported platforms download the matching verified release asset during install.
72
+
23
73
  ## The Problem
24
74
 
25
75
  AI agents are confident. Too confident.
@@ -317,6 +367,27 @@ Ground loads `.ground.yml` from your project root for:
317
367
 
318
368
  See [Full Documentation](https://github.com/createsomethingtoday/create-something-monorepo/tree/main/packages/ground) for configuration reference.
319
369
 
370
+ ## Native service pilot
371
+
372
+ The CRE-1473 pilot keeps TypeScript as the control plane and invokes the existing Rust `ground-mcp` binary through a small, typed MCP adapter. It is a bounded proof for analysis workloads, not a production routing change or a broad language migration.
373
+
374
+ The pilot owns four things:
375
+
376
+ - `pilot/ground-native-client.ts` — discovers and calls `ground_analyze` over stdio MCP with explicit timeout and error behavior
377
+ - `pilot/benchmark.ts` — captures repeated native samples plus a directional comparison with the existing TypeScript duplicate-analysis script
378
+ - `pilot/ground-benchmark-receipt.schema.json` — makes the retained evidence machine-checkable
379
+ - `pilot/validate-receipt.ts` — independently rejects incomplete, failed, or inconsistent receipts
380
+
381
+ From the repository root, run:
382
+
383
+ ```bash
384
+ pnpm --filter @createsomething/ground-mcp run pilot:verify
385
+ ```
386
+
387
+ The benchmark defaults to `packages/mcp-core/src`, five retained samples, one warmup, and the release binary at `packages/ground/target/release/ground-mcp`. Metrics between the Rust MCP path and TypeScript script are directional only because the implementations do not use identical parsers or algorithms.
388
+
389
+ Rollback is removal of the pilot adapter, benchmark, and package-local development scripts. No existing Ground command, npm installer path, Cloudflare surface, or production consumer is redirected by this pilot.
390
+
320
391
  ## Links
321
392
 
322
393
  - [Full Documentation](https://github.com/createsomethingtoday/create-something-monorepo/tree/main/packages/ground)
@@ -331,7 +402,7 @@ MIT
331
402
 
332
403
  ## Related
333
404
 
334
- Looking for task coordination? See [@createsomething/loom-mcp](https://www.npmjs.com/package/@createsomething/loom-mcp) — multi-agent coordination with crash recovery.
405
+ Looking for task coordination? Use Linear with the CREATE SOMETHING `pnpm linear:*` wrappers for tracked work, ownership, status, and delivery evidence.
335
406
 
336
407
  ## Keywords
337
408
 
package/bin/ground ADDED
Binary file
package/bin/ground-mcp CHANGED
Binary file
package/install.js CHANGED
@@ -14,6 +14,8 @@ const zlib = require('zlib');
14
14
 
15
15
  const REPO = 'createsomethingtoday/create-something-monorepo';
16
16
  const VERSION = require('./package.json').version;
17
+ const SKIP_INSTALL = process.env.GROUND_MCP_SKIP_BINARY_INSTALL === '1';
18
+ const IS_SOURCE_TREE_INSTALL = fs.existsSync(path.resolve(__dirname, '../Cargo.toml'));
17
19
 
18
20
  // Platform mapping
19
21
  // Note: macOS Intel uses arm64 binary via Rosetta 2
@@ -44,10 +46,25 @@ function getBinaryName() {
44
46
  return name;
45
47
  }
46
48
 
47
- function getDownloadUrl(binaryName) {
48
- const ext = process.platform === 'win32' ? 'zip' : 'tar.gz';
49
- // Tag format: v0.2.0
50
- return `https://github.com/${REPO}/releases/download/v${VERSION}/ground-${binaryName}.${ext}`;
49
+ function getDownloadUrl(binaryName, platform = process.platform) {
50
+ const ext = platform === 'win32' ? 'zip' : 'tar.gz';
51
+ return `https://github.com/${REPO}/releases/download/ground-v${VERSION}/ground-${binaryName}.${ext}`;
52
+ }
53
+
54
+ function hasBundledNativeBinaries() {
55
+ // The npm artifact includes a release-built Apple Silicon bootstrap pair.
56
+ // Other platforms continue through the release-asset downloader below.
57
+ if (getPlatformKey() !== 'darwin-arm64') return false;
58
+
59
+ const binDir = path.join(__dirname, 'bin');
60
+ return ['ground', 'ground-mcp'].every((name) => {
61
+ const binary = path.join(binDir, name);
62
+ try {
63
+ return fs.statSync(binary).isFile() && (fs.statSync(binary).mode & 0o111) !== 0;
64
+ } catch {
65
+ return false;
66
+ }
67
+ });
51
68
  }
52
69
 
53
70
  async function download(url) {
@@ -92,6 +109,21 @@ async function extractZip(buffer, destDir) {
92
109
  }
93
110
 
94
111
  async function install() {
112
+ if (SKIP_INSTALL) {
113
+ console.log('Ground MCP: Skipping binary install because GROUND_MCP_SKIP_BINARY_INSTALL=1');
114
+ return;
115
+ }
116
+
117
+ if (IS_SOURCE_TREE_INSTALL) {
118
+ console.log('Ground MCP: Skipping binary install in source checkout');
119
+ return;
120
+ }
121
+
122
+ if (hasBundledNativeBinaries()) {
123
+ console.log('Ground MCP: Using bundled darwin-arm64 binaries');
124
+ return;
125
+ }
126
+
95
127
  console.log('Ground MCP: Installing binary...');
96
128
 
97
129
  const binaryName = getBinaryName();
@@ -166,5 +198,10 @@ async function install() {
166
198
  }
167
199
  }
168
200
 
169
- // Run installer
170
- install();
201
+ if (require.main === module) {
202
+ install();
203
+ }
204
+
205
+ module.exports = {
206
+ getDownloadUrl,
207
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@createsomething/ground-mcp",
3
- "version": "0.2.4",
3
+ "version": "0.3.2",
4
4
  "description": "Grounded claims for code. MCP server that prevents AI hallucination in code analysis.",
5
5
  "author": "CREATE SOMETHING <hello@createsomething.io>",
6
6
  "license": "MIT",
@@ -48,10 +48,24 @@
48
48
  "css-analysis"
49
49
  ],
50
50
  "bin": {
51
+ "ground": "bin/ground",
51
52
  "ground-mcp": "bin/ground-mcp"
52
53
  },
53
54
  "scripts": {
54
- "postinstall": "node install.js"
55
+ "postinstall": "node install.js",
56
+ "pilot:build": "cargo build --release --manifest-path ../Cargo.toml --bin ground --bin ground-mcp",
57
+ "pilot:benchmark": "tsx pilot/benchmark.ts",
58
+ "pilot:check": "tsc --noEmit -p pilot/tsconfig.json",
59
+ "pilot:receipt:validate": "tsx pilot/validate-receipt.ts",
60
+ "pilot:test": "pnpm run pilot:build && tsx --test pilot/*.test.ts",
61
+ "pilot:verify": "pnpm run pilot:check && pnpm run pilot:test && pnpm run pilot:benchmark && pnpm run pilot:receipt:validate -- pilot/evidence/ground-native-benchmark-receipt.v1.json"
62
+ },
63
+ "devDependencies": {
64
+ "@modelcontextprotocol/sdk": "^1.25.3",
65
+ "@types/node": "^24.10.9",
66
+ "ajv": "^8.17.1",
67
+ "tsx": "^4.21.0",
68
+ "typescript": "^5.9.3"
55
69
  },
56
70
  "files": [
57
71
  "bin",