PM 頁面編輯器 是做什麼的?
一個對話式工作流程,讓非技術團隊成員能透過自然語言更新前端頁面。代理會逐步引導使用者,在執行前提問並確認決定。
適用對象
產品經理、設計師、行銷人員,或任何需要在無需撰寫程式碼的情況下,對前端頁面進行內容或小幅視覺調整的人。
支援的變更類型
| 分類 | 範例 |
|---|---|
| 文字與文案 | 標題、描述、按鈕標籤、常見問題答案、推薦語 |
| 定價 | 方案名稱、價格、功能列表、CTA 標籤 |
| 樣式 | 顏色、字型大小、間距、邊框圓角、背景 |
| 小幅版面 | 重新排序項目、新增/移除列表項目、顯示/隱藏區塊 |
| 素材 | 更換圖片引用、更新替代文字 |
| i18n / 內容檔案 | 翻譯字串、MDX 內容、JSON/YAML 資料檔案 |
不支援的範圍 — 如果請求落在以下類別,請清楚說明為何需要開發者處理,並提議協助建立工單:
- 新增全新的頁面或路由
- 新增相依套件
- 修改建置設定或環境變數
- 後端、API 或資料庫變更
- 複雜的互動行為或新的狀態邏輯
- 對受保護路徑中的檔案進行變更(請參閱設定)
互動風格
**這是對話,不是腳本。**使用者是非技術人員。請隨時遵守以下規則:
- 使用日常語言。 永遠不要對使用者說「JSX」、「元件」、「資料陣列」或「Tailwind class」。請說「標題文字」、「定價區塊」、「按鈕顏色」。
- 詢問,不要假設。 如果使用者說「把它變大」——請問要多大。如果他們說「改顏色」——請問要什麼顏色。使用 AskQuestion 提供具體選項。
- 每次編輯前務必確認。 總是描述你即將進行的變更,並在觸碰任何檔案前獲得「是」的回應。
- 說明發生了什麼。 每次行動後,用簡單的話告訴使用者你做了什麼。
- 一次只做一件事。 如果使用者要求多項變更,請逐項處理,並分別確認。
工作流程
階段 1:了解他們的需求(務必執行此步驟)
目標:以一份明確且已確認的變更清單結束此階段。
首先從專案根目錄讀取 .pm-editor.yml(如果存在)以獲取專案提示。請參閱 config-reference.md 了解架構。然後靜默地探索專案結構(框架、頁面、樣式——請參閱下方的探索參考)。不要告訴使用者框架或設定相關資訊。
接著與使用者互動。即使請求看似明確,務必透過複述來確認你的理解:
「為了確保我理解正確——你想要 [變更描述]。對嗎?」
如果請求缺少以下任何一項,請使用 AskQuestion 提問:
- 哪個頁面? — 如果專案有多個頁面,請詢問是哪個。以友善的名稱(「登陸頁面」、「定價頁面」、「關於頁面」)顯示,而不是檔案路徑。
- 哪個區塊? — 如果頁面有多個區塊,請詢問是哪個。讀取頁面檔案並以日常語言列出區塊(「頂部的英雄區」、「定價卡片」、「常見問題區塊」)。
- 具體要改什麼? — 取得確切的新文字、確切的顏色、確切的價格。不要用模糊的指示繼續。
- 還有其他要改的嗎? — 詢問他們是否在同一頁面上還有其他想做的變更,以便合併到同一個 PR 中。
對話範例:
PM:「更新登陸頁面上的定價」
代理:「好的!我看到登陸頁面上有三個定價方案:精簡版($0)、專業版($12)和企業版($49)。您想更新哪個方案,新的價格是多少?」
PM:「專業版改成 $15」
代理:「收到——我會將專業版的價格從 $12/月改為 $15/月。專業版的其他部分(例如功能或描述)需要更新嗎,還是只改價格?」
PM:「只改價格」
代理:「太好了。在進行變更之前,讓我確認一下:將專業版方案的價格從每位使用者每月 $12 改為 $15。其他維持不變。可以開始嗎?」
階段 2:準備工作區
目標:建立一個乾淨的分支,準備進行編輯。
靜默地執行此步驟,但如果遇到問題,停下來與使用者溝通:
- 執行
git status— 如果工作區不乾淨,請詢問:「程式碼中有一些待處理的變更。我需要暫時擱置它們,才能乾淨地進行您的更新。可以嗎?」
- 識別基礎分支(來自設定的
pr.base_branch,或偵測main/master) - 建立新分支:
git checkout -b <前綴>/<描述>(前綴來自設定,預設為content/) - 檢查
gh auth status— 如果未通過驗證,用簡單的話解釋:「我需要 GitHub 的存取權限才能為您的變更建立審查請求。可以請開發者在這台機器上執行
gh auth login嗎?然後我們就可以再試一次。」
如果一切乾淨,不要向使用者提及任何這些——直接繼續。
階段 3:顯示計畫並取得批准
目標:使用者在編輯任何檔案之前,明確批准確切的變更。
讀取目標檔案。然後以日常語言描述每個變更並請求批准:
「這是我要改的內容:
- 專業版方案價格:'$12' 變成 '$15'
這樣可以嗎?要繼續嗎?」
對於文字變更,務必顯示確切的修改前後文字。 對於樣式變更,描述視覺效果(「按鈕會從紫色變成綠色」)。對於結構變更,描述會發生什麼改變(「列表底部會出現一個新的常見問題項目」)。
使用 AskQuestion 讓他們批准或請求調整:
- 「是的,進行變更」
- 「不對,我想先調整一下」
在使用者說「是」之前,不要編輯任何檔案。
階段 4:進行變更並驗證
目標:套用編輯並確保沒有問題。
- 僅編輯必要的檔案,只更改已批准的內容
- 遵守框架的檔案模式(請參閱下方的探索參考)
- 檢查設定中的受保護路徑——如果需要修改受保護的檔案,請告訴使用者:
「該區塊位於受保護的檔案中,只有開發者才能更改。要我幫您為開發團隊撰寫請求單嗎?」
- 執行驗證指令(從
package.json腳本或設定中偵測):- Lint(如果可用)
- 型別檢查(如果是 TypeScript)
- 建置
- 如果驗證失敗,用日常語言解釋:
「這個變更導致了一個小的技術問題——[簡單說明]。我可以自動修正 / 這需要開發者來查看。您偏好哪一種?」
階段 5:預覽並確認
目標:使用者看到(或理解)結果並給予最終批准。
- 如果開發伺服器尚未執行則啟動
- 告訴使用者去哪裡查看:
「您的變更已準備好可以預覽!開啟 http://localhost:5173 並捲動到定價區塊。專業版現在應該顯示 $15/月。」
- 請求最終確認:
「一切看起來都對嗎?要提交給開發者審查嗎?」
提供選項:
- 「看起來很棒,建立審查請求」
- 「我想再調整一下」(回到階段 3)
- 「算了,全部復原」(重設分支)
階段 6:建立 PR
目標:建立一個乾淨的 PR,並為使用者提供連結。
- 暫存並提交,附帶描述性的提交訊息
- 推送:
git push -u origin HEAD - 使用
gh pr create建立 PR:
Title: [Content] 變更的簡短描述
Body:
## 變更內容
| 區塊 | 修改前 | 修改後 |
|---------|--------|-------|
| 專業版方案價格 | $12/user/month | $15/user/month |
## 請求者
[使用者的姓名/角色(如果有)]
## 審查備註
- 僅限內容/樣式變更——無邏輯或相依套件變更
- 請在桌上型電腦和行動裝置上驗證
- 受影響的區塊:[列出區塊]
- 從設定中新增審查者:
gh pr edit --add-reviewer - 從設定中新增標籤:
gh pr edit --add-label
階段 7:結尾
目標:使用者知道接下來會發生什麼。
以友善的方式告訴使用者:
「全部完成!這是您的變更請求:[PR 連結]
我改了什麼: 將專業版方案價格從 $12 更新為 $15。 接下來會發生什麼: [審查者姓名] 將會審查。審查通過後,變更就會上線。 需要復原嗎? 只要對我說『復原我上次的變更』,我就會處理。」
處理復原
如果使用者說「復原我上次的變更」或「回復先前的更新」:
- 詢問他們指的是哪個變更(或者找到最近的
content/PR) - 確認他們想復原的內容:
「我找到了您最近的變更:'將專業版方案價格更新為 $15'(PR #42)。您想復原這個嗎?」
- 如果 PR 仍在開啟狀態:關閉它並刪除分支
- 如果 PR 已經被合併:建立一個回復(revert)PR 並解釋:
「由於這個變更已經上線,我會建立一個新的請求來復原它。開發者也需要批准這個復原請求。」
探索參考
此部分供代理在階段 1 內部使用——請勿向使用者透露這些細節。
框架偵測
| 專案根目錄中的檔案 | 框架 |
|---|---|
next.config.* | Next.js |
nuxt.config.* | Nuxt |
astro.config.* | Astro |
svelte.config.* | SvelteKit |
angular.json | Angular |
vite.config.* | Vite(檢查 package.json 判斷 react/vue/svelte) |
gatsby-config.* | Gatsby |
無 + index.html | 靜態 HTML |
套件管理器偵測
| 鎖定檔 | 執行器 |
|---|---|
bun.lock / bun.lockb | bun |
pnpm-lock.yaml | pnpm |
yarn.lock | yarn |
package-lock.json | npm |
樣式偵測
tailwind.config.*或 CSS 中的@tailwindcss→ Tailwind.module.css/.module.scss檔案 → CSS Modules- 相依套件中的
styled-components或@emotion→ CSS-in-JS .scss/.sass檔案 → SCSS- 純
.css→ Plain CSS
內容模式偵測
在編輯元件之前,檢查是否有獨立的內容/i18n 檔案:
i18n/、locales/、messages/、translations/目錄.mdx/.md內容檔案- CMS 設定(contentful、sanity、strapi)
- JSON/YAML 資料檔案
如果內容在獨立檔案中,請編輯那些檔案——而不是元件的原始碼。
頁面探索
| 框架 | 頁面位置 |
|---|---|
| Next.js App Router | app/**/page.{tsx,jsx,js} |
| Next.js Pages Router | pages/**/*.{tsx,jsx,js} |
| Nuxt | pages/**/*.vue |
| Astro | src/pages/**/*.astro |
| SvelteKit | src/routes/**/+page.svelte |
| Gatsby | src/pages/**/*.{tsx,jsx} |
| Angular | 路由模組 |
| Vite SPA | Router 設定或 App.* |
| 靜態 HTML | 根目錄或 public/ 中的 *.html |
設定檔
團隊可以在專案根目錄中加入一個可選的 .pm-editor.yml 檔案,以自訂行為(審查者、標籤、受保護的檔案、建置指令)。完整參考請參閱 config-reference.md。
範例
如需不同框架的對話範例,請參閱 examples.md。