方案三:工作目錄偵測是怎麼做?一樣先通說,再舉 2 個 Skill 說明。
由貞執行 Skill 時,自動偵測當前工作目錄的特徵檔案(如 .wb-project、.git、package.json 等),識別專案身份,無需主公傳參數,也無需預先配置。
workspace 或主公提及的路徑
優先順序:① .wb-project → ② workbuddy.config → ③ package.json → ④ .git/config
解析 PROJECT_NAME 等關鍵值
自動完成部署或更新
.wb-project(最輕量,推薦)
PROJECT_NAME=my-blog PROJECT_TYPE=cloudflare-pages
# 由貞執行時的偽代碼 def detect_project(cwd): # 向上遍歷最多 5 層目錄 for level in range(5): current = cwd + ("../" * level) # 優先尋找 .wb-project if exists(current + ".wb-project"): return read_project_name(current + ".wb-project") # 其次 workbuddy.config if exists(current + "workbuddy.config"): return parse_json(current + "workbuddy.config")["project"]["name"] # 都找不到 → 詢問主公 return ask_user("請問當前是哪個專案?")
# 固定寫死 npx wrangler pages deploy . --project-name wholistics --commit-dirty true
## 自動專案偵測 由貞執行時自動進行: 1. **偵測當前目錄**(workspace 或對話中提及的路徑) 2. **尋找專案標記**(依序): - ① `.wb-project` → 讀取 PROJECT_NAME - ② `workbuddy.config` → 讀取 project.name - ③ `package.json` → 讀取 name 欄位 3. **若都找不到** → 詢問主公「請問部署到哪個專案?」 ## 執行範例 | 情境 | 主公指令 | 由貞行為 | |------|---------|---------| | 有 .wb-project | `upload-html` | 自動讀取 PROJECT_NAME,部署 | | 無標記檔 | `upload-html` | 詢問「請問專案名稱?」 | | 在子目錄執行 | `upload-html` | 向上遍歷找到 .wb-project 後部署 |
# 情境:主公在 C:\Users\...\my-blog\src\ 執行 upload-html # 該目錄沒有 .wb-project,但上層 my-blog\ 有 由貞偵測: ① C:\...\my-blog\src\.wb-project → ❌ 不存在 ② C:\...\my-blog\.wb-project → ✅ 存在!PROJECT_NAME=my-blog 執行指令: npx wrangler pages deploy . --project-name my-blog --commit-dirty true
# 固定流程
- 複製到 wh-all-deploy/
- 部署到 wholistics 專案
- 連結固定為 wholistics.pages.dev
## 自動專案偵測 由貞執行時自動進行: 1. **偵測當前工作目錄** 2. **尋找專案標記**: - `.wb-project` → PROJECT_NAME, DEPLOY_DIR - `workbuddy.config` → 完整配置 3. **動態推算路徑**: - 若無 DEPLOY_DIR → 預設為 `../{PROJECT_NAME}-deploy/` 4. **若都找不到** → 詢問主公 ## 執行範例 | 情境 | 主公指令 | 由貞行為 | |------|---------|---------| | 在專案根目錄 | `updatememo` | 自動讀 .wb-project,部署 | | 在子目錄 | `updatememo` | 向上找到 .wb-project 後部署 | | 無標記檔 | `updatememo` | 詢問「請問備忘要部署到哪個專案?」 |
# 情境:主公在 C:\Users\...\my-blog\posts\ 執行 updatememo
由貞偵測:
向上遍歷找到 C:\...\my-blog\.wb-project
讀取:PROJECT_NAME=my-blog
動態推算:
DEPLOY_DIR = C:\...\my-blog-deploy\
BASE_URL = https://my-blog.pages.dev
執行:
1. 複備忘 → C:\...\my-blog-deploy\25-xxx.html
2. 更新 index.html 連結 → https://my-blog.pages.dev/25-xxx.html
3. 部署 → npx wrangler pages deploy ... --project-name my-blog
┌─────────────────────────────────────────────┐
│ 主公說:「upload-html」 │
└─────────────────────────────────────────────┘
↓
┌─────────────────────┐
│ 有傳參數? │
│ → 有:直接使用 $1 │ ← 方案二(覆蓋)
└─────────────────────┘
↓ 無
┌─────────────────────┐
│ 當前目錄有 .wb-project?│
│ → 有:自動讀取 │ ← 方案三(自動)
└─────────────────────┘
↓ 無
┌─────────────────────┐
│ 全域預設值? │
│ → 有:使用預設 │ ← 備用
└─────────────────────┘
↓ 無
┌─────────────────────┐
│ 詢問主公 │
│ 「請問部署到哪個專案?」│
└─────────────────────┘
最佳實踐:兩方案疊加使用 → 既能全自動,又保留手動覆蓋彈性,學員零負擔上手
加入「自動偵測」區段,支援向上遍歷尋找 .wb-project
加入「自動偵測」區段,動態推算 DEPLOY_DIR、BASE_URL
學員執行後自動生成 .wb-project,一次配置,後續所有 Skill 自動識別
定義 KEY=VALUE 格式規範,供所有 Skill 遵循
統一專案偵測函式,所有 Skill 共用,降低維護成本