Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
61117d3
feat(retrieval): restore source-aware filters and backfill
0xble Mar 24, 2026
6a08f0f
fix(search): restore source and time filtering
0xble Mar 24, 2026
101cbdd
test(search): align telemetry assertions with pruning
0xble Mar 24, 2026
451c03c
feat(ov): cut over retrieval filters
0xble Mar 28, 2026
50c339d
feat(mcp): proxy example to shared http backend
0xble Mar 29, 2026
51d4718
feat(examples): wire retrieval usage feedback into memory runtimes
0xble Mar 29, 2026
698e64c
fix(codex-memory-plugin): wait for delete consistency
0xble Mar 31, 2026
048735e
chore(lockfiles): sync Cargo.lock and uv.lock
0xble Apr 4, 2026
9977e53
fix(retrieval): harden rerank and memory reindex
0xble Apr 9, 2026
2ac362a
fix(examples): use active session id for archive expand
0xble Apr 13, 2026
5273eb3
refork: hard-cut retrieval time filter cutover
0xble Apr 14, 2026
faac64f
fix(retrieval): reset leaf created_at on reindex
0xble Apr 14, 2026
f2aa37c
fix(retrieval): drop stray tracker arg
0xble Apr 14, 2026
05d5db9
fix(build): codesign ov during upgrade
0xble Apr 14, 2026
633bfc4
fix(openclaw-plugin): move recall into assemble by default
0xble Apr 14, 2026
251f566
fix(openclaw-plugin): detect active openclaw config file
0xble Apr 14, 2026
ea9d2b5
fix(openclaw-plugin): default recall to assemble
0xble Apr 14, 2026
d1c86d2
fix(openclaw-plugin): log recall read fallback
0xble Apr 14, 2026
275170e
fix(openclaw-plugin): bound afterTurn capture latency
0xble Apr 14, 2026
7dc9699
fix(openclaw-plugin): harden openviking session reliability
0xble Apr 14, 2026
08cab53
ci(docker): skip docker hub publish without credentials
0xble Apr 14, 2026
92ffc40
ci(docker): include native extension third party sources
0xble Apr 14, 2026
91c913e
ci(docker): use rust toolchain required by dependencies
0xble Apr 14, 2026
a05b605
fix(openclaw-plugin): adapt memory recall latency
0xble Apr 15, 2026
8b338d2
fix(openclaw-plugin): bound adaptive recall caches
0xble Apr 15, 2026
99f2c9f
Merge remote-tracking branch 'upstream/main' into fix/openclaw-assemb…
0xble Apr 15, 2026
df45dac
fix(openclaw-plugin): keep ingest assist on recall init failure
0xble Apr 15, 2026
d1e7270
refactor(openclaw-plugin): reuse assemble token estimate
0xble Apr 15, 2026
a5adb0d
docs(openclaw-plugin): restore Chinese inline comments
0xble Apr 15, 2026
6639716
docs(openclaw-plugin): clarify compact log comment
0xble Apr 15, 2026
45547f4
refactor(openclaw-plugin): remove redundant fallbacks
0xble Apr 15, 2026
44fa78b
refactor(search): consolidate time filter handling
0xble Apr 15, 2026
4584cc0
fix(openclaw-plugin): avoid stale json5 config fallback
0xble Apr 15, 2026
4787223
fix(session): detach memory extraction from commit completion
0xble Apr 15, 2026
64c93a5
fix(session): stabilize detached commit completion
0xble Apr 15, 2026
e7de8a5
fix(openclaw-plugin): gate legacy hook recall registration
0xble Apr 15, 2026
318e26d
fix(openclaw-plugin): preserve hook fallback typing
0xble Apr 15, 2026
76f6008
Merge remote-tracking branch 'upstream/main' into fix/openclaw-assemb…
0xble Apr 15, 2026
8ef771d
fix(openclaw-plugin): route memory to configured tenant
0xble Apr 15, 2026
41f1af3
fix(session): bound live compaction fallback
0xble Apr 15, 2026
afe3fc6
fix(session): clear live transcript on archive
0xble Apr 15, 2026
eada985
fix(ragfs): truncate local writes on create
0xble Apr 16, 2026
f6ffcf1
revert(openviking): undo local context overflow fixes
0xble Apr 16, 2026
e6ac251
chore(fork): sync upstream main
0xble Apr 16, 2026
93045d8
fix(fork): repair ov mkdir sync conflict
0xble Apr 16, 2026
8452d7a
fix(rerank): accept data response envelope
0xble Apr 16, 2026
eb0c922
Merge remote-tracking branch 'upstream/main' into fix/openclaw-assemb…
0xble Apr 16, 2026
7d322a9
fix(openclaw-plugin): preserve tool round trips
0xble Apr 16, 2026
649e725
Merge remote-tracking branch 'upstream/main' into fix/openclaw-assemb…
0xble Apr 18, 2026
48ce9c4
chore(fork): merge upstream main
0xble Apr 18, 2026
c04fea9
refactor(openclaw-plugin): typed recall path, document afterTurn cap
0xble Apr 18, 2026
38aeb25
test(openclaw-plugin): add full afterTurn->assemble tool round-trip
0xble Apr 18, 2026
56b0d57
merge(upstream/main): sync with ingestReplyAssist removal (#1564)
0xble Apr 18, 2026
06dc08d
refactor(openclaw-plugin): drop remaining ingestReplyAssist references
0xble Apr 18, 2026
21e74e4
chore(fork): sync upstream main, drop ingestReplyAssist with #1564
0xble Apr 19, 2026
46dfd8f
fix(openclaw-plugin): address wlff123 review on #1424
0xble Apr 19, 2026
35ef499
sync(claude-code-memory-plugin): update to Castor6 v0.1.5
0xble Apr 19, 2026
17289c9
fix(claude-code-memory-plugin): exec ready runtime when CLAUDE_PLUGIN…
0xble Apr 19, 2026
3cbab08
feat(marketplace): add .claude-plugin/marketplace.json for fork distr…
0xble Apr 19, 2026
cccc67b
fix(claude-code-memory-plugin): drop unresolved ${VAR} env passthroug…
0xble Apr 19, 2026
2a3b7be
feat(memory): add scheduled consolidation foundation (Phase A)
0xble Apr 20, 2026
14dff19
feat(memory): scheduler + HTTP endpoints + canary phase (Phases B-D)
0xble Apr 20, 2026
68762d2
fix(memory): /consolidate/runs returns audit records (was empty)
0xble Apr 20, 2026
c1efc53
feat(memory): per-canary top_n sensitivity knob
0xble Apr 20, 2026
1bd0701
chore(fork): sync upstream main
0xble Apr 20, 2026
85271cd
fix(openclaw-plugin): send addSessionMessage text as parts array
0xble Apr 20, 2026
d0d2b15
feat(openclaw-plugin): self-heal dormant sessions in compactOVSession
0xble Apr 20, 2026
1a92f7f
fix(openclaw-plugin): afterTurn uses structured parts with tool fidelity
0xble Apr 20, 2026
35d8cdc
ci: add fork regression gate for openclaw-plugin contract tests
0xble Apr 20, 2026
56b3f20
feat(openclaw-plugin): categorize commit errors in compact reason
0xble Apr 20, 2026
c31e001
feat(semantic): add output_language_override to pin summary/overview …
0xble Apr 21, 2026
ae993b4
feat(memory): add POST /api/v1/memories for direct memory creation
0xble Apr 21, 2026
2d5551c
feat(session): make extract work against archived messages
0xble Apr 21, 2026
695b06d
fix(session): prevent duplicate memories during redo recovery
0xble Apr 21, 2026
6fbfb1e
fix(ov_cli): wire Extract arm into main.rs handle_session dispatch
0xble Apr 21, 2026
1b316ad
feat(plugins): add memory_write tool across 4 memory plugins
0xble Apr 21, 2026
b67cbb1
fix(plugins): memory_write review fixes — unwrap request, tighten URI…
0xble Apr 21, 2026
1c6f6b5
refactor(codex-plugin): rename openviking_* tools to memory_* for con…
0xble Apr 21, 2026
9003cbe
fix(openclaw-plugin): default recall to assemble and bound afterTurn
0xble Apr 21, 2026
1a216e3
fix(openclaw-plugin): include recall modules in install-manifest
0xble Apr 21, 2026
d007fc4
ci(openclaw-plugin): lint install-manifest against runtime imports
0xble Apr 21, 2026
08b90ba
chore(openclaw-plugin): bump pluginVersion to 2026.4.21
0xble Apr 21, 2026
51edd07
chore(fork): sync upstream main 20260422
0xble Apr 22, 2026
58256a4
Merge origin/main into fix/openclaw-assemble-recall
0xble Apr 22, 2026
3141ec4
fix(ci): repair check-manifest recursion and ov_cli Write dispatch
0xble Apr 22, 2026
28a3436
fix(openclaw-plugin): unblock CI contract tests after upstream sync
0xble Apr 22, 2026
280288b
chore(openclaw-plugin): remove duplicate blocks from merge resolution
0xble Apr 22, 2026
38cfb2d
style: apply ruff format to files synced from upstream
0xble Apr 22, 2026
042b3ab
style: remove unused imports flagged by ruff check
0xble Apr 22, 2026
9f743ed
style: remove unreachable except + unused imports flagged by CI
0xble Apr 22, 2026
9d7c04a
revert(server): drop fork-only server changes on this PR branch
0xble Apr 22, 2026
f742868
fix(openclaw-plugin): align OpenVikingClient call with 10-arg signature
0xble Apr 22, 2026
467bd91
fix(openclaw-plugin): restore spaceCache field on OpenVikingClient
0xble Apr 22, 2026
fbc5d92
fix(openclaw-plugin): restore createHash import on OpenVikingClient
0xble Apr 22, 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
17 changes: 17 additions & 0 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "openviking",
"owner": {
"name": "0xble"
},
"plugins": [
{
"name": "claude-code-memory-plugin",
"source": "./examples/claude-code-memory-plugin",
"description": "Persistent memory for Claude Code powered by OpenViking sessions",
"version": "0.1.5-0xble.0.1.0",
"author": {
"name": "canlantiancai"
}
}
]
}
4 changes: 2 additions & 2 deletions .github/workflows/api_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,13 +115,13 @@ jobs:
touch openviking/bin/ov
chmod +x openviking/bin/ov
echo "OV_SKIP_OV_BUILD=1 set, skipping ov CLI Rust build (ragfs build still needed for server)"

