# 群環智行 — 工作區建立與 Rule 設定腳本

> 本文件是一份可直接交給 Bob 執行的互動式安裝腳本。
> 將本文件放入你的工作區根目錄，然後在 Bob 的對話視窗中輸入：
>
> ```
> 請讀取工作區中的 setup-workspace.md 並依照腳本指示逐步執行
> ```
>
> Bob 將逐步說明每個步驟的用途，並詢問你的同意後才執行。
> 若你選擇不執行某個步驟，Bob 將略過並繼續下一步。

---

## 給 Bob 的執行指示

Bob，請依照以下規則執行本腳本：

1. **每個 Step 執行前**，先用簡單易懂的語言向使用者說明「這個步驟要做什麼、為什麼需要做」
2. **取得使用者明確同意**（回覆「是」、「Y」、「好」、「執行」等均視為同意）後才執行
3. 若使用者回覆「否」、「N」、「略過」、「跳過」等，則跳過此步驟，顯示「已略過 Step X，繼續下一步」
4. **每個步驟完成後**，回報執行結果，確認成功後才進入下一步
5. 若執行失敗，停下來回報錯誤訊息，不要繼續，等待使用者指示
6. 所有操作均在**目前工作區**進行，不修改任何全域（Global）設定

---

## Step 0：偵測作業系統（自動執行，不需詢問）

Bob 請執行以下指令偵測作業系統，並將結果告知使用者：

```
請執行系統指令，判斷目前的作業系統是 Windows 還是 macOS（或其他），並回報結果。
若為 Windows，請執行：
  [System.Runtime.InteropServices.RuntimeInformation]::OSDescription
若為 macOS，請執行：
  uname -s
```

Bob 請記住偵測結果，後續 Step 4 的 Rule 內容與 Step 7 的驗證指令將根據此結果分支。

---

## Step 1：前置環境確認（自動執行，不需詢問）

Bob 請告知使用者：「我將先確認你的電腦上已安裝哪些必要工具，這個步驟只會讀取資訊，不會安裝或修改任何東西。」

然後根據作業系統執行對應指令：

**Windows（PowerShell）：**
```powershell
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; $OutputEncoding = [System.Text.Encoding]::UTF8; chcp 65001 > $null;
Write-Host "--- Node.js / npx ---"; node --version 2>&1; npx --version 2>&1
Write-Host "--- Python ---"; python --version 2>&1
Write-Host "--- uvx ---"; uvx --version 2>&1
```

**macOS（Terminal）：**
```bash
echo "--- Node.js / npx ---"; node --version 2>&1; npx --version 2>&1
echo "--- Python ---"; python3 --version 2>&1
echo "--- uvx ---"; uvx --version 2>&1
```

Bob 請整理結果，以條列方式告知使用者哪些工具已安裝、哪些未安裝，並說明：
「未安裝的工具不影響本篇的執行，但在第二篇 MCP Server 設定時可能需要。」

---

## Step 2：建立工作區設定資料夾

**Bob 請向使用者說明：**
「我將在你的工作區建立 `.bob/rules/` 資料夾。這是 Bob 存放工作區設定的地方，所有 Rule 規則檔案都會放在這裡。這個操作只會在你目前開啟的工作區資料夾內建立子資料夾，不會影響其他工作區。」

**取得同意後，Bob 請執行：**

在工作區根目錄建立以下資料夾結構：
- `.bob/`
- `.bob/rules/`

建立完成後，請確認資料夾已存在並回報。

---

## Step 3：建立語言規則（language-rules.md）

**Bob 請向使用者說明：**
「我將建立「語言規則」。這個規則的作用是：**無論你用什麼語言向 Bob 提問，Bob 都會用繁體中文回答你**。即使 Bob 的全域設定是英文，這個工作區的規則優先級更高，確保所有回應都是中文。」

**取得同意後，Bob 請建立檔案 `.bob/rules/language-rules.md`，內容如下：**

```
所有對話回應**必須使用繁體中文（Traditional Chinese, zh-TW）**，此規則優先於 Global Settings 中的語言偏好設定（即使 Global Settings 設定為 English）。

無論使用者以何種語言提問，Bob 的所有說明、解釋、分析、回應文字一律使用繁體中文。
技術術語（如 `function`、`array`、`Git`、`API`、`PR` 等）可保留英文原文。
```

---

## Step 4：建立 Shell 執行規則

Bob 請根據 Step 0 偵測到的作業系統，執行對應的分支：

---

### Step 4-W（Windows）：建立 PowerShell 執行規則

