[總管交辦] 新增通用 code 零件(n8n Code node 式 sandbox inline JS)——一次性程式邏輯逃生口,不再鑄 domain 零件
#10
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
[總管交辦] 新增 arcrun 平台原語:通用
code零件(n8n Code node 式,sandbox inline JS)。leo 2026-07-06 拍板。為什麼
code節點的 config。km_wiki_card_parse(domain 零件)被否——改由本code零件承載其解析邏輯。要做
通用
code零件(比照現有component.contract.yaml慣例):stdin_stdout_json,同現有零件模型。)eval任意 JS(會拿到 Worker 環境)。標準解=QuickJS 編成 wasm(JS 直譯器跑 wasm 沙箱),合 arcrun 現有 wazero/workerd wasm 模型 +no_network/no_filesystem_syscall契約:user code 只能 stdin→stdout、碰不到網路/檔案/secret/env。subagent 確認並設計此沙箱、回報設計待審。{error}envelope,不讓 Worker 掛。首個消費者
km_wiki_ingest_drainworkflow(Arcrun#8):card→envelope 解析改成本code節點的內聯程式(直接沿用 subagent 已寫的card-to-envelope.mjs邏輯),workflow 其餘用現成零件(cron/http_request/foreach)。丟掉km_wiki_card_parse。部署 / 閘
對齊
守 arcrun typed-ops 的安全模型(沙箱、無 ambient 能力);保持 registry 乾淨(一個通用逃生口 vs domain 零件增生)。完整脈絡見頂層 SDD
kb-ingest-architecture。[總管] 2026-07-06
[總管] 設計+PoC 完成(未部署)
runtime 真相:一零件=一 Worker;host(TS)只認「WASI-preview1 + stdin/stdout JSON」、與 guest 語言無關 → 載 QuickJS-wasm ≈ 載 TinyGo-wasm。
no_network/no_fs=host 不給 import(ENOSYS)=建構保證,非 guest 自律。沙箱:QuickJS-wasm 三層(Worker isolate → QuickJS wasm 線性記憶體 → JS context 只有純 ECMAScript → user code)。無 ambient 能力;唯一 curated builtin=
sha256(純函式);資源限制 timeout/mem/stack/輸出/code 皆有上限;錯誤結構化分型。PoC:分支
feat/issue-10-code-component(未碰 main/GitHub、未部署)。registry/components/code/(contract/sandbox.mjs/index.ts/DESIGN.md/test)。單測 12/12 綠,含 card→envelope:沙箱輸出與原planCard逐欄全等(content_hash 逐字相同)→ 可丟km_wiki_card_parse。封裝裁定(總管)=A:
quickjs-emscripten(Workers variant)直接用——已驗證、可立即上。B(wasi-sdk 自建 QuickJS 走現有 shim、最同構)本環境無工具鏈,列後續技術債。待 live:① sha256 改純 JS SHA-256 prelude 字串注入(Worker Web Crypto 是 async 不合同步 host-call)② runCode 移植 index.ts Worker 版 ③ register + wrangler 部署 leo21c=leo 部署/寫入閘。
[總管] Workers 就緒(未部署) — 分支
feat/issue-10-code-component(HEAD1a7b463)。@jitl/quickjs-singlefile-mjs-release-sync(wasm 內嵌、同步、CF Workers 相容,免[[wasm_modules]]/nodejs_compat)。sha256=純 JS SHA-256 prelude 字串注入(無 async Web Crypto host-call),與 Node crypto 逐字等價。index.ts=可部署 Hono Worker host;補 wrangler.toml(arcrun-code/code.arcrun.dev)、DEPLOY.md;contract 過 registry zod。[總管] ✅ 部署 leo21c 成功、live 驗過
arcrun-code.leo21c.workers.dev(Versiona2cedb17),註冊cmp_5694d08a(HTTP 201)。.wasm(CompiledWasm Module)+newVariant注入 ② CF 凍結同步Date.now()→ timeout 改 指令計數 interrupt(max_ticks)。commit08a7922。08-01 複核:✅ 已完成,關閉
證據(源碼實查):
registry/components/code/存在於 gitea/main(非分支)component.contract.yaml齊備:canonical_id: code、io_model: stdin_stdout_json、no_network_syscall: true、no_filesystem_syscall: true,且有sandbox_limits(timeout_ms 1000/memory 16MiB/max_stack 512KiB)——issue 要求的沙箱+資源限制+無 ambient 能力全部落地code已在 20 顆現役零件清單內(見 #76 body 的 prod/cypher/search逐顆實測列表)通用逃生口已建成,
km_wiki_card_parse這類 domain 零件增生問題按設計解掉。