if [ -z "$SETUPTOOLS_SCM_PRETEND_VERSION_FOR_OPENVIKING" ]; then
PRETEND_VERSION=$(git describe --tags --always 2>/dev/null | sed -E 's/^v?([0-9]+\.[0-9]+\.[0-9]+).*/\1.dev0/' || echo "0.0.0.dev0")
echo "SETUPTOOLS_SCM_PRETEND_VERSION_FOR_OPENVIKING=$PRETEND_VERSION" >> $GITHUB_ENV
echo "Using pretend version: $PRETEND_VERSION"
fi

uv run python setup.py build_ext --inplace

- name: Build ragfs-python native extension
Expand Down
51 changes: 41 additions & 10 deletions .github/workflows/build-docker-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,20 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Check Docker Hub publishing
id: dockerhub
env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
run: |
if [ -n "$DOCKERHUB_USERNAME" ] && [ -n "$DOCKERHUB_TOKEN" ]; then
echo "enabled=true" >> "$GITHUB_OUTPUT"
else
echo "enabled=false" >> "$GITHUB_OUTPUT"
fi

- name: Log in to Docker Hub
if: steps.dockerhub.outputs.enabled == 'true'
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
Expand All @@ -65,7 +78,6 @@ jobs:
with:
images: |
${{ env.REGISTRY }}/${{ steps.image-name.outputs.image }}
docker.io/${{ secrets.DOCKERHUB_USERNAME }}/openviking
tags: |
type=raw,value=${{ github.event.inputs.version }},enable=${{ github.event_name == 'workflow_dispatch' }}
type=ref,event=tag,enable=${{ github.ref_type == 'tag' }}
Expand All @@ -89,6 +101,7 @@ jobs:
OPENVIKING_VERSION=${{ (github.event_name == 'workflow_dispatch' && github.event.inputs.version) || (github.ref_type == 'tag' && github.ref_name) || '0.0.0' }}

