跳到內容
Crystal CodeDocs
繁繁體中文

外部工具

操作者以工具集加入額外的目錄工具:一個目錄、一份 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 發行佈局見外部工具。