外部工具
操作者以工具集加入額外的目錄工具:一個目錄、一份 tools.json、一個執行器。發現只由 Crystal 擁有:
~/.crystal/tools/<directory>/tools.json<workspace>/.crystal/tools/<directory>/tools.json同名的專案目錄會整體替換主目錄集合。tools.json 中 "enabled": false 讓目錄留在原地而不載入該集合(預設 true)。在 config.json 中設定 "externalTools": false 可跳過發現。為 true 時,該欄位會從寫入的檔案中省略,與 skills 相同。
集合身份是目錄名(1–64 個字元,以字母開頭,然後是字母、數字、_、.、-)。沒有 JSON name 或 id。每個工具面向模型的名稱是 tools[].name(exec)或 ITool.Definition.Name(dotnet)。內建名稱優先。預設 catalogs 是 Plan 和 Work;"catalogs": ["work"] 僅 Work。
執行器:
- exec:
ProcessStartInfo.ArgumentList,沒有 shell 範本。Stdin 是圍欄內的參數物件(預設開啟)。argv對應把純量屬性變成旗標。工作目錄是工作區根目錄。每個子行程收到CRYSTAL_WORKSPACE、CRYSTAL_SESSION、CRYSTAL_APPROVAL、CRYSTAL_TOOL_DATA(該集合的全域資料目錄)和CRYSTAL_PROJECT_DATA(其專案資料目錄)。"output": "content"使 stdout 成為帶text和可選images(base64或工作區path)的 JSON 物件。僅文字的回合拒絕圖像結果。支援圖像的回合透過與其他工具相同的標記路徑附加它們。 - dotnet:實作
Crystal.Tools.ITool或Crystal.Multimodal.Tools.IMultimodalTool的框架相依類別庫。實作CrystalCode.Tools.IHostTool或IHostMultimodalTool的工具在每次呼叫時收到ToolHostContext(工作區根、工作階段 id、核准模式,以及該集合的全域和專案資料目錄)。不實作這些介面的工具保持不變。該集合的每個公用非抽象工具都在一個隔離的載入上下文中載入。共用類型是Crystal、Crystal.Tools和CrystalCode.Tools;其他相依對該集合保持私有。
每個外部工具預設至少是 Write + Workspace,並且仍然經過 ToolInvocationPolicy。作者可以把 approval 設為 always;Home 工具預設遵循該宣告,Project 工具則使用主機策略,除非另行設定。dotnet 文字或多模態工具可以在實際寫入路徑嵌在參數中時實作 IHostToolApprovalClassifier;主機把該無副作用的結果與自己的分類合併,結果只能提高風險或權限,分類失敗會失敗關閉。分類接收取消和一個單獨的兩秒預算,獨立於執行逾時。逾時或被取消的分類器在工具重新載入前被停用;之後的呼叫分類失敗關閉。主機編寫摘要,而不是採用工具的措辭。/tools 列出有效目錄和核准,並標記提供自己分類器的工具,/tools home|project author|host 更改來源信任,/tools on|off|reload 控制發現。/tools enable|disable|show <directory> 更改一個工具集。crystal tools list|show|enable|disable 在工作階段外做同樣的事,除非設定了 --format text,否則列印 Spectre.Console 表格。Full 自動放行限制在工作區內的外部寫入;Edit 不會。細節、清單欄位和 dotnet 發行佈局見外部工具。