Communitygithub.com

mujingquan835/dashiai-ppt-skill

DashiAI PPT 公開增強技能,支援可編輯 PPTX 導出、主題匹配和安全修訂。

dashiai-ppt-skill 是什麼?

這個技能(DashiAI PPT)是一個專為 AI Agent(如 Claude Code、Codex 等)設計的示範製作與編輯工具。它能將使用者的自然語言需求轉換成結構化的 JSON 計劃,並自動產生可離線瀏覽的 HTML 翻頁簡報。核心優勢在於其智能的主題匹配系統(從 12 套風格中選擇最合適的 9 套)以及「安全返工」機制,確保只修改使用者指定的內容,不破壞簡報的其餘部分。技能支援產生可編輯的 PPTX 檔案,同時保留 HTML 原始檔以供後續修改。它遵循嚴格的規則,例如預設鎖定模板只修改文字、使用九宮格風格確認流程,並在產生前後執行多項驗證,確保輸出品質。此技能支援多種平台,但特別適合在支援 Node.js 和 npm 的環境中執行。

相容平台✓Claude Code✓Codex CLI~Cursor
npx skills add mujingquan835/dashiai-ppt-skill

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

DashiAI PPT

DashiAI PPT 生成靜態 HTML 橫向翻頁 PPT。使用本 skill 時,先把使用者的自然語言需求整理成 JSON 計劃,再呼叫本地專案產生器輸出 index.html 和 assets/。

版本

目前版本:0.4.0

每次完成使用者請求、準備最終回覆前,執行:

node <skill-root>/scripts/check_latest_version.mjs

如果腳本有輸出,把輸出內容附在最終回覆末尾提醒使用者更新;如果腳本無輸出或檢查失敗,保持靜默,不要提版本檢查。

Skill 目錄

目前 SKILL.md 所在目錄就是 Skill 根目錄,下文記為 <skill-root>。

內建產生器目錄:

<skill-root>/project

渲染腳本:

<skill-root>/scripts/render_goal_deck.sh

版本檢查腳本:

<skill-root>/scripts/check_latest_version.mjs

安全返工腳本:

<skill-root>/project/scripts/revise-goal.mjs

模式與任務分流

  • 每次任務先判斷是 new(新建)還是 revise(返工)。使用者本次明確要求永遠優先。
  • 使用者說「做一份 / 新建 / 重新做 / 再做一個 / 生成 PPT」,且沒有指定一個可定位的既有成品或 goal.json,一律進入 new。歷史對話裡做過 PPT 不能成為復用舊稿的理由。
  • new 是永久保留的完整能力:每次新建都建立獨立輸出目錄、獨立 goal.json 和獨立 PPT;不能因為增加返工能力而變成只能修改舊稿。
  • 只有使用者明確指出要改哪一份現有 PPT、哪一頁或哪個 goal.json 時才進入 revise。目標不唯一時先定位或詢問,不得擅自把「最新一份」當目標。
  • 使用者提供知識庫、素材目錄或參考檔案時,只讀取本次任務明確指定且實際存在的內容;不得猜測本機路徑或套用未提供的業務資料。

生成原則

本 Skill 是模板編排器。預設目標是快速、穩定地把使用者需求套入已登記頁面元件,輸出可離線開啟的 HTML PPT。

預設模式是「鎖模板填文案」:保留所選頁面元件的原始視覺、結構、數量、顯隱、強調、配色、圖表類型和圖片槽位,只替換可見文字內容。除非使用者明確要求調整頁面屬性,不要改任何非文案 props。

預設不做視覺精修,不做截圖審美判斷,不因為普通斷行或局部排版不完美反覆返工。只有使用者明確要求「視覺精修」「100% 檢查」「幫我調到滿意」時,才進入視覺 QA 流程。

