# Devin Desktop 編輯檔案。Maguyva 看懂整個儲存庫。

Canonical source: https://maguyva.ai/zh-hant/for-windsurf

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Devin Desktop（即 Windsurf IDE） 是編輯器，Devin Local 是代理。在 monorepo 中，代理仍然需要一張地圖，才知道哪個檔案才是重點。Maguyva 會為你的程式碼庫建立索引，並透過 MCP 回傳（語意、AST、圖譜與文字），所以「身分驗證邏輯在哪裡發生」這個問題，得到的會是真正的身分驗證流程，而不是七個測試替身。

> Devin Desktop 編輯你指向的目標。Maguyva 告訴 Devin Local 該指向哪個檔案。

## 每一層各自負責什麼

四個部分，各司其職。

### Devin Desktop

你和 Devin Local 實際工作的地方。

### @ 提及 + .devin/rules/

手動提供脈絡在儲存庫夠小時很好用，直到規模變大。

### Maguyva

透過 MCP 自動提供程式碼庫事實。

### 以工作區計費，而非席位

代理不需要付席位費。[查看定價](https://maguyva.ai/zh-hant/pricing)

## Devin Desktop 是編輯器，儘管用。

IDE 本身不是問題。Devin Local、Tab 自動完成、多檔案修改，以及 `.devin/rules/` 都非常出色，你也已經在用它們來做：

- 在目前開啟的檔案中使用即時建議與 Devin Local 編輯。
- 當變更範圍侷限於單一區域時，進行多檔案修改。
- 用 `.devin/rules/` 定義儲存庫慣例與風格規範。
- 用 `@` 提及功能把特定檔案拉進脈絡中。

繼續這樣做，這些都不會消失。

但在真正的 monorepo（有工作區依賴的 TypeScript、Python 服務、混合套件）中，只要相關檔案還沒進入 Devin Local 的視野，代理的脈絡就會出問題。

## 你已經試過的手動解法，以及它們會在哪裡失靈

四種手動解法，各自搭配對應的失效模式。左邊＝你現在的做法。右邊＝它會在哪裡出問題。

### // 提及檔案

你用 `@` 提及功能標出你認為重要的三個檔案。Devin Local 能在裡面乾淨地修改。

### // 提及只是猜測

這只有在你已經知道涉及哪些檔案時才有用。脈絡工具真正的價值，就是找出那些你根本不知道該提及的檔案。

### // 貼上程式碼片段

你把另一個套件裡的 200 行程式碼貼進 Devin Local，好讓它有足夠的脈絡。

### // 貼上的程式碼會過時

你早上 9 點貼上的片段，反映不出隊友在 11 點完成的 rebase。Devin Local 正在對著這個套件的幻影版本進行修改。

### // 寫一份脈絡文件

你寫了一份 `.devin/rules/` 檔案或架構說明文件。今天它是對的。

### // 文件過時的速度比程式碼快

任何手寫的東西都會過時。程式碼才是真相來源。一份說明佇列架構的文件，可能只對了一週，之後就永遠錯了。

### // 保留規則檔案

你新增 `.devin/rules/` 來規範命名、lint 與建置指令，對於行為規範很有效。

### // 規則 ≠ 索引

`.devin/rules/` 很適合放「commit 前務必先執行 pnpm tsc -b」這類規則。但它並不是一份可查詢的索引，涵蓋不了你 monorepo 裡每一個符號、檔案與呼叫點。

## Maguyva 是底層的那一層

它不是要取代 Devin Desktop，而是掛載在 Devin Local 的 MCP 支援上、負責儲存庫脈絡的那一層。

- **語意 + AST + 圖譜 + 文字**: 依意義、結構、依賴關係或字面搜尋。每一筆結果都會回傳檔案路徑與行號。
- **預設跨套件**: 涵蓋 monorepo 中每個套件的呼叫點與匯入者，不只是 Devin Local 目前開啟的那一個。
- **感知分支**: Maguyva 看得到 Devin Local 正在編輯的那個程式碼版本。
- **互補而非競爭**: `.devin/rules/` 繼續做它該做的事。`@` 提及功能也繼續做它該做的事。Maguyva 補上它們補不到的空缺。

> Devin Local 編輯你指向的檔案。
> Maguyva 告訴代理*該指向哪個檔案。*

## 三種 monorepo 工作流程

跨套件、跨語言，紮根於真實的呼叫圖，而不是 Devin Local 的 grep。

### 01. 在不提及任何檔案的情況下，找出跨套件的身分驗證流程

```text
devin> 這個 monorepo 裡，身分驗證邏輯發生在哪裡？

graph::query("驗證流程")
  packages/web/src/auth/session.ts:42       中介層
  packages/api/src/auth/jwt.ts:88           權杖驗證
  packages/shared/src/auth/types.ts:12      AuthContext
  packages/admin/src/auth/admin-only.ts:31  RBAC 閘門

→ 4 個進入點，橫跨 4 個套件，依呼叫點密度排序。
[exit 0]
```

你沒有提及檔案，也沒有貼上程式碼片段。Devin Local 已經拿到那四個真正重要的檔案，排序正確，可以做出有程式碼依據的修改。

### 02. 找出真正的實作，而不是測試替身

```text
devin> normalizePhoneNumber 是怎麼處理 E.164 格式的？

semantic::query("正規化電話號碼 E.164")
  packages/shared/util/phone.ts:88     normalizePhoneNumber()  ← 真正的實作
  packages/api/test/phone.spec.ts:14   jest.mock(...)          ← 測試替身
[exit 0]
```

名字會騙人，mock 會掩蓋真正的程式碼。Maguyva 會在每個套件中，把真正的實作排在測試 mock 之前。

### 03. 重構前先確認影響範圍

```text
devin> 這個 monorepo 裡，誰呼叫了 QueueDispatcher.publish？

graph::callers(QueueDispatcher.publish)
  packages/billing/* 中有 3 筆
  packages/audit/* 中有 1 筆
  packages/notifications/* 中有 1 筆
  services/python-worker/* 中有 1 筆  ← 跨語言，透過 gRPC stub
[exit 0]
```

跨套件，遇到多語言儲存庫時也跨語言，呼叫點會直接顯示在結果中。這份差異紮根於真實的匯入者，而不是 Devin Local 的 grep。

## 在 Devin Desktop 中設定

三個步驟。Free 方案：3 個儲存庫, 最多索引 5 萬行儲存庫程式碼，免信用卡。

### 01. 在 maguyva.ai 索引一個儲存庫

挑一個讓你最深刻感受到脈絡痛點的 monorepo。

### 02. 在 Devin Desktop 中把 Maguyva 加為 MCP 伺服器

`~/.config/devin/mcp_config.json`

```json
{
  "mcpServers": {
    "maguyva": {
      "url": "https://maguyva.tools/mcp",
      "headers": {
        "Authorization": "Bearer ${env:MAGUYVA_API_KEY}"
      }
    }
  }
}
```

### 03. 問一個你已經知道答案的問題

不要一開始就丟出整間公司的規模。從一個儲存庫、一個可驗證的問題開始，例如「跨套件有誰呼叫了 `formatInvoice`？」

## 索引一個你已經熟悉的儲存庫。

測試一個你能自行驗證答案的問題。
