# 想貢獻零件(component)?先確認你真的需要 > **99% 的需求不需要新零件。** 零件是**專業等級**、走 PR 審核; > **recipe / workflow / app 誰都可以做**,隨建隨用、不必部署。 --- ## 先照這個順序找,多半不用寫零件 **1. 語意搜尋知識庫**(最強——它能找到你沒猜中的用詞) ``` kbdb_search(q="我想達成什麼(用一句話描述)", mode="semantic") kbdb_get_map() # 不確定該查哪個庫,先看藏書地圖 ``` **2. 看現成的服務整合**(26 個:GitHub/Notion/Gemini/Slack…) ```bash acr auth-recipe list acr auth-recipe scaffold github # 直接吐出 credentials 範本 + workflow 範例 ``` **3. 看零件全集**(21 顆通用零件) ```bash acr parts ``` 特別注意 **`http_request`**:它能打**任意** HTTP API。 「平台沒有 XX 服務的零件」通常不成立——用 `http_request` + 一份 recipe 就有了。 **4. 看有沒有現成 workflow 可以直接接** ```bash acr list ``` --- ## 三層責任分工 | 層 | 誰做 | 怎麼做 | |---|---|---| | **通用能力** | 平台提供 | `http_request` + auth-recipe 機制=**能打任何 API**,這是地基 | | **熱門服務 recipe** | 平台預鋪 | 減少常見情境的摩擦(現 26 個) | | **冷門/特殊** | **誰用到誰開發** | recipe 是**設定不是程式**,門檻低 | > 我們不會包辦全世界所有服務的 API。**用到就自己補一份 recipe**,那是設定檔不是程式碼。 --- ## 什麼時候才真的需要新零件 **只有這種情況**:需要**新的原語能力**,而且**無法用既有零件組合出來**。例如—— - 一種新的控制流(現有 `if_control`/`switch`/`foreach_control`/`filter`/`try_catch` 都表達不了) - 一種新的資料轉換原語(`code` 零件的沙箱做不到) - 需要 WASM 層才能做的事(純計算、特殊編解碼) **不算的情況**(這些都用 recipe/workflow 解): - 「我要接 XX 服務的 API」→ `http_request` + recipe - 「我要做 XX 業務邏輯」→ workflow 組合既有零件 - 「我要處理某種資料格式」→ `code` 零件(沙箱 JS) --- ## 真的要貢獻零件的話 零件是 WASM(TinyGo/AssemblyScript),有嚴格的沙箱約束 (禁網路 syscall、禁檔案系統、禁 goroutine、體積上限 2MB、 唯一 I/O 模型是 stdin/stdout JSON)。 **流程**:走 Arcrun repo 的 PR,過 `docs/component-pr-review-standard.md` 審核。 撰寫規範與 contract schema 見 `registry/` 底下的既有零件範例。 --- ## 為什麼 MCP 不再暴露 `publish_component` / `get_component_guide` (2026-07-21 leo 拍板停用) 那兩個工具對一般使用者是**誤導危機**:搜不到東西時,系統會建議「去提交新零件」, 把人推向最難、最該擋的那條路。 **實測**:總管想寫一支「定期打 API 然後通知」的 workflow(Python 約 10 行), 問 `foreach_control` 怎麼用,MCP 回傳的是**TinyGo 寫 WASM 零件的教學** (白名單、syscall 限制、contract schema)——完全是另一件事,導致 40 分鐘未完成。 **設計判準**(leo): > 前端界面要**人類友善**,Arcrun 要 **AI 友善**——都要**從終點看**。 > Arcrun = **讓 AI 輕易建立程式碼**;AI 要覺得 **Arcrun 比 Python 還簡單**, > 因此沒有寫 Python 的慾望。**絕不可迷路、搞不懂。**