Files
Arcrun/.claude/rules/01-tech-stack.md
T
uncle6me-web 922a57fe34 arcrun — AI workflow execution engine (clean history)
Self-hosted 開源:WASM 零件 + recipe + cypher-executor,跑在你自己的 Cloudflare。

此為重建的乾淨歷史起點(移除曾誤 commit 的 GCP SA 金鑰,舊歷史保留在
richblack/arcrun 與本地 backup 分支)。含:
- acr init --self-hosted installer(建 KV/R2 + codeload 拉預編譯 wasm + wrangler deploy + seed recipe)
- recipe push 把關(資料外流提醒 + 打通檢查)
- 19 個正當零件預編譯 wasm(claude_api/km_writer/kbdb_upsert_block 排除:違反 DECISIONS §1)
- CLI / cypher-executor / registry / 完整 SDD

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 15:52:38 +08:00

4.0 KiB
Raw Blame History

技術棧硬限制

三層語言對應(絕對不可混用)

層級 語言 位置 職責
零件(Component TinyGo 或 AssemblyScript → WASM registry/components/{name}/ 所有業務邏輯
零件 Worker 包裝 TypeScript(固定模板,不寫業務邏輯) .component-builds/{name}/ WASI shimstdin/stdout JSON
Orchestration Worker TypeScript + Hono cypher-executor/ HTTP routing、workflow 執行排程、host functions
CLI TypeScript + Node.js cli/ acr 指令
Python SDK Python python-sdk/ HTTP thin wrapper + client 端加密
JS SDK TypeScript + Web Crypto js-sdk/ HTTP thin wrapper + client 端加密
Frontend React 19 + Vite + Tailwind v4 landing/ Cloudflare Pages

零件實作規範

只有兩種合法語言

  • TinyGotinygo build -target=wasi -o {name}.wasm main.go
  • AssemblyScriptasc main.ts --target release -o {name}.wasm

I/O 模型

  • stdinJSON input
  • stdoutJSON output
  • 不用 HTTP server,不監聽 socketWASI preview1 沒 socket

Host Functions(零件呼叫外部能力的唯一管道)

u6u namespace 下:

Host Function 用途
u6u.http_request 發 HTTP 請求
u6u.kv_get 讀 Cloudflare KVWorker 側依 key 前綴路由到正確 KV)
u6u.crypto_decrypt AES-GCM 解密(encryption key 永不暴露給 WASM
u6u.crypto_sign_rs256 RSA-SHA256 簽章(PKCS8 bytes 傳入)

所有 host function 在 cypher-executor/src/lib/wasi-shim.ts 實作。零件透過 WASI import 使用。

資料儲存

儲存 用途 Key 格式
Cloudflare KV WEBHOOKS workflow 定義(cypher binding YAML webhook:{api_key}:{name}
Cloudflare KV CREDENTIALS_KV 加密 credential {api_key}:cred:{name}
Cloudflare KV RECIPES auth recipe / 動態 API recipe auth_recipe:{service}, rec_{hash}
Cloudflare KV USERS_KV 用戶資料 user:{api_key}
Cloudflare KV SESSIONS_KV session session:{token}
Cloudflare KV ANALYTICS_KV 執行分析 execution:{timestamp}:{id}
Cloudflare KV EXEC_CONTEXT workflow 執行中的 context ctx:{execution_id}:{node_id}
Cloudflare R2 WASM_BUCKET 只用於用戶自製零件Phase 5 以後啟用) {api_key}:cmp:{hash}

警告:R2 不存平台內建零件的 WASM。平台零件已 bundle 進各自的 Worker binary[[wasm_modules]]import ... assert { type: 'webassembly' })。

加解密規範

  • 演算法AES-GCM 256-bit
  • 加密位置Client 端(CLI / Python SDK / JS SDK
    • Pythoncryptography 套件
    • JSWeb Crypto APIcrypto.subtle
  • 解密位置Server 端 WASM primitive(透過 host function crypto_decrypt
    • cypher-executor TS 不解密,只提供 host function
    • ENCRYPTION_KEY 只在 Worker host function 內部讀取,永不經 stdin / 回傳值傳給 WASM
  • 傳輸格式{ name, encrypted, iv }iv base64、encrypted base64

網路部署

  • 平台 API(對外)cypher.arcrun.devcypher-executor
  • Landingarcrun.dev
  • 每個零件 Worker
    • 對內(cypher-executor 用來 fetch component,避開同 zone 死鎖)arcrun-{kebab}.{WORKER_SUBDOMAIN}.workers.dev
      • 例:arcrun-kbdb-get.uncle6-me.workers.dev
      • cypher-executor 從 wrangler.toml [vars] WORKER_SUBDOMAIN 組出此 URL
    • 對外(可選,零件對全網開放被 curl 用){kebab}.arcrun.dev
    • 新增 component worker 部署清單name = "arcrun-{kebab}" + [[routes]] 對外(可選)+ dashboard 啟用 workers.dev(必須)
  • 部署工具Wrangler