From 0617dab70aabb74daaf17bcf9f538e4d05a5a6b6 Mon Sep 17 00:00:00 2001 From: Leo Date: Tue, 7 Jul 2026 06:39:04 +0000 Subject: [PATCH 1/2] =?UTF-8?q?docs(mcp):=20README=20=E6=94=B9=E7=82=BA?= =?UTF-8?q?=E5=AE=89=E8=A3=9D+=E4=BD=BF=E7=94=A8=E5=B0=8E=E5=90=91?= =?UTF-8?q?=EF=BC=8C=E9=9B=B6=E4=BB=B6=E6=8A=95=E7=A8=BF=E6=8B=86=E6=88=90?= =?UTF-8?q?=20CONTRIBUTING-components.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - README 補三種前端安裝(claude.ai connector / Claude Code / Claude Desktop), MCP URL 以源碼為準 = /mcp(DEFAULT_MCP_URL、resourceUri)。 - 認證段講 OAuth owner secret 閘 + MCP_STATIC_TOKEN 真祕密路徑,明講明碼-namespace 已移除。 - 工具總覽全用 arcrun_* 現役名(#20 rename)+ kbdb_* 資料層。 - 修正舊 README 兩處連結:.mcp.json url 補 /mcp、inspector 改 /mcp/inspector。 - 零件開發/投稿流程搬到 mcp/CONTRIBUTING-components.md,README 末留連結。 Co-Authored-By: Claude Opus 4.8 --- mcp/CONTRIBUTING-components.md | 71 ++++++++ mcp/README.md | 300 +++++++++++++++++++-------------- 2 files changed, 241 insertions(+), 130 deletions(-) create mode 100644 mcp/CONTRIBUTING-components.md diff --git a/mcp/CONTRIBUTING-components.md b/mcp/CONTRIBUTING-components.md new file mode 100644 index 0000000..913f7a7 --- /dev/null +++ b/mcp/CONTRIBUTING-components.md @@ -0,0 +1,71 @@ +# 貢獻新零件(WASM Component Authoring) + +> 這份文件寫給**貢獻者**——想開發並投稿新零件到 Arcrun 零件庫的人。 +> 只想「把 MCP 裝來用」的用戶請回 **[README.md](./README.md)**。 + +零件是 Arcrun 的最小執行單元,以 **TinyGo** 編譯為 `.wasm`,透過 stdin/stdout JSON 通訊,可在 Cloudflare Workers(Tier 1/2)和 Wazero 邊緣環境(Tier 3)執行。提交後 Registry 會自動跑沙盒驗收(體積、syscall 掃描、Gherkin 測試)。 + +--- + +## 步驟一:取得開發指引(必做) + +``` +arcrun_get_component_guide +``` + +指引包含:TinyGo 白名單 import、禁止行為、`component.contract.yaml` 完整範例、本地測試指令。**開發前務必先呼叫**,白名單與禁止行為以指引回傳為準。 + +## 步驟二:搜尋現有零件(別重造輪子) + +``` +arcrun_search_components("查詢 Google Sheets 資料") +``` + +若已有符合的零件,直接使用,不需要重新開發。 + +## 步驟三:開發零件(若缺件) + +依指引用 TinyGo 撰寫零件,只使用白名單 import: + +```go +import ( + "os" + "io" + "encoding/json" +) +``` + +編譯: + +```bash +tinygo build -o my_component.wasm -target=wasi . +``` + +本地測試: + +```bash +echo '{"input_field":"value"}' | wasmtime my_component.wasm +``` + +## 步驟四:提交零件 + +``` +arcrun_publish_component( + contract={...}, // component.contract.yaml 內容(合約物件) + wasm_base64="..." // base64(my_component.wasm) +) +``` + +Registry 自動執行沙盒驗收(體積、syscall 掃描、Gherkin 測試)。驗收通過才會進零件庫。 + +--- + +## 驗收與審查標準 + +`arcrun_publish_component` 的沙盒驗收會檢查: + +- **體積上限**:超過限制拒收。 +- **syscall 掃描**:只允許白名單 import;踩到禁止行為(網路直連、檔案系統逃逸等)拒收。 +- **Gherkin 測試**:合約裡的 `gherkin_tests` 必須全綠。 + +投稿前請自行用步驟三的本地測試把 Gherkin 情境跑過一遍,減少來回。 diff --git a/mcp/README.md b/mcp/README.md index cd7acb1..c9bc48b 100644 --- a/mcp/README.md +++ b/mcp/README.md @@ -5,181 +5,215 @@ Arcrun 是反過來的 n8n。n8n 從手寫程式開始,Arcrun 從 AI 描述開始——你說「去抓銀行匯率,用 Telegram 通知我」,AI 把它拆成三元組,Arcrun 查零件庫、組裝、執行。第一次需要 AI,之後自動跑,不再花 Token。 -本目錄是 Arcrun 的 **MCP Server**(已併入 arcrun 主庫 `arcrun/mcp/`),讓 Claude Code 等 AI client 直接呼叫 Arcrun 的工作流與零件功能。它是「薄殼」——連哪台 cypher / 哪個帳號由設定決定,與 CLI 共用同一份身份來源。 +本目錄是 Arcrun 的 **MCP Server**(已併入 arcrun 主庫 `arcrun/mcp/`),讓 claude.ai、Claude Code、Claude Desktop 等 AI client 直接呼叫 Arcrun 的工作流與零件功能。它是「薄殼」——連哪台 cypher / 哪個帳號由設定決定,與 CLI 共用同一份身份來源。 + +**這份文件教你怎麼把這個 MCP 裝到你的前端來用。** 想貢獻新零件(投稿 WASM 元件)請見文末的 [貢獻新零件](#貢獻新零件)。 --- -## 快速上手 +## MCP 連線 URL(先搞懂這個) -### 最簡單:用 CLI 產生連線設定(推薦) +MCP 的 Streamable HTTP 端點路徑是 **`/mcp`**(worker 根路徑 `/` 會 404)。無論哪種前端,你要填的 URL 都是: + +| 部署 | MCP URL | +|------|---------| +| **官方託管 SaaS** | `https://mcp.arcrun.dev/mcp` | +| **自架 / 接案(self-hosted)** | `https://arcrun-mcp.<你的CF子域>.workers.dev/mcp` | + +> `<你的CF子域>` 是你 Cloudflare 帳號的 workers.dev 子域(`acr init --self-hosted` 部署後由 `workers_dev` 產生)。**請依你的實際部署子域調整。** +> 若你自己綁了 custom domain(如 `mcp.example.com`),URL 就是 `https://mcp.example.com/mcp`。 + +Transport 一律用 **`type: http`(Streamable HTTP)**。舊版 SSE(`type: sse`)已不支援。 + +--- + +## 安裝方式 + +### 1. claude.ai 雲端 connector(遠端) + +claude.ai 走 **OAuth 2.1 + PKCE** 認證(見下方[認證](#認證)),適合自架部署的 owner 遠端使用。 + +1. claude.ai → **Settings → Connectors → Add custom connector(新增自訂 connector)**。 +2. **MCP Server URL** 貼上你的 MCP URL(例:`https://arcrun-mcp.<你的CF子域>.workers.dev/mcp`)。 +3. 儲存後點 **Connect**,claude.ai 會自動發現 OAuth(透過 `/.well-known/oauth-protected-resource`)並跳到同意頁 `/authorize`。 +4. 在同意頁**輸入 owner secret**——就是你部署時用 `wrangler secret put MCP_OWNER_SECRET` 設的那組祕密(只有 owner 知道)。祕密正確才發 token,之後 claude.ai 用該 token 呼叫工具。 +5. token 有效期預設 30 天(`MCP_TOKEN_TTL`);到期後 claude.ai 會自動重走 OAuth,再輸一次 owner secret 即可。 + +> 官方 SaaS(`mcp.arcrun.dev`)走的是 partner-key 驗證,不是 owner-secret 同意頁;一般接案/自架用戶用的是上面這條 OAuth 路徑。 + +### 2. Claude Code(CC / IDE) + +Claude Code 用專案層 `.mcp.json`(HTTP transport)掛同一個 URL,auth 走 OAuth(首次連線時在瀏覽器完成 owner-secret 同意頁)。 + +**推薦:用 CLI 自動產生**(依你的 arcrun 設定寫對的 URL,接案切資料夾自動切帳號): ```bash acr mcp-setup ``` -`acr mcp-setup` 依你的 arcrun 設定(env > 專案 `.arcrun.yaml` > 全域)在當前資料夾寫 `.mcp.json`, -Claude Code 進此資料夾就連對的 MCP。`acr init` 也會自動順帶跑這步。 +`acr mcp-setup` 依「env > 專案 `.arcrun.yaml` > 全域」解析出的 `mcp_url` 在當前資料夾寫 `.mcp.json`;沒設 `mcp_url` 就 fallback 平台預設 `https://mcp.arcrun.dev/mcp`。`acr init` 也會自動順帶跑這步。 -- 沒設 `mcp_url` → 連平台預設 `https://mcp.arcrun.dev`。 -- 自架 / 接案:在 `.arcrun.yaml` 設 `mcp_url`(或 `ARCRUN_MCP_URL` env)指向自己 / 客戶的 MCP,再 `acr mcp-setup`。 - -### 手動設定(Claude Desktop / Cursor) - -`.mcp.json` / client MCP 設定內容(remote HTTP MCP): +**手動:** 在專案根建 `.mcp.json`: ```json { "mcpServers": { "arcrun": { "type": "http", - "url": "https://mcp.arcrun.dev" + "url": "https://arcrun-mcp.<你的CF子域>.workers.dev/mcp" } } } ``` -> 平台託管的 MCP 需要 arcrun API Key 授權;自架的 MCP 綁你自己的 cypher。 -> 連線 URL 以 `acr mcp-setup` 產出的為準。 +官方 SaaS 版本把 `url` 換成 `https://mcp.arcrun.dev/mcp` 即可。 -> 使用 `type: http`(Streamable HTTP transport)。舊版 SSE 格式(`type: sse`)已不支援。 - ---- - -## MCP Tools 說明 - -### 零件開發(WASM) - -零件是 Arcrun 的最小執行單元,以 TinyGo 編譯為 `.wasm`,透過 stdin/stdout JSON 通訊。 - -| Tool | 說明 | -|------|------| -| `arcrun_get_component_guide` | **開發新零件前必須先呼叫。** 取得 TinyGo 開發指引,包含白名單 import、禁止行為、contract YAML 範例、本地測試指令。 | -| `arcrun_search_components` | 用自然語言語意搜尋零件庫。例如:「查詢 Google Sheets 資料」、「發送 LINE 訊息」。回傳零件清單含 canonical_id、描述、評分。 | -| `arcrun_get_component` | 取得指定零件的完整合約(input_schema、output_schema、gherkin_tests、評分統計等)。 | -| `arcrun_publish_component` | 提交 TinyGo WASM 零件。需提供 `contract`(合約物件)與 `wasm_base64`(編譯後的 .wasm base64)。Registry 自動執行沙盒驗收。 | - -### 工作流執行 - -| Tool | 說明 | -|------|------| -| `arcrun_validate_yaml` | 部署前驗證工作流 YAML 的 schema。輸入 `yaml_content`。 | -| `arcrun_push_workflow` | 將工作流 YAML 部署至雲端引擎。輸入 `api_key` 與 `yaml_content`。 | -| `arcrun_run_workflow` | 觸發已部署的工作流執行。輸入 `api_key`、`name`,選填 `input`(帶進 trigger context)。 | - -### 工作流管理 - -| Tool | 說明 | -|------|------| -| `arcrun_list_workflows` | 列出已部署的工作流。可傳入選填的 `tag` 參數篩選。 | -| `arcrun_get_workflow` | 取得指定工作流的 metadata。輸入 `name`。 | - -### 零件管理 - -| Tool | 說明 | -|------|------| -| `arcrun_list_components` | 列出已發佈的零件。可傳入選填的 `tag` 參數篩選。 | - -### Tag 管理 - -| Tool | 說明 | -|------|------| -| `arcrun_create_tag` | 建立新 tag。輸入 `name`(必填)與 `description`(選填)。 | -| `arcrun_list_tags` | 列出當前命名空間下所有 tag。 | -| `arcrun_delete_tag` | 刪除指定 tag。輸入 `tag_name`。 | -| `arcrun_tag_resource` | 為工作流或零件加上 tag。輸入 `resource_type`、`resource_id`、`tag_name`。 | -| `arcrun_untag_resource` | 移除工作流或零件的 tag。 | - ---- - -## 零件開發流程(WASM) - -Arcrun 的零件是 TinyGo 編譯的 `.wasm`,透過 stdin/stdout JSON 通訊,可在 Cloudflare Workers(Tier 1/2)和 Wazero 邊緣環境(Tier 3)執行。 - -### 步驟一:取得開發指引 - -``` -arcrun_get_component_guide -``` - -指引包含:TinyGo 白名單 import、禁止行為、`component.contract.yaml` 完整範例、本地測試指令。 - -### 步驟二:搜尋現有零件 - -``` -arcrun_search_components("查詢 Google Sheets 資料") -``` - -若已有符合的零件,直接使用,不需要重新開發。 - -### 步驟三:開發零件(若缺件) - -依指引用 TinyGo 撰寫零件,只使用白名單 import: - -```go -import ( - "os" - "io" - "encoding/json" -) -``` - -編譯: +也可用 CLI 直接加(HTTP transport): ```bash -tinygo build -o my_component.wasm -target=wasi . +claude mcp add --transport http arcrun https://arcrun-mcp.<你的CF子域>.workers.dev/mcp ``` -本地測試: +### 3. 本機 Claude Desktop -```bash -echo '{"input_field":"value"}' | wasmtime my_component.wasm +Claude Desktop 的 `claude_desktop_config.json`(macOS:`~/Library/Application Support/Claude/`;Windows:`%APPDATA%\Claude\`)加一組 remote HTTP MCP: + +```json +{ + "mcpServers": { + "arcrun": { + "type": "http", + "url": "https://arcrun-mcp.<你的CF子域>.workers.dev/mcp" + } + } +} ``` -### 步驟四:提交零件 - -``` -arcrun_publish_component( - contract={...}, // component.contract.yaml 內容 - wasm_base64="..." // base64(my_component.wasm) -) -``` - -Registry 自動執行沙盒驗收(體積、syscall 掃描、Gherkin 測試)。 +> **若你的 Claude Desktop 版本尚不支援 remote HTTP MCP**,改用 `mcp-remote` proxy 把 remote MCP 橋成本機 stdio: +> +> ```json +> { +> "mcpServers": { +> "arcrun": { +> "command": "npx", +> "args": ["-y", "mcp-remote", "https://arcrun-mcp.<你的CF子域>.workers.dev/mcp"] +> } +> } +> } +> ``` +> +> `mcp-remote` 會自動處理 OAuth 流程(跳瀏覽器完成 owner-secret 同意頁)。 --- -## 工作流開發流程 +## 認證 -### 步驟一:搜尋零件 +MCP 打進 arcrun = 觸及該租戶 **KBDB 全量讀寫**,必須有真認證。中介層(`src/middleware/partner-auth.ts`)依序嘗試: -``` -arcrun_search_components("查詢匯率") -arcrun_search_components("發送 Telegram 訊息") -``` +1. **OAuth 2.1 access_token**(自架部署的遠端正規路徑) + - claude.ai / Claude Code / Claude Desktop 遠端連線都走這條。 + - 唯一的人類祕密閘在 `/authorize` 同意頁:輸入 **`MCP_OWNER_SECRET`**(部署時以 CF Secret 設定,只有 owner 知道)。祕密正確才發 authorization code → 換 access_token。 + - 只知道「網址」的人打得開同意頁、能跑 DCR,但**沒有 owner secret 就換不到 token**,打 `/mcp` 一律 401。 +2. **`MCP_STATIC_TOKEN`(CF Secret,本機 / CLI 相容路徑)** + - 本機 Claude Code / GUI 若不想每次走 OAuth,可設 `MCP_STATIC_TOKEN`(真祕密),把它當 `Authorization: Bearer <此值>` 帶進 `.mcp.json`。 + - 這是取代**已廢除的「明碼 namespace 當 bearer」**舊路徑的安全做法——用真祕密 token,而非把 namespace 明碼放行。 +3. **官方 SaaS(`MULTI_TENANT` 未設 / `true`)** → KBDB partner-key(`pk_live…`)驗證,行為不變。 -### 步驟二:部署前驗證 +> ⚠️ **舊的「明碼 namespace bearer」路徑已從預設移除**(送 `Bearer leo` 就能讀 leo 全部資料的洞已補)。只有明確設 `ALLOW_PLAINTEXT_NAMESPACE="true"`(遷移期逃生門,預設關、將 SUNSET)才會恢復,正式環境勿用。 -``` -arcrun_validate_yaml(yaml_content="...") -``` +完整安全模型(PKCE、audience 綁定、KV 儲存鐵律、redirect 白名單)見 **[OAUTH.md](./OAUTH.md)**。 -### 步驟三:部署 +--- -``` -arcrun_push_workflow(api_key="ak_xxx", yaml_content="...") -``` +## 部署前置(self-hosted 用戶) -### 步驟四:觸發執行 +自架前,先把 OAuth 需要的 KV 與 Secret 就緒(完整清單見 **[OAUTH.md](./OAUTH.md) §7**,此處只摘要): -``` -arcrun_run_workflow(api_key="ak_xxx", name="exchange-rate-notify", input={"currency_pair": "USD/TWD"}) -``` +1. `acr init --self-hosted` 部署 arcrun-mcp worker。 + - **CLI 路徑**:`OAUTH_KV` namespace 由 `deploy.ts` 自動建立並填入真 id(零手動)。 + - **手動直推**:`wrangler kv namespace create OAUTH_MCP` → 把 id 貼進 `mcp/wrangler.toml` 的 `[[kv_namespaces]] OAUTH_KV`。 +2. **設 owner secret**:`wrangler secret put MCP_OWNER_SECRET`(輸入只有你知道的強祕密)。 +3. (選配)**設本機相容 static token**:`wrangler secret put MCP_STATIC_TOKEN`。 +4. (選配)`[vars]` 調整 `MCP_OWNER_NAMESPACE`(預設 `leo`)/ `MCP_TOKEN_TTL`(預設 2592000=30 天)/ `MCP_ALLOWED_REDIRECT_HOSTS`。 +5. 驗收:`curl /.well-known/oauth-protected-resource` → 200;未帶 token 打 `/mcp` → 401 帶 `WWW-Authenticate`;claude.ai 加 connector 走完 OAuth 能連上。 + +> KV / secret 未就緒時,OAuth 端點誠實回 503、`/mcp` 回 401(不假綠),既有官方 SaaS partner-key 路徑不受影響。 + +--- + +## MCP Tools 總覽 + +連上後,前端會看到兩組工具:`arcrun_*`(平台功能)與 `kbdb_*`(資料層)。 + +### `arcrun_*` + +**工作流(Workflow)** + +| Tool | 一句話 | +|------|--------| +| `arcrun_validate_yaml` | 部署前驗證工作流 YAML schema。 | +| `arcrun_push_workflow` | 把工作流 YAML 部署到雲端引擎。 | +| `arcrun_run_workflow` | 觸發已部署的工作流執行(可帶 `input`)。 | +| `arcrun_list_workflows` / `arcrun_get_workflow` / `arcrun_delete_workflow` | 列出 / 取得 / 刪除工作流(直問 cypher-executor 真實狀態)。 | +| `arcrun_search_workflows` | 語意搜尋工作流。 | +| `arcrun_list_recent_executions` / `arcrun_list_paused_executions` / `arcrun_get_execution_trace` | 查最近 / 暫停中的執行、取單次執行 trace。 | + +**零件(Component)** + +| Tool | 一句話 | +|------|--------| +| `arcrun_search_components` | 用自然語言語意搜尋零件庫。 | +| `arcrun_list_components` / `arcrun_get_component` | 列出零件、取單一零件完整合約。 | +| `arcrun_get_component_guide` | 取得 TinyGo 開發指引(**開發新零件前必先呼叫**)。 | +| `arcrun_publish_component` | 提交 WASM 零件(見[貢獻新零件](#貢獻新零件))。 | + +**Recipe(配方 · 公庫 / 私庫)** + +| Tool | 一句話 | +|------|--------| +| `arcrun_recipe_search` / `arcrun_recipe_list` | 搜尋 / 列出配方。 | +| `arcrun_recipe_pull` / `arcrun_recipe_push` / `arcrun_recipe_delete` | 拉取 / 推送 / 刪除私庫配方。 | +| `arcrun_recipe_submit_p` | 投稿配方到公庫。 | + +**Skill / Example** + +| Tool | 一句話 | +|------|--------| +| `arcrun_list_skills` / `arcrun_get_skill` | 列出 / 取得技能。 | +| `arcrun_list_examples` / `arcrun_get_example` / `arcrun_search_examples` | 列出 / 取得 / 搜尋範例。 | + +**Tag** + +| Tool | 一句話 | +|------|--------| +| `arcrun_create_tag` / `arcrun_list_tags` / `arcrun_delete_tag` | 建立 / 列出 / 刪除 tag。 | +| `arcrun_tag_resource` / `arcrun_untag_resource` | 為工作流或零件加上 / 移除 tag。 | + +**其他** + +| Tool | 一句話 | +|------|--------| +| `arcrun_whoami` | 回報當前身份 / namespace(與 `acr whoami` 對齊)。 | +| `arcrun_report_feedback` | 回報使用回饋。 | +| `arcrun_get_gui_context` | 取 arcrun-gui 畫布上下文。 | + +### `kbdb_*`(資料層薄殼) + +類 Supabase 萬用表:AI 只有 template + slot 可用,**不提供建表 / SQL tool**(儲存鐵律)。 + +| Tool | 一句話 | +|------|--------| +| `kbdb_search` | 語意搜尋 KBDB 記錄。 | +| `kbdb_query` | 依條件查詢記錄。 | +| `kbdb_get_record` | 取單一記錄。 | +| `kbdb_create_record` | 建立記錄(依 template + slots)。 | +| `kbdb_list_templates` / `kbdb_create_template` | 列出 / 建立 template。 | --- ## Inspector 測試界面 -開啟 `https://mcp.arcrun.dev/inspector`(或自架 MCP 的 `/inspector`)即可在瀏覽器中互動式測試所有 MCP tools。 +開啟 `<你的 MCP origin>/mcp/inspector`(官方=`https://mcp.arcrun.dev/mcp/inspector`)即可在瀏覽器互動式測試所有 MCP tools。 --- @@ -192,3 +226,9 @@ arcrun_run_workflow(api_key="ak_xxx", name="exchange-rate-notify", input={"curre - AI 的操作結果即時反映在 arcrun-gui 的畫布上 詳細開發指南請參閱 **[GUIDE.md](./GUIDE.md)**。 + +--- + +## 貢獻新零件 + +想投稿 WASM 零件(TinyGo 開發、本地測試、`arcrun_publish_component` 提交、沙盒驗收)?完整流程見 **[CONTRIBUTING-components.md](./CONTRIBUTING-components.md)**。 -- 2.52.0 From 5491409003ff1ca6c04b9448adb9278291b0d726 Mon Sep 17 00:00:00 2001 From: Leo Date: Tue, 7 Jul 2026 08:06:28 +0000 Subject: [PATCH 2/2] =?UTF-8?q?docs(mcp):=20README=20=E5=8A=A0=E3=80=8C?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=20/=20acr=20update=E3=80=8D=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - acr update:self-hosted 重跑部署、只部署變動 Worker、未變動略過(--force 全部重部)。 - 說明「新裝 vs 更新」差不多同一套流程,拿新零件(如 code)/新版就跑更新。 - 標待核佔位:下載源正從 GitHub codeload 改指 Gitea(Arcrun#4),確切行為待該 PR 定案。 Co-Authored-By: Claude Opus 4.8 --- mcp/README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/mcp/README.md b/mcp/README.md index c9bc48b..e93f1ea 100644 --- a/mcp/README.md +++ b/mcp/README.md @@ -106,6 +106,24 @@ Claude Desktop 的 `claude_desktop_config.json`(macOS:`~/Library/Application --- +## 更新(取得新零件 / 新版) + +**更新流程 ≈ 重跑一次部署,已安裝的自動略過。** self-hosted 用戶要拿新零件(例如新增的 `code` 零件)或新版引擎時: + +```bash +acr update +``` + +`acr update` 會下載最新的 Arcrun 部署物,只**部署新增 / 變更的 Worker,未變動的自動跳過**(終端會顯示「N 個未變動已跳過」)。它與 `acr init --self-hosted` 走同一條路(下載 → 注入 KV id → `wrangler deploy`),差別只在:`init` 是首次(建 KV / R2 + 寫 config),`update` 是沿用既有 config 重部署有變動的 Worker。所以「新裝 arcrun」和「更新」其實**差不多同一套流程**——想拿新零件 / 新版就跑更新。 + +- 只在 **self-hosted 模式**可用(部署在你自己的 Cloudflare);官方 SaaS 用戶由平台自動更新,不需要跑。 +- 要強制把**全部** Worker 重部署一遍:`acr update --force`。 +- 冪等:KV namespace / D1 等基礎設施已存在則重用,不會重建。 + +> ⚠️ **更新源現況(待核佔位)**:`acr update` 的下載源正從 GitHub codeload 改指 **Gitea 自有真身**(修復追蹤 Arcrun#4)。上面描述以「修好後的 Gitea 版」為準;確切指令與來源行為**待該修復 PR 定案**,屆時再回來校正。 + +--- + ## 認證 MCP 打進 arcrun = 觸及該租戶 **KBDB 全量讀寫**,必須有真認證。中介層(`src/middleware/partner-auth.ts`)依序嘗試: -- 2.52.0