跳到內容
Crystal CodeDocs
繁繁體中文

Exec 工具集

主機用 ProcessStartInfo.ArgumentList 啟動行程(沒有 bash -lc,也沒有單行命令字串)。工作目錄是工作區根目錄。子環境繼承主機行程,並額外收到五個變數,只為該行程改寫:

變數 值
CRYSTAL_WORKSPACE 絕對工作區根
CRYSTAL_SESSION 目前工作階段 id
CRYSTAL_APPROVAL 目前核准模式(plan、default、edit、review、audit 或 full)
CRYSTAL_TOOL_DATA 此集合的絕對全域資料目錄,{home}/data/tools/<directory>
CRYSTAL_PROJECT_DATA 此集合的絕對每工作區資料目錄,<workspace>/.crystal/data/tools/<directory>

不加入秘密。不為該工具設定 CRYSTAL_HOME。兩個資料目錄由主機解析,並在工具首次執行時惰性建立。無法建立的目錄不會被報告,因此缺失時請自行建立。它們與集合安裝目錄分開;不要在其中放秘密。

裸可執行檔名在集合目錄中存在該檔案時於目錄內解析;否則可以 PATH 搜尋。包含目錄分隔符的相對路徑必須留在集合目錄內。絕對路徑按給定使用。

最終 argv 是:集合 command + 此工具的 command + 從此工具 argv 對應來的旗標。簡寫沒有額外後綴。

Stdin JSON(stdin: true,預設):把圍欄內的參數物件寫成無 BOM 的 UTF-8 JSON,然後關閉 stdin。單工具或多工具集合的正文相同。子行程已經從 argv 知道自己是哪個子命令。

Argv(argv 對應):對每個出現的列出屬性,追加 flag,然後是純量字串形式。允許的 JSON 種類:字串、數字、布林。字串陣列對每個元素追加 flag value。物件、null 和混合陣列以模型可見的英文錯誤拒絕該呼叫。屬性順序跟隨檔案中 argv 物件的順序。

兩者都用:stdin 得到完整的圍欄物件,argv 得到前綴、後綴和對應的純量。

關閉 Stdin:stdin 仍然被重新導向並關閉,因此子行程不會阻塞。

內容輸出("output": "content",預設 text):stdout 必須是一個 UTF-8 JSON 物件。text 是可選字串。images 是最多 8 個物件的可選陣列。每張圖像設定 mimeType(image/png、image/jpeg、image/gif 或 image/webp),以及 base64 或 path 中的恰好一個。base64 可以包含空白。path 必須是工作區內的普通檔案;憑證路徑、目錄和管道被拒絕。位元組必須匹配宣告的類型和 20 MiB 的主機限制。主機只在圖像將被附加時開啟路徑,該讀取遵守取消。Stderr 追加到 text。非零結束使呼叫失敗,且不附加圖像。僅文字的回合上,包含圖像的結果以 “This model cannot accept tool images.” 失敗。支援圖像的回合上,同一工具也註冊為多模態工具,被接受的圖像走現有標記路徑。無效 JSON 使呼叫失敗,並保留 stdout 預覽。大圖像應使用 path,因為 stdout 在解析前仍會被截斷到工具輸出上限。

非零結束是 ToolResultStatus.Failure。逾時從行程啟動開始,涵蓋 stdin 寫入、行程結束和 stdout/stderr 讀取。內容 JSON 點名的圖像檔案不屬於該行程逾時。"timeoutSeconds": "unlimited" 停用這次呼叫的逾時;使用者和回合取消仍然適用。逾時、取消和 stdin 失敗會在作業系統允許時殺死行程樹。對於 output: text,stdout 然後 stderr 被連接、截斷,並作為 ToolOutput 文字返回。

多個 exec 工具共用一個二進位檔時,應放在同一個集合中。這與多 ITool 組件是同一單位:一次安裝、一個 ALC 或一個可執行檔、多個目錄項目。