better-web-search-mcp 0.2.0 → 0.2.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.
Files changed (114) hide show
  1. package/dist/utils/cache.d.ts +3 -3
  2. package/dist/utils/cache.d.ts.map +1 -1
  3. package/dist/utils/cache.js +36 -11
  4. package/dist/utils/cache.js.map +1 -1
  5. package/dist/utils/config.d.ts.map +1 -1
  6. package/dist/utils/config.js +0 -6
  7. package/dist/utils/config.js.map +1 -1
  8. package/mcp.json +5 -2
  9. package/package.json +6 -5
  10. package/scripts/sync-mcp-version.mjs +31 -0
  11. package/dist/extraction/alternative.test.d.ts +0 -2
  12. package/dist/extraction/alternative.test.d.ts.map +0 -1
  13. package/dist/extraction/alternative.test.js +0 -145
  14. package/dist/extraction/alternative.test.js.map +0 -1
  15. package/dist/extraction/apiIntercept.test.d.ts +0 -2
  16. package/dist/extraction/apiIntercept.test.d.ts.map +0 -1
  17. package/dist/extraction/apiIntercept.test.js +0 -144
  18. package/dist/extraction/apiIntercept.test.js.map +0 -1
  19. package/dist/extraction/browser.test.d.ts +0 -2
  20. package/dist/extraction/browser.test.d.ts.map +0 -1
  21. package/dist/extraction/browser.test.js +0 -137
  22. package/dist/extraction/browser.test.js.map +0 -1
  23. package/dist/extraction/fetch.test.d.ts +0 -2
  24. package/dist/extraction/fetch.test.d.ts.map +0 -1
  25. package/dist/extraction/fetch.test.js +0 -85
  26. package/dist/extraction/fetch.test.js.map +0 -1
  27. package/dist/extraction/fusion.test.d.ts +0 -2
  28. package/dist/extraction/fusion.test.d.ts.map +0 -1
  29. package/dist/extraction/fusion.test.js +0 -91
  30. package/dist/extraction/fusion.test.js.map +0 -1
  31. package/dist/extraction/metadata.test.d.ts +0 -2
  32. package/dist/extraction/metadata.test.d.ts.map +0 -1
  33. package/dist/extraction/metadata.test.js +0 -45
  34. package/dist/extraction/metadata.test.js.map +0 -1
  35. package/dist/extraction/readability.test.d.ts +0 -2
  36. package/dist/extraction/readability.test.d.ts.map +0 -1
  37. package/dist/extraction/readability.test.js +0 -51
  38. package/dist/extraction/readability.test.js.map +0 -1
  39. package/dist/extraction/router.browser.test.d.ts +0 -2
  40. package/dist/extraction/router.browser.test.d.ts.map +0 -1
  41. package/dist/extraction/router.browser.test.js +0 -151
  42. package/dist/extraction/router.browser.test.js.map +0 -1
  43. package/dist/extraction/router.test.d.ts +0 -2
  44. package/dist/extraction/router.test.d.ts.map +0 -1
  45. package/dist/extraction/router.test.js +0 -238
  46. package/dist/extraction/router.test.js.map +0 -1
  47. package/dist/extraction/structured.test.d.ts +0 -2
  48. package/dist/extraction/structured.test.d.ts.map +0 -1
  49. package/dist/extraction/structured.test.js +0 -85
  50. package/dist/extraction/structured.test.js.map +0 -1
  51. package/dist/providers/brave.test.d.ts +0 -2
  52. package/dist/providers/brave.test.d.ts.map +0 -1
  53. package/dist/providers/brave.test.js +0 -150
  54. package/dist/providers/brave.test.js.map +0 -1
  55. package/dist/providers/duckduckgo.test.d.ts +0 -2
  56. package/dist/providers/duckduckgo.test.d.ts.map +0 -1
  57. package/dist/providers/duckduckgo.test.js +0 -102
  58. package/dist/providers/duckduckgo.test.js.map +0 -1
  59. package/dist/providers/index.test.d.ts +0 -2
  60. package/dist/providers/index.test.d.ts.map +0 -1
  61. package/dist/providers/index.test.js +0 -124
  62. package/dist/providers/index.test.js.map +0 -1
  63. package/dist/providers/tavily.test.d.ts +0 -2
  64. package/dist/providers/tavily.test.d.ts.map +0 -1
  65. package/dist/providers/tavily.test.js +0 -123
  66. package/dist/providers/tavily.test.js.map +0 -1
  67. package/dist/ranking/deduplicate.test.d.ts +0 -2
  68. package/dist/ranking/deduplicate.test.d.ts.map +0 -1
  69. package/dist/ranking/deduplicate.test.js +0 -76
  70. package/dist/ranking/deduplicate.test.js.map +0 -1
  71. package/dist/ranking/domainScore.test.d.ts +0 -2
  72. package/dist/ranking/domainScore.test.d.ts.map +0 -1
  73. package/dist/ranking/domainScore.test.js +0 -37
  74. package/dist/ranking/domainScore.test.js.map +0 -1
  75. package/dist/ranking/rerank.test.d.ts +0 -2
  76. package/dist/ranking/rerank.test.d.ts.map +0 -1
  77. package/dist/ranking/rerank.test.js +0 -71
  78. package/dist/ranking/rerank.test.js.map +0 -1
  79. package/dist/scaffold.test.d.ts +0 -2
  80. package/dist/scaffold.test.d.ts.map +0 -1
  81. package/dist/scaffold.test.js +0 -7
  82. package/dist/scaffold.test.js.map +0 -1
  83. package/dist/tools/extract.test.d.ts +0 -2
  84. package/dist/tools/extract.test.d.ts.map +0 -1
  85. package/dist/tools/extract.test.js +0 -140
  86. package/dist/tools/extract.test.js.map +0 -1
  87. package/dist/tools/research.test.d.ts +0 -2
  88. package/dist/tools/research.test.d.ts.map +0 -1
  89. package/dist/tools/research.test.js +0 -181
  90. package/dist/tools/research.test.js.map +0 -1
  91. package/dist/tools/search.test.d.ts +0 -2
  92. package/dist/tools/search.test.d.ts.map +0 -1
  93. package/dist/tools/search.test.js +0 -101
  94. package/dist/tools/search.test.js.map +0 -1
  95. package/dist/utils/cache.test.d.ts +0 -2
  96. package/dist/utils/cache.test.d.ts.map +0 -1
  97. package/dist/utils/cache.test.js +0 -172
  98. package/dist/utils/cache.test.js.map +0 -1
  99. package/dist/utils/config.test.d.ts +0 -2
  100. package/dist/utils/config.test.d.ts.map +0 -1
  101. package/dist/utils/config.test.js +0 -52
  102. package/dist/utils/config.test.js.map +0 -1
  103. package/dist/utils/domainProfile.test.d.ts +0 -2
  104. package/dist/utils/domainProfile.test.d.ts.map +0 -1
  105. package/dist/utils/domainProfile.test.js +0 -74
  106. package/dist/utils/domainProfile.test.js.map +0 -1
  107. package/dist/utils/queries.test.d.ts +0 -2
  108. package/dist/utils/queries.test.d.ts.map +0 -1
  109. package/dist/utils/queries.test.js +0 -36
  110. package/dist/utils/queries.test.js.map +0 -1
  111. package/dist/utils/retry.test.d.ts +0 -2
  112. package/dist/utils/retry.test.d.ts.map +0 -1
  113. package/dist/utils/retry.test.js +0 -153
  114. package/dist/utils/retry.test.js.map +0 -1