使用規則

  • 執行產生器需要 Node.js 20+ 和 npm;首次生成時渲染腳本會在 Skill 內建 project/ 目錄安裝相依套件。
  • 風格選擇是 new 模式生成前強制門禁:理解本次主題、受眾、語氣、資訊密度和媒體需求後,先對庫內 12 套風格做匹配排序,取最適合的 9 套;除非使用者明確說「風格也由你定」「跳過風格確認」,否則不得代選最終風格。即使使用者已給出風格傾向,也把該風格置頂並請使用者確認。revise 模式只改文案或資料時沿用原主題;只有使用者明確要求換風格時才重新執行門禁。
  • 9 套候選的匹配必須綜合內容領域、目標人群、正式/活力程度、資料密度和圖像依賴,不只做單一關鍵詞匹配;按適配度從高到低排列,同分時保留明暗、嚴肅與活力方向的有效差異。不得聲稱風格庫只有 9 套,應說明是「從 12 套中智能匹配的 9 套」。
  • 使用 node <skill-root>/project/scripts/build-theme-style-grid.mjs --themes <themeA,...,themeI> --out <current-workdir>/output/<deck-name>/theme-style-grid.png 按排名順序生成本次專屬 3×3 九宮格。使用者可見回覆必須用展開後的絕對路徑嵌入該圖,並按同樣順序列出 1-9 的 themeXX + 風格名 + 一句適配理由,標出排名第一的「首選推薦」,請使用者用序號或風格名選擇。九宮格只用於回覆展示,不可寫入 goal.json 或任何 media 欄位。
  • 發出九宮格選擇請求後必須暫停並等待使用者答覆;未選定 themePack 時,不得建立 goal.json、執行 layout:query、生成媒體或渲染 PPT。
  • 開工前確認兩件事:主題風格、是否需要圖片/影片。主題風格按上述九宮格門禁確認;媒體需求不明確時同時簡短詢問。無法提問的環境(腳本/批次處理)才自選,並在交付說明中列出排名第一的風格與理由。
  • 委託模式:使用者只對內容或整體說「都你來定」「不用問,直接開幹」時,仍執行九宮格風格門禁;只有使用者明確把「最終風格」也委託給智慧代理或明確要求跳過確認時,才直接選排名第一的主題。使用者只說文案「隨意」「自擬」時,僅自擬內容;風格、頁數、媒體等已給的不得擅自改變。
  • 非互動/一次性執行(無法追問)時:未指定風格按內容主題自選已驗收主題;無真實素材且不能生圖時優先選無媒體頁,不調 image-gen;最終說明全部假設。
  • Deck 語言跟隨使用者溝通語言:非中文使用者在 goal.json 頂層加 "language": "en";全部文案欄位用目標語言撰寫,頁面自帶的預設中文文案(含結尾頁「感謝閱讀」類裝飾欄位)一律覆蓋,不得殘留中文。編輯器介面語言自動跟隨開啟者的系統語言,右上角可手動切換,無需在生成時處理。
  • 交付格式:預設交付可編輯 PPTX,同時保留 HTML 預覽源便於繼續修改。使用者明確只要 HTML、PDF 或圖片時按其要求交付;通用新建 PPT 能力不受該預設值影響。
  • PPTX 檔案:仍先生成 HTML 並啟動本機預覽服務,再呼叫本機 HTTP 匯出服務;最終只給 PPTX 檔案路徑或下載結果。
  • 目前可選風格: theme01 輕擬態風、theme02 炫光紫綠風、theme03 深淺程式碼風、theme04 玻璃糖果風、theme05 色譜圖表風、theme06 深色圖譜風、theme07 冷白調研風、theme08 黑金實驗風、theme09 深藍雜誌風、theme10 金色指數風、theme11 高能增長風、theme12 聲波霓虹風。
  • 普通自動選擇不選 theme10;只有使用者明確指定,或金融/投資指數內容強相關且 inspect 確認可填時才用。
  • theme01 輕擬態風 | 適合: 產品介紹 / 企業彙報 | 人群: 創業團隊 / 產品經理
  • theme02 炫光紫綠風 | 適合: 科技釋出會 / AI/自動駕駛/機器人主題 | 人群: 科技公司創始人 / 技術負責人
  • theme03 深淺程式碼風 | 適合: 技術方案 / 開發者大會 | 人群: 工程師 / 技術管理者
  • theme04 玻璃糖果風 | 適合: 年輕化品牌 / 消費產品 | 人群: 品牌團隊 / 設計師
  • theme05 色譜圖表風 | 適合: 資料報告 / 市場分析 | 人群: 資料分析師 / 諮詢顧問
  • theme06 深色圖譜風 | 適合: 高密度資料展示 / 戰略分析 | 人群: 戰略團隊 / 投資人
  • theme07 冷白調研風 | 適合: 調研報告 / 白皮書 | 人群: 研究機構 / 諮詢團隊
  • theme08 黑金實驗風 | 適合: 高階釋出 / 品牌提案 | 人群: 高階品牌 / 創意總監
  • theme09 深藍雜誌風 | 適合: 品牌故事 / 人物訪談 | 人群: 公關團隊 / 媒體編輯
  • theme10 金色指數風 | 適合: 金融資料 / 投資報告 | 人群: 投資機構 / 金融分析師
  • theme11 高能增長風 | 適合: 增長復盤 / 商業計劃 | 人群: 創業者 / 增長團隊
  • theme12 聲波霓虹風 | 適合: 音樂娛樂 / 潮流活動 | 人群: 娛樂品牌 / 活動策劃
  • 不使用舊 token、舊主題、舊媒體槽、舊風格分支或舊入場動畫控制。
  • 選頁先用 npm --prefix <skill-root>/project run layout:query -- --theme <themePack> --role <role> --limit 8;需要媒體槽時加 --needs-media、--planned-images <n>、--provided-images <n> 或 --image-gen。候選順序每次隨機,從中任選合適的即可,不要固定只用列表第一條。
  • 欄位不清楚、物件/陣列/count、圖片/媒體:先執行 npm --prefix <skill-root>/project run inspect:layout -- --compact <layout...>;寫物件、陣列、數量或圖片 props:執行 props:safe,整份 goal 用 props:safe -- --goal <file> --write。
  • 把 layout:query / inspect:layout 的 JSON 管線給程式解析時,改用 node <skill-root>/project/scripts/layout-query.mjs / node <skill-root>/project/scripts/inspect-layout.mjs:npm run 會在 stdout 前列印生命週期 banner,汙染 JSON。
  • 長 deck:先用 npm --prefix <skill-root>/project run goal:scaffold -- --title <title> --goal <goal> --theme <themePack> --pages <n> --chunk-size 5 --out output/<deck-name>/goal.json 生成唯一 layout 骨架和 goal.fill-plan.json,再按 fillPlan 分段補 props。
  • 文案長度和陣列數量:優先按 fillPlan.text[].maxChars、fillPlan.arrays[].visibleCount、fillPlan.arrays[].nestedArrays 寫;display / metric 欄位只寫短詞、短句或數字。
  • Html 欄位(如 headlineHtml / quoteHtml)寫文案只用 <br> 換行加 <b> / <em> 行內強調,禁止 <span> 等自由 HTML;主題預設值裡的 <span class> 依賴主題 CSS,只是佔位,不要照抄。validate:goal-spec 會攔截自由 HTML。
  • 可見陣列項必須寫實文案;被 count/顯隱控制隱藏的尾項可保留「請輸入文字」佔位。
  • 元素出現動畫使用頁面元件自帶的原生效果。
  • 頁面切換動畫可以在預覽控制面板裡調整。
  • 面向使用者交付的 deck 預設不顯示風格/主題切換選項;風格切換只保留在內部除錯 demo 頁面。使用者明確要求保留主題切換時,在 goal 頂層寫 preview: {"themeSwitcher": true}。
  • 不手寫自由 HTML slide;面向使用者交付的每頁必須寫 layout + props。role 只允許在草稿階段輔助選頁,渲染前必須換成具體 layout。
  • 每套主題的前 5 頁 themeXX_page001 到 themeXX_page005 都是封面候選。一個 deck 只能從前 5 頁中選擇 1 頁作為封面,不要同時使用多個封面頁;正文頁從第 6 頁以後選擇。
  • 同一套 PPT 中不要出現重複的頁面元件:最終 slides[].layout 必須唯一。選頁時記錄已用 layout,不同內容頁要換同主題其它候選,不要透過改文案復用同一個 layout。
  • 面向使用者交付的 deck 不能只寫 role 後依賴頁面預設文案。除非使用者明確要預設 demo,每一頁可見內容都必須寫和使用者主題對應的 props 文案。
  • 優先只寫 layout:query / inspect:layout 暴露的文案欄位。欄位是物件或陣列時按 fillPlan 和 propShapes 填內部 key。copyKeys 已展開巢狀路徑(如 copy.quote、items[].label),按列出的路徑直接填。
  • inspect:layout 標 contentLocked: true 的頁正文由元件固定、props 填不進:換一頁能填正文的佈局,或僅當使用者接受其預設正文時使用。陣列按 fillPlan.arrays[].visibleCount 填滿可見項;decorativeKeys 是裝飾位,不要填。
  • 不要改頁面元資料、元件原始碼、className、CSS、樣式欄位或預設視覺結構來完成內容填充。只在 props 內填寫內容和使用者明確要求的頁面屬性。
  • 允許用頂層 text 覆蓋可見文字槽位,但只用於替換文字內容。不要在普通生成中啟動瀏覽器批次抽取全頁面文字槽位;只有使用者明確要求「徹底清除所有模板預設文案/逐頁校對可見文案」時才做執行時槽位抽取。
  • new 模式禁止復用 output/ 裡已有的舊 goal.json 或舊 HTML,每次請求都新建本次輸出目錄和本次 JSON 計劃。revise 模式必須使用使用者指定的目標檔案,先由 goal:revise 生成快照和變更報告,不得在快照前手改目標 goal.json。
  • 輸出目錄寫在當前會話工作目錄;使用者明確指定其他目錄時按其要求。任何模式都不要寫入 <skill-root>/project/output。
  • HTML 交付:給使用者的預覽地址只給 http://127.0.0.1:<port>/(不給 https 或 .local 變體);本機 HTTP 可匯出 HTML/PDF/PPTX,本地 HTML 或 file:// 不能匯出可編輯 PPTX。不要返回 theme-preview。在自帶瀏覽器的 Agent APP(如 Codex)裡生成時,提醒使用者匯出 PDF/PPTX 前把該地址在系統瀏覽器中開啟。
  • PPTX 交付:呼叫 /api/export-editable-pptx;最終只給 PPTX 檔案路徑或下載結果。
  • 無瀏覽器會話、腳本直調、或預覽匯出介面返回 403/5xx 時:改用 npm run export:pptx -- <deck>/ppt <out.pptx>(PDF 用 export:pdf)直接產出檔案,不需要先起瀏覽器會話。
  • 如果輸出正文裡出現與使用者主題無關的預設文案,例如 AI Capital / 投融資 / SoundWave / 聲浪 / Key Metrics / Roadmap / End of Report 等,必須重寫 JSON 後重新渲染,不能交付。

