Commit Graph
1920 Commits
Author SHA1 Message Date
yufeng 60ef45d4c3 docs: use localized absolute links in agent docs (#3529) 2026-07-27 13:54:15 +08:00
Hao Zheandzhiheng.liu 9d0b71f763 fix(integrations): batch LangGraph history writes to avoid duplicates and lost context (#3528)
* fix(integrations): batch LangGraph history writes to avoid duplicates and lost context

Sweep findings: B-08. Make middleware capture atomic and retain pending context until the batch succeeds.

* fix(review): chunk LangGraph history batches

Addresses blocking review finding on #3405.

* fix(review): preserve batch retry progress

Addresses blocking review finding on #3405.

* fix(integrations): type LangGraph capture batches

---------

Co-authored-by: zhiheng.liu <zhiheng.liu@bytedance.com>
2026-07-27 13:52:40 +08:00
DuTao 3319ffd5b7 feat(bot): support VLM credential failover (#3503)
* bot支持多模型

* fix pr

* fix(bot): isolate console VLM credentials
2026-07-27 12:11:48 +08:00
Zayn Jarvis e9daae9eba fix(resource): isolate watch URI index by account (#3440)
Sweep findings: A-01. Scope watch conflicts and subtree rewrites to the request account.
2026-07-27 11:20:24 +08:00
yufeng c67222c3d4 fix(web-studio): standardize streamed event rendering (#3517)
* fix: render bot stream events consistently

* style: separate studio sidebar from content

* fix: standardize studio chat stream rendering

* fix: finalize chat on terminal response

* fix: complete reasoning fallback state

* fix: show agent session title

* style: consolidate playground panel controls

* fix: persist playground tree state

* style: improve session chat contrast

* fix: make session content width responsive

* feat: filter memory impact by type

* fix: widen memory impact drawer

* fix(web-studio): address streaming review feedback
2026-07-27 00:04:47 +09:00
Rocke Dong b62a4d2cfa docs: list all AST extraction languages (#3511) 2026-07-26 14:31:08 +08:00
teacup 80d63f508d fix(memory): reject ambiguous search replacements (#3386)
* fix(memory): reject ambiguous search replacements

* fix(memory): clarify ambiguous search repair guidance

* fix(memory): propagate dict patch parse errors

* fix(memory): improve ambiguous search repair guidance
2026-07-26 14:29:16 +08:00
Zayn JarvisandClaude Opus 4.8 f316d6ad04 fix(ragfs): enforce mount containment and write-flag semantics in LocalFS (#3402)
* fix(ragfs): enforce mount containment and write-flag semantics in LocalFS

Sweep findings: E-01, E-04. Reject lexical traversal and honor LocalFS write contracts.

* fix(review): reject absolute localfs remainders

Addresses blocking review finding on #3402.

* fix(ragfs): close LocalFS glob mount-escape gap

LocalFS::glob_directory only called validate_virtual_path(path), which
rejects `..` but accepts an absolute remainder. A `//`-double-slash mount
path (e.g. `/local//etc`) survives normalize_path, and find_mount hands the
remainder `//etc` to glob_directory; validate_virtual_path passes it
(components are [RootDir, Normal("etc")], no ParentDir), and glob_via_walk's
resolve_virtual_path strips one slash to `/etc` and joins it over the base —
an absolute join that overrides the base and lists the host directory.

Every other op (read/write/stat/rename/remove/grep) routes through
resolve_path, which adds the is_absolute check. glob now calls the same
resolve_path guard (discarding the returned PathBuf) so it shares the
containment contract. Directory-listing info leak only; content reads were
already covered.

Adds test_localfs_glob_mount_rejects_absolute_remainder mirroring the read
regression test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RbWx1T81KkNV4nucxWsPXZ

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-25 13:17:22 +08:00
Zayn Jarvis 4ffd255d1a fix(cli): preserve server config sections and restrict ov.conf permissions in setup wizard (#3427)
* fix(cli): preserve server config sections and restrict ov.conf permissions in setup wizard

Sweep findings B-02 and B-10

* fix(cli): secure setup wizard update edge cases

Sweep findings: B-02, B-10. Normalize wizard-owned authentication and atomically publish restrictive backups.

* fix(review): preserve remote auth mode

Addresses blocking review finding on #3427.
2026-07-25 12:49:48 +08:00
yufeng f4ade62410 docs: reorganize API reference and complete response contracts (#3507)
* docs: reorganize API reference

* docs: complete API response contracts
2026-07-25 12:18:59 +08:00
yufeng feb51ffd05 fix(web-studio): preserve identity probe credential (#3509) 2026-07-24 22:14:45 +08:00
Zayn Jarvis ea3ea105cb fix(helm): keep PVC on uninstall, honor mountPath for workspace, create ServiceAccount (#3433)
Sweep findings: F-03, F-08, F-10. Keep chart persistence and identity behavior aligned with configured values.
2026-07-24 18:28:48 +08:00
yufeng 0ac4b87b03 feat(web-studio): improve operational navigation and workflows (#3506)
* feat(web-studio): add operational navigation and views

* feat(web-studio): complete core management workflows

* feat(web-studio): show current user in header

* feat(web-studio): add task detail panel

* fix(web-studio): harden operational workflows

* fix(studio): widen navigation sidebar
2026-07-24 18:28:25 +08:00
Zayn Jarvis 6db294f590 fix(bot): config 配置出错即报错,不 fallback default (#3408)
* fix(bot): never silently replace corrupt config, session, or cron stores

Sweep findings: C-03, C-05, C-06. Fail fast on corrupt persisted state before any overwrite.

* test(bot): drop corrupt-state regression tests per review

The three fixes (loader raise on invalid config, session/cron refuse to
overwrite corrupt state) stay; the accompanying tests are removed as not
worth their weight.
2026-07-24 18:25:52 +08:00
Zayn Jarvis 2c80d44349 fix(kernel): stop conflating storage failures with not-found (#3417)
* fix(kernel): stop conflating storage failures with not-found

Sweep findings: A-03, A-07, A-11, A-12, B-07. Preserve storage and parse failures instead of reporting missing or empty state.

* fix(review): restore archive failure handling

Addresses blocking review finding on #3417.

* fix(review): terminalize corrupt archive records

Addresses blocking review finding on #3417.

* test: adapt pending-archive-skip test to refactored archive scan

Rebase onto main (#3380 turn-aware retention) changed archive refs to carry
an archive_id; update the test mock's _list_archive_refs return so the missing
pending archive still routes through _get_uncovered_archive_messages and is
skipped (not raised).
2026-07-24 17:57:13 +08:00
Zayn Jarvis 0ea5815748 fix(crypto): 禁止重写 Vault root key on 临时 (503) read failures (#3423)
* fix(crypto): never overwrite Vault root key on transient read failures

Sweep finding B-01

* fix(crypto): clear cached ephemeral root key when Vault persist fails

The InvalidPath create branch cached the freshly generated root key in
self._root_key before encrypting/persisting it. If _encrypt_with_vault or
the KV write failed (transient transit/KV outage), get_root_key raised but
left the never-persisted key cached, so a retry returned it via the
`self._root_key is not None` fast path and encrypted data with a key that
vanishes on restart — the data-loss class this provider guards.

Wrap encrypt+persist in one try and null the cache before raising; add a
regression asserting the cache is cleared and the next call re-reads Vault.

Addresses the blocking review finding on #3423.
2026-07-24 17:30:34 +08:00
t0saki 4d0759ac53 fix(session): attribute Phase-2 extraction token usage to committing account (#3505)
Session commit Phase-2 memory extraction runs in the SESSION_COMMIT queue
worker, which never bound a root observability context. VLM/embedding token
events emitted during extraction therefore read identity from an empty root
context and were recorded under account_id=__unknown__, invisible to the
account-filtered usage dashboard (which showed 0 VLM tokens despite active
extraction).

Bind a QUEUE root observability context with the committing account/user at
the start of SessionCommitProcessor._process and reset it in finally, mirroring
SemanticProcessor.on_dequeue. The binding must live inside the coroutine
because on_dequeue hops event loops via run_coroutine_threadsafe, so a context
bound there would not propagate. The extraction call chain inherits the
contextvar, so one bind covers all Phase-2 VLM/embedding calls.

Add tests asserting the worker binds the committing identity onto the root
context and resets it afterwards.
2026-07-24 17:19:11 +08:00
zihengli 468a71d00d feat(connector): Add git remote connector (#3359)
* feat(connector): Add git remote connector

* feat(connector): Add git remote connector
2026-07-24 16:52:33 +08:00
Wu JiaCheng 5ab30d3e04 fix(parse): preserve text file parser metadata (#3480) 2026-07-24 16:30:38 +08:00
Colter Dahlberg e97b74d2e5 feat(embedder): support extra_body passthrough in OpenAI embedder config (#3495)
* feat(embedder): support extra_body passthrough in OpenAI embedder config

Adds optional `extra_body` (dict) to the OpenAI dense embedder, merged
into every embeddings.create call. Motivating use case: OpenRouter
provider routing ({"provider": {"sort": "latency"}}) — default routing
shows p90=35s/max=127s tail latency that kills interactive recall
(A/B: sorted routing is consistently sub-second).

Explicit query_param/document_param keys still take precedence on
conflict.

* feat(config): wire extra_body through embedding config layer

Add optional extra_body field to EmbeddingModelConfig and pass it to
OpenAIDenseEmbedder for the openai/azure providers, including the
multi-credential failover merge (parent-level model-behavior field).

* docs(config): document embedding extra_body with OpenRouter routing example

* docs(config): restore concrete host/cors_origins values in EN full schema
2026-07-24 15:07:44 +08:00
DuTao 0ab85f450a feat(session): add turn-aware retention and reliable archive recovery (#3380)
* 优化OpenViking的 session compact逻辑,active message 改为turn,压缩 assistant,保留完整user。
详见RFC:https://github.com/volcengine/OpenViking/discussions/3330

* Vikingbot 使用 ov turn session

* fix pr comment

* 更新文档

* fix pr issue
2026-07-24 14:26:46 +08:00
DuTao 4bccb40c27 修复 experience 写入失败后 case 仍生成悬空链接的问题,确保仅链接实际写入成功的 experience。 (#3499) 2026-07-24 14:17:02 +08:00
yufeng feba7e78a2 feat(web-studio): add account switching and user management (#3500)
* feat(web-studio): add account switching and user management

* fix(web-studio): harden account identity switching
2026-07-24 14:03:43 +08:00
Colter Dahlberg 78a143eeba fix(server): attribute MCP traffic in observability (route + identity) (#3494)
* fix(server): attribute MCP traffic in observability (route + identity)

MCP requests were audited as route=/__unmatched__, account_id=__unknown__
because (1) the /mcp app is registered as a plain Starlette Route so
scope["route"] is never set, and (2) _IdentityASGIMiddleware resolved
identity without calling update_root_span_identity.

Register /mcp via a _ScopedRoute subclass that sets child_scope["route"]
on match (mirroring APIRoute.matches) and stamp root-span identity after
resolution. 404 fallbacks and middleware code are untouched.

* test(server): cover MCP scope route resolution and root-span identity stamping

Assert the /mcp route sets scope["route"] on match (and that unmatched
paths still fall back without it), and that _IdentityASGIMiddleware stamps
the resolved account/user onto the root span attributes.

* fix(server): attribute MCP traffic in observability (route + identity)

MCP requests were audited as route=/__unmatched__, account_id=__unknown__
because (1) the /mcp app is registered as a plain Starlette Route so
scope["route"] is never set, and (2) _IdentityASGIMiddleware resolved
identity without calling update_root_span_identity.

Register /mcp via a _ScopedRoute subclass that sets child_scope["route"]
on match (mirroring APIRoute.matches) and stamp root-span identity after
resolution. 404 fallbacks and middleware code are untouched.
2026-07-24 14:01:00 +08:00
huangruitengandhuangruiteng 2ea129e63b fix(server): preserve graceful SIGTERM shutdown (#3278)
* fix(server): preserve graceful SIGTERM shutdown

* fix(server): preserve shared process lock ownership

* fix(server): harden aliased process lock acquisition

* test(server): cover cancelled lock cleanup

---------

Co-authored-by: huangruiteng <huangruiteng@bytedance.com>
2026-07-24 13:24:37 +08:00
Qin Haojie 9c1b6360bc docs/update_wechat (#3498) 2026-07-24 11:26:04 +08:00
agent 27debfe7a8 feat(snapshot): add path diff API, SDK, and CLI (#3451)
* feat(snapshot): add path diff API

* feat(snapshot): expose path diff in clients and CLI

* fix(snapshot): pin path diff to resolved commits

* fix(snapshot): bound path diff resource usage

* fix(snapshot): bound diff blob reads

* fix(snapshot): harden path diff API

* fix(snapshot): bound path diff resource usage

* fix(build): sync native binding dependencies
2026-07-23 17:45:36 +08:00
Monday 49ca3cdfe8 feat(python-sdk): support event hooks and lifecycle reset (#3392)
* feat(python-sdk): support event hooks and lifecycle reset

* fix(python-sdk): limit client hooks change to event hooks

* docs(python-sdk): initialize clients in readme examples
v0.4.11 python-sdk@0.1.5 cli@0.4.11
2026-07-23 14:16:43 +08:00
Wu JiaChengandqin-ctx 62a913795c fix(parse): honor markdown frontmatter config (#3475)
* fix(parse): honor markdown frontmatter config

* refactor(parse): simplify frontmatter config handling

---------

Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-07-23 11:55:59 +08:00
d681ef3158 fix(parse): handle parentheses in Markdown image paths (#3462)
* fix(parse): handle parentheses in Markdown image paths

The image regex !\[([^\]]*)\]\(([^)]+)\) used [^)]+ for the path capture
group, which truncates at the first ) character. When document titles
or filenames contain balanced parentheses (e.g. "文档_17 (17号项目)"), the
generated image paths include ) and the regex captures a truncated,
non-existent path. This causes _resolve_image_path() to fail silently
(WARNING only), and the image is never copied to VikingFS or sent to
VLM for understanding.

Fix: replace the path capture group with (?:[^()]|\([^()]*\))+, which
allows one level of balanced parentheses inside the path while still
terminating at the correct closing ) of the Markdown image syntax.

Add focused tests covering balanced parens in directory and filename
components, URLs with parens, multiple images on one line, and
non-matching of plain links.

Fixes #3455

* fix(test): exercise MarkdownParser._image_pattern directly, remove unused import

Address review feedback on #3462:
1. Tests now import and instantiate MarkdownParser to access the
   production _image_pattern regex, instead of compiling an independent
   copy. Tests fail if the production regex regresses.
2. Remove unused `import pytest` (Ruff F401).

* fix(parse): rewrite parenthesized image paths

* test: remove extra image rewrite regression case

* fix(parse): share markdown image parsing for rewrite

* refactor(parse): keep markdown image fix minimal

---------

Co-authored-by: zhangyu.34 <zhangyu.34@bytedance.com>
Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-07-23 11:33:26 +08:00
Yuanqing ZHAOandYuanqing Zhao 40dd05271c perf(vectordb): micro-batch compatible cuVS searches (#3382)
* perf(vectordb): micro-batch compatible cuVS searches

* fix(vectordb): serialize micro-batch device admission

* perf(vectordb): pipeline warm cuVS micro-batch admission

* docs(cuvs): align micro-batching guidance

* fix(cuvs): warm-batch empty filters

---------

Co-authored-by: Yuanqing Zhao <2604121+yuanqingz@users.noreply.github.com>
2026-07-23 11:10:52 +08:00
Zayn Jarvis 997e750ccc fix(ov): redact gateway secrets in config show and create root key with 0600 (#3411)
* fix(ov): redact gateway secrets in config show and create root key with 0600

Sweep findings: E-02, E-03. Prevent credential disclosure in output and at key creation.

* test(ov): drop trivial init-key permission test

The 0600 fix is a one-line OpenOptions::mode; a dedicated tokio+tempfile
test module for a single mode assertion is not worth its weight. The
redaction test in store.rs (a real multi-case security behavior) stays.
2026-07-23 10:47:28 +08:00
Zayn Jarvis 3043e25194 docs(openclaw): document manual plugin configuration (#3446)
* docs(openclaw): document manual plugin configuration

* docs(openclaw): clarify manual config safety

* docs(openclaw): sync manual config guidance
2026-07-23 10:46:53 +08:00
Zayn Jarvis 8da91a860b fix(bot): pass sender_name in all channel adapters (#3399)
* fix(bot): pass sender_name in all channel adapters

Sweep findings: C-01. Supply display-name fallbacks so inbound messages reach the bus.

* fix(bot): make sender_name optional and wire real WhatsApp pushName

Root-cause guard: _handle_message required sender_name positionally, but
InboundMessage.sender_name is str|None=None and context.py already falls back
to sender_id, so the required-ness was an accidental signature/contract
mismatch. Make it optional (reordered after the still-required chat_id/content;
all 11 call sites use keyword args) so no future adapter can crash on it.

WhatsApp: the previous call read data.get("senderName")/data.get("pushName"),
neither of which the bridge ever sends, so it silently always fell back to the
numeric id. Forward baileys' msg.pushName through the bridge payload and read it
in Python, so WhatsApp group chats show real display names like other channels.
2026-07-23 10:45:33 +08:00
yufeng 82f5383fd5 docs: add Python installer tabs (#3481)
* docs: add Python installer tabs

* docs: clarify installed commands
2026-07-23 10:41:18 +08:00
yijie zhao 09cd4782df fix: allow opencode recall after session context (#3464)
* fix: allow opencode recall after session context

* test: cover opencode recall with session context
2026-07-22 19:32:13 +08:00
Yu Zhangandzhangyu.34 a57adb951f fix(rerank): support DashScope nested request/response envelope (#3463)
* fix(rerank): support DashScope nested request/response envelope

OpenAIRerankClient sent a flat request body ({"model", "query",
"documents"}) and parsed "results" at the top level of the response.
DashScope (qwen3-rerank) requires a nested envelope:

  Request:  {"model", "input": {"query", "documents"}, "parameters": ...}
  Response: {"output": {"results": [...]}, "request_id", "usage"}

This caused DashScope rerank to silently fail — the response had no
top-level "results" key, so the client returned None.

Changes:
- Add _is_dashscope() to detect DashScope endpoints by host marker.
- Add _build_request_body() that produces the nested envelope for
  DashScope and the flat body for standard OpenAI/Cohere services.
- Add _extract_results() that reads output.results for DashScope and
  top-level results for standard services.
- Accept both "relevance_score" (singular, DashScope) and
  "relevance_scores" (plural, some providers) in result items.
- Add 13 tests covering host detection, body construction, response
  parsing, end-to-end mocked flows for both providers, plural key
  handling, empty documents, and sparse results.

Fixes #3459

* fix(rerank): detect DashScope protocol by URL path, not hostname

Reviewer noted the previous hostname-based switch broke the documented
qwen3-rerank compatible-api endpoint (/compatible-api/v1/reranks), which
must use the flat OpenAI-style body and top-level results.

Switch to path-based detection: only /api/v1/services/rerank uses the
native nested input/output envelope; everything else (including the
DashScope compatible-api and generic OpenAI/Cohere gateways) keeps the
flat protocol. Rename _is_dashscope -> _uses_nested_envelope for clarity.

Add regression tests covering the compatible-api flat path and reconcile
the existing native-path fixtures to the nested envelope.

* docs(rerank): use qwen3-rerank for compatible-api example

The compatible-api/v1/reranks endpoint uses the flat OpenAI-compatible
protocol; qwen3-vl-rerank is a native-envelope model served at
/api/v1/services/rerank. Align the example model with the endpoint the
implementation selects by URL path.

---------

Co-authored-by: zhangyu.34 <zhangyu.34@bytedance.com>
2026-07-22 19:30:41 +08:00
baojun-zhang dad04e37b8 build(ragfs): clean stale .venv ragfs_python artifacts to avoid site-packages override (#3318) 2026-07-22 19:24:02 +08:00
Evo 0d2c1516a2 docs(transaction): align crash-recovery guidance with the 30-minute lock expiry (#3338)
* docs(transaction): align lock expiry guidance

* docs(transaction): align Chinese lock expiry guidance
2026-07-22 19:23:26 +08:00
Yu Zhang 93162b2fd3 fix(sdk-typescript): distinguish cancellation from timeout (#3369) 2026-07-22 19:21:32 +08:00
Qin Haojie fd098cfd65 fix(cli): preserve structured API errors (#3379)
* fix(error): preserve structured errors in cli

* fix(cli): preserve status for non-json errors
2026-07-22 18:06:48 +08:00
baojun-zhang 2b78fff498 Fix dual path lock (#3454)
* fix(storage): add short timeout for encrypted dual-path write locks

* Reduce PathLockEngine poll interval from 0.2s to 0.1s.
2026-07-22 16:08:01 +08:00
Wu JiaCheng 061359a2f5 fix(parse): normalize MIME aliases with parameters (#3393) 2026-07-22 15:44:43 +08:00
blakejia 12b4aab13d docs: add S3-compatible storage pitfalls to multi-write guide (#3390)
- Add directory_marker_mode: none to all S3 config examples
- Add S3-compatible storage notes with required fields table
- Add Docker networking guidance for Linux vs macOS/Windows
- Remove private IP addresses from examples (use localhost)
- Apply changes to both English and Chinese versions
2026-07-22 15:34:21 +08:00
Wu JiaCheng 63c878e60e fix(parse): import extensionless README files (#3394) 2026-07-22 15:29:13 +08:00
Rocke Dong ef43b0fc37 fix(deps): restore openviking-sdk lock entry (#3441) 2026-07-22 15:28:24 +08:00
Qin Haojie 339817d981 fix(resource): isolate external parsing queue (#3448)
Keep local resource ingestion from waiting behind UnderstandingAPI jobs while preserving durable queue recovery.
2026-07-22 15:11:50 +08:00
agent a93769b828 fix(memory): propagate transaction lock handles to nested writes (#3444)
* fix(memory): propagate transaction lock handles

* chore(memory): narrow lock propagation fix
2026-07-22 15:06:48 +08:00
yufeng a949517f27 docs: add OpenViking Helper integration and fix stale links (#3445)
* docs: add OpenViking Helper integration

* docs: use mock data in Helper screenshots
sdk/go/v0.0.1
2026-07-22 14:14:57 +08:00
Zayn JarvisandClaude Fable 5 94827db8f5 docs: revamp README — sell first, link detail to docs.openviking.ai (#3395)
* 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>
2026-07-22 10:28:32 +10:00