**Bob 請向使用者說明：**
「我將建立「PowerShell 執行規則」。這個規則的作用是：**確保 Bob 在 Windows 環境執行命令時，中文字不會出現亂碼**，並自動使用正確的 Windows 語法（而不是 Linux/macOS 的語法）。如果你曾看過 Bob 執行命令後出現一堆問號或方塊字，這個規則可以解決這個問題。」

**取得同意後，Bob 請建立檔案 `.bob/rules/powershell-rules.md`，內容如下：**

```
# PowerShell 執行規則

執行任何 PowerShell 命令時，Bob 必須遵循以下規則：

## 規則 1：自動編碼設定

**所有** PowerShell 命令必須以 UTF-8 編碼設定開頭：

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; $OutputEncoding = [System.Text.Encoding]::UTF8; chcp 65001 > $null;

## 規則 1-A：Python 子 process 編碼（必須同步設定）

執行任何 python 命令前，必須額外設定 $env:PYTHONIOENCODING：

$env:PYTHONIOENCODING = "utf-8"; $env:PYTHONUTF8 = "1";

完整 Python 執行前綴：

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; $OutputEncoding = [System.Text.Encoding]::UTF8; chcp 65001 > $null; $env:PYTHONIOENCODING = "utf-8"; $env:PYTHONUTF8 = "1";

## 規則 2：語法轉換

自動將 Bash 風格的 && 轉換為 PowerShell 語法：
- 無依賴關係：使用分號 ;
- 有依賴關係：使用條件檢查 if ($?)

## 規則 3：複雜度判斷

- 1-2 個命令：單行執行，使用分號
- 3-5 個命令：單行執行，使用條件檢查
- 6+ 個命令或包含邏輯：建立 .ps1 檔案

## 禁止事項

- 禁止直接使用 && 運算符
- 禁止省略 UTF-8 編碼設定
- 禁止執行 python 命令時省略 $env:PYTHONIOENCODING = "utf-8" 設定
- 禁止在 Windows 使用 Linux 路徑格式（如 /home/user）
- 禁止使用 export 設定環境變數（應使用 $env:）
- 禁止假設命令會成功（應檢查 $?）
```

---

### Step 4-M（macOS）：建立 Shell 執行規則

**Bob 請向使用者說明：**
「我將建立「Shell 執行規則」。這個規則的作用是：**確保 Bob 在 macOS 環境執行命令時，使用正確的 bash/zsh 語法**，並避免使用 Windows 專用的指令格式。」

**取得同意後，Bob 請建立檔案 `.bob/rules/shell-rules.md`，內容如下：**

```
# Shell 執行規則（macOS）

執行任何 Shell 命令時，Bob 必須遵循以下規則：

## 規則 1：使用 bash/zsh 語法

- 使用 && 連接有依賴關係的命令（前一個成功才執行下一個）
- 使用 ; 連接無依賴關係的命令
- 複雜腳本建立 .sh 檔案執行

## 規則 2：Python 編碼設定

執行 python3 命令前，確保設定 PYTHONIOENCODING：

export PYTHONIOENCODING=utf-8
export PYTHONUTF8=1

## 規則 3：路徑格式

- 使用正斜線（/）作為路徑分隔符號
- 禁止使用反斜線（\）
- 使用 $HOME 代替硬編碼使用者路徑

## 禁止事項

- 禁止使用 PowerShell 語法（[Console]::、$env:、chcp、Write-Host 等）
- 禁止使用 Windows 路徑格式（如 C:\Users\）
- 禁止使用 pip，應使用 pip3
- 禁止使用 python，應使用 python3
```

---

## Step 5：建立檔案讀寫規則（file-io-rules.md）

**Bob 請向使用者說明：**
「我將建立「檔案讀寫效率規則」。這個規則的作用是：**避免 Bob 在處理大型檔案時耗費過多資源**。Bob 有時候會把一個很長的檔案整個讀進來，這會佔用大量的「記憶容量」（Context Window）。這個規則要求 Bob 先定位再讀取，讓對話保持流暢。一般使用者不太會感覺到差異，但對於需要分析大型文件的工作，這個規則很有幫助。」

**取得同意後，Bob 請建立檔案 `.bob/rules/file-io-rules.md`，內容如下：**