@@ -14,9 +14,9 @@ export type { ApiPattern, CacheOptions, PageCacheEntry } from "./cacheTypes.js";
14
14
  * A cache for search results, pages, API patterns, and domain profiles.
15
15
  *
16
16
  * Prefers a SQLite database at `data/cache.db` (WAL mode, auto-created
17
- * directory). When better-sqlite3 cannot be loaded, or when `memory: true`
18
- * is passed, every method transparently operates on an in-memory Map with
19
- * the same TTL semantics.
17
+ * directory). When better-sqlite3 cannot be loaded, when opening the
18
+ * database fails, or when `memory: true` is passed, every method
19
+ * transparently operates on an in-memory Map with the same TTL semantics.
20
20
  */
21
21
  export declare class Cache {
22
22
  private readonly db;
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,cAAc,EACf,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7D,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AA4DhF;;;;;;;GAOG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAwB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;gBAEzB,IAAI,GAAE,YAAiB;IA0BnC,qEAAqE;IACrE,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,4DAA4D;IAC5D,KAAK,IAAI,IAAI;IASb,0EAA0E;IAC1E,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAgBtC,0EAA0E;IAC1E,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAmB7D,4DAA4D;IAC5D,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAmB3C,gEAAgE;IAChE,OAAO,CACL,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,MAAM,GACjB,IAAI;IAoBP,kEAAkE;IAClE,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAazC,0EAA0E;IAC1E,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAkBjD,6DAA6D;IAC7D,aAAa,CACX,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,IAAI;IAcP,mEAAmE;IACnE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;IAc5C,0DAA0D;IAC1D,YAAY,IAAI,IAAI;CAarB"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,cAAc,EACf,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7D,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AA6FhF;;;;;;;GAOG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAwB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;gBAEzB,IAAI,GAAE,YAAiB;IAoBnC,qEAAqE;IACrE,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,4DAA4D;IAC5D,KAAK,IAAI,IAAI;IASb,0EAA0E;IAC1E,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAgBtC,0EAA0E;IAC1E,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAmB7D,4DAA4D;IAC5D,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAmB3C,gEAAgE;IAChE,OAAO,CACL,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,MAAM,GACjB,IAAI;IAoBP,kEAAkE;IAClE,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAazC,0EAA0E;IAC1E,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAkBjD,6DAA6D;IAC7D,aAAa,CACX,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,IAAI;IAcP,mEAAmE;IACnE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;IAc5C,0DAA0D;IAC1D,YAAY,IAAI,IAAI;CAarB"}
@@ -64,21 +64,52 @@ function loadDatabase() {
64
64
  return null;
65
65
  }
