Memories 技術文件
本文說明目前實現的儲存、信任邊界、本機授權、託管 Center、密封秘密、檢索資料流、雲物件同步和桌面狀態邊界。它與 SECURITY.md、docs/architecture.md、docs/authorization.md 和 docs/center.md 描述的是同一套行為。儲存格式版本是 1。這是開發軟體,測試透過並不等於獨立安全稽核。
儲存與信任邊界
本機資料庫的表是 header、state 和 checkpoints。除格式後設資料、鹽和行序號外,值都是帶關聯資料的密文。日誌裡同樣是密文。沒有持久化的明文全文索引。
格式頭的 version 必須是 1,否則開啟失敗。使用者密碼經 Argon2id(版本 0x13,64 MiB 記憶體,3 次迭代,並行度 1)和 16 位元組鹽匯出 32 位元組金鑰。該金鑰包裹隨機主金鑰,關聯資料為 memories/master/v1。主金鑰加密狀態和本機檢查點。對稱加密使用 XChaCha20-Poly1305。
每個權限紀元有自己的保險庫金鑰。每個修訂有一把隨機資料金鑰,由該紀元金鑰包裹。內容序列化後拆成單獨認證的 256 KiB 塊,塊的位置和總塊數進入關聯資料。修訂簽章覆蓋資產 ID、父版本、策略頭、墓碑標誌、密文和裝置憑證。簽章演算法是 Ed25519。
修改先在複製狀態上準備,再把加密狀態和檢查點放進同一個 SQLite 交易提交,synchronous=FULL。讀取和執行意圖在交付前提交。磁碟失敗因此拒絕交付;意圖提交後崩潰可能留下未知結果。同一資料目錄用作業系統排他鎖限制為一個協作寫入者。初始化先在同目錄寫完資料庫、關閉並同步,再發布到目標位置,不覆蓋已有目標。每臺裝置使用自己的庫。把正在使用的 SQLite 檔案交給雲端硬碟用戶端同步,不能提供多裝置交易安全。
使用者的 Ed25519 金鑰為裝置的 Ed25519 簽章金鑰和 X25519 交換金鑰頒發憑證。憑證本身不夠:每個保險庫策略還要明確授權裝置。同一使用者的不同裝置金鑰互相獨立。初始使用者簽章權能只在認證且面向收件人加密的批准包裡交給已批准的個人裝置。裝置被吊銷後,使用者身分金鑰不能繞過該保險庫的裝置允許清單。
傳輸信封包含格式版本、傳送裝置金鑰、收件人交換金鑰、臨時 X25519 公鑰、AEAD 承載資料和 Ed25519 簽章。傳輸金鑰由 HKDF 匯出。收件人身分和臨時金鑰被認證。加入裝置使用會過期的簽章請求,並顯式固定批准裝置的公鑰。請求只在成功提交後消耗。批准用的指紋是完整 SHA-256。清單裡縮短顯示的值不能單獨作為批准依據。
策略是簽章的線性歷史,包含成員、角色、裝置允許清單、只增不減的吊銷集合和紀元。角色檢查使用前一條策略。普通使用者可以為自己的身分再授權一臺裝置,而不改變成員資格。Admin 或 Owner 才能邀請成員、批准加入和為成員授權裝置。Admin 可以改 Admin、Editor 和 Reader 的成員,不能把任何人改成 Owner,也不能修改已有 Owner、吊銷裝置或轉移所有權。Owner 可以。所有權轉移保持恰好一個 Owner。策略校驗會拒絕 Admin 對 Owner 成員或吊銷集合的修改。
資產歷史是內容定址的有向無環圖。一個資產有多個尚未被消耗的修訂時就是衝突。解決修訂必須點名全部可見父版本。墓碑讓資產離開目前檢視,但不刪除歷史。
備份在獨立的 Argon2id 和 AEAD 信封下儲存簽章的本機狀態和恢復材料。恢復生成新的裝置金鑰和新的保險庫 ID,保留目前內容和衝突頭,並把原始簽章歷史放進加密的唯讀封存。恢復不宣稱舊的共享成員資格仍然有效。裝置專用庫、雲授權和雲收發佇列不進入備份。
下列情況在設計的保護範圍內:中繼讀取或偽造資產內容;在明確核對指紋之後替換對端身分;修改已認證的密文;在沒有本機密碼時讀取複製走的資料庫;讀者偽造寫入;管理員更改所有權;已吊銷裝置用使用者身分金鑰給自己簽發新的授權裝置;CLI 或 MCP 意外列印認證資料、在指令列接受密碼,或讓 MCP 能力繼承終端提權;未被發現地修改簽章修訂或稽核、出現鏈缺口,以及相對剩餘資料庫狀態截斷檢查點。
下列情況在邊界之外,文件不把它們說成已解決:
- 被攻破的終端、作業系統管理員、已授權的惡意程式、記憶體檢查、鍵盤記錄,以及使用者有意複製明文。Rust 擁有的金鑰緩衝會清零。作業系統交換區、崩潰傾印、依賴庫配置和 Dart 記憶體回收字串沒有擦除保證。桌面端沒有硬體金鑰儲存。
- 中繼能觀察流量後設資料、阻斷連線、自行記錄密文、延遲吊銷或分割裝置。隨儲存庫提供的中繼伺服器不寫資產,但不能強迫一個惡意伺服器不記錄流量。中繼不為離線裝置排隊。
- 離線吊銷不能擦除過去的明文、金鑰或備份。尚未收到吊銷的終端仍能使用舊的本機副本。
- 稽核證明的是相對已知狀態的簽章內容和連續性,不是被攻破的裝置記錄了每一次存取。用一份更舊但內部一致的備份替換整個資料庫和本機證據時,若沒有更新的對端檢查點或外部錨點,就無法發現。沒有可信時間戳服務。
- 同一作業系統使用者的其他處理程序位於本機帳戶邊界之內。IPC 認證的是作業系統使用者。終端提權額外使用父處理程序 PID。這既不是針對同一使用者惡意處理程序的隔離,也不是不受 PID 複用影響的持久工作階段身分。
- 可執行檔案指紋在啟動前檢查。沒有作業系統沙箱、強制程式碼簽章、原子檔案控制代碼執行或子孫處理程序遏制。
- 剪貼簿複製、匯出的檔案,以及使用者明確要求複製的認證資料,會按使用者操作離開加密庫。複製後內容在鎖定之後仍然存在,作業系統歷史或其他應用程式可能保留它們。
本機 IPC 與授權
service::Request 是共享的型別化操作介面,用蛇形 op 區分。未知的頂層欄位會被拒絕。本機 IPC 使用大端 32 位長度前綴的 JSON 幀與版本 1 包裝;可選的 HTTP/WebSocket 監聽與中繼 RPC 共用 WebSocket 二進位 JSON 幀(權杖認證)。桌面遠端在解鎖/提權後提供與本機 IPC 相同的操作面(ws:remote / relay:remote);手機 FFI/Share 仍有平台拒絕清單。詳見 docs/remote-daemon.md 與 SECURITY.md。可選的授權中心([[centers]])禁止本機自舉。票據模式簽發登記、MCP 授權和解鎖票據;託管模式把內容放到 Center 的伺服器加密庫。見下文,以及 docs/center.md 和 docs/authorization.md。
常駐程式只服務目前作業系統使用者。Windows 使用命名管線,Linux 和 macOS 使用 Unix 通訊端。IPC 最多接受 16 個併發用戶端。Windows 命名管線的幀讀取仍是阻塞的:停滯的同使用者用戶端會佔用這些名額,但一個停滯的用戶端或雲傳輸不會堵住所有其他連線。Unix 幀 I/O 有截止時間。持有寫入鎖的服務操作,包括受信任的子處理程序執行,仍然循序執行。
普通解鎖空閒 15 分鐘後失效。sudo 使用同一個本機密碼,最長 15 分鐘,空閒 5 分鐘後失效,範圍是發出指令的終端父處理程序。鎖定或重啟清除提權。完全鎖定時的嘗試會限速,但不寫入持久簽章稽核。已解鎖且有可用本機簽章身分時,失敗操作會被稽核。意圖在交付前提交;突然崩潰留下的是已提交的意圖,而不是編造的結果。
MCP 授權是本機持有者能力,寫到呼叫者指定的檔案,不在終端列印。mcp grant 的 --minutes 決定有效期,--write 才允許建立普通記憶。mcp serve --grant-file 從該檔案讀取能力,並以 stdio 上的 MCP 2024-11-05 提供工具:memory_search、memory_retrieve、memory_ask、memory_read、memory_read_revision、memory_history、memory_diff、memory_write、memory_delete、card_write、card_graph、card_link。每次呼叫都帶授權中的保險庫,並在分發前單獨檢查能力。
MCP 不能繼承終端提權。它不能讀取私人記憶、檔案或認證資料,不能執行處理程序、遠端工作階段、環回代理或密碼學作業,不能做保險庫成員管理,也不能請求 DesktopStatus。鎖定會清掉記憶體中的授權,未過期的在解鎖後恢復,鎖定本身不刪除它們。授權服務的簽發、清單、撤銷、申請和領取可以由 MCP 工具呼叫,但仍使用 MCP 能力本身,不繼承終端提權,也不使用 Center 管理員 bearer。普通讀取不解析 {{secret:标签}}。card_write 不攜帶秘密對映,所以更新含有秘密引用的卡片會在校驗時失敗。引用的短 ID 只縮短型別化的認證資料 ID,正文中的標記保持不變。
otp_code 實現 RFC 6238 的 TOTP 和 RFC 4226 的 HOTP。HOTP 在傳回驗證碼的同一次提交裡儲存遞增後的計數器。parse_otp_import 接受 otpauth:// 和 Google Authenticator 的 otpauth-migration://offline?data=...,並把帳戶解析成 TOTP 或 HOTP 卡片。型別寫在 URI 主機、type 參數或遷移資料裡時按該值辨識;沒寫型別時,帶計數器的是 HOTP,否則是 TOTP。呼叫方不需要再另選型別。指令列的 --image 先用 rqrr 從圖片裡解碼這兩種 URI,再走同一條匯入路徑;URI 和 --image 不能同時給出。多張卡片時 --title 只作為標題前綴,--id 只能替換一張卡片。手機相機不匯入這兩種 OTP QR 碼。託管裝置配對的掃碼是另一條路徑,見下文。卡片修訂還可以帶可選的別名、備註和分類;更新時省略這些欄位會保留原值,空字串會清除。種子不進入搜尋或 MCP。TOTP 依賴本機時鐘正確。生成結果是經過授權的短時驗證碼,不是種子匯出;稽核不記錄驗證碼或種子。
credential_copy 是認證資料輸出限制的明確例外。它要求本機提權,先提交稽核意圖,再把 UTF-8 明文交給剪貼簿用戶端。CLI 只在系統剪貼簿寫入成功後列印 {"copied":true}。MCP 不能請求複製。稽核記錄的是 credential.copy 和交付意圖,不是作業系統剪貼簿的成功回條。
手機 ABI 宣告在 crates/ffi/memories.h。控制代碼是數字登記 ID,不是裸 Rust 指標。傳回的字串用 memories_free 釋放一次。非法 JSON 產生通用錯誤,不回顯輸入。memories_lock_all 在應用程式進入背景時推進全域鎖世代,並抑制遲到的在途回應,同時丟掉全部託管工作階段。手機路徑不包含處理程序執行、本機 MCP 授權建立、本機授權管理和權限申請 RPC。連線託管 Center 的 hosted_* 呼叫是另一條路徑:內容只開放清單、讀取,以及寫入 kind = credential。
密碼學作業在解析短 ID 之前檢查批准摘要,因此摘要綁定的是呼叫者看到的引用。服務檢查本機提權和保險庫存取,只解析認證資料資產,提交執行意圖,然後呼叫共享執行器。執行器複查工具,複製並核對輸入,在僅所有者可存取的工作區裡物化認證資料,不用外殼執行指令,抑制工具輸出,只發布成功的產物。佔位符只替換路徑。MCP 允許清單和手機 FFI 拒絕處理程序作業。
授權、權限申請、託管與密封秘密
本機授權和託管 Center 使用同一套角色上限。Reader 最大 read,Editor 最大 read_write,Admin 最大 read_write_delete,Owner 最大 allow_all。省略範圍是 read。Reader 和 Editor 不能簽發或轉授。簽發同時受角色上限和呼叫者所持授權的範圍約束,不能跨保險庫,不能比父授權活得更久。期限是 1–60 分鐘。成員直接簽發的深度是 1,再用授權簽發則加 1,超過 2 拒絕。Center 上的持久成員認證資料是深度 0,不算轉授。接收人必須已是該庫成員,角色不能高於簽發人,也不能是保留名 center-admin。內容授權不改變接收人的角色。
同時有效的授權最多 10000 張(service::MAX_ACTIVE_GRANTS),本機常駐程式和託管 Center 共用這一上限。權杖只在簽發或領取的那一次回應裡出現。持久狀態只儲存 SHA-256 和後設資料,比較在常數時間內完成。鎖定丟掉記憶體金鑰並暫停授權,不撤銷;解鎖或重啟後,未過期的授權繼續有效。過期授權及其子孫在載入和定時檢查時清除。撤銷傳遞到子孫。成員被移除,或簽發人角色降到已發範圍之下,相關授權在策略提交時失效。授權不進入保險庫同步或恢復備份。
權限申請先批准,再領取。範圍申請的批准只記錄邊界,不鑄造權杖;申請人再用建立申請時的成員認證資料領取一次。若這次回應丟失,權杖不能再取回。角色申請只存在於本機,批准後立即改策略,沒有領取;Owner 角色走簽章的所有權轉移,限時授權不能批准永久的角色變更。託管 Center 只接受範圍申請。申請人不能批准或拒絕自己的申請。主體和簽發人不同的授權呼叫者可以提交申請,但不能批准、拒絕、取消或領取。待決上限是每個申請人在每個保險庫 20 條、每個保險庫 200 條。超過 7 天作廢。已決定、已過期或已領取的申請,在最後一次變遷 30 天後刪除。
本機稽核是按裝置簽章的雜湊鏈。Center 的 DIR/audit.jsonl 是無金鑰鏈:它能發現相對已知頭的篡改,擋不住營運者把整份日誌重寫。
Center 有兩種模式。mode = ticket(預設)只簽發登記、MCP 授權和解鎖票據,內容留在裝置自己的加密庫。解鎖票據在過期前可以重複使用,不綁定某一臺裝置,只允許本機用裝置密碼解鎖,不授予 sudo 或 MCP 提權。mode = saas 且 Center 以 --data 執行時,內容在伺服器加密庫裡。營運者持有庫密碼,能讀到已解鎖的明文。這是伺服器端加密,不是針對營運者的機密性邊界。設定裡恰好一個 mode = "saas" 時,常駐程式把內容 RPC 轉到該 Center 的 /v1/rpc。不支援的操作直接失敗,不回退到本機庫。管理員 bearer 管理鎖定、解鎖和成員;把它用在內容路由上會得到 401。allow_all 只覆蓋託管內容面,不含伺服器管理、裝置管理、sudo、登記、恢復、執行和密碼學作業。
託管庫上 e2e: true 的卡片拒絕明文秘密。配對完成後,秘密放在發給裝置 X25519 公鑰、並由已知 Ed25519 金鑰簽章的信封裡。Center 只儲存公鑰和密文。它能看見誰、哪張卡片、什麼時候,也能扣下或重放舊信封,但看不到正文。裝置授權不能簽發,也不能審批。撤銷會刪除該裝置的信封,不能收回已經解開的明文。去掉 e2e 標記只能由 Owner 的授權完成,而且那次寫入不能攜帶秘密。本機保險庫加入新裝置仍使用會過期的簽章請求和完整指紋核對,不使用相機。
檢索與模型資料流
搜尋快取最多保留兩個保險庫的索引。每個保險庫最多 10,000 個分塊、16 MiB 來源文字和後設資料、32 MiB 向量。進入索引之前就排除私人內容、認證資料、檔案、已刪除、隔離和衝突修訂。SQLite 的臨時儲存強制放在記憶體。快取不進入備份或雲匯出。鎖定清空全部索引和向量。策略、修訂或隔離狀態變化使對應快取失效。
普通正文在 Unicode 安全的邊界附近分成最多 768 個字元的塊,通常重疊 128 個字元。中文和混合文字用 Jieba 分詞。FTS5 BM25 對標題、正文和安全後設資料的權重是 5、1 和 2。any 組合關鍵字,all 要求每個詞都出現,phrase 要求原短語。這些約束也過濾向量和混合候選。查詢被轉義,不作為任意 FTS 運算子執行。基本 memory search 按文件合併分塊;memory_retrieve 和 rag search 傳回單個分塊,並帶資產 ID、修訂、穩定分塊雜湊、原始 UTF-8 偏移、分數和引用標籤。
向量是正規化後的記憶體快取。向量檢索使用餘弦相似度。混合檢索用倒數排名融合,k 為 60。預設的輕量重排在有限候選集裡提高查詢覆蓋和精確短語匹配。設定的模型端點可以做學習重排。
預設嵌入是處理程序內的 EmbeddingGemma 300M Q4,經本機 ONNX 推理,向量維度 768。建立推理工作階段前顯式關閉 ONNX 遙測。推理引擎隨應用程式提供;約 209 MiB 的模型檔案是公開資料,由 rag model-install 按固定儲存庫修訂下載,並在釋出前核對每個檔案的 SHA-256,或由 rag.local_model_dir 提供。已核對的檔案可以離線複用。模型檔案有單獨的 Gemma 授權條款,不是秘密,也不是獨立稽核過的安全邊界。
設定遠端嵌入地址後,已授權的 RAG 操作可以把全部合格文件分塊發到該端點。生成只傳送問題和選中的來源分塊。學習重排傳送它的候選。遠端 URL 必須是 HTTPS;HTTP 只允許環回。模型 API 重定向被拒絕。環回請求不走代理。其他請求可以使用 HTTP、HTTPS 或 SOCKS 代理,以及代理環境。重試有上限,只覆蓋瞬時連線或讀取失敗、HTTP 429 和選定的 5xx。重試可能重複計費。TLS 校驗不會被關閉。API 金鑰只透過設定中的環境變數名引用,不寫入 TOML、URL 或指令參數。MCP 工具參數不能選擇提供方 URL、認證資料或代理。
裝置專用保險庫在推理前拒絕發往非環回提供方的模型步驟。本機推理和明確設定的環回服務仍然可用。
Retrieve、RagIndex、RagStatus 和 RagAsk 保留保險庫授權和 MCP 範圍。IPC 在服務互斥鎖之外做模型工作,並在外部工作前後、交付前重新檢查解鎖世代、授權、存取權和來源修訂戳。簽章意圖先於推理或匯出。稽核記錄成功或失敗以及交付的來源 ID,不記錄提示詞或金鑰。生成把來源文字當作不可信資料,沒有應用程式工具。模型必須傳回結構化的答案和引用。不存在的引用 ID 被拒絕。沒有證據時不呼叫生成,結果標記 insufficient_evidence。引用校驗只檢查引用是否存在,不證明生成的散文事實正確,也不消除不可信來源文字中的提示注入。
鎖定、過期或撤銷的授權,以及來源狀態變化,都會抑制遲到結果並阻止後續步驟。已經開始的遠端請求或推理可能跑完,已經發出的遠端文字不能撤回。
手機 FFI 獲得改進後的詞法搜尋,並支援 BM25 retrieve。模型設定和模型推理介面沒有加入 Flutter。模型支援的操作使用已設定的桌面常駐程式。
雲物件同步
桌面 CLI 用 PKCE、環回回呼和固定的提供方端點做瀏覽器 OAuth。CloudBegin 在 sudo 下建立一張會過期、並綁定呼叫者、提供方和用戶端的票據。網路請求在常駐程式之外進行。CloudComplete 在提交前檢查票據和目前授權。鎖定、登出和重啟使未完成票據失效,避免遲到結果恢復登入。
State.cloud_accounts 把權杖加密儲存在本機。狀態只傳回帳戶後設資料。備份、配對、保險庫同步和 MCP 都不包含權杖。登入不建立保險庫成員資格。每個提供方在每臺裝置上連線一個帳戶;再次登入只有在新授權成功後才替換該提供方的帳戶。
State.cloud_sync 把持久的寄件匣和收件匣回條放在同一個加密狀態裡。CloudSyncEnqueue 在任何傳輸 I/O 之前寫入精確的序列化信封位元組和簽章描述符。物件 ID 是這些位元組的 SHA-256,重試複用該 ID。CloudSyncWork 傳回密文和清單游標,不傳回 OAuth 權杖。sync::execute 在不持有服務互斥鎖時做有界的上傳、下載和列舉。CloudSyncAck 檢查處理程序本機的工作階段世代,然後一起提交上傳標誌、發現的 ID、下載位元組和保險庫合併。描述符先於物件到達時保持待處理。鎖定、解鎖和登出增加工作階段世代,使遲到確認不能匯入。
memories cloud sync 讓常駐程式更新權杖,並透過 OneDrive 或 Google Drive 的應用程式資料夾上傳和下載。這段 HTTP 在寫入鎖之外執行。權杖從不經 IPC 傳回。測試使用 MemoryTransport 和環回的 Graph/Drive 夾具。完成的佇列承載資料壓縮成雜湊回條,以及按提供方和收件人的釋出標記。回條留在本機,不刪除雲端歷史。缺失物件按持久化的指數延遲重試。待處理容量對列舉施加背壓。提供方工作執行緒按帳戶循序執行,並拒絕來自已失效工作階段的更新或匯入結果。
因此,CLI 授權和 cloud sync 已經實現,提供方傳輸用本機夾具測試過。真實 OneDrive 或 Google Drive 帳號上的同意、更新、雙裝置匯合、離線重試和吊銷還沒有作為已驗證行為交付。手機端的登入和同步控制元件使用 AppAuth 和共享 Rust 工作執行緒;真實同意和平台驗證仍是發布門檻。手機背景同步沒有啟用。
吊銷會丟棄已排隊的雲匯出,並在下一次物件操作前使已捕獲的工作失效。已經開始的網路請求不能撤回。
顯式的裝置同步是另一條路徑。sync export 和 sync import 交換完整的認證信封。線上的 sync send 和 sync receive 把同一類資料包交給無狀態中繼。傳送成功只表示中繼收到了資料包。未知的舊紀元寫入進入隔離區,只能在本機審閱後用 sync reapply 重新簽章。權限分叉要求一名在兩條分支上都是所有者的人簽章選定的頭和整條被丟棄的策略鏈。不相容的所有權轉移保持阻斷。
桌面狀態邊界
Request::DesktopStatus 傳回初始化與鎖定狀態、庫和連線計數、已設定的供應商種類,以及同步佇列計數。它在解鎖操作分發之前執行,不複製或提交加密狀態,不觸碰空閒或提權計時器,也不暴露識別碼、帳戶摘要、內容或認證資料。鎖定時的回應沒有這些細節。MCP 允許清單拒絕這個請求。
CLI 庫承載本機儀表板,以及 Windows 和 macOS 系統匣。memories tray 和獨立的 memories-tray 使用原生主執行緒事件迴圈。HTTP 服務和有界狀態探測在單獨的執行緒執行,因此忙碌的常駐程式不會堵住系統匣或瀏覽器。探測透過正常的作業系統認證 IPC 呼叫同目錄的 CLI,有截止時間,並清理子處理程序。Windows 管線讀取的探測截止時間是三秒。探測失敗時清除細節;鎖定在下一次輪詢隱藏細節。輪詢不重設解鎖空閒時間,也不重設提權。
HTTP 面只提供嵌入的資源和固定的狀態投影,不能分發任意服務請求。它只監聽 127.0.0.1。唯一的資料端點是 GET /api/status,由每次處理程序隨機生成的 256 位權杖保護。啟動器把權杖放在 URL 片段中。頁面從位址列移除它,只儲存在標籤頁工作階段儲存裡,並用 Authorization 標頭傳送。完整的啟動 URL 是儀表板能力,不應分享。意外的 Host、外來的 Origin 或跨站獲取後設資料會被拒絕。沒有 CORS、第三方資源、框架嵌入或變更路由。瀏覽器收到的是型別化狀態投影,不是通用 IPC 橋、認證資料、記憶正文、帳戶名、路徑或授權權杖。
系統匣可以透過明確的選單動作啟動本機常駐程式。關閉系統匣或儀表板會停止它的 HTTP 監聽和監測,不停止也不解鎖一個獨立執行的常駐程式。認證仍在 CLI 中完成。同一作業系統帳戶中的惡意程式仍處在既有的本機信任邊界內。
Linux 建置包含 memories webui,使用同一套環回儀表板和權杖邊界。原生系統匣事件迴圈只在 Windows 和 macOS 上編譯。Linux 沒有原生系統匣。
本機 TOML 只包含非秘密的儲存、中繼和桌面設定。顯式缺失的檔案、未知鍵和畸形值在開啟庫之前被拒絕。相對儲存路徑相對設定檔案解析。更改路徑會選擇另一個庫,不遷移資料。中繼 URL 保持現有的遠端 TLS 限制,並且 URL 中不能帶認證資料。