
tm/bridge 遷移橋接層源碼解析從 legacy 腳本平滑過渡到 tm-core 的架構實踐【免費下載鏈接】claude-task-masterAn AI-powered task-management system you can drop into Cursor, Lovable, Windsurf, Roo, and others.項目地址: https://gitcode.com/GitHub_Trending/cl/claude-task-master本文以 packages/tm-bridge/README.md 為主體結合該包全部源碼與調用方實現系統(tǒng)講解 Task Master 項目在從舊版腳本legacy scripts遷移到新架構 tm-core 期間如何通過一個臨時橋接包統(tǒng)一封裝API 存儲探測、遠端 AI 服務委派、CLI 與 MCP 行為一致性三大核心邏輯。讀完你將掌握這套橋接模式的設計動機、五個橋接函數的參數與返回值契約、調用鏈走向以及判定該包何時可以整體刪除的四個標準。一、為什么需要 tm/bridge遷移期的單一事實來源Task Master 正在經歷一次架構升級舊版 CLI 與 MCP 直接函數仍依賴scripts/modules/task-manager/下的 legacy 腳本而新架構 tm-corepackages/tm-core將逐步接管全部領域能力。在兩者并存期間必須保證同一份業(yè)務邏輯在 CLI 和 MCP 兩個入口下表現一致于是誕生了tm/bridge。從 packages/tm-bridge/package.json 的描述可以確認它的定位TEMPORARY: Bridge layer for legacy code migration. DELETE when legacy scripts are removed.且private: true、版本號為空說明它不面向外部發(fā)布僅供倉庫內部消費。該包需要解決的三類問題在 packages/tm-bridge/README.md 中明確列出API vs 文件存儲探測判斷當前項目是否使用遠端 API 存儲Hamster還是本地文件存儲遠端 AI 服務委派在 API 存儲模式下把更新、展開、標簽等操作委托給遠端 AI 服務執(zhí)行一致的行為無論從 CLI 命令還是 MCP 工具進入同樣的操作得到同樣的結果與輸出格式。所有橋接邏輯統(tǒng)一收斂在這里形成遷移期間的單一事實來源single source of truth避免 CLI 與 MCP 各自實現一套導致行為分叉。二、遷移路徑調用鏈的現在與未來README 用一張調用鏈圖清晰標出了目標態(tài)這是理解整個包價值的關鍵Current: CLI → legacy scripts → tm/bridge → tm/core MCP → direct functions → legacy scripts → tm/bridge → tm/core Future: CLI → tm/core (TasksDomain) MCP → tm/core (TasksDomain) DELETE: legacy scripts, direct functions, tm/bridge現狀CLI 與 MCP 的調用都要穿過 legacy 層再由橋接包決定走哪條路文件存儲本地處理還是 API 存儲遠端處理最終落到 tm-core未來CLI 與 MCP 直接通過 tm-core 的 TasksDomain 訪問能力legacy 腳本、direct functions 與橋接包三層全部刪除。倉庫中的真實調用方印證了這條鏈路的落點例如 scripts/modules/task-manager/expand-task.js 導入tryExpandViaRemotescripts/modules/task-manager/update-task-by-id.js 與 scripts/modules/task-manager/update-subtask-by-id.js 導入tryUpdateViaRemotescripts/modules/task-manager/tag-management.js 導入標簽相關橋接函數而 CLI 側 apps/cli/src/commands/briefs.command.ts 則從tm/bridge導入tryAddTagViaRemote與TagInfo類型。也就是說legacy 腳本與 CLI 命令共享同一份橋接實現正是單一事實來源的代碼級證據。三、橋接包的統(tǒng)一入口與共享類型3.1 對外導出面packages/tm-bridge/src/index.ts 是包的唯一導出入口全量導出如下分類導出內容來源文件共享類型LogLevel、ReportFunction、OutputFormat、BaseBridgeParams、StorageCheckResultbridge-types.ts共享工具checkStorageTypebridge-utils.ts更新橋接tryUpdateViaRemote、UpdateBridgeParams、RemoteUpdateResultupdate-bridge.ts展開橋接tryExpandViaRemote、ExpandBridgeParams、RemoteExpandResultexpand-bridge.ts標簽列表橋接tryListTagsViaRemote、TagsBridgeParams、RemoteTagsResult、TagInfotags-bridge.ts切換標簽橋接tryUseTagViaRemote、UseTagBridgeParams、RemoteUseTagResultuse-tag-bridge.ts新增標簽橋接tryAddTagViaRemote、AddTagBridgeParams、RemoteAddTagResultadd-tag-bridge.ts五個橋接函數遵循完全一致的設計約定返回值是結果對象或 null——null表示非 API 存儲調用方應回退到本地文件邏輯非null表示 API 存儲已接管該操作調用方直接使用結果即可。3.2 共享類型契約bridge-types.ts 定義了所有橋接函數共用的基礎契約LogLevel info | warn | error | debug | success日志級別ReportFunction (level, ...args) void統(tǒng)一日志函數簽名所有橋接函數用它上報運行信息而不是各自直接打日志OutputFormat text | json輸出格式MCP 場景通常用jsonCLI 交互場景用textBaseBridgeParams所有橋接函數共用的參數基類字段如下字段類型必填默認值說明projectRootstring是—項目根目錄橋接邏輯定位存儲配置的基準isMCPboolean否false是否來自 MCP 上下文影響 UI 展示如 spinneroutputFormatOutputFormat否text輸出格式reportReportFunction是—日志函數tagstring否—任務組織標簽可選StorageCheckResultcheckStorageType的返回結構包含isApiStorage: boolean、可選的成功態(tài)tmCore?: TmCore實例、失敗態(tài)error?: string。3.3 核心共享工具checkStorageTypepackages/tm-bridge/src/bridge-utils.ts 是所有橋接函數的公共前置步驟封裝了三個固定動作調用createTmCore({ projectPath: projectRoot || process.cwd() })創(chuàng)建 tm-core 實例初始化失敗則report(warn, ...)并返回{ isApiStorage: false, error }讓調用方優(yōu)雅回退通過tmCore.tasks.getStorageType()獲取解析后的實際存儲類型注釋特意強調use resolved storage type, not config即最終生效值而非原始配置只有storageType api才返回isApiStorage: true否則返回false并附帶可用的tmCore。getStorageType(): file | api的契約定義在 packages/tm-core/src/common/interfaces/storage.interface.ts 與第 426 行的抽象聲明中橋接包正是通過該接口判斷當前項目是走本地文件還是遠端 API。四、五個橋接函數逐一拆解4.1 tryUpdateViaRemote任務/子任務更新update-bridge.ts 服務于update-task與update-subtask兩個命令。其參數UpdateBridgeParams在BaseBridgeParams基礎上增加taskId: string | number支持三種 ID 形態(tài)——純數字1、字母數字TAS-49、點號層級1.2或TAS-49.1prompt: string交給 AI 的更新提示詞appendMode?: boolean默認falsetrue時走 append 追加模式否則走 update 全量更新模式useResearch?: boolean默認false是否啟用研究模式metadata?: Recordstring, unknown合并進任務的元數據支持純元數據更新或與 prompt 并行。執(zhí)行流程先checkStorageType探測非 API 存儲直接return nullAPI 存儲路徑下用ora顯示 spinner僅 CLI 文本模式然后調用tmCore.tasks.updateWithPrompt(String(taskId), prompt, tag, { mode, useResearch, ...(metadata { metadata }) })完成遠端更新出錯時只負責把 spinner 置為失敗態(tài)錯誤直接重新拋出——因為注釋明確說明 tm-core 已格式化好錯誤信息橋接層不再重復加工。一個值得注意的語義差異注釋指出在 API 存儲中任務與子任務沒有父子層級被等同對待因此update-task與update-subtask可以互換使用這也是橋接層把兩者收斂到同一函數的原因。4.2 tryExpandViaRemote任務展開expand-bridge.ts 服務于expand-task命令。參數在基類上增加numSubtasks?: number生成子任務數量缺省為 auto、useResearch?: boolean、additionalContext?: string附加生成上下文、force?: boolean即使已有子任務也強制重新生成。它比更新橋接多了兩層 CLI 體驗細節(jié)進入 API 路徑前先用boxen chalk渲染一個Expanding Task via Hamster信息卡片展示 Task ID、Subtasks、Use Research、Force、Context 五項摘要其中additionalContext默認只顯示[provided]/[none]僅當環(huán)境變量TM_DEBUG 1時才截斷展示前 60 字符成功后在綠色卡片中輸出task-master show taskId的 CLI 替代命令提示方便用戶直接在終端查看結果并盡可能附加遠端任務鏈接result.taskLink。調用的是tmCore.tasks.expand(String(taskId), tag, { numSubtasks, useResearch, additionalContext, force })并如實傳達展開已在 Hamster 后臺排隊、子任務異步生成的語義。4.3 tryListTagsViaRemote標簽列表tags-bridge.ts 服務于list-tags命令。在 API 存儲中標簽被稱為 briefs任務計數從遠端數據庫獲取。參數增加showMetadata?: boolean與skipTableDisplay?: boolean后續(xù)要進行交互選擇時跳過表格渲染。流程要點調用tmCore.tasks.getTagsWithStats()獲取帶統(tǒng)計信息的標簽列表遠端服務已按 status 與 updatedAt 排序本地再穩(wěn)定排序一次當前標簽恒置頂其余保持服務端順序文本模式下用cli-table3渲染表格列依次為 Tag Name / Status / Updated / Tasks / Completed列寬按終端寬度動態(tài)計算取process.stdout.columns與 80 的較大值再乘 0.95權重為 0.35/0.25/0.2/0.1/0.1當前標簽以綠色●標記并附 brief ID 后 8 位短碼返回RemoteTagsResult包含tags: TagInfo[]、currentTag、totalTags與消息。4.4 tryUseTagViaRemote切換標簽use-tag-bridge.ts 服務于use-tag命令參數僅需tagName: string。切換前通過tmCore.auth.getContext()記錄舊上下文取briefName作為previousTag調用tmCore.tasks.switchTag(tagName)后再次讀取新上下文得到currentTag與briefId短碼并通過tmCore.tasks.list()統(tǒng)計新標簽下的任務數。成功卡片展示 Previous Tag / Current Tag / Brief ID / Available Tasks 四項返回結構RemoteUseTagResult完整攜帶previousTag、currentTag、switched、taskCount字段。4.5 tryAddTagViaRemote新增標簽重定向到 Web UIadd-tag-bridge.ts 是五個橋接中唯一不直接執(zhí)行遠端操作的函數API 存儲下標簽brief必須在 Hamster Web 界面創(chuàng)建。它通過tmCore.auth.getBriefCreationUrl()生成創(chuàng)建鏈接該方法的上下文校驗邏輯可參考 packages/tm-core/src/modules/auth/auth-domain.ts 及其測試 auth-domain.spec.ts若 URL 為空則報錯提示先執(zhí)行tm context org選擇組織。成功時用ui.displayCardBox渲染提示卡片footer 給出三個后續(xù)接入方式tm briefs select brief-nametm briefs select brief-idtm briefs select (interactive)返回結構RemoteAddTagResult包含redirectUrl調用方如 briefs.command.ts據此引導用戶跳轉。五、接入示例與回退約定README 給出的標準用法如下import { tryUpdateViaRemote } from tm/bridge; const result await tryUpdateViaRemote({ taskId: 1.2, prompt: Update task..., projectRoot: /path/to/project, // ... other params });結合源碼一個完整的調用方應當這樣處理返回值const result await tryUpdateViaRemote({ taskId: 1.2, prompt: Update task..., projectRoot: process.cwd(), appendMode: false, useResearch: false, report: (level, ...args) console.log([${level}], ...args) }); if (result null) { // 非 API 存儲走本地文件邏輯 // ... file-based update implementation } else if (result.success) { // API 存儲已處理完畢 console.log(result.message); }這是所有橋接函數統(tǒng)一遵守的**返回 null 即回退約定**橋接層絕不替調用方做文件存儲的兜底實現只負責探測與委派職責邊界清晰。六、什么時候可以刪除這個包README 明確給出四個刪除條件全部滿足后即可整體移除?scripts/modules/task-manager/下的 legacy 腳本被移除?mcp-server/src/core/direct-functions/下的 MCP 直接函數被移除? 所有功能已遷移到 tm-core? CLI 與 MCP 均通過 tm-core 的 TasksDomain 直接訪問能力。刪除范圍同樣明確legacy scripts、direct functions、tm/bridge三層一并刪除。屆時上文的調用鏈圖將從三跳收斂為一跳CLI/MCP → tm/core。七、工程約束與注意事項禁止積累新功能README 末尾特別強調This package should NOT accumulate new features. Its a temporary migration aid only.——遷移期內只允許承載既有橋接邏輯不允許把它當作長期模塊持續(xù)演進依賴面刻意收窄從 package.json 可見運行依賴僅tm/core與四個展示類庫chalk、boxen、ora、cli-table3腳本提供testvitest、lintbiome、typechecktsc工程實踐上保持最小化類型即文檔所有參數與返回類型都以 TypeScript 接口形式內聯在橋接文件中字段注釋直接說明取值語義如 taskId 的三種形態(tài)、appendMode 與 useResearch 的默認值遷移期接手代碼的開發(fā)者不需要翻找 legacy 實現即可安全調用輸出雙軌制每個橋接函數都通過isMCP與outputFormat兩個開關區(qū)分 CLI 交互spinner、boxen 卡片、表格與 MCP 機器消費純結構化返回從 index.ts 的導出與調用方測試如 tests/unit/scripts/modules/task-manager/expand-task.test.js 中對tm/bridge的 mock可見該契約被嚴格遵循。結語tm/bridge是一個生命周期即設計的典型樣本它用五個體積精簡、契約統(tǒng)一的橋接函數在架構遷移的過渡期承載了存儲探測、遠端委派與 CLI/MCP 一致性三件大事讓舊腳本與新內核可以安全并存、逐點替換。理解它等于理解了 Task Master 從 legacy 走向 tm-core 的那條最短遷移路徑——以及臨時代碼也要有清晰邊界和明確退出條件的工程取舍。【免費下載鏈接】claude-task-masterAn AI-powered task-management system you can drop into Cursor, Lovable, Windsurf, Roo, and others.項目地址: https://gitcode.com/GitHub_Trending/cl/claude-task-master創(chuàng)作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考