66
66
  }
67
+ /**
68
+ * Open and initialize the SQLite database for a cache instance.
69
+ *
70
+ * Returns `null` whenever the caller should use the in-memory backend
71
+ * instead: `memory: true` was requested, better-sqlite3 could not be loaded,
72
+ * or opening the file failed. That last case matters in production — a
73
+ * locked, corrupt, or unwritable `data/cache.db` used to throw straight out
74
+ * of the constructor and take the whole MCP server down at boot. Directory
75
+ * creation sits inside the guard too, since a read-only or permission-denied
76
+ * path fails there rather than in the driver.
77
+ */
78
+ function openDatabase(opts) {
79
+ const Database = loadDatabase();
80
+ if (opts.memory === true || Database === null) {
81
+ return null;
82
+ }
83
+ const dbPath = opts.dbPath ?? "data/cache.db";
84
+ try {
85
+ mkdirSync(dirname(dbPath), { recursive: true });
86
+ const db = new Database(dbPath);
87
+ db.pragma("journal_mode = WAL");
88
+ db.pragma("busy_timeout = 5000");
89
+ db.exec(SCHEMA);
90
+ return db;
91
+ }
92
+ catch (error) {
93
+ const reason = error instanceof Error ? error.message : String(error);
94
+ console.error(`[cache] SQLite init failed (${reason}); falling back to the in-memory cache`);
95
+ return null;
96
+ }
97
+ }
67
98
  /**
68
99
  * A cache for search results, pages, API patterns, and domain profiles.
69
100
  *
70
101
  * Prefers a SQLite database at `data/cache.db` (WAL mode, auto-created
71
- * directory). When better-sqlite3 cannot be loaded, or when `memory: true`
72
- * is passed, every method transparently operates on an in-memory Map with
73
- * the same TTL semantics.
102
+ * directory). When better-sqlite3 cannot be loaded, when opening the
103
+ * database fails, or when `memory: true` is passed, every method
104
+ * transparently operates on an in-memory Map with the same TTL semantics.
74
105
  */
