memorix 1.8.3 → 1.8.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.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,25 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.8.4] - 2026-08-27
8
+
9
+ ### Fixed
10
+ - **Stateless HTTP MCP requests (#255)** -- clients such as Claude Code that
11
+ send the current protocol header on every request can list and call tools
12
+ without echoing a custom project handle. Durable handles are still created
13
+ on `initialize` and remain available when a client opts into them.
14
+ - **MCP protocol self-description (#257)** -- discovery and HTTP response
15
+ headers now advertise the legacy revisions implemented by the pinned SDK,
16
+ instead of claiming complete support for the newer 2026 revision.
17
+ - **MCP stdio smoke contract** -- the release smoke script now checks the
18
+ truthful advertised revision set after the compatibility fix.
19
+
20
+ ### MCP Compatibility
21
+ - The 1.8.4 line supports legacy stateful MCP, versionless stdio tool calls,
22
+ pre-initialize discovery, and the narrow stateless HTTP compatibility path.
23
+ It does not claim full 2026 result metadata, Tasks, subscriptions, or list
24
+ caching support.
25
+
7
26
  ## [1.8.3] - 2026-08-25
8
27
 
9
28
  ### Fixed
package/dist/cli/index.js CHANGED
@@ -3232,7 +3232,7 @@ ${import_picocolors.default.gray(m3)} ${s4}
3232
3232
 
3233
3233
  // src/cli/version.ts
3234
3234
  function getCliVersion() {
3235
- return true ? "1.8.3" : pkg.version;
3235
+ return true ? "1.8.4" : pkg.version;
3236
3236
  }
3237
3237
  var init_version = __esm({
3238
3238
  "src/cli/version.ts"() {
@@ -205768,14 +205768,13 @@ var init_tool_profile = __esm({
205768
205768
  function getMcpServerInfo() {
205769
205769
  return {
205770
205770
  name: "memorix",
205771
- version: true ? "1.8.3" : "1.0.1"
205771
+ version: true ? "1.8.4" : "1.0.1"
205772
205772
  };
205773
205773
  }
205774
205774
  function createMcpDiscoverResult(capabilities, serverInfo) {
205775
205775
  return {
205776
205776
  resultType: "complete",
205777
205777
  supportedVersions: [
205778
- MCP_MODERN_PROTOCOL_VERSION,
205779
205778
  MCP_LEGACY_PROTOCOL_VERSION,
205780
205779
  MCP_OLDEST_LEGACY_PROTOCOL_VERSION
205781
205780
  ],
@@ -205792,12 +205791,11 @@ function createMcpDiscoverResult(capabilities, serverInfo) {
205792
205791
  function createMcpStartupDiscoverResult(serverInfo) {
205793
205792
  return createMcpDiscoverResult({ tools: { listChanged: true } }, serverInfo);
205794
205793
  }
205795
- var MCP_MODERN_PROTOCOL_VERSION, MCP_LEGACY_PROTOCOL_VERSION, MCP_OLDEST_LEGACY_PROTOCOL_VERSION, MCP_SERVER_DISCOVER_METHOD, MCP_SERVER_INFO_META_KEY;
205794
+ var MCP_LEGACY_PROTOCOL_VERSION, MCP_OLDEST_LEGACY_PROTOCOL_VERSION, MCP_SERVER_DISCOVER_METHOD, MCP_SERVER_INFO_META_KEY;
205796
205795
  var init_mcp_discovery = __esm({
205797
205796
  "src/server/mcp-discovery.ts"() {
205798
205797
  "use strict";
205799
205798
  init_esm_shims();
205800
- MCP_MODERN_PROTOCOL_VERSION = "2026-07-28";
205801
205799
  MCP_LEGACY_PROTOCOL_VERSION = "2025-11-25";
205802
205800
  MCP_OLDEST_LEGACY_PROTOCOL_VERSION = "2024-11-05";
205803
205801
  MCP_SERVER_DISCOVER_METHOD = "server/discover";
@@ -269281,7 +269279,7 @@ var init_serve_http = __esm({
269281
269279
  res.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, OPTIONS");
269282
269280
  res.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, Mcp-Session-Id, Mcp-Project-Handle, Mcp-Project-Root, Mcp-Stateless, Last-Event-Id");
269283
269281
  res.setHeader("Access-Control-Expose-Headers", "Mcp-Session-Id, Mcp-Project-Handle, Mcp-Protocol-Version, Mcp-Method, Mcp-Name");
269284
- res.setHeader("Mcp-Protocol-Version", req.headers["mcp-protocol-version"] || CURRENT_MCP_PROTOCOL_VERSION);
269282
+ res.setHeader("Mcp-Protocol-Version", MCP_SDK_COMPAT_PROTOCOL_VERSION);
269285
269283
  res.setHeader("Mcp-Method", req.method || "UNKNOWN");
269286
269284
  res.setHeader("Mcp-Name", MCP_SERVER_NAME);
269287
269285
  }
@@ -269295,11 +269293,6 @@ var init_serve_http = __esm({
269295
269293
  }
269296
269294
  const requestedRoot = typeof req.headers["mcp-project-root"] === "string" ? req.headers["mcp-project-root"] : void 0;
269297
269295
  const root = persisted?.projectRoot ?? requestedRoot ?? projectRoot;
269298
- if (!persisted && !isInitializeRequest2(body) && !isServerDiscoverRequest(body)) {
269299
- res.writeHead(400, { "Content-Type": "application/json" });
269300
- res.end(JSON.stringify({ jsonrpc: "2.0", error: { code: -32e3, message: "Stateless MCP requests require Mcp-Project-Handle; initialize first." }, id: null }));
269301
- return;
269302
- }
269303
269296
  const { createMemorixServer: createMemorixServer3 } = await Promise.resolve().then(() => (init_server4(), server_exports2));
269304
269297
  const { createProjectBindingController: createProjectBindingController3 } = await Promise.resolve().then(() => (init_request_context(), request_context_exports));
269305
269298
  const binding = createProjectBindingController3(root);
@@ -269326,7 +269319,7 @@ var init_serve_http = __esm({
269326
269319
  try {
269327
269320
  await server.connect(transport);
269328
269321
  let effectiveHandle = persisted;
269329
- if (!effectiveHandle && projectId !== "__unresolved__") {
269322
+ if (!effectiveHandle && projectId !== "__unresolved__" && isInitializeRequest2(body)) {
269330
269323
  effectiveHandle = statelessBindingStore.create({
269331
269324
  projectId,
269332
269325
  projectRoot: root,
package/dist/index.js CHANGED
@@ -158121,14 +158121,13 @@ var init_request_context = __esm({
158121
158121
  function getMcpServerInfo() {
158122
158122
  return {
158123
158123
  name: "memorix",
158124
- version: true ? "1.8.3" : "1.0.1"
158124
+ version: true ? "1.8.4" : "1.0.1"
158125
158125
  };
158126
158126
  }
158127
158127
  function createMcpDiscoverResult(capabilities, serverInfo) {
158128
158128
  return {
158129
158129
  resultType: "complete",
158130
158130
  supportedVersions: [
158131
- MCP_MODERN_PROTOCOL_VERSION,
158132
158131
  MCP_LEGACY_PROTOCOL_VERSION,
158133
158132
  MCP_OLDEST_LEGACY_PROTOCOL_VERSION
158134
158133
  ],
@@ -158145,12 +158144,11 @@ function createMcpDiscoverResult(capabilities, serverInfo) {
158145
158144
  function createMcpStartupDiscoverResult(serverInfo) {
158146
158145
  return createMcpDiscoverResult({ tools: { listChanged: true } }, serverInfo);
158147
158146
  }
158148
- var MCP_MODERN_PROTOCOL_VERSION, MCP_LEGACY_PROTOCOL_VERSION, MCP_OLDEST_LEGACY_PROTOCOL_VERSION, MCP_SERVER_DISCOVER_METHOD, MCP_SERVER_INFO_META_KEY;
158147
+ var MCP_LEGACY_PROTOCOL_VERSION, MCP_OLDEST_LEGACY_PROTOCOL_VERSION, MCP_SERVER_DISCOVER_METHOD, MCP_SERVER_INFO_META_KEY;
158149
158148
  var init_mcp_discovery = __esm({
158150
158149
  "src/server/mcp-discovery.ts"() {
158151
158150
  "use strict";
158152
158151
  init_esm_shims();
158153
- MCP_MODERN_PROTOCOL_VERSION = "2026-07-28";
158154
158152
  MCP_LEGACY_PROTOCOL_VERSION = "2025-11-25";
158155
158153
  MCP_OLDEST_LEGACY_PROTOCOL_VERSION = "2024-11-05";
158156
158154
  MCP_SERVER_DISCOVER_METHOD = "server/discover";
@@ -173233,7 +173231,7 @@ var init_serve_shared = __esm({
173233
173231
 
173234
173232
  // src/cli/version.ts
173235
173233
  function getCliVersion() {
173236
- return true ? "1.8.3" : pkg.version;
173234
+ return true ? "1.8.4" : pkg.version;
173237
173235
  }
173238
173236
  var init_version3 = __esm({
173239
173237
  "src/cli/version.ts"() {
@@ -4,6 +4,25 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.8.4] - 2026-08-27
8
+
9
+ ### Fixed
10
+ - **Stateless HTTP MCP requests (#255)** -- clients such as Claude Code that
11
+ send the current protocol header on every request can list and call tools
12
+ without echoing a custom project handle. Durable handles are still created
13
+ on `initialize` and remain available when a client opts into them.
14
+ - **MCP protocol self-description (#257)** -- discovery and HTTP response
15
+ headers now advertise the legacy revisions implemented by the pinned SDK,
16
+ instead of claiming complete support for the newer 2026 revision.
17
+ - **MCP stdio smoke contract** -- the release smoke script now checks the
18
+ truthful advertised revision set after the compatibility fix.
19
+
20
+ ### MCP Compatibility
21
+ - The 1.8.4 line supports legacy stateful MCP, versionless stdio tool calls,
22
+ pre-initialize discovery, and the narrow stateless HTTP compatibility path.
23
+ It does not claim full 2026 result metadata, Tasks, subscriptions, or list
24
+ caching support.
25
+
7
26
  ## [1.8.3] - 2026-08-25
8
27
 
9
28
  ### Fixed
package/dist/sdk.js CHANGED
@@ -167809,7 +167809,6 @@ import { z as z625 } from "zod/v4";
167809
167809
 
167810
167810
  // src/server/mcp-discovery.ts
167811
167811
  init_esm_shims();
167812
- var MCP_MODERN_PROTOCOL_VERSION = "2026-07-28";
167813
167812
  var MCP_LEGACY_PROTOCOL_VERSION = "2025-11-25";
167814
167813
  var MCP_OLDEST_LEGACY_PROTOCOL_VERSION = "2024-11-05";
167815
167814
  var MCP_SERVER_DISCOVER_METHOD = "server/discover";
@@ -167817,14 +167816,13 @@ var MCP_SERVER_INFO_META_KEY = "io.modelcontextprotocol/serverInfo";
167817
167816
  function getMcpServerInfo() {
167818
167817
  return {
167819
167818
  name: "memorix",
167820
- version: true ? "1.8.3" : "1.0.1"
167819
+ version: true ? "1.8.4" : "1.0.1"
167821
167820
  };
167822
167821
  }
167823
167822
  function createMcpDiscoverResult(capabilities, serverInfo) {
167824
167823
  return {
167825
167824
  resultType: "complete",
167826
167825
  supportedVersions: [
167827
- MCP_MODERN_PROTOCOL_VERSION,
167828
167826
  MCP_LEGACY_PROTOCOL_VERSION,
167829
167827
  MCP_OLDEST_LEGACY_PROTOCOL_VERSION
167830
167828
  ],
@@ -18,7 +18,7 @@ Status: accepted implementation contract for Memorix 1.8.0.
18
18
  ## Compatibility Contract
19
19
 
20
20
  Memorix preserves the legacy 2025-era initialize contract, including stdio and
21
- stateful Streamable HTTP with `Mcp-Session-Id`. Memorix 1.8.3 also registers a
21
+ stateful Streamable HTTP with `Mcp-Session-Id`. Memorix 1.8.4 also registers a
22
22
  low-level `server/discover` compatibility adapter for the 2026-07-28 request.
23
23
  Its `DiscoverResult` is complete for the required identity, versions,
24
24
  capabilities, and private zero-TTL cache hint. Versionless `tools/list` and
@@ -150,7 +150,7 @@ feedback projection.
150
150
  ### MCP Compatibility
151
151
 
152
152
  Legacy clients use stateful Streamable HTTP with `Mcp-Session-Id` and the
153
- 2025-era `initialize` handshake. The 1.8.3 stdio server starts a bounded
153
+ 2025-era `initialize` handshake. The 1.8.4 stdio server starts a bounded
154
154
  newline-delimited JSON-RPC gate before project initialization: it answers the
155
155
  2026-07-28 `server/discover` request before `initialize`, then replays other
156
156
  requests, notifications, and responses in order into the pinned SDK transport.
@@ -13,8 +13,8 @@ Memorix is a TypeScript project built around:
13
13
 
14
14
  ## Current Development Baseline
15
15
 
16
- The current release work targets the **1.8.3 release line** and package metadata
17
- is kept at `1.8.3` for this release commit.
16
+ The current release work targets the **1.8.4 release line** and package metadata
17
+ is kept at `1.8.4` for this release commit.
18
18
 
19
19
  Contributors should assume the following areas are part of the current release line:
20
20
 
package/docs/README.md CHANGED
@@ -94,7 +94,7 @@ The public docs are organized by user intent:
94
94
  | 1.2 honest Lite and optional semantic CodeGraph provider contract | [1.2 Provider Quality](1.2.0-PROVIDER-QUALITY.md) |
95
95
  | 1.3 long-term memory model, source boundary, and lifecycle | [1.3 Memory Architecture](1.3-MEMORY-ARCHITECTURE.md) |
96
96
  | Active context-control work | [1.2.2 Memory Control Plane](1.2.2-MEMORY-CONTROL-PLANE.md) |
97
- | 1.8.3 stdio discovery startup and compatibility acceptance contract | [1.8.0 Release Specification](1.8.0-RELEASE-CANDIDATE-SPEC.md) |
97
+ | 1.8.4 MCP compatibility acceptance contract | [1.8.0 Release Specification](1.8.0-RELEASE-CANDIDATE-SPEC.md) |
98
98
  | Historical cloud sync and multi-agent research | [CLOUD_SYNC_AND_MULTI_AGENT_RESEARCH.md](CLOUD_SYNC_AND_MULTI_AGENT_RESEARCH.md) |
99
99
  | Known issues and old roadmap notes | [KNOWN_ISSUES_AND_ROADMAP.md](KNOWN_ISSUES_AND_ROADMAP.md) |
100
100
 
@@ -122,7 +122,7 @@ Historical/deep-reference documents may describe older designs. If they conflict
122
122
 
123
123
  ## Current Product Line
124
124
 
125
- The current product line is **1.8.3**. The authoritative acceptance contract is
125
+ The current product line is **1.8.4**. The authoritative acceptance contract is
126
126
  [1.8.0 Release Specification](1.8.0-RELEASE-CANDIDATE-SPEC.md).
127
127
  The current baseline has:
128
128
 
@@ -141,7 +141,7 @@ The current baseline has:
141
141
  - `~/.memorix/config.toml` and project `memorix.toml` are the user-facing configuration model
142
142
  - legacy `memorix.yml`, `.env`, and `config.json` files are still read for compatibility, but new setups should use TOML
143
143
 
144
- For MCP compatibility, 1.8.3 preserves legacy 2025-era initialize and
144
+ For MCP compatibility, 1.8.4 preserves legacy 2025-era initialize and
145
145
  stateful Streamable HTTP behavior. `memorix serve` starts a bounded stdio
146
146
  startup gate: pre-initialize 2026-07-28 `server/discover` is answered with a
147
147
  complete discovery result, and other early JSON-RPC messages replay in order
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "memorix",
3
3
  "mcpName": "io.github.AVIDS2/memorix",
4
- "version": "1.8.3",
4
+ "version": "1.8.4",
5
5
  "description": "Local-first shared memory layer for AI coding agents across MCP clients, Git history, reasoning context, and project sessions.",
6
6
  "type": "module",
7
7
  "sideEffects": false,
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "memorix",
3
- "version": "1.8.3"
3
+ "version": "1.8.4"
4
4
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://anthropic.com/claude-code/plugin.schema.json",
3
3
  "name": "memorix",
4
- "version": "1.8.3",
4
+ "version": "1.8.4",
5
5
  "description": "Shared workspace memory for Claude Code and other AI coding agents.",
6
6
  "author": {
7
7
  "name": "AVIDS2",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memorix",
3
- "version": "1.8.3",
3
+ "version": "1.8.4",
4
4
  "description": "Local-first project memory for CodeBuddy Code and other coding agents.",
5
5
  "author": {
6
6
  "name": "AVIDS2",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memorix",
3
- "version": "1.8.3",
3
+ "version": "1.8.4",
4
4
  "description": "Shared workspace memory for Codex and other AI coding agents.",
5
5
  "author": {
6
6
  "name": "AVIDS2",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memorix",
3
- "version": "1.8.3",
3
+ "version": "1.8.4",
4
4
  "description": "Shared local workspace memory for GitHub Copilot CLI and other AI coding agents.",
5
5
  "author": {
6
6
  "name": "AVIDS2",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memorix",
3
- "version": "1.8.3",
3
+ "version": "1.8.4",
4
4
  "mcpServers": {
5
5
  "memorix": {
6
6
  "command": "memorix",
@@ -1,5 +1,5 @@
1
1
  name: memorix
2
- version: "1.8.3"
2
+ version: "1.8.4"
3
3
  description: Shared workspace memory bridge for Hermes Agent.
4
4
  author: AVIDS2
5
5
  license: Apache-2.0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memorix-omp-package",
3
- "version": "1.8.3",
3
+ "version": "1.8.4",
4
4
  "description": "Memorix shared workspace memory package for Oh-my-Pi.",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memorix",
3
- "version": "1.8.3",
3
+ "version": "1.8.4",
4
4
  "description": "Shared workspace memory for OpenClaw and other AI coding agents.",
5
5
  "author": {
6
6
  "name": "AVIDS2",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memorix-pi-package",
3
- "version": "1.8.3",
3
+ "version": "1.8.4",
4
4
  "description": "Memorix shared workspace memory package for Pi coding agent.",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
package/server.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "url": "https://github.com/AVIDS2/memorix",
8
8
  "source": "github"
9
9
  },
10
- "version": "1.8.3",
10
+ "version": "1.8.4",
11
11
  "websiteUrl": "https://github.com/AVIDS2/memorix#readme",
12
12
  "icons": [
13
13
  {
@@ -22,7 +22,7 @@
22
22
  {
23
23
  "registryType": "npm",
24
24
  "identifier": "memorix",
25
- "version": "1.8.3",
25
+ "version": "1.8.4",
26
26
  "runtimeHint": "npx",
27
27
  "packageArguments": [
28
28
  {
@@ -413,7 +413,7 @@ export default defineCommand({
413
413
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, DELETE, OPTIONS');
414
414
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Accept, Mcp-Session-Id, Mcp-Project-Handle, Mcp-Project-Root, Mcp-Stateless, Last-Event-Id');
415
415
  res.setHeader('Access-Control-Expose-Headers', 'Mcp-Session-Id, Mcp-Project-Handle, Mcp-Protocol-Version, Mcp-Method, Mcp-Name');
416
- res.setHeader('Mcp-Protocol-Version', req.headers['mcp-protocol-version'] || CURRENT_MCP_PROTOCOL_VERSION);
416
+ res.setHeader('Mcp-Protocol-Version', MCP_SDK_COMPAT_PROTOCOL_VERSION);
417
417
  res.setHeader('Mcp-Method', req.method || 'UNKNOWN');
418
418
  res.setHeader('Mcp-Name', MCP_SERVER_NAME);
419
419
  }
@@ -433,11 +433,6 @@ export default defineCommand({
433
433
  ? req.headers['mcp-project-root']
434
434
  : undefined;
435
435
  const root = persisted?.projectRoot ?? requestedRoot ?? projectRoot;
436
- if (!persisted && !isInitializeRequest(body) && !isServerDiscoverRequest(body)) {
437
- res.writeHead(400, { 'Content-Type': 'application/json' });
438
- res.end(JSON.stringify({ jsonrpc: '2.0', error: { code: -32000, message: 'Stateless MCP requests require Mcp-Project-Handle; initialize first.' }, id: null }));
439
- return;
440
- }
441
436
 
442
437
  const { createMemorixServer } = await import('../../server.js');
443
438
  const { createProjectBindingController } = await import('../../server/request-context.js');
@@ -465,7 +460,7 @@ export default defineCommand({
465
460
  try {
466
461
  await server.connect(transport);
467
462
  let effectiveHandle = persisted;
468
- if (!effectiveHandle && projectId !== '__unresolved__') {
463
+ if (!effectiveHandle && projectId !== '__unresolved__' && isInitializeRequest(body)) {
469
464
  effectiveHandle = statelessBindingStore.create({
470
465
  projectId,
471
466
  projectRoot: root,
@@ -37,7 +37,6 @@ export function createMcpDiscoverResult(
37
37
  return {
38
38
  resultType: 'complete',
39
39
  supportedVersions: [
40
- MCP_MODERN_PROTOCOL_VERSION,
41
40
  MCP_LEGACY_PROTOCOL_VERSION,
42
41
  MCP_OLDEST_LEGACY_PROTOCOL_VERSION,
43
42
  ],