5f381a44a6
壓測(docs/壓測報告.md)發現 acr init --self-hosted 對任何非官方 CF 帳號都裝不起來,且設定寫死全域單檔 + 強制 TTY。本次一併修: R2 dead storage 全清(#3#4,registry-canon Phase 1.5 補完): - cypher-executor wrangler.toml/test.toml/types.ts 移除 WASM_BUCKET binding - CLI deploy.ts/init.ts/cf-api.ts/config.ts 移除 R2 建立邏輯與 wasm_bucket - R2 綁信用卡違背「開源免費自架」核心;bucket 名 WASM_BUCKET 本就非法 → self-hosted 改為只需 Workers + KV(皆免費額度、不綁卡) fork 帳號部署阻斷(#1#2): - deploy.ts 新增 stripOfficialOnlyBindings(),注入暫存副本時移除 [[routes]]/zone_name/[[r2_buckets]]/[ai](fork 沒有 arcrun.dev zone) - 不刪 repo 內 toml(官方 prod CI 部署仍需 routes),只在 CLI self-hosted 路徑 strip 設定分層 + 非互動(#7#8): - config.ts loadConfig 改三層:env > 專案層 .arcrun.yaml(就近往上找)> 全域 - init 支援 --account-id/--api-token flag + CLOUDFLARE_* env,缺才互動 - 新增 acr config --where 顯示每個值的來源層(token 自動遮罩) - gitignore 一併排除 .arcrun.yaml 驗收:tsc 全綠;三層 merge 端對端測試 8/8;strip 對真實 toml 驗證 routes/R2/AI 移除而 name/workers_dev/KV 保留。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import type { ComponentRunner, EdgeType } from '../types';
|
||
|
||
export const VALID_EDGE_TYPES = new Set([
|
||
// 現有
|
||
'PIPE', 'IF', 'FOREACH', 'CONTINUE',
|
||
// 新增:執行語意
|
||
'IS_A', 'ON_SUCCESS', 'ON_FAIL',
|
||
// 新增:觸發語意
|
||
'ON_CLICK', 'CALLS_SUBFLOW',
|
||
// 新增:結構語意(記錄圖結構,不執行)
|
||
'CONTAINS', 'HAS_STYLE', 'HAS_BEHAVIOR',
|
||
]);
|
||
|
||
/** 內建零件 ID 集合(Worker 記憶體中已有實作)*/
|
||
export const BUILTIN_IDS = new Set([
|
||
'webhook', 'comp_passthrough', 'comp_uppercase', 'comp_counter',
|
||
]);
|
||
|
||
/** 語意邊 → EdgeType 映射(ADR-057 u6u L1:支援中文語意關係詞)
|
||
* 完成後 → PIPE(成功後觸發下一個)
|
||
* 失敗時 → CONTINUE(失敗後繼續)
|
||
* 對每個 → FOREACH(迭代執行)
|
||
* 條件滿足時 → IF(條件分支)
|
||
*/
|
||
export const SEMANTIC_EDGE_MAP: Record<string, EdgeType> = {
|
||
// 中文語意詞
|
||
'完成後': 'PIPE',
|
||
'失敗時': 'ON_FAIL',
|
||
'對每個': 'FOREACH',
|
||
'條件滿足時': 'IF',
|
||
// 英文別名
|
||
'SUCCESS': 'ON_SUCCESS',
|
||
'FAIL': 'ON_FAIL',
|
||
'CLICK': 'ON_CLICK',
|
||
'SUBFLOW': 'CALLS_SUBFLOW',
|
||
};
|
||
|
||
/**
|
||
* 內建零件表(靜態函數)
|
||
* WASM 零件 = 各自獨立 Worker,cypher-executor 走 HTTP URL 呼叫(不從 R2 讀)
|
||
*/
|
||
export const BUILTIN_COMPONENTS = new Map<string, ComponentRunner>([
|
||
['comp_passthrough', (ctx) => ctx],
|
||
['comp_uppercase', (ctx) => {
|
||
const c = ctx as Record<string, unknown>;
|
||
return { ...c, text: String(c.text || '').toUpperCase() };
|
||
}],
|
||
['comp_counter', (ctx) => {
|
||
const c = ctx as Record<string, unknown>;
|
||
return { ...c, count: (Number(c.count) || 0) + 1 };
|
||
}],
|
||
]);
|
||
|
||
export const SCORE_THRESHOLD = 0.5;
|