Repository navigation
refactor(api)!: 移除等待专用 timeout 参数 - #6048
Merged
Merged
Conversation
保留 wait 和客户端 HTTP 超时配置,同步服务端、SDK、CLI、MCP、插件与文档。 BREAKING CHANGE: 等待相关接口和命令不再支持单独的 timeout / --timeout 参数。
zhoujh01
approved these changes
Oct 14, 2026
9 of 10 tasks
9 tasks done
yenchang265-afk
added a commit
to yenchang265-afk/OpenViking
that referenced
this pull request
Oct 15, 2026
* feat(docs): send copy and search events to Google Analytics (volcengine#5990) The docs site has GA4 but no key events, so traffic can be measured but intent cannot. Send the actions that signal someone is about to install or integrate OpenViking: - copy_code: code block copy button, with the block language - copy_agent_prompt: AgentPrompt copy button - copy_markdown: "copy page as Markdown" - docs_search: the existing search event, now also sent to GA trackEvent still reports to Viewer-Counter and additionally calls gtag when it is loaded; GA event names use underscores. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(integrations): add Microsoft Agent Framework context provider (volcengine#5578) * feat(integrations): add Microsoft Agent Framework context provider Signed-off-by: Hao Zhe <haozhe4547@gmail.com> * fix(agent-framework): preserve streamed loop capture Signed-off-by: Hao Zhe <haozhe4547@gmail.com> * feat(agent-framework): add capture and commit policies Signed-off-by: Hao Zhe <haozhe4547@gmail.com> --------- Signed-off-by: Hao Zhe <haozhe4547@gmail.com> * feat(gateway): embed runtime and separate management access (volcengine#5960) * feat(gateway): embed runtime with independent management permissions Co-authored-by: TRAE CLI <traecli@bytedance.com> * feat(studio): support gateway hosts and management-key access Co-authored-by: TRAE CLI <traecli@bytedance.com> * feat(gateway): add init setup and single-port deployment guides Co-authored-by: TRAE CLI <traecli@bytedance.com> * fix(gateway): keep data plane up when OpenViking is unavailable - Delete a gateway key only on an explicit OpenViking 401; unreachable, 5xx and identity-less /health responses let the request through with a revocation_check_unavailable degradation. - v6 migration keeps v5 request URLs for path-prefixed bases (https://openrouter.ai/api -> .../api/v1); bases already ending in a version segment such as /api/paas/v4 are left as entered. - Replace record_request bookkeeping with log(user_id) + save(ttl); capture paused rows are now written. Delete management rows before kernel scopes. - /test reports upstream_key_missing without sending a request; re-importing VLM settings refreshes source fields only; degraded probes back off. - Host-agnostic create_app plus a small host API (seed_defaults, import_vlm_objects, delete_data); standalone startup moves to standalone.py. Management routes are registered per object. - Server injects the gateway app into DeletionService, forwards WebSockets to the gateway, shares ScopedRoute with /mcp and skips the version gate. - VLM import defaults provider to openai, strips OpenAI-compatible LiteLLM route prefixes and skips non-OpenAI routes; Kimi/GLM normalization is shared with the VLM backends. * refactor(studio): derive gateway permissions from /access - Keep one management-key event; drop the access-changed/expired events, local import-forbidden state and redundant invalidations. - Derive readOnly and canIssueForOthers once in useGateway; choose the navigation list by host type; remove unreachable probe branches. - Changing an upstream address requires re-entering the API key and header values; issuing for yourself never asks to paste a key. - Map upstream_key_missing, litellm_unsupported_route and revocation_check_unavailable; unify key terminology and plural forms. * docs(gateway): restructure guides and harden upgrade path - Give each fact one home: concepts and quick start in 15, operations in 22, the API contract (permissions, reasons, /test results) in 25. - Split the quick start into local and remote paths and restore the memory check; redraw the architecture diagram for both deployments. - Helm keeps gateway.existingSecret for the encryption key and adds gateway.managementKeySecret; Compose no longer passes an empty management key. - The setup wizard drops removed gateway fields and stale 1935 public URLs and revisits gateway access when switching between local and remote. * docs(gateway): rewrite gateway guides for readability Rewrite the zh and en gateway guides, API reference and Helm notes from the reader's side: one home per fact, plain wording, behaviour checked against the code (503 statuses, management key without account_id, key removal timing, read tool requirement for catalogs, schema errors on downgrade). * fix(studio): polish gateway copy and states found in a browser walkthrough - Rewrite zh-CN and en gateway strings around the next step. - Sign-in separates a rejected OpenViking API key from an unreachable OpenViking or gateway. - Upstream editor: fix buttons sit in the notice action, no duplicate default-address link, saved-secret badge drops once the address changes. - Read-only editors hide placeholders and add/remove controls. - The issue dialog only asks to paste a key when the server says it cannot read it; older servers omit api_key_available. - Import notice omits empty counts; overview wording fits imported-only upstreams. * fix(gateway): ignore removed v0.5.0 gateway fields with a warning v0.5.0 configs and the old Helm chart write host, port, workers, url, openviking_url and admin_token_env into ov.conf. Rejecting them stopped the whole OpenViking server, not just the gateway, after an upgrade. Drop them and log a migration hint instead; unknown fields still fail validation. The old sidecar command keeps failing on its own because the standalone CLI no longer accepts ov.conf, so the server cannot end up beside a second gateway on the same store. * fix(gateway): retry the WAL switch when workers open a store together Switching a new or v5 SQLite store to WAL needs an exclusive lock, and SQLite reports a concurrent switch as "database is locked" immediately instead of waiting for the busy timeout. With several workers starting at once, one of them could fail on first start or on the v5 upgrade. * refactor(gateway): one config schema and reuse OpenViking encryption - Embedded (ov.conf "gateway") and standalone (gateway.conf) share one schema; a non-empty OPENVIKING_GATEWAY_<FIELD> overrides the file on both hosts. encryption_key_env joins the removed fields that are ignored with a warning. - openviking-gateway takes only --config, looks up gateway.conf like the server looks up ov.conf, and gains an "init" subcommand that probes OpenViking and writes ~/.openviking/gateway.conf (0600). - Stored values are encrypted with openviking.crypto when OpenViking encryption is enabled (the server's settings when embedded, an "encryption" block in gateway.conf when standalone) and kept as plain JSON otherwise. The gateway's own Fernet key file is gone. - The v6 migration re-encodes v0.5 Fernet data in every table using the old key from OPENVIKING_GATEWAY_ENCRYPTION_KEY or encryption.key, waiting up to ten minutes for the migration lock, and refuses to start without it. * chore(deploy): pass gateway secrets through one optional Secret gateway.existingSecret becomes optional and feeds OPENVIKING_GATEWAY_MANAGEMENT_KEY plus, for the upgrade release only, OPENVIKING_GATEWAY_ENCRYPTION_KEY. managementKeySecret and the configmap $VAR injection are removed; Compose passes both variables. * docs(gateway): document gateway.conf, init and encryption reuse Describe the shared field table, the environment override rule, both init paths, encryption following OpenViking, and the one-time v0.5 data migration. Studio hints point at gateway.conf and the new variables. * fix(gateway): keep init non-interactive-safe and load the root key at startup - openviking-gateway init keeps a "$VAR" OpenViking URL as written instead of forcing a literal one, and exits on an invalid URL when there is no terminal instead of prompting forever. - The standalone CLI loads the encryption root key once before uvicorn starts workers, so bad Vault/KMS/local settings stop startup and workers never race to create the local key file. * refactor(gateway): serve every gateway URL under /gateway The server mounts the gateway app once at /gateway instead of forwarding /v1, /api/v3, /api/compatible/v1, /gateway and /api/v1/admin/gateway, so it no longer claims OpenAI-style root paths. Model APIs move to /gateway/v1, /gateway/api/v3 and /gateway/api/compatible/v1, the management API to /gateway/admin, and the upload relay stays at /gateway/uploads. The standalone host mounts the gateway the same way and keeps Studio, the OpenViking allowlist and /health at the root. public_url is the external origin; the gateway appends its mount path. Route labels in metrics and request logs keep the mount prefix. * docs(gateway): point clients and Studio at the /gateway prefix Studio calls /gateway/admin and renders client snippets from the /gateway base. Guides, API reference, Helm notes and the migration section use /gateway/v1, /gateway (Claude Code) and /gateway/api/v3. * docs(gateway): link the animated walkthrough on the website * docs(gateway): drop the language path from the walkthrough link * docs(gateway): use the docs-site domain for the walkthrough link * fix(gateway): address review findings on availability, issuing and config - Skip the per-request identity check while OpenViking is already marked unavailable, and clear that mark on any successful identify; probe every second until OpenViking first answers so embedded startup does not leave recall off for up to a minute. - Keep a configured x-api-key header on chat and responses upstreams. - Require root to name the user it issues a key for (user_required) and look up only that user's credential. - Read the tool catalog for root with a key issued in the account, since OpenViking refuses root on /mcp. - Ignore kubelet service-link values (tcp://, udp://) in environment overrides. * docs(gateway): fix Studio reasons, address hints and operator notes Studio shows the unreachable-OpenViking text, gives host-specific public_url hints, and keeps the dedicated unreachable card for standalone gateways. Docs drop the unreleased managementKeySecret note and the unconditional workers advice, state the config lookup precisely, and document user_required and how root reads the tool list. * feat(gateway): enable the embedded gateway from the container environment Compose passes OPENVIKING_GATEWAY_ENABLED, so one line in .env (or -e on docker run) turns the gateway on without editing ov.conf. An embedded gateway without its own public_url now uses the server's public address (OPENVIKING_PUBLIC_BASE_URL, then server.public_base_url), the same one MCP upload links use, so containers configure a single external address. * feat(studio): enable the embedded gateway from the Gateway page The Gateway entry now shows for every signed-in user. When the gateway is off, root on a server with writable ov.conf gets an Enable button: Studio writes gateway.enabled (and optionally a generated ovgm_ management key, shown once) through the existing configuration API, restarts the server and opens the gateway. Multi-worker servers get a manual-restart notice, read-only ov.conf shows the environment and Helm alternatives, rollbacks and revision conflicts are reported, and other users are told to ask the deployer. No backend changes. * fix(retrieval): bound session search intent analysis (volcengine#6007) * fix(retrieval): bound session search intent analysis * fix(retrieval): expose intent analysis fallback status * fix(retrieval): keep intent timeout change focused * test(retrieval): focus intent fallback coverage * feat(cache): 增加顶层 service_name 配置, 删除 namespace/cache_key_prefix ,使用service_name 统一管理 (volcengine#6011) * docs: update readme (volcengine#6021) * refactor(cache): 统一 cache key format (volcengine#6014) * refactor(model): 统一 VLM 与 Embedding 重试策略 (volcengine#5950) * refactor(vlm): centralize retry handling * test(vlm): 补充统一重试边界回归 * refactor(vlm): 收紧统一重试层改动范围 撤回全局错误分类和无关 API 扩张,使本次改造仅聚焦 VLM 重试职责收拢。 * refactor(embedding): 统一模型重试职责 将重试决策集中到 RetryEmbedder,避免 Provider 与 SDK 重试叠乘,同时保持组合模型和账号资源语义。 * fix(embedding): 恢复 Gemini 429 重试 --------- Co-authored-by: zhanghe.1216 <@bytedance.com> * fix(storage): 保持写入锁直到异步索引完成 (volcengine#6016) * fix: 延长 content write 文件锁至异步索引完成 * fix: 延长 batch write 批量锁至异步索引完成 --------- Co-authored-by: zhanghe.1216 <@bytedance.com> * fix(langchain): recognize SDK system health flag (volcengine#5878) Co-authored-by: r266-tech <r266-tech@users.noreply.github.com> * fix(storage): sanitize persisted search tags on index writes (volcengine#5862) * fix(storage): sanitize persisted search tags on index writes * test(api): settle ancestor refreshes before directory copy * fix(memory-plugin): carry OPENVIKING_EXTRA_HEADERS on the runtime path and fail on a non-JSON 2xx (volcengine#5988) * fix(memory-plugin): send the operator's gateway headers on the runtime path OPENVIKING_EXTRA_HEADERS only reached the stdio MCP proxies (volcengine#5065). The turn-hook path goes through createOvHttp, which never consulted the environment, so a harness behind an authenticating gateway sent its captures and recalls without the headers the gateway requires. createOvHttp now falls back to parseExtraHeaders(process.env.OPENVIKING_EXTRA_HEADERS) when the caller passes no map, which keeps the MCP proxies' explicit map authoritative and gives every other harness the documented escape hatch. The same scenario exposed a second problem: a gateway answers a header-less request with its login page at 200/text-html, and the client read only the status, so the harness reported a connected server while every request went to that page. A 2xx whose body is not JSON and whose content-type is not JSON is now a failure. Verified against a self-hosted deployment behind Cloudflare Access through dsh's own client: /health, session create, message and commit all 200 with the gateway headers; without them the same client now reports ok=false instead of ok=true. tests: three cases in ov-http.test.mjs (env headers on the wire, an explicit map still wins, a 200/text-html is a failure). node --test examples/memory-plugin-shared/*.test.mjs -> 545 passed, 0 failed. * chore(memory-plugin): move every distributed plugin version for the shared-lib change The shared runtime in examples/memory-plugin-shared/lib reaches all six distributed plugins, and hosts install by the version string in each manifest, so check-plugin-version-bumps.sh requires each of them to move. Bump the manifests, the agent-hook host manifests that pair with plugin.json, the dsh wire version reported by config.mjs, and the two lockfiles that `npm ci` validates. * chore(memory-plugin): take the version numbers past what main already carries Merged main into the branch: volcengine#5994 bumped agent-hook, opencode and pi while this PR was open, so the first bump landed on the same strings main now has and the version check still saw "changed but not moved". Move those three one patch further (and pi's lockfile with it); the three others already differ from main. * perf(retrieval): align default intent planner with compact v4 prompt (volcengine#6039) * perf(retrieval): compact default intent planner output * test(retrieval): keep default planner aligned with v4 * fix(api): 修正输入错误与模型失败的 HTTP 状态码 (volcengine#6045) 将非法正则、Skill YAML、ZIP 和搜索字符归为参数错误;保留模型原始异常类型,同类失败返回对应状态,混合失败保留 500。 * fix(svg): 补齐 SVG 转 PNG 所需的运行依赖 (volcengine#6049) * fix(svg): 补齐 SVG 转 PNG 所需的运行依赖 补充 CairoSVG、Docker Cairo 系统库和安装说明,避免正常 SVG 因依赖缺失导入失败。 Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com> * chore(svg): 移除部署文档改动 Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com> --------- Co-authored-by: qin-ptr <222410531+qin-ptr@users.noreply.github.com> Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com> * refactor(api)!: 移除等待专用 timeout 参数 (volcengine#6048) * refactor(api)!: 移除等待专用 timeout 参数 保留 wait 和客户端 HTTP 超时配置,同步服务端、SDK、CLI、MCP、插件与文档。 BREAKING CHANGE: 等待相关接口和命令不再支持单独的 timeout / --timeout 参数。 * refactor: 清理等待适配与过时测试 * feat(cli): support list and context search modes (volcengine#5951) * feat(cli): support list and context search modes * fix(cli): surface context retrieval failures * test(cli): consolidate search mode contract coverage --------- Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com> * fix(snapshot): 复用外层目录锁完成加密快照恢复 (volcengine#6052) Co-authored-by: qin-ptr <222410531+qin-ptr@users.noreply.github.com> Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com> * test(queuefs): support script-aware cache mocks (volcengine#6055) Co-authored-by: TRAE CLI <traecli@bytedance.com> * fix(openwebui): validate session IDs before forwarding requests (volcengine#6059) Reject URL syntax and empty or dot-only path segments at the session status tool boundary so callers cannot alter the upstream endpoint. * fix(ci): 修正 API 契约断言和工作流配置 (volcengine#6062) 对齐现有 API 契约与 SVG 支持,避免旧断言阻塞后续集成检查。 修复 pnpm 安装策略冲突、测试数据版本检查误报和 Pages 并发部署冲突。 * fix(memory): preserve Markdown structure in resource links (volcengine#6054) * fix: 兼容索引 ACL 列表中的空字符串 (volcengine#6067) * Feat/redis mysql account store (volcengine#5955) * feat(account-store): add MySQL and Redis providers * fix(account-store): harden distributed providers * fix(mysql): require compatible SQLAlchemy version * fix(mysql): lock trusted identity provisioning * fix(redis): harden account cache consistency * refactor(account-store): simplify provider contract coverage * fix(account-store): preserve fresh user lookup * fix(mysql): validate account identifier lengths * test(account-store): keep shared auth coverage in base * test(account-store): validate configured provider * fix(account-store): implement keyless create_account for distributed providers Main's volcengine#5933 added the abstract AccountStore.create_account to support trusted keyless identity provisioning. Implement it in the MySQL and Redis/MySQL providers so they remain instantiable and preserve the file provider's keyless-admin creation semantics. * fix(account-store): isolate providers by service name * fix(account-store): bound identity and credential history * feat(account-store): support Redis deployment topologies * fix(account-store): handle Redis TLS and test dependencies * test(account-store): consolidate provider contract coverage --------- Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com> * docs: 新增数据组织指引,并支持 MCP add_resource parent 自动建目录 (volcengine#6060) * test(queuefs): support script-aware cache mocks Co-authored-by: TRAE CLI <traecli@bytedance.com> * docs: add 23-data-organize.md guide Co-authored-by: TRAE CLI <traecli@bytedance.com> * fix(mcp): 内联资源目录约定,移除运行时不可读的文档引用 Co-authored-by: TRAE CLI <traecli@bytedance.com> * docs(data-organize): 补充日历路径变量提示,projects 行移至表末并强调可选 Co-authored-by: TRAE CLI <traecli@bytedance.com> --------- Co-authored-by: TRAE CLI <traecli@bytedance.com> * fix(web-studio): stop sending the wait timeout the server removed Upstream volcengine#6048 removed the wait-only timeout parameter, but Studio still sent it: with "Wait for processing" and a timeout filled in, the add-resource form posted `timeout`, which AddResourceRequest now rejects with 422, and the terminal's /wait passed a body the regenerated client types as never. Drop the Wait Timeout field and its strings, and make /wait take no arguments (anything after it shows the usage). HTTP request timeouts stay the client's setting, as upstream documents. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(docker): drop the PathLock namespace removed upstream Upstream volcengine#6011 replaced storage.agfs.pathlock.namespace with the top-level service_name, and the RAGFS config loader now rejects the old field. Remove it from the compose ov.conf example and the Redis profile snippet, and note that service_name namespaces the Redis keys. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ragfs): build the cached write_from_path test with a service name Upstream volcengine#6014 replaced CacheNamespace with a plain service name in MountableFS::with_cache_runtime, so the fork's streaming-I/O cache test no longer compiled. Pass the name directly, as upstream's tests do. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(web-studio): drop the WaitRequest re-export the client no longer has Upstream volcengine#6048 removed WaitRequest from the generated types but left it in index.ts, which fails type-checking. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(config): restore the S3 multipart settings lost in the upstream merge Stage 3 resolved agfs_config.py by taking upstream's file whole, which also dropped the fork's multipart_threshold_bytes and multipart_part_size_bytes S3 fields. Pydantic ignores unknown fields, so configured multipart settings would silently stop reaching s3fs. Restore both fields; test_config_validation covers them again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Signed-off-by: Hao Zhe <haozhe4547@gmail.com> Co-authored-by: Zayn Jarvis <zaynjarvis@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: z1gon <130889443+ehz0ah@users.noreply.github.com> Co-authored-by: t0saki <15712521+t0saki@users.noreply.github.com> Co-authored-by: Lusen Dong <cicomaple@gmail.com> Co-authored-by: baojun-zhang <zhangbaojun.1@bytedance.com> Co-authored-by: MaojiaSheng <shengmaojia@bytedance.com> Co-authored-by: hezhang-1216 <zhanghe.1216@bytedance.com> Co-authored-by: Evo <r2668940489@gmail.com> Co-authored-by: r266-tech <r266-tech@users.noreply.github.com> Co-authored-by: Xinmin Zeng <135568692+fancyboi999@users.noreply.github.com> Co-authored-by: xiebaiyuan <xiebaiyuan@139.com> Co-authored-by: Qin Haojie <qinhaojie.exe@bytedance.com> Co-authored-by: bot-of-qin-ctx <qin_haojie@qq.com> Co-authored-by: qin-ptr <222410531+qin-ptr@users.noreply.github.com> Co-authored-by: dingben <1162833047@qq.com> Co-authored-by: TRAE CLI <traecli@bytedance.com> Co-authored-by: zhanggaoyuan <1670519171@qq.com> Co-authored-by: chuanbao666 <sunchuanbao@bytedance.com> Co-authored-by: runyunzhou <164479727+runyunzhou@users.noreply.github.com> Co-authored-by: root <root@DESKTOP-97A9VQ8.localdomain>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
移除各接口等待专用的
timeout,保留wait和客户端 HTTP 超时配置,避免同一次请求同时配置两套等待期限。以写入同一个文件并等待索引完成为例:
服务端不再接收或向队列传递本次等待的期限;完成、失败和取消仍沿用原有处理流程。
wait_processed()不再接收参数,CLI 的--wait保留,等待相关命令的--timeout删除。Human Involvement
Related Issue
无。
Type of Change
Changes Made
Testing
已通过:Python SDK 87 项、TypeScript SDK 59 项及类型检查、Go SDK 测试、Rust CLI 编译检查及请求体定向测试、OpenClaw 213 项及类型检查。服务端请求等待、FS、队列、写入和任务计时的定向检查通过;Python 语法、相关 Ruff 和
git diff --check通过。服务端集成测试未全绿,未勾选全部单测通过。未新增测试文件或单元测试函数。
Checklist
Screenshots (if applicable)
不适用。
Additional Notes
调用方需移除这些接口的
timeout/--timeout;仍需调整 HTTP 请求时限时,使用客户端配置。内部任务、网络请求和清理流程自身的超时保留。