```
# 檔案讀寫效率規則

## 核心原則

「讀取整個檔案」是最後手段，不是預設行為。Bob 必須遵守「grep 先行、range 讀取、diff 修改」三階段工作流。

## 規則 1：讀取前必須先定位（grep 先行）

在對任何超過 100 行的檔案執行 read_file 之前，必須先用工具定位：
- grep：透過關鍵字找到行號
- GetSymbolsOverview：取得程式檔案的頂層結構
- FindSymbol：直接定位已知名稱的符號

## 規則 2：讀取必須指定範圍（range 讀取）

read_file 必須加上 range 參數，只讀取目標段落。

例外（允許整檔讀取）：
- 檔案總行數 <= 100 行
- 任務明確需要理解整個檔案的全域結構且無法用 GetSymbolsOverview 替代

## 規則 3：修改必須使用精準工具

- 修改已知程式碼區塊：apply_diff
- 全文替換字串：search_and_replace
- 插入新內容：insert_content
- 建立全新檔案：write_file
- 禁止用 write_file 修改已存在的大型檔案

## 規則 4：大型新檔案必須分批寫入

預估超過 300 行的新文件，禁止單次 write_file。
- <= 300 行：單次 write_file
- 301–600 行：拆成 2 個 part
- 601–1000 行：拆成 3–4 個 part

## 禁止事項

- 禁止對超過 100 行的檔案執行無 range 的 read_file
- 禁止用 write_file 修改已存在的大型檔案
- 禁止對預估超過 300 行的新檔案執行單次 write_file
```

---

## Step 6：建立 Markdown 撰寫規則（markdown-rules.md）

**Bob 請向使用者說明：**
「我將建立「Markdown 撰寫規則」。這個規則有兩個作用：第一，當 Bob 幫你產出 Markdown 文件或 PDF 時，**不使用 Emoji 圖示**（因為 Emoji 在轉成 PDF 時會造成 Adobe Acrobat 的字型錯誤）；第二，當 Bob 需要畫圖表時，**統一使用 Mermaid 語法**（讓圖表更美觀、可編輯）。如果你不常用 Bob 產出文件或圖表，這個規則影響不大，但有裝備總比沒有好。」

**取得同意後，Bob 請建立檔案 `.bob/rules/markdown-rules.md`，內容如下：**

```
# Markdown 撰寫規則

## 規則 1：Emoji 使用限制

當輸出內容為 Markdown 文件（.md）或 PDF 時，禁止使用 Emoji 字元。
Chat 對話回應不受此限制。

原因：Emoji 在 Chromium 轉 PDF 時會導致 Adobe Acrobat 字型警告。

替代方案（輸出 MD / PDF 時）：
- 提示、注意：[提示] [注意] [!]
- 完成、通過：[v] ○ (完成)
- 錯誤、禁止：[x] ● (禁止)
- 重點標記：[重點] [目標] 或粗體強調
- 資料夾、文件：[資料夾] [文件] 或 code 格式

## 規則 2：圖表格式使用原則

預設使用 Mermaid 語法（置於 mermaid 程式碼區塊）。
- 流程圖佈局限用 TD 或 LR，禁止使用 RL、BT、TB

例外（允許 ASCII 格式）：
1. 資料夾樹狀結構（├── └──）
2. UI 元件版面示意
3. 鍵盤快捷鍵示意

判斷順序：能用 Mermaid → 用 Mermaid；無法表達 → ASCII 格式
```

---

## Step 7：驗證所有設定檔案（自動執行，不需詢問）

Bob 請根據作業系統執行對應的驗證指令，並以條列方式回報每個檔案的狀態：

**Windows（PowerShell）：**
```powershell
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; $OutputEncoding = [System.Text.Encoding]::UTF8; chcp 65001 > $null;
$files = @(
    ".bob\rules\language-rules.md",
    ".bob\rules\powershell-rules.md",
    ".bob\rules\file-io-rules.md",
    ".bob\rules\markdown-rules.md"
)
foreach ($f in $files) {
    if (Test-Path $f) { Write-Host "[OK] $f" }
    else { Write-Host "[未建立或已略過] $f" }
}
```

**macOS（Terminal）：**
```bash
for f in ".bob/rules/language-rules.md" ".bob/rules/shell-rules.md" ".bob/rules/file-io-rules.md" ".bob/rules/markdown-rules.md"; do
  if [ -f "$f" ]; then echo "[OK] $f"; else echo "[未建立或已略過] $f"; fi
done
```

---

## Step 8：完成提示

Bob 請向使用者說明：

「第一篇設定已完成！以下是本次的設定摘要：」

然後列出：
- 已建立的 Rule 清單（各一行說明其用途）
- 已略過的項目（如有）

最後說明：
「**Rule 設定在重新啟動 Bob IDE 後正式生效。**
若你想繼續設定 MCP Server（讓 Bob 能夠上網、操控瀏覽器、讀寫 Office 文件），
請將 `setup-mcp.md` 放入工作區根目錄，並在對話視窗中輸入：

```
請讀取工作區中的 setup-mcp.md 並依照腳本指示逐步執行
```
」