75
106
  export class Cache {
76
107
  db;
77
108
  memory;
78
109
  memoryMode;
79
110
  constructor(opts = {}) {
80
- const Database = loadDatabase();
81
- if (opts.memory === true || Database === null) {
111
+ const db = openDatabase(opts);
112
+ if (db === null) {
82
113
  this.memoryMode = true;
83
114
  this.db = null;
84
115
  this.memory = new MemoryCache();
@@ -86,12 +117,6 @@ export class Cache {
86
117
  }
87
118
  this.memoryMode = false;
88
119
  this.memory = null;
89
- const dbPath = opts.dbPath ?? "data/cache.db";
90
- mkdirSync(dirname(dbPath), { recursive: true });
91
- const db = new Database(dbPath);
92
- db.pragma("journal_mode = WAL");
93
- db.pragma("busy_timeout = 5000");
94
- db.exec(SCHEMA);
95
120
  this.db = db;
96
121
  // Best-effort startup prune; empty catch is intentional — never block boot.
97
122
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAuBH,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,UAAU,IAAI,SAAS,CA0BtC;AAED,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,GAAG,cAAc,EAAE,CA2BjE;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACtC,GAAG,EAAE,SAAS,GACb,MAAM,CAgBR"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAuBH,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,UAAU,IAAI,SAAS,CA0BtC;AAED,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,GAAG,cAAc,EAAE,CAqBjE;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACtC,GAAG,EAAE,SAAS,GACb,MAAM,CAgBR"}
@@ -64,12 +64,6 @@ export function providerStatuses(cfg) {
64
64
  keyless: false,
65
65
  hint: cfg.tavilyApiKey ? "enabled" : "optional — set TAVILY_API_KEY",
66
66
  },
67
- {
68
- name: "serpapi",
69
- enabled: false,
70
- keyless: false,
71
- hint: "stub — not yet implemented",
72
- },
73
67
  ];
74
68
  }
75
69
  export function formatBanner(pkg, cfg) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
package/mcp.json CHANGED
@@ -1,11 +1,14 @@
1
1
  {
2
2
  "name": "better-web-search-mcp",
3
- "version": "0.1.0",
3
+ "version": "0.2.2",
4
4
  "description": "BetterWebSearch MCP — keyless-first web research (DuckDuckGo) with optional Brave/Tavily and 3-tier extraction",
5
5
  "mcpServers": {
6
6
  "better-web-search-mcp": {
7
7
  "command": "npx",
8
- "args": ["-y", "better-web-search-mcp"],
8
+ "args": [
9
+ "-y",
10
+ "better-web-search-mcp"
11
+ ],
9
12
  "env": {}
10
13
  }
11
14
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "better-web-search-mcp",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "MCP server for genuinely better web research — keyless-first (DuckDuckGo), 3-tier extraction, deep research. Brave/Tavily optional.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -34,11 +34,12 @@
34
34
  "registry": "https://registry.npmjs.org/"
35
35
  },
36
36
  "scripts": {
37
- "build": "tsc",
37
+ "build": "tsc -p tsconfig.build.json",
38
38
  "dev": "tsx watch src/index.ts",
39
39
  "test": "vitest run",
40
40
  "lint": "tsc --noEmit",
41
41
  "prepare": "npm run build",
42
+ "version": "node scripts/sync-mcp-version.mjs && git add mcp.json",
42
43
  "postinstall": "node scripts/check-native.mjs || true",
43
44
  "prepublishOnly": "npm run lint && npm test",
44
45
  "prepack": "npm run build",
@@ -46,9 +47,9 @@
46
47
  "version:patch": "npm version patch -m \"chore(release): %s\"",
47
48
  "version:minor": "npm version minor -m \"chore(release): %s\"",
48
49
  "version:major": "npm version major -m \"chore(release): %s\"",
49
- "release:patch": "npm run version:patch && npm publish && git push --follow-tags",
50
- "release:minor": "npm run version:minor && npm publish && git push --follow-tags",
51
- "release:major": "npm run version:major && npm publish && git push --follow-tags",
50
+ "release:patch": "npm run version:patch && git push --follow-tags",
51
+ "release:minor": "npm run version:minor && git push --follow-tags",
52
+ "release:major": "npm run version:major && git push --follow-tags",
52
53
  "check:publish": "npm pack --dry-run",
53
54
  "docs:api": "typedoc --options typedoc.json && node scripts/typedoc-postprocess.mjs",
54
55
  "docs:build": "npm run docs:api && hugo --source site --gc --minify",
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Copy the package version into mcp.json.
4
+ *
5
+ * Runs from the `version` lifecycle hook, which npm fires after bumping
6
+ * package.json but before it creates the release commit, so the synced
7
+ * mcp.json lands in that same commit. Without this the manifest silently
8
+ * drifts — it still read 0.1.0 while npm was publishing 0.2.1.
9
+ */
10
+
11
+ import { readFileSync, writeFileSync } from "node:fs";
12
+ import { dirname, join } from "node:path";
13
+ import { fileURLToPath } from "node:url";
14
+
15
+ const root = join(dirname(fileURLToPath(import.meta.url)), "..");
16
+ const pkgPath = join(root, "package.json");
17
+ const mcpPath = join(root, "mcp.json");
18
+
19
+ const { version } = JSON.parse(readFileSync(pkgPath, "utf8"));
20
+ const raw = readFileSync(mcpPath, "utf8");
21
+ const manifest = JSON.parse(raw);
22
+
23
+ if (manifest.version === version) {
24
+ process.exit(0);
25
+ }
26
+
27
+ manifest.version = version;
28
+ // Preserve the file's existing trailing newline convention.
29
+ const trailing = raw.endsWith("\n") ? "\n" : "";
30
+ writeFileSync(mcpPath, `${JSON.stringify(manifest, null, 2)}${trailing}`);
31
+ process.stdout.write(`mcp.json version -> ${version}\n`);
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=alternative.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"alternative.test.d.ts","sourceRoot":"","sources":["../../src/extraction/alternative.test.ts"],"names":[],"mappings":""}
@@ -1,145 +0,0 @@
1
- import { describe, expect, it, vi } from "vitest";
2
- import { buildAlternativeUrls, buildSearchQueries, findAlternativeSources, MAX_SNIPPETS, SNIPPET_CONFIDENCE, } from "./alternative.js";
3
- import { Cache } from "../utils/cache.js";
4
- /** A blocked (403) page fixture. */
5
- function blockedPage(url) {
6
- return {
7
- html: "",
8
- headers: { "content-type": "text/html" },
9
- status: 403,
10
- url,
11
- };
12
- }
13
- /** A usable (200) page fixture. */
14
- function okPage(url) {
15
- return {
16
- html: "<html><body><article><p>full article text</p></article></body></html>",
17
- headers: { "content-type": "text/html" },
18
- status: 200,
19
- url,
20
- };
21
- }
22
- /** A search result fixture. */
23
- const SNIPPET = {
24
- title: "Syndicated copy",
25
- url: "https://syndicated.example/article",
26
- snippet: "The full article text appears here.",
27
- source: "duckduckgo",
28
- };
29
- describe("buildAlternativeUrls", () => {
30
- it("returns original, ?output=1, /amp, and ?amp variants", () => {
31
- expect(buildAlternativeUrls("https://example.com/article")).toEqual([
32
- "https://example.com/article",
33
- "https://example.com/article?output=1",
34
- "https://example.com/article/amp",
35
- "https://example.com/article?amp",
36
- ]);
37
- });
38
- it("uses & when the URL already has a query string", () => {
39
- expect(buildAlternativeUrls("https://example.com/article?id=7")).toEqual([
40
- "https://example.com/article?id=7",
41
- "https://example.com/article?id=7&output=1",
42
- "https://example.com/article/amp?id=7",
43
- "https://example.com/article?id=7&amp",
44
- ]);
45
- });
46
- it("returns the original URL when it cannot be parsed", () => {
47
- expect(buildAlternativeUrls("not a url")).toEqual(["not a url"]);
48
- });
49
- });
50
- describe("buildSearchQueries", () => {
51
- it("quotes the title and adds a site-restricted query", () => {
52
- expect(buildSearchQueries("https://example.com/article", "My Article")).toEqual([
53
- '"My Article"',
54
- 'site:example.com "My Article"',
55
- "My Article example.com",
56
- ]);
57
- });
58
- it("falls back to a bare site query when the title is null", () => {
59
- expect(buildSearchQueries("https://example.com/article", null)).toEqual([
60
- "site:example.com",
61
- ]);
62
- });
63
- });
64
- describe("findAlternativeSources", () => {
65
- it("returns snippet evidence when every URL variant is blocked", async () => {
66
- const fetchPage = vi
67
- .fn()
68
- .mockResolvedValue(blockedPage("https://example.com/article"));
69
- const aggregateSearch = vi.fn().mockResolvedValue([SNIPPET]);
70
- const deps = { fetchPage, aggregateSearch };
71
- const evidence = await findAlternativeSources("https://example.com/article", "My Article", deps);
72
- expect(fetchPage).toHaveBeenCalledTimes(4);
73
- expect(evidence).toHaveLength(1);
74
- expect(evidence[0]).toEqual({
75
- source: "search_snippet",
76
- type: "search_snippet",
77
- confidence: SNIPPET_CONFIDENCE,
78
- url: "https://syndicated.example/article",
79
- snippet: "The full article text appears here.",
80
- });
81
- });
82
- it("returns page evidence when an AMP variant succeeds", async () => {
83
- const fetchPage = vi.fn().mockImplementation(async (url) => {
84
- return url.includes("/amp") ? okPage(url) : blockedPage(url);
85
- });
86
- const aggregateSearch = vi.fn();
87
- const deps = { fetchPage, aggregateSearch };
88
- const evidence = await findAlternativeSources("https://example.com/article", "My Article", deps);
89
- expect(aggregateSearch).not.toHaveBeenCalled();
90
- expect(evidence).toHaveLength(1);
91
- expect(evidence[0]).toMatchObject({
92
- source: "page",
93
- type: "page",
94
- url: "https://example.com/article/amp",
95
- });
96
- });
97
- it("uses a cached variant without fetching it", async () => {
98
- const cache = new Cache({ memory: true });
99
- cache.setPage("https://example.com/article/amp", "cached amp content", "http_fetch", 0.85);
100
- const fetchPage = vi
101
- .fn()
102
- .mockResolvedValue(blockedPage("https://example.com/article"));
103
- const aggregateSearch = vi.fn();
104
- const deps = { fetchPage, aggregateSearch, cache };
105
- const evidence = await findAlternativeSources("https://example.com/article", "My Article", deps);
106
- expect(fetchPage).toHaveBeenCalledTimes(2);
107
- expect(aggregateSearch).not.toHaveBeenCalled();
108
- expect(evidence).toHaveLength(1);
109
- expect(evidence[0]).toMatchObject({
110
- source: "page",
111
- url: "https://example.com/article/amp",
112
- confidence: 0.85,
113
- });
114
- });
115
- it("generates a site fallback query when the title is null", async () => {
116
- const fetchPage = vi
117
- .fn()
118
- .mockResolvedValue(blockedPage("https://example.com/article"));
119
- const aggregateSearch = vi.fn().mockResolvedValue([SNIPPET]);
120
- const deps = { fetchPage, aggregateSearch };
121
- await findAlternativeSources("https://example.com/article", null, deps);
122
- expect(aggregateSearch).toHaveBeenCalledWith("site:example.com", {
123
- count: MAX_SNIPPETS,
124
- });
125
- });
126
- it("returns [] when the search is empty instead of throwing", async () => {
127
- const fetchPage = vi
128
- .fn()
129
- .mockResolvedValue(blockedPage("https://example.com/article"));
130
- const aggregateSearch = vi.fn().mockResolvedValue([]);
131
- const deps = { fetchPage, aggregateSearch };
132
- const evidence = await findAlternativeSources("https://example.com/article", "My Article", deps);
133
- expect(evidence).toEqual([]);
134
- });
135
- it("returns [] when the search provider throws", async () => {
136
- const fetchPage = vi
137
- .fn()
138
- .mockResolvedValue(blockedPage("https://example.com/article"));
139
- const aggregateSearch = vi.fn().mockRejectedValue(new Error("provider down"));
140
- const deps = { fetchPage, aggregateSearch };
141
- const evidence = await findAlternativeSources("https://example.com/article", "My Article", deps);
142
- expect(evidence).toEqual([]);
143
- });
144
- });
145
- //# sourceMappingURL=alternative.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"alternative.test.js","sourceRoot":"","sources":["../../src/extraction/alternative.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=apiIntercept.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apiIntercept.test.d.ts","sourceRoot":"","sources":["../../src/extraction/apiIntercept.test.ts"],"names":[],"mappings":""}
@@ -1,144 +0,0 @@
1
- import { describe, expect, it, vi } from "vitest";
2
- import { discoverApiPatterns, installApiCapture, } from "./apiIntercept.js";
3
- /** Build a fake Playwright response object. */
4
- function fakeResponse(url, method, contentType, data) {
5
- return {
6
- url: () => url,
7
- request: () => ({ method: () => method }),
8
- headers: () => ({ "content-type": contentType }),
9
- json: async () => data,
10
- };
11
- }
12
- /** Build a fake Playwright page that records its listeners. */
13
- function fakePage() {
14
- const listeners = [];
15
- return {
16
- listeners,
17
- on: (_event, listener) => {
18
- listeners.push(listener);
19
- },
20
- off: (_event, listener) => {
21
- const idx = listeners.indexOf(listener);
22
- if (idx !== -1) {
23
- listeners.splice(idx, 1);
24
- }
25
- },
26
- };
27
- }
28
- describe("installApiCapture", () => {
29
- it("captures JSON responses with url/method/contentType/data", async () => {
30
- const page = fakePage();
31
- const handle = installApiCapture(page);
32
- const listener = page.listeners[0];
33
- await listener(fakeResponse("https://api.example.com/products/123", "GET", "application/json; charset=utf-8", { id: 123 }));
34
- expect(handle.captured).toHaveLength(1);
35
- expect(handle.captured[0]).toMatchObject({
36
- url: "https://api.example.com/products/123",
37
- method: "GET",
38
- contentType: "application/json; charset=utf-8",
39
- data: { id: 123 },
40
- });
41
- });
42
- it("ignores non-JSON content types", async () => {
43
- const page = fakePage();
44
- const handle = installApiCapture(page);
45
- const listener = page.listeners[0];
46
- await listener(fakeResponse("https://example.com/style.css", "GET", "text/css", "body{}"));
47
- expect(handle.captured).toHaveLength(0);
48
- });
49
- it("skips JSON responses whose body fails to parse", async () => {
50
- const page = fakePage();
51
- const handle = installApiCapture(page);
52
- const listener = page.listeners[0];
53
- const bad = fakeResponse("https://api.example.com/broken", "GET", "application/json", { id: 1 });
54
- bad.json = async () => {
55
- throw new Error("parse failed");
56
- };
57
- await listener(bad);
58
- expect(handle.captured).toHaveLength(0);
59
- });
60
- it("remove() detaches the listener", async () => {
61
- const page = fakePage();
62
- const handle = installApiCapture(page);
63
- expect(page.listeners).toHaveLength(1);
64
- handle.remove();
65
- expect(page.listeners).toHaveLength(0);
66
- });
67
- });
68
- describe("discoverApiPatterns", () => {
69
- it("normalizes numeric path segments to *", () => {
70
- const rows = discoverApiPatterns("example.com", [
71
- {
72
- url: "https://example.com/api/products/123",
73
- method: "GET",
74
- contentType: "application/json",
75
- data: {},
76
- },
77
- ]);
78
- expect(rows).toEqual([
79
- {
80
- domain: "example.com",
81
- endpoint_pattern: "/api/products/*",
82
- method: "GET",
83
- content_type: "application/json",
84
- },
85
- ]);
86
- });
87
- it("deduplicates identical method+pattern pairs", () => {
88
- const rows = discoverApiPatterns("example.com", [
89
- {
90
- url: "https://example.com/api/products/123",
91
- method: "GET",
92
- contentType: "application/json",
93
- data: {},
94
- },
95
- {
96
- url: "https://example.com/api/products/456",
97
- method: "GET",
98
- contentType: "application/json",
99
- data: {},
100
- },
101
- ]);
102
- expect(rows).toHaveLength(1);
103
- });
104
- it("keeps distinct methods as separate patterns", () => {
105
- const rows = discoverApiPatterns("example.com", [
106
- {
107
- url: "https://example.com/api/products/123",
108
- method: "GET",
109
- contentType: "application/json",
110
- data: {},
111
- },
112
- {
113
- url: "https://example.com/api/products/123",
114
- method: "POST",
115
- contentType: "application/json",
116
- data: {},
117
- },
118
- ]);
119
- expect(rows).toHaveLength(2);
120
- });
121
- it("strips parameters from the content type", () => {
122
- const rows = discoverApiPatterns("example.com", [
123
- {
124
- url: "https://example.com/api/items",
125
- method: "GET",
126
- contentType: "application/json; charset=utf-8",
127
- data: {},
128
- },
129
- ]);
130
- expect(rows[0]?.content_type).toBe("application/json");
131
- });
132
- it("skips malformed URLs", () => {
133
- const rows = discoverApiPatterns("example.com", [
134
- {
135
- url: "not a url",
136
- method: "GET",
137
- contentType: "application/json",
138
- data: {},
139
- },
140
- ]);
141
- expect(rows).toHaveLength(0);
142
- });
143
- });
144
- //# sourceMappingURL=apiIntercept.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apiIntercept.test.js","sourceRoot":"","sources":["../../src/extraction/apiIntercept.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=browser.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser.test.d.ts","sourceRoot":"","sources":["../../src/extraction/browser.test.ts"],"names":[],"mappings":""}