* feat: add freshness-aware parent aggregation
Defer wide-directory abstract/overview regeneration until the configured freshness threshold is reached while continuing changed-file semantic and vector processing.
Persist freshness metadata atomically, make parent bubbling L0-aware, preserve separate semantic/vector statuses, and keep explicit waits synchronous.
Rebuild every sampled summary on threshold refresh and always retry directory vectorization so stale sidecars or transient vector failures cannot be silently accepted.
Add focused coverage for freshness policy, pending-state consumption, sampled-summary refresh, vector retries, and parent bubbling.
Co-authored-by: TRAE CLI <traecli@bytedance.com>
* feat: ov reindex support --recursive
* feat: ov reindex support --recursive
* feat: ov reindex support --recursive
* feat: ov reindex support --recursive, and applied to memory
* feat: ov reindex support --recursive, and applied to memory
---------
Co-authored-by: TRAE CLI <traecli@bytedance.com>
* feat(plugins): add Agent Plugins 1.0 portable package
Add agent-plugins/, an Agent Plugins 1.0 conformant package
(https://agent-plugins.org/specification) that any conforming client can
load: plugin.json manifest, an openviking-memory skill teaching the
hook-less recall + persist loop, and an mcp.json stdio entry running a
stdio -> streamable-HTTP proxy that resolves credentials from
OPENVIKING_* env -> ~/.openviking/ovcli.conf -> ~/.openviking/ov.conf,
same as the ov CLI.
servers/shared/* are generated copies of memory-plugin-shared/lib, wired
into sync.mjs / sync.test.mjs TARGETS so they cannot drift silently.
config.mjs / debug-log.mjs / mcp-proxy.mjs are adapted from
claude-code-memory-plugin with the hook-tuning knobs dropped.
plugin.test.mjs validates spec conformance (schema URLs and matching
spec versions, name rules, closed manifest root, semver, skill
frontmatter, referenced files staying inside the plugin root, node
--check on all .mjs) and runs in CI via pr.yml.
The skill treats tree/write/edit as optional, since they only exist on
servers that carry #3936.
Docs: docs/{en,zh}/agent-integrations/15-agent-plugins.md, registered in
the VitePress sidebar and the integration overview tables, plus a link
from the three root READMEs. The docs recommend the per-client plugin
whenever the harness has hooks, with the shared installer one-liner.
Based on #3994 by @ZaynJarvis.
Co-Authored-By: Zayn Jarvis <zaynjarvis@gmail.com>
* docs(agent-plugins): pluralize README title
---------
Co-authored-by: Zayn Jarvis <zaynjarvis@gmail.com>
* feat: support oidc and ldap auth
* feat: support oidc and ldap auth
* fix: remove heima partner, clean up auth docs, add web-studio unsupported auth banner
- Remove heima from partner list in README (en/zh/ja)
- Remove unsupported env var references (OPENVIKING_AUTH_MODE, OPENVIKING_USERNAME,
OPENVIKING_PASSWORD) from LDAP auth docs
- Remove temporary switch bash snippets from auth docs
- Fix ldap_password description
- Add web-studio unsupported-auth-mode banner for oidc/ldap servers
* fix: address OIDC/LDAP review comments on auth plugin design
Key changes driven by PR review:
- **Role mapping**: OIDC and LDAP external identities always resolve to
USER role. Removed map_role() calls and group_membership-based role
mapping. Admin access is gated by the root API key mechanism only.
- **LDAP credential extraction**: Removed query-parameter-based username/
password extraction (security concern — passwords in URLs can leak via
shell history, proxy logs, and monitoring). Clients must use Basic Auth
header or form data.
- **OIDC identifier sanitization**: Auth0 and other providers may include
characters like "|" in the `sub` claim. These are now replaced with "_"
to produce valid OpenViking user identifiers.
- **Dead code removal**: Removed _extract_groups, memberof_attribute,
require_root_api_key_for_admin, _initialize_api_key_manager, and
get_request_context_checks from both plugins since they are no longer
needed.
- **Docs**: Removed query-parameter curl example, memberof_attribute and
require_root_api_key_for_admin config references.
Co-authored-by: TRAE CLI <noreply@bytedance.com>
* feat: support oidc and ldap auth
* feat: support oidc and ldap auth
* fix(auth): bind lazy OIDC imports at module scope
---------
Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
* docs: revamp README for readability, route detail to docs.openviking.ai
The README had grown to ~850 lines, 60% of it provider-config JSON that
duplicates the deployed configuration guide. Rewritten to ~253 lines:
- Lead with what the product is, a Studio screenshot, and five feature
bullets, each outlinked to docs.openviking.ai
- Move benchmarks (LoCoMo, tau2-bench, HotpotQA) above the fold; drop two
derived tables in favor of one-sentence summaries + ./benchmark links
- Collapse install to the init/doctor golden path; all provider JSON,
ov.conf templates, env vars, and Windows setup now route to the
configuration guide (verified live)
- Add the previously missing "Use it with your agent" section linking all
10 integration docs
- README_CN (zh docs links) and README_JA (en docs links; ja docs not
deployed) rewritten to mirror section-for-section
- New hero screenshot docs/images/studio-playground.png from
openviking.ai/studio
All 76 external URLs and every repo-relative link verified.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4oDxmJojygyomsz9BBhhn
* docs: fix review findings — restore uncovered detail, drop false pointers
Adversarial review of the revamp found four claims pointing at coverage
that does not exist:
- Restore `cargo install --git ... ov_cli` build-from-source path (was
deleted with no docs destination; docset has no cargo install anywhere)
- Restore `ov reindex` mode documentation (vectors_only /
semantic_and_vectors / prune_orphans / --dry-run / no alias warning) —
covered by no linked doc
- Remove "per-agent breakdown is in ./benchmark" (benchmark/ holds
reproduction scripts, not result tables)
- Remove "Reproduce it from ./benchmark" on the 5-dataset RAG summary
(adapters exist for only 3 of 5 datasets)
Also: EN/JA quick-start grep example now targets docs/en instead of
docs/zh. Applied identically to README.md, README_CN.md, README_JA.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4oDxmJojygyomsz9BBhhn
* docs: apply review feedback — blog philosophy link, deployed doc links, drop dead widgets
- Link the design-philosophy essay (The Database Paradigm for Context
Engineering, blog.openviking.ai) from the Why section so the old
README's design narrative has a durable home; add Blog to community
- Switch remaining ./docs about-us links (header + community, incl. QR
anchors) to docs.openviking.ai; zh anchors verified against deployed
page ids (#飞书群 / #微信群)
- Remove the star-history chart (service currently renders nothing) and
the stale "May 2026 Update" banner line
- Caption now states the Studio link is a live demo, no install needed
Applied identically to README.md, README_CN.md, README_JA.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4oDxmJojygyomsz9BBhhn
* docs: benchmark charts, easier quick start, logo padding
- Replace the three benchmark tables with one theme-aware SVG chart
(light/dark via <picture>): LoCoMo and tau2-bench as grouped bars,
gray = without OpenViking, blue = with. HotpotQA leaves the README;
full results link to the benchmark report on blog.openviking.ai.
Hand-written SVG, exact numbers from the tables — no generated images.
- Rework Quick start reading flow: nohup folds into the install block,
note that pip install already ships the ov client CLI, close with a
two-link "Next steps" (CLI setup, Deployment). ov reindex modes and
the cargo source install move to the CLI setup doc (en+zh) so the
README stays an easy entry.
- Shrink logo artwork to 0.7 inside the same 842x842 canvas for
breathing room.
Applied to README.md, README_CN.md, README_JA.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4oDxmJojygyomsz9BBhhn
* docs: enlarge logo artwork 1.1x within same canvas
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4oDxmJojygyomsz9BBhhn
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Add a Live Demo entry to the header nav and a callout at the top of
Quick Start pointing to the hosted OpenViking Studio (context playground,
semantic search, multi-agent hub) so readers can try it before installing.
Chinese README uses openviking.net; English/Japanese use openviking.ai.
Updated the README_CN.md to improve organization and clarity of the setup instructions, including sections on local deployment, installation, environment configuration, and running examples.
#2343 lowered the shipped default of vlm.max_concurrent (semantic-stage LLM
concurrency) from 100 to 64 in openviking_cli/utils/config/vlm_config.py, but
the config docs still documented it as 100.
* docs: fix broken LangChain integration link in README.md
The agent-integrations docs were renumbered in #2019 (langchain 05->06)
but the README link was left pointing at the old 05- path (now 404).
* docs: fix broken LangChain integration link in README_CN.md
The agent-integrations docs were renumbered in #2019 (langchain 05->06)
but the README link was left pointing at the old 05- path (now 404).
* feat: support ov config switch and ov config setup-cli
* feat: support ov config switch and ov config setup-cli
* feat: add ov tui image preview
---------
Co-authored-by: openviking <openviking@example.com>
* docs: fix code-doc inconsistencies in English documentation
- Fix default server host: docs claimed 0.0.0.0 but code defaults to 127.0.0.1
- Fix GLOBAL_SEARCH_TOPK: docs said 3 but code uses 10
- Fix VLM model name: docs had doubao-seed-2-0-code-preview-260215, code uses doubao-seed-2-0-pro-260215
- Fix metrics file reference: pointed to nonexistent .vscode/.workdir/metric/METRIC_res.md
- Fix build prerequisite: Go replaced by Rust/Cargo (no .go files remain in repo)
- Fix embedding provider list: README listed 7 providers, code supports 13
- Fix CLI command inconsistency: two ov commands in sessions doc should be openviking
- Add missing session archive endpoint to API overview table
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: revert ov→openviking CLI rename in sessions doc
Both `ov` and `openviking` are registered entry points for the same
Rust CLI binary (pyproject.toml). The short `ov` alias is intentional
and valid — reverting the previous rename.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: sync same fixes to Chinese docs, README_CN, and README_JA
Apply the same consistency fixes from the English docs to:
- docs/zh/ (Chinese documentation)
- README_CN.md (Chinese README)
- README_JA.md (Japanese README)
Changes mirror the English fixes: server host default, GLOBAL_SEARCH_TOPK,
VLM model name, build prerequisites (Go→Rust), embedding provider list,
metrics file reference, and missing session archive endpoint.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Align docs, examples, the setup wizard, and telemetry tests with the
current Doubao multimodal embedding model so generated configs keep
referencing the supported default consistently.
* 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>
* feat: add Azure OpenAI support for embedding and VLM
Add `azure` as a first-class provider for both embedding models and VLM,
using the official `openai.AzureOpenAI` / `openai.AsyncAzureOpenAI` clients.
Changes:
- embedder: OpenAIDenseEmbedder now accepts `provider` and `api_version`
params; when provider is "azure", initializes AzureOpenAI client with
azure_endpoint and api_version
- VLM: OpenAIVLM switches between OpenAI and AzureOpenAI clients based
on the provider field; VLMFactory maps "azure" to OpenAIVLM
- config: EmbeddingModelConfig and VLMConfig gain `api_version` field;
embedding_config adds ("azure", "dense") factory entry with validation
- registry: add "azure" to VALID_PROVIDERS
- docs: update README_CN.md with Azure provider table entry, config
template fields, usage examples, and full config sample
Made-with: Cursor
* refactor: address PR review — extract helper, add validation, shared constant
- Extract `_build_openai_client_kwargs()` helper in openai_vlm.py to
eliminate duplicated Azure/OpenAI client construction across
get_client() and get_async_client()
- Add `api_base` validation for Azure provider in VLM client methods
(was missing, unlike the embedder which already validated it)
- Extract `DEFAULT_AZURE_API_VERSION` constant in registry.py and
reference it from both embedder and VLM, so future Azure API version
bumps only require a single change
- Note: removing the hardcoded `self.provider = "openai"` override in
OpenAIVLM.__init__ (done in the previous commit) is an intentional
bug fix — it allows VLMBase.provider to correctly reflect the
configured value (e.g. "azure"), which fixes token usage tracking
Made-with: Cursor
* fix(docs): update OpenClaw plugin link
* fix(docs): rename Memory Plugin to Context Plugin in all READMEs
* fix(docs): update OpenClaw plugin link in JA README
* fix(docs): rename Memory Plugin to Context Plugin in main READMEs
Update OpenClaw plugin name from "Memory Plugin" to "Context Plugin"
in README.md, README_CN.md, and README_JA.md.
* fix
* add log
* add log
* update
* Opt memory
* Opt memory
* Opt memory
* Opt memory
* Fix memory consolidation issues: duplicate session write, hook error, and async
- Fix _consolidate_memory hook error by creating temporary Session when given message list
- Remove duplicate session save logic from _consolidate_memory (handled by caller)
- Make normal memory consolidation async like /new command
- Other fixes: streaming response in CLI and OpenAPI channel
* Integrate vikingbot as openviking optional dependency
- Add vikingbot dependencies to pyproject.toml optional-dependencies
- Update install prompts from vikingbot[X] to openviking[bot-X]
- Update README installation instructions
- Configure setuptools to find vikingbot in bot/ directory
- Add vikingbot package data and script entry
* Remove bot/pyproject.toml
vikingbot is now integrated as part of openviking, no need for separate pyproject.toml
* Update vikingbot installation instructions in root READMEs
- Update from 'uv pip install -e bot/' to 'uv pip install -e ".[bot]"'
- Add quotes around openviking[bot] for shell safety
* update
* Use singleton pattern for VikingClient in hooks
Cache VikingClient instances by workspace_id to avoid repeated client creation
- Add _client_cache dictionary for caching
- Add get_cached_client() helper function
- Update both hooks to use cached client
* Use global singleton for VikingClient instead of per-workspace cache
- Change from per-workspace_id cache to true global singleton
- Create client with None as agent_id (works for all workspaces)
- Simplify client management
* uv run ruff format
---------
Co-authored-by: DuTao <dutao.1786@bytedance.com>
- Translate provider descriptions in the Supported VLM Providers table
- Translate litellm usage tips to English
- Minor formatting fix in README_CN.md
* refactor(sandbox): remove docker/aiosandbox backends, simplify SRT config
- Remove docker and aiosandbox from available backends
- Remove settings_path from SrtBackendConfig (now auto-generated in workspace)
- Update SRT settings path to workspace/sandboxes/{session}-srt-settings.json
- Update README examples to use srt backend and remove settingsPath
* refactor(sandbox): remove docker/aiosandbox backends, simplify SRT config
- Remove docker and aiosandbox from available backends
- Remove settings_path from SrtBackendConfig (now auto-generated in workspace)
- Update SRT settings path to workspace/sandboxes/{session}-srt-settings.json
- Update README examples to use srt backend and remove settingsPath
* fix: remove unused handle_chat_direct function and fix unused logs variable
* Fix UTF-8 issues in chat command
* Add tab indentation to Think, Calling, and Result lines in CLI output
* Add first release workflow
* Update release workflow with correct working directory
* 修改 SessionKey 构建逻辑:统一使用 type="cli",channel_id 默认 "default",chat_id 作为 session_id 使用
* Implement machine unique ID as default session ID for ov chat
* Remove unsupported --logs parameter from chat command
* 统一 Python 和 Rust CLI 的默认 session ID 生成逻辑
* 修改日志
* 去掉log依赖
* docs: add VikingBot quick start section to READMEs
* fix: use vikingbot chat instead of ov chat in READMEs
* Revert "fix: use vikingbot chat instead of ov chat in READMEs"
This reverts commit 59f4e87ba0.
* fix: use UUID v4 for machine ID generation in both Rust and Python
* refactor: move truncate_utf8 to utils, fix chat history path, and use BotProcess dataclass
* refactor: update machine ID generation and remove unused chat_v2
- Update Python to use py-machineid library
- Update Rust to use machine-uid crate
- Remove unused chat_v2.rs
- Move machine ID from file storage to system-provided IDs
- Add fallback to "default" if system ID is unavailable
* 优化格式
* ruff format .
* feat: define a system path for future deployment
* feat: define a system path for future deployment
* fix: golang downgrade to 1.19
* fix: golang downgrade to 1.19, and change doc
* docs: change model recommendation
* fix: golang downgrade to 1.19, and change doc
* fix: mv test files
* fix: loguru
---------
Co-authored-by: openviking <openviking@example.com>