# AGENTS.md ## 專案概念 HTML Transform 是 prototype-driven orchestration framework。目標是把 HTML prototype 轉成可 review、可驗證、可追溯的 Vuetify frontend output。 這個 repo 目前是 MVP,不是完整產品。核心價值先放在 CLI pipeline 與 artifact-first workflow: ```text scan -> plan -> run -> diff -> verify ``` 所有中間產物都寫到 `.ht/`,生成結果寫到 `output` 設定指向的資料夾,預設是 `packages/result`。 ## 目前 MVP 狀態 已完成: - `ht` CLI 骨架:`scan`、`plan`、`run`、`diff`、`verify`、`go`、`status`、`doctor` - `ht.config.js/json/ts` 設定載入 - deterministic HTML evidence extraction - `.ht/cache/prototype` - `.ht/spec/*.spec.json` - `.ht/spec/*.validation.json` - `.ht/spec/*.ui-contract.md` - `.ht/plan/tasklist.json` - `.ht/plan/project-conventions.md` - `.ht/plan/api-contract.md` - `.ht/plan/component-mapping.json` - `.ht/runs//` - `.ht/diff/*.diff.html` - `.ht/verify/verification-report.json` - 基本 E2E 測試 尚未完成,不能假裝已完成: - Playwright static server - 真實 full-page screenshot - 真實 DOM snapshot API - 真實 accessibility tree API - vision-based decomposition/extraction - Zod schema validation - 真實 coding agent invocation - 真實 visual similarity scoring - 完整 DOM-level 與 flow-level smoke tests 目前 screenshot 是 placeholder PNG,`diff` score 是 deterministic placeholder。 ## 套件管理 使用 pnpm,不使用 npm 或 yarn。 ```bash pnpm install pnpm test pnpm typecheck ``` 不要新增 `package-lock.json` 或 `yarn.lock`。lockfile 應該是 `pnpm-lock.yaml`。 ## Playwright CLI 決策 這個專案使用 `@playwright/cli`,透過 shell command 操作 `playwright-cli`,不使用 MCP。 原因: - PRD 的 pipeline 是 coding-agent orchestration,CLI 比 MCP 更適合放進可重跑 stage。 - CLI invocation 較容易寫入 `.ht/runs`、logs、metadata 與 verification report。 - 專案應避免依賴使用者全域環境。 解析順序在 `src/lib/playwright-cli.js`: 1. `node_modules/.bin/playwright-cli` 2. 全域 `playwright-cli` 3. `npx --no-install playwright-cli` `doctor` 必須能顯示 `playwright-cli (local)`、`playwright-cli (global)` 或 missing。 專案級 Codex runtime skill 放在 `.codex/skills/playwright-cli`,本機全域也可能有一份在 `~/.codex/skills/playwright-cli`。處理 browser automation、snapshot、screenshot、trace、video、test generation 或 local web app testing 時,Codex 應優先使用專案級 skill;若沒有自動觸發,先讀取 `.codex/skills/playwright-cli/SKILL.md` 再操作。 安裝瀏覽器: ```bash pnpm playwright-cli:install-browser ``` Linux CI 或乾淨容器若需要系統 dependency,先 dry-run: ```bash npx --no-install playwright-cli install-browser --with-deps --dry-run ``` ## 預設資料夾 預設 config: ```text packages/prototype # HTML prototype packages/web # 既有 Vuetify frontend packages/api # backend API/schema packages/result # output .ht # tool artifacts ``` 目前 repo 可能沒有預設輸入資料夾。這時 `doctor` 回報 missing 是正確行為,不是 bug。 ## 開發原則 - 遵守 PRD 的 artifact-first 思路。 - 不要把 placeholder 包裝成完整實作。 - 每個 stage 的失敗、缺少環境、skipped 都要明確寫入 report 或 CLI output。 - 優先做可重跑、可檢查、可追溯的 deterministic behavior。 - 不要讓 agent 修改 `prototype/`、`frontend/`、`backend/` 原始輸入資料夾;生成與執行 artifact 應限制在 `output/` 與 `.ht/`。 - 保持 MVP 邊界,避免加泛用抽象或一開始支援所有 monorepo 形態。 ## JSDoc 原則 - 依專案的 `jsdoc` skill 撰寫 JSDoc;這裡只補充 HTML Transform 專案特有規則。 - JavaScript 的 JSDoc 優先補在 exported API、stage 入口、跨模組 helper,或描述非顯而易見契約與限制的位置;不為測試檔或區域性小函式刻意補註解。 - JSDoc 使用繁體中文,並把說明重點放在 artifact、pipeline stage、MVP 限制、cache/placeholder 行為、輸入輸出契約等專案脈絡。 - 不新增 `jsdoc` 產生 HTML 文件的設定、script 或 build step,除非使用者明確要求。 - 補 JSDoc 不應順手 refactor、改行為、加抽象或擴大 scope。 ## 驗證 完成任何改動後至少執行: ```bash pnpm test pnpm typecheck ``` 若改到環境偵測、Playwright CLI、設定載入,也執行: ```bash node src/cli.js doctor ``` 若改到 stage pipeline,應確認 E2E 測試仍通過,或新增/更新 `test/cli-e2e.test.js`。 ## 重要檔案 - `PRD.md`:產品需求來源。 - `README.md`:使用方式與 MVP 限制。 - `src/cli.js`:CLI command router。 - `src/lib/config.js`:config loading。 - `src/lib/html.js`:deterministic HTML evidence extraction。 - `src/lib/playwright-cli.js`:Playwright CLI resolution。 - `src/stages/*.js`:各 stage 實作。 - `test/cli-e2e.test.js`:完整 CLI pipeline 測試。 ## 下一個最重要的方向 下一步最值得做的是把 Stage 1 做真: - local static server - `playwright-cli` 三 viewport screenshot - network/resource failure metadata - DOM snapshot artifact - accessibility snapshot artifact - cache hit 時跳過 screenshot 這完成後,工具才會真正開始觀察 browser-rendered prototype,而不是只解析 HTML source。