e255e23f01
查官方文件(code.claude.com/docs/en/cloud-environments 的「What carries over」表)發現:今天裝好的 --scope user 機制很可能不會被雲端 session 讀到 (user-scope enabledPlugins 明文寫「不會帶到雲端」);先前引用的 「Pre-populate plugins for containers」是另一個機制(CLAUDE_CODE_PLUGIN_ SEED_DIR,給自架容器用),不是 claude.ai Cloud environments 產品。 新增 docs/cloud-environment-audit-20260820.md: - Plan A 風險(本機隔離環境重跑一次,貼新鮮輸出佐證腳本本身沒問題) - Plan B(官方文件證實可行:把 ISEP 宣告進連線 repo 自己的 settings.json) - Plan C(今天新查到:claude --cloud 直接從本機 checkout 打包,完全不經 過 GitHub 薄殼,官方文件證實可行) - 舊雲端環境變數逐一比對 credentials-map.md:八個名字(CLOUDFLARE_ACCOUNT_ID 等)確認來自 polaris/mira/.env(leo21c 現役),與 cloud 總管工作無關, 建議排除 - 薄殼/ISEP 共存風險分析(不會打架,除非 bootstrap.sh 重新把 InkStoneCo/ clone 進薄殼workspace) scripts/make-cloud-env.sh:NEEDED 從 1 個擴到 8 個,排除 leo21c 來源的 憑證,加註每個變數的出處依據。 docs/TESTING.md、docs/cloud-setup-script.sh、docs/cloud-session-bootstrap.md: 補上指向審計文件的警示與 Plan B/C 的 fallback 指引。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
89 lines
4.5 KiB
Bash
Executable File
89 lines
4.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# 管什麼: 產生「可以直接貼進 claude.ai Cloud environment」的兩塊內容,值由本腳本自己去 .env 拉。
|
||
# 為什麼: leo 2026-08-20「這些值你都有,你可以只寫名字然後 build 一個檔案給我」——
|
||
# 之前的做法是叫他自己拼湊,或叫他把設定貼給 AI 看,兩種都錯(一個沒效率,一個讓值經過對話)。
|
||
# 誤觸時怎麼關: 這支不擋任何東西。不想產生就別跑;產物在版控外,刪掉即可。
|
||
#
|
||
# 用法:bash scripts/make-cloud-env.sh
|
||
# 產物:~/.claude/cloud-env/<日期>.txt(權限 600,**不在任何 repo 裡**)
|
||
# 本腳本只寫「變數名字」,值在執行當下才從既有 .env 讀出來寫進產物 —— 值不進版控、不進對話。
|
||
set -euo pipefail
|
||
|
||
# ── 雲端需要哪些變數(只有名字。要加就加在這裡)──────────────────
|
||
# 2026-08-20 盤點(inkstone/InkStoneCo#14):舊雲端環境幾乎整包搬自
|
||
# polaris/mira/.env(🔴 leo21c 現役),混進了 leo21c 的 CF 帳號憑證與
|
||
# Google 服務帳號私鑰。下面這份清單是逐一對過 credentials-map.md 之後
|
||
# 篩出的「cloud 總管實際會用到、且不是 leo21c 寫入憑證」的變數。
|
||
# 刻意不收:CLOUDFLARE_ACCOUNT_ID/CLOUDFLARE_API_TOKEN(無名字的)/
|
||
# PRIVATE_KEY/CLIENT_EMAIL/NAMESPACE——這些是 mira 自己的憑證,不是
|
||
# cloud CC session 的需求,留著只會平白多一份 leo21c 暴露面。
|
||
# 完整分析見 docs/cloud-environment-audit-20260820.md §7。
|
||
NEEDED=(
|
||
GITEA_TOKEN_CLAUDE_CODE # 機器帳號 claude-code 的 Gitea token;plugin 安裝與 git push-back 都靠它
|
||
TELEGRAM_BOT_TOKEN # notify_leo 備援路徑(優先路徑是 arcrun MCP workflow,免密碼)
|
||
TELEGRAM_CHAT_ID # 同上
|
||
GEMINI_API_KEY # arcrun 工作流用(matrix/arcrun、products/arcrun-rag 兩邊 .env 都列)
|
||
NOTION_INTEGRATION_TOKEN # leo 註記「給 arcrun 用的」
|
||
UNCLE6_CF_API_KEY # uncle6 帳號(非 leo21c)的 CF 操作
|
||
N8N_UNCLE6_API_KEY # n8n MCP 用
|
||
CLOUDFLARE_API_TOKEN_YOULIN_CC_USE # D37 測試帳號,本來就是設計給 CC 用的
|
||
)
|
||
# 下面兩個不放進 NEEDED(會讓 leo 自己決定要不要開,見審計文件 §7 尾段):
|
||
# CLOUDFLARE_API_TOKEN_CC_SHIPPING_CORE / CLOUDFLARE_ACCOUNT_ID_GEEK6688
|
||
# ——加了雲端就有 geek6688 出貨機的寫入能力,是否要開屬於 leo 的風險判斷。
|
||
# 要加:手動在 NEEDED 陣列補上這兩個名字即可,值一樣是這支腳本自動去 .env 撈。
|
||
|
||
# ── 去哪裡找值(credentials-map.md 記的六個 .env)────────────────
|
||
BASE="${INKSTONE_ROOT:-$HOME/Documents/tech_projects/InkStoneCo}"
|
||
ENV_FILES=(
|
||
"$BASE/.env"
|
||
"$BASE/matrix/arcrun/.env"
|
||
"$BASE/products/arcrun-rag/.env"
|
||
"$BASE/polaris/mira/.env"
|
||
"$BASE/matrix/kbdb-graph-plugin/.env"
|
||
"$BASE/arcrun_harness/.env"
|
||
)
|
||
|
||
lookup() { # $1=變數名 → 印出值(找不到就空)
|
||
local name="$1" f v
|
||
for f in "${ENV_FILES[@]}"; do
|
||
[ -f "$f" ] || continue
|
||
v=$(grep -E "^[[:space:]]*(export[[:space:]]+)?${name}=" "$f" 2>/dev/null | tail -1 \
|
||
| sed -E "s/^[[:space:]]*(export[[:space:]]+)?${name}=//" \
|
||
| sed -E 's/^"(.*)"$/\1/; s/^'"'"'(.*)'"'"'$/\1/')
|
||
[ -n "$v" ] && { printf '%s' "$v"; return 0; }
|
||
done
|
||
return 1
|
||
}
|
||
|
||
OUT_DIR="$HOME/.claude/cloud-env"
|
||
mkdir -p "$OUT_DIR"; chmod 700 "$OUT_DIR"
|
||
OUT="$OUT_DIR/$(date +%Y%m%d-%H%M%S).txt"
|
||
|
||
SETUP="$(cd "$(dirname "$0")/.." && pwd)/docs/cloud-setup-script.sh"
|
||
[ -f "$SETUP" ] || { echo "🔴 找不到 $SETUP" >&2; exit 1; }
|
||
|
||
MISSING=()
|
||
{
|
||
echo "claude.ai → Cloud environments → 你的環境。下面兩塊各自貼進對應欄位。"
|
||
echo "產生時間:$(date '+%Y-%m-%d %H:%M')"
|
||
echo
|
||
echo "════════ ① Environment variables(一行一個,名字與值分開填)════════"
|
||
for n in "${NEEDED[@]}"; do
|
||
if v=$(lookup "$n"); then
|
||
echo "$n=$v"
|
||
else
|
||
echo "$n=<🔴 這台機器的 .env 裡找不到,要 leo 提供>"
|
||
MISSING+=("$n")
|
||
fi
|
||
done
|
||
echo
|
||
echo "════════ ② Setup script(整段貼,一字不改)════════"
|
||
cat "$SETUP"
|
||
} > "$OUT"
|
||
chmod 600 "$OUT"
|
||
|
||
echo "✅ 產生完成:$OUT"
|
||
echo " 變數 ${#NEEDED[@]} 個|找不到值的 ${#MISSING[@]} 個 ${MISSING[*]:-}"
|
||
echo " 🔴 這個檔含金鑰真身:貼完就刪(rm '$OUT'),它刻意不在任何 repo 裡。"
|