Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:
workflow_dispatch:
inputs:
version:
description: "Existing annotated tag to publish (for example, v0.1.1)"
description: "Existing annotated tag to publish (for example, v0.1.2)"
required: true
type: string

Expand Down Expand Up @@ -47,7 +47,7 @@ jobs:
set -euo pipefail
version="${INPUT_VERSION:-${REF_NAME}}"
if [[ ! "${version}" =~ ^v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-rc\.(0|[1-9][0-9]*))?$ ]]; then
echo "expected an existing release tag such as v0.1.1, got: ${version:-<empty>}" >&2
echo "expected an existing release tag such as v0.1.2, got: ${version:-<empty>}" >&2
exit 1
fi
if [[ "${EVENT_NAME}" == push && "${FULL_REF}" != "refs/tags/${version}" ]]; then
Expand Down
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,19 @@ The project publishes 0.x prerelease versions; a stable release line is not yet

## [Unreleased]

## [0.1.2] - 2026-09-02

### Changed

- Migrate GitHub repository, Release, issue, badge, and raw-content coordinates
to the canonical `bytefolk` organization while retaining the published npm
scope, MCP identity, and existing cache paths.

- Rename `@fullstack-ai-infra/mem-mcp` to `@bytefolk/mem-mcp`. The npm package
scope, MCP metadata identity (`io.github.bytefolk/mem-mcp`), and default
cache directory now use `bytefolk`. The old `@fullstack-ai-infra/mem-mcp@0.1.1`
package remains installable until migration is complete.

### Security

- Normalize the client-declared MIME type of a stored file before deciding how
Expand Down Expand Up @@ -355,6 +362,7 @@ The project publishes 0.x prerelease versions; a stable release line is not yet
- Preserve the primary Web acceptance failure when browser or Vite cleanup
also fails.

