diff --git a/README.md b/README.md index cc1e1ed..13ab1b9 100644 --- a/README.md +++ b/README.md @@ -1,85 +1,127 @@ # arcrun -**AI Workflow Execution Engine** — 以 WASM 零件為基礎的 Cloudflare Workers 工作流平台。 +**讓 AI 把想法直接變成自動化工作流,而不是一行一行寫程式。** -定義一個 workflow,串接 Gmail、Telegram、Google Sheets 等服務,無需伺服器,直接跑在 Cloudflare Edge。 +--- + +## 為什麼做這個? + +AI 愈來愈強,但跟 AI 協作還是很有摩擦: + +**問題一:AI 調 API 太耗 token。** +每次讓 AI 幫你查資料、發郵件、寫入試算表,它都要在對話裡描述、確認、執行,token 燒很快。更好的做法是讓 AI 把任務寫成一次性的程式,之後直接執行。 + +**問題二:AI 寫程式容易出 bug,debug 又耗時。** +讓 AI 從頭寫一個完整的爬蟲或自動化腳本,十次有八次要來回修。根本原因是零件沒有被複用——每次都是全新的程式。 + +**解法:把邏輯寫成工作流,零件由社群反覆驗證。** +想到工作流,你可能想到 n8n。很好,arcrun 就是這個方向,但為 AI 優先設計: + +| | n8n | arcrun | +|---|---|---| +| 語法 | JSON / 拖拉介面,檔案動輒數千行 | 三行 Cypher,AI 和人都能直接讀 | +| context 消耗 | 大,容易超出 window | 極小,整個 workflow 幾十個 token | +| 零件擴充 | GUI 拖拉,人類操作 | CLI 一行,AI 自己寫零件、自己提交 | +| 執行環境 | 需要自架或付費訂閱 | 從本機一行指令跑起來 | + +arcrun 的核心假設:**最好的 AI 協作工具,應該讓 AI 自己能讀、能寫、能執行、能除錯。** --- ## 專案定位 -| 層級 | 內容 | 存取 | +| 層級 | 內容 | 授權 | |------|------|------| -| **開源核心** | cypher-executor、21 個 WASM 零件、credentials Worker、CLI(acr) | MIT License | -| **Hosted SaaS** | 一行指令取得 API Key,使用 arcrun.dev 的執行引擎與公眾零件庫,credential 永遠在你自己的 CF KV | 免費 | -| **InkStone 付費** | KBDB 向量搜尋、Graph 查詢、Persona SDK、MatchGPT | 付費方案 | +| **開源核心** | cypher-executor、21 個 WASM 零件、credentials Worker、CLI(`acr`) | MIT | +| **Hosted** | 一行取得 API Key,workflow 和 credential 永遠在你自己的 Cloudflare KV | 免費 | +| **Self-hosted** | Fork 後自行部署,完全掌控 | MIT | -**你的 credential 和 workflow 永遠在你自己的 Cloudflare KV,arcrun.dev 不儲存它們。** +人用也完全沒問題。但每一個設計決定都優先問:「AI 用起來方不方便?」 --- -## 快速開始 — Standard 模式(推薦,零部署) +## 快速開始 -只需在 Cloudflare 建立一個 KV namespace,其餘由 arcrun.dev 處理。 +### 玩法一:從你的電腦直接執行(最快,不需要 Cloudflare) -### 安裝 CLI +安裝 CLI,立刻寫一個 workflow 在本機跑: ```bash npm i -g arcrun +acr init --local ``` -### 1. 初始化 +建立 `hello.yaml`: + +```yaml +name: hello +flow: + - "start >> 完成後 >> transform" + - "transform >> 完成後 >> output" +config: + transform: + input: "{{start.text}}" +``` + +執行: + +```bash +acr run hello --input text="Hello, world" +``` + +不需要帳號、不需要部署、不需要 API Key。直接感受 workflow 跑起來是什麼感覺。 + +--- + +### 玩法二:把 Workflow 推到 Cloudflare 雲端執行 + +workflow 放到 Cloudflare KV,任何地方都能觸發(Webhook、cron、前端按鈕)。 + +**你需要的只是一個免費的 Cloudflare 帳號和一個 KV namespace。** ```bash acr init ``` -互動式問答: -- Cloudflare Account ID -- USER_KV Namespace ID(在 [CF Dashboard](https://dash.cloudflare.com) 建立一個 KV) -- CF API Token(只需 KV Edit 權限) -- Email(取得 arcrun.dev API Key) +互動式問答引導你完成設定:Cloudflare Account ID、KV Namespace ID、API Token、Email。取得 API Key 後,credential 和 workflow 都只存在你自己的 CF KV,arcrun.dev 不儲存任何東西。 -### 2. 設定 Credential - -建立 `credentials.yaml`(已自動加入 `.gitignore`): +設定 credential: ```yaml -# credentials.yaml — 不要提交至 git! +# credentials.yaml — 不要提交至 git(已自動加入 .gitignore) gmail_token: "ya29.your-google-oauth-token" telegram_bot_token: "1234567890:ABCxxx" ``` -上傳加密 credential 至你的 CF KV: - ```bash -acr creds push credentials.yaml +acr creds push credentials.yaml # AES-GCM 加密後存入你的 KV ``` -### 3. 部署 Workflow +部署並執行: -建立 `newsletter_subscribe.yaml`: +```bash +acr push newsletter.yaml +acr run newsletter --input email=user@example.com +``` + +範例 workflow(訂閱電子報,發感謝信 + 記錄到 Google Sheets): ```yaml name: newsletter_subscribe -description: 訂閱電子報,發感謝信並記錄到 GSheets flow: - "input >> 完成後 >> send_thanks" - "input >> 完成後 >> save_to_sheet" - - "send_thanks >> 完成後 >> output" - "send_thanks >> 失敗時 >> notify_error" - - "save_to_sheet >> 完成後 >> output" config: send_thanks: to: "{{input.email}}" subject: "感謝訂閱!" - body: "歡迎加入!" - # access_token 由 credentials.yaml 的 gmail_token 自動注入 + body: "歡迎加入,我們很高興你在這裡。" + # gmail_token 從 credentials.yaml 自動注入,不需要手動填 save_to_sheet: - action: write spreadsheet_id: "your-sheet-id" range: "訂閱者!A:B" values: [["{{input.email}}", "{{input.timestamp}}"]] @@ -89,75 +131,72 @@ config: text: "發信失敗:{{input.email}}" ``` -部署: - -```bash -acr push newsletter_subscribe.yaml -``` - -### 4. 執行 - -```bash -acr run newsletter_subscribe --input email=user@example.com timestamp=2026-01-01 -``` - --- -## 快速開始 — Self-hosted 模式 +### 玩法三:完全 Self-hosted -自行部署所有 Worker 到你的 Cloudflare 帳號。 +Fork 後把全部 Worker 部署到你自己的 Cloudflare 帳號。你的零件庫、你的執行引擎、你說了算。 ```bash -# 1. 部署 cypher-executor -cd cypher-executor -wrangler deploy - -# 2. 部署 credentials Worker -cd ../credentials -wrangler deploy - -# 3. 初始化 CLI(Self-hosted 模式) +cd cypher-executor && wrangler deploy +cd ../credentials && wrangler deploy +cd ../registry && wrangler deploy acr init --self-hosted ``` +做好零件後可以推回 arcrun 公眾庫,讓所有人受益(見[貢獻零件](#貢獻零件))。 + --- -## Workflow YAML 語法 - -### 三元組格式 +## Workflow 語法 ``` "A >> 關係詞 >> B" ``` -### 合法關係詞 +這就是全部。每一行是一條邊,描述 A 之後發生什麼事。 -| 關係詞 | 英文別名 | 說明 | -|--------|----------|------| -| `完成後` | `ON_SUCCESS` | 上游成功後執行 | -| `失敗時` | `ON_FAIL` | 上游失敗時執行 | -| `對每個` | `FOREACH` | 迭代執行 | -| `條件滿足時` | `IF` | 條件分支 | -| `ON_CLICK` | — | 前端點擊觸發 | -| `CALLS_SUBFLOW` | — | 呼叫子 workflow | +| 關係詞 | 別名 | 說明 | +|--------|------|------| +| `完成後` | `ON_SUCCESS` | A 成功後執行 B | +| `失敗時` | `ON_FAIL` | A 失敗時執行 B | +| `對每個` | `FOREACH` | 對 A 的每個元素執行 B | +| `條件滿足時` | `IF` | 條件為真時執行 B | +| `CALLS_SUBFLOW` | — | 呼叫另一個 workflow | -> `PIPE` 已棄用,請改用 `完成後` 或 `ON_SUCCESS`。 +整個 workflow 通常不超過十行,AI 一眼掃完不需要捲動。 --- -## 零件列表(21 個) +## 零件 -### 整合類(需要 Credential) +### 關於零件數量 + +arcrun 目前有 21 個核心零件,你可能覺得不夠用——畢竟 n8n 有幾百個。 + +但大多數 n8n 零件的本質都是:把一個 HTTP request 包裝成特定服務的格式。arcrun 的 `http_request` 零件本身就能做同樣的事,差別是:**你讓 AI 幫你配置它,而不是等人工寫好一個現成的封裝。** + +```bash +# 讓 AI 幫你設定一個 Notion 整合 +acr parts scaffold http_request +# AI 填入 Notion API endpoint、headers、body 格式,你貼上 API Key,搞定 +``` + +對 AI 來說,一個彈性的 `http_request` 零件比一百個固定封裝更好用——因為 AI 能讀懂 API 文件,直接組出正確的配置,不需要等有人做 Notion 零件。 + +### 21 個核心零件 + +**整合類**(需要 Credential,credential 自動從加密 KV 注入,workflow yaml 裡看不到明文) | 零件 | 說明 | 所需 Credential | |------|------|-----------------| -| `gmail` | Gmail 發信 | `gmail_token`(Google OAuth) | -| `google_sheets` | Google Sheets 讀寫 | `google_oauth`(Google OAuth) | +| `gmail` | Gmail 發信 | `gmail_token` | +| `google_sheets` | Google Sheets 讀寫 | `google_oauth` | | `telegram` | Telegram Bot 發訊息 | `telegram_bot_token` | | `line_notify` | LINE Notify 發訊息 | `line_token` | -| `http_request` | HTTP 請求(手動設 headers) | — | +| `http_request` | 任意 HTTP 請求 | — | -### 控制流 +**控制流** | 零件 | 說明 | |------|------| @@ -167,11 +206,11 @@ acr init --self-hosted | `switch` | 多路路由 | | `wait` | 延遲等待 | -### 資料處理 +**資料處理** | 零件 | 說明 | |------|------| -| `set` | 設定/賦值 | +| `set` | 設定/賦值變數 | | `filter` | 陣列過濾 | | `merge` | 合併物件 | | `string_ops` | 字串操作 | @@ -179,52 +218,55 @@ acr init --self-hosted | `array_ops` | 陣列操作 | | `date_ops` | 日期操作 | -### AI 類 +**AI 類** | 零件 | 說明 | |------|------| -| `ai_transform_compile` | AI 轉換規則編譯(Workers AI) | -| `ai_transform_run` | AI 轉換執行 | +| `ai_transform_compile` | 自然語言描述 → 轉換規則(Workers AI) | +| `ai_transform_run` | 執行編譯好的 AI 轉換規則 | -### 其他 +**其他** | 零件 | 說明 | |------|------| | `validate_json` | JSON Schema 驗證 | | `cron` | Cron 排程觸發 | -取得任一零件的 config 範本: +取得任一零件的 workflow 配置範本: ```bash acr parts scaffold gmail ``` +### 貢獻零件 + +零件是 TinyGo 編譯的 `.wasm` 檔案,stdin 進 JSON、stdout 出 JSON,就這樣。 + +**AI 可以直接幫你寫零件。** 把 API 文件和 [CONTRIBUTING.md](CONTRIBUTING.md) 一起貼給它,它生成 `main.go` 和 `component.contract.yaml`,你編譯、測試、提交: + +```bash +acr parts publish ./my-component/ +# 沙盒自動驗收(體積、syscall 掃描、Gherkin 測試) +# 通過後立即可用,等人工審核後對所有人開放 +``` + +每個零件都帶統計數字(執行次數 × 成功率),真實使用數據說話。 + --- ## CLI 指令 ``` -acr init 互動式初始化設定 -acr creds push [file] 上傳加密 credentials 至 CF KV -acr push 部署 workflow -acr run [--input] 執行 workflow -acr validate 執行前驗證 -acr parts 列出所有零件(含統計) -acr parts scaffold 取得 config 範本 -acr parts publish 提交零件至公眾庫 -acr list 列出已部署的 workflow -acr logs 查看執行記錄 -``` - ---- - -## 貢獻零件 - -詳見 [CONTRIBUTING.md](CONTRIBUTING.md)。 - -```bash -# 提交零件至公眾 registry(審核通過後對所有人開放) -acr parts publish ./my-component/ +acr init 互動式初始化(local / cloud / self-hosted) +acr creds push [file] 加密並上傳 credentials +acr push 部署 workflow +acr run [--input k=v] 執行 workflow +acr validate 執行前驗證(零件存在、credential 已上傳) +acr parts 列出所有零件(含執行統計) +acr parts scaffold 取得零件的 workflow config 範本 +acr parts publish 提交零件至公眾庫 +acr list 列出已部署的 workflow +acr logs 查看執行記錄 ``` --- @@ -232,3 +274,14 @@ acr parts publish ./my-component/ ## License MIT + +--- + +## 致謝 + +arcrun 的核心架構、21 個 WASM 零件、CLI 工具鏈與這份文件,由以下貢獻者共同打造: + +- **[@richblack](https://github.com/richblack)** — 創始人,產品設計與架構決策 +- **[Claude Sonnet](https://claude.ai)(Anthropic)** — 核心實作夥伴,負責零件開發、executor 架構、CLI 實作與程式碼審查 + +歡迎加入:[CONTRIBUTING.md](CONTRIBUTING.md)