問答備忘 技能改造

方案三:工作目錄偵測機制

建立時間:2026-04-09 08:22 | 來源:主公與由貞對話

📌 問題背景

主公提問

方案三:工作目錄偵測是怎麼做?一樣先通說,再舉 2 個 Skill 說明。

📐 通則:工作目錄偵測機制

核心概念

由貞執行 Skill 時,自動偵測當前工作目錄的特徵檔案(如 .wb-project、.git、package.json 等),識別專案身份,無需主公傳參數,也無需預先配置。

偵測邏輯(由貞執行時自動進行)

1

取得當前工作目錄

workspace 或主公提及的路徑

2

向上遍歷目錄樹,尋找「專案標記檔案」

優先順序:① .wb-project → ② workbuddy.config → ③ package.json → ④ .git/config

3

讀取標記檔案中的專案名稱

解析 PROJECT_NAME 等關鍵值

4

代入 Skill 執行

自動完成部署或更新

標記檔案格式

.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("請問當前是哪個專案?")

🔧 範例一:upload-html 改造

改造前(Hardcode 版)

# 固定寫死
npx wrangler pages deploy . --project-name wholistics --commit-dirty true

改造後 — SKILL.md 新增「自動偵測」區段

## 自動專案偵測

由貞執行時自動進行:

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

🔧 範例二:updatememo 改造

改造前(Hardcode 版)

# 固定流程
- 複製到 wh-all-deploy/
- 部署到 wholistics 專案
- 連結固定為 wholistics.pages.dev

改造後 — SKILL.md 新增「自動偵測」區段

## 自動專案偵測

由貞執行時自動進行:

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

📊 方案三 vs 方案二 比較

⚡ 方案三(目錄偵測)

  • 只需說 Skill 名稱
  • ⭐⭐⭐ 全自動
  • 需建立 .wb-project(一次)
  • 進入不同目錄即可切換
  • 適合日常開發、多專案
  • 需修改由貞偵測邏輯

🔧 方案二(動態參數)

  • 需記得傳參數
  • ⭐⭐ 半自動
  • 每次都要傳
  • 需改參數才能切換
  • 適合臨時部署、快速測試
  • 只需改 SKILL.md

🎯 三方案整合架構

最終架構:參數 > 目錄偵測 > 全域預設 > 詢問

┌─────────────────────────────────────────────┐
│  主公說:「upload-html」                      │
└─────────────────────────────────────────────┘
              ↓
    ┌─────────────────────┐
    │ 有傳參數?           │
    │ → 有:直接使用 $1    │  ← 方案二(覆蓋)
    └─────────────────────┘
              ↓ 無
    ┌─────────────────────┐
    │ 當前目錄有 .wb-project?│
    │ → 有:自動讀取        │  ← 方案三(自動)
    └─────────────────────┘
              ↓ 無
    ┌─────────────────────┐
    │ 全域預設值?         │
    │ → 有:使用預設       │  ← 備用
    └─────────────────────┘
              ↓ 無
    ┌─────────────────────┐
    │ 詢問主公            │
    │ 「請問部署到哪個專案?」│
    └─────────────────────┘

最佳實踐:兩方案疊加使用 → 既能全自動,又保留手動覆蓋彈性,學員零負擔上手

📋 後續行動

修改 upload-html SKILL.md

加入「自動偵測」區段,支援向上遍歷尋找 .wb-project

修改 updatememo SKILL.md

加入「自動偵測」區段,動態推算 DEPLOY_DIR、BASE_URL

建立 project-init Skill

學員執行後自動生成 .wb-project,一次配置,後續所有 Skill 自動識別

建立 .wb-project 標準格式文件

定義 KEY=VALUE 格式規範,供所有 Skill 遵循

由貞核心升級

統一專案偵測函式,所有 Skill 共用,降低維護成本