mindforge-mcp-server 11.9.2 → 11.9.4

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 (2) hide show
  1. package/dist/index.js +54 -15
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -7868,11 +7868,11 @@ function datetimeRegex(args) {
7868
7868
  regex = `${regex}(${opts.join("|")})`;
7869
7869
  return new RegExp(`^${regex}$`);
7870
7870
  }
7871
- function isValidIP(ip, version2) {
7872
- if ((version2 === "v4" || !version2) && ipv4Regex.test(ip)) {
7871
+ function isValidIP(ip, version3) {
7872
+ if ((version3 === "v4" || !version3) && ipv4Regex.test(ip)) {
7873
7873
  return true;
7874
7874
  }
7875
- if ((version2 === "v6" || !version2) && ipv6Regex.test(ip)) {
7875
+ if ((version3 === "v6" || !version3) && ipv6Regex.test(ip)) {
7876
7876
  return true;
7877
7877
  }
7878
7878
  return false;
@@ -7899,11 +7899,11 @@ function isValidJWT(jwt, alg) {
7899
7899
  return false;
7900
7900
  }
7901
7901
  }
7902
- function isValidCidr(ip, version2) {
7903
- if ((version2 === "v4" || !version2) && ipv4CidrRegex.test(ip)) {
7902
+ function isValidCidr(ip, version3) {
7903
+ if ((version3 === "v4" || !version3) && ipv4CidrRegex.test(ip)) {
7904
7904
  return true;
7905
7905
  }
7906
- if ((version2 === "v6" || !version2) && ipv6CidrRegex.test(ip)) {
7906
+ if ((version3 === "v6" || !version3) && ipv6CidrRegex.test(ip)) {
7907
7907
  return true;
7908
7908
  }
7909
7909
  return false;
@@ -11647,10 +11647,10 @@ var ksuid = /^[A-Za-z0-9]{27}$/;
11647
11647
  var nanoid = /^[a-zA-Z0-9_-]{21}$/;
11648
11648
  var duration = /^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/;
11649
11649
  var guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;
11650
- var uuid = (version2) => {
11651
- if (!version2)
11650
+ var uuid = (version3) => {
11651
+ if (!version3)
11652
11652
  return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$/;
11653
- return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version2}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);
11653
+ return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version3}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);
11654
11654
  };
11655
11655
  var email = /^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/;
11656
11656
  var _emoji = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;
@@ -21659,7 +21659,36 @@ var WebSocketEventStream = class {
21659
21659
  this.maxReconnectAttempts = 5;
21660
21660
  this.listeners = /* @__PURE__ */ new Map();
21661
21661
  }
21662
+ /**
21663
+ * Dispatch to registered listeners. One dispatch path for messages, reconnect failures and
21664
+ * stream death, so those three cannot drift apart in how they treat a throwing listener.
21665
+ *
21666
+ * A missing 'error' listener does NOT mean silence: a reconnect that fails invisibly leaves the
21667
+ * consumer believing the stream is live, which is the failure mode this class was already in.
21668
+ */
21669
+ emit(eventType, data) {
21670
+ const handlers = this.listeners.get(eventType);
21671
+ if (!handlers || handlers.size === 0) {
21672
+ if (eventType === "error" && typeof process !== "undefined" && process.stderr) {
21673
+ const message = data instanceof Error ? data.message : String(data);
21674
+ process.stderr.write(`[MindForge SDK] event stream error: ${message}
21675
+ `);
21676
+ }
21677
+ return;
21678
+ }
21679
+ handlers.forEach((handler) => {
21680
+ try {
21681
+ handler(data);
21682
+ } catch {
21683
+ }
21684
+ });
21685
+ }
21662
21686
  async connect() {
21687
+ if (typeof WebSocket === "undefined") {
21688
+ throw new Error(
21689
+ "WebSocketEventStream requires a global WebSocket: Node 22+, a browser, or the optional 'ws' package installed and assigned to globalThis.WebSocket. This SDK declares no runtime dependencies, so it does not install one for you."
21690
+ );
21691
+ }
21663
21692
  return new Promise((resolve, reject) => {
21664
21693
  this.ws = new WebSocket(this.url);
21665
21694
  this.ws.onopen = () => {
@@ -21669,16 +21698,22 @@ var WebSocketEventStream = class {
21669
21698
  this.ws.onerror = (err) => reject(err);
21670
21699
  this.ws.onmessage = (event) => {
21671
21700
  try {
21672
- const parsed = JSON.parse(event.data.toString());
21673
- const handlers = this.listeners.get(parsed.type) || /* @__PURE__ */ new Set();
21674
- handlers.forEach((handler) => handler(parsed.data));
21701
+ const parsed = JSON.parse(String(event.data));
21702
+ this.emit(parsed.type, parsed.data);
21675
21703
  } catch {
21676
21704
  }
21677
21705
  };
21678
21706
  this.ws.onclose = () => {
21679
21707
  if (this.reconnectAttempts < this.maxReconnectAttempts) {
21680
21708
  this.reconnectAttempts++;
21681
- setTimeout(() => this.connect(), 1e3 * this.reconnectAttempts);
21709
+ setTimeout(() => {
21710
+ this.connect().catch((err) => this.emit("error", err));
21711
+ }, 1e3 * this.reconnectAttempts);
21712
+ } else if (this.maxReconnectAttempts > 0) {
21713
+ this.emit("close", {
21714
+ reason: "reconnect attempts exhausted",
21715
+ attempts: this.reconnectAttempts
21716
+ });
21682
21717
  }
21683
21718
  };
21684
21719
  });
@@ -21867,7 +21902,8 @@ var MindForgeClient = class extends import_events.EventEmitter {
21867
21902
  await eventSource.connect();
21868
21903
  const chunks = [];
21869
21904
  let resolveNext = null;
21870
- eventSource.on("stream_chunk", (data) => {
21905
+ eventSource.on("stream_chunk", (raw) => {
21906
+ const data = raw;
21871
21907
  if (resolveNext) {
21872
21908
  resolveNext({ value: data, done: data.type === "done" });
21873
21909
  resolveNext = null;
@@ -21975,6 +22011,9 @@ var MindForgeClient = class extends import_events.EventEmitter {
21975
22011
  }
21976
22012
  };
21977
22013
 
22014
+ // package.json
22015
+ var version2 = "11.9.4";
22016
+
21978
22017
  // src/index.ts
21979
22018
  var PROJECT_ROOT = process.env.CLAUDE_PROJECT_DIR || process.cwd();
21980
22019
  var memory = () => new MindForgeMemory(PROJECT_ROOT);
@@ -21999,7 +22038,7 @@ If MindForge is not set up in this project, run \`npx mindforge-cc@latest --clau
21999
22038
  };
22000
22039
  }
22001
22040
  }
22002
- var server = new McpServer({ name: "mindforge", version: "11.4.0" });
22041
+ var server = new McpServer({ name: "mindforge", version: version2 });
22003
22042
  function registerTool(name, config2, handler) {
22004
22043
  server.registerTool(name, config2, handler);
22005
22044
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mindforge-mcp-server",
3
- "version": "11.9.2",
3
+ "version": "11.9.4",
4
4
  "description": "MindForge MCP server — exposes the MindForge engine (knowledge graph, project health, audit log) to Claude Code and any MCP host as 7 stdio tools. Self-contained, zero runtime dependencies.",
5
5
  "mcpName": "io.github.sairam0424/mindforge",
6
6
  "type": "commonjs",