媒體工作流

  • 媒體欄位只寫 mediaSlots[].canPresetMedia: true 的槽,按該槽 presetProp / fieldPath 寫路徑;goal.json 只引用 deck 內相對媒體路徑,不可引用臨時目錄、外部絕對路徑、file:// 或遠端 URL。
  • 視覺素材任務先判斷意圖:無圖但需要視覺素材時先問是否預留圖片槽;無真實素材且不能生圖時優先選無媒體頁。使用者提供素材庫/素材目錄路徑即視為有圖意圖:至少選 2 個帶媒體槽頁面並填入合適素材。素材路徑不可存取時改選無媒體頁並在交付說明中告知,不在頁面內留佔位提示文字。使用者同意用 --planned-images <n> / --needs-media,使用者給素材用 --provided-images <n> / --provided-media,使用者明確要求原創視覺圖/生圖時,Codex 環境用 image-gen 生成圖片並加 --image-gen;未明確生圖時先詢問使用者。plannedImages / needsVisual / imageGen 只表示選頁意圖,除非使用者明確選擇預留空槽,交付前必須寫入真實媒體路徑,不能交付空媒體槽或偽造路徑。
  • 使用者本地圖片/影片先執行 npm --prefix <skill-root>/project run media:stage -- <deck-output-dir-or-ppt-dir> <media-file...>,使用返回的 relative 路徑;AVIF 會轉成瀏覽器可用格式。image-gen 輸出也先落到本次 deck 目錄。
  • 渲染後核對 goal 引用的每個圖片/影片:ppt/<relative> 存在且 HTML 包含檔名;缺失時只補最終 ppt/assets 並重跑驗證。圖片/影片素材每個最多使用一次;素材用完後,媒體插槽留空或改選無媒體插槽頁面;除非使用者明確要求,不要重複填充同一素材。
  • 需要 image-gen 生成 2 張以上獨立圖片時,用多個 subagent 並行生成,不要序列逐張等待;每張圖獨立生成,不要用一張拼圖/素材板再拆分。subagent 只用於生圖,不用於選題、文案、選頁或驗證。

