Commit Graph
1050 Commits
Author SHA1 Message Date
604275f272 feat(resources): support TOS auth args for HTTP imports (#4248)
* feat(resources): support source headers for HTTP imports

Allow HTTP(S) resource imports to pass request headers for authenticated object storage sources. Fetch authenticated sources into a request-scoped snapshot and keep credentials out of parser inputs and queued jobs.

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>

* fix(resources): reserve source headers from args

Treat source_headers as a top-level add_resource field so it is rejected from args and filtered consistently from queued processor inputs.

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>

* feat(resources): accept TOS auth through args

Replace generic source header passthrough with explicit tos_signature and tos_access args for HTTP TOS object imports. Keep credentials request-scoped and out of parser and queue payloads.

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>

* refactor(resources): name transient TOS args

Centralize TOS credentials that are accepted from args but excluded from durable resource jobs.

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>

---------

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>
2026-08-24 19:09:09 +08:00
8ab07b1e4c fix(semantic): use Markdown links instead of [N] indices in L1 overview (#4251)
Directory L1 overviews previously fed the model bare `[N]` file indices and
`[N] filename: summary` source lines, then post-processed by replacing `[N]`
with the entry filename. Because the model naturally copied the filename next
to the index (e.g. `### [1] filename` or `→ [1] filename`), the substitution
produced duplicated headings like `### filename filename` in both Quick
Navigation and Detailed Description sections.

Replace the index-reference scheme with collision-free link placeholders:

- Feed each entry a compact placeholder `(link: viking://input_sample_fN)` for
  files and `viking://input_sample_cN` for subdirectories, and instruct the
  model to emit standard Markdown links `[display title](placeholder)`.
- Resolve placeholders back to real `viking://` URIs (built from
  `dir_uri + "/" + name`) in post-processing via `_replace_link_references`,
  replacing the old `_replace_index_references`.
- Apply consistently across the single, truncated, and batched generation
  paths; batched partials resolve placeholders before merge so the merge step
  needs no further substitution.

This eliminates the duplicated-heading class of bugs entirely (bare `[N]`
collisions are far less likely than reused digits) and yields clickable,
accurate resource links in the generated overview, matching the Markdown
link convention already used elsewhere (session memory extraction).

Co-authored-by: Maojia Sheng <shengmaojia@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>
2026-08-24 17:50:33 +08:00
bianbiandashen 4ede9c49bd fix(memory): preserve all patch blocks when creating a new memory (#3682)
When a memory has no existing content (current_value is None), PatchOp routed
the write through _extract_replace_when_no_original, which returned only the
FIRST block's replace text — via StrPatch.get_first_replace() for objects, and
blocks[0] for the dict (JSON-parsed) form.

The StrPatch schema instructs the model to split non-adjacent edits into
separate blocks, so a brand-new memory routinely arrives as a multi-block
patch (e.g. one block per extracted fact or preference). Taking only blocks[0]
silently discarded every subsequent block — entire facts/preferences extracted
from the session were dropped with no log, warning, telemetry, or
caller-visible signal. The existing-content path (apply_str_patch) already
iterates all blocks; the no-original branch was an asymmetric omission.

Concatenate every block's replace content (joined by newline) in both the
StrPatch and dict forms. The common single-block case is unchanged
("\n".join([x]) == x), and the existing-content path is untouched.

Add regression tests covering multi-block StrPatch and dict-form patches
(silent loss before the fix), plus single-block and existing-content cases
to pin the unchanged behaviour.
2026-08-24 17:26:47 +08:00
LeoFreeandliuyuxin a5dc9b0248 fix(storage): exclude watch control files from backups (#4149)
Co-authored-by: liuyuxin <uyuc@liuyuxindeMacBook-Air.local>
2026-08-24 17:18:36 +08:00
Yu ZhangandClaude Sonnet 4.6 85228eb38d fix(vlm): pass Codex reasoning effort (#4244)
Allow openai-codex VLM configuration to carry reasoning_effort through credential normalization and into Responses API requests so deployments can tune model effort without out-of-tree patches.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-24 16:27:36 +08:00
DuTao 4369e28dca fix(memory): expose reasons for skipped empty-URI operations (#4168)
* 增加空uri的原因

* fix  pr bug

* 加入Memory diff

* fix(memory): preserve semantics for skipped URI reporting
2026-08-24 16:21:04 +08:00
LH-kevin acfb3965cb fix(semantic): stop parent refresh at namespace roots (#4232) 2026-08-24 16:18:29 +08:00
XiaoChen 0554308e0c fix(memory): render fields without init_value as empty on init (#4213)
Previously initialize_memory_files only seeded template variables for
fields that declared an init_value. Fields without one were omitted from
extra_fields, so Jinja (DebugUndefined) wrote their literal "{{ field }}"
placeholders into initialized memory files such as identity.md.

Seed every field, defaulting a missing init_value to an empty string, so
placeholders resolve to empty instead of leaking into the file.

Fixes #4207
2026-08-24 14:25:50 +08:00
9eac8a6d3d feat(sdk): sync go/ts/python SDKs with server find/search, recall, an… (#3737)
* feat(sdk): sync go/ts/python SDKs with server find/search, recall, and admin changes

Server-side changes recently landed that the language SDKs had drifted from:

- find/search results now return `tags` and no longer return
  `category`/`match_reason`/`relations`/`overview` (#3730). Go's strict
  struct was the only one broken; update MatchedContext accordingly.
- new admin endpoints for agent-evolution and per-account settings (#3695).
- public `search/recall` endpoint was missing from all SDKs.

Changes:
- python: add `level`/`since`/`until`/`time_field` to find/search; add an
  `extra` escape hatch to find/search/add_resource/write/batch_write so new
  server fields can be passed without an SDK bump (only forwarded when set,
  preserving `level=0`); add `recall` and the four admin methods.
- go: fix MatchedContext (add Tags, drop removed fields), add Recall and the
  four admin methods.
- typescript: type MatchedContext/FindResult, add RecallOptions, add `recall`
  and the four admin methods.

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>

feat(sdk): unify options APIs and sync latest server interfaces

- migrate complex Python SDK calls to typed options dictionaries
- add dedicated context search and consistent extra-field handling
- align Go and TypeScript options with omission-aware serialization
- support session config, event tags, Agent Evolution date filters,
  OpenViking Assets, batch write, downloads, and create_parent
- refresh SDK tests and examples across all three languages

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>

fix(sdk): address options API review findings

- fix Go session extra merging and Python message precedence
- adapt LangChain calls to the Python options API
- migrate repository examples, tests, and documentation

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>

fix(sdk): complete options migration and message parity

- migrate remaining Python SDK benchmarks to options dictionaries
- normalize empty parts consistently for single and batch messages
- add regression guards for repository SDK call sites

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>

fix(sdk): align reindex options after main rebase

- preserve reindex tags in Python typed options
- add reindex extra support for Go and TypeScript
- reject official fields passed through extra across SDKs

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>

feat(sdk): support legacy keyword options

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>

docs(sdk): use explicit Python SDK arguments

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>

fix(sdk): support set tags extra options

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>

fix(sdk): expose Go add resource options

Expose AddType and ProcessingMode through Go AddResourceOptions and serialize them to the resources API. Add a regression test covering the resulting request payload.

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>

feat(sdk): flatten core Python client options

Co-authored-by: TRAE CLI <traecli@bytedance.com>

docs(sdk): align Python examples with flattened options

Co-authored-by: TRAE CLI <traecli@bytedance.com>

fix(sdk): preserve core API compatibility

Co-authored-by: TRAE CLI <traecli@bytedance.com>

refactor(python-sdk): move resource hints to options

Co-authored-by: TRAE CLI <traecli@bytedance.com>

fix(sdk): align resource option callers

Co-authored-by: TRAE CLI <traecli@bytedance.com>

test(sdk): cover recursive reindex forwarding

Co-authored-by: TRAE CLI <traecli@bytedance.com>

fix(sdk): preserve Go options compatibility

Co-authored-by: TRAE CLI <traecli@bytedance.com>

feat(python-sdk): expose message peer id

Co-authored-by: TRAE CLI <traecli@bytedance.com>

test(python-sdk): consolidate options coverage

Co-authored-by: TRAE CLI <traecli@bytedance.com>

feat(python-sdk): add parts and flatten image search

Co-authored-by: TRAE CLI <traecli@bytedance.com>

* docs(sdk): align Python call examples

Co-authored-by: TRAE CLI <traecli@bytedance.com>

---------

Co-authored-by: TRAE CLI <traecli@bytedance.com>
Co-authored-by: Qin Haojie <qinhaojie.exe@bytedance.com>
2026-08-24 14:09:11 +08:00
Qin Haojie ad750121ed fix(api-keys): hide deleting users from list (#4234) 2026-08-24 14:03:50 +08:00
t0saki a83b81715b feat(uri)!: remove uid-less current-user shorthand in favor of viking://~ (#4196)
* feat(uri)!: reject uid-less current-user shorthand in favor of viking://~

viking://user/<segment> (memories/resources/skills/peers/privacy/sessions
without a user id) was ambiguous with a user literally named after the
segment, and a user actually named e.g. "memories" was unreachable for
USER/ADMIN callers. Now that the viking://~ home alias (#4167) covers the
same need unambiguously, the shorthand fails closed at the request
boundary instead of expanding:

- resolve_current_user_uri raises NamespaceShapeError with a corrective
  hint naming both viking://~/<rest> and the explicit-uid form. Silently
  parsing the reserved segment as a peer user id would misdirect reads
  and writes, so rejection is the only safe removal.
- Bare viking://user falls through to the canonical parser and keeps
  container semantics (a user key listing it sees only its own space).
- The self-id escape stays: a caller whose user_id equals a reserved
  name keeps viking://user/<own-id> as their canonical root. ROOT-role
  literal parsing and the legacy viking://session alias are unchanged.
- AddTargetsConfig normalizes stored legacy config spellings
  (viking://user/resources|skills) to the viking://~ form at validation
  so existing ov.conf/user_config deployments keep working; the accepted
  per-user spelling is now viking://~/resources and viking://~/skills.
- usage_reporter keeps canonicalizing the historical shorthand found in
  old transcripts and additionally recognizes viking://~/memories/.

BREAKING CHANGE: requests using the uid-less viking://user/<segment>
spelling now fail with 400; use viking://~/<segment> or an explicit
viking://user/{user_id}/<segment> URI.

* refactor(clients): migrate first-party emitters to the viking://~ home alias

Every in-repo client that emitted the removed uid-less current-user
shorthand now sends viking://~/... instead: vikingbot fallbacks and
default sentinels, the LangChain store/tools defaults, the shared
recall-core.mjs (all synced plugin copies), the codex/claude-code/
openclaw/openwebui/dsh/zcode/pi plugin emitters, quick-app examples,
Go SDK example, tau2 benchmark targets, and the eval golden dataset.

Compat kept where legacy strings live in stored user configs: bot and
ov_dream sentinels accept both spellings while emitting only ~, and
recall-core still rewrites legacy viking://user/<reserved> config values
client-side. langchain_openviking._uri now classifies viking://~ with
the explicit-user shape so canonicalized server responses keep matching
a ~ root. Plugin READMEs note the server requirement for the alias.

* docs: replace current-user shorthand guidance with the viking://~ home alias

Rewrite every EN/ZH doc and model-facing prompt that advertised the
uid-less viking://user/<segment> spelling: URI concept catalogue,
context-types/storage/extraction/retrieval/session/privacy concepts,
configuration guide (with the legacy add_targets auto-normalization
note), resources/skills/sessions/retrieval/admin API references, FAQ,
capability reference, and the openviking-memory / ov-experience-memory /
openclaw / ov-resources skills. The stale MCP viking://user/<path>
dialect passage in the MCP guide is replaced by ~ guidance, and bare
viking://user is documented as the container of user spaces.

* test(api): migrate live API session-used tests off the removed shorthand

tests/api_test/sessions sent uid-less viking://user/skills/... URIs to
record_used, which the request boundary now rejects with 400 (caught by
the API & CLI Integration Tests CI job; these tests need a live server
and are not part of the local suites). The api_test client authenticates
as an admin-role user key, so the viking://~ home alias expands for it.
tests/api_test/common/test_edge_cases.py is left as is: it asserts a 400
for a non-resource add target, which still holds.
2026-08-21 19:00:19 +08:00
dingbenandTRAE CLI 45c3295945 fix(api-keys): bypass S3FS stat cache for key-store change signature (#4192)
The api_key_watch_interval mechanism reloads account info across replicas
by polling compute_store_signature() (a (path, size, modTime) signature
over accounts.json + users.json). On S3FS this never detected writer-side
changes: S3FS stat() serves from a sliding-TTL StatCache (default 60s,
re-armed on every get()), so the watcher's 30s poll kept the entry alive
forever and the signature never moved -> reload() never fired. localfs
stats live, so it worked there.

Thread a bypass_cache flag from the watcher's stat call down to S3FS so
signature stats read fresh backend metadata:
- FsContext(View): add bypass_cache field + builder/getter
- ragfs-python build_fs_context: parse ctx["bypass_cache"]
- S3FS stat(): skip stat_cache.get() when bypass_cache is set
- AsyncAGFSClient.stat(bypass_cache=...): inject ctx flag
- legacy _stat_signature: stat with bypass_cache=True

Co-authored-by: TRAE CLI <traecli@bytedance.com>
2026-08-21 17:55:23 +08:00
MaojiaShengandTRAE CLI a7c77e6cf7 feat: add freshness-aware parent aggregation (#4180)
* 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>
2026-08-21 16:30:44 +08:00
Jiahui ZhouandTRAE CLI 499995f3ed fix(search): filter invalid result tags (#4153)
Co-authored-by: TRAE CLI <traecli@bytedance.com>
2026-08-21 14:59:07 +08:00
baojun-zhang 2b92624794 fix(storage): fix recursive flag for file/dir delete (#4181) 2026-08-21 12:33:40 +08:00
Hao Zhe a809a0aaef feat(studio): show error details in request logs (#4172)
* feat(studio): show error details in request logs

* fix(observability): harden audit error details
2026-08-21 11:57:08 +08:00
zihengli 00bc96258b feat: new tos connector args (#4129)
* feat: new tos connector args

* fix: skill ut

* fix: param check

* fix: param check

* fix: param check

* fix: clarify connector watch eventual consistency

* fix: allow plaintext connector watches and tighten TOS URI validation
2026-08-21 11:00:45 +08:00
t0saki ff38bb5dd1 feat(uri): add viking://~ home alias for the caller's user root (#4167)
* feat(uri): add viking://~ home alias for the caller's user root

Accept `viking://~` (and `viking://~/<suffix>`) as a server-side alias
for the authenticated caller's user namespace root. The alias is
expanded at the request boundary by resolve_current_user_uri for
USER/ADMIN identities, so every control plane that already funnels
through validate_request_viking_uri (REST, MCP, and therefore CLI/SDK
clients) gets it with no client changes.

Design points:
- `~` is a reserved token that can never collide with a real user id
  (validate_user_id's charset excludes it), so segment-0 aliasing does
  not weaken canonical-first parsing.
- The canonical parser (resolve_uri) rejects the alias outright,
  mirroring the legacy-session handling: root-role requests, internal
  callers, and storage paths fail closed instead of materializing a
  literal '~' directory.
- The alias is accepted but never advertised: scope error copy
  ("Must be one of: ...") filters it at both the parser and the public
  validator, and VikingURI.build refuses to mint it, so responses and
  persisted data stay canonical.
- MCP search now resolves exclude_uris with the same strictness as the
  REST search router (closes the one entry point that skipped it).

* refactor(mcp): drop tilde mention from tool docstrings

Agents pass viking://~ through verbatim and responses echo the
canonical form, so the alias is self-explanatory on contact; carrying
the sentence in 12 tool descriptions costs every MCP session tokens.
Docs keep the alias documented for humans.
2026-08-20 20:44:40 +08:00
agent 056f875e90 feat: restore user-scoped memory extraction policies (#4126)
* feat: add user-scoped memory extraction policies

* refactor: minimize user memory policy session changes

* fix: resolve user memory policy consistently

* refactor: resolve user memory policy once per commit

* refactor: simplify memory policy provider typing

* fix: apply server default user memory policy

* fix: allow resetting user memory policy
2026-08-20 20:28:33 +08:00
Jiajie - He/him/his 1efb0dce59 feat(compile): improve source materialization and long-running agent loops (#4059)
* feat(compile): compact agent context in-loop and remind iteration budget

* feat(compile): materialize sources for local exec and track reads

* feat(compile): survey-then-targeted read workflow and relaxed submission

* feat(compile): accept file sources, enable exec by default, update docs and tests

* fix(bot): harden compile source handling and compaction (#4099)

* feat(compile): add skill examples and update render

* feat(compile): add checkout workflow and task cancellation

* feat(cli): support compile task status and cancellation

* feat(examples): add compile knowledge graph tools

* docs(compile): document checkout and cancellation APIs

* docs(compile): add context compilation guides and skill examples
2026-08-20 20:17:55 +08:00
chuanbao666 421c73be9d fix(storage): 修复 ov add-resource在向量库返回4xx是吞异常问题 (#4160) 2026-08-20 17:42:28 +08:00
Yu Zhang a0224b11cf fix(embedding): truncate LiteLLM async vectors (#4146) 2026-08-20 16:37:26 +08:00
bot-of-qin-ctxandqin-ctx 1ed5e21135 fix(uri): expand current-user URIs for admins (#4145)
Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-08-20 12:58:18 +08:00
98a0104aaa Fix/filter invalid attr tags (#4123)
* fix(fs): filter invalid tags from attrs

Hide legacy non key-value search tags from filesystem attributes while preserving valid tags. Add regression coverage for the read boundary.

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>

* feat(session): update auto commit policy defaults

Raise token and message thresholds, clear the retained-message default, and expand the corresponding bounds. Synchronize the session API and configuration documentation.

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>

---------

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>
2026-08-19 21:11:18 +08:00
Jiajie - He/him/his b9ec4f5b9a fix(memory): make cross-session updates and partial deletions reliable (#4121)
* fix(memory): refresh nested overview correctly

* improve 1

* add log

* fix(memory): merge cross-session operations by kind

* feat(memory): add DELETE blocks for partial memory removal

* refactor(memory): disable decision reasoning output

* chore(memory): add temporary bad-case diagnostics

* chore(memory): remove temporary bad-case logging

* fix(memory): delete unnecessary prompt

* fix(memory):update revert

* fix(memory):delete lines
2026-08-19 21:05:38 +08:00
stometaverseandleilei-chen-sto 84467b1be8 fix(memory): canonicalize entity URI casing (#4070)
* fix(memory): canonicalize entity URI casing

Signed-off-by: leilei-chen-sto <leilei@moego.pet>

* fix: canonicalize entity URI identity

* Revert "fix: canonicalize entity URI identity"

This reverts commit d403150849.

---------

Signed-off-by: leilei-chen-sto <leilei@moego.pet>
Co-authored-by: leilei-chen-sto <leilei@moego.pet>
2026-08-19 20:46:00 +08:00
Qin Haojie 592c0fe036 fix(feishu): support legacy doc imports (#4130)
* fix(feishu): support legacy doc imports

Keep legacy Feishu doc resources on the doc API path instead of routing doccn tokens through docx blocks.

* test(feishu): trim legacy doc coverage

Keep legacy doc import coverage focused on public Feishu accessor behavior and remove extra mock-level assertions.
2026-08-19 19:42:52 +08:00
Qin Haojie 81eba498b4 fix(uri): server 入口校验并补全 URI,内部只用规范 URI (#4048)
* fix(uri): 明确规范 URI 与用户归属

- 在 API、MCP 等外部入口解析当前用户简写并校验 URI
- 让 Service、VikingFS、索引和 Reindex 只接收规范 URI
- 在 OVPack 中显式保存用户归属,避免 Admin 身份改变路径含义
- 移除 SDK 对非 URI 路径的隐式补全

* fix(sdk): preserve URI normalization before API calls

* fix(content): normalize write URI before routing

* fix(content): keep write policy scoped to content rules

* refactor(content): remove target wrapper validation

* refactor(uri): simplify scope validation
2026-08-19 19:02:39 +08:00
zgyandqin-ctx dc39985ad1 refactor: remove resource relation edges (#3956)
* refactor: remove resource relation edges

* fix: remove stale relation references

---------

Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-08-19 17:54:29 +08:00
baojun-zhang 31bfdc1ad0 fix: delete-account now actually removes AGFS data on disk (#4125)
viking://user is a protected namespace root in _ensure_supported_delete_namespace,
so viking_fs.rm("viking://user/", recursive=True) was silently rejected with
PermissionDeniedError. The exception was swallowed by try/except, leaving
account metadata deleted from accounts.json but all filesystem data intact.

Use _async_agfs.rm("/local/{account_id}", recursive=True) directly to bypass
the namespace guard. This also now correctly deletes _system/users.json which
was previously missed (not under viking://user/ or viking://resources/).
2026-08-19 17:19:07 +08:00
Hao Zhe c4a76d90c1 fix(resource): collect stats for queued uploads (#4118)
* fix(resource): collect stats for queued uploads

* test(resource): update task auth mock
2026-08-19 15:39:56 +08:00
agent afa5aae9a6 Revert "feat: add user-scoped memory extraction policies (#3906)" (#4122)
This reverts commit 6fc4d8fa57.
2026-08-19 15:34:05 +08:00
agent 6fc4d8fa57 feat: add user-scoped memory extraction policies (#3906)
* feat: add user-scoped memory extraction policies

* chore: leave deprecated v2 compressor unchanged

* feat: allow agent memory types for peer policies

* revert: disallow agent memory types for peer policies

* feat: complete user memory policy APIs and commit overrides

* refactor: simplify user memory policy settings

* refactor(admin): remove unused batch user settings API

* refactor(session): keep memory policy out of commit API

* refactor(memory): centralize peer memory type resolution

* fix(admin): restore user registration flow

* fix(session): preserve memory policy compatibility

* fix(session): preserve disabled legacy policy output

* revert(session): remove queue memory policy dual write
2026-08-19 15:32:37 +08:00
Hao Zhe da138de7ce feat(resources): expose context count in upload tasks
Expose upload-attributed context_count in completed add_resource tasks, with idempotent counting and API documentation.
2026-08-19 10:32:57 +08:00
Qin Haojie 67603473a5 perf(resource): speed up wait=false add-resource (#4100)
* perf(resource): make wait=false ingestion durable

Move source preparation and parser work behind the durable AddResource task
boundary, while keeping task-owned credentials private and short-lived.

* fix(feishu): preflight add-resource roots

* test(fs): align tree rel_path fakes with binding
2026-08-18 23:22:13 +08:00
MaojiaShengandqin-ctx 24cc8c6ee9 feat: refine OKF sidecar metadata handling and write protection (#4092)
* feat: implement l0-l1-okf-sidecars

* feat: implement l0-l1-okf-sidecars

* feat: implement l0-l1-okf-sidecars

* feat: implement l0-l1-okf-sidecars, fix review comments

* feat: implement l0-l1-okf-sidecars, fix review comments

* feat: implement l0-l1-okf-sidecars, fix review comments

* feat: implement l0-l1-okf-sidecars, fix review comments

* test: prune semantic sidecar coverage

---------

Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-08-18 23:21:06 +08:00
DuTaoandqin-ctx e3c8e56fea feat(vikingbot): support OpenViking remote skills (#4095)
* Vikingbot use  SKILLS

* gitignore

* 远程调用

* chore: remove unrelated generated changes

* fix: address remote skill review regressions

* test: prune remote skill tests

---------

Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-08-18 21:14:31 +08:00
t0saki 458e7fae37 docs: add a cross-integration capability reference page (#4076)
* docs: fix integration docs and comments that contradict the code

- codex: credential resolution in the default `auto` mode is env-first — `credentials.mjs`
  only falls back to `ovcli.conf` when no credential env var is set, while the docs and the
  `config.mjs` header comment claimed `ovcli.conf` wins by default. Also document
  `OPENVIKING_CREDENTIAL_SOURCE=cli`, which was undocumented.
- codex: the four hook scripts send the key as `X-API-Key` in addition to
  `Authorization: Bearer`; the README documented Bearer only.
- claude-code: the OV session id is `cc-<cc_session_id>` verbatim (`deriveHarnessSessionId`
  does no hashing), not `cc-<sha256(cc_session_id)>`.
- claude-code: `hooks.json` registers 9 hooks, not 7 — the responsibilities table was
  missing the `PreToolUse` `viking://` guard and the `PostToolUse` skill-experience hook.
- claude-code: archival is triggered client-side (the `Stop` hook commits once
  server-reported pending tokens cross `commitTokenThreshold`, default 20000, plus
  unconditional commits from `PreCompact` / `SessionEnd` / `SubagentStop`). The README
  attributed it to a server-side `auto_commit_threshold`, but
  `memory.session_auto_commit.default_enabled` is false and no plugin sends a policy.
- trae / opencode: the MCP proxy transparently exposes the full server tool set (16 tools);
  the docs listed a 4-item sample or 11-13 tools and omitted `tree` / `write` / `edit`.
- trae-cli: the installer registers the MCP server as `openviking-memory`, but the verify
  step told users to look for `openviking`.
- pi: the manual install block omitted the `pi install <dest>` registration step that the
  one-click installer runs, so a hand-copied extension is never registered.
- install.sh: `--uninstall` handles cursor, trae, trae-cn, trae-cli and zcode; the `--help`
  text still said Cursor/TRAE only.
- mcp_endpoint.py: the module docstring enumerated 13 tools and omitted `recall`,
  `list_watches` and `cancel_watch`; replaced the stale enumeration with a pointer to the
  `@mcp.tool` registrations.

* docs: add a cross-integration capability reference page

The agent-integrations section had per-integration install guides but no place
to compare integrations against each other. This adds one bilingual page that
does that, and wires it into the existing pages in both directions.

- New page `docs/{en,zh}/agent-integrations/16-capability-reference.md`: a
  dimension-first comparison of every OpenViking integration — active tool
  surface, automatic hook surface, install/credential/config layering, recall
  and injection, session and commit lifecycle (including a shutdown-path x
  harness end-state matrix), compaction takeover, write/delete boundaries,
  degradation, and a per-harness profile card for each integration.
- Sidebar: `StructuredSidebarCopy` gains an optional `topItems` field so a
  section can list flat entries next to its overview; agent-integrations uses
  it to place the new page beside the overview. Other sections are unaffected.
- Links both ways: the overview and all 14 per-integration pages link to the
  reference, and the reference links back to each integration page from its
  profile card, from the non-coding integration table, and from the custom
  agent integration paths. Section cross-references (§x.x) are real in-page
  anchor links, generated from the built heading ids.
- trae-cli is documented as TraeCode CLI 2.0 only, installed through a codex
  plugin alias; 1.0 and its standalone plugin are called out as unsupported.
- The MCP tool surface is described as 15 tools throughout, matching the
  removal of the `recall` tool in favour of `search` with `mode="context"`.
  Pages outside this change that still mention an MCP `recall` tool
  (04-codex, 12-cursor, 15-agent-plugins, guides/06-mcp-integration) need a
  follow-up sweep once that removal lands.

* docs: 更新服务端 MCP 工具面描述,简化信息并明确更新方式
2026-08-18 20:38:06 +08:00
zgy 868a9600d0 fix(mcp): return read errors from underlying fs (#4093) 2026-08-18 17:58:04 +08:00
22f0003320 Perf/reindex vector enqueue concurrency (#4071)
* perf: parallelize reindex vector enqueue

Co-authored-by: TRAE CLI <traecli@bytedance.com>
Co-authored-by: TRAE CLI <noreply@bytedance.com>

* perf: parallelize add resource vector enqueue

Co-authored-by: TRAE CLI <traecli@bytedance.com>

* fix: cancel vector enqueue siblings on failure

Co-authored-by: TRAE CLI <traecli@bytedance.com>

* refactor: clarify file vectorization concurrency config

Co-authored-by: TRAE CLI <traecli@bytedance.com>

* test: consolidate vectorization concurrency coverage

---------

Co-authored-by: TRAE CLI <traecli@bytedance.com>
Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-08-18 16:58:19 +08:00
t0sakiandTRAE CLI 1ec848e087 fix(fs): protect namespace roots from deletion (#4074)
* fix(fs): protect namespace roots from deletion

* chore: remove changelog entries

Co-authored-by: TRAE CLI <noreply@bytedance.com>

---------

Co-authored-by: TRAE CLI <noreply@bytedance.com>
2026-08-18 14:02:48 +08:00
DuTao f3202001f7 fix: improve Ark VLM error diagnostics (#4072) 2026-08-18 13:58:52 +08:00
t0saki eb5aaf78e9 feat(mcp): consolidate recall into context search (#4075) 2026-08-18 12:45:45 +08:00
zgy f6ba06bbf8 fix(mcp): guide directory read failures to list (#4056) 2026-08-18 12:27:00 +08:00
d08d9b99e6 Feat/shared temp upload decouple (#4054)
* refactor(server): decouple shared temp uploads

Remove shared-upload consumption locks and state transitions so uploads remain reusable within their account for 24 hours. Store them under the fixed internal viking://upload root, clean expired account-local directories on new shared uploads, and simplify metadata and deletion cleanup.

Co-authored-by: TRAE CLI <noreply@bytedance.com>

* feat(server): configure shared temp upload ttl

Co-authored-by: TRAE CLI <noreply@bytedance.com>

* refactor(server): share temp upload ttl

Co-authored-by: TRAE CLI <noreply@bytedance.com>

* refactor(server): rename temp upload ttl

Co-authored-by: TRAE CLI <noreply@bytedance.com>

* refactor(server): flatten shared temp uploads

Co-authored-by: TRAE CLI <noreply@bytedance.com>

* refactor(server): simplify shared upload metadata name

Co-authored-by: TRAE CLI <noreply@bytedance.com>

* refactor(server): remove legacy shared upload formats

Co-authored-by: TRAE CLI <noreply@bytedance.com>

* feat(server): allow disabling temp upload cleanup

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>

* refactor(server): timestamp shared temp upload directories

Store shared uploads under timestamp-prefixed directories and use directory names for TTL cleanup instead of storage modification times.\n\nCo-authored-by: TRAE CLI <noreply@bytedance.com>

Co-authored-by: TRAE CLI <traecli@bytedance.com>

* test(server): prune shared upload tests

---------

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>
Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-08-18 12:13:04 +08:00
dxp_wh cfe57b5e33 fix(skill): preserve nested SKILL.md files during skill import (#4055)
* fix(skill): preserve nested SKILL.md files during skill import

* test(skill): cover nested SKILL.md imports
2026-08-18 10:38:41 +08:00
MaojiaSheng e6e0d9d23a feat: show token usage in task status for add-resource (#4065) 2026-08-18 10:30:41 +08:00
t0saki 4bf438a655 fix(vectordb): encode string IDs before hashing (#3995)
* fix(vectordb): encode string IDs before hashing

* ci(cuvs-tests): run test_str_to_uint64.py in the CPU-only regression job
2026-08-17 18:47:55 +08:00
Zonas ZhouandClaude 6e77291265 feat(pdf): refactor MinerU parsing to the official file_parse API (#3953)
* feat(pdf): refactor MinerU parsing to the official file_parse API

* feat(pdf): remove mineru_api_key from configuration and examples

* feat(pdf): preflight MinerU /health during service initialization

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-08-17 13:48:49 +08:00
bot-of-qin-ctxandbot-of-qin-ctx 5de59a1141 fix(tasks): keep parent semantic refresh asynchronous (#4041)
Co-authored-by: bot-of-qin-ctx <222410531+qin-ptr@users.noreply.github.com>
2026-08-17 00:39:18 +08:00