[Unreleased]: https://github.com/bytefolk/mem/compare/v0.1.1...HEAD
[Unreleased]: https://github.com/bytefolk/mem/compare/v0.1.2...HEAD
[0.1.2]: https://github.com/bytefolk/mem/releases/tag/v0.1.2
[0.1.1]: https://github.com/bytefolk/mem/compare/v0.1.0...v0.1.1
[0.1.0]: https://github.com/bytefolk/mem/releases/tag/v0.1.0
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
[![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
[![Status](https://img.shields.io/badge/status-experimental-orange.svg)](#project-status)
[![MCP Server](https://img.shields.io/badge/MCP%20Server-26%20tools-blue?logo=modelcontextprotocol)](docs/mcp.md)
[![smithery](https://smithery.ai/badge/@fullstack-ai-infra/mem-mcp)](https://smithery.ai/server/@fullstack-ai-infra/mem-mcp)
[![smithery](https://smithery.ai/badge/@bytefolk/mem-mcp)](https://smithery.ai/server/@bytefolk/mem-mcp)

**A portable, self-hosted memory plane for AI agents.**

Expand Down
4 changes: 2 additions & 2 deletions deploy/helm/mem/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ apiVersion: v2
name: mem
description: Production Web, memd, migration, and Worker workloads for mem
type: application
version: 0.1.1
appVersion: "0.1.1"
version: 0.1.2
appVersion: "0.1.2"
kubeVersion: ">=1.28.0-0"
6 changes: 3 additions & 3 deletions deploy/helm/mem/values-production.example.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
images:
server:
repository: registry.example.internal/mem/server
tag: "0.1.1"
tag: "0.1.2"
worker:
repository: registry.example.internal/mem/worker
tag: "0.1.1"
tag: "0.1.2"
web:
repository: registry.example.internal/mem/web
tag: "0.1.1"
tag: "0.1.2"

existingSecret: mem-runtime

Expand Down
6 changes: 3 additions & 3 deletions deploy/helm/mem/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@ runtime:
images:
server:
repository: mem-server
tag: "0.1.1"
tag: "0.1.2"
pullPolicy: IfNotPresent
worker:
repository: mem-worker
tag: "0.1.1"
tag: "0.1.2"
pullPolicy: IfNotPresent
web:
repository: mem-web
tag: "0.1.1"
tag: "0.1.2"
pullPolicy: IfNotPresent

serviceAccount:
Expand Down
2 changes: 1 addition & 1 deletion docs/DEPLOYMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ Use an immutable version for all three images. The example below builds the
model-free Worker; optional heavy extras must be explicitly selected.

```bash
export MEM_VERSION=0.1.1
export MEM_VERSION=0.1.2
export MEM_REGISTRY=registry.example.internal/mem

docker build \
Expand Down
4 changes: 2 additions & 2 deletions docs/maintainers/releasing.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ creates, moves, or replaces a tag.
starting npm publication.
6. In `npm/`, rerun `npm test`, the npm 12 clean-tarball test, and
`npm pack --dry-run --ignore-scripts`. Confirm
`npm view @fullstack-ai-infra/mem-mcp@VERSION version` does not find the
`npm view @bytefolk/mem-mcp@VERSION version` does not find the
version, then publish it once with
`npm publish --access public --tag latest`.
7. Install the public package in a clean temporary consumer with lifecycle
Expand All @@ -115,7 +115,7 @@ creates, moves, or replaces a tag.
Trusted Publishing is the target npm credential path. For the bootstrap
publication, prefer interactive npm 2FA. If a token is required, use a one-day
granular npm token restricted to read/write access for
`@fullstack-ai-infra/mem-mcp` only, with no unrelated package or organization
`@bytefolk/mem-mcp` only, with no unrelated package or organization
access. Keep it out of repository files, logs, workflow inputs, and issue
comments. Read the published version back from the registry and complete the
clean-install smoke test before revoking the token immediately.
Expand Down
8 changes: 4 additions & 4 deletions npm/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ This package distributes the `mem-mcp` stdio MCP server binary so it can be inst
## Install

```bash
npm install @fullstack-ai-infra/mem-mcp
npm install @bytefolk/mem-mcp
```

## Usage
Expand Down Expand Up @@ -39,7 +39,7 @@ a later diagnostic sink fails.
The executable cache is outside the installed npm package and is isolated by
package version and platform. Defaults are `$XDG_CACHE_HOME` (or `~/.cache`) on
Linux, `~/Library/Caches` on macOS, and `%LOCALAPPDATA%` on Windows, below
`fullstack-ai-infra/mem-mcp`. Set `MEM_MCP_CACHE_DIR` to an absolute path to use
`bytefolk/mem-mcp`. Set `MEM_MCP_CACHE_DIR` to an absolute path to use
a different writable cache root. A per-asset cross-process lock serializes
verification and atomic replacement, so concurrent hosts cannot expose or
delete each other's downloads. Stale-lock recovery removes only artifacts named
Expand All @@ -59,7 +59,7 @@ bounded shutdown grace period.
"mcpServers": {
"mem": {
"command": "npx",
"args": ["-y", "@fullstack-ai-infra/mem-mcp"],
"args": ["-y", "@bytefolk/mem-mcp"],
"env": {
"MEM_SERVER": "http://localhost:8787",
"MEM_TOKEN": "mem_..."
Expand All @@ -75,7 +75,7 @@ bounded shutdown grace period.
claude mcp add --scope project --transport stdio \
--env MEM_SERVER=http://localhost:8787 \
--env MEM_TOKEN=mem_... \
mem -- npx -y @fullstack-ai-infra/mem-mcp
mem -- npx -y @bytefolk/mem-mcp
```

## Configuration
Expand Down
2 changes: 1 addition & 1 deletion npm/clean-tarball.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ test(
const packageRoot = join(
consumer,
"node_modules",
"@fullstack-ai-infra",
"@bytefolk",
"mem-mcp",
);
const packageJson = JSON.parse(
Expand Down
12 changes: 6 additions & 6 deletions npm/install.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ const { pipeline } = require("stream/promises");
const { TextDecoder } = require("util");
const { assetFor } = require("./platforms");

const PACKAGE = "@fullstack-ai-infra/mem-mcp";
const PACKAGE = "@bytefolk/mem-mcp";
const REPO = "bytefolk/mem";
const CHECKSUM_ASSET = "mem-mcp-checksums.txt";
const MAX_CHECKSUM_BYTES = 64 * 1024;
Expand Down Expand Up @@ -120,15 +120,15 @@ function cacheRootFor(options = {}) {
if (environment.LOCALAPPDATA) {
return pathApi.join(
absolutePath(environment.LOCALAPPDATA, osPlatform, "LOCALAPPDATA"),
"fullstack-ai-infra",
"bytefolk",
"mem-mcp",
);
}
return pathApi.join(
absolutePath(homeDirectory, osPlatform, "home directory"),
"AppData",
"Local",
"fullstack-ai-infra",
"bytefolk",
"mem-mcp",
);
}
Expand All @@ -138,22 +138,22 @@ function cacheRootFor(options = {}) {
absolutePath(homeDirectory, osPlatform, "home directory"),
"Library",
"Caches",
"fullstack-ai-infra",
"bytefolk",
"mem-mcp",
);
}

if (environment.XDG_CACHE_HOME) {
return pathApi.join(
absolutePath(environment.XDG_CACHE_HOME, osPlatform, "XDG_CACHE_HOME"),
"fullstack-ai-infra",
"bytefolk",
"mem-mcp",
);
}
return pathApi.join(
absolutePath(homeDirectory, osPlatform, "home directory"),
".cache",
"fullstack-ai-infra",
"bytefolk",
"mem-mcp",
);
}
Expand Down
18 changes: 9 additions & 9 deletions npm/install.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -222,33 +222,33 @@ test("cache paths are user-scoped, versioned, and require absolute overrides", (
environment: { XDG_CACHE_HOME: "/var/cache/example" },
homeDirectory: "/home/example",
}),
"/var/cache/example/fullstack-ai-infra/mem-mcp",
"/var/cache/example/bytefolk/mem-mcp",
);
assert.equal(
cacheRootFor({
osPlatform: "darwin",
environment: {},
homeDirectory: "/Users/example",
}),
"/Users/example/Library/Caches/fullstack-ai-infra/mem-mcp",
"/Users/example/Library/Caches/bytefolk/mem-mcp",
);
assert.equal(
cacheRootFor({
osPlatform: "win32",
environment: { LOCALAPPDATA: "C:\\Users\\example\\AppData\\Local" },
homeDirectory: "C:\\Users\\example",
}),
"C:\\Users\\example\\AppData\\Local\\fullstack-ai-infra\\mem-mcp",
"C:\\Users\\example\\AppData\\Local\\bytefolk\\mem-mcp",
);
assert.equal(
cacheDirectory({
osPlatform: "linux",
osArch: "arm64",
version: "0.1.1",
version: "0.1.2",
environment: { MEM_MCP_CACHE_DIR: "/var/cache/mem-mcp-test" },
homeDirectory: "/home/example",
}),
"/var/cache/mem-mcp-test/v0.1.1/linux-arm64",
"/var/cache/mem-mcp-test/v0.1.2/linux-arm64",
);
assert.throws(
() => cacheRootFor({
Expand All @@ -274,14 +274,14 @@ test("install verifies a temporary download before exposing it", async (t) => {
const osPlatform = platform();
const osArch = arch();
const asset = assetFor(osPlatform, osArch);
const cacheDir = join(cacheRoot, "v0.1.1", `${osPlatform}-${osArch}`);
const cacheDir = join(cacheRoot, "v0.1.2", `${osPlatform}-${osArch}`);
const bytes = Buffer.from("trusted mem-mcp binary");
const requested = [];

const installed = await install({
osPlatform,
osArch,
version: "0.1.1",
version: "0.1.2",
environment: { MEM_MCP_CACHE_DIR: cacheRoot },
homeDirectory: join(root, "read-only-package-home-must-not-be-used"),
logger: QUIET_LOGGER,
Expand All @@ -302,8 +302,8 @@ test("install verifies a temporary download before exposing it", async (t) => {
}
assert.deepEqual(readdirSync(cacheDir), [asset]);
assert.deepEqual(requested, [
"https://github.com/bytefolk/mem/releases/download/v0.1.1/mem-mcp-checksums.txt",
`https://github.com/bytefolk/mem/releases/download/v0.1.1/${asset}`,
"https://github.com/bytefolk/mem/releases/download/v0.1.2/mem-mcp-checksums.txt",
`https://github.com/bytefolk/mem/releases/download/v0.1.2/${asset}`,
]);
});

Expand Down
6 changes: 3 additions & 3 deletions npm/package.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"name": "@fullstack-ai-infra/mem-mcp",
"version": "0.1.1",
"name": "@bytefolk/mem-mcp",
"version": "0.1.2",
"description": "MCP server for mem — a portable, self-hosted memory plane for AI agents",
"mcpName": "io.github.fullstack-ai-infra/mem-mcp",
"mcpName": "io.github.bytefolk/mem-mcp",
"keywords": [
"mcp",
"model-context-protocol",
Expand Down
2 changes: 1 addition & 1 deletion npm/platforms.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ function assetFor(osPlatform, osArch) {
if (!asset) {
throw new Error(
`Unsupported platform: ${key}. ${
"@fullstack-ai-infra/mem-mcp"
"@bytefolk/mem-mcp"
} publishes: ${Object.keys(ASSETS).join(", ")}.`
);
}
Expand Down
4 changes: 2 additions & 2 deletions npm/server.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"mcpName": "io.github.fullstack-ai-infra/mem-mcp",
"mcpName": "io.github.bytefolk/mem-mcp",
"name": "mem-mcp",
"version": "0.1.1",
"version": "0.1.2",
"description": "MCP server for mem — a portable, self-hosted memory plane for AI agents",
"protocol": "2024-11-05",
"transport": "stdio",
Expand Down
2 changes: 1 addition & 1 deletion scripts/validate_release_version.sh
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ fi
require_exact_line npm/package.json " \"version\": \"${version}\","
require_exact_line npm/server.json " \"version\": \"${version}\","
require_exact_line server/cmd/mem-mcp/main.go \
$'\t\"version\": \"'"${version}"$'\", // synced with npm/@fullstack-ai-infra/mem-mcp version'
$'\t\"version\": \"'"${version}"$'\", // synced with npm/@bytefolk/mem-mcp version'

require_exact_line worker/pyproject.toml "version = \"${version}\""
require_exact_line worker/mem_worker/__init__.py "__version__ = \"${version}\""
Expand Down
2 changes: 1 addition & 1 deletion server/cmd/mem-mcp/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ const protocolVersion = "2024-11-05"
// serverInfo is what we report back in the `initialize` handshake.
var serverInfo = map[string]any{
"name": "mem-mcp",
"version": "0.1.1", // synced with npm/@fullstack-ai-infra/mem-mcp version
"version": "0.1.2", // synced with npm/@bytefolk/mem-mcp version
}

func main() {
Expand Down
4 changes: 2 additions & 2 deletions web/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion web/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "mem-web",
"private": true,
"version": "0.1.1",
"version": "0.1.2",
"type": "module",
"description": "mem · Agent-Native AI 网盘 · Web UI (Phase 1)",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion worker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ print(stub.HealthCheck(pb.HealthCheckRequest()))
PY
```

Expected: `status: SERVING\nversion: "0.1.1"`.
Expected: `status: SERVING\nversion: "0.1.2"`.

---

Expand Down
2 changes: 1 addition & 1 deletion worker/mem_worker/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@

from __future__ import annotations

__version__ = "0.1.1"
__version__ = "0.1.2"
2 changes: 1 addition & 1 deletion worker/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "mem-worker"
version = "0.1.1"
version = "0.1.2"
description = "mem AI Worker — Processor + Provider service (gRPC, Python 3.11+)"
readme = "README.md"
requires-python = ">=3.11"
Expand Down
2 changes: 1 addition & 1 deletion worker/uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.