新建工作流(必須保留)

只要任務被判定為 new,必須完整執行本節。即使使用者說「沿用上次風格做一份新的」,也只能復用風格偏好,不能復用上次內容、goal.json 或輸出目錄。

  1. 提煉使用者目標: title、goal、audience、owner、頁數、內容重點和最終產物格式。使用者未指定頁數時,普通長 deck 預設 10 頁左右;使用者明確要求單頁時必須生成 1 頁。
  2. 執行九宮格風格門禁:對 12 套風格匹配排序,取前 9 套,執行 build-theme-style-grid.mjs,在使用者可見回覆中嵌入 3×3 圖片並列出 9 項理由,然後暫停等待選擇。使用者選定後再設定 themePack 並生成 randomSeed,例如 <主題>-<日期>-<3位隨機詞>,保證隨機選頁可重現。
  3. 判斷圖片意圖:無圖但需要視覺素材時先問是否預留圖片槽;使用者給本地素材先 media:stage;明確生圖時用 image-gen。
  4. 用 layout:query 選候選;物件/陣列/count/圖片 props 用 inspect:layout + props:safe。
  5. 每頁只承載一個主要資訊角色。無法安全覆蓋的頁面優先換 layout,不要改樣式欄位硬湊。
  6. 把 JSON 寫入本次工作目錄的 output/<deck-name>/goal.json;使用者明確指定其他輸出目錄時按其要求。渲染前執行 npm --prefix <skill-root>/project run props:safe -- --goal <goal-file> --write 和 goal spec 驗證。--write 後核對輸出的 layoutChanges;不認可替換就改回並換頁。
  7. 圖表頁填入自己的資料後,頁內 insight/讀圖/結論類文案欄位必須據新資料一併改寫,不保留預設結論。
  8. 執行渲染腳本輸出 <deck-output-dir>/ppt/index.html;腳本會使用 Skill 內建產生器,不要切回外部專案目錄。
  9. 渲染後核對素材路徑,缺失時補最終 <deck-output-dir>/ppt/assets。
  10. 確認腳本完成 validate:swiss 和 validate:goal-copy 驗證。
  11. 執行 node <skill-root>/scripts/check_latest_version.mjs 做靜默版本檢查。
  12. 渲染腳本會啟動本地 HTTP 預覽服務並輸出 http://127.0.0.1:<port>/;需要指定埠時設定 DASHI_PPT_PREVIEW_PORT 後再執行腳本(埠用 5200-5999 段,4178/4300/4400 為使用者保留埠不可用)。只能用該預覽服務,不得用 python -m http.server、npx serve 等靜態伺服器替代:靜態伺服器沒有匯出和自動儲存介面。預覽服務下編輯自動儲存到 index.html 本體;file:// 開啟的本地檔案不自動儲存,交付前需匯出。
  13. 按交付格式回覆:預設呼叫 /api/export-editable-pptx 交付可編輯 PPTX 檔案路徑,並保留 HTML 預覽源;使用者明確只要 HTML 時只給 http://127.0.0.1:<port>/。

