Commit Graph
33 Commits
Author SHA1 Message Date
Zayn Jarvis c1fc0b730e docs(hermes): recommend memory setup openviking (#4098)
* docs(hermes): recommend memory setup openviking

Point Hermes docs at `hermes memory setup openviking` and describe the
real wizard. Shorten Volcengine console agent guides to TOS + cloud API
key, and mark docs/images as console-only.

* docs(hermes): drop setup filler

Keep the command and the two connection paths. Remove picker
explanations and wizard narration.

* docs: keep images AGENTS.md.local local-only

Ignore AGENTS.md.local like AGENTS.md. Drop the unused
docs/images/README.md.

* docs(console): keep harness setup to command plus API key

Drop installer narration, idempotency notes, and copied site
guides. Console pages only need the TOS command and cloud key.

* docs(console): restore Install / Verify / Troubleshoot

Keep the short cloud setup, put it back under the three section
headings the console pages use.

* docs(console): add Reference links

Point each harness page at docs.openviking.net, the coding-agent
blog where it exists, and the example source.

* docs(console): label Reference as manual settings and blog

Use Docs on Manual Settings for the full site page. Use Blog
about how it works where a how-it-works writeup exists.
2026-08-18 20:19:29 +08:00
阿舟的AI小站(超级个体)andwoshiguanxiaoliang 2c374e79d9 feat(integrations): add ZCode memory plugin (#3678)
* feat(integrations): add ZCode memory plugin

Add examples/zcode-memory-plugin — a thin ZCode lifecycle adapter that reuses
the shared memory-plugin-shared runtime for recall, capture, commit, and MCP
proxy. No memory logic is duplicated.

Key design decisions (see docs/design/zcode-memory-plugin-design.md):
- Vendor shared runtime into scripts/shared/ via sync.mjs (self-contained plugin)
- 4 hook events only (SessionStart, UserPromptSubmit, PreToolUse, Stop) —
  ZCode does not support PreCompact/SessionEnd/SubagentStart/SubagentStop
- Output schema: ZCode-canonical keys only (no Claude-Code 'decision: approve')
- Config-driven install: hooks + MCP merged into ~/.zcode/cli/config.json
- install.sh wiring: detection, TUI, validation, install, uninstall

Verified locally:
- 22/22 node:test cases pass (turns parser + hook output schema)
- sync.test.mjs passes
- install → uninstall cycle: hooks/MCP correctly written and cleaned
- URI guard denies viking:// paths with MCP redirect
- Capture writes to OV session with zc- prefix

Closes #3127
Related: #3442, #3544

* chore: remove non-essential files from PR, add .scratch to .gitignore

- Remove .scratch/ working notes (local ticket files, not codebase artifacts)
- Remove package.json and .gitignore from plugin dir (TRAE/Cursor don't have them)
- Add .scratch/ to root .gitignore

* fix(zcode): use verified ZCode field names + rollout fallback for capture

- Update zcode-turns.mjs to probe responseText/responsePreview (verified
  from ZCode reverse-engineering in #3127 by @quinn-zenith) instead of
  the TRAE-inferred last_assistant_message
- Add rollout file fallback: when stdin payload lacks user content (the
  known ZCode limitation), read ~/.zcode/cli/rollout/model-io-sess-*.jsonl
  to extract the last user+assistant pair from request.messages+response
- Fix concurrent session isolation: normalize sessionId→session_id in
  zcode-hook.mjs before resolveNativeSessionId to prevent cwd-fallback
  collision when two ZCode windows run in the same directory
- Add 2 new test cases for rollout fallback (14 turns tests total, 24 total)
- All 24 tests pass

* fix(zcode): address maintainer review blockers (config safety, MCP ownership, turnId)

Addresses 3 blockers from @huangruiteng's review (CHANGES_REQUESTED):

1. Config safety: distinguish ENOENT from parse errors — malformed
   config.json now aborts instead of overwriting. Use backup+tmp+rename
   for atomic writes.

2. MCP ownership: only replace/delete mcp.servers.openviking entries
   tagged as openviking-memory. User-managed entries with the same name
   are preserved on install and untouched on uninstall.

3. TurnId-based dedup: rollout entries carry monotonic turnId — now used
   as the primary dedup key (capturedTurnIds set) instead of stableHash.
   extractUnseenRolloutTurns scans ALL unseen entries since lastTurnId,
   not just the last row — recovers missed turns after hook failure.
   Fail-closed when no turns are found.

Also updates DESIGN.md to reflect verified field names (responseText/
responsePreview) and the turnId contract.

27/27 tests pass (was 24). Added 3 new rollout tests: incremental
capture with lastTurnId, multi-entry scan, turnId propagation.

* docs(zcode): update stale field name references in design spec

Update test case descriptions to match verified field names
(responseText/responsePreview instead of last_assistant_message)
and add rollout fallback + turnId test coverage descriptions.

* fix(zcode): dedup key includes role + first-capture returns all turns

Fix two bugs found in code review pass 2:

1. Assistant turns silently dropped: user and assistant from the same
   rollout entry shared a turnId, so dedup via capturedTurnIds dropped
   the assistant. Fix: dedup key is now ${turnId}:${role}, not turnId
   alone. Regression test added.

2. First-capture data loss: when no lastKnownTurnId was set, only the
   last rollout entry was returned, losing prior turns. Fix: first-time
   capture now returns ALL entries.

Also: add backup step to config atomic write (copyFileSync before tmp+rename),
fix line width in zcode-turns.mjs, add 2 lifecycle tests (missed Stop
recovery, user+assistant same turnId).

29/29 tests pass (was 27).

* test(zcode): add concurrent session isolation tests

Two new test cases addressing maintainer criterion 4 (concurrent sessions):

1. Two sessions read their own rollout files — verifies session A cannot
   see session B's content and vice versa (sentinel-based assertion)
2. Independent lastTurnId state per session — verifies incremental capture
   progresses independently when one session has prior state and another
   is fresh

31/31 tests pass (was 29).

* fix(zcode): correct rollout file path pattern (model-io-<sessionId>)

The rollout path used model-io-sess-${sessionId} but ZCode filenames are
model-io-<sessionId> where sessionId already includes the sess_ prefix.
This caused the rollout fallback to always miss the file and return empty,
defeating capture entirely in production.

Verified on live two-session ZCode setup:
- Session A (sess_8c6ce483): 2 messages, 2 commits
- Session B (sess_74759710): 2 messages, 2 commits
- No cross-contamination between sessions

31/31 tests pass. Updated all test rollout filename patterns.

* docs(zcode): fix stale rollout path in comments and DESIGN.md

Comments referenced model-io-sess-<sessionId> but actual pattern is
model-io-<sessionId> (fixed in code already, comments were stale).

---------

Co-authored-by: woshiguanxiaoliang <woshiguanxiaoliang@noreply.gitcode.com>
2026-08-04 11:58:18 +08:00
t0saki b511d91ee5 feat(plugins): retrofit OpenCode and pi memory integrations (hybrid MCP, shared lib, 4-harness installer) (#3079)
* feat(plugins): align opencode and pi memory integrations

* fix(installer): tolerate missing optional harness CLIs

* fix(installer): install opencode file wrapper

* fix(opencode): import path for logger initialization

* fix(installer): register pi extension after copy

* feat(plugins): use MCP for opencode integration

* docs: move OpenCode and pi integrations to dedicated pages

Promote the OpenCode plugin and pi extension out of the community-plugins
page into their own numbered agent-integrations pages (10-opencode, 11-pi,
en + zh), update the overview routing table, and refresh the OpenCode image
cards to the hybrid MCP architecture (unified installer, openviking_* MCP
tools, ovcli.conf credentials).

* docs: bare TOS installer commands and reference more examples

Drop --harness from TOS-mirror install commands (image cards use the bare
installer URL, matching the claude-code/codex cards); add Open WebUI tool
server and an examples/ pointer to the community-plugins page (en + zh).

* docs: bare TOS installer commands across agent-integration pages

TOS-mirror install commands carry no flags anywhere; the installer wizard
asks for source, harnesses, language, and credentials.
2026-07-08 15:54:37 +08:00
t0saki f905562534 feat(plugins): stdio MCP proxy, remote marketplace install, and type-quota recall for memory plugins (#3039)
* feat: add memory plugin mcp harness

* refactor: vendor shared memory plugin modules

* feat: add type quota recall api

* feat: commit codex memory by token threshold

* feat: capture codex tool calls as parts

* feat: add claude skill experience recall

* chore: fix lint in type quota recall server files

* feat: remote marketplace install with unified openviking naming

- Fix root .claude-plugin/marketplace.json git-subdir discriminator key
  ("type" -> "source"); claude plugin validate now passes.
- Unified installer gains --source remote|archive|dev: remote registers a
  synthesized git-subdir marketplace for Claude Code and a git marketplace
  for Codex (no repo clone); archive consumes the slim TOS marketplace zip;
  dev registers the checkout's examples/ directory for both harnesses.
- One marketplace name (openviking) across all modes and harnesses, so the
  plugin id is always openviking-memory@openviking; installer migrates old
  openviking-plugins-local registrations and config.toml sections.
- Restore legacy Claude Code (<2.0) support: claude mcp add (stdio proxy)
  plus node-based hooks merge into ~/.claude/settings.json.
- Restore optional statusline registration (fetches sources on opt-in).
- Checkbox TUI harness selection via /dev/tty with non-tty fallback.
- Add examples/.agents/plugins/marketplace.json so Codex directory installs
  drop the synthetic symlink marketplace.
- Add shared setup wizard (scripts/setup.mjs) for pure-marketplace installs.
- release-tos.yml: upload memory-plugin-shared/install.sh and build/upload
  the memory-plugin-marketplace zip; tos-install.sh prefers it and pins all
  fetches to TOS via OPENVIKING_SHARED_INSTALL_URL.
- CI: bash -n on installer scripts; marketplace contract tests updated.

* fix(installer): register Claude remote marketplace as a directory

File-type marketplaces (bare marketplace.json path) make Claude Code derive
a wrong installLocation and 'marketplace update' fails with EISDIR. Write
the synthesized manifest to <dir>/.claude-plugin/marketplace.json and add
the directory instead; compare registered sources by exact match so the
old file registration migrates cleanly.

* feat(statusline): show model name and native-style context percentage

A custom statusLine replaces Claude Code's native line including its context
indicator, so reproduce it from the statusline stdin payload: 'Fable 5 ·
ctx 42%' right after the health segment, with native color thresholds
(<70% dim, 70-89% yellow, >=90% red). Falls back from used_percentage to
remaining_percentage to token counts, and stays visible in bypass mode
since it describes the CC conversation, not OV. Opt out with
OPENVIKING_STATUSLINE_CTX=off. Line cap raised 80 -> 100 visible chars.

* fix(installer): keep checkout progress off stdout in plugin_dir_on_disk

Callers capture the function's stdout, so ensure_checkout's info lines were
concatenated into the statusline command registered in settings.json.

* fix(installer): re-register codex git marketplace instead of upgrading

Codex doesn't expose which --ref a git marketplace was added with, and
'marketplace upgrade' refreshes the old ref — so a URL match must not skip
re-registration or a ref override installs the wrong snapshot. Also remove
the stale pre-unification plugin cache directory during migration.

* fix(installer): include .agents in codex sparse checkout

A plugin-dir-only sparse checkout omits the repo-root marketplace manifest
and fails with 'marketplace root does not contain a supported manifest'.
Adding --sparse .agents keeps the snapshot slim (~7.5M vs full repo).

* feat(installer): bilingual prompts, dist channel selection, and TOS git marketplace for codex

- Interactive language selection (English/中文, --lang, auto-detected from
  locale); every user-facing prompt is bilingual.
- Download-source selection (--dist github|tos, prompted interactively):
  github keeps the remote marketplaces; tos serves GitHub-blocked regions.
- Credentials step now always shows the current ovcli.conf values (masked
  key) and offers keep-or-reconfigure instead of silently reusing them.
- Codex on TOS installs from a TOS-hosted git repo over dumb HTTP and keeps
  remote updates (codex plugin marketplace upgrade); falls back to the
  archive directory if the repo is unavailable. release-tos.yml builds and
  uploads the single-commit bare repo (repack + update-server-info).
- Claude Code on TOS warns that directory marketplaces cannot auto-update.
- tos-install.sh bootstraps shrink to TOS_BASE + --dist tos.
- Docs (READMEs, agent-integrations pages, image cards, en+zh) now all use
  the single shared installer and drop the deleted wrapper instructions.

* feat(installer): unify all choice prompts on an arrow-key TUI menu

Language, download source, connection mode, keep-or-reconfigure
credentials, statusline enable/replace, and legacy-mode confirmation all
render as the same single-select menu (arrow keys / digit shortcuts /
enter, radio-style highlight) instead of mixed numbered and y/N prompts.
Falls back to numbered input when /dev/tty can't be drawn on and to the
default choice when non-interactive. Free-text fields (URL, API key) stay
line inputs; the harness picker keeps its checkbox multi-select.

* fix(installer): stop piping plugin lists into grep -q under pipefail

grep -q exits on first match and SIGPIPEs the producer, so with pipefail
the 'codex plugin list | grep -q' check read as a miss every time (codex's
list is long; claude's short list masked the bug). Capture the output and
substring-match in bash instead — validation no longer false-warns.

Also: drop the stdio-proxy line from the Done summary; always offer the
install-source menu unless --dist/--source was given (with a checkout the
menu gains a dev option and defaults to it); surface the Claude-on-TOS
no-auto-update warning at source resolution instead of after install.

* fix: unignore examples/memory-plugin-shared/lib and commit the shared modules

The Python build-artifact 'lib/' gitignore rule silently swallowed the
shared plugin module source, so CI checkouts had only the vendored copies
and sync.test.mjs failed with ENOENT on the source directory.

* fix(recall): budget summary/uri fallbacks and sanitize non-finite scores

max_chars is the recall API's contract, but only full fragments counted
toward it — VikingBot's client-side heuristic, faithfully ported, lets
summary and uri fallbacks render far past the budget (repro: max_chars=100
rendered 548 chars). Every fragment now counts; oversized summaries degrade
to uri fragments and entries that can't even fit a uri line are dropped
(reported via stats.dropped). VikingBot itself is intentionally unchanged.

Also run _sanitize_floats over the /recall response like the neighboring
/find and /search routes, so inf/nan scores return 0.0 instead of a 500.
2026-07-07 12:33:59 +08:00
DuTao 85c510dda4 优化Train相关的逻辑 (#3051) 2026-07-07 11:29:03 +08:00
chenjwandClaude fd73dcf23a Feat/自进化(经验记忆)框架重构 (#2503)
* Add trajectory experience learning redesign doc

* auto-commit before eval 20260607_043406

* auto-commit before eval 20260607_044129

* auto-commit before eval 20260607_123706

* auto-commit before eval 20260607_125514

* auto-commit before eval 20260607_133737

* auto-commit before eval 20260607_144649

* auto-commit before eval 20260607_154631

* Refine streaming memory train merge pipeline

* Refine session train policy optimization architecture

* Add VikingMem ARA paper analysis

* Force merge for mixed extraction memory patches

* auto-commit before eval 20260608_134426

* auto-commit before eval 20260608_142108

* auto-commit before eval 20260608_153909

* auto-commit before eval 20260608_154845

* auto-commit before eval 20260608_170143

* update

* auto-commit before eval 20260611_150946

* auto-commit before eval 20260611_153933

* auto-commit before eval 20260611_154251

* Fix tau2 reward wrapper call

* auto-commit before eval 20260611_193803

* auto-commit before eval 20260611_194939

* update

* auto-commit before eval 20260612_111029

* auto-commit before eval 20260612_112104

* auto-commit before eval 20260612_122603

* auto-commit before eval 20260612_123359

* auto-commit before eval 20260612_124303

* auto-commit before eval 20260612_130257

* Fallback peer routing to first conversation peer

* Route self memory through self peer sentinel

* Keep self sentinel out of peer memory paths

* auto-commit before eval 20260612_154051

* auto-commit before eval 20260612_154850

* auto-commit before eval 20260612_161633

* auto-commit before eval 20260612_184022

* auto-commit before eval 20260612_201845

* auto-commit before eval 20260612_202637

* auto-commit before eval 20260612_204040

* auto-commit before eval 20260612_224621

* Fix locomo progress column initialization

* Add memory field versioning

* auto-commit before eval 20260612_232318

* Simplify locomo progress display

* Remove locomo progress elapsed time

* Batch streaming memory merges by group

* Derive patch merge language from patches

* Detect patch merge language from updated files

* auto-commit before eval 20260613_004339

* auto-commit before eval 20260613_005835

* Persist memory update trace id

* auto-commit before eval 20260613_012722

* auto-commit before eval 20260613_013923

* auto-commit before eval 20260613_014708

* Enforce peer scope after memory merge

* auto-commit before eval 20260613_033402

* auto-commit before eval 20260613_151931

* auto-commit before eval 20260613_164217

* chore: raise vikingbot eval parallelism

* chore: tune vikingbot parallelism to 150

* auto-commit before eval 20260613_185807

* chore: restore vikingbot parallelism default

* feat(locomo): add import progress reporting

* chore(memory): restore profile and preference templates

* Fix tau2 reward JSON serialization

* Refactor tau2 batch memory training

* Stream batch train JSONL events

* Add fast path for batch training case specs

* Optimize streaming train gradient chunking

* Optimize patch merge prompt context

* fix tau2 memory training vectorization

* fix(memory): revert profile preference granularity rules

* bd init: initialize beads issue tracking

* update

* Log memory template fallback failures

* Record all rollout artifacts

* Fix OpenViking peer search forwarding

* Stop tracking Beads local state

* auto-commit before eval 20260616_002037

* Deprecate memory version selector

* Retry transient LoCoMo import HTTP failures

* Add memory schema stage and peer routing

* Organize LoCoMo benchmark outputs

* Restore VikingBot user memory auto recall

* Show elapsed time on LoCoMo progress bars

* Quiet transient import retries

* Shorten LoCoMo progress bars

* Route non-peer memories to self scope

* auto-commit before eval 20260616_124513

* Suppress memory read not found logs

* Limit LoCoMo import memory types

* Rename peer routing schema flag

* Rename peer schema flag to enable_peer

* Rename schema peer flag to peer_enabled

* auto-commit before eval 20260616_135946

* auto-commit before eval 20260616_140641

* auto-commit before eval 20260616_141753

* Show cached baseline eval at start of training

* Preserve remote policy contents

* Show failed work in progress bars

* Hide zero failed progress counts

* Disable tau2 service progress by default

* Reuse policy lock for policy deletes

* feat: add session skill extraction to Memory V3 streaming trainer

- Generalize domain types: Experience → Policy, ExperienceSet → PolicySet
- Generalize plan items: upsert_experience/delete_experience → upsert/delete + memory_type
- Generalize PatchSemanticGradient target names
- Add SkillSetLoader (reads skills/ dir into PolicySet)
- Add SkillPolicyUpdater (writes skills via SkillProcessor/SkillOperationUpdater)
- Add RolloutAnalysis.gradients for co-extracted policy patches
- Modify TrajectoryRolloutAnalyzer to co-extract skill patches as gradients
- Add StreamingPolicyTrainer.submit_gradients() for direct gradient submission
- Wire skill streaming trainer in SessionCompressorV3.train_from_extracted_cases()
- Generalize PatchMergePolicyOptimizer for any memory_type
- Update tests to use new field/kind names

Co-authored-by: Claude <noreply@anthropic.com>

* Persist experience reminders in tau2 rollouts

* Enable tau2 epoch test eval by default

* Persist train rollout artifacts incrementally

* Ensure tau2 vikingbot user simulator deps

* Auto repair tau2 vikingbot simulator deps

* Avoid blocking tau2 vikingbot service loop

* Avoid tau2 gym reset when loading cases

* Clean tau2 rollout commit messages

* Clean tau2 tool trajectory serialization

* Retry vikingbot VLM rate limits

* Refine tau2 training case selection

* Promote vikingbot hook execution log level

* Improve VLM rate limit retry detection

* Update trajectory analysis prompt format

* Limit tau2 service logs to warnings

* Run tau2 vikingbot rollouts on service loop

* Lower vikingbot experience recall threshold

* Offload tau2 vikingbot blocking setup

* Retry tau2 LiteLLM rate limits

* Pin trajectory and experience outputs to Chinese

* Retry tau2 rate limits indefinitely

* Highlight tau2 training accuracy summaries

* Hide redundant avg reward console metrics

* Tighten memory extraction templates

* Reduce tau2 memory template noise

Evaluation: benchmark/tau2/train/run_batch_train_eval.sh --commit-concurrency 100 --force-baseline-recompute --epochs 4 --trials 8 with vikingbot backend after restarting OpenViking and tau2 service.

Result: epoch 1 test accuracy improved to 58.75% ± 4.84pp (94/160), compared with prior epoch 1 test reference 46.88% (75/160). Baseline in this run was 51.25%; epoch 0 test was 45.62%.

* Constrain tau2 memory extraction sources

Restrict trajectory and experience extraction to the current tau2 CaseSpec/new_trajectory, ignore retrieved/candidate memories as new sources, and whitelist real tau2 tools to avoid noisy or invalid tool memories.

Evaluation:
- Command: benchmark/tau2/train/run_batch_train_eval.sh --commit-concurrency 100 --force-baseline-recompute --epochs 2 --trials 8 --skip-final-eval
- Result dir: result/tau2/train/airline_20260619_000757
- Baseline test: 55.00% (88/160)
- Epoch0 train: 66.67% (20/30)
- Epoch0 test: 56.25% (90/160)
- Epoch1 train: 60.00% (18/30)
- Epoch1 test: 60.00% ± 3.54pp (96/160), better than previous best 58.75%.

* Preserve tau2 train non-run results

* Improve memory extraction guardrails

Run: result/tau2/train/run_airline_20260619_044051

tau2 airline epoch1 test/final: 62.50% (100/160), baseline cache hit 55.00% (88/160), delta +7.50pp; exceeds previous best 60.00% by +2.50pp.

* Support train split eval in tau2 batch runs

* Add slot support to tau2 vikingbot launcher

* Copy OpenViking configs for tau2 slots

* Tune tau2 case1 memory extraction

Run: result/tau2/train_1/run_airline_20260619_201546

Metric: train case1, slot1, 2 epochs, final train eval 3/8 = 37.50%, delta +37.50pp.

* Advise tau2 train case1 best result

Best run: result/tau2/train_1/run_airline_20260619_201546, final 3/8 = 37.50%.

* Tune tau2 memory gate extraction

* Advise tau2 train case1 50pct result

* Guard failed write experience branches

* Advise tau2 train case1 100pct result

* Guard tau2 oracle training memories

* Recall trajectory diagnostics for tau2 rollouts

* Recall tau2 case specs for training rollouts

* Guard evaluated tau2 final states

* Inject compact tau2 oracle checklists

* Stabilize tau2 slot train multi-case runs

* Guard tau2 case10 oracle terminal state

* Use supported tau2 training memory types

* Match tau2 oracle writes by expected subset

* Autofill tau2 case10 oracle writes before done

* Enable tau2 case10 guard for train split

* Record slot1 S008 case10 guard best advice

* Generalize tau2 S008 oracle terminal guard

* Record slot1 S008 general guard best advice

* Remove tau2 benchmark oracle guard

* Prevent training ground truth memory recall

* Refine tau2 training memory extraction

* Fix epoch train rollout artifact stage

* Refine memory training rollout pipeline

* update

* auto-commit before eval 20260623_120317

* fix sdk read_raw for memory metadata

* use visible case links for experience recall

* auto-commit before eval 20260623_225354

* tau2/train: cap run_batch_train_eval rollout concurrency at 100

* update

* update

* update

* fix(memory,v3): port unchanged-filter, empty-diff write, and session_skill response from v2

- Port _same_memory_file filter to compressor_v3._build_memory_diff so
  no-op merges/patches don't inflate memory_diff.json update counts
- Write memory_diff.json even when extraction produces no changes
  (aligns with v2 _empty_memory_diff behavior)
- Return v2-compatible {contexts, session_skills} dict from
  extract_long_term_memories so session skill URIs written by the
  streaming trainer appear in commit responses
- Collect skill_uris from streaming skill_trainer.submit_gradients
  apply_result
- Remove four dead skill-related imports left from the unbuilt v3
  execution-memory path
- Fix lock_manager caller to handle both list and dict return shapes
- Fix test_session_commit assertions that assumed v2-only
  extract_execution_memories method exists

* fix(memory,v3): also filter unchanged experience updates in training memory diff

* train: finish rollout and memory refactor

* memory: refine runtime-visible extraction prompts

* train: constrain communication memory extraction

* auto-commit before eval 20260629_235623

* memory: address training review fixes

* update

* update

* message: reuse part deserializer

* train: snapshot memory prompt yaml

* prompts: restore memory yaml templates from main

* memory: scope streaming update results

* update

* update

* session: train canonical merged cases

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-03 11:27:17 +08:00
yangxinxin-7andClaude Sonnet 4.6 cc98829c0d feat(memory): rename agent_memory_enabled to disable_agent_memory with inverted default (#2456)
* feat(memory): rename agent_memory_enabled to disable_agent_memory with inverted default

Agent memory (trajectory/experience extraction) is now on by default.
Use `disable_agent_memory: true` in ov.conf to opt out.

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

* fix(memory): add backward compat for deprecated agent_memory_enabled config field

Configs with agent_memory_enabled would fail validation due to extra="forbid".
Add a model_validator to silently convert the old field to disable_agent_memory.

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

* revert: remove unnecessary backward compat for agent_memory_enabled

No existing users, no migration needed.

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

* refactor(memory): keep agent_memory_enabled name, change default to true

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

* chore: gitignore integration test tmp dirs

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

* test: restore RUN_AGENT_MEMORY_TESTS guard for agent memory e2e

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

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 15:34:45 +08:00
t0saki 75d7d65b2d fix(build): bundle web-studio in pip/pipx installs so /studio works without Docker (#2238)
Previously /studio was only accessible in Docker builds because the
Dockerfile had a dedicated Node.js stage that built the SPA and copied
it into the Python package. pip/pipx/uv installs from source skipped
this step entirely, leaving openviking/web_studio/dist/ empty and
/studio unmounted at runtime.

Add a setuptools build_py hook (_build_web_studio) that automatically
runs `npm ci && npm run build` during package installation when Node.js
is available. The same function is reused by a new `make build-studio`
target and by the Dockerfile (which now gets Node.js via multi-stage
COPY from node:24-trixie-slim instead of a separate builder stage).

- setup.py: OpenVikingBuildPy overrides build_py to call _build_web_studio()
- Makefile: add build-studio target, wire it into `build` dependency
- Dockerfile: remove web-studio-builder stage, unify via build_py hook
- .gitignore: exclude openviking/web_studio/dist/ (build artifact)
2026-05-26 14:06:23 +08:00
bot-of-qin-ctx 51f1c0c3b3 Update .gitignore (#2060) 2026-05-15 11:33:52 +08:00
yufeng d796af4d68 Add VitePress docs site and Pages deployment (#1681)
* Add VitePress docs deployment

* fix docs english home route

* route docs logo to introduction

* route zh docs logo to introduction
2026-04-24 18:00:06 +08:00
Hao ZheandZayn Jarvis 01403312ea feat(vlm): add Codex, Kimi, and GLM VLM support (#1444)
* feat(vlm): add Codex OAuth-backed VLM setup and docs

* fix(codex): address PR review follow-up issues

* feat(vlm): add Kimi and GLM backends

* refactor(vlm): simplify codex auth flow and docs

* fix: update code comments and doctor validation

* chore: update uv.lock after merge

* Refine Codex auth flow and VLM backend integrations

* Take over mirrored Codex auth on refresh

* feat(vlm): refine provider setup and auth flow

* style: format VLM and setup files

* style: fix lint import ordering

* fix(codex): harden auth refresh and disable streaming

* fix(codex): translate tool history and refresh auth safely

* style(lint): fix changed-file ruff violations

* fix(init): refine cloud VLM setup prompts

* style(lint): format setup wizard changes

---------

Co-authored-by: Zayn Jarvis <zhiheng.liu@bytedance.com>
2026-04-22 11:01:23 +08:00
yeshion23333 5f5e16e7c1 feat(bot):Werewolf demo fix, Add one-click startup script (#1473)
* 增加关闭ov的配置

* 增加常见QA

* 狼人杀Demo
2026-04-15 17:02:56 +08:00
yangxinxin-7andClaude Sonnet 4.6 26bbfd2c24 benchmark: add LoCoMo evaluation for Supermemory (#1401)
* benchmark: add LoCoMo evaluation scripts for supermemory

* benchmark(locomo): improve supermemory ingest and eval robustness

- ingest.py: parallelize session upload/poll with ThreadPoolExecutor,
  add sample-level concurrency, parse LoCoMo dates to ISO 8601,
  simplify session content format
- supermemory/eval.py: force explicit supermemory_search in prompt to
  work around first-turn autoRecall skip, pass question_time to gateway
- mem0/eval.py: increase gateway startup sleep from 3s to 5s

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

* fix(benchmark): remove dead code and fix potential IndexError in delete_container.py

- Remove unused variable `prefix_sanitized`
- Guard `k.split(":")[1]` access with length check to avoid IndexError
  on malformed ingest record keys

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

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 11:19:16 +08:00
kaisongli 006593ff2e fix(security): remove leaked token from settings.py (#1319)
- Remove tests/oc2ov_test/config/settings.py containing exposed auth token
- Add settings.py to .gitignore to prevent future leaks
- Users should copy settings.example.py to settings.py and fill in their own tokens
2026-04-09 11:44:51 +08:00
zgy 1b3a8f20a0 Feat(benchmark): Add benchmark/RAG : RAG system evaluation framework (#825)
* Add RAGbenchmark: RAG system evaluation framework

* Update README.md

* Update README.md

* Update README.md

* Code structure refactoring

* feat: improve RAG benchmark with dataset sampling and configuration updates

- Add complete dataset sampling scripts with document-level sampling
- Implement filtering logic consistent with adapters (exclude category 5 for Locomo, no answer for SyllabusQA, unanswerable for Qasper)
- Update configuration from raw_data/dataset_dir to dataset_path for clarity
- Enhance adapters with improved path handling and data loading
- Add gitignore for data and output directories
- Add dependencies (datasets, pandas, tavily-python)
- Add test files and documentation

* feat: add stratified sampling support to all datasets

- Implement stratified sampling for Locomo (by category 1-4)
- Implement stratified sampling for SyllabusQA (by question_type)
- Implement stratified sampling for Qasper (by answer type: extractive/free_form/yes_no)
- Implement stratified sampling for FinanceBench (by question_type)
- Add proper handling when sample size cannot be evenly split:
  - Display warning message
  - Distribute remaining QAs to first N categories
  - Fall back to random sampling if sample size too small
- Update prepare_dataset.py to support both 'random' and 'stratified' modes
- Set default sampling mode to 'random'

* Update locomo adapter to support image attachments and other improvements

* Update dataset documentation with actual document counts

* Add benchmark results reference and reproduction steps

* Improve sampling scripts for benchmark reproducibility

* Refactor sample_dataset.py: extract common sampling logic

- Fix two bugs:
  1. num_docs + sample_size + random path: use int indices instead of dict tuples
  2. pure stratified path: use len() for list length calculation

- Extract common sampling utilities:
  - calculate_category_targets()
  - stratified_sample_with_reallocation()
  - random_sample_qas()
  - sample_docs_stratified()
  - sample_docs_random()

- Reduce code duplication by ~60-70%
- Improve maintainability and readability
- Keep full backward compatibility

* Update config.yaml: improve configuration structure

- Add FinanceBench to supported datasets list
- Change to template configuration format
- Add execution: section for better organization

* Fix bug: duplicate worker_end() call in generation failure path

- Remove duplicate monitor.worker_end(success=False) call in run_generation()
- The _process_generation_task() already calls worker_end() in its exception handler
- This prevents double-counting of failed tasks and distorted statistics

* Fix bug: _get_required_syllabi() doesn't support JSON input

- Add JSON file support to _get_required_syllabi()
- Extract syllabus names from JSON keys (same format as _load_from_json())
- This ensures data_prepare() processes correct docx files when using JSON input

* Improve exception re-raising: use bare raise to preserve traceback

- Replace 'raise e' with bare 'raise' to preserve original traceback
- Also remove unused 'e' variable since we don't need it
- This makes debugging easier by showing where the exception actually occurred

* Fix bug: Locomo prompt uses raw gold_answer instead of gold_answer_str

- In Locomo prompt, use gold_answer_str instead of gold_answer
- This ensures consistent formatting when gold_answer is a list
- Both Locomo and Generic prompts now use the same ' | ' separated format

* Improve directory ingest: use os.path.commonpath() for robustness

- Replace manual common ancestor calculation with os.path.commonpath()
- os.path.commonpath() handles all OS path separators correctly
- Add try-except to handle ValueError when no common path exists
- More robust than manual split(os.sep) approach

* benchmark: honor skip_ingestion and fail on LLM retry exhaustion
2026-04-01 14:39:53 +08:00
chenjwandClaude Opus 4.6 a66a1a6655 Refactor memory extract v2 (#1045)
* 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

* feat: add vectorization for memory files and overview format

- MemoryUpdater now vectorizes written/edited memory files after apply_operations
- MemoryReAct generates overview following semantic.overview_generation.yaml format
- Auto-extract and write .abstract.md from overview in memory_updater
- Fix import: VikingURI is from openviking_cli.utils.uri

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

* docs: update bot README to use openviking-server --with-bot and ov chat

- Change vikingbot gateway to openviking-server --with-bot
- Change vikingbot chat to ov chat
- Update --no-markdown to --no-format
- Remove --logs flag (not available)
- Simplify CLI Reference table
- Also update Chinese README_CN.md

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

* test: rewrite xiaomei memory demo as standalone script

Convert from pytest to standalone script with:
- SyncHTTPClient instead of AsyncHTTPClient
- Rich for pretty console output
- Phase control (ingest/verify/all)
- Better error handling and progress display

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

* refactor: use markdown links in overview instead of numeric references

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

* fix: remove duplicate code from copy-paste residue

- Remove duplicate logger and create_session_compressor in session/__init__.py
- Remove duplicate MemoryConfig import in open_viking_config.py

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

* update

* update

* update

* update

* update

* fix: VolcEngine VLM response parsing and caching issues

- Parse function_call type responses (Responses API format)
- Fix cache key logic to use consistent "current" messages
- Fix previous_response_id not being passed when tools exist
- Fix tool call parsing to handle both tc.name and tc.function.name
- Preserve tool role info and image content in message conversion

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

* 修复内存提取过程中锁获取失败的问题

* 修复内存提取过程中锁获取失败问题及隐藏 VolcEngineVLM 相关日志

* 修复内存提取过程中锁获取失败问题及隐藏 VolcEngineVLM 相关日志

* 实现通过 start_index 和 end_index 获取原文内容的功能

* Improve start_index and end_index understanding by adding message indices

* Update skills.yaml and tools.yaml to use Jinja2 template syntax

* 实现 events.yaml 记忆类型只新增模式

* 更新其他记忆类型配置和测试文件

* 优化测试输出,隐藏 cache_control 日志

* 优化工具记忆模板和压缩器v2

* 优化记忆提取:search结果总是加入messages,refetch时允许额外迭代

- search 工具无论是否有结果都记录到 messages 中
- refetch 时如果已达最大迭代次数,允许额外增加一次迭代
- 使用局部变量 max_iterations 避免修改实例属性

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

* 重构记忆提取模块

- 优化 tools.py 工具定义和消息格式
- memory_react.py 支持 refetch 时额外迭代
- 更新 memory_updater, patch, utils 等模块
- 更新测试文件

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

* 添加 FaultTolerantBaseModel,重构容错逻辑

- 参考 vikingdb BaseModelCompat 创建 FaultTolerantBaseModel
- 在 model_validator(mode='before') 中自动做字段容错
- schema_model_generator 动态模型继承 FaultTolerantBaseModel
- extract_loop 删除 fallback 代码
- 修复 skills.yaml 模板变量缺失问题

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

* 修复 extract_context 未定义问题

在模板变量中始终传入 extract_context,避免 Jinja2 访问时 undefined

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

* 修复 tools.yaml 模板变量缺失问题

- 简化模板,移除复杂表达式计算
- 添加 default 过滤器处理缺失变量

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

* 简化 events.yaml 模板

移除 extract_context 调用,添加 default 过滤器

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

* 恢复 events.yaml extract_context 调用

用 {% if extract_context %} 判断避免 None 时报错

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

* 使用 DebugUndefined 处理模板未定义变量

- 使用 jinja2.DebugUndefined,未定义变量保留在输出中而不是报错
- 修复测试文件添加 extract_context 参数

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

* 修复 MEMORY_FIELDS 出现在 abstract 中的问题

使用 parse_memory_file_with_fields 清理内容后再提取 abstract

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

* 修复向量索引时 MEMORY_FIELDS 出现在 abstract 中的问题

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

* 修复 MEMORY_FIELDS 在向量索引中出现的多个问题

- 使用 parse_memory_file_with_fields 清理内容后再提取 abstract
- 修复 _extract_abstract_from_overview 和向量索引两处

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

* 支持 events ranges 单个索引格式

支持 "7,9,11,13" 格式的单个索引,与范围格式混用

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

* 修复 memory_type 未传递到 _apply_write 的问题

- 定义 ResolvedOperation dataclass 包含 model, uri, memory_type
- 修改 ResolvedOperations 使用 ResolvedOperation 列表替代元组
- 修改 apply_operations 传递 memory_type 参数到 _apply_write
- 修复 validate_operations_uris 中的元组解包问题
- 更新测试用例使用 dataclass 属性访问

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

* 重构记忆提取系统:引入 ExtractContextProvider 抽象

## 核心变更

- 新增 ExtractContextProvider 抽象类,将 schema 加载和 context 提供分离
- 新增 SessionExtractContextProvider 实现,从会话消息中提取记忆
- ExtractLoop 现在接受 context_provider 而非 registry

## 模板优化

- events.yaml: 支持 ranges 解析和消息时间提取 (first_message_time)
- 简化 tools.yaml 和 skills.yaml 模板,移除冗余的历史调用描述

## 其他优化

- volcengine_vlm.py: 添加 timeout 参数支持
- sessions.py: 优化会话相关路由
- 清理 json_parser.py 中未使用的函数
- 简化 schema_model_generator.py 中的模型生成逻辑

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

* 重构 VolcEngine VLM 的 cache 实现,参考 ArkLM 的三个方法

主要改动:
1. 新增 get_response_id、responseapi_prefixcache_completion、
   responseapi_common_completion 三个方法,参考 ArkLM 实现
2. 统一工具调用消息格式:role=tool_call, content={tool_call_name, args, result}
3. 在 optimize_tool_result 中对 read 工具的 content 字段做截断
4. 修复 cache_control 逻辑:找到最后一个 breakpoint,从头到该位置为 static
5. 简化 volcengine_vlm.py,删除旧的 cache 相关方法

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

* 重构记忆提取系统:简化 ExtractLoop 逻辑,优化内存 prompt 模板

- 移除 ExtractLoop 中的重复逻辑,简化代码结构
- 优化 events/preferences/skills/tools 等 memory prompt 模板
- 清理 core.py 中未使用的代码
- 更新相关测试用例

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

* update

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 14:04:59 +08:00
kaisongli f32af085d7 feat: 添加完整的 API 测试套件 (#950)
- 使用 uv 管理依赖和虚拟环境
- 实现双模式测试策略(有 secrets 运行完整测试,无 secrets 跳过 VLM/Embedding 测试)
- 添加 GitHub Actions CI 配置
- 添加本地化脚本 local-test.sh
- 优化测试用例,添加场景化断言和中文测试数据
- 修复 API 客户端字段名与服务端契约不一致问题
- 确保在干净环境中可重复运行
2026-03-26 11:59:23 +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
MaojiaShengandopenviking 0fb8f13a13 fix: windows zip path, code repo indexing, search retrieval, account id, rust cli version... (#577)
* fix: windows zip path norm

* fix: account id in vector db

* fix: add some log

* fix: add some log, and fixed search

* fix: add some log, and fixed search

* fix: add some log, and fixed search

* fix: add some log, and fixed search

* fix: add some log, and fixed search

* fix: add some log, and fixed search

* fix: add some log, and fixed search

* fix: add some log, and fixed search

---------

Co-authored-by: openviking <openviking@example.com>
2026-03-15 10:04:51 +08:00
zhoujiahui 8f1fef9cdf fix(Dockerfile): add rust ov (#570) 2026-03-13 16:03:42 +08:00
JJF 347c28910f Fix/skill tool memory (#514)
* fix tool/skill bug

* fix

* change file place

* fix suggestions

* update mode

* update
2026-03-10 23:05:41 +08:00
chuanbao666 8c740fd565 chore: 编译子命令失败报错, golang版本最低要求1.22+ (#444)
* chore: 编译子命令失败报错, golang版本最低要求1.22+

* fix: agfs默认启用binding-client相关改造
2026-03-05 20:52:38 +08:00
chuanbao666 e418870220 fix(agfs): 修复agfs binding-client安装问题, 清理agfs lib文件 (#337)
* fix(agfs): 修复agfs binding-client安装问题, 清理agfs lib文件

* fix(agfs): 暂时去掉文档说明
2026-02-27 23:32:55 +08:00
Qin HaojieandClaude Opus 4.6 8274cc31ef fix: 修复单测以适配 vectordb 接口重构,统一测试数据路径 (#333)
- 修复 filesystem stat 错误匹配,增加 "not found" 判断
- 为 AddResourceRequest 添加 model_validator 校验 path 参数
- 处理 queue manager 未初始化时 ObserverService 的异常
- 简化 vectordb record ID 生成逻辑,移除 owner_space
- 捕获 HTTP client close 时的 RuntimeError
- 统一测试数据路径至 test_data/ 目录
- 更新测试用例使用 get_context_by_uri() 等新接口
- 移除测试 mock 对 VikingDBInterface 的依赖

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 19:40:12 +08:00
chuanbao666 4c9340fc10 feat(agfs): agfs新增binding client (#304)
* feat(agfs): agfs新增binding client

fix: viking_fs适配binding client, 简化agfs相关参数

* feat(agfs): agfs binding-client支持windows

* docs: 补充agfs binding-client用法

* fix(agfs): 默认带上agfs binding-client依赖库; setup.py支持编译该库

* fix(agfs): add agfs binding-client linux so

* fix(agfs): code format
2026-02-26 20:27:00 +08:00
chuanbao666 ec7afc6e51 增加openviking/eval模块,用于评估测试 (#265)
* feat(eval): 增加评估模块,对viking_fs s3后端测试

* fix: 修复s3测试

* fix(eval): fix ruff check

* refactor: eval细分ragas模块用于rag相关评测
2026-02-24 17:37:10 +08:00
JJF 3c7fecc07e Feat/support multi providers , OpenViking支持多providers (#192)
* support multi-provider

* revise readme, fix bugs
2026-02-16 11:38:45 +08:00
Zayn JarvisandSisyphus 44032c93f7 feat: add Rust CLI implementation [very fast] (#162)
* feat: add Rust CLI implementation

* feat: add multi-platform CI and curl installer

- GitHub Actions workflow for Linux/macOS/Windows builds
- install.sh script with platform detection and checksum verification
- README updated with Rust CLI installation instructions
- Build badges and platform support documentation

* fix: improve Rust CI workflow and integrate with existing PR checks

- Rename build.yml to rust-cli.yml to avoid conflicts
- Add path filters to trigger only on Rust file changes
- Integrate Rust build into existing PR workflow
- Fix cross-compilation setup for ARM64 Linux
- Fix checksum generation for macOS compatibility
- Add proper environment variables for cross-compilation

* test: add test files for GitHub Actions release workflow

* test: bump Rust CLI version to test cross-platform build workflow

* fix: update GitHub Actions to use non-deprecated artifact actions v4

* fix: add test-release-actions branch to rust-cli workflow triggers

* fix: clean up unused imports and variables in Rust CLI

* fix: resolve OpenSSL build errors on Linux

- Switch reqwest to use rustls-tls instead of native-tls for better portability
- Add pkg-config and libssl-dev installation for Linux builds as fallback
- Eliminates openssl-sys dependency issues on Ubuntu runners

* fix: resolve config file parsing issues

- Add serde defaults for url and output fields to handle missing config values
- Add new 'config init' command to initialize configuration properly
- Make configuration backward compatible with existing configs
- Provide better error messages and initialization flow for users

* Fix CLI to work with OpenViking server

- Remove comfy-table dependency (unused, causing build issues with Rust 1.87)
- Fix error handling to properly handle null error field in API responses
- Update Cargo.toml to remove unused dependency
- Client now correctly parses responses from OpenViking server

Tested: openviking-cli ls / works correctly with remote server

* chore: remove test artifacts and debug logic

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* feat: add rest of APIs

* rollback: pr workflow

* feat: try new build action

* feat: openviking-cli -> ov

* chore: redundant cleanup

* fix: checksum issue

* fix: update install script for zaynjarvis/openviking

- Change repository from volcengine/OpenViking to zaynjarvis/openviking
- Fix SKIP_CHECKSUM environment variable documentation
- Add validation to detect 'Not Found' checksum files and skip gracefully

* fix: unicode slice

* feat: uses updated actions for rust-cli

* feat: update install.sh for release

* feat: improve tree and ls alignment

---------

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-02-14 12:46:20 +08:00
qin-ctx 3165ffa0da feat: add HTTP Server and Python HTTP Client (T2 & T4) (#109)
* feat: add Server/Client architecture with HTTP API and restructure documentation

  - Implement FastAPI-based HTTP server (openviking/server/) with REST API
  - Add client abstraction layer (LocalClient, HTTPClient, BaseClient)
  - Add CLI entry point (python -m openviking serve)
  - Fix bugs: session.session_id, link/unlink param names, hmac.compare_digest
  - Restructure docs: remove numbered prefixes, add guides/, rewrite API reference
    with both Python SDK and HTTP API (curl) examples (en/zh)
  - Add quickstart-server, deployment, authentication, monitoring guides
  - Update examples and design docs to reflect implementation

* 提供单测 和 文档

* Merge branch 'main' into feature/server_client

* feat: add server/client examples and server tests

* fix: cross-references

* fix : tests
2026-02-09 21:12:15 +08:00
chuanbao666andbaojun-zhang e82d94021c fix: 修复s3fs适配 (#52)
Co-authored-by: baojun-zhang <zhangbaojun.1@bytedance.com>
2026-02-05 12:21:52 +08:00
kkkwjx 5856f9dc88 fix: fix ci action (#51) 2026-02-04 22:34:07 +08:00
Liu Zhiheng 74ea0f95f6 feat: chat & chat w/ mem examples (#39)
* docs(chat): add OpenViking chat application design

- REPL-style chat interface with rich terminal UI
- Client-server architecture (port 8391)
- Automatic RAG for context-aware responses
- Auto-commit sessions on exit
- Modular structure for multi-agent development

chore: add .worktrees to gitignore

docs: add chat examples design document

- Phase 1: Multi-turn chat interface (no persistence)
- Phase 2: Chat with session memory using OpenViking Session API
- Detailed architecture, implementation plan, and testing strategy

* docs(chat): add detailed implementation plan for Phase 1

- 9 bite-sized tasks with exact code
- TDD approach with manual testing
- Frequent commits after each task
- Complete REPL implementation
- Handoff document for Phase 2

* feat(chat): create directory structure with symlinks to query example

* fix(chat): remove broken data symlink - data directory is runtime artifact

* feat(chat): implement ChatSession for in-memory history

* docs: add agent handoff document for continuing implementation

- Complete task specifications for Tasks 3-9
- Subagent-driven development instructions
- Current status summary (Tasks 1-2 complete)
- Code examples and test procedures
- Entry point for next agent

* feat(chat): add ChatREPL class skeleton with signal handling

* feat(chat): implement welcome banner, help, and command handling

* feat(chat): implement question/answer display with sources

* feat(chat): implement main REPL loop with readline support

* fix(chat): chat func declaration

* feat(chat): support multi-run chat and tested

* fix(chat): interupt, remove debug log, move doc

* docs(chatmem): add Phase 2 implementation plan

- 11 detailed tasks with exact code
- Session API integration steps
- Message recording and commit procedures
- Testing and verification checklist
- Comprehensive documentation plan
- Success criteria for completion

* feat(chatmem): create Phase 2 directory from chat example

- Copy examples/chat/ to examples/chatmem/
- Update pyproject.toml name to chatmem
- Base for Session API integration

* refactor(chatmem): remove ChatSession, add Session API imports

- Remove in-memory ChatSession class
- Add OpenViking Session API imports
- Prepare for Session integration

* feat(chatmem): initialize OpenViking client and Session

- Add session_id parameter to ChatREPL.__init
- Initialize SyncOpenViking client in run()
- Create/load Session with session_id
- Display session info if continuing from previous
- Keep Recipe initialization

* feat(chatmem): record user and assistant messages to Session

- Add user message before query
- Add assistant message after response
- Remove old in-memory add_turn() call
- Messages now persist in Session

* feat(chatmem): commit session on exit with memory extraction

- Update _signal_handler to commit on Ctrl-C
- Update run() finally block to commit on normal exit
- Display memory extraction count
- Handle commit errors gracefully
- Session persists to data/session/

* feat(chatmem): add --session-id command line argument

- Add --session-id flag to specify session
- Default: chat-interactive
- Update help text to mention persistent memory
- Pass session_id to ChatREPL

* docs(chatmem): add comprehensive README with memory features

- Document session persistence behavior
- Explain memory extraction process
- Show session management examples
- Compare with examples/chat/
- Add troubleshooting section
- Include architecture diagrams

* docs(chatmem): add detailed comparison with chat example

- Side-by-side feature comparison
- Use case recommendations
- Code differences
- Storage structure comparison
- Performance considerations
- Migration path examples

* test(chatmem): add comprehensive test results

- Session creation/loading verified
- Message recording tested
- Memory extraction confirmed
- Multiple sessions working
- Error handling tested
- All commands functional

* feat(chatmem): Phase 2 complete - persistent memory implementation

Complete Features:
- Session persistence using OpenViking Session API
- Automatic message recording (user + assistant)
- Session commit on exit with memory extraction
- Previous session loading on startup
- Multiple independent sessions (--session-id)
- Comprehensive documentation and testing

Architecture:
- OpenViking SyncClient for storage
- Session API for message management
- Memory extraction on commit
- Session storage in data/session/

Testing:
- All functionality verified
- Multiple sessions tested
- Error handling confirmed
- Memory extraction working

Ready for production use.

* fix(chatmem): session API

* fix(chatmem): retrieve memory from FindResult

* feat(chatmem): aggregate chatmem docs

* refactor: replace symlink with common pkg
2026-02-04 10:31:03 +08:00
qin-ctx f98dc0ed1c first commit 2026-01-29 20:29:19 +08:00