@xiaobuyu/nodesign 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +140 -0
- package/bin/nodesign.js +176 -0
- package/package.json +104 -0
- package/server/api/README.md +45 -0
- package/server/api/_guard.js +75 -0
- package/server/api/admin.js +187 -0
- package/server/api/assets/docx-page.js +103 -0
- package/server/api/assets/helpers.js +22 -0
- package/server/api/assets/notes.js +144 -0
- package/server/api/assets.js +896 -0
- package/server/api/board.js +57 -0
- package/server/api/browse.js +138 -0
- package/server/api/canvas.js +444 -0
- package/server/api/chatai.js +324 -0
- package/server/api/exports/build-standalone.js +980 -0
- package/server/api/exports/cards.js +118 -0
- package/server/api/exports/docx-pdf.js +46 -0
- package/server/api/exports/export-page.js +142 -0
- package/server/api/exports/handoff.js +147 -0
- package/server/api/exports.js +690 -0
- package/server/api/instruction.js +75 -0
- package/server/api/local.js +115 -0
- package/server/api/me.js +116 -0
- package/server/api/memory.js +185 -0
- package/server/api/pending-changes.js +366 -0
- package/server/api/plugins.js +164 -0
- package/server/api/projects.js +220 -0
- package/server/api/publish.js +64 -0
- package/server/api/recent.js +73 -0
- package/server/api/sessions.js +589 -0
- package/server/api/skills.js +77 -0
- package/server/api/standalone-fit.js +168 -0
- package/server/api/turn-compose.js +180 -0
- package/server/api/turn-inflight.js +44 -0
- package/server/api/turn.js +669 -0
- package/server/auth/README.md +17 -0
- package/server/auth/middleware.js +138 -0
- package/server/auth/origin-guard.js +71 -0
- package/server/auth/session.js +108 -0
- package/server/auth/tier.js +113 -0
- package/server/auth/users-store.js +348 -0
- package/server/edit/README.md +29 -0
- package/server/engine/README.md +113 -0
- package/server/engine/agent/agent-shared.js +550 -0
- package/server/engine/agent/auto-mode-default-hard-deny.txt +4 -0
- package/server/engine/agent/auto-mode-rules.js +78 -0
- package/server/engine/agent/context.js +418 -0
- package/server/engine/agent/events.js +464 -0
- package/server/engine/agent/hooks/canvas-validate.js +199 -0
- package/server/engine/agent/hooks/failure.js +120 -0
- package/server/engine/agent/hooks/file-events.js +75 -0
- package/server/engine/agent/hooks/lifecycle.js +233 -0
- package/server/engine/agent/hooks/post-canvas-focus.js +80 -0
- package/server/engine/agent/hooks/post-guidance.js +206 -0
- package/server/engine/agent/hooks/post-subagent-report.js +104 -0
- package/server/engine/agent/hooks/post-trim.js +58 -0
- package/server/engine/agent/hooks/pre-board-neighborhood.js +34 -0
- package/server/engine/agent/hooks/pre-defaults.js +84 -0
- package/server/engine/agent/hooks/pre-injectors.js +277 -0
- package/server/engine/agent/hooks/pre-performance-log-guard.js +78 -0
- package/server/engine/agent/hooks/pre-starter-files.js +61 -0
- package/server/engine/agent/hooks/pre-workspace-scope-guard.js +78 -0
- package/server/engine/agent/hooks/site-validate.js +94 -0
- package/server/engine/agent/hooks/tool-prompts.js +31 -0
- package/server/engine/agent/hooks/turn-state-memory.js +56 -0
- package/server/engine/agent/hooks/user-prompt-submit.js +215 -0
- package/server/engine/agent/hooks.js +354 -0
- package/server/engine/agent/init-contract.js +69 -0
- package/server/engine/agent/isolation.js +159 -0
- package/server/engine/agent/model-context.js +359 -0
- package/server/engine/agent/model-table.js +292 -0
- package/server/engine/agent/plugin-loader.js +266 -0
- package/server/engine/agent/prompts/nodesign-prelude.md +336 -0
- package/server/engine/agent/prompts/tools/ask-user-question-protocol.md +71 -0
- package/server/engine/agent/prompts/tools/direct-edit-protocol.md +98 -0
- package/server/engine/agent/prompts/tools/generate-image-cookbook.gemini-gateway.md +583 -0
- package/server/engine/agent/prompts/tools/generate-image-cookbook.md +483 -0
- package/server/engine/agent/prompts/tools/hybrid-reference.md +100 -0
- package/server/engine/agent/prompts/tools/paint-still-cookbook.md +270 -0
- package/server/engine/agent/prompts/tools/roll-film-cookbook.md +70 -0
- package/server/engine/agent/prompts/tools/site-reference.md +106 -0
- package/server/engine/agent/prompts/tools/tweaks-syntax.md +125 -0
- package/server/engine/agent/prompts/tools/vision-checker-dispatch.md +48 -0
- package/server/engine/agent/session-loop.js +1024 -0
- package/server/engine/agent/session-model.js +164 -0
- package/server/engine/agent/skill.js +204 -0
- package/server/engine/agent/system-prompts.js +86 -0
- package/server/engine/agent/task-events.js +78 -0
- package/server/engine/agents/ds-extractor.md +132 -0
- package/server/engine/agents/explorer.md +190 -0
- package/server/engine/agents/index.js +230 -0
- package/server/engine/agents/schemas/design-system.json +156 -0
- package/server/engine/agents/schemas/tweak-schema.json +113 -0
- package/server/engine/agents/tweak-proposer.md +127 -0
- package/server/engine/agents/vision-checker.md +254 -0
- package/server/engine/browse/capture.js +422 -0
- package/server/engine/browse/card.js +137 -0
- package/server/engine/browse/handover.js +59 -0
- package/server/engine/browse/page-digest.js +119 -0
- package/server/engine/browse/refs.js +196 -0
- package/server/engine/browse/registry.js +307 -0
- package/server/engine/browse/screencast.js +170 -0
- package/server/engine/browse/state.js +121 -0
- package/server/engine/chatai/chat-log.js +79 -0
- package/server/engine/chatai/index.js +193 -0
- package/server/engine/chatai/openai-compat.js +152 -0
- package/server/engine/chatai/orchestrate.js +309 -0
- package/server/engine/chatai/perform.js +40 -0
- package/server/engine/chatai/summarize.js +79 -0
- package/server/engine/mcp/capability-gate.js +52 -0
- package/server/engine/mcp/index.js +339 -0
- package/server/engine/mcp/param-sanitizer.js +142 -0
- package/server/engine/mcp/tools/arrange-on-board.js +124 -0
- package/server/engine/mcp/tools/artifact-session.js +278 -0
- package/server/engine/mcp/tools/browse-computer.js +421 -0
- package/server/engine/mcp/tools/browse-find-batch.js +183 -0
- package/server/engine/mcp/tools/browse-screenshot.js +157 -0
- package/server/engine/mcp/tools/browse.js +480 -0
- package/server/engine/mcp/tools/build-docx.js +101 -0
- package/server/engine/mcp/tools/clear-pending-changes.js +99 -0
- package/server/engine/mcp/tools/create-on-board.js +155 -0
- package/server/engine/mcp/tools/crystallize-skill.js +168 -0
- package/server/engine/mcp/tools/deliver-files.js +0 -0
- package/server/engine/mcp/tools/explain-style.js +237 -0
- package/server/engine/mcp/tools/export-handoff.js +133 -0
- package/server/engine/mcp/tools/expose-tweaks.js +149 -0
- package/server/engine/mcp/tools/generate-image.js +842 -0
- package/server/engine/mcp/tools/get-computed-styles.js +164 -0
- package/server/engine/mcp/tools/get-pending-changes.js +205 -0
- package/server/engine/mcp/tools/h3box-ssh.js +84 -0
- package/server/engine/mcp/tools/helpers/acquire-page.js +82 -0
- package/server/engine/mcp/tools/helpers/motion-lab.js +554 -0
- package/server/engine/mcp/tools/helpers/motion-scroll.js +112 -0
- package/server/engine/mcp/tools/helpers/perception-page.js +215 -0
- package/server/engine/mcp/tools/helpers/reference-download.js +103 -0
- package/server/engine/mcp/tools/helpers/rembg-bridge.py +80 -0
- package/server/engine/mcp/tools/helpers/rembg.js +273 -0
- package/server/engine/mcp/tools/helpers/shot-pipeline.js +280 -0
- package/server/engine/mcp/tools/highlight.js +68 -0
- package/server/engine/mcp/tools/list-pages.js +222 -0
- package/server/engine/mcp/tools/lookup-tags.js +59 -0
- package/server/engine/mcp/tools/navigate-to-page.js +60 -0
- package/server/engine/mcp/tools/organize-board.js +64 -0
- package/server/engine/mcp/tools/paint-still.js +434 -0
- package/server/engine/mcp/tools/pin-to-board.js +130 -0
- package/server/engine/mcp/tools/preview-deck.js +130 -0
- package/server/engine/mcp/tools/profile-scroll.js +305 -0
- package/server/engine/mcp/tools/publish-site.js +102 -0
- package/server/engine/mcp/tools/query-elements.js +195 -0
- package/server/engine/mcp/tools/read-board.js +103 -0
- package/server/engine/mcp/tools/read-document.js +93 -0
- package/server/engine/mcp/tools/read-page.js +264 -0
- package/server/engine/mcp/tools/read-tavern-json.js +143 -0
- package/server/engine/mcp/tools/record-decision.js +140 -0
- package/server/engine/mcp/tools/relate-on-board.js +110 -0
- package/server/engine/mcp/tools/remove-background.js +391 -0
- package/server/engine/mcp/tools/report-issue.js +115 -0
- package/server/engine/mcp/tools/roll-film.js +266 -0
- package/server/engine/mcp/tools/screenshot-docx.js +138 -0
- package/server/engine/mcp/tools/screenshot-url.js +195 -0
- package/server/engine/mcp/tools/screenshot.js +583 -0
- package/server/engine/mcp/tools/tier-gate.js +96 -0
- package/server/engine/mcp/tools/trace-motion.js +215 -0
- package/server/engine/mcp/tools/web-search.js +548 -0
- package/server/engine/motion/inventory.js +349 -0
- package/server/engine/perception/session.js +235 -0
- package/server/engine/plugins/nodesign/.claude-plugin/plugin.json +5 -0
- package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/SKILL.md +192 -0
- package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/canvas.template.html +667 -0
- package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/hybrid-grid.md +22 -0
- package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/image-led-cover.md +25 -0
- package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/portrait.md +23 -0
- package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/quote-backdrop.md +21 -0
- package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/section-divider.md +23 -0
- package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/text-led.md +21 -0
- package/server/engine/plugins/nodesign/skills/docx-craft/SKILL.md +162 -0
- package/server/engine/plugins/nodesign/skills/docx-craft/references/token-schema.md +407 -0
- package/server/engine/plugins/nodesign/skills/docx-craft//346/226/207/346/241/243.template.json +80 -0
- package/server/engine/plugins/nodesign/skills/rp-craft/SKILL.md +228 -0
- package/server/engine/plugins/nodesign/skills/rp-craft/patterns//346/274/224/345/207/272/351/241/265-/346/234/200/345/260/217/345/256/236/347/216/260.html +78 -0
- package/server/engine/plugins/nodesign/skills/rp-craft//346/274/224/345/207/272.template.js +268 -0
- package/server/engine/plugins/nodesign/skills/site-craft/SKILL.md +323 -0
- package/server/engine/plugins/nodesign/skills/site-craft/patterns/build-lane.md +134 -0
- package/server/engine/plugins/nodesign/skills/site-craft/patterns/cutout-collage.md +61 -0
- package/server/engine/plugins/nodesign/skills/site-craft/patterns/mock-app.md +163 -0
- package/server/engine/plugins/nodesign/skills/site-craft/patterns/page-transitions.md +86 -0
- package/server/engine/runs/active-runs.js +698 -0
- package/server/engine/runs/live-turn.js +252 -0
- package/server/engine/runs/store.js +364 -0
- package/server/engine/runs/turn-relay.js +217 -0
- package/server/engine/runtime/workspace.js +164 -0
- package/server/index.js +235 -0
- package/server/lib/artifact-file-path.js +80 -0
- package/server/lib/artifact-target.js +284 -0
- package/server/lib/asset-refs.js +239 -0
- package/server/lib/async-queue.js +104 -0
- package/server/lib/auto-relations.js +130 -0
- package/server/lib/binding-types.js +60 -0
- package/server/lib/board-kind-sizes.js +62 -0
- package/server/lib/board-relations.js +133 -0
- package/server/lib/browse-proxy.js +180 -0
- package/server/lib/canvas-id.js +36 -0
- package/server/lib/cover.js +227 -0
- package/server/lib/danbooru-tags.js +291 -0
- package/server/lib/doc-extract.js +156 -0
- package/server/lib/docx/build-from-source.js +260 -0
- package/server/lib/docx/build.js +490 -0
- package/server/lib/docx/dump-styles.js +287 -0
- package/server/lib/docx/fonts/nodesign-cjk.conf +164 -0
- package/server/lib/docx/merge-runs.js +129 -0
- package/server/lib/docx/numbering.js +218 -0
- package/server/lib/docx/order.js +152 -0
- package/server/lib/docx/rawzip.js +172 -0
- package/server/lib/docx/render.js +92 -0
- package/server/lib/docx/text-lint.js +225 -0
- package/server/lib/docx/tokens.js +335 -0
- package/server/lib/docx/units.js +29 -0
- package/server/lib/docx/xml.js +291 -0
- package/server/lib/docx-pages.js +187 -0
- package/server/lib/export-collect.js +289 -0
- package/server/lib/export-package.js +210 -0
- package/server/lib/html-srcset.js +145 -0
- package/server/lib/image-variant.js +460 -0
- package/server/lib/ingress/forward-openai-chat.js +305 -0
- package/server/lib/ingress/openai-chat.js +491 -0
- package/server/lib/ingress/session-notice.js +66 -0
- package/server/lib/ingress/session-routes.js +68 -0
- package/server/lib/ingress/slot-probe.js +130 -0
- package/server/lib/ingress/upstream-billing.js +52 -0
- package/server/lib/ingress/upstream-fail-streak.js +72 -0
- package/server/lib/ingress/upstream-truncation.js +48 -0
- package/server/lib/issues-store.js +182 -0
- package/server/lib/kinds/deck.js +72 -0
- package/server/lib/kinds/docx.js +283 -0
- package/server/lib/kinds/file-kinds.js +113 -0
- package/server/lib/kinds/index.js +202 -0
- package/server/lib/kinds/site.js +161 -0
- package/server/lib/model-ingress.js +543 -0
- package/server/lib/moderation.js +255 -0
- package/server/lib/notice-store.js +103 -0
- package/server/lib/plugin-install.js +104 -0
- package/server/lib/plugin-validator.js +721 -0
- package/server/lib/publish-store.js +115 -0
- package/server/lib/quick-summary.js +52 -0
- package/server/lib/quota.js +270 -0
- package/server/lib/rate-window.js +29 -0
- package/server/lib/reference-assets.js +92 -0
- package/server/lib/region-shot.js +135 -0
- package/server/lib/safe-path.js +73 -0
- package/server/lib/sdk-session.js +33 -0
- package/server/lib/showcase-store.js +92 -0
- package/server/lib/site-publish.js +465 -0
- package/server/lib/ssrf-guard.js +432 -0
- package/server/lib/task-scan.js +158 -0
- package/server/lib/tavern-json.js +154 -0
- package/server/lib/video-variant.js +237 -0
- package/server/lib/workspace-path.js +33 -0
- package/server/ops/fix-sdk-musl.mjs +40 -0
- package/server/ops/install-macos-fonts.sh +114 -0
- package/server/ops/macos-fonts.conf +336 -0
- package/server/ops/sandbox-shim/bwrap +57 -0
- package/server/projects/assets-summary.js +119 -0
- package/server/projects/auto-name.js +53 -0
- package/server/projects/board-store.js +640 -0
- package/server/projects/move-entry.js +103 -0
- package/server/projects/store.js +270 -0
- package/server/projects/ui-config.js +54 -0
- package/server/projects/workspace-templates.js +53 -0
- package/server/projects/workspace.js +1025 -0
- package/server/runtime/capabilities.js +153 -0
- package/server/runtime/local-config.js +177 -0
- package/server/runtime/local-env.js +88 -0
- package/server/runtime/platform.js +342 -0
- package/server/runtime/profile.js +72 -0
- package/server/services/rembg-launcher.js +313 -0
- package/server/services/rembg-service.py +334 -0
- package/server/shared/README.md +25 -0
- package/server/shared/deck.js +54 -0
- package/server/shared/time.js +49 -0
- package/server/style-pipeline/README.md +53 -0
- package/server/ws/broker.js +36 -0
- package/server/ws/browse-channel.js +177 -0
- package/server/ws/index.js +386 -0
- package/web/README.md +89 -0
- package/web/dist/assets/BrowserWindow-Dc7J7CYc.js +11 -0
- package/web/dist/assets/DeckWindow-4G0xX7P3.js +16 -0
- package/web/dist/assets/DocxWindow-BXQsoPkh.js +16 -0
- package/web/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/web/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/web/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/web/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/web/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/web/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/web/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/web/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/web/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/web/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/web/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/web/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/web/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/web/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/web/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/web/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/web/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/web/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/web/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/web/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/web/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/web/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/web/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/web/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/web/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/web/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/web/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/web/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/web/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/web/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/web/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/web/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/web/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/web/dist/assets/SiteWindow-D6eS-2gM.js +18 -0
- package/web/dist/assets/again-D8tfgKKO.webp +0 -0
- package/web/dist/assets/caveat-nd-CP6HlsNg.woff2 +0 -0
- package/web/dist/assets/clock-xJhvfYpS.webp +0 -0
- package/web/dist/assets/film-cut-BBKMwH7q.webp +0 -0
- package/web/dist/assets/film-still-BZ_DL9Tt.webp +0 -0
- package/web/dist/assets/index-C0KUf6Wd.css +1 -0
- package/web/dist/assets/index-Cbl3ATvp.js +2125 -0
- package/web/dist/assets/ink-desk-BRbxeDsR.webp +0 -0
- package/web/dist/assets/ink-night-Bz4BT3XH.webp +0 -0
- package/web/dist/assets/ink-portrait-C0DM4V8Q.webp +0 -0
- package/web/dist/assets/longcang-regular-C0uvTuKa.woff2 +0 -0
- package/web/dist/assets/lxgw-nd-bold-DbRfiTgo.woff2 +0 -0
- package/web/dist/assets/lxgw-nd-regular-CpMw9Ehg.woff2 +0 -0
- package/web/dist/assets/pending-edit-apply-DTjo2geW.js +31 -0
- package/web/dist/assets/question-8H4HSqxh.webp +0 -0
- package/web/dist/assets/reject-BaPJqElj.webp +0 -0
- package/web/dist/assets/rotate-cw-LMT3x1Zj.js +11 -0
- package/web/dist/assets/rp-portrait-CbrGpew2.webp +0 -0
- package/web/dist/assets/rp-street-C4jVKjxx.webp +0 -0
- package/web/dist/assets/square-dashed-mouse-pointer-CBoAkfhi.js +11 -0
- package/web/dist/assets/tangle-DIxHVNuT.webp +0 -0
- package/web/dist/assets/thisone-BylZKglV.webp +0 -0
- package/web/dist/assets/thumb-DO1wfK1I.webp +0 -0
- package/web/dist/index.html +18 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Hybrid Grid(layout-role: `hybrid`)
|
|
2
|
+
|
|
3
|
+
图文并列的阵列页:feature 阵列 / 多 variant 展示 / 案例集 / 步骤对照。
|
|
4
|
+
|
|
5
|
+
## 意图
|
|
6
|
+
|
|
7
|
+
阵列页最容易掉进"等高卡片网格"的默认套路(反默认清单第一条)。做之前先问:
|
|
8
|
+
这些并列项里有没有主角?有主角就打破均质(一大多小、Z 型错位),真没有主角
|
|
9
|
+
(型号对照表这类)等高才是诚实的选择。
|
|
10
|
+
|
|
11
|
+
## 真正硬的几条
|
|
12
|
+
|
|
13
|
+
- **格数有天花板**:超过 6 格视觉碎片化,切 `<Tabs>`(≤4 个 variant 逐个看)或
|
|
14
|
+
embla 轮播(更多)。模板自带 `<Card>` `<Tabs>`,feature 阵列优先 reach for。
|
|
15
|
+
- **每格图共用 referenceImages** 保持风格一致,跟 portrait 的多人物同理。
|
|
16
|
+
- **锁图片比例**(aspect-ratio),不锁的 grid 高度参差是最常见的翻车。
|
|
17
|
+
- caption 是辅料,字号和颜色明确低于格标题。
|
|
18
|
+
|
|
19
|
+
## 写法
|
|
20
|
+
|
|
21
|
+
列数、间距、是否等高全部从内容角色推导。section 标 `data-layout-role="hybrid"` +
|
|
22
|
+
常规 data-page / data-anchor;格内 img 建议带 `data-asset-role="illustration"`。
|
package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/image-led-cover.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Image-led Cover(layout-role: `image-led`)
|
|
2
|
+
|
|
3
|
+
封面 / 全幅 hero。图占满,文字是浮层。它是整个 deck 的视觉锚种子:用户认可这张
|
|
4
|
+
cover 后,它的风格(光线 / 色调 / 质感)通过 referenceImages 传染给后续所有生成图。
|
|
5
|
+
|
|
6
|
+
## 意图
|
|
7
|
+
|
|
8
|
+
入口页要在一秒内把锚的气质砸出来。判断一张 cover 成不成,遮住文字只看图,
|
|
9
|
+
还能不能感受到这个 deck 是什么气质。
|
|
10
|
+
|
|
11
|
+
## 真正硬的几条
|
|
12
|
+
|
|
13
|
+
- **图传达的别再用文字重述**。"古书堆图"旁边不写"古典氛围",重复等于不自信。
|
|
14
|
+
- **文字克制**(标题 + 可选副标 + 可选编号,就这些)。想写更多说明这页不该是 cover。
|
|
15
|
+
- **overlay 别用纯黑半透明蒙层压全图亮度**。要压就只压文字落脚的局部(渐变到底部
|
|
16
|
+
或角落),大字加 drop-shadow,图的亮部留给图。
|
|
17
|
+
- **cover 是种子**:生成后主动请用户确认方向,approve 之前别往后铺。选错一路全漂。
|
|
18
|
+
|
|
19
|
+
## 写法
|
|
20
|
+
|
|
21
|
+
图 `absolute inset-0 object-cover` 铺底,`object-position` 按视觉重心调(人物通常
|
|
22
|
+
center-top)。布局、渐变方向、文字位置全部从锚推导,没有默认值。
|
|
23
|
+
|
|
24
|
+
标记:section 必带 `data-page` / `data-layout-role="image-led"` / 唯一 `data-anchor`;
|
|
25
|
+
img 建议带 `data-asset-role="cover"` + `data-asset-source`(审计与重生成用的约定)。
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Portrait(layout-role: `image-led`)
|
|
2
|
+
|
|
3
|
+
人物页:主角介绍 / 团队页 / 专家背书。人像 + 身份信息 + 一句 quote 或 tagline。
|
|
4
|
+
|
|
5
|
+
## 意图
|
|
6
|
+
|
|
7
|
+
这页在建立"人的可信度或存在感"。竖幅(4:5 / 2:3)人像暗示"这是个人",
|
|
8
|
+
横幅环境照暗示"这是个场景",按你要的语义选。跟 quote-backdrop 的区别:
|
|
9
|
+
portrait 人在前景,quote-backdrop 图弱化、大字是主角。
|
|
10
|
+
|
|
11
|
+
## 真正硬的几条
|
|
12
|
+
|
|
13
|
+
- **多人物必须锁风格**:generate_image 用同一批 referenceImages 保持光线和质感一致,
|
|
14
|
+
否则团队页像从三个图库拼出来的。
|
|
15
|
+
- **信息分三层**:身份小字、姓名大字、quote 另一种质感(斜体或衬线),三层不同
|
|
16
|
+
重量,别做成同字号列表。
|
|
17
|
+
- 人像圆角克制:全圆(头像化)让人物失去分量,除非锚本身就是社交产品气质。
|
|
18
|
+
|
|
19
|
+
## 写法
|
|
20
|
+
|
|
21
|
+
左图右文或上图下文皆可,比例和间距从锚推导。img 建议带
|
|
22
|
+
`data-asset-role="portrait"`;section 常规三件套标记(data-page /
|
|
23
|
+
data-layout-role / 唯一 data-anchor,重名加 `-pN` 后缀)。
|
package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/quote-backdrop.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Quote Backdrop(layout-role: `image-led`)
|
|
2
|
+
|
|
3
|
+
引言页:图弱化作衬底,一句大字 quote 是唯一主角。情绪转折 / 关键判断 / 立意页用。
|
|
4
|
+
|
|
5
|
+
## 意图
|
|
6
|
+
|
|
7
|
+
quote 页是 deck 节奏里的"暂停",价值全在减法。它跟 portrait 的分工:portrait
|
|
8
|
+
人在前景 quote 作装饰,这里 quote 是主角图退成氛围。
|
|
9
|
+
|
|
10
|
+
## 真正硬的几条
|
|
11
|
+
|
|
12
|
+
- **衬底图弱化要有度**:淡到读不出意境(怕被看到式的 opacity-10)和抢戏的全亮
|
|
13
|
+
都不行,图要能感觉到但不干扰读字。罩层带一点锚的底色比纯黑白罩透气。
|
|
14
|
+
- **这页只有 quote + 出处两个元素**。每多加一个装饰就背叛一次"暂停"的意图。
|
|
15
|
+
- 出处是辅料:小字、另一种字体质感,跟 quote 拉开重量。
|
|
16
|
+
|
|
17
|
+
## 写法
|
|
18
|
+
|
|
19
|
+
图 `absolute inset-0 object-cover` + 低透明度,quote 用锚的 display 字体放大,
|
|
20
|
+
居中或偏置构图从锚推导。section 标 `data-layout-role="image-led"` + 常规
|
|
21
|
+
data-page / data-anchor;img 建议带 `data-asset-role="quote-backdrop"`。
|
package/server/engine/plugins/nodesign/skills/deskskill-engine-mini/patterns/section-divider.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Section Divider(layout-role: `image-led`)
|
|
2
|
+
|
|
3
|
+
章节扉页:多章节 deck 的中段切片。全屏图 + 章节号 + 一句概括。
|
|
4
|
+
|
|
5
|
+
## 意图
|
|
6
|
+
|
|
7
|
+
转场页管的是节奏,给观众一次呼吸和一次预告。它的存在让正文页不必每页顶部
|
|
8
|
+
贴 chip 复述"现在是第几部分"(那是反默认清单第四条)。跟 cover 的区别:
|
|
9
|
+
cover 是入口要砸气质,divider 是切片要收着,文案密度更低。
|
|
10
|
+
|
|
11
|
+
## 真正硬的几条
|
|
12
|
+
|
|
13
|
+
- **只有章节号 + 标题(+ 可选一句概括)**。bullet 和段落出现在这页就是结构错了。
|
|
14
|
+
- **跟 cover 共用 referenceImages 系列**保风格一致,但场景换(cover 是主体 hero,
|
|
15
|
+
divider 换 environment / mood),不然像同一张图裁了两次。
|
|
16
|
+
- 章节号和标题拉开质感反差(比如编号用 mono 大字距,标题用锚的 display 字体),
|
|
17
|
+
同质感排两行就平了。
|
|
18
|
+
|
|
19
|
+
## 写法
|
|
20
|
+
|
|
21
|
+
全屏图铺底 + 局部 overlay,居中或角落构图从锚推导。section 标
|
|
22
|
+
`data-layout-role="image-led"` + 常规 data-page / data-anchor;img 建议带
|
|
23
|
+
`data-asset-role="section-divider"`。
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Text-led(layout-role: `text-led`)
|
|
2
|
+
|
|
3
|
+
文字主导页:论点页 / 结论页 / 痛点页 / 概念页。文字承载叙事,图(如有)只是配重。
|
|
4
|
+
|
|
5
|
+
## 意图
|
|
6
|
+
|
|
7
|
+
这页靠一句锋利的话立住。核心句是主角,其余段落和要点是它的证据链。
|
|
8
|
+
跟 hybrid 的区别看图文权重:图超过三成注意力就该走 hybrid。
|
|
9
|
+
|
|
10
|
+
## 真正硬的几条
|
|
11
|
+
|
|
12
|
+
- **核心句只有一个**。标题写结论不写名词("市场规模" → "AI 搜索市场在升级为基础设施")。
|
|
13
|
+
- **文字量有天花板**:演示稿不是文档,段落多到要缩小字号才装得下,就拆页。
|
|
14
|
+
- **要点列表膨胀是信号**:五六项以上的并列要点说明结构错了,该换卡片阵列或 Tabs,
|
|
15
|
+
或者砍。
|
|
16
|
+
- 配重图就是配重:干净裁切即可,别套 cover 那套 overlay。
|
|
17
|
+
|
|
18
|
+
## 写法
|
|
19
|
+
|
|
20
|
+
大留白单句页、左文右图、纯文居中都是合法形态,从锚的版式语言推导。
|
|
21
|
+
section 常规三件套标记;关键文字元素加 `data-anchor` 方便跨 turn 引用。
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: docx-craft
|
|
3
|
+
version: 0.1.0
|
|
4
|
+
description: NoDesign Word 文档设计守则 —— 产出 .docx(真 Word 文件,对方能打开接着改)。先问这份文档给谁看、进什么流程,再把用户嘴里的形容词翻译成一个真实存在的版式名,然后试作、给看、改、锚定、铺开。含中文排版军规(eastAsia 字体槽 / 首行缩进随字号 / 禁则 / 中文无真斜体)、闭合 token 契约、结构真实性(真样式真编号真表格几何)、渲染验收回路。**当用户明确要一份 .docx / Word 文件,或要的东西必须能在 Word 里打开继续编辑,或是有格式硬规定的正式文书(公文、学位论文、合同、投递用简历)时使用。** 反向:要演示 / 幻灯片 / PPT 走 deskskill-engine-mini,要网页 / 站点 / 落地页走 site-craft。⚠️ 用户只说"做个报告 / 写个方案"而没提格式时**不要**用这条 —— 默认仍走 deck 或站点,画布里可看可迭代是主场,Word 是显式出口。
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 核心守则:跟 deck / 站点同一条路
|
|
8
|
+
|
|
9
|
+
**命名 → 试作 → 给看 → 改 → 用户说"就这个" → 锚定 → 铺开**
|
|
10
|
+
|
|
11
|
+
区别只在试作做什么:deck 试作一页封面,站点试作首页上半屏,**文档试作头一页**
|
|
12
|
+
(标题区 + 两三段正文 + 一个二级标题)。文档的气质八成由正文排版决定 —— 行距、
|
|
13
|
+
首行缩进、标题层级的字号跳跃。只给用户看个漂亮封面,铺到正文那天他会说"怎么跟
|
|
14
|
+
我想的不一样"。
|
|
15
|
+
|
|
16
|
+
## 〇、先问三件(决定后面所有取舍)
|
|
17
|
+
|
|
18
|
+
1. **给谁看** —— 领导 / 甲方 / 评审 / 投递对方
|
|
19
|
+
2. **进什么流程** —— 要不要盖章、要不要走 OA、要不要打印、对方会不会在上面批注
|
|
20
|
+
3. **对方用什么打开** —— 十有八九是 Windows 上的 Word;这条决定字体怎么选
|
|
21
|
+
|
|
22
|
+
第 3 条尤其不能跳。**docx 的字体是"点名"不是"备选链"** —— 一个槽只能写一个名字,
|
|
23
|
+
没有 CSS 那种 fallback。点了用户机器上没有的字体,Word 会自己替一个,你控制不了。
|
|
24
|
+
|
|
25
|
+
## 一、先给版式一个名字
|
|
26
|
+
|
|
27
|
+
跟 deck / 站点同一条规矩:**把形容词翻译成一个真实存在的版式名**。形容词
|
|
28
|
+
("正式一点""清爽点")把模型推向均值;名字有可仿照的对象。
|
|
29
|
+
|
|
30
|
+
docx 的版式谱系跟网页不是一套,常用的这些:
|
|
31
|
+
|
|
32
|
+
| 用户可能说 | 翻译成 | 落到 token 上是哪几条 |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| 要正式 / 报上去的 / 盖章 | **公文体(GB/T 9704-2012)** | 三号仿宋正文、固定行距 28pt、每页 22 行、黑体一级楷体二级、页边距 37/26/35/28mm |
|
|
35
|
+
| 论文 / 投稿 / 毕业 | **学术论文体** | 小四宋体、1.5 倍行距、章节编号、图表题注 |
|
|
36
|
+
| 商务 / 提案 / 汇报 | **商务简报体** | 小四、段前段后留白、无首行缩进改段间距、标题带细规则线 |
|
|
37
|
+
| 就要普通的 / 别花哨 | **办公标准(素颜 Word)** | Word 默认观感本身。⚠️这是**合法选择不是偷懒** —— 要混进办公流程的文档,"看起来像人在 Word 里敲的"就是需求 |
|
|
38
|
+
| 简历 / 投递 | **单页履历体** | 窄边距、姓名区大字号、条目左对齐悬挂缩进、零装饰 |
|
|
39
|
+
| 手册 / 说明书 | **技术文档体** | 编号标题、等宽代码块、表格密排 |
|
|
40
|
+
|
|
41
|
+
内置词典条目有三个(`build_docx` 的 `preset`):`办公标准` / `公文` / `学术论文`。
|
|
42
|
+
**它们是起点不是菜单** —— 上表其余的用 preset 起手再覆写 tokens,或者干脆不写
|
|
43
|
+
preset 给完整 token 表。自造词作废("科技感文档"不是版式名),但凡是真实存在、
|
|
44
|
+
你能说出它长什么样的版式,都可以当名字。
|
|
45
|
+
|
|
46
|
+
## 二、token 是真相源,docx 是构建产物
|
|
47
|
+
|
|
48
|
+
工作方式**只有这一种**:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
写/改 文档.json → build_docx → screenshot_canvas 看 → 改 JSON → 再 build
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
⛔ **永远不要直接改 .docx**。它是构建产物,下一次 build 会把你的手改无声抹掉。
|
|
55
|
+
(外来文档除外,见第七节。)
|
|
56
|
+
|
|
57
|
+
**放进文件夹,一份文档一个家**:`报告/文档.json` + `报告/文档.docx`。画布会把
|
|
58
|
+
整个文件夹显示成一张文档卡,里面所有 .docx 都是它的成员,用户在窗里切换查看。
|
|
59
|
+
所以**用户要保留旧版时,另起文件名**(`报告/终稿v2.json` → build 出 `终稿v2.docx`,
|
|
60
|
+
新旧并排),⛔ 别覆盖旧版 —— 版本是给用户看的,不是给你腾地方的。
|
|
61
|
+
|
|
62
|
+
起手文件 `文档.template.json` 已经拷进工作区了 —— 照着它改,别从空白开始。
|
|
63
|
+
**字段全集 Read `references/token-schema.md`** —— 键名、值域、单位、块的形状、
|
|
64
|
+
常见错法对照全在那里,别靠猜,也别去读引擎源码。
|
|
65
|
+
|
|
66
|
+
**schema 是闭合的**:写了没登记过的字段名,`build_docx` 直接报错。这是故意的 ——
|
|
67
|
+
静默忽略会让你以为那条排版指令生效了。闭合的是"哪些问题必须回答",不是"答案是
|
|
68
|
+
什么",跟"不预设范式"不冲突。
|
|
69
|
+
|
|
70
|
+
⭐ **没写的值由打开文件的那个渲染器决定**(Word 各版本 / WPS / Pages 各不同)。
|
|
71
|
+
网页至少还有一份 CSS 初始值规范兜底,docx 没有。所以:**凡是你在意的值就显式写出来**,
|
|
72
|
+
别指望默认。
|
|
73
|
+
|
|
74
|
+
## 三、结构真实性:不许假造
|
|
75
|
+
|
|
76
|
+
这一条决定文档是"能看"还是"能交"。
|
|
77
|
+
|
|
78
|
+
- **标题必须是真样式**(带 `outlineLevel`),不是"把一行字调大加粗"。假标题
|
|
79
|
+
→ Word 的导航窗格是空的、TOC 生成不出来、对方改样式时它不跟着变。
|
|
80
|
+
- **列表必须是真编号定义**,不是手打 `1.` `2.` 或者 `•`。假列表在用户插一条的
|
|
81
|
+
时候不会自动重排,删一条就断号。写法:`tokens.numbering` 里起个名字挂一个梯队,
|
|
82
|
+
段落上 `list: { name:'条款', ilvl:0 }`(单层可以简写成 `list: '条款'`)。
|
|
83
|
+
内置四个梯队都是照中文排版传统定的,**先用内置的**:
|
|
84
|
+
- `公文条款` 一、→(一)→ 1. →(1)。首行缩进两字、文字紧跟编号、折行顶格
|
|
85
|
+
- `数字条款` 1. → 1.1 → 1.1.1。悬挂缩进,折行对齐到文字起点
|
|
86
|
+
- `圈码` ①②③ —— 中文文档里"并列要点"最常见的那种
|
|
87
|
+
- `项目符号` ●○▪(故意用真汉字区符号,不用 Symbol/Wingdings 的私用码位:
|
|
88
|
+
那些在没装对应字体的机器上会变豆腐块)
|
|
89
|
+
自己写梯队见 `references/token-schema.md` 的 numbering 节。
|
|
90
|
+
- **表格必须给显式几何**(DXA 宽度,`tblW` / `tblGrid` / 每个 `tcW` 要一致),
|
|
91
|
+
不许靠 autofit,不许拿表格当版式骨架。
|
|
92
|
+
- **缩进用缩进属性,不用空格/全角空格凑**。
|
|
93
|
+
|
|
94
|
+
判据很简单:**用户在 Word 里改一处,会不会散架。** 会散架的就是假的。
|
|
95
|
+
|
|
96
|
+
## 四、中文排版军规(目标用户是中文用户,这节不是可选项)
|
|
97
|
+
|
|
98
|
+
1. ⭐ **`eastAsia` 槽必须设。** 中文字符走的是 `w:rFonts` 的 `eastAsia` 槽,
|
|
99
|
+
只写 `ascii` 等于没给中文指定字体。token 里 `fonts` 每个槽四件套都要填。
|
|
100
|
+
2. ⭐ **首行缩进用字符单位**(`firstLineChars`,200 = 两字符),不要用固定磅值。
|
|
101
|
+
字号一变,固定磅值的缩进就不是两个字了。(引擎会自动同时发 twip 兜底,
|
|
102
|
+
因为 LibreOffice 不认单独的 chars —— 这条已经内建,你不用管。)
|
|
103
|
+
3. **首行缩进和段间距二选一。** 中文正文传统是缩进不留白;两个都上是网页习惯
|
|
104
|
+
带过来的错,看起来会松垮。
|
|
105
|
+
4. **中文没有真斜体。** Word 的中文斜体是把字硬拉斜,很难看。强调改用
|
|
106
|
+
加粗 / 换字体(楷体)/ 着重号(`em`)/ 字号。
|
|
107
|
+
5. **标题不要跟着正文缩进。** 标题样式 `basedOn` 正文时会继承首行缩进 ——
|
|
108
|
+
这是中文用户在 Word 里天天骂的那个现象。标题样式里显式写 `firstLineChars: 0`。
|
|
109
|
+
|
|
110
|
+
字号用中文字号名(三号 / 小四 / 五号)比写磅值可靠,token 直接收它们。
|
|
111
|
+
|
|
112
|
+
## 五、渲染验收:做完必须看
|
|
113
|
+
|
|
114
|
+
`screenshot_canvas` 对 .docx 会渲成页图(LibreOffice → PDF → PNG),带 `pages` 参数
|
|
115
|
+
(`"3"` / `"2-5"` / `"all"`),默认前两页、一次最多六页。
|
|
116
|
+
|
|
117
|
+
⚠️ **构建没报错不等于排版对了。** docx 没有 DOM,没有 `query_elements` 可查 ——
|
|
118
|
+
渲染是唯一的验收手段。每次 build 完看一眼,不要攒到最后。
|
|
119
|
+
|
|
120
|
+
**这只眼睛的三条已知失真**(caption 里也会重复,别忘):
|
|
121
|
+
|
|
122
|
+
- **中文是替身字体**:雅黑/等线→MiSans、仿宋→朱雀仿宋、宋体→Noto Serif、
|
|
123
|
+
楷体→LXGW 文楷。字形跟用户 Word 里仍有差。**CJK 全角等宽,断行位置是一致的**,
|
|
124
|
+
字形观感不能判。
|
|
125
|
+
- ⚠️ **multiple 行距下页数不可照图判**(2026-08-19 真 Word 实证:这里 2 页的
|
|
126
|
+
简历在用户 Word 里变 4 页)。multiple 乘的是**字体自带行高**,替身和真机字体
|
|
127
|
+
不同高 —— 雅黑/等线档已对齐(MiSans 1.326 ≈ 真雅黑 1.32,Windows Word 基本
|
|
128
|
+
同高),但宋体等其它档、Mac 替到苹方(≈1.4)仍有差。**页数敏感的文档(简历
|
|
129
|
+
「必须两页」、公文这类)行距一律用 `exact` / `atLeast` 磅值**:磅值在哪个
|
|
130
|
+
渲染器里都一样高,页数就钉死了(公文词典条目本来就是 exact 28pt,天然免疫)。
|
|
131
|
+
- **TOC 域显示的是占位文案**,不是真目录(Word 打开更新域才生成)。页码域是
|
|
132
|
+
正常的,看到几就是几。
|
|
133
|
+
|
|
134
|
+
**能判的**:版面留白、行距密度、标题层级跳跃、缩进、表格对齐、孤行寡行;
|
|
135
|
+
exact/atLeast 行距下分页位置也能判。
|
|
136
|
+
**不能判的**:字形好不好看、目录内容、multiple 行距下的页数、跨版本 Word 兼容性。
|
|
137
|
+
|
|
138
|
+
最后一条只有用户能验 —— 交付时主动说一句"建议在 Word 里开一遍确认"。
|
|
139
|
+
|
|
140
|
+
## 六、验收次序
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
build_docx → 过不了就按报错改 JSON,别猜
|
|
144
|
+
screenshot_canvas → 看版式
|
|
145
|
+
(多页文档)screenshot_canvas pages:"N-M" → 看分页处有没有孤行、标题掉在页底
|
|
146
|
+
交付前 → 提醒用户在真 Word 里开一遍
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## 七、外来文档(用户上传的 .docx)
|
|
150
|
+
|
|
151
|
+
⚠️ 这一段能力**还没做完**,别承诺。现在能做的只有:读它的内容、渲染它、
|
|
152
|
+
原样导出。**改它**要等编辑道上线。
|
|
153
|
+
|
|
154
|
+
如果用户要改一份上传的文档,现在的诚实回答是:可以基于它的内容**重做**一份
|
|
155
|
+
(我们自己的 token 源,改起来干净),但不能在他那份原件上做定点修改。
|
|
156
|
+
问清楚他要哪种再动手。
|
|
157
|
+
|
|
158
|
+
## 八、导出
|
|
159
|
+
|
|
160
|
+
`raw` 就是那个 .docx 本身 —— **它就是交付物**,不是"导出的副产品",这跟 deck /
|
|
161
|
+
站点反过来。`pdf` 走 LibreOffice,是快速预览用的;要发出去的正式 PDF 让用户在
|
|
162
|
+
Word 里导(域和字体都对)。
|