安全返工工作流

僅在使用者明確指定既有成品、頁面或 goal.json 時使用。只收到「改一下」但目標不唯一時,先定位目標,不得誤改其他 PPT。

  1. 記錄目標 goal.json、對應輸出目錄和使用者要求。若只有 PPTX 而沒有本 Skill 的 goal.json / HTML 源,不得假裝能無損最小修改;應說明需要原始檔,或按匯入重建任務另行處理。
  2. 將「其餘不變」作為硬約束:預設鎖定 themePack、pageCount、slides 數量、每頁 layout、每頁 role 和未點名的所有內容。先把本次改動寫成 JSON Patch 檔案,例如:
{
  "note": "第 4 頁標題改為年度重點項目,其餘不變",
  "changes": [
    {"op": "replace", "path": "/slides/3/props/title", "value": "年度重點項目"}
  ]
}
  1. 執行 npm --prefix <skill-root>/project run goal:revise -- --goal <goal.json> --patch <patch.json>。腳本會在目標目錄的 revisions/ 下儲存修改前快照與變更報告,並拒絕主題、頁數、整頁、佈局和角色的結構性修改。
  2. 只有使用者明確要求改主題、頁數或版式時,才允許結構性返工。換主題仍先執行 9 宮格風格門禁並等待確認;確認後再使用 --allow-structure,隨後重新檢查所有 layout 和 props 契約。
  3. 返工後執行 props:safe、validate:goal-spec 和渲染驗證,並將變更報告中的 changedPaths 與使用者要求逐項核對。若出現額外欄位變化,從快照恢復後重新生成最小 patch。
  4. 交付時說明修改物件、實際變更路徑和快照位置;新建任務仍回到「新建工作流(必須保留)」,不得繼續沿用本次返工目標。

