Repository navigation
docs: 新增数据组织指引,并支持 MCP add_resource parent 自动建目录 - #6060
Merged
Merged
Conversation
Co-authored-by: TRAE CLI <traecli@bytedance.com>
…edance/workspace/github.com/OpenViking Co-authored-by: TRAE CLI <traecli@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>
Co-authored-by: TRAE CLI <traecli@bytedance.com>
MaojiaSheng
marked this pull request as ready for review
October 14, 2026 12:24
ZaynJarvis
approved these changes
Oct 14, 2026
Co-authored-by: TRAE CLI <traecli@bytedance.com>
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
新增《数据组织指引》文档,并对齐 MCP
add_resource在parent场景下的行为与文档说明。资源目录此前缺少统一约定,不同 Agent 可能各自创建
doc/docs/documents/pdfs等同义目录;本 PR 新增中英文指引,规定 Resource / Memory / Skill 的组织边界、可见范围、推荐目录命名(repos/、docs/、sites/、datasets/等)以及parent/to的选用规则。同时修复 MCPadd_resource传入parent时未自动创建父目录的问题,并同步更新 MCP 工具文档中add_resource的参数说明(parent/tags/tag_mode)。Human Involvement
Related Issue
无。
Type of Change
Changes Made
文档
docs/zh/guides/23-data-organize.md与docs/en/guides/23-data-organize.md:Resource 数据组织指引,覆盖:viking://resources/(account 共享)、viking://~/resources/(身份私有)、viking://~/peers/<peer>/resources/projects/<project>/、repos/、docs/、sites/、wiki/、datasets/、media/、artifacts/、items/、people/、inbox/parent、固定来源同步用精确to;默认添加目录配置user_config_defaults.add_targets.resource_uriRESOURCE_POLICY.md、可见范围不明时写入viking://~/resources/inbox/docs-sections.ts的 "Manage context / 组织与维护上下文" 分组注册新页面docs/{zh,en}/api/02-resources.md顶部加入指向新指引的链接docs/{zh,en}/guides/06-mcp-integration.md:补充add_resource的parent、tags/tag_mode参数说明(同时随上游移除了write/edit的timeout参数文档)agent-plugins/skills/openviking-memory/SKILL.md:增加 "File resources deliberately" 小节,提示 Memory 不适用 Resource 目录规则、添加资源前先遵循现有布局与 account 策略代码
openviking/server/mcp_endpoint.pyadd_resource传入parent时以create_parent=True调用 ingest,缺失的父目录会自动创建,与文档中 "MCP 的parent会自动创建目录" 的承诺一致parent目录自动创建、无法判断可见范围时默认viking://~/resources/inbox,并把资源目录约定(约定目录名、添加前先检查、复用已有目录)直接内联到工具描述中,避免引用 agent 运行时无法读取的仓库内文档路径openviking/server/resource_ingest.py:临时文件上传(temp_file_id)分支同样透传create_parent=bool(parent)测试
tests/server/test_mcp_endpoint.py:断言远程导入与临时文件导入两条路径均转发create_parent is Truetests/server/test_mcp_parse_mode.py:断言 MCP schema 不暴露create_parent(该行为对 MCP 调用方隐式生效)Testing
说明:新增/修改的断言已随 PR 提交;本次提交时本地未运行完整 pytest(提交时按作者要求跳过),CI 将在 Linux 上验证。
Checklist
Additional Notes
parent的 MCP 调用:此前父目录不存在会失败,现在自动创建;REST/SDK 侧仍需显式create_parent=true,语义不变。