a9a47b7c37
備考 haiku 真考時自查發現的兩個斷點——**若不補,考試必掛,且掛的是我自己的教材**。
形狀=步驟1 那個「世代脫節」的翻版:能力做好了,但教 AI 的地方還停在舊世代。
斷點①:三處教材主動說「沒有條件分支」,還教了正好造成腹語術的替代法
- mcp/src/mcp-handler.ts:44「**沒有** ON_TRUE/ON_FALSE——引擎目前不支援條件分支」
- registry/skills/write_intent_workflow.md:39「不要寫 ON_TRUE/ON_FALSE…
需要判斷時**寫成一個獨立節點**再接 ON_SUCCESS」← 這正是「判斷退回 code」的入口
- registry/skills/INDEX.md:44「已知的坑:引擎沒有條件分支」
⇒ 三處全部更新成現況(三顆零件都輸出 data.branch、引擎依標籤選路、
查零件回應附 branch_hint 照著接即可),並保留「不要寫 ON_FAILURE」(那個真的沒有)。
斷點②(更隱蔽,靜默失效):`graph-builder` 只認得 `對每個 X` 的參數化 label,
`ON_BRANCH(branch_active)` 帶括號會落到 toEdgeType 預設值 **PIPE**
⇒ 我在 skill 教的寫法,編圖收不到,而且**不報錯**——AI 以為分支了、實際全走同一條。
「教了語法但引擎不收」比沒做更糟,故與文件同批補上:比照 FOREACH 抽 iterator 的作法
抽 branch 標籤(半形/全形括號都收),寫進 edge.branch。
新增 tests/intent-branch-syntax.test.ts(7 項綠):守「文件教的寫法,編圖真的收得到」
——ON_TRUE/ON_FALSE 不退化成 PIPE、中文「成立時/否則」、ON_BRANCH(標籤) 抽得出 branch、
全形括號、try/catch 標籤;零變化:ON_SUCCESS 仍是 ON_SUCCESS、對每個 X 的 iterator 不受干擾。
全套 234 passed(前 227 +7),失敗數維持既有 9 筆;tsc 綠。
SDD: workflow-discovery 3.11|CP: arcrun-usable 步驟 5
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4.2 KiB
4.2 KiB
Skill: INDEX(Arcrun 導航:什麼問題查哪裡)
這支的定位=LLM wiki 的
INDEX.md(leo 2026-07-30 點破: 「整個 arcrun instruction 很像 LLM wiki…它會拿到一個 index 把所有文件說明都塞給它, 它不會就可以查,範本全部寫在裡面」)。push vs pull(照 wiki 的分法):
- push=MCP 連線時的
instructions(AI 一定看到,不看就出事的三句)- pull=本檔。AI 卡住時
arcrun_get_skill('INDEX')拿到全館導航
一、我現在該查哪個?(照症狀找)
| 你的處境 | 用這個 | 工具 |
|---|---|---|
| 要開始寫 workflow,但不知道有什麼零件 | write_intent_workflow |
arcrun_get_skill('write_intent_workflow') |
| 想「每 X 分鐘掃 Y,找到就處理」 | build_watcher_workflow |
arcrun_get_skill('build_watcher_workflow') |
| 要做檢索問答(RAG) | rag_with_arcrun |
arcrun_get_skill('rag_with_arcrun') |
| workflow 卡住不動/paused | debug_paused_workflow |
arcrun_get_skill('debug_paused_workflow') |
| 想把 http 呼叫改成觸發別的 workflow | migrate_http_to_trigger_workflow |
同上 |
| 缺某個外部 API 的 recipe(查詢回 not_found 指 recipe 路) | write_recipe |
arcrun_get_skill('write_recipe') |
| 真的需要新零件(罕見) | add_new_wasm_component |
同上 ⚠️ 先確認工作流做不到 |
二、我要查「有沒有現成的東西」
| 找什麼 | 工具 | 注意 |
|---|---|---|
| 有哪些零件 | arcrun_list_components() / arcrun_search_components('自然語言') |
零件=能力(http_request/code/if_control…) |
| 有哪些 recipe | arcrun_recipe_list() / arcrun_recipe_search('...') |
recipe=打某個 API 的配方(telegram_send/kbdb_get…) |
| 有哪些跑過的 workflow | arcrun_list_workflows() / arcrun_search_workflows('...') |
這些是最可靠的範本(實跑過) |
| 某個 workflow 的完整定義 | arcrun_get_workflow(name) |
拿來照抄結構 |
| 執行紀錄/為什麼失敗 | arcrun_list_recent_executions() / arcrun_get_execution_trace(id) |
⚠️ 零件 vs recipe 分不清會寫錯:
telegram_send/gmail/kbdb_get 是 recipe 不是零件。
它們要寫成 http_request + 該 recipe。
三、已知的坑(不看會踩)
| 坑 | 現況 | 怎麼避 |
|---|---|---|
/cypher/search 曾回假 found |
2026-07-31 已修:兩庫(零件+recipe)都查,缺件回 not_found+suggestion 指路。舊實例(未更新部署)仍是假 found |
拿到 not_found 照 suggestion 走;拿到 unknown=查不到 registry ≠ 不存在 |
引擎支援 ON_TRUE/ON_FALSE/ON_BRANCH;if_control/switch/try_catch 都輸出 data.branch 標籤,引擎依標籤選路(Arcrun#5 根治) |
需要判斷就用分支邊,別寫 code 判斷。查零件的回應附 branch_hint(邊型+可照抄範例),照著接 |
|
registry/examples/ 8/13 是壞的 |
引用不存在的零件(把 recipe 當零件寫) | 別照抄 examples,改用 arcrun_get_workflow 拿實跑過的 |
| registry 可能是空的 | 安裝器無註冊步驟 ⇒ 新實例查不到零件 | 查不到 ≠ 不存在,別據此改寫成 code |
四、最重要的一條紅線
🔴 查不到零件就改寫成 code 節點=「腹語術」(表面用 Arcrun、實際全寫 JS)。
- 缺 API → 寫 recipe(
arcrun_recipe_push) - 缺能力 → 投稿零件 PR(要人類確認,見
add_new_wasm_component) code只用於局部整形(例:剝掉 LLM 回應的雜訊、切段落)
實錄:2026-07-30 盤點發現正式 workflow 只用 2 個零件,8 個 code 節點含 if×61 for×23, 最大一個 5509 字元——每一個 if 都是沒被測過的新 bug。 零件的價值是「被測過 1000 次」,寫進 code 就歸零。
五、還是不會?
arcrun_list_skills()— 看全部 skillarcrun_get_gui_context()— 看目前實例的狀態arcrun_report_feedback()— 回報這裡沒寫清楚的地方(這份 INDEX 該被你的問題改進)