品質修復與瀏覽器檢查

只在以下情況返工:渲染失敗、validate:swiss 失敗、validate:goal-copy 失敗、輸出中出現明顯不屬於使用者主題的模板文案、使用者明確指出某頁內容有問題。

預設最多修復 2 輪。仍失敗時說明阻塞原因,不要繼續無邊界嘗試。

預設不開啟瀏覽器,不建立 Chrome profile,不抽取全量文字槽位。只有修改了產生器/預覽模板/匯出邏輯、使用者明確要求檢查頁面效果,或上一輪出現過執行後 props 被預設值覆蓋的問題時,才做一次瀏覽器 smoke check。

瀏覽器 smoke check 只確認頁面能開啟、頁數正確、首尾頁不是空白。不要預設截圖精修,不要因為普通換行問題反覆改稿。

範例命令:

<skill-root>/scripts/render_goal_deck.sh \
  output/client-review/goal.json \
  output/client-review/ppt/index.html

JSON 結構

{
  "title": "美國 AI 融資調研",
  "goal": "面向投資團隊彙報 2024-2026 年美國 AI 大額融資結構、資本流向和後續判斷",
  "audience": "投資團隊 / 產業研究團隊",
  "owner": "研究團隊",
  "randomSeed": "ai-funding-20260609-a7k",
  "pageCount": 8,
  "themePack": "theme01",
  "slides": [
    {"layout": "theme01_page001", "props": {"kicker": "融資調研 · VOL.01", "titleTop": "美國 AI", "titleBottom": "融資調研", "lead": "從資本體量、賽道結構和典型公司拆解本輪 AI 融資週期。"}},
    {"layout": "theme01_page006", "props": {"kicker": "核心數字", "value": "970", "unit": "億美元", "sub": "2024 年美國 AI 風險投資規模創歷史新高。"}},
    {"layout": "theme01_page010", "props": {"kicker": "# 研究方法", "title": "橫縱分析法", "cn": "用時間維度和賽道維度交叉識別融資變化。"}},
    {"layout": "theme01_page030", "props": {"kicker": "# 典型案例", "title": "里程碑 · 頭部公司融資節奏"}},
    {"layout": "theme01_page084", "props": {"kicker": "# 附錄", "title": "資料來源與研究說明"}}
  ]
}

