計(jì))
人工智能AI AgentAgent 框架DeepSeek【免費(fèi)下載鏈接】deepseek-harnessDeepSeek Harness: Everything is a Plugin.項(xiàng)目地址https://gitcode.com/gh_mirrors/de/deepseek-harness點(diǎn)擊查看免費(fèi)下載本篇文章基于 DeepSeek Harnessdeepseek-ai/dsh-agent-instructions插件已實(shí)現(xiàn)的功能筆記講解 workspace 指令發(fā)現(xiàn)機(jī)制如何從「拒絕跟隨末段軟鏈接lstatno-follow」演變?yōu)椤笩o條件跟隨軟鏈接resolvestat」的完整決策過程。讀者將掌握$DSH_HOME/AGENTS.md、項(xiàng)目AGENTS.md與CLAUDE.md三類候選文件的真實(shí)解析行為、present / absent / unavailable三態(tài)探針語義以及該改動(dòng)引入的信任邊界與殘余風(fēng)險(xiǎn)的工程權(quán)衡思路。背景no-follow 不變量為何成為障礙DeepSeek Harness 的 workspace 上下文機(jī)制詳見 workspace-context 功能筆記負(fù)責(zé)把倉庫中的AGENTS.md、CLAUDE.md等指令文件注入到會(huì)話的有效上下文中使項(xiàng)目約定、構(gòu)建命令與評(píng)審規(guī)則無需用戶反復(fù)粘貼即可到達(dá)模型。該能力由packages/context/agent-instructions實(shí)現(xiàn)包名為deepseek-ai/dsh-agent-instructions。在早期實(shí)現(xiàn)中指令候選的探測邏輯使用ctx.fs.lstat檢查路徑末段組件并拒絕任何末段為符號(hào)鏈接的候選。這意味著倉庫所有者不能通過軟鏈接把指令加載指向 workspace 之外的內(nèi)容。這個(gè) no-follow 不變量帶來了兩個(gè)實(shí)際問題合法的軟鏈接場景被靜默忽略用戶將$DSH_HOME/AGENTS.md用戶級(jí)全局指令或某個(gè)項(xiàng)目的AGENTS.md軟鏈接到一個(gè)位于其他位置的規(guī)范指令文件以便在多個(gè)工具、多個(gè) home 之間共享同一份「house-style」文件。這類被刻意支持的配置在舊行為下會(huì)被靜默忽略。鏡像文件淪為特殊跳過案例倉庫中普遍存在的CLAUDE.md → AGENTS.md鏡像后者軟鏈前者被迫作為一種「特殊跳過」情形處理而不是作為普通的內(nèi)容重復(fù)參與去重。倉庫所有者因此要求在所有 scope 上無條件跟隨軟鏈接指令文件同時(shí)接受下方記錄的殘余信任邊界風(fēng)險(xiǎn)。決策探測從lstat改為resolvestat核心變更可以概括為一句指令發(fā)現(xiàn)不再用lstat檢查末段組件。取而代之的是一套統(tǒng)一的「先解析、再分類」流程每一類候選——用戶全局的$DSH_HOME/AGENTS.md、每個(gè)基礎(chǔ)候選base candidate、每個(gè)本地疊加候選local overlay candidate——都被解析resolve隨后對(duì)解析后的目標(biāo)執(zhí)行stat。該流程在**基線組裝baseline composition**時(shí)執(zhí)行也在每次tools/post-execute對(duì)賬reconciliation時(shí)執(zhí)行兩條路徑行為完全一致。解析結(jié)果按以下規(guī)則分類軟鏈接目標(biāo)是普通文件加載該目標(biāo)的內(nèi)容解析后的目標(biāo)是非文件包括鏈接到目錄視為已確認(rèn)的缺失confirmed absence像缺失文件一樣移除該 scoperesolve或stat拋出異常歸類為暫時(shí)不可用temporarily unavailable絕不移除已經(jīng)加載的 scope。源碼級(jí)實(shí)現(xiàn)兩個(gè) stat 入口在 files.ts 中兩條探測路徑分別處理宿主文件系統(tǒng)與 provider 文件系統(tǒng)nodeStatFilefiles.ts#L98-L111對(duì)宿主路徑直接調(diào)用stat。源碼注釋明確說明stat而非lstat會(huì)跟隨末段符號(hào)鏈接因此指向普通文件的鏈接會(huì)被加載而損壞的鏈接broken link會(huì)以ENOENT浮出被歸類為absent。fsStatFilefiles.ts#L113-L135對(duì) provider 路徑先調(diào)用fileSystem.resolve()跟隨末段軟鏈接到目標(biāo)的穩(wěn)定身份再對(duì)目標(biāo)調(diào)用fileSystem.stat()分類。目標(biāo)類型不是file即為absent任何異常除信號(hào)中止外返回unavailable。兩個(gè)入口統(tǒng)一收斂到statFilefiles.ts#L137-L143按是否掛載了ctx.fsprovider 自動(dòng)選擇實(shí)現(xiàn)。兩者都不再調(diào)用lstat。三態(tài)類型ScopeInstructionProbepresent | absent | unavailable見 files.ts#L74-L77把「確認(rèn)缺失」與「provider 失敗」嚴(yán)格區(qū)分是「不可用絕不刪 scope」這一不變量的類型級(jí)保證。動(dòng)態(tài)對(duì)賬路徑上的probeScopeInstructionfiles.ts#L460-L493使用同樣的resolve→stat→ 按info.type ! file判定absent的邏輯注釋同樣強(qiáng)調(diào)「只有 provider 異常才上報(bào)為 unavailable」。被跟隨的軟鏈接在后續(xù)環(huán)節(jié)中是普通文件一個(gè)被成功跟隨的軟鏈接對(duì)下游所有環(huán)節(jié)而言就是一個(gè)普通文件。最典型的收益體現(xiàn)在內(nèi)容去重上去重邏輯為按目錄的修剪后內(nèi)容去重trimmed-content dedup詳見 instruction-load-all-dedup 功能筆記。具體實(shí)現(xiàn)在dedupInstructionFilesByDirectoryfiles.ts#L368-L384同一目錄下修剪首尾空白后內(nèi)容字節(jié)相同的候選折疊到發(fā)現(xiàn)順序中最早的一個(gè)且保留文件渲染其原始字節(jié)。因此一個(gè)CLAUDE.md軟鏈接其兄弟文件AGENTS.md的場景現(xiàn)在解析后得到完全一致的內(nèi)容像任何字節(jié)相同的真實(shí)重復(fù)一樣被折疊而不再是特殊的跳過案例。這使內(nèi)容去重對(duì)所有重復(fù)來源——真實(shí)的字節(jié)相同副本與軟鏈接鏡像——走完全相同的路徑。Scope 鍵的配合變化由于同一目錄下每個(gè)候選名現(xiàn)在是獨(dú)立 scopescope 鍵編碼為directory\u0000candidateNameNUL 分隔符不可能出現(xiàn)在真實(shí)路徑中。candidateScopeKey/decodeScopeKey負(fù)責(zé)編解碼probeScopeInstruction解碼候選名后精確讀取該文件。因此目錄中AGENTS.md與CLAUDE.md是獨(dú)立 scope、各自獨(dú)立對(duì)賬移除其中一個(gè)只對(duì)該候選自身 scope 發(fā)出remove不觸及兄弟 scope。信任邊界與殘余風(fēng)險(xiǎn)倉庫軟鏈接 越界讀取跟隨倉庫所有的軟鏈接會(huì)跨越插件的信任邊界。需要清醒認(rèn)識(shí)的風(fēng)險(xiǎn)模型是一個(gè)被 clone 的不可信倉庫可以攜帶AGENTS.md其軟鏈接目標(biāo)可以是進(jìn)程可讀的任意文件從而把工作區(qū)之外的內(nèi)容以「工作區(qū)指引」的形式呈現(xiàn)給模型。緩解機(jī)制是內(nèi)容定位而非權(quán)威這類內(nèi)容只以低權(quán)威的 user-role 前綴進(jìn)入并被system-reminder框架包裹模型面對(duì)的正是system-reminderInstructions from: path/system-reminder這種模式詳見 workspace-context 功能筆記它永遠(yuǎn)不能覆蓋system、developer 或直接 user 指令僅被當(dāng)作數(shù)據(jù)處理而不是權(quán)威來源。真正的邊界在文件系統(tǒng)層而非本插件當(dāng)部署需要加載不可信倉庫時(shí)用dsh-fs-observation-policy門控或 OS 沙箱約束ctx.fs相關(guān)設(shè)計(jì)見 cross-family fs sandbox 功能筆記。這是一個(gè)明確由倉庫所有者接受的權(quán)衡而非疏忽。信任邊界從本插件移出進(jìn)入文件系統(tǒng)策略與沙箱層因?yàn)椤缸x權(quán)限邊界」本質(zhì)上屬于文件系統(tǒng)策略的職責(zé)而非路徑解析層的職責(zé)。備選方案為何被否決決策筆記記錄了三個(gè)被拒絕的替代方案理解它們有助于把握設(shè)計(jì)取向保留lstatno-follow 不變量被否決。它會(huì)阻斷「軟鏈到規(guī)范文件」這一受支持配置并迫使鏡像場景成為特殊跳過案例它所近似保護(hù)的讀權(quán)限邊界更適合由文件系統(tǒng)策略與沙箱層承載——同一風(fēng)險(xiǎn)可以被更精確地包含。只跟隨用戶全局$DSH_HOME候選項(xiàng)目文件繼續(xù) no-follow被否決。倉庫所有者要求所有 scope 行為統(tǒng)一分裂的規(guī)則比「一條一致策略 一條文檔化邊界」更難推理。用戶選擇打開的項(xiàng)目并不比用戶自己的 home 更可信。跟隨軟鏈接但拒絕解析到項(xiàng)目根之外的目標(biāo)被否決。它把部分信任邊界放回了錯(cuò)誤的層——用路徑幾何而非讀權(quán)限——既破壞了合法的$DSH_HOME指向外部場景又重復(fù)實(shí)現(xiàn)了文件系統(tǒng)策略門控已經(jīng)擁有的遏制能力。三個(gè)備選的共同教訓(xùn)是信任邊界應(yīng)該放在能精確表達(dá)「誰有讀取權(quán)限」的層文件系統(tǒng)策略/沙箱而不是放在路徑解析的幾何層。驗(yàn)證測試如何鎖定新行為實(shí)現(xiàn)隨附的測試直接印證了決策語義可在 agent-instructions.spec.ts 中查看宿主路徑跟隨spec.ts#L454-L473在倉庫外創(chuàng)建shared.md軟鏈為根目錄AGENTS.md斷言discoverBaselineInstructionFiles的顯示路徑包含AGENTS.md且loadBaselineInstructions渲染文本包含shared instruction body。provider 路徑跟隨spec.ts#L475-L495同一場景經(jīng)由ctx.fs掛載后斷言組合出的基線前綴包含目標(biāo)內(nèi)容。鏈接到目錄 確認(rèn)缺失spec.ts#L3381-L3419先把pkg/AGENTS.md加載為已加載 scope隨后刪除原文件并把AGENTS.md改為指向目錄的軟鏈接再觸發(fā)一次read工具調(diào)用斷言對(duì)賬產(chǎn)生{ action: remove, scope: sk(pkg, AGENTS.md) }并渲染Instructions removed: ...。測試注釋特別強(qiáng)調(diào)非文件目標(biāo)是確認(rèn)缺失而非不可用所以已加載 scope 會(huì)被移除若分類為unavailable則不會(huì)產(chǎn)生任何變更。配置與實(shí)操要點(diǎn)配合該行為插件的關(guān)鍵配置項(xiàng)定義與校驗(yàn)見 config.ts如下配置項(xiàng)默認(rèn)值說明dshHome$DSH_HOME或~/.dsh存放固定用戶全局AGENTS.md的目錄不屬于候選列表也無本地疊加projectRootMarkers[.git]從會(huì)話 cwd 向上行走時(shí)的項(xiàng)目根標(biāo)記.git文件與目錄均有效覆蓋 linked worktree 與 submodule無標(biāo)記時(shí)以 cwd 為根maxBytes必填單次渲染的基線或?qū)~批次的 UTF-8 字節(jié)上限非正數(shù)或非有限值會(huì)禁用加載maxSourceBytes10485761 MiB單個(gè)指令文件的最大讀取字節(jié)數(shù)超限文件不可用instructionFileCandidates[AGENTS.md, CLAUDE.md]基礎(chǔ)候選列表按序加載同目錄所有存在的文件localInstructionFileCandidates[AGENTS.local.md, CLAUDE.local.md]本地疊加候選基礎(chǔ)文件之后加載共享同一按目錄去重規(guī)則傳空數(shù)組可禁用疊加候選必須是同目錄文件名空條目、./..以及含/或\的條目會(huì)被忽略。軟鏈接跟隨對(duì)以上所有候選統(tǒng)一生效包括用戶全局文件。部署側(cè)通過顯式的{ maxBytes } | false掛載決定是否啟用dsh web使用 65,536 字節(jié)預(yù)算Host Runtime 的 headless 消費(fèi)者則禁用。影響與總結(jié)本次變更的最終影響軟鏈接指令文件現(xiàn)在像其目標(biāo)一樣被加載與渲染使規(guī)范指令文件可以在不同工具與不同 home 之間共享CLAUDE.md → AGENTS.md鏡像通過內(nèi)容去重折疊不再是被跳過的特殊案例插件指令加載不再依賴ctx.fs.lstat解析后為非文件目標(biāo)即為確認(rèn)缺失只有 provider 異常才算暫時(shí)不可用信任邊界移出插件由文件系統(tǒng)策略與沙箱層負(fù)責(zé)——當(dāng)部署加載不可信倉庫時(shí)必須用dsh-fs-observation-policy門控或 OS 沙箱約束ctx.fs。從工程視角看這是一次典型的「行為變更 → 風(fēng)險(xiǎn)重定位 → 分層處置」決策插件層追求一致、可推理的解析語義對(duì)所有 scope 無差別跟隨把「讀取權(quán)限」這一真正的信任問題下沉到文件系統(tǒng)策略與沙箱層并用三態(tài)探針 按目錄內(nèi)容去重 測試鎖定把變更控制在可驗(yàn)證、可回滾的范圍內(nèi)。倉庫所有者明確接受了「跟隨倉庫軟鏈接可能引入 workspace 外部內(nèi)容」的殘余風(fēng)險(xiǎn)但該內(nèi)容只以低權(quán)威 user-role 數(shù)據(jù)身份進(jìn)入上下文且系統(tǒng)提示詞框架與文件系統(tǒng)邊界共同兜底。贊分享人工智能AI AgentAgent 框架DeepSeek【免費(fèi)下載鏈接】deepseek-harnessDeepSeek Harness: Everything is a Plugin.項(xiàng)目地址https://gitcode.com/gh_mirrors/de/deepseek-harness點(diǎn)擊查看免費(fèi)下載相關(guān)推薦DeepSeek Harness 指令文件加載全面去重AGENTS.md 與 CLAUDE.md 共存的每目錄內(nèi)容級(jí)去重方案DeepSeek Harness 指令文件加載全面去重 AGENTS.md 與 CLAUDE.md 共存的每目錄內(nèi)容級(jí)去重方案 本篇技術(shù)指南講解 deeps人工智能AI AgentAgent 框架DeepSeekDeepSeek Harness 發(fā)起 Agent 作用域設(shè)計(jì)基于 AsyncLocalStorage 的進(jìn)程內(nèi)信任鏈DeepSeek Harness 發(fā)起 Agent 作用域設(shè)計(jì)基于 AsyncLocalStorage 的進(jìn)程內(nèi)信任鏈 導(dǎo)讀 本文剖析 DeepSeek Ha人工智能AI AgentAgent 框架DeepSeekDeepSeek Harness一步一個(gè)邊界——pre-step 前的 Inbox 原子認(rèn)領(lǐng)與單點(diǎn)決策設(shè)計(jì)DeepSeek Harness一步一個(gè)邊界——pre step 前的 Inbox 原子認(rèn)領(lǐng)與單點(diǎn)決策設(shè)計(jì) 在 DeepSeek Harness“Every人工智能AI AgentAgent 框架DeepSeek上一篇前端面試必看3大框架實(shí)現(xiàn)小程序/H5/APP一體化開發(fā)的終極指南下一篇Python初學(xué)者也能懂two-stream-action-recognition數(shù)據(jù)加載模塊源碼解讀創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考