Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
5d2538a
Build: Prepare OpenClaw memory plugin for npm publish (#58)
hungtranphamminh Mar 30, 2026
d70748d
fix(openclaw-plugin): add repository field for npm OIDC provenance (#59)
hungtranphamminh Mar 30, 2026
9663303
fix(openclaw-plugin): remove openclaw peer dep, downgrade zod to v3 (…
hungtranphamminh Mar 30, 2026
b1ce951
fix(server): use UTF-8 safe truncation in log preview strings
Ashwin-3cS Mar 28, 2026
be4e439
feat(relayer): multi-layer rate limiting with Redis, storage quota, a…
ducnmm Mar 31, 2026
71fcd0b
docs: improve docs for AI agents, add SKILL.md, llms.txt, changelogs,…
ducnmm Mar 31, 2026
cf4e661
Merge pull request #64 from Ashwin-3cS/fix/server-utf8-log-truncation
ducnmm Mar 31, 2026
0fd01e5
fix: enforce --frozen-lockfile in all CI workflows and Dockerfiles
ducnmm Mar 31, 2026
73dfbc6
Merge pull request #67 from MystenLabs/fix/frozen-lockfile-security
ducnmm Mar 31, 2026
83bc799
Merge pull request #65 from MystenLabs/feat/docs-dx-improvements
ducnmm Mar 31, 2026
66aebbc
Merge pull request #66 from MystenLabs/feat/rate-limiter-eng-1081
ducnmm Mar 31, 2026
41c295c
fix(server): sponsor walrus register flow and use pooled signer keys
ducnmm Mar 31, 2026
1948b12
Merge pull request #68 from MystenLabs/codex/enoki-sponsor-pool-upload
Aaron1924 Apr 1, 2026
cc78771
refactor(openclaw-plugin): extract magic numbers to shared constants
hungtranphamminh Apr 1, 2026
3db517b
chore: resolve release workflow merge conflict with staging
ducnmm Apr 1, 2026
5e52008
fix(server): restore quota accounting and enoki fallback behavior
ducnmm Apr 1, 2026
51c7565
Merge pull request #72 from MystenLabs/codex/fix-rate-limit-quota-eno…
ducnmm Apr 1, 2026
79b7bde
Merge pull request #71 from MystenLabs/codex/resolve-pr69-conflict
ducnmm Apr 1, 2026
9e7316a
Merge pull request #70 from MystenLabs/refactor/oc-memwal-extract-con…
ducnmm Apr 1, 2026
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
2 changes: 1 addition & 1 deletion .github/workflows/deploy-app-walrus.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
uses: pnpm/action-setup@v4

- name: Install dependencies
run: pnpm install --no-frozen-lockfile
run: pnpm install --frozen-lockfile

- name: Validate ws-resources.json exists
run: |
Expand Down
57 changes: 52 additions & 5 deletions .github/workflows/release-oc-memwal.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:
run: npm install -g npm@latest

- name: Install dependencies
run: pnpm install --no-frozen-lockfile
run: pnpm install --frozen-lockfile

- name: Build SDK (dependency)
run: pnpm build:sdk
Expand All @@ -51,14 +51,61 @@ jobs:
- name: Build plugin
run: cd packages/openclaw-memory-memwal && npm run build

# ── main branch → stable release (latest) ──
# ── main branch → changeset version + stable release (latest) ──
- name: Apply changesets (update version & CHANGELOG)
if: github.ref == 'refs/heads/main'
id: changeset_version
run: |
pnpm changeset version 2>/dev/null || true
if git diff --quiet; then
echo "has_changes=false" >> $GITHUB_OUTPUT
else
echo "has_changes=true" >> $GITHUB_OUTPUT
fi

- name: Commit changelog & version bump
if: github.ref == 'refs/heads/main' && steps.changeset_version.outputs.has_changes == 'true'
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add -A
git commit -m "chore: version packages & update changelog [skip ci]"
git push

- name: Publish stable release
if: github.ref == 'refs/heads/main'
id: publish_oc
run: |
BASE_VERSION=$(node -p "require('./packages/openclaw-memory-memwal/package.json').version")
npm view @mysten-incubation/oc-memwal@$BASE_VERSION version 2>/dev/null \
&& echo "Version $BASE_VERSION already published, skipping" && exit 0
VERSION=$(node -p "require('./packages/openclaw-memory-memwal/package.json').version")
echo "version=$VERSION" >> $GITHUB_OUTPUT
npm view @mysten-incubation/oc-memwal@$VERSION version 2>/dev/null \
&& echo "Version $VERSION already published, skipping" && echo "published=false" >> $GITHUB_OUTPUT && exit 0
cd packages/openclaw-memory-memwal && npm publish --provenance --access public
echo "published=true" >> $GITHUB_OUTPUT

- name: Create GitHub Release
if: github.ref == 'refs/heads/main' && steps.publish_oc.outputs.published == 'true'
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const version = '${{ steps.publish_oc.outputs.version }}';
const tag = `@mysten-incubation/oc-memwal@${version}`;
let body = `Release @mysten-incubation/oc-memwal v${version}`;
try {
const changelog = fs.readFileSync('packages/openclaw-memory-memwal/CHANGELOG.md', 'utf8');
const match = changelog.match(/## \d+\.\d+\.\d+[\s\S]*?(?=## \d+\.\d+\.\d+|$)/);
if (match) body = match[0].trim();
} catch (e) { /* use default body */ }
await github.rest.repos.createRelease({
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: tag,
name: tag,
body,
draft: false,
prerelease: false,
});

# ── staging branch → release candidate (rc tag, auto-increment) ──
- name: Publish staging release candidate
Expand Down
60 changes: 55 additions & 5 deletions .github/workflows/release-sdk.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,22 +40,72 @@ jobs:
run: npm install -g npm@latest

- name: Install dependencies
run: pnpm install --no-frozen-lockfile
run: pnpm install --frozen-lockfile

- name: Typecheck
run: pnpm --filter @mysten-incubation/memwal typecheck

- name: Build SDK
run: pnpm build:sdk

# ── main branch → stable release (latest) ──
# ── main branch → changeset version + stable release (latest) ──
- name: Apply changesets (update version & CHANGELOG)
if: github.ref == 'refs/heads/main'
id: changeset_version
run: |
# Consume pending changesets → bump version + update CHANGELOG.md
pnpm changeset version 2>/dev/null || true
# Check if changeset produced any changes
if git diff --quiet; then
echo "has_changes=false" >> $GITHUB_OUTPUT
else
echo "has_changes=true" >> $GITHUB_OUTPUT
fi

- name: Commit changelog & version bump
if: github.ref == 'refs/heads/main' && steps.changeset_version.outputs.has_changes == 'true'
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add -A
git commit -m "chore: version packages & update changelog [skip ci]"
git push

- name: Publish stable release
if: github.ref == 'refs/heads/main'
id: publish_sdk
run: |
BASE_VERSION=$(node -p "require('./packages/sdk/package.json').version")
npm view @mysten-incubation/memwal@$BASE_VERSION version 2>/dev/null \
&& echo "Version $BASE_VERSION already published, skipping" && exit 0
VERSION=$(node -p "require('./packages/sdk/package.json').version")
echo "version=$VERSION" >> $GITHUB_OUTPUT
npm view @mysten-incubation/memwal@$VERSION version 2>/dev/null \
&& echo "Version $VERSION already published, skipping" && echo "published=false" >> $GITHUB_OUTPUT && exit 0
cd packages/sdk && npm publish --provenance --access public
echo "published=true" >> $GITHUB_OUTPUT

- name: Create GitHub Release
if: github.ref == 'refs/heads/main' && steps.publish_sdk.outputs.published == 'true'
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const version = '${{ steps.publish_sdk.outputs.version }}';
const tag = `@mysten-incubation/memwal@${version}`;
// Extract latest changelog entry
let body = `Release @mysten-incubation/memwal v${version}`;
try {
const changelog = fs.readFileSync('packages/sdk/CHANGELOG.md', 'utf8');
const match = changelog.match(/## \d+\.\d+\.\d+[\s\S]*?(?=## \d+\.\d+\.\d+|$)/);
if (match) body = match[0].trim();
} catch (e) { /* use default body */ }
await github.rest.repos.createRelease({
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: tag,
name: tag,
body,
draft: false,
prerelease: false,
});

# ── staging branch → release candidate (rc tag, auto-increment) ──
- name: Publish staging release candidate
Expand Down
28 changes: 26 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ retrieving them with semantic search.

> MemWal is currently in beta and actively evolving. While fully usable today, we continue to refine the developer experience and operational guidance. We welcome feedback from early builders as we continue to improve the product.

## For AI Agents

- **Single-file guide**: Read [`SKILL.md`](SKILL.md) for a complete integration reference (install, configure, API surface, troubleshooting)
- **LLM-friendly docs**: [`llms.txt`](https://docs.memwal.ai/llms.txt) — structured overview following the [llmstxt.org](https://llmstxt.org) standard
- **Full context**: [`llms-full.txt`](https://docs.memwal.ai/llms-full.txt) — expanded version with inlined page content

## Install

```bash
Expand Down Expand Up @@ -60,7 +66,13 @@ From the repository root:
pnpm install
```

Then start the surface you need, for example:
> **Important**: Build the SDK first — apps depend on its compiled output.

```bash
pnpm build:sdk
```

Then start the surface you need:

```bash
pnpm dev:app
Expand All @@ -69,7 +81,7 @@ pnpm dev:chatbot
pnpm dev:researcher
```

For broader local setup guidance, see:
For the full step-by-step setup guide, see:

- [Run the Repo Locally](docs/contributing/run-repo-locally.md)

Expand All @@ -81,6 +93,18 @@ For broader local setup guidance, see:
| `@mysten-incubation/memwal/manual` | Manual client flow (`MemWalManual`). You handle embedding calls and local SEAL operations. The relayer still handles upload relay, registration, search, and restore. |
| `@mysten-incubation/memwal/ai` | Vercel AI SDK integration - wraps `MemWal` as middleware for use with `streamText`, `generateText`, etc. |

## OpenClaw / NemoClaw Plugin

[`@mysten-incubation/oc-memwal`](packages/openclaw-memory-memwal) — a memory plugin for [OpenClaw](https://openclaw.ai) agents. It gives OpenClaw persistent, encrypted memory via MemWal with automatic recall and capture hooks.

```bash
openclaw plugins install @mysten-incubation/oc-memwal
```

- [Plugin Quick Start](docs/openclaw/quick-start.md)
- [How It Works](docs/openclaw/how-it-works.md)
- [Reference](docs/openclaw/reference.md)

## How It Works

1. **Scope** - Each memory operation runs inside an `owner + namespace` boundary
Expand Down
Loading
Loading