Commit Graph
387 Commits
Author SHA1 Message Date
Qin Haojie 82aeb6c137 fix(openclaw-plugin): preserve existing ov.conf on auto install (#1098)
Avoid overwriting existing OpenViking config in non-interactive installs so repeated setup keeps the configured server port and workspace settings.
2026-03-31 10:25:16 +08:00
Qin Haojie bfc11a3955 fix(openclaw-plugin): simplify install flow and harden helpers (#1095) 2026-03-31 09:53:57 +08:00
bot-of-qin-ctx 303cf40955 Revert "feat(examples): mark recalled memories as used (#1079)" (#1090)
This reverts commit 7122c3c7f7.
2026-03-30 16:49:46 +08:00
MaojiaShengandopenviking ce998873f9 lisence: change the main lisence to AGPL-3.0 (#1085)
* lisence: change the main lisence from Apache-2.0 to AGPL-v3

* lisence: change the main lisence from Apache-2.0 to AGPL-v3

* lisence: change the main lisence from Apache-2.0 to AGPL-v3

---------

Co-authored-by: openviking <openviking@example.com>
2026-03-30 14:37:42 +08:00
r266-techandwzr b955821116 docs: clarify user_key vs root_key in quickstart and basic usage (#1077)
The quickstart-server.md auth section previously just said "pass api_key"
without distinguishing user_key from root_key. This causes users to
mistakenly use root_key for tenant-scoped APIs (add_resource, find, ls),
which fails with "ROOT requests to tenant-scoped APIs must include
X-OpenViking-Account and X-OpenViking-User headers".

Changes:
- docs/zh/getting-started/03-quickstart-server.md: expanded auth section
  with user_key (recommended) and root_key (must pass account/user)
  examples, plus warning about the common pitfall
- docs/en/getting-started/03-quickstart-server.md: same changes in English
- examples/basic-usage/README.md: added multi-tenant auth note after
  HTTP client example
- examples/basic-usage/README_CN.md: same note in Chinese

Closes #1022

Co-authored-by: wzr <2668940489@qq.com>
2026-03-30 11:26:01 +08:00
Brian Le 7122c3c7f7 feat(examples): mark recalled memories as used (#1079) 2026-03-30 11:24:57 +08:00
evaldassandEvaldas 2e8f394d0d fix(openclaw-plugin): remove duplicate const sessionId declaration in ov_archive_expand (#1059)
Line 722 re-declared `const sessionId = ctx.sessionId ?? ""` which was
already declared on line 711 within the same execute() scope. This
caused a ParseError at plugin load time:

    Identifier 'sessionId' has already been declared.
    /home/.../.openclaw/extensions/openviking/index.ts:722:14

Removed the duplicate declaration so the existing sessionId from
line 711 is reused.

Co-authored-by: Evaldas <evaldas@openclaw.ai>
2026-03-29 12:27:59 +08:00
x__dot 21bb8e9bcb fix(openclaw-plugin): fix compact result mapping (#1058)
* fix(openclaw-plugin): fix compact result mapping

* fix(openclaw-plugin): align compact result fields

* fix(openclaw-plugin): mark unknown tokensBefore as -1
2026-03-29 09:41:00 +08:00
LinQiang391 df632107f5 feat(openclaw-plugin): align agent routing and reduce default log noise; fix(system/status): align resolved user id (#1054) 2026-03-28 19:32:50 +08:00
Eurakaxun 64417f16af fix(openclaw-plugin): add defensive re-spawn for OpenViking subprocess after Gateway restart (#1053) 2026-03-28 18:34:34 +08:00
AutoCoder 8c57069409 set DEFAULT_COMMIT_TOKEN_THRESHOLD to 20000 for openclaw-plugin (#1052) 2026-03-28 17:13:01 +08:00
6d26e7a4fa refactor(openclaw-plugin): Unified session APIs and refactored the OpenClaw context pipeline for more consistent behavior, better maintainability, and stronger test coverage. (#1040)
* feat(openclaw-plugin): unify context assembly and compaction workflows

Co-authored-by: wlff123 <wulf234@163.com>
Co-authored-by: Eurekaxun <eurekaxun@163.com>
Co-authored-by: lin-qiang123 <1667704220@qq.com>
Co-authored-by: jcp0578 <jcp0578@gmail.com>

* feat(openviking-server): unify session context and commit APIs

Authored-by: Qin Haojie <qinhaojie.exe@bytedance.com>

* set default value of DEFAULT_EMIT_STANDARD_DIAGNOSTICS to false

---------

Co-authored-by: Eurekaxun <eurekaxun@163.com>
Co-authored-by: lin-qiang123 <1667704220@qq.com>
Co-authored-by: jcp0578 <jcp0578@gmail.com>
Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-03-28 10:41:03 +08:00
LinQiang391 1b634254c2 feat(openclaw-plugin): default plugin install to latest Git tag (#1050)
- Resolve latest semver tag from GitHub API when PLUGIN_VERSION unset

- Mirror logic in install.sh and setup-helper/install.js

- Update INSTALL.md / INSTALL-ZH.md for new defaults and examples

- Bump openclaw-openviking-setup-helper to 0.2.11 (npm)

Made-with: Cursor
2026-03-28 10:22:23 +08:00
灿烂甜菜 d1698fa53c feat(claude-code-plugin): add Claude Code memory plugin example (#903)
* chore: remove old claude-memory-plugin example

* feat(claude code): add Claude Code memory plugin example

* Revert "chore: remove old claude-memory-plugin example"

This reverts commit e4519a06be.

* chore: replace legacy claude-memory-plugin with migration guide
2026-03-27 19:37:57 +08:00
LinQiang391 182a4d428f feat(installer, openclaw-plugin): unified installer upgrade (#1020)
- Installer: Python path fix, version compatibility, legacy plugin support (79781f58)
- OpenClaw plugin: manifest/FALLBACK optional+required, download retries, optional 404 UX; session-transcript-repair.ts optional in manifest (installer may skip on 404)
- context-engine unchanged from base (static session-transcript-repair import)
- Docs: INSTALL/INSTALL-ZH; Windows via npm/ov-install; remove install.ps1 and INSTALLER-UPGRADE-PROPOSAL
- setup-helper version bump for npm dev line

Made-with: Cursor
2026-03-27 14:06:13 +08:00
Jiahui Zhou c5033b0bcd feat(cli): support tenant identity defaults and overrides (#1019) 2026-03-27 11:35:16 +08:00
x__dot f5dd276714 fix(openclaw-plugin): use plugin-sdk exports for compaction delegation (fixes #833) openclaw ≥ v2026.3.22 (#1000)
* 增加过程错误信息

* fix(openclaw-plugin): delegate compaction via plugin-sdk exports
2026-03-27 09:03:08 +08:00
Qin Haojie 7b2b910082 fix(openclaw-plugin): sanitize mapped OpenViking session ids (#998)
Map OpenClaw session keys to stable filesystem-safe OpenViking session ids so auto-capture and memory commits work on Windows.
2026-03-26 17:00:38 +08:00
bot-of-qin-ctx 05422219f3 Revert "fix(openclaw-plugin): harden duplicate registration guard (#974)" (#995)
This reverts commit 20a25fde58.
2026-03-26 15:10:52 +08:00
Qin Haojie 20a25fde58 fix(openclaw-plugin): harden duplicate registration guard (#974)
Make duplicate plugin registration idempotent across retries and stop/reload flows, and add regression coverage for failure rollback and stale stop handling.
2026-03-26 13:18:51 +08:00
冰水泡枸杞andxingzihai 2cc3761ee7 docs: Add basic usage example and Chinese documentation for examples (#979)
* docs: Add Chinese documentation for example READMEs

- Add README_CN.md for claude-memory-plugin
- Add README_CN.md for k8s-helm
- Add README_CN.md for mcp-query

These translations help Chinese users understand the example usage and configuration.

* docs: Add basic usage example for Python SDK

- Add comprehensive README.md with code examples
- Add Chinese version README_CN.md
- Add basic_usage.py demonstrating core features:
  - Initialization (embedded mode and HTTP client mode)
  - Adding resources (URLs, files, directories)
  - Browsing the virtual filesystem
  - Semantic search and retrieval
  - Tiered context loading (L0/L1/L2)
  - Session management for memory

This example helps developers quickly get started with OpenViking.

---------

Co-authored-by: xingzihai <xingzihai@users.noreply.github.com>
2026-03-26 13:13:20 +08:00
Ghostknight0andwushijian edfa20e8b1 Fix HTTPX recognition issue with SOCKS5 proxy causing OpenViking crash (#957)
* 修复系统代理如果使用socks5://开头会导致httpx库无法识别,引起openviking崩溃的问题,排除了环境变量中–all_proxy/https_proxy等

* fix:修改多余的.env

---------

Co-authored-by: wushijian <wushijian@kingsoft.com>
2026-03-25 16:56:07 +08:00
Qin Haojie d8858afad6 Revert "feat(openclaw-plugin): add archive-aware context assembly and async s…" (#953)
This reverts commit 08b278da81.
2026-03-25 11:35:20 +08:00
08b278da81 feat(openclaw-plugin): add archive-aware context assembly and async session commit (#938)
* feat(session): make commit two-phase with async memory extraction

Session commit now returns immediately after archiving messages (Phase 1).
Summary generation and memory extraction (Phase 2) run in the background
via asyncio.create_task(), returning a task_id for polling progress.

- Add get_task() API across all client layers for querying background task status
- get_session() auto-creates session if it does not exist
- Remove wait parameter and telemetry from commit endpoint
- Add .done completion marker to archive directories
- Update docs (EN/ZH) and tests for new two-phase flow

* feat(session): add .meta.json persistence and auto_create control for get_session

SessionService.get() now defaults to auto_create=False, raising NotFoundError
for missing sessions. A new SessionMeta dataclass tracks created_at, updated_at,
message_count, commit_count, memories_extracted (by category), last_commit_at,
and cumulative llm_token_usage. Meta is persisted to .meta.json and updated on
add_message, commit Phase 1 (message clear), and commit Phase 2 completion
(token usage, memory counts via bind_telemetry). All client layers
(local/async/sync/HTTP) and API docs updated accordingly.

* fix: remove session vectorize

* support commit for openclaw-plugin

Made-with: Cursor

* feat(openclaw-plugin): archive-aware context assembler with lazy-read optimization

- Implement get_context_for_assemble with token-budget-aware archive trimming
- Write .meta.json during commit for pre-stored token counts
- Lazy-read archives from newest to oldest, skip old archives when budget exhausted
- Backward-compatible: fall back to reading overview for old archives without .meta.json
- Pass agentId through getContextForAssemble in client.ts
- Use sessionKey from OpenClaw in assemble to match afterTurn session resolution
- Emit non-error toolResult for pending/running tools instead of synthetic error
- Log warning and mark stats on ls(history) failure instead of silent swallow

* refactor(openclaw-plugin): unify OV session identity to sessionId

Made-with: Cursor

* feat(openclaw-plugin): add memory chain integration test script

Made-with: Cursor

* add test and desc of openclaw-plugin

* change commit to async

---------

Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
Co-authored-by: wlff123 <wulf234@163.com>
Co-authored-by: Eurekaxun <eurekaxun@163.com>
Co-authored-by: lin-qiang123 <1667704220@qq.com>
2026-03-24 23:40:32 +08:00
Qin HaojieClaude Opus 4.6AutoCoder
2c598e88c5 feat(session): async commit, session metadata, and archive continuity threading (#900)
* feat(session): make commit two-phase with async memory extraction

Session commit now returns immediately after archiving messages (Phase 1).
Summary generation and memory extraction (Phase 2) run in the background
via asyncio.create_task(), returning a task_id for polling progress.

- Add get_task() API across all client layers for querying background task status
- get_session() auto-creates session if it does not exist
- Remove wait parameter and telemetry from commit endpoint
- Add .done completion marker to archive directories
- Update docs (EN/ZH) and tests for new two-phase flow

* feat(session): add .meta.json persistence and auto_create control for get_session

SessionService.get() now defaults to auto_create=False, raising NotFoundError
for missing sessions. A new SessionMeta dataclass tracks created_at, updated_at,
message_count, commit_count, memories_extracted (by category), last_commit_at,
and cumulative llm_token_usage. Meta is persisted to .meta.json and updated on
add_message, commit Phase 1 (message clear), and commit Phase 2 completion
(token usage, memory counts via bind_telemetry). All client layers
(local/async/sync/HTTP) and API docs updated accordingly.

* fix: remove session vectorize

* support commit for openclaw-plugin (#902)

Made-with: Cursor

* fix: reuse latest archive overview in session context

Thread the latest completed archive overview into archive summary generation and memory extraction, and simplify search context assembly to current messages plus the latest archive overview.

Co-Authored-By: Claude Opus 4.6

* refactor: session overview

---------

Co-authored-by: AutoCoder <wulf234@163.com>
2026-03-24 22:30:16 +08:00
AutoCoder dd8863e2c5 add script to uninstall openclaw-plugin (#933) 2026-03-24 20:35:01 +08:00
chenjwandClaude Opus 4.6 2771765298 Refactor memory extract (#916)
* docs: add memory extractor templating and update mechanism optimization design document

- Add bilingual (English/Chinese) design document for memory templating system
- Include YAML-based MemoryTypeRegistry with 8 built-in types
- Detail ReAct 3+1 phase flow with pre-fetch optimization
- Describe 3-operation Schema: write/edit/delete
- Document RoocodePatch SEARCH/REPLACE format
- Explain dual-mode design: simple mode vs template mode
- Cover pre-fetch optimization: ls directories + read .abstract.md/.overview.md + search once
- Include merge operations: patch, sum, avg, immutable
- Address #578: allow custom prompt template addition and specification

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add memory templating system with ReAct orchestrator

- Add YAML-configurable memory schemas (cards, events, entities, etc.)
- Implement MemoryReAct with tool use (read/find/ls)
- Add schema-driven memory operations (write_uris/edit_uris/delete_uris)
- Implement memory patch handler for incremental updates
- Add comprehensive test suite

* refactor: memory extractor templating system with ReAct orchestrator

## Summary

Implement memory templating system (GitHub Issue #578) - a complete
rewrite of the memory extractor subsystem to support YAML-configurable
memory types instead of hardcoded categories.

## Key Changes

### Architecture
- Replace hardcoded 8 memory types with YAML-configurable schema system
- Add MemoryTypeRegistry to load memory type definitions from YAML files
- Dynamic Pydantic model generation from schema for type safety
- Field-level merge operations: PATCH, SUM, IMMUTABLE

### Memory Extraction Flow
- Implement ReAct orchestrator for single-pass memory updates
- MemoryUpdater for applying operations to storage
- Memory tools (read, search, ls) for ReAct loop
- Stable JSON parser with 5-layer fault tolerance

### File Naming & Storage
- Semantic filenames from template ({topic}.md instead of random IDs)
- Two memory modes: simple mode and template mode
- MEMORY_FIELDS HTML comment for structured metadata

### Configuration
- 9 YAML templates in openviking/prompts/templates/memory/
- memory_config.py for memory system configuration
- Dual-threshold compact upload mechanism in design doc

### Deletions
- Remove old memory_content.py, memory_data.py, memory_operations.py
- Remove memory_types.py, memory_utils.py, memory_patch.py
- Remove corresponding old test files

### Updated Components
- VLM backends (litellm, openai, volcengine) for new interfaces
- Session and service core integration
- Test suite for new architecture

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: pass ctx/user/session_id in commit_async for memory extraction

## Summary

Fix missing parameters in commit_async() when calling extract_long_term_memories().
The synchronous commit() method correctly passes these parameters, but the async
version was missing them, causing memory extraction to be skipped.

## Changes

- Pass user=self.user, session_id=self.session_id, ctx=self.ctx
  in commit_async() when calling extract_long_term_memories()

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: convert FindResult to dict before returning from search tool

## Summary

Fix JSON serialization error by converting FindResult object to dict
using its to_dict() method before returning from MemorySearchTool.

## Changes

- In MemorySearchTool.execute(), return search_result.to_dict()
  instead of search_result directly

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: swap None check before accessing final_operations in memory_react

Also rename schema_models.py to schema_model_generator.py for clarity.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add edit_overview support and optimize memory registry initialization

- Add edit_overview_operations to MemoryUpdater for updating .overview.md files
- Optimize MemoryTypeRegistry initialization in SessionCompressorV2 (load once)
- Various memory templating system improvements

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: remove unnecessary indent in JSON schema output

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: add markdown link format hint to overview field description

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add pre-fetch search based on user messages in conversation

Also fix duplicate line in system prompt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* rebase

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-24 15:28:46 +08:00
Yaoyao b85a9ed5d8 Update README.md (#921)
delete uninstall openclaw command
2026-03-24 14:46:05 +08:00
Yaoyao 933dbbdaea Update README_CN.md (#920)
delete uninstall openclaw command
2026-03-24 14:45:52 +08:00
Yaoyao f391dbb88c Update INSTALL-ZH.md (#918)
delete uninstall openclaw command
2026-03-24 14:33:48 +08:00
Yaoyao 4c21ef0af6 Update INSTALL.md (#917)
delete uninstall openclaw command
2026-03-24 14:33:34 +08:00
baojun-zhang 5bbb22a6ef feat: add encrypt doc && refactoring encrypt code (#893)
* feat: add encrypt doc && fix Partial reads/wrong location problem && refactoring duplicated code && add

* feat: reformat code

* feat: resolve comment

* feat: resolve comment

* feat: resolve comment
2026-03-23 19:23:11 +08:00
Jiahui Zhou 033826f028 Migrate vectordb engine to abi3 packaging (#897)
chore: remove pybind11 remnants after abi3 migration

fix: scope linux abi3 wheel smoke test to engine loader
2026-03-23 19:11:07 +08:00
3b5b9a42c0 feat(openclaw-plugin):context engine refactor design & enforce token budget and reduce context bloat (#891)
* fix(openclaw-plugin): enforce token budget and reduce context bloat (#730) (#796)

* test(openclaw-plugin): add vitest test infrastructure for #730

* fix(openclaw-plugin): raise recallScoreThreshold default from 0.01 to 0.15 (#730)

* fix(openclaw-plugin): narrow isLeafLikeMemory boost to level-2 only (#730)

* fix(openclaw-plugin): prefer abstract over full content fetch in memory injection (#730)

* feat(openclaw-plugin): add recallMaxContentChars and recallPreferAbstract config (#730)

* feat(openclaw-plugin): enforce tokenBudget in injection with decrement loop (#730)

* fix(openclaw-plugin): update recallScoreThreshold placeholder to match new default (#730)

* fix(openclaw-plugin): deduplicate content resolution and document budget behavior (#730)

Extract resolveMemoryContent() helper to eliminate duplicate content-resolution
logic between buildMemoryLines and buildMemoryLinesWithBudget. Add JSDoc and
inline comment documenting intentional first-line budget overshoot (spec §6.2).
Tighten test assertion from <=120 to <=106 tokens.

* fix(openclaw-plugin): use truthy fallback for empty abstract strings (#730)

Change nullish coalescing (??) to truthy fallback (||) in
resolveMemoryContent() so empty-string abstracts fall back to item.uri
instead of producing empty content lines.

* docs: add openclaw context engine refactor design

Co-authored-by: Mijamind <mijamind@163.com>
Co-authored-by: GPT-5.4 <noreply@openai.com>

* add afterTurn refactor in design_doc

* add afterTurn compact in design_doc

---------

Co-authored-by: chethanuk <chethanuk@outlook.com>
Co-authored-by: GPT-5.4 <noreply@openai.com>
Co-authored-by: wlff123 <wulf234@163.com>
Co-authored-by: xuwengui <huangxun375@gmail.com>
2026-03-23 15:40:15 +08:00
SCPZ24 f09060c64f docs: Add Chinese README translations for OpenCode and OpenClaw plugins (#850) 2026-03-22 09:54:20 +08:00
bot-of-qin-ctxandqin-ctx fba4c1792d fix(resource): resolve 'file exists' errors on resource add (#845)
* fix(resource): resolve 'file exists' errors on resource add

Two bugs caused mv to fail with "file exists" during add_resource:

1. When `to` URI has a trailing slash, parent_uri was computed as the
   target directory itself instead of its parent. mkdir then created
   the exact path that mv was about to rename into.

2. _resolve_unique_uri in Phase 3.5 ran outside bind_request_context,
   so stat checked the default account path instead of the actual
   account. On repeated adds it failed to detect the existing resource
   and returned the original URI, causing mv to collide.

Also pass ctx to viking_fs calls in index_resource that were missing it.

* Update GUIDE.md

---------

Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-03-21 18:33:10 +08:00
AutoCoder b994bdbba2 Add instructions for cleaning up old version plugins. (#843) 2026-03-21 18:16:28 +08:00
bot-of-qin-ctxandqin-ctx 92952ee7a4 fix/gemini_embedder (#841)
* fix/gemini_embedder

* Update GUIDE.md

---------

Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-03-21 16:29:49 +08:00
ChenXiaofeiandClaude Sonnet 4.6 3064725bd6 fix(parser): enforce hard character limit per section in MarkdownParser (#826)
The token estimator (_estimate_token_count) uses a simplified heuristic
(0.3 tokens/non-CJK-non-space char) that can underestimate actual token
counts for dense code or technical content. This caused large sections to
pass the token check and be written as single L2 files, which then
exceeded embedding API limits (e.g., text-embedding-v4 8192 token cap).

Changes:
- Add `max_section_chars: int = 6000` to ParserConfig as a hard character
  limit per section, guarding against token estimation errors
- `_smart_split_content`: enforces char limit per split chunk alongside
  the existing token estimate limit; falls back to token-only splitting
  when max_section_chars <= 0 to avoid range(n, 0) crash
- `_save_section`: requires both token AND char limits satisfied before
  writing a section as a single file
- `_save_merged`: splits joined content via _smart_split_content when the
  merged result exceeds max_section_chars, preventing token-small but
  char-large sections from accumulating into oversized files
- `_parse_and_create_structure`: small-document fast-path now also checks
  char count before writing as a single file
- `ParserConfig.validate()`: rejects max_section_chars <= 0
- `ParserConfig` class docstring: add max_section_chars attribute,
  fix max_section_size description ("characters" -> "tokens")
- `ov.conf.example`: add max_section_chars to pdf parser block

Add 21 unit tests covering ParserConfig defaults and validation,
_smart_split_content char-limit enforcement, _save_section and
_save_merged char-limit gates, and _parse_and_create_structure
fast-path with and without headings (VikingFS mocked throughout).

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 14:06:02 +08:00
baojun-zhang 8cdecd9163 feat: Add multi-tenant file encryption capability (#828)
* feat: Add multi-tenant file encryption capability

* feat: move cli command `ov crypto` to `ov system crypto` && ruff format && add encryption config example

* feat: reformat code

* feat: adjust crypto.rs to support diff platform

* feat: reformat code
2026-03-21 13:35:46 +08:00
AutoCoder fe6ce14593 add script to clean up memory-openviking plugin (#832) 2026-03-21 12:18:11 +08:00
Yaoyao 81a48ddcb0 Update INSTALL.md (#823)
update plugin2.0 installation en version
2026-03-20 20:04:22 +08:00
Yaoyao 4381987fe0 Update INSTALL-ZH.md (#818)
更新ov 2.0安装和验证步骤
2026-03-20 17:31:54 +08:00
ChenXiaofeiandClaude Sonnet 4.6 44d9542fc3 feat(rerank): add OpenAI-compatible rerank provider (#785)
- Add OpenAIRerankClient using standard flat request/response format
  compatible with DashScope compatible-api and other OpenAI/Cohere-style
  rerank APIs (no input/output wrappers)
- Fix silent data corruption: add index bounds-checking so out-of-bounds
  or missing index returns None with a warning
- Add provider allow-list validation in RerankConfig ('vikingdb'|'openai')
- Remove unnecessary getattr() in RerankClient.from_config()
- Update ov.conf.example: keep vikingdb (doubao) as primary rerank config,
  add rerank_openai_example section for DashScope qwen3-rerank
- Update docs (en/zh): add OpenAI-compatible provider example alongside
  existing volcengine example in configuration guide and schema
- Add 24 tests covering success, edge cases, and factory dispatch

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 14:22:25 +08:00
zhoujiahui 06dad3a953 Update docs (#782)
* docs(openclaw): refresh plugin 2.0 compatibility notes

* docs(openclaw): clarify 2.0 legacy incompatibility

* docs(openclaw): clarify old openclaw is unsupported
2026-03-19 20:59:00 +08:00
Qin Haojie e908b6a62c fix(plugin): restore bug fixes from #681 and #688 lost during #662 merge (#779)
PR #662 renamed the plugin directory and rewrote index.ts from a stale
branch base, silently dropping two merged bug fixes:

- #681: share pending clientPromise across dual-context registrations
  to prevent before_agent_start hook from hanging forever
- #688: wrap auto-recall search in withTimeout(5s) to prevent indefinite
  agent hang when OpenViking search API is slow or unresponsive
2026-03-19 20:34:50 +08:00
Meskjeiand峻谦 17424afad6 fix(plugin): add timeout protection to getClient() in before_prompt_build hook (#749)
- Import withTimeout from process-manager.js
- Wrap getClient() call with 5-second timeout to prevent indefinite blocking
- Gracefully handle timeout by logging warning and skipping recall
- Fixes issue where agent would hang if OpenViking service wasn't ready yet

Related: #673 #748

Co-authored-by: 峻谦 <junqian@192.168.31.143>
2026-03-19 16:03:50 +08:00
AutoCoder c435b345bb update docs for openclaw-plugin (#766) 2026-03-19 15:32:12 +08:00
AutoCoder 51d0be0e98 add openclaw-plugin upgrade description (#758) 2026-03-19 11:49:10 +08:00
Mingjian QueandGPT-5.4 f93d10523b feat(openclaw-plugin 2.0): from memory plugin to context engine (#662)
* feat(openclaw-context-plugin): migrate OpenViking memory plugin to context engine

1. Rename the OpenClaw plugin from memory-openviking to openclaw-context-plugin and switch its kind from memory to context-engine.
2. Keep auto-recall and ingest-reply-assist on before_prompt_build to preserve the existing prompt injection behavior.
3. Move the canonical auto-capture flow from the old agent_end-style lifecycle to ContextEngine afterTurn.
4. Delegate compact handling to the legacy compact engine when it is available, so existing compaction behavior can still be reused.
5. Preserve the OpenViking tools and local process management while updating setup helpers, installers, docs, and OpenClaw config paths to plugins.slots.contextEngine.

Co-authored-by: GPT-5.4 <noreply@openai.com>

* refactor(openclaw-context-plugin): rename plugin id to context-openviking

- rename the runtime plugin id, package name, install destination, and OpenClaw config keys from openclaw-context-plugin to context-openviking
- keep the source directory at examples/openclaw-context-plugin unchanged while updating docs, installers, and setup helpers to use the new runtime name
- remove unused sys imports from the demo scripts so ruff check stays green

---------

Co-authored-by: GPT-5.4 <noreply@openai.com>
2026-03-18 21:10:20 +08:00