- name: Build and push Docker image to Docker Hub
if: steps.dockerhub.outputs.enabled == 'true'
id: push-dockerhub
uses: docker/build-push-action@v7
with:
Expand Down Expand Up @@ -116,12 +129,14 @@ jobs:
retention-days: 1

- name: Export Docker Hub image digest
if: steps.dockerhub.outputs.enabled == 'true'
run: |
mkdir -p /tmp/digests-dockerhub
dockerhub_digest="${{ steps.push-dockerhub.outputs.digest }}"
touch "/tmp/digests-dockerhub/${dockerhub_digest#sha256:}"

- name: Upload Docker Hub image digest
if: steps.dockerhub.outputs.enabled == 'true'
uses: actions/upload-artifact@v7
with:
name: docker-digests-dockerhub-${{ matrix.arch }}
Expand Down Expand Up @@ -156,7 +171,20 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Check Docker Hub publishing
id: dockerhub
env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
run: |
if [ -n "$DOCKERHUB_USERNAME" ] && [ -n "$DOCKERHUB_TOKEN" ]; then
echo "enabled=true" >> "$GITHUB_OUTPUT"
else
echo "enabled=false" >> "$GITHUB_OUTPUT"
fi

- name: Log in to Docker Hub
if: steps.dockerhub.outputs.enabled == 'true'
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
Expand All @@ -168,7 +196,6 @@ jobs:
with:
images: |
${{ env.REGISTRY }}/${{ steps.image-name.outputs.image }}
docker.io/${{ secrets.DOCKERHUB_USERNAME }}/openviking
tags: |
type=raw,value=${{ github.event.inputs.version }},enable=${{ github.event_name == 'workflow_dispatch' }}
type=ref,event=tag,enable=${{ github.ref_type == 'tag' }}
Expand All @@ -186,6 +213,7 @@ jobs:
merge-multiple: true