如果 slides 為空,pageCount 只適合臨時草稿預覽。面向使用者交付前,必須改成具體 layout + 對應 props。

頁面角色

role 只用於草稿選頁,最終 JSON 必須落成具體 layout。角色說明見 references/layout-roles.md;真實候選以 layout:query 輸出為準。

cover 只能從當前主題前 5 頁選擇。image / media 候選基於真實 mediaSlots,不是頁面標題關鍵詞。動態背景頁可用 ambient 作為氛圍頁或章節頁。

可以直接指定頁面:

{"layout": "theme01_page030", "props": {"title": "典型案例"}}

交付能力

新生成的演示預設使用內嵌的 OPPO Sans 4.0 作為標題和正文字型。生成後的預覽頁支援翻頁、開啟側邊欄編輯文字、按標題/正文/等寬文字三類替換全域字型、關閉全域字型開關後點選任意文字設定專屬字型或自訂本機字型、調整頁面 props、替換元件暴露的圖片/影片媒體槽、逐個調整圖片槽寬高與形狀、切換頁面切換動畫、匯出 HTML/PDF/PPTX。全域字型、專屬字型和圖片槽設定寫入 deck state,預覽服務下自動回寫 HTML;匯出可編輯 PPTX 時按瀏覽器最終計算樣式生成物件。面向使用者交付的頁面底部不顯示頁碼標識、翻頁引導、圓點導航或索引提示。

頁面屬性契約

普通生成不要讀 layout-manifest.json。先用 layout:query 輸出的候選摘要。只有需要更細契約時,再用 npm --prefix <skill-root>/project run inspect:layout -- --compact <layout...> 看頁面契約:

  • copyKeys: 可安全改寫的文案/資料欄位。
  • copyBudgets: 文案長度預算;display / metric 超長會被 goal spec 攔截。
  • propShapes: copyKeys / 陣列欄位的內部形狀;寫 copy、cells、items、rows 等物件欄位時只使用這裡列出的 key。
  • mediaSlots: 圖片/影片寫入欄位、count key、預設數量和最大數量。
  • countBindings: 數量引數與陣列欄位的繫結。
  • fillPlan 裡數值欄位看 numericBounds 填數:enforced:false 是提示、真實資料可超出,enforced:true 必須遵守,semantics:'normalized' 填 0-1 比例;定長巢狀陣列看 fixedLength/fixedLengths 按下標填,不試錯。
  • controlKeys: 右側面板可操作欄位,不是普通內容填充清單;僅使用者明確要求調整頁面屬性時使用。預設只填 copyKeys、可見陣列和真實媒體槽。

驗證

  • 渲染前必須執行 validate:goal-spec。
  • 輸出後必須執行 validate:swiss。
  • 輸出後必須執行 validate:goal-copy。
  • 改動展示 demo 後執行 npm run showcase:update。

相關技能