Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
79cd6fc
docs: show recall() scoringWeights on SKILL.md (WALM-616)
HoangDucBach Sep 11, 2026
89e29ac
docs: define ScoringWeights on SKILL.md (WALM-616)
HoangDucBach Sep 11, 2026
7aec019
fix(relayer): restart a failed same-key job on the insert-race path t…
nikola0x0 Sep 24, 2026
25656ad
fix(sdk): say what the relayer last reported when a remember wait tim…
nikola0x0 Sep 24, 2026
8df38e5
fix(python-sdk): say what the relayer last reported when a remember w…
nikola0x0 Sep 24, 2026
85c3348
fix(python-sdk): say the retry reuses the job only on the same client…
nikola0x0 Sep 24, 2026
aa42596
feat(sdk): listMemories() pages every memory without a query (WALM-388)
nikola0x0 Sep 24, 2026
82e5549
fix(relayer): report the paid-recovery state a same-key retry actuall…
nikola0x0 Sep 25, 2026
f8a0e05
fix(sdk): tell a timed-out remember wait to keep waiting on the job i…
nikola0x0 Sep 25, 2026
619b83d
fix(sdk): reject bad mock page sizes and honor recent recall (#1167)
ducnmm Oct 12, 2026
6a70580
fix(sdk): treat a remember options object as options and fix job stat…
ducnmm Oct 12, 2026
6626a71
fix: reject blank text, treat [::1] as local, and pin weekday dates (…
ducnmm Oct 12, 2026
7ff02e2
Merge branch 'dev' into nikola0x0/WALM-670
nikola0x0 Oct 12, 2026
a6fd852
fix(server): return each blob once in recall (WALM-594)
HoangDucBach Sep 8, 2026
0eae8f2
fix(server): refill recall limit after collapsing duplicate blobs
HoangDucBach Sep 9, 2026
73b13e6
fix(server): grow recall over-fetch by duplicate factor, cap at 4x
HoangDucBach Sep 9, 2026
d02d2e1
Merge pull request #887 from MystenLabs/wyner/walm-594-bug-memwal_rec…
HoangDucBach Oct 12, 2026
d9aa053
fix(sdk): throw when positional recall gets a namespace string (WALM-…
HoangDucBach Sep 8, 2026
3ea2895
fix(sdk): point recall TypeError at a call shape both APIs share
HoangDucBach Sep 9, 2026
68a446a
Merge pull request #877 from MystenLabs/wyner/walm-161-sdk-recall-pos…
HoangDucBach Oct 12, 2026
1c8c15f
fix(sdk): add default condition to exports map and place types first …
harrymove-ctrl Oct 12, 2026
3c978cf
fix(mcp): bind /connect/mcp consent to the local bridge (#368) (#370)
ducnmm Oct 12, 2026
d11abe9
Merge pull request #1020 from MystenLabs/nikolale/walm-388-no-operati…
nikola0x0 Oct 12, 2026
433e32b
Merge pull request #1015 from MystenLabs/nikola0x0/WALM-670
nikola0x0 Oct 12, 2026
fb00610
fix(sdk): retain lowest-distance hits under high-relevance-only token…
harrymove-ctrl Oct 12, 2026
e8c7b94
Merge pull request #1183 from MystenLabs/fix/issue-1103-recall-token-…
harrymove-ctrl Oct 12, 2026
c00f95b
Merge pull request #1181 from MystenLabs/fix/issue-1143-exports-default
harrymove-ctrl Oct 12, 2026
988b8c7
fix(sdk): clamp polling delay to deadline and ensure boundary poll ch…
harrymove-ctrl Oct 12, 2026
0df5033
fix(server,sdk): scope remember idempotency keys per namespace (WALM-…
hien-p Oct 12, 2026
9404306
fix(sdk): derive and forward idempotencyKey in rememberBulk (Fixes #1…
harrymove-ctrl Oct 12, 2026
e27b691
fix(python-sdk): anchor memory system instruction to start of prompt …
harrymove-ctrl Oct 12, 2026
b0b93ed
fix(python-sdk): support HTTP-date Retry-After and prevent float over…
harrymove-ctrl Oct 12, 2026
bde9bbd
fix(python-sdk): retry transport errors and bound polls by deadline i…
harrymove-ctrl Oct 12, 2026
f883381
fix(sdk): validate recall maxTokens and preserve matching total (Fixe…
harrymove-ctrl Oct 12, 2026
ba1485e
fix(sdk): warn on recall failure in withMemWal and add onRecallError …
harrymove-ctrl Oct 12, 2026
18393d6
fix(python-sdk): wrap docstring and tighten mock-compat TypeError ins…
harrymove-ctrl Oct 12, 2026
219f6b0
fix(python-sdk): fix ruff import sorting/unused imports and document …
harrymove-ctrl Oct 12, 2026
644cb10
fix(python-sdk): support LangChain multimodal system message, copy mo…
harrymove-ctrl Oct 12, 2026
b940979
fix(sdk): validate bulk idempotencyKey on MemWalMock and skip prefix …
harrymove-ctrl Oct 12, 2026
ad444ed
test(python-sdk): freeze time in HTTP-date retry test to eliminate su…
harrymove-ctrl Oct 12, 2026
1a5d17e
fix(python-sdk): derive content idempotency key in remember (Fixes #1…
harrymove-ctrl Oct 12, 2026
60cfabd
Merge pull request #1176 from MystenLabs/fix_idempotency_keys_namespace
harrymove-ctrl Oct 12, 2026
ad186db
Merge pull request #899 from MystenLabs/wyner/walm-616-bug-recall-can…
harrymove-ctrl Oct 12, 2026
e933327
fix(sdk): reject an empty namespace at construction
harrymove-ctrl Oct 12, 2026
5528724
fix(sdk): require a 32-byte Ed25519 seed at construction
harrymove-ctrl Oct 12, 2026
7ba3fc1
fix(sdk): reject a malformed listNamespaces cursor in the mock
harrymove-ctrl Oct 12, 2026
9a18ccc
fix(chatbot): rate-limit unauthenticated guest user creation (WALM-415)
HoangDucBach Aug 31, 2026
2e2883f
fix(chatbot): consume guest rate limit in authorize and wait for Redi…
HoangDucBach Sep 7, 2026
e1fa438
fix(chatbot): reconnect Redis and map guest limiter through Auth.js
HoangDucBach Sep 9, 2026
61f861b
Merge pull request #840 from MystenLabs/wyner/walm-415-bug-unauthenti…
HoangDucBach Oct 13, 2026
77e79d0
Merge pull request #1189 from MystenLabs/fix/issue-1159-python-mid-tu…
harrymove-ctrl Oct 13, 2026
1632092
Merge pull request #1191 from MystenLabs/fix/issue-1151-python-retry-…
harrymove-ctrl Oct 13, 2026
9bb64aa
Merge pull request #1192 from MystenLabs/fix/issue-1000-python-wait-t…
harrymove-ctrl Oct 13, 2026
be8e005
Merge pull request #1208 from MystenLabs/fix/issue-1200-key-length
harrymove-ctrl Oct 13, 2026
144f59f
Merge pull request #1206 from MystenLabs/fix/issue-1203-mock-cursor
harrymove-ctrl Oct 13, 2026
64f8079
Merge pull request #1205 from MystenLabs/fix/issue-1204-empty-namespace
harrymove-ctrl Oct 13, 2026
2900db8
Merge pull request #1199 from MystenLabs/fix/issue-1094-python-derive…
harrymove-ctrl Oct 13, 2026
406ffdc
Merge pull request #1194 from MystenLabs/fix/issue-1118-withmemwal-re…
harrymove-ctrl Oct 13, 2026
1c82a59
Merge pull request #1193 from MystenLabs/fix/issue-1068-recall-max-to…
harrymove-ctrl Oct 13, 2026
07064f7
Merge pull request #1188 from MystenLabs/fix/issue-1080-bulk-idempote…
harrymove-ctrl Oct 13, 2026
d3ddfc2
Merge pull request #1187 from MystenLabs/fix/issue-1081-wait-for-reme…
harrymove-ctrl Oct 13, 2026
a084460
fix(sdk): default account and manual helpers to a gRPC Sui client (WA…
nikola0x0 Oct 13, 2026
ffea69b
Merge pull request #1221 from MystenLabs/nikola0x0/GH-164
nikola0x0 Oct 13, 2026
d00ae1d
fix(sdk): reject unsafe remember job ids (WALM-833)
ducnmm Oct 14, 2026
91ce5c9
fix(sdk): stop preflights from consuming recall's abort budget (WALM-…
harrymove-ctrl Oct 14, 2026
8c29491
fix(mcp): mint a fresh delegate key on forced login (WALM-645) (#946)
harrymove-ctrl Oct 14, 2026
56c807c
fix(sdk): surface a failed auto-save from flush (#1209)
harrymove-ctrl Oct 14, 2026
5218032
fix(sdk): preserve matching total under recall maxDistance filter (Fi…
harrymove-ctrl Oct 14, 2026
dd00818
fix(mcp): derive remember idempotency key from resolved namespace (Fi…
harrymove-ctrl Oct 14, 2026
6bd3310
fix(mcp): validate hex input in hexToBytes and support uppercase 0X (…
harrymove-ctrl Oct 14, 2026
5d94673
fix(python-sdk): redact IPv6, 0.0.0.0, and localhost subdomains in er…
harrymove-ctrl Oct 14, 2026
2bccdbb
fix(python-sdk): support uppercase 0X prefix in normalize_private_key…
harrymove-ctrl Oct 14, 2026
4a51990
fix(sdk): validate accountId in MemWal.create and MemWalManual.create…
harrymove-ctrl Oct 14, 2026
d865354
fix(sdk): validate limit is a positive integer in recall, recallManua…
harrymove-ctrl Oct 14, 2026
aa582ee
fix(sdk): attach SEAL session and timeout in MemWalManual.restore (Fi…
harrymove-ctrl Oct 14, 2026
6f20ea8
fix(python-sdk): expose created_at and score in RecallMemory and Reca…
harrymove-ctrl Oct 14, 2026
de6d6b7
fix(sdk): suppress recall and auto-save on tool execution steps (Fixe…
harrymove-ctrl Oct 14, 2026
783a763
fix(python-sdk): suppress recall and auto-save on tool execution step…
harrymove-ctrl Oct 14, 2026
812039b
feat(app): land the Sept 2026 dashboard branch on dev (#1169)
ducnmm Oct 15, 2026
6cfac38
docs: add a guide for importing existing agent memory (#1197)
ducnmm Oct 15, 2026
11d8016
fix(sdk): drop the dead Walrus import and split recallManual results …
ducnmm Oct 15, 2026
002539d
fix(server): hold back migration 025 until the next release (#1225)
nikola0x0 Oct 15, 2026
1a17c24
fix(indexer): decode checkpoints carrying the Validity expiration (WA…
ducnmm Oct 15, 2026
15ccba1
fix(oauth): don't burn the session when Sui is unavailable (WALM-605)…
harrymove-ctrl Oct 15, 2026
53cc8dc
docs: list requestTimeoutMs and the accepted key formats (#1231)
harrymove-ctrl Oct 15, 2026
557424a
fix(sdk): reject an invalid analyze date in the mock (#1229)
harrymove-ctrl Oct 15, 2026
23a7d80
fix(sdk): reject an invalid recall query, limit, or weight (#1228)
harrymove-ctrl Oct 15, 2026
34e520f
fix(sdk): reject a non-array bulk status id list (#1226)
harrymove-ctrl Oct 15, 2026
7da6330
fix(sdk): reject a non-finite recall maxDistance (#1227)
harrymove-ctrl Oct 16, 2026
0b802ce
fix(sdk): reject an object passed as remember text (#1230)
harrymove-ctrl Oct 16, 2026
c59e679
fix(sdk): turn an empty or non-JSON 2xx body into an SDK error (#1207)
harrymove-ctrl Oct 16, 2026
256ac7f
fix(relayer): refresh the Walrus price when the payment split is shor…
ducnmm Oct 16, 2026
f486678
fix(mcp): redact db_pass and encryption_key assignments
ducnmm Oct 19, 2026
183c41d
fix(mcp): do not treat mypass as a trailing pass label
ducnmm Oct 19, 2026
b6dbec6
fix(chatbot): scope tool-approval updates to the caller chat (WALM-79…
ducnmm Oct 19, 2026
d88005a
fix(chatbot): reject a vote for a message outside the chat (#1245)
ducnmm Oct 19, 2026
f954e73
fix(mcp): do not treat the word pass as a credential
ducnmm Oct 20, 2026
61e8145
test(mcp): drop repeated db_pass and encryption_key checks
ducnmm Oct 20, 2026
8ef4f9d
fix(python-sdk): forward recall scoring weights and sort (#1233)
harrymove-ctrl Oct 20, 2026
d914af5
fix(ci): retry a prerelease publish that hits a staged version (#1237)
harrymove-ctrl Oct 20, 2026
ba567c7
Merge pull request #1243 from MystenLabs/fix/gh-1052-redact-db-pass
HoangDucBach Oct 21, 2026
e49853e
chore(sdk): cut TypeScript 0.1.9 and Python 0.1.12 (#1257)
ducnmm Oct 21, 2026
7dc91ba
fix(chatbot): fail loudly on a weak or missing AUTH_SECRET (#644)
harrymove-ctrl Oct 21, 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
96 changes: 96 additions & 0 deletions .github/scripts/publish-prerelease.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
#!/usr/bin/env bash
# Publish the next ${base}-${channel}.N build.
# A previous run can stage a version before `npm view` lists it. Retrying the
# same number then fails with "Cannot publish over previously staged version".
set -euo pipefail

dir="${1:?package dir}"
name="${2:?npm package name}"
channel="${3:?dev or rc}"

base="$(node -p "require('./${dir}/package.json').version")"

# Ask npm on its own, with its exit status kept apart from the parser's. Under
# pipefail, `npm view | node || echo -1` printed node's number AND a second -1
# when npm failed, and `$((latest + 1))` then published `*-channel.-1` or
# republished the current max.
view_err="$(mktemp)"
trap 'rm -f "$view_err"' EXIT
set +e
view_out="$(npm view "$name" versions --json 2>"$view_err")"
view_status=$?
set -e

if [ "$view_status" -ne 0 ]; then
# A package that has never been published is a valid "none yet" answer.
# npm reports it as E404 (in the --json body on stdout, or on stderr).
if printf '%s\n%s\n' "$view_out" "$(cat "$view_err")" | grep -q 'E404'; then
view_out=""
else
echo "npm view ${name} versions failed (exit ${view_status}); refusing to publish." >&2
cat "$view_err" >&2
printf '%s\n' "$view_out" >&2
exit 1
fi
fi

set +e
latest="$(
printf '%s' "$view_out" | node -e '
const fs = require("fs");
const raw = fs.readFileSync(0, "utf8").trim();
let versions = [];
if (raw) {
try {
versions = JSON.parse(raw);
} catch {
console.error("npm view did not return JSON: " + raw.slice(0, 200));
process.exit(1);
}
}
const list = Array.isArray(versions) ? versions : [versions];
const prefix = process.argv[1] + "-" + process.argv[2] + ".";
const nums = list
.filter((v) => typeof v === "string" && v.startsWith(prefix))
.map((v) => v.slice(prefix.length))
.filter((n) => /^[0-9]+$/.test(n))
.map(Number);
console.log(nums.length ? Math.max(...nums) : -1);
' "$base" "$channel"
)"
parse_status=$?
set -e

if [ "$parse_status" -ne 0 ] || ! [[ "$latest" =~ ^-?[0-9]+$ ]]; then
echo "could not read the latest ${base}-${channel}.N of ${name} (got: ${latest}); refusing to publish." >&2
exit 1
fi
next=$((latest + 1))

cd "$dir"
for _ in 1 2 3 4 5 6; do
version="${base}-${channel}.${next}"
echo "Publishing ${name}@${version}"
node -e '
const fs = require("fs");
const pkg = require("./package.json");
pkg.version = process.argv[1];
fs.writeFileSync("./package.json", JSON.stringify(pkg, null, 4) + "\n");
' "$version"
set +e
output="$(pnpm publish --tag "$channel" --provenance --access public --no-git-checks 2>&1)"
status=$?
set -e
printf '%s\n' "$output"
if [ "$status" -eq 0 ]; then
exit 0
fi
if printf '%s\n' "$output" | grep -q 'E409\|previously staged version'; then
next=$((next + 1))
continue
fi
exit "$status"
done

echo "gave up after staged-version collisions for ${name}" >&2
exit 1
132 changes: 132 additions & 0 deletions .github/scripts/publish-prerelease.test.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
// Tests for .github/scripts/publish-prerelease.sh with npm and pnpm stubbed
// on PATH. Run: node .github/scripts/publish-prerelease.test.mjs
import assert from "node:assert/strict";
import { spawnSync } from "node:child_process";
import fs from "node:fs";
import os from "node:os";
import path from "node:path";
import test from "node:test";
import { fileURLToPath } from "node:url";

const SCRIPT = path.join(path.dirname(fileURLToPath(import.meta.url)), "publish-prerelease.sh");

const NPM_STUB = `#!/usr/bin/env bash
# Stub: \`npm view <name> versions --json\` answers from env.
[ -n "\${STUB_NPM_STDOUT-}" ] && printf '%s\\n' "$STUB_NPM_STDOUT"
[ -n "\${STUB_NPM_STDERR-}" ] && printf '%s\\n' "$STUB_NPM_STDERR" >&2
exit "\${STUB_NPM_EXIT:-0}"
`;

const PNPM_STUB = `#!/usr/bin/env bash
# Stub: record the version being published; fail the first STUB_PNPM_STAGED
# attempts with a staged-version 409.
v="$(node -p "require('./package.json').version")"
echo "$v" >> "$STUB_PUBLISH_LOG"
n="$(wc -l < "$STUB_PUBLISH_LOG")"
if [ "$n" -le "\${STUB_PNPM_STAGED:-0}" ]; then
echo "npm error code E409"
echo "npm error Cannot publish over previously staged version $v"
exit 1
fi
echo "+ pkg@$v"
`;

function run(env) {
const root = fs.mkdtempSync(path.join(os.tmpdir(), "publish-prerelease-"));
const bin = path.join(root, "bin");
fs.mkdirSync(bin);
fs.writeFileSync(path.join(bin, "npm"), NPM_STUB, { mode: 0o755 });
fs.writeFileSync(path.join(bin, "pnpm"), PNPM_STUB, { mode: 0o755 });
fs.mkdirSync(path.join(root, "pkg"));
fs.writeFileSync(
path.join(root, "pkg", "package.json"),
JSON.stringify({ name: "@scope/pkg", version: "0.2.0" }, null, 4) + "\n",
);
const log = path.join(root, "published.log");
fs.writeFileSync(log, "");
const res = spawnSync("bash", [SCRIPT, "pkg", "@scope/pkg", "dev"], {
cwd: root,
encoding: "utf8",
env: { ...process.env, PATH: `${bin}:${process.env.PATH}`, STUB_PUBLISH_LOG: log, ...env },
});
const published = fs.readFileSync(log, "utf8").split("\n").filter(Boolean);
fs.rmSync(root, { recursive: true, force: true });
return { ...res, published };
}

test("publishes max+1 of the channel", () => {
const r = run({ STUB_NPM_STDOUT: JSON.stringify(["0.1.0", "0.2.0-dev.3", "0.2.0-dev.26", "0.2.0-rc.40"]) });
assert.equal(r.status, 0, r.stderr);
assert.deepEqual(r.published, ["0.2.0-dev.27"]);
});

test("a single published version (npm prints a bare string) still counts", () => {
const r = run({ STUB_NPM_STDOUT: JSON.stringify("0.2.0-dev.4") });
assert.equal(r.status, 0, r.stderr);
assert.deepEqual(r.published, ["0.2.0-dev.5"]);
});

test("no version on this channel starts at .0", () => {
const r = run({ STUB_NPM_STDOUT: JSON.stringify(["0.1.0", "0.2.0-rc.1"]) });
assert.equal(r.status, 0, r.stderr);
assert.deepEqual(r.published, ["0.2.0-dev.0"]);
});

test("E404 (never published) is a valid none and starts at .0", () => {
const r = run({
STUB_NPM_EXIT: "1",
STUB_NPM_STDOUT: JSON.stringify({ error: { code: "E404", summary: "Not Found - 404" } }),
STUB_NPM_STDERR: "npm error code E404",
});
assert.equal(r.status, 0, r.stderr);
assert.deepEqual(r.published, ["0.2.0-dev.0"]);
});

test("E404 reported only on stderr is also none", () => {
const r = run({ STUB_NPM_EXIT: "1", STUB_NPM_STDERR: "npm error code E404" });
assert.equal(r.status, 0, r.stderr);
assert.deepEqual(r.published, ["0.2.0-dev.0"]);
});

test("any other npm view failure aborts and never publishes", () => {
const r = run({
STUB_NPM_EXIT: "1",
STUB_NPM_STDOUT: JSON.stringify(["0.2.0-dev.26"]),
STUB_NPM_STDERR: "npm error code ETIMEDOUT",
});
assert.notEqual(r.status, 0);
assert.deepEqual(r.published, []);
assert.match(r.stderr, /npm view @scope\/pkg versions failed .*refusing to publish/);
assert.doesNotMatch(r.stdout + r.stderr, /dev\.-1|Publishing/);
});

test("a failure with no output at all aborts", () => {
const r = run({ STUB_NPM_EXIT: "1" });
assert.notEqual(r.status, 0);
assert.deepEqual(r.published, []);
});

test("garbage from npm view aborts and never publishes", () => {
const r = run({ STUB_NPM_STDOUT: "<html>proxy error</html>" });
assert.notEqual(r.status, 0);
assert.deepEqual(r.published, []);
assert.match(r.stderr, /refusing to publish/);
});

test("multiple lines of output abort rather than doing math on them", () => {
const r = run({ STUB_NPM_STDOUT: "26\n-1" });
assert.notEqual(r.status, 0);
assert.deepEqual(r.published, []);
});

test("non-numeric suffixes are ignored, not parsed loosely", () => {
const r = run({ STUB_NPM_STDOUT: JSON.stringify(["0.2.0-dev.2", "0.2.0-dev.1e3", "0.2.0-dev.9.1", "0.2.0-dev.-1"]) });
assert.equal(r.status, 0, r.stderr);
assert.deepEqual(r.published, ["0.2.0-dev.3"]);
});

test("a staged-version collision retries the next number", () => {
const r = run({ STUB_NPM_STDOUT: JSON.stringify(["0.2.0-dev.26"]), STUB_PNPM_STAGED: "2" });
assert.equal(r.status, 0, r.stderr);
assert.deepEqual(r.published, ["0.2.0-dev.27", "0.2.0-dev.28", "0.2.0-dev.29"]);
});
38 changes: 2 additions & 36 deletions .github/workflows/release-mcp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -109,43 +109,9 @@ jobs:
# ── staging branch → release candidate (rc tag, auto-increment) ──
- name: Publish staging release candidate
if: github.ref == 'refs/heads/staging'
run: |
BASE_VERSION=$(node -p "require('./packages/mcp/package.json').version")
LATEST=$(npm view @mysten-incubation/memwal-mcp versions --json 2>/dev/null \
| node -p "
const input = require('fs').readFileSync('/dev/stdin','utf8').trim();
const versions = input ? JSON.parse(input) : [];
const nums = (Array.isArray(versions) ? versions : [versions])
.filter(v => v.startsWith('${BASE_VERSION}-rc.'))
.map(v => +v.split('-rc.')[1])
.sort((a,b) => b - a);
nums.length ? nums[0] : -1;
" || echo "-1")
NEXT=$((LATEST + 1))
NEW_VERSION="${BASE_VERSION}-rc.${NEXT}"
echo "Publishing @mysten-incubation/memwal-mcp@${NEW_VERSION}"
cd packages/mcp
node -e "const p=require('./package.json');p.version='${NEW_VERSION}';require('fs').writeFileSync('./package.json',JSON.stringify(p,null,4)+'\n')"
pnpm publish --tag rc --provenance --access public --no-git-checks
run: .github/scripts/publish-prerelease.sh packages/mcp @mysten-incubation/memwal-mcp rc

# ── dev branch → prerelease (dev tag, auto-increment) ──
- name: Publish dev prerelease
if: github.ref == 'refs/heads/dev'
run: |
BASE_VERSION=$(node -p "require('./packages/mcp/package.json').version")
LATEST=$(npm view @mysten-incubation/memwal-mcp versions --json 2>/dev/null \
| node -p "
const input = require('fs').readFileSync('/dev/stdin','utf8').trim();
const versions = input ? JSON.parse(input) : [];
const nums = (Array.isArray(versions) ? versions : [versions])
.filter(v => v.startsWith('${BASE_VERSION}-dev.'))
.map(v => +v.split('-dev.')[1])
.sort((a,b) => b - a);
nums.length ? nums[0] : -1;
" || echo "-1")
NEXT=$((LATEST + 1))
NEW_VERSION="${BASE_VERSION}-dev.${NEXT}"
echo "Publishing @mysten-incubation/memwal-mcp@${NEW_VERSION}"
cd packages/mcp
node -e "const p=require('./package.json');p.version='${NEW_VERSION}';require('fs').writeFileSync('./package.json',JSON.stringify(p,null,4)+'\n')"
pnpm publish --tag dev --provenance --access public --no-git-checks
run: .github/scripts/publish-prerelease.sh packages/mcp @mysten-incubation/memwal-mcp dev
36 changes: 2 additions & 34 deletions .github/workflows/release-oc-memwal.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,41 +107,9 @@ jobs:
# ── staging branch → release candidate (rc tag, auto-increment) ──
- name: Publish staging release candidate
if: github.ref == 'refs/heads/staging'
run: |
BASE_VERSION=$(node -p "require('./packages/openclaw-memory-memwal/package.json').version")
LATEST=$(npm view @mysten-incubation/oc-memwal versions --json 2>/dev/null \
| node -p "
const versions = JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'));
const nums = (Array.isArray(versions) ? versions : [versions])
.filter(v => v.startsWith('${BASE_VERSION}-rc.'))
.map(v => +v.split('-rc.')[1])
.sort((a,b) => b - a);
nums.length ? nums[0] : -1;
" || echo "-1")
NEXT=$((LATEST + 1))
NEW_VERSION="${BASE_VERSION}-rc.${NEXT}"
echo "Publishing @mysten-incubation/oc-memwal@${NEW_VERSION}"
cd packages/openclaw-memory-memwal
node -e "const p=require('./package.json');p.version='${NEW_VERSION}';require('fs').writeFileSync('./package.json',JSON.stringify(p,null,4)+'\n')"
pnpm publish --tag rc --provenance --access public --no-git-checks
run: .github/scripts/publish-prerelease.sh packages/openclaw-memory-memwal @mysten-incubation/oc-memwal rc

# ── dev branch → prerelease (dev tag, auto-increment) ──
- name: Publish dev prerelease
if: github.ref == 'refs/heads/dev'
run: |
BASE_VERSION=$(node -p "require('./packages/openclaw-memory-memwal/package.json').version")
LATEST=$(npm view @mysten-incubation/oc-memwal versions --json 2>/dev/null \
| node -p "
const versions = JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'));
const nums = (Array.isArray(versions) ? versions : [versions])
.filter(v => v.startsWith('${BASE_VERSION}-dev.'))
.map(v => +v.split('-dev.')[1])
.sort((a,b) => b - a);
nums.length ? nums[0] : -1;
" || echo "-1")
NEXT=$((LATEST + 1))
NEW_VERSION="${BASE_VERSION}-dev.${NEXT}"
echo "Publishing @mysten-incubation/oc-memwal@${NEW_VERSION}"
cd packages/openclaw-memory-memwal
node -e "const p=require('./package.json');p.version='${NEW_VERSION}';require('fs').writeFileSync('./package.json',JSON.stringify(p,null,4)+'\n')"
pnpm publish --tag dev --provenance --access public --no-git-checks
run: .github/scripts/publish-prerelease.sh packages/openclaw-memory-memwal @mysten-incubation/oc-memwal dev
36 changes: 2 additions & 34 deletions .github/workflows/release-sdk.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,41 +104,9 @@ jobs:
# ── staging branch → release candidate (rc tag, auto-increment) ──
- name: Publish staging release candidate
if: github.ref == 'refs/heads/staging'
run: |
BASE_VERSION=$(node -p "require('./packages/sdk/package.json').version")
LATEST=$(npm view @mysten-incubation/memwal versions --json 2>/dev/null \
| node -p "
const versions = JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'));
const nums = (Array.isArray(versions) ? versions : [versions])
.filter(v => v.startsWith('${BASE_VERSION}-rc.'))
.map(v => +v.split('-rc.')[1])
.sort((a,b) => b - a);
nums.length ? nums[0] : -1;
" || echo "-1")
NEXT=$((LATEST + 1))
NEW_VERSION="${BASE_VERSION}-rc.${NEXT}"
echo "Publishing @mysten-incubation/memwal@${NEW_VERSION}"
cd packages/sdk
node -e "const p=require('./package.json');p.version='${NEW_VERSION}';require('fs').writeFileSync('./package.json',JSON.stringify(p,null,4)+'\n')"
pnpm publish --tag rc --provenance --access public --no-git-checks
run: .github/scripts/publish-prerelease.sh packages/sdk @mysten-incubation/memwal rc

# ── dev branch → prerelease (dev tag, auto-increment) ──
- name: Publish dev prerelease
if: github.ref == 'refs/heads/dev'
run: |
BASE_VERSION=$(node -p "require('./packages/sdk/package.json').version")
LATEST=$(npm view @mysten-incubation/memwal versions --json 2>/dev/null \
| node -p "
const versions = JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'));
const nums = (Array.isArray(versions) ? versions : [versions])
.filter(v => v.startsWith('${BASE_VERSION}-dev.'))
.map(v => +v.split('-dev.')[1])
.sort((a,b) => b - a);
nums.length ? nums[0] : -1;
" || echo "-1")
NEXT=$((LATEST + 1))
NEW_VERSION="${BASE_VERSION}-dev.${NEXT}"
echo "Publishing @mysten-incubation/memwal@${NEW_VERSION}"
cd packages/sdk
node -e "const p=require('./package.json');p.version='${NEW_VERSION}';require('fs').writeFileSync('./package.json',JSON.stringify(p,null,4)+'\n')"
pnpm publish --tag dev --provenance --access public --no-git-checks
run: .github/scripts/publish-prerelease.sh packages/sdk @mysten-incubation/memwal dev
4 changes: 4 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,10 @@ jobs:

- name: Build (Next.js, type-check inclusive)
working-directory: apps/chatbot
env:
# next build imports auth.ts, which rejects a missing or short secret.
AUTH_SECRET: ci-test-secret-not-for-production
POSTGRES_URL: postgresql://dummy:dummy@localhost:5432/dummy
run: pnpm exec next build

noter-checks:
Expand Down
Loading
Loading