Commit Graph
2352 Commits
Author SHA1 Message Date
bot-of-qin-ctxandqin-ctx 3693171661 fix(sdk): align batch writes with mode (#4310)
Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-08-25 15:39:24 +08:00
Wu Shuwen dbdb00bb5b fix(memory): repair multi-block patch regression (#4287) 2026-08-25 15:32:15 +08:00
Zayn JarvisandClaude Fable 5 0e77cd4eb7 feat(mcp): return media as native content blocks (#4257)
* feat(mcp): return images as native content blocks

* test(mcp): allow configured tool decorators

* feat(mcp): return audio as native content blocks

* feat(mcp): add embedded-resource download mode

* fix(mcp): bound native media reads

* fix(mcp): add actionable media download fallback

* fix(mcp): point directory reads at list, share URI suffix parsing

- directory hint now names the list tool / `ov ls` / `ov tree`
- audio MIME sniffing ignores query/fragment like the extension gate
  does, so `clip.ogg?v=2` no longer fails as an unsupported format
- bound the preflight stat fan-out with the existing read semaphore

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YXgAtkdLQZhXu4ZbHpaDqR

* fix(mcp): validate video reads before fallback

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-25 14:24:11 +08:00
MaojiaSheng 42c0ee1363 fix(semantic): reuse overview summary cache (#4307) 2026-08-25 14:13:38 +08:00
Zayn Jarvis 3321099026 fix(cli): follow terminal theme for body and muted text (#4306)
Hardcoded gray RGB made primary and secondary copy hard to read on
both light and dark terminals. Use default foreground (SGR 39) for
body text and dim (SGR 2) for muted text; leave accent colors as-is.
2026-08-25 13:59:05 +08:00
Axiomoth 41044af779 fix(embedder): 稀疏嵌入仅提交文本输入 (#4296)
* fix(embedder): downgrade sparse-capable inputs to text

Signed-off-by: Axiomoth <alearner@splrad.com>

* test(embedder): cover video input downgrade

Signed-off-by: Axiomoth <alearner@splrad.com>

* docs(embedder): clarify sparse media handling

Signed-off-by: Axiomoth <alearner@splrad.com>

---------

Signed-off-by: Axiomoth <alearner@splrad.com>
2026-08-25 11:32:41 +08:00
Axiomoth 402384e215 fix(docker): 从当前源码重新生成 Studio (#4299)
* fix(docker): rebuild Studio bundle from source

Signed-off-by: Axiomoth <alearner@splrad.com>

* fix(docker): exclude packaged Studio bundle

Signed-off-by: Axiomoth <alearner@splrad.com>

---------

Signed-off-by: Axiomoth <alearner@splrad.com>
2026-08-25 11:17:41 +08:00
Zayn Jarvis e319306337 docs: refresh WeChat group QR code (#4304) 2026-08-25 10:52:48 +08:00
Qin Haojie 234a2d9fe7 feat(fs): create default L0 on mkdir (#4277) 2026-08-24 21:28:10 +08:00
Mchenr 187657bbd0 fix(dsh): run MCP proxy as Node under Electron (#4272) 2026-08-24 21:25:47 +08:00
Qin Haojie 1c62be57b0 docs: streamline contribution guidelines (#4278) 2026-08-24 20:59:19 +08:00
Onefly 76c56acf70 docs(embedding): clarify DashScope endpoint configuration (#4154) 2026-08-24 20:46:48 +08:00
Jiahui ZhouandTRAE CLI 5a154317cd feat(retrieval): inline matched content on demand (#4261)
Co-authored-by: TRAE CLI <traecli@bytedance.com>
2026-08-24 20:40:44 +08:00
yufeng 7b0dd5e29f fix(web-studio): support viking links in directory overviews (#4271)
* fix(web-studio): open viking links in directory overview

* fix(web-studio): preserve regular overview links
2026-08-24 19:53:22 +08:00
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>
python-sdk@0.1.9
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
d1fd66eb82 fix(bot): use user-scoped resources URI in VikingSearchTool (#4214)
* fix(bot): use user-scoped resources URI in VikingSearchTool

VikingSearchTool hardcoded `viking://resources/` (shared namespace)
as the search target for resources, but user-uploaded resources are
stored under `viking://user/<user_id>/resources/`. The server correctly
treats `resources` as a standalone scope without user-path resolution,
so the shared URI returned zero results in user API key mode.

This patch adds `_current_resources_uri()` — mirroring the existing
`_current_skill_uri()` pattern — to derive the user-scoped resources
URI from the current memory URI. All three hardcoded sites are replaced:

1. `_fs_retrieval_uris()` — default root retrieval list
2. `VikingSearchTool.execute()` — sender-fanout branch
3. `VikingSearchTool.execute()` — actor-peer-id branch

Verified: Vikingbot chat API search for resources now returns correct
results instead of empty arrays.

* fix(bot): include current resource targets in retrieval

* fix(bot): use home aliases for scoped file targets

Emit current-user resource, memory, and skill targets with viking://~/ aliases instead of deriving sibling URIs from memory targets.

---------

Co-authored-by: 王旭晨 <wangxc4@chinatelecom.cn>
Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-08-24 17:02:14 +08:00
Zayn Jarvis 69dd1d6556 fix(pi-extension): key recall ledger by stable entry ids (#4237) 2026-08-24 16:50:55 +08:00
DamonDay 029e203d53 build: stop vendored leveldb from linking system tcmalloc (#4034)
third_party/leveldb-1.23 auto-detects a system tcmalloc with
check_library_exists() and links it with PUBLIC propagation. Because the
Python abi3 engine module transitively links that tcmalloc, it mixes the
tcmalloc heap with the Python allocator inside the same process, which
corrupts memory and intermittently SIGSEGVs in vectordb::Schema /
bytes_row construction. Official wheels never link tcmalloc, so this
only reproduced on machines that have libtcmalloc installed.

Force HAVE_TCMALLOC off by default (opt-in via -DHAVE_TCMALLOC=ON) so
source builds behave like the released wheels.
2026-08-24 16:39:18 +08:00
Onefly b02f602526 fix(dsh): prevent duplicate profile injection after re-seed (#4231) 2026-08-24 16:33:46 +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
bot-of-qin-ctxandqin-ctx 84156432b0 fix(ragfs): normalize localfs mkdir already exists (#4246)
Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-08-24 16:05:50 +08:00
LinQiang391 54171182da fix(ci): avoid generated branches for plugin releases (#4242) 2026-08-24 15:34:30 +08:00
baojun-zhang c66b915502 feat(ragfs): fine-grain lease-mode pathlock control (#4235)
* feat(ragfs): fine-grain lease-mode pathlock control

* fix(ragfs): fix adopted lock kinds and bounded downgrade

* fix(ragfs): fix pathlock downgrade race handling
2026-08-24 14:49:40 +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
Zayn Jarvis 167951eaa6 fix(pi-extension): persist recall injections for prompt caching (#4143)
Reapply previously injected recall blocks to historical user messages from a per-session, atomically persisted ledger. This preserves byte-stable request prefixes across turns while still performing fresh recall for the newest prompt.\n\nFixes #4137
2026-08-24 13:06:07 +08:00
yufeng e7ab26ab24 fix(docs): remove duplicate CLI API key block (#4236) 2026-08-24 12:27:54 +08:00
Nguyen Thanh Datandqin-ctx c66fee4d12 fix(ov_dream): accept a message whose content is a plain string (#4221) (#4228)
* fix(ov_dream): accept a message whose content is a plain string (#4221)

parse_messages() assumed every OpenClaw message body was a block list.
Iterating a plain string yields characters, so `"p".get("type")` raised
AttributeError out of the parser — before any session was committed, which
made one such message disable the skill for the whole workspace rather than
skip that message. The reporter measured 91 string bodies in 1609 real
messages.

Flatten the body through a helper that treats a string as text and skips
blocks that are not dicts.

* test(ov_dream): consolidate string content coverage

---------

Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-08-24 12:16:54 +08:00
Axiomoth 6e944cc3e1 fix(studio): prevent token chart axis label clipping (#4105) 2026-08-22 09:37:44 +08:00
Axiomoth 69cad83737 fix(web-studio): avoid duplicate version prefix (#4203)
Signed-off-by: Axiomoth <alearner@splrad.com>
2026-08-22 08:50:58 +08:00
ManAsWindandlinweiye 2af48624e0 docs: remove duplicate OpenClaw API key copy (#4195)
* docs: add API key blocks to agent guides

* docs: use connect agent template tokens

* docs: remove page wording from agent copy

* docs: sync English agent integration copy

* docs: remove duplicate OpenClaw API key copy

---------

Co-authored-by: linweiye <linweiye.voph@bytedance.com>
2026-08-21 21:03:30 +08:00
Zayn Jarvis 2cc7ec4724 refactor(agent-plugins): split optional MCP tools into a skill reference subdirectory (#4199)
SKILL.md now teaches only the core tool set that every supported
deployment registers; deployment-dependent tools (tree/write/edit,
watch management) move to
skills/openviking-memory/references/optional-tools.md, read only when
the session actually registered them. Legacy recall is dropped
entirely (0.4.15 folds it into search mode="context"). Adds a test
that relative markdown links inside skills resolve. Rebased onto the
viking://~ URI convention from a83b8171.
2026-08-21 19:04:26 +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
ManAsWindandlinweiye c92ad738c1 docs: refine Chinese agent integration copy (#4194)
* docs: add API key blocks to agent guides

* docs: use connect agent template tokens

* docs: remove page wording from agent copy

* docs: sync English agent integration copy

---------

Co-authored-by: linweiye <linweiye.voph@bytedance.com>
2026-08-21 17:39:29 +08:00
Tequila Sunset 9042a0254f fix(codex): configure recall compressor base URL (#3601) 2026-08-21 17:33:21 +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>
v0.4.16
2026-08-21 14:59:07 +08:00
chenjwandTRAE CLI 9a0f54b300 docs: note benchmark model configuration (#4183)
* docs: note benchmark model configuration

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

* docs: link benchmark VLM model details

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

* docs: specify benchmark embedding model

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

---------

Co-authored-by: TRAE CLI <traecli@bytedance.com>
2026-08-21 14:04:10 +08:00
DuTao 32a6aff8f9 fix(bot): make session paths portable on Windows (#4162)
* fix session id

* fix(bot): make session paths portable on Windows

* fix(bot): address portable session review feedback

* fix  pr bug
2026-08-21 12:59:31 +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
Zayn Jarvis daf5fb1774 fix(dsh): support current release candidate peers (#4169) 2026-08-20 21:24:03 +08:00