harness-evolver 4.2.7 → 4.2.9

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
  "name": "harness-evolver",
3
3
  "description": "LangSmith-native autonomous agent optimization — evolves LLM agent code using multi-agent proposers, LangSmith experiments, and git worktrees",
4
- "version": "4.2.7",
4
+ "version": "4.2.9",
5
5
  "author": {
6
6
  "name": "Raphael Valdetaro"
7
7
  },
package/bin/install.js CHANGED
@@ -481,17 +481,40 @@ async function configureOptionalIntegrations(rl, nonInteractive) {
481
481
  step(c.bold("Optional Integrations"));
482
482
  barEmpty();
483
483
 
484
- // Context7 MCP
485
- const hasContext7 = (() => {
484
+ // Helper: check if an MCP server is configured anywhere
485
+ function hasMcpServer(...names) {
486
486
  try {
487
487
  for (const p of [path.join(HOME, ".claude", "settings.json"), path.join(HOME, ".claude.json")]) {
488
- if (fs.existsSync(p)) {
489
- const s = JSON.parse(fs.readFileSync(p, "utf8"));
490
- if (s.mcpServers && (s.mcpServers.context7 || s.mcpServers.Context7)) return true;
488
+ if (!fs.existsSync(p)) continue;
489
+ const s = JSON.parse(fs.readFileSync(p, "utf8"));
490
+ // Check top-level mcpServers
491
+ if (s.mcpServers) {
492
+ for (const name of names) {
493
+ if (s.mcpServers[name]) return true;
494
+ }
495
+ }
496
+ // Check per-project mcpServers (claude mcp add saves here)
497
+ if (s.projects) {
498
+ for (const proj of Object.values(s.projects)) {
499
+ if (proj && proj.mcpServers) {
500
+ for (const name of names) {
501
+ if (proj.mcpServers[name]) return true;
502
+ }
503
+ }
504
+ }
491
505
  }
492
506
  }
493
507
  } catch {}
494
508
  return false;
509
+ }
510
+
511
+ // Context7 MCP — check settings, per-project, AND plugin marketplace
512
+ const hasContext7 = (() => {
513
+ if (hasMcpServer("context7", "Context7")) return true;
514
+ // Check plugin marketplace install
515
+ const pluginMcp = path.join(HOME, ".claude", "plugins", "marketplaces", "claude-plugins-official", "external_plugins", "context7", ".mcp.json");
516
+ if (fs.existsSync(pluginMcp)) return true;
517
+ return false;
495
518
  })();
496
519
 
497
520
  if (hasContext7) {
@@ -513,16 +536,11 @@ async function configureOptionalIntegrations(rl, nonInteractive) {
513
536
 
514
537
  barEmpty();
515
538
 
516
- // LangChain Docs MCP
539
+ // LangChain Docs MCP — check settings, per-project, AND plugin marketplace
517
540
  const hasLcDocs = (() => {
518
- try {
519
- for (const p of [path.join(HOME, ".claude", "settings.json"), path.join(HOME, ".claude.json")]) {
520
- if (fs.existsSync(p)) {
521
- const s = JSON.parse(fs.readFileSync(p, "utf8"));
522
- if (s.mcpServers && (s.mcpServers["docs-langchain"] || s.mcpServers["LangChain Docs"])) return true;
523
- }
524
- }
525
- } catch {}
541
+ if (hasMcpServer("docs-langchain", "LangChain Docs")) return true;
542
+ const pluginMcp = path.join(HOME, ".claude", "plugins", "marketplaces", "claude-plugins-official", "external_plugins", "docs-langchain", ".mcp.json");
543
+ if (fs.existsSync(pluginMcp)) return true;
526
544
  return false;
527
545
  })();
528
546
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "harness-evolver",
3
- "version": "4.2.7",
3
+ "version": "4.2.9",
4
4
  "description": "LangSmith-native autonomous agent optimization for Claude Code",
5
5
  "author": "Raphael Valdetaro",
6
6
  "license": "MIT",