- name: Download Docker Hub image digests
if: steps.dockerhub.outputs.enabled == 'true'
uses: actions/download-artifact@v8
with:
pattern: docker-digests-dockerhub-*
Expand All @@ -194,6 +222,7 @@ jobs:

- name: Create multi-arch manifests
env:
DOCKERHUB_ENABLED: ${{ steps.dockerhub.outputs.enabled }}
SOURCE_TAGS: ${{ steps.meta.outputs.tags }}
run: |
# Collect image references for both registries
Expand All @@ -204,20 +233,22 @@ jobs:
digest="sha256:$(basename "$digest_file")"
ghcr_image_refs+=("${{ env.REGISTRY }}/${{ steps.image-name.outputs.image }}@${digest}")
done
for digest_file in /tmp/digests-dockerhub/*; do
[ -e "$digest_file" ] || continue
digest="sha256:$(basename "$digest_file")"
dockerhub_image_refs+=("docker.io/${{ secrets.DOCKERHUB_USERNAME }}/openviking@${digest}")
done
if [ "$DOCKERHUB_ENABLED" = "true" ]; then
for digest_file in /tmp/digests-dockerhub/*; do
[ -e "$digest_file" ] || continue
digest="sha256:$(basename "$digest_file")"
dockerhub_image_refs+=("docker.io/${{ secrets.DOCKERHUB_USERNAME }}/openviking@${digest}")
done
fi

[ ${#ghcr_image_refs[@]} -gt 0 ] || {
echo "No GHCR image digests found" >&2
exit 1
}
[ ${#dockerhub_image_refs[@]} -gt 0 ] || {
if [ "$DOCKERHUB_ENABLED" = "true" ] && [ ${#dockerhub_image_refs[@]} -eq 0 ]; then
echo "No Docker Hub image digests found" >&2
exit 1
}
fi

# Create manifests for all tags
while IFS= read -r tag; do
Expand All @@ -228,7 +259,7 @@ jobs:
docker buildx imagetools create \
--tag "$tag" \
"${ghcr_image_refs[@]}"
elif [[ "$tag" == docker.io/* ]]; then
elif [[ "$tag" == docker.io/* && "$DOCKERHUB_ENABLED" == "true" ]]; then
docker buildx imagetools create \
--tag "$tag" \
"${dockerhub_image_refs[@]}"
Expand Down
16 changes: 8 additions & 8 deletions .github/workflows/oc2ov_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,24 +36,24 @@ jobs:
- name: Clean up previous artifacts
run: |
echo "🧹 Cleaning up previous artifacts..."

# Clean up old test reports
echo " - Removing old test reports..."
rm -rf tests/oc2ov_test/reports/*.html || true

# Clean up old logs
echo " - Removing old logs..."
rm -rf tests/oc2ov_test/logs/*.log || true

# Clean up pip cache (optional, saves disk space)
echo " - Cleaning pip cache..."
pip3 cache purge 2>/dev/null || echo " (pip cache not available or already clean)"

# Clean up old pytest cache
echo " - Removing pytest cache..."
rm -rf .pytest_cache || true
rm -rf tests/oc2ov_test/.pytest_cache || true

# Clean up __pycache__ directories
echo " - Removing __pycache__ directories..."
find tests/oc2ov_test -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
Expand Down Expand Up @@ -93,10 +93,10 @@ jobs:
# Wait for services to be fully ready
echo "⏳ Waiting for services to be ready..."
sleep 10

# Health check
echo "🏥 Performing health check..."

echo "Checking OpenViking server (port 1933)..."
for i in {1..10}; do
if curl -sf http://127.0.0.1:1933/health 2>/dev/null | grep -q "healthy"; then
Expand All @@ -107,7 +107,7 @@ jobs:
sleep 5
fi
done

echo "Checking OpenClaw gateway (port 18789)..."
for i in {1..10}; do
if ss -tuln 2>/dev/null | grep -q ":18789 "; then
Expand Down
56 changes: 56 additions & 0 deletions .github/workflows/openclaw-plugin-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Fork-local regression gate for the openclaw-plugin.
#
# Catches the signature-drift class of bug where fork-local edits and
# upstream refactors collide on examples/openclaw-plugin/*.ts. Runs the
# narrow set of tests that exercise client <-> context-engine contracts
# (addSessionMessage shape, afterTurn capture path, compactOVSession
# commit + self-heal). Broader plugin tests are intentionally excluded
# until the fork triages their pre-existing failures.

name: openclaw-plugin tests

on:
push:
branches:
- main
paths:
- "examples/openclaw-plugin/**"
- ".github/workflows/openclaw-plugin-tests.yml"
pull_request:
paths:
- "examples/openclaw-plugin/**"
- ".github/workflows/openclaw-plugin-tests.yml"
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
vitest:
runs-on: ubuntu-latest
timeout-minutes: 10

steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: "24"

- name: Install plugin deps
working-directory: examples/openclaw-plugin
run: npm ci --no-audit --no-fund

- name: Check install-manifest covers runtime imports
working-directory: examples/openclaw-plugin
run: npm run check-manifest

- name: Run contract tests (afterTurn, compact)
working-directory: examples/openclaw-plugin
run: >-
node_modules/.bin/vitest run
tests/ut/context-engine-afterTurn.test.ts
tests/ut/context-engine-compact.test.ts
# client.test.ts intentionally excluded until the pre-existing
# "keeps polling wait=true commit" tenant-config failure is triaged.
Loading
Loading