Files
Arcrun/scripts/thin-shell-smoke.sh
T
uncle6me-web 5d38b599fd feat(#11): CLI/MCP 薄殼對齊 — P0 run 死端點修 + P1 list 同源 + R4 防複發機制
P0 CLI run 改打 /webhooks/named/:name/trigger 真端點(原打 /webhooks/<name> 死端點 404)。
P1 CLI/MCP list 收斂到 GET /webhooks/named(KV 同源):
   - CLI list 停 CfKvClient 直連 KV,順手修 key 前綴 bug(原讀 workflow: 對不上部署的 {apiKey}:wf:)
     + self-hosted 不再需 CF API token。
   - MCP u6u_list_workflows 從讀 KBDB record 改讀 GET /webhooks/named(registry 簽名加 partnerToken)。
R4 防複發機制:
   - cli-mcp-capability-matrix.md(13 能力對照,docs/ gitignored 不進此 commit,僅本機)
   - thin-shell-smoke.sh(對真端點斷言非 404,本機手動跑非 CI/cron)
   - 機制自驗:注入故意死端點當場攔下、exit 1。

依賴關係:本批依賴 #8(webhooks-named GET 補 description/created_at 欄位、search/backfill 端點),
故疊在 feat/issue-8 branch 上、作獨立 commit。

⚠️ tsc 綠 = code done 非完成。端到端待 leo21c(CLI/MCP 真打通 200 非 404、smoke 對已部署 prod
全綠——目前 smoke 揭 #8 search/backfill 在 prod 仍 404=未部署)。P2 validate 收斂待 #10、
tag resource_id 語意債待方向①。#11 留 open。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 19:36:58 +08:00

98 lines
3.9 KiB
Bash
Executable File
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.
#!/bin/bash
# thin-shell-smoke.sh — 薄殼防複發機制層 2thin-shell-alignment SDD / issue #11 R4
#
# 目的:讓「薄殼打了不存在的 server 端點」(死端點假綠)當場現形。
# 對 CLI/MCP 各能力對應的 cypher-executor 端點打一次,斷言 **非 404**。
# 404 = route 不存在 = 死端點 → 紅燈。其他狀態(401/400/200…)= 端點存在 → 綠。
#
# ⚠️ flag 紅線(SDD C2/R4.2):本機/手動跑,**非 CI、非 cron、非輪詢**。
# 宣稱「CLI/MCP 對齊/完成」前手動跑一次即可。對齊「執行鏈路不依賴 CI」鐵律。
#
# 用法:
# CYPHER_URL=https://cypher.arcrun.dev ./scripts/thin-shell-smoke.sh
# self-hostedCYPHER_URL=https://<你的 cypher>.workers.dev ...
# 不帶 API key 也能驗端點存在性(401 仍算「端點活著」)。帶 key 可更深驗:
# ARCRUN_API_KEY=xxx CYPHER_URL=... ./scripts/thin-shell-smoke.sh
set -o pipefail
CYPHER_URL="${CYPHER_URL:-https://cypher.arcrun.dev}"
CYPHER_URL="${CYPHER_URL%/}"
API_KEY="${ARCRUN_API_KEY:-}"
PASS=0
FAIL=0
declare -a DEAD=()
# probe METHOD PATH LABEL
# 斷言端點非 404。404 → 死端點(紅)。連線失敗 → 紅(但標明是網路非死端點)。
probe() {
method="$1"; path="$2"; label="$3"
url="${CYPHER_URL}${path}"
if [ "$method" = "POST" ]; then
if [ -n "$API_KEY" ]; then
code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 15 -X POST -H "X-Arcrun-API-Key: ${API_KEY}" -H 'Content-Type: application/json' -d '{}' "$url" 2>/dev/null)
else
code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 15 -X POST -H 'Content-Type: application/json' -d '{}' "$url" 2>/dev/null)
fi
else
if [ -n "$API_KEY" ]; then
code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 15 -H "X-Arcrun-API-Key: ${API_KEY}" "$url" 2>/dev/null)
else
code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 15 "$url" 2>/dev/null)
fi
fi
code="${code:-000}"
if [ "$code" = "000" ]; then
echo " ⚠️ $label — 連線失敗(網路/DNS,非死端點判定):$method $path"
FAIL=$((FAIL+1))
elif [ "$code" = "404" ]; then
echo " ❌ $label — 死端點 404$method $path"
DEAD+=("$label: $method $path")
FAIL=$((FAIL+1))
else
echo " ✅ $label — 端點存在(HTTP ${code}):$method $path"
PASS=$((PASS+1))
fi
}
echo "=== thin-shell smoke:對 ${CYPHER_URL} 驗端點存在性(斷言非 404)==="
echo ""
echo "── 薄殼核心能力(CLI/MCP 共用端點)──"
# 部署:CLI acr push / MCP u6u_deploy_workflow(方向①收斂後同此)
probe POST /webhooks/named "deploy(push)"
# 執行已部署:CLI acr run <name> / MCP u6u_execute_workflow#11 P0 修的)
probe POST /webhooks/named/__smoke__/trigger "run(trigger)"
# 執行本機 YAML/cypher/execute
probe POST /cypher/execute "execute"
# listCLI acr list / MCP u6u_list_workflows#11 P1 收斂的)
probe GET /webhooks/named "list"
# search workflowMCP u6u_search_workflows#8 新增)
probe GET "/workflows/search?q=smoke" "search_workflow"
# 驗證:MCP arcrun_validate_yaml
probe POST /validate "validate"
# backfill search entries#8
probe POST /workflows/backfill-search-entries "backfill"
echo ""
echo "── 其他薄殼端點 ──"
probe GET /me "whoami"
probe POST /credentials "creds_push"
probe POST /recipes "recipe"
probe GET /kbdb/templates "kbdb_templates"
probe POST /cypher/search "validate_local_graph(cypher/search)"
echo ""
echo "=== 結果:${PASS} 端點存在 / ${FAIL} 異常 ==="
if [ ${#DEAD[@]} -gt 0 ]; then
echo ""
echo "🔴 死端點(route 不存在,薄殼打了會 404):"
for d in "${DEAD[@]}"; do echo " - $d"; done
echo ""
echo "→ 修法:對照 cli-mcp-capability-matrix.md,把薄殼改打存在的 route,或補 server route。"
exit 1
fi
echo "✅ 無死端點。"