Files
Arcrun/cli/src/commands/update.ts
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

69 lines
2.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* acr update — 拉新 GitHub release,重新部署零件/引擎到用戶自己的 Cloudflare。
*
* 與 acr init --self-hosted 走同一條「下載 release → 注入 KV id → wrangler deploy」的路,
* 差別只在:init 是首次(建 KV/R2 + 寫 config),update 是沿用既有 config 重部署變動的 Worker。
*
* 對應 SDD.agents/specs/arcrun/sdk-and-website/self-hosted-init.md §3「acr update」
*
* 誠實限制(mindset §7 / SDD §6):部署依賴 GitHub release(含預編譯 wasm),
* release 產製管道補上前,誠實回報未實作,不假裝更新成功。
*/
import chalk from 'chalk';
import { loadConfig } from '../lib/config.js';
import {
wranglerAvailable,
downloadAndDeploy,
type DeployContext,
} from '../lib/deploy.js';
export async function cmdUpdate(): Promise<void> {
const config = loadConfig();
if (config.mode !== 'self-hosted') {
console.log(chalk.yellow('\n acr update 只用於 self-hosted 模式(部署在你自己的 Cloudflare)。'));
console.log(chalk.gray(' 目前模式:' + config.mode + '。如要 self-host,先跑 acr init --self-hosted。\n'));
process.exit(1);
}
if (!config.cloudflare_account_id || !config.cf_api_token) {
console.log(chalk.yellow('\n config 缺 cloudflare_account_id / cf_api_token,無法部署。'));
console.log(chalk.gray(' 請重新跑 acr init --self-hosted。\n'));
process.exit(1);
}
if (!wranglerAvailable()) {
console.log(chalk.yellow('\n ✗ 找不到 wranglerCloudflare CLI)。請先 npm i -g wrangler。\n'));
process.exit(1);
}
console.log(chalk.bold('\n acr update — 拉新 release 並重新部署\n'));
const ctx: DeployContext = {
accountId: config.cloudflare_account_id,
apiToken: config.cf_api_token,
workerSubdomain: extractSubdomain(config.cypher_executor_url),
kvNamespaceIds: {
WEBHOOKS: config.webhooks_kv_namespace_id ?? '',
CREDENTIALS_KV: config.credentials_kv_namespace_id ?? '',
},
};
const result = await downloadAndDeploy(ctx);
if (result.implemented) {
console.log(chalk.green('\n ✓ 更新完成\n'));
} else {
console.log(chalk.yellow(' ⚠ 更新尚未自動化:'));
console.log(chalk.gray(' ' + result.message.split('\n').join('\n ')) + '\n');
}
}
/** 從 cypher_executor_urlhttps://arcrun-cypher-executor.<sub>.workers.dev)抽 subdomain。*/
function extractSubdomain(url?: string): string {
if (!url) return '';
const m = url.match(/arcrun-cypher-executor\.([^.]+)\.workers\.dev/);
return m?.[1] ?? '';
}