@huicai/cli 2026.814.0 → 2026.1019.0
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 +391 -32
- package/README.md +137 -8
- package/bin/huicai.js +146 -73
- package/package.json +27 -8
- package/skills/ab-testing/trigger-cases.json +30 -0
- package/skills/academic-writing/trigger-cases.json +30 -0
- package/skills/accounting-ops/trigger-cases.json +30 -0
- package/skills/ai-agent/trigger-cases.json +30 -0
- package/skills/ai-aiops/trigger-cases.json +30 -0
- package/skills/ai-coding/trigger-cases.json +30 -0
- package/skills/ai-compliance/trigger-cases.json +30 -0
- package/skills/ai-eval/trigger-cases.json +30 -0
- package/skills/ai-llm-app/trigger-cases.json +30 -0
- package/skills/ai-mlops/trigger-cases.json +30 -0
- package/skills/ai-multimodal/trigger-cases.json +30 -0
- package/skills/ai-prompt/trigger-cases.json +30 -0
- package/skills/ai-rag/trigger-cases.json +30 -0
- package/skills/anomaly-detection/trigger-cases.json +30 -0
- package/skills/api-design/trigger-cases.json +31 -0
- package/skills/api-integration/trigger-cases.json +31 -0
- package/skills/arch-design/trigger-cases.json +12 -0
- package/skills/arch-diagram/SKILL.md +118 -0
- package/skills/arch-diagram/trigger-cases.json +30 -0
- package/skills/arch-distributed/trigger-cases.json +30 -0
- package/skills/arch-multitenant/trigger-cases.json +30 -0
- package/skills/audio-brief/SKILL.md +65 -0
- package/skills/audio-brief/trigger-cases.json +30 -0
- package/skills/audit-assist/trigger-cases.json +30 -0
- package/skills/audit-chain/trigger-cases.json +31 -0
- package/skills/banking-credit/trigger-cases.json +30 -0
- package/skills/brand-design/trigger-cases.json +30 -0
- package/skills/business-plan/trigger-cases.json +30 -0
- package/skills/capital-ops/trigger-cases.json +30 -0
- package/skills/cicd-pipeline/trigger-cases.json +31 -0
- package/skills/code-archaeology/SKILL.md +55 -0
- package/skills/code-archaeology/trigger-cases.json +9 -0
- package/skills/code-quality/SKILL.md +138 -0
- package/skills/code-quality/references/languages.md +107 -0
- package/skills/code-quality/scripts/__pycache__/code_battery.cpython-312.pyc +0 -0
- package/skills/code-quality/scripts/__pycache__/code_check.cpython-312.pyc +0 -0
- package/skills/code-quality/scripts/__pycache__/code_check.cpython-313.pyc +0 -0
- package/skills/code-quality/scripts/__pycache__/code_csharp.cpython-312.pyc +0 -0
- package/skills/code-quality/scripts/__pycache__/code_csharp.cpython-313.pyc +0 -0
- package/skills/code-quality/scripts/__pycache__/code_fix.cpython-312.pyc +0 -0
- package/skills/code-quality/scripts/__pycache__/code_fix.cpython-313.pyc +0 -0
- package/skills/code-quality/scripts/__pycache__/code_java.cpython-312.pyc +0 -0
- package/skills/code-quality/scripts/__pycache__/code_java.cpython-313.pyc +0 -0
- package/skills/code-quality/scripts/__pycache__/code_jsts.cpython-312.pyc +0 -0
- package/skills/code-quality/scripts/__pycache__/code_jsts.cpython-313.pyc +0 -0
- package/skills/code-quality/scripts/__pycache__/code_lens.cpython-312.pyc +0 -0
- package/skills/code-quality/scripts/__pycache__/code_lens.cpython-313.pyc +0 -0
- package/skills/code-quality/scripts/__pycache__/code_python.cpython-312.pyc +0 -0
- package/skills/code-quality/scripts/__pycache__/code_python.cpython-313.pyc +0 -0
- package/skills/code-quality/scripts/__pycache__/code_testplan.cpython-312.pyc +0 -0
- package/skills/code-quality/scripts/code_battery.py +1072 -0
- package/skills/code-quality/scripts/code_check.py +1269 -0
- package/skills/code-quality/scripts/code_csharp.py +371 -0
- package/skills/code-quality/scripts/code_fix.py +201 -0
- package/skills/code-quality/scripts/code_java.py +695 -0
- package/skills/code-quality/scripts/code_jsts.py +313 -0
- package/skills/code-quality/scripts/code_lens.py +1079 -0
- package/skills/code-quality/scripts/code_python.py +536 -0
- package/skills/code-quality/scripts/code_testplan.py +239 -0
- package/skills/code-quality/trigger-cases.json +45 -0
- package/skills/code-review/SKILL.md +24 -0
- package/skills/code-review/trigger-cases.json +35 -0
- package/skills/commit-and-pr/trigger-cases.json +31 -0
- package/skills/content-creation/trigger-cases.json +30 -0
- package/skills/corporate-governance/trigger-cases.json +30 -0
- package/skills/crawl-chain/trigger-cases.json +31 -0
- package/skills/customer-service/trigger-cases.json +30 -0
- package/skills/data-analysis/trigger-cases.json +30 -0
- package/skills/data-chain/SKILL.md +1 -1
- package/skills/data-chain/trigger-cases.json +31 -0
- package/skills/data-governance/trigger-cases.json +30 -0
- package/skills/data-report-pro/trigger-cases.json +30 -0
- package/skills/data-streaming/trigger-cases.json +30 -0
- package/skills/data-wrangling/SKILL.md +1 -1
- package/skills/data-wrangling/trigger-cases.json +30 -0
- package/skills/db-es/trigger-cases.json +30 -0
- package/skills/db-migration/trigger-cases.json +30 -0
- package/skills/db-mysql/trigger-cases.json +30 -0
- package/skills/db-postgres/trigger-cases.json +30 -0
- package/skills/db-redis/trigger-cases.json +30 -0
- package/skills/debug-root-cause/trigger-cases.json +30 -0
- package/skills/dependency-audit/SKILL.md +56 -0
- package/skills/dependency-audit/trigger-cases.json +7 -0
- package/skills/dependency-upgrade/trigger-cases.json +31 -0
- package/skills/dev-cpp/trigger-cases.json +30 -0
- package/skills/dev-cross-platform/trigger-cases.json +30 -0
- package/skills/dev-csharp/SKILL.md +23 -0
- package/skills/dev-csharp/trigger-cases.json +30 -0
- package/skills/dev-frontend/SKILL.md +19 -0
- package/skills/dev-frontend/trigger-cases.json +30 -0
- package/skills/dev-go/trigger-cases.json +30 -0
- package/skills/dev-harmony/trigger-cases.json +30 -0
- package/skills/dev-java/SKILL.md +20 -0
- package/skills/dev-java/trigger-cases.json +30 -0
- package/skills/dev-mobile/trigger-cases.json +30 -0
- package/skills/dev-node/trigger-cases.json +30 -0
- package/skills/dev-php/trigger-cases.json +30 -0
- package/skills/dev-python/SKILL.md +21 -0
- package/skills/dev-python/trigger-cases.json +30 -0
- package/skills/dev-rust/trigger-cases.json +30 -0
- package/skills/dev-toolchain/trigger-cases.json +31 -0
- package/skills/doc-chain/trigger-cases.json +31 -0
- package/skills/doc-compare/trigger-cases.json +30 -0
- package/skills/docx-author/SKILL.md +127 -25
- package/skills/docx-author/scripts/__pycache__/docx_battery.cpython-312.pyc +0 -0
- package/skills/docx-author/scripts/__pycache__/docx_build.cpython-312.pyc +0 -0
- package/skills/docx-author/scripts/__pycache__/docx_check.cpython-312.pyc +0 -0
- package/skills/docx-author/scripts/__pycache__/docx_layout.cpython-312.pyc +0 -0
- package/skills/docx-author/scripts/__pycache__/zh_prose.cpython-312.pyc +0 -0
- package/skills/docx-author/scripts/docx_battery.py +586 -0
- package/skills/docx-author/scripts/docx_build.py +995 -0
- package/skills/docx-author/scripts/docx_check.py +1306 -0
- package/skills/docx-author/scripts/docx_doc.py +14 -154
- package/skills/docx-author/scripts/docx_layout.py +490 -0
- package/skills/docx-author/scripts/zh_prose.py +639 -0
- package/skills/docx-author/trigger-cases.json +58 -0
- package/skills/echo-brief/SKILL.md +84 -0
- package/skills/echo-brief/references/echo-format.md +68 -0
- package/skills/echo-brief/trigger-cases.json +40 -0
- package/skills/ecommerce-ops/trigger-cases.json +30 -0
- package/skills/education-training/trigger-cases.json +30 -0
- package/skills/ehs-safety/trigger-cases.json +30 -0
- package/skills/email-writing/trigger-cases.json +30 -0
- package/skills/eng-ai/trigger-cases.json +30 -0
- package/skills/eng-architecture/trigger-cases.json +31 -0
- package/skills/eng-automation/trigger-cases.json +31 -0
- package/skills/eng-collaboration/trigger-cases.json +30 -0
- package/skills/eng-complex-env/trigger-cases.json +30 -0
- package/skills/eng-data-platform/trigger-cases.json +31 -0
- package/skills/eng-database/trigger-cases.json +31 -0
- package/skills/eng-develop/trigger-cases.json +30 -0
- package/skills/eng-docs/SKILL.md +24 -0
- package/skills/eng-docs/trigger-cases.json +30 -0
- package/skills/eng-efficiency/trigger-cases.json +30 -0
- package/skills/eng-infra/trigger-cases.json +30 -0
- package/skills/eng-integration/trigger-cases.json +31 -0
- package/skills/eng-legacy/trigger-cases.json +31 -0
- package/skills/eng-observability/trigger-cases.json +31 -0
- package/skills/eng-ops/trigger-cases.json +31 -0
- package/skills/eng-performance/trigger-cases.json +31 -0
- package/skills/eng-planning/trigger-cases.json +31 -0
- package/skills/eng-quality/SKILL.md +8 -0
- package/skills/eng-quality/trigger-cases.json +31 -0
- package/skills/eng-release/trigger-cases.json +31 -0
- package/skills/eng-reliability/trigger-cases.json +31 -0
- package/skills/eng-requirements/trigger-cases.json +12 -0
- package/skills/eng-research/trigger-cases.json +30 -0
- package/skills/eng-security/trigger-cases.json +31 -0
- package/skills/eng-ux/trigger-cases.json +30 -0
- package/skills/engineering-chain/trigger-cases.json +30 -0
- package/skills/env-offline/trigger-cases.json +31 -0
- package/skills/env-private-deploy/trigger-cases.json +31 -0
- package/skills/env-xinchuang/trigger-cases.json +31 -0
- package/skills/equipment-tpm/trigger-cases.json +30 -0
- package/skills/esg-report/trigger-cases.json +30 -0
- package/skills/event-management/trigger-cases.json +30 -0
- package/skills/excel-analysis-chain/SKILL.md +17 -4
- package/skills/excel-analysis-chain/trigger-cases.json +31 -0
- package/skills/explain-codebase/trigger-cases.json +11 -0
- package/skills/file-ingest/trigger-cases.json +30 -0
- package/skills/finance-analysis/trigger-cases.json +31 -0
- package/skills/finance-chain/trigger-cases.json +31 -0
- package/skills/financial-modeling/trigger-cases.json +31 -0
- package/skills/find-simplifications/SKILL.md +43 -0
- package/skills/find-simplifications/trigger-cases.json +23 -0
- package/skills/foreign-trade/trigger-cases.json +30 -0
- package/skills/funnel-cohort/trigger-cases.json +30 -0
- package/skills/gov-document/trigger-cases.json +30 -0
- package/skills/gui-change-evidence/SKILL.md +47 -0
- package/skills/gui-change-evidence/trigger-cases.json +23 -0
- package/skills/hr-chain/trigger-cases.json +31 -0
- package/skills/hr-operations/trigger-cases.json +30 -0
- package/skills/info-disclosure/trigger-cases.json +31 -0
- package/skills/infra-gateway/trigger-cases.json +31 -0
- package/skills/infra-k8s/trigger-cases.json +31 -0
- package/skills/infra-mq/trigger-cases.json +30 -0
- package/skills/insurance-advisory/trigger-cases.json +30 -0
- package/skills/internal-audit/trigger-cases.json +30 -0
- package/skills/ip-management/trigger-cases.json +31 -0
- package/skills/ipo-listing/trigger-cases.json +31 -0
- package/skills/it-audit/trigger-cases.json +31 -0
- package/skills/itsm-ops/trigger-cases.json +31 -0
- package/skills/knowledge-sop/trigger-cases.json +31 -0
- package/skills/legal-chain/trigger-cases.json +31 -0
- package/skills/legal-contract/trigger-cases.json +30 -0
- package/skills/litigation-support/trigger-cases.json +31 -0
- package/skills/logistics-warehouse/trigger-cases.json +30 -0
- package/skills/long-doc-analysis/trigger-cases.json +31 -0
- package/skills/management-accounting/trigger-cases.json +30 -0
- package/skills/manufacturing-chain/trigger-cases.json +31 -0
- package/skills/manufacturing-quality/trigger-cases.json +30 -0
- package/skills/marketing-analytics/trigger-cases.json +31 -0
- package/skills/marketing-chain/trigger-cases.json +31 -0
- package/skills/meeting-minutes/trigger-cases.json +30 -0
- package/skills/metrics-system/trigger-cases.json +31 -0
- package/skills/negotiation-prep/trigger-cases.json +30 -0
- package/skills/obs-prometheus/trigger-cases.json +31 -0
- package/skills/office-automation/trigger-cases.json +31 -0
- package/skills/okr-review/trigger-cases.json +30 -0
- package/skills/ops-fleet/trigger-cases.json +31 -0
- package/skills/ops-linux/trigger-cases.json +31 -0
- package/skills/optimization-solver/trigger-cases.json +30 -0
- package/skills/patent-disclosure/SKILL.md +105 -0
- package/skills/patent-disclosure/references/figures.md +110 -0
- package/skills/patent-disclosure/references/outline.md +162 -0
- package/skills/patent-disclosure/scripts/patent_docx.py +230 -0
- package/skills/patent-disclosure/trigger-cases.json +31 -0
- package/skills/patent-drafting/SKILL.md +108 -0
- package/skills/patent-drafting/trigger-cases.json +31 -0
- package/skills/patent-portfolio/SKILL.md +81 -0
- package/skills/patent-portfolio/trigger-cases.json +31 -0
- package/skills/pdf-toolkit/trigger-cases.json +31 -0
- package/skills/perf-optimize/trigger-cases.json +31 -0
- package/skills/pivot-crosstab/trigger-cases.json +30 -0
- package/skills/policy-analysis/trigger-cases.json +31 -0
- package/skills/portfolio-analysis/trigger-cases.json +31 -0
- package/skills/ppt-chain/SKILL.md +14 -6
- package/skills/ppt-chain/trigger-cases.json +31 -0
- package/skills/pptx-author/SKILL.md +86 -33
- package/skills/pptx-author/scripts/__pycache__/pptx_check.cpython-312.pyc +0 -0
- package/skills/pptx-author/scripts/__pycache__/pptx_deck.cpython-312.pyc +0 -0
- package/skills/pptx-author/scripts/__pycache__/pptx_layout.cpython-312.pyc +0 -0
- package/skills/pptx-author/scripts/pptx_battery.py +178 -0
- package/skills/pptx-author/scripts/pptx_build.py +119 -0
- package/skills/pptx-author/scripts/pptx_check.py +1182 -0
- package/skills/pptx-author/scripts/pptx_deck.py +736 -145
- package/skills/pptx-author/scripts/pptx_layout.py +384 -0
- package/skills/pptx-author/trigger-cases.json +15 -0
- package/skills/pr-comms/trigger-cases.json +30 -0
- package/skills/procurement-supply/trigger-cases.json +31 -0
- package/skills/product-design/trigger-cases.json +31 -0
- package/skills/production-planning/trigger-cases.json +31 -0
- package/skills/project-management/trigger-cases.json +31 -0
- package/skills/project-proposal/trigger-cases.json +31 -0
- package/skills/prose-standard/SKILL.md +53 -0
- package/skills/prose-standard/trigger-cases.json +23 -0
- package/skills/qa-api-automation/trigger-cases.json +31 -0
- package/skills/qa-mobile-automation/trigger-cases.json +31 -0
- package/skills/qa-ui-automation/trigger-cases.json +31 -0
- package/skills/quant-analysis/trigger-cases.json +31 -0
- package/skills/rag-triage/SKILL.md +64 -0
- package/skills/rag-triage/evals.json +57 -0
- package/skills/rag-triage/references/triage-playbook.md +75 -0
- package/skills/rag-triage/trigger-cases.json +31 -0
- package/skills/real-estate-property/trigger-cases.json +30 -0
- package/skills/refactor-safely/SKILL.md +1 -1
- package/skills/refactor-safely/trigger-cases.json +30 -0
- package/skills/regression-forecast/trigger-cases.json +31 -0
- package/skills/release-checklist/trigger-cases.json +31 -0
- package/skills/report-craft/SKILL.md +76 -0
- package/skills/report-craft/references/feasibility.md +118 -0
- package/skills/report-craft/references/review-checklist.md +51 -0
- package/skills/report-craft/references/visuals.md +114 -0
- package/skills/report-craft/references/writing.md +80 -0
- package/skills/report-craft/scripts/__pycache__/chart_render.cpython-312.pyc +0 -0
- package/skills/report-craft/scripts/__pycache__/fin_model.cpython-312.pyc +0 -0
- package/skills/report-craft/scripts/__pycache__/project_facts.cpython-312.pyc +0 -0
- package/skills/report-craft/scripts/chart_render.py +1222 -0
- package/skills/report-craft/scripts/fin_model.py +602 -0
- package/skills/report-craft/scripts/project_facts.py +580 -0
- package/skills/report-craft/scripts/report_battery.py +349 -0
- package/skills/report-craft/trigger-cases.json +15 -0
- package/skills/retail-store-ops/trigger-cases.json +30 -0
- package/skills/risk-compliance/trigger-cases.json +31 -0
- package/skills/scope-creep/SKILL.md +45 -0
- package/skills/scope-creep/trigger-cases.json +7 -0
- package/skills/sec-auth/trigger-cases.json +31 -0
- package/skills/sec-compliance/trigger-cases.json +31 -0
- package/skills/securities-chain/trigger-cases.json +31 -0
- package/skills/securities-research/trigger-cases.json +31 -0
- package/skills/security-audit/trigger-cases.json +31 -0
- package/skills/slides-html/SKILL.md +25 -10
- package/skills/slides-html/trigger-cases.json +11 -0
- package/skills/sql-analysis/SKILL.md +110 -0
- package/skills/sql-analysis/trigger-cases.json +34 -0
- package/skills/sql-tuning/trigger-cases.json +31 -0
- package/skills/statistical-testing/trigger-cases.json +31 -0
- package/skills/strategy-planning/trigger-cases.json +30 -0
- package/skills/supply-chain/trigger-cases.json +31 -0
- package/skills/tax-compliance/trigger-cases.json +30 -0
- package/skills/tech-doc/SKILL.md +262 -0
- package/skills/tech-doc/scripts/__pycache__/archive_battery.cpython-312.pyc +0 -0
- package/skills/tech-doc/scripts/__pycache__/archive_build.cpython-312.pyc +0 -0
- package/skills/tech-doc/scripts/__pycache__/archive_check.cpython-312.pyc +0 -0
- package/skills/tech-doc/scripts/__pycache__/archive_spec.cpython-312.pyc +0 -0
- package/skills/tech-doc/scripts/__pycache__/doc_templates.cpython-312.pyc +0 -0
- package/skills/tech-doc/scripts/archive_battery.py +860 -0
- package/skills/tech-doc/scripts/archive_build.py +599 -0
- package/skills/tech-doc/scripts/archive_check.py +1307 -0
- package/skills/tech-doc/scripts/archive_spec.py +499 -0
- package/skills/tech-doc/scripts/doc_templates.py +624 -0
- package/skills/tech-doc/trigger-cases.json +57 -0
- package/skills/tech-research/trigger-cases.json +31 -0
- package/skills/tender-bidding/trigger-cases.json +31 -0
- package/skills/translation-pro/trigger-cases.json +30 -0
- package/skills/treasury-mgmt/trigger-cases.json +31 -0
- package/skills/trim-cot-leakage/SKILL.md +58 -0
- package/skills/trim-cot-leakage/trigger-cases.json +23 -0
- package/skills/web-craft/SKILL.md +103 -0
- package/skills/web-craft/references/craft-checklist.md +75 -0
- package/skills/web-craft/references/design-direction.md +122 -0
- package/skills/web-craft/references/h5-mobile.md +100 -0
- package/skills/web-craft/references/motion.md +136 -0
- package/skills/web-craft/references/recipes.md +74 -0
- package/skills/web-craft/templates/wedding-invitation.html +1180 -0
- package/skills/web-craft/trigger-cases.json +14 -0
- package/skills/web-scraping/trigger-cases.json +34 -0
- package/skills/web-search/SKILL.md +11 -10
- package/skills/web-search/trigger-cases.json +31 -0
- package/skills/weekly-report/SKILL.md +134 -0
- package/skills/weekly-report/trigger-cases.json +11 -0
- package/skills/write-tests/trigger-cases.json +31 -0
- package/skills/xlsx-analysis/SKILL.md +143 -77
- package/skills/xlsx-analysis/scripts/__pycache__/data_profile.cpython-312.pyc +0 -0
- package/skills/xlsx-analysis/scripts/__pycache__/xlsx_build.cpython-312.pyc +0 -0
- package/skills/xlsx-analysis/scripts/__pycache__/xlsx_check.cpython-312.pyc +0 -0
- package/skills/xlsx-analysis/scripts/__pycache__/xlsx_layout.cpython-312.pyc +0 -0
- package/skills/xlsx-analysis/scripts/__pycache__/xlsx_toolkit.cpython-312.pyc +0 -0
- package/skills/xlsx-analysis/scripts/data_profile.py +391 -0
- package/skills/xlsx-analysis/scripts/xlsx_battery.py +389 -0
- package/skills/xlsx-analysis/scripts/xlsx_build.py +522 -0
- package/skills/xlsx-analysis/scripts/xlsx_check.py +924 -0
- package/skills/xlsx-analysis/scripts/xlsx_layout.py +235 -0
- package/skills/xlsx-analysis/scripts/xlsx_style.py +28 -66
- package/skills/xlsx-analysis/scripts/xlsx_toolkit.py +61 -5
- package/skills/xlsx-analysis/trigger-cases.json +59 -0
- package/squads/hc-defense.md +47 -0
- package/squads/hc-rdarchive.md +110 -0
- package/squads/hc-redteam.md +50 -0
- package/squads/hc-weekly.md +125 -0
- package/src/account.js +1 -1
- package/src/acp.js +1 -0
- package/src/advisor.js +1 -1
- package/src/agent.js +1 -1
- package/src/api.js +1 -1
- package/src/archaeology.js +1 -0
- package/src/ask-ui.js +1 -0
- package/src/assets-import.js +1 -1
- package/src/autofix.js +1 -1
- package/src/automation-tools.js +1 -1
- package/src/automation.js +1 -1
- package/src/autorun.js +1 -1
- package/src/banner.js +1 -1
- package/src/capability-probe.js +1 -0
- package/src/checkpoints.js +1 -1
- package/src/code-tools.js +1 -0
- package/src/codeindex.js +1 -1
- package/src/codemode.js +1 -0
- package/src/command-bridge.js +1 -0
- package/src/command-ui.js +1 -0
- package/src/commands.js +1 -1
- package/src/compaction.js +1 -1
- package/src/computer.js +1 -1
- package/src/config.js +1 -1
- package/src/consult.js +1 -1
- package/src/context-report.js +1 -1
- package/src/context-window.js +1 -0
- package/src/context.js +1 -1
- package/src/crew.js +1 -0
- package/src/crush.js +1 -0
- package/src/daemon.js +1 -1
- package/src/decisions.js +1 -1
- package/src/depaudit.js +1 -0
- package/src/device.js +1 -1
- package/src/diagram-draw.js +1 -0
- package/src/diagram-layouts.js +1 -0
- package/src/diagram-raster.js +1 -0
- package/src/diagram.js +1 -0
- package/src/dictation.js +1 -0
- package/src/diffview.js +1 -1
- package/src/doctor.js +1 -1
- package/src/docx-tools.js +1 -0
- package/src/errkind.js +1 -1
- package/src/evidence.js +1 -0
- package/src/executors.js +1 -1
- package/src/expert-catalog.js +1 -1
- package/src/experts-store.js +1 -1
- package/src/experts.js +1 -1
- package/src/external-agents.js +1 -0
- package/src/forks.js +1 -1
- package/src/fs-observe.js +1 -0
- package/src/gitflow.js +1 -1
- package/src/goalround.js +1 -0
- package/src/hooks.js +1 -1
- package/src/input.js +1 -1
- package/src/insights.js +1 -1
- package/src/jobs.js +1 -0
- package/src/kbsync.js +1 -1
- package/src/lsp.js +1 -0
- package/src/mcp-apps.js +1 -0
- package/src/mcp.js +1 -1
- package/src/memory.js +1 -1
- package/src/notify.js +1 -1
- package/src/permissions.js +1 -1
- package/src/plan-limits.js +1 -0
- package/src/policy.js +1 -0
- package/src/pptx-tools.js +1 -0
- package/src/presence.js +1 -1
- package/src/privatedir.js +1 -0
- package/src/pyruntime.js +1 -1
- package/src/radar.js +1 -0
- package/src/render.js +1 -1
- package/src/repl.js +1 -1
- package/src/report-tools.js +1 -0
- package/src/routing.js +1 -0
- package/src/sandbox-probe.js +1 -0
- package/src/sandbox-win-launcher.mjs +156 -0
- package/src/sandbox.js +1 -0
- package/src/scan.js +1 -1
- package/src/schedule.js +1 -1
- package/src/scopecreep.js +1 -0
- package/src/sdk.js +1 -0
- package/src/selection.js +1 -0
- package/src/session-events.js +1 -0
- package/src/session.js +1 -1
- package/src/sessionindex.js +1 -0
- package/src/sessionlog.js +1 -0
- package/src/skill-catalog.js +1 -0
- package/src/skill-lint.js +1 -0
- package/src/skill-optimize.js +1 -0
- package/src/skill-scan.js +1 -0
- package/src/skills.js +1 -1
- package/src/spill.js +1 -0
- package/src/squad.js +1 -1
- package/src/subagent.js +1 -1
- package/src/surface-state.js +1 -0
- package/src/tapd.js +1 -0
- package/src/terminal-select.js +1 -0
- package/src/terminal.js +1 -0
- package/src/test-runner.js +1 -0
- package/src/todo.js +1 -1
- package/src/toolpipe.js +1 -0
- package/src/tools.js +1 -1
- package/src/toon.js +1 -0
- package/src/transcript.js +1 -1
- package/src/tui/app.js +1 -1
- package/src/tui/command-menu.js +1 -0
- package/src/tui/progress.js +1 -0
- package/src/tui/scroll.js +1 -0
- package/src/tui/welcome.js +1 -0
- package/src/tui/workbench.js +1 -0
- package/src/ui-spec.js +1 -0
- package/src/uitree.js +1 -0
- package/src/uninstall.js +1 -1
- package/src/visual.js +1 -1
- package/src/voice-form.js +1 -0
- package/src/voice.js +1 -0
- package/src/watch.js +1 -1
- package/src/web-audit.js +1 -0
- package/src/web-cdp.js +1 -0
- package/src/web-inspect.js +1 -0
- package/src/websearch.js +1 -0
- package/src/weekly.js +1 -0
- package/src/workflow.js +1 -0
- package/src/worklog.js +1 -0
- package/src/xlsx-tools.js +1 -0
- package/ui/command-picker.js +79 -0
- package/skills/ab-testing/scripts/__pycache__/ab_test.cpython-312.pyc +0 -0
- package/skills/accounting-ops/scripts/__pycache__/acct_tools.cpython-312.pyc +0 -0
- package/skills/anomaly-detection/scripts/__pycache__/anomaly.cpython-312.pyc +0 -0
- package/skills/audit-assist/scripts/__pycache__/audit_sampling.cpython-312.pyc +0 -0
- package/skills/banking-credit/scripts/__pycache__/credit_metrics.cpython-312.pyc +0 -0
- package/skills/data-report-pro/scripts/__pycache__/bigdata.cpython-312.pyc +0 -0
- package/skills/data-wrangling/scripts/__pycache__/join_tools.cpython-312.pyc +0 -0
- package/skills/ecommerce-ops/scripts/__pycache__/gmv_decompose.cpython-312.pyc +0 -0
- package/skills/funnel-cohort/scripts/__pycache__/funnel.cpython-312.pyc +0 -0
- package/skills/management-accounting/scripts/__pycache__/costing.cpython-312.pyc +0 -0
- package/skills/manufacturing-quality/scripts/__pycache__/spc.cpython-312.pyc +0 -0
- package/skills/marketing-analytics/scripts/__pycache__/rfm.cpython-312.pyc +0 -0
- package/skills/optimization-solver/scripts/__pycache__/solver.cpython-312.pyc +0 -0
- package/skills/pivot-crosstab/scripts/__pycache__/pivot_tools.cpython-312.pyc +0 -0
- package/skills/portfolio-analysis/scripts/__pycache__/portfolio.cpython-312.pyc +0 -0
- package/skills/procurement-supply/scripts/__pycache__/supply.cpython-312.pyc +0 -0
- package/skills/production-planning/scripts/__pycache__/mrp_capacity.cpython-312.pyc +0 -0
- package/skills/project-management/scripts/__pycache__/cpm.cpython-312.pyc +0 -0
- package/skills/quant-analysis/scripts/__pycache__/quant.cpython-312.pyc +0 -0
- package/skills/real-estate-property/scripts/__pycache__/property_calc.cpython-312.pyc +0 -0
- package/skills/regression-forecast/scripts/__pycache__/regress.cpython-312.pyc +0 -0
- package/skills/securities-research/scripts/__pycache__/valuation.cpython-312.pyc +0 -0
- package/skills/statistical-testing/scripts/__pycache__/stat_tests.cpython-312.pyc +0 -0
- package/skills/treasury-mgmt/scripts/__pycache__/cashflow_forecast.cpython-312.pyc +0 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "tech-doc",
|
|
3
|
+
"purpose": "触发行为规格。CI 按词法跑:正样例须在描述词汇上明显压过近似负样例,且路由到自己。改 description 后必须重跑 skill-lint route。",
|
|
4
|
+
"intentionalOverlap": [
|
|
5
|
+
"docx-author",
|
|
6
|
+
"project-proposal",
|
|
7
|
+
"meeting-minutes",
|
|
8
|
+
"eng-docs"
|
|
9
|
+
],
|
|
10
|
+
"cases": [
|
|
11
|
+
{
|
|
12
|
+
"id": "pos-task",
|
|
13
|
+
"prompt": "帮我写一份研发任务书",
|
|
14
|
+
"shouldTrigger": true
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "pos-acceptance",
|
|
18
|
+
"prompt": "项目验收报告和验收申请表怎么写",
|
|
19
|
+
"shouldTrigger": true
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "pos-plan",
|
|
23
|
+
"prompt": "写个项目研发实施计划",
|
|
24
|
+
"shouldTrigger": true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "pos-summary",
|
|
28
|
+
"prompt": "帮我起草项目技术总结报告",
|
|
29
|
+
"shouldTrigger": true
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "pos-proposal",
|
|
33
|
+
"prompt": "立项申请书要准备哪些内容",
|
|
34
|
+
"shouldTrigger": true
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "pos-archive",
|
|
38
|
+
"prompt": "研发文档归档齐不齐,帮我做个档案体检",
|
|
39
|
+
"shouldTrigger": true
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "neg-ppt",
|
|
43
|
+
"prompt": "做一份 PPT 汇报材料",
|
|
44
|
+
"shouldTrigger": false
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "neg-contract",
|
|
48
|
+
"prompt": "帮我审一下这份采购合同的条款",
|
|
49
|
+
"shouldTrigger": false
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "neg-code",
|
|
53
|
+
"prompt": "帮我重构这个模块的代码",
|
|
54
|
+
"shouldTrigger": false
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "tech-research",
|
|
3
|
+
"cases": [
|
|
4
|
+
{
|
|
5
|
+
"id": "pos-1",
|
|
6
|
+
"prompt": "做个技术调研和综述",
|
|
7
|
+
"shouldTrigger": true
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"id": "pos-2",
|
|
11
|
+
"prompt": "技术选型对比一下方案",
|
|
12
|
+
"shouldTrigger": true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "pos-3",
|
|
16
|
+
"prompt": "POC 方案和技术报告怎么写",
|
|
17
|
+
"shouldTrigger": true
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "neg-1",
|
|
21
|
+
"prompt": "做一次新技术引入的评分卡与退出成本",
|
|
22
|
+
"shouldTrigger": false,
|
|
23
|
+
"lexical": false
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "neg-2",
|
|
27
|
+
"prompt": "写一份市场竞品分析",
|
|
28
|
+
"shouldTrigger": false
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "tender-bidding",
|
|
3
|
+
"cases": [
|
|
4
|
+
{
|
|
5
|
+
"id": "pos-1",
|
|
6
|
+
"prompt": "投标,招标文件怎么解读",
|
|
7
|
+
"shouldTrigger": true
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"id": "pos-2",
|
|
11
|
+
"prompt": "评分办法对标和资格审查",
|
|
12
|
+
"shouldTrigger": true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "pos-3",
|
|
16
|
+
"prompt": "标书编写和废标点自查",
|
|
17
|
+
"shouldTrigger": true
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "neg-1",
|
|
21
|
+
"prompt": "写一份项目申报书",
|
|
22
|
+
"shouldTrigger": false,
|
|
23
|
+
"lexical": false
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "neg-2",
|
|
27
|
+
"prompt": "做一次采购询比价",
|
|
28
|
+
"shouldTrigger": false
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "translation-pro",
|
|
3
|
+
"cases": [
|
|
4
|
+
{
|
|
5
|
+
"id": "pos-1",
|
|
6
|
+
"prompt": "帮我翻译这份文档,中译英",
|
|
7
|
+
"shouldTrigger": true
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"id": "pos-2",
|
|
11
|
+
"prompt": "做个双语对照版,术语表怎么管",
|
|
12
|
+
"shouldTrigger": true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "pos-3",
|
|
16
|
+
"prompt": "本地化审校流程怎么走",
|
|
17
|
+
"shouldTrigger": true
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "neg-1",
|
|
21
|
+
"prompt": "写一封英文商务邮件",
|
|
22
|
+
"shouldTrigger": false
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "neg-2",
|
|
26
|
+
"prompt": "做一次外贸单证审单",
|
|
27
|
+
"shouldTrigger": false
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "treasury-mgmt",
|
|
3
|
+
"cases": [
|
|
4
|
+
{
|
|
5
|
+
"id": "pos-1",
|
|
6
|
+
"prompt": "做 13 周滚动现金流预测",
|
|
7
|
+
"shouldTrigger": true
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"id": "pos-2",
|
|
11
|
+
"prompt": "资金缺口和头寸怎么管,银承授信怎么用",
|
|
12
|
+
"shouldTrigger": true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "pos-3",
|
|
16
|
+
"prompt": "结售汇和锁汇怎么做",
|
|
17
|
+
"shouldTrigger": true
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "neg-1",
|
|
21
|
+
"prompt": "做一次投融资的股权测算",
|
|
22
|
+
"shouldTrigger": false,
|
|
23
|
+
"lexical": false
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "neg-2",
|
|
27
|
+
"prompt": "写一份应收账龄分析",
|
|
28
|
+
"shouldTrigger": false
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: trim-cot-leakage
|
|
3
|
+
description: 清理注释与文档里的思维过程泄漏:残留的方案编号、设计稿章节号、阶段代号等死引用,「改造前/现在/以前是」这类历史包袱与工作日志口吻,对着评审者的辩解,以及「暂时够用」这类犹豫措辞。当用户说"注释里有历史包袱""这段读起来像工作日志""代码里还引着早就没了的方案编号和设计稿章节号""帮我清理遗留说明"时使用。处置不是一删了之:先把仍成立的事实改写成当下视角的陈述,再删掉叙事外壳。
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 清理思维链泄漏
|
|
8
|
+
|
|
9
|
+
思维链泄漏 = 一段文字的**视角是写作现场,而不是代码本身**:
|
|
10
|
+
它引用只有当时那次会话才看得到的东西、叙述改动过程而不是当前状态、或者在跟一个已经离开的评审者争论。
|
|
11
|
+
|
|
12
|
+
## 唯一判据
|
|
13
|
+
|
|
14
|
+
对每一处可疑文字问:
|
|
15
|
+
|
|
16
|
+
> **一个只能看到当前代码、拿不到任何会话记录/评审讨论/未提交草稿的人,
|
|
17
|
+
> 能不能解析其中每一个指代、验证其中每一条断言?**
|
|
18
|
+
|
|
19
|
+
不能 → 是泄漏。**但处置不是一删了之**:先把其中仍然成立的事实用「当下视角」重述,再把叙事外壳删掉。
|
|
20
|
+
只有完全不含事实的(编号、控制流复述)才整句删除。
|
|
21
|
+
|
|
22
|
+
## 八类
|
|
23
|
+
|
|
24
|
+
| # | 类型 | 例子 | 处置 |
|
|
25
|
+
|---|---|---|---|
|
|
26
|
+
| 1 | 死引用 | `(方案 3)` `见设计稿 §4.7` `P2-14 阶段` | 有已提交的落点就按名字与路径引用;没有就删掉引用、把事实留下 |
|
|
27
|
+
| 2 | 提交/评审视角 | 「下个 PR 会补」「上一个 commit 里」 | 写清当前机制或扩展点;待办转 `TODO` |
|
|
28
|
+
| 3 | 变更叙事 | 「以前是 X」「现在改成了 Y」「本次去掉了」 | 见下方**惠彩特例** |
|
|
29
|
+
| 4 | 评审编排 | 「评审时被否了」「评审确认过」「v5 版本的说明」 | 留结论与理由,删掉谁在什么时候说的 |
|
|
30
|
+
| 5 | 对评审者自辩 | 「这个转换是安全的,它只是……」 | 写清让它安全的那条不变式,或删 |
|
|
31
|
+
| 6 | 复述与推导 | 控制流叙述、测试走查、显然分支的证明 | 删,只留非显然契约 |
|
|
32
|
+
| 7 | 犹豫与占位 | 「暂时够用」「应该没问题」 | 升级成 `TODO`/`FIXME` 并写清真实边界 |
|
|
33
|
+
| 8 | 语言串味 | 中文文档里夹着未翻译的英文片段(反之亦然) | 翻译或删除 |
|
|
34
|
+
|
|
35
|
+
## 惠彩特例:第 3 类要分开判(**最容易误伤的一条**)
|
|
36
|
+
|
|
37
|
+
本仓大量注释长这样:
|
|
38
|
+
|
|
39
|
+
> 「改造前 `/sandbox` 只是工具名黑名单——那挡不住已经被批准的命令。」
|
|
40
|
+
|
|
41
|
+
按字面它是变更叙事,但它真正在做的是**用反例论证当前设计为什么非如此不可**,
|
|
42
|
+
而反例往往是最省字的论证方式。一刀切删掉,等于把设计理由一起删了。
|
|
43
|
+
|
|
44
|
+
划线规则:
|
|
45
|
+
|
|
46
|
+
- **删**:只陈述历史、不解释当下。(「这里以前叫 xxx」「v1 的时候用的是轮询」)
|
|
47
|
+
- **留**:以反例形式论证当前不变式,且反例本身就是理由的一部分。
|
|
48
|
+
- **改**:把过去时改成**现在时反事实**——
|
|
49
|
+
「改造前 X,那挡不住 Y」→「若只做 X,就挡不住 Y」。
|
|
50
|
+
意思一字不少,视角从「那次改动」挪回「这段代码」。
|
|
51
|
+
|
|
52
|
+
拿不准时按「改」处理:反事实句式两种情况都成立。
|
|
53
|
+
|
|
54
|
+
## 用法
|
|
55
|
+
|
|
56
|
+
1. 要明确范围;审查任务只报不改。
|
|
57
|
+
2. 逐处给出:类型编号 + 处置(删 / 重述 / 改反事实)+ 重述后的文字。
|
|
58
|
+
3. 与 [prose-standard](../prose-standard/SKILL.md) 配合:那条判断该不该写,这条判断写法对不对。
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "trim-cot-leakage",
|
|
3
|
+
"purpose": "触发行为规格。负样例分两类:不同词汇的近邻走词法层(CI 跑),同词汇不同意图的近邻标 lexical:false 归行为层。",
|
|
4
|
+
"cases": [
|
|
5
|
+
{ "id": "history-baggage", "prompt": "注释里有一堆历史包袱,「改造前」「以前是」满天飞,清一下", "shouldTrigger": true },
|
|
6
|
+
{ "id": "worklog-tone", "prompt": "这段说明读起来像工作日志,不像在讲代码本身", "shouldTrigger": true },
|
|
7
|
+
{ "id": "dead-refs", "prompt": "代码里还引着方案编号和设计稿章节号,那些东西早没了", "shouldTrigger": true },
|
|
8
|
+
{ "id": "reviewer-defense", "prompt": "这几条注释是在跟评审者辩解,帮我改成陈述不变式", "shouldTrigger": true },
|
|
9
|
+
{
|
|
10
|
+
"id": "near-miss-changelog",
|
|
11
|
+
"prompt": "帮我生成这次发布的变更日志",
|
|
12
|
+
"shouldTrigger": false,
|
|
13
|
+
"note": "词汇不重合(变更日志 vs 注释/泄漏/包袱),词法层能分开;而且变更叙事在变更日志里本来就是正确的。"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": "near-miss-git-history",
|
|
17
|
+
"prompt": "查一下这段代码的历史,看它为什么变成现在这样",
|
|
18
|
+
"shouldTrigger": false,
|
|
19
|
+
"lexical": false,
|
|
20
|
+
"note": "与「清理历史包袱」共用「历史」——同词汇不同意图(考古 vs 清理),词法层分不开,归行为层(应落到 code-archaeology)。"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: web-craft
|
|
3
|
+
description: 做网页、H5、落地页、官网、活动页/报名页、邀请函请柬(婚礼/生日/满月/年会/开业)、个人主页、作品集、小游戏时载入,尤其要求好看、有设计感、能直接发微信给人用时:先定设计方向与设计令牌,再写零占位、手机优先、兼容微信的完整页面,最后用 web_inspect 在真实浏览器跑手机与桌面视口并走查关键交互;婚礼请柬有现成高质量模板。
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 作品级网页 / H5
|
|
8
|
+
|
|
9
|
+
一句话:**先定调再动手,写完真跑一遍,必修清零再交付。**
|
|
10
|
+
访客对一个页面的判断,90% 来自打开后的前三秒(好不好看)和第一次点击(能不能用)。
|
|
11
|
+
这两件事都不能靠「代码读起来没问题」来保证。
|
|
12
|
+
|
|
13
|
+
## 流程(按序,不跳步)
|
|
14
|
+
|
|
15
|
+
1. **补全需求**:查 `references/recipes.md` 找到页面类型的配方,列出访客一定会用到的模块。
|
|
16
|
+
日期、地点、电话这类事实:对话里有就用,没有就先问;实在要先出稿,用一看就是示例的值,并在交付时列成「待确认」。
|
|
17
|
+
**不编造私人经历**(恋爱故事、成员履历)——用诗词、祝福语或留白代替。
|
|
18
|
+
2. **定调**:写一份五行设计简报放进 todo(写码前完成,别边写边想):
|
|
19
|
+
- 方向:一句话风格,从 `references/design-direction.md` 选一个或改一个(如「新中式·朱砂宣纸」);
|
|
20
|
+
- 令牌:6–8 个颜色变量 + 字体栈 + 字号阶梯 + 圆角阴影 + 动效时长与缓动;
|
|
21
|
+
- 记忆点:一个让人记住的设计动作(开门封面、印章落下、签名描边、视差花枝……);
|
|
22
|
+
- 节奏:从首屏到尾屏,每屏一个视觉焦点;
|
|
23
|
+
- 禁忌:这一页刻意不做什么(见下方「反模板味」)。
|
|
24
|
+
3. **工程**:单页 H5 做成一个自包含的 `index.html`(内联 CSS/JS、零外链,发文件、传服务器都能直接用);
|
|
25
|
+
多页或复杂交互再上 Vite。内容集中到一个配置对象,渲染一律 `textContent`(不拼 innerHTML,防 XSS)。
|
|
26
|
+
4. **实现**:先搭骨架与令牌,再逐屏精修。每个交互写全状态:默认 / 按下 / 加载中 / 成功 / 失败 / 空。
|
|
27
|
+
5. **体检**:`web_inspect(path)` → 必修清零;再用 actions 把关键流程走一遍(见文末);建议项逐条评估。
|
|
28
|
+
6. **打磨**:对照 `references/craft-checklist.md` 过一遍。这一步决定「能用」和「惊艳」之间的差距。
|
|
29
|
+
7. **交付说明**:怎么打开与部署、改哪里换内容、验证了什么(体检结论 + 截图路径)、还有哪些待用户确认。
|
|
30
|
+
|
|
31
|
+
## 现成模板(邀请函类先读这里)
|
|
32
|
+
|
|
33
|
+
`templates/wedding-invitation.html`:婚礼请柬的完整实现,已过 web_inspect 零必修零建议、20 余步交互走查全通过。
|
|
34
|
+
开门封面(兼作音乐的用户手势)、内置八音盒《卡农》(Web Audio 合成,无需音乐文件)、倒计时(过期自动变「已相守 N 天」)、
|
|
35
|
+
农历与星期自动推算、`?to=张三` 个性化称呼、流程、地点导航(按名称检索,无需坐标与 key)、回执(校验/本机保存/可接接口/可修改)、
|
|
36
|
+
加入日历(.ics,微信内自动改为复制)、分享(系统分享 / 微信右上角引导 / 复制链接)、花瓣、四套主题、减弱动效、桌面端居中卡片。
|
|
37
|
+
|
|
38
|
+
**用法**:先用 run_bash 把模板复制成项目文件(资源基址见上方 skill_resources),**不要**把模板全文读进来再 write_file 重写——
|
|
39
|
+
66KB 会被单次输出上限截断:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
cp "<资源基址>/templates/wedding-invitation.html" index.html # Windows 用 copy,或 run_python 的 shutil.copy
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
然后 read_file 看文件开头的 `window.INVITE` 配置(约 55 行),用 edit_file 改成用户的信息,**最后把 `sample` 改为 false**
|
|
46
|
+
(为 true 时页面顶部挂一条 TODO 提醒、web_inspect 报必修——专防复制了模板却忘了换内容);
|
|
47
|
+
同步改 `<title>` 与 description;按设计简报换 `theme` 或改 `:root` 令牌;`tagline` 按算出来的日子写(碰上节日就点出来)。
|
|
48
|
+
生日、满月、乔迁、开业、年会邀请函同样从它改起:换文案、删掉不需要的区块,比从零写可靠得多。
|
|
49
|
+
|
|
50
|
+
## 视觉硬规则(违反一条就显廉价)
|
|
51
|
+
|
|
52
|
+
- **色**:一个主色 + 一个点缀色 + 带主色倾向的中性色阶,全部走 CSS 变量。不用纯黑 #000、不用冷灰配暖底。
|
|
53
|
+
- **字**:标题用有性格的衬线/楷体,正文用无衬线;中文正文 15–17px、行高 1.75–1.9;字号阶梯用 `clamp()`。
|
|
54
|
+
国内不用 Google Fonts,字体栈见 `references/h5-mobile.md`。
|
|
55
|
+
- **空**:手机区块上下留白 ≥ 72px,元素间距用 4/8 的倍数。宁空勿挤。
|
|
56
|
+
- **层次**:每屏只有一个视觉焦点;标题、正文、注释在字号、字重、颜色三个维度同时拉开。
|
|
57
|
+
- **饰**:装饰用内联 SVG(枝叶、纹样、角花、印章)、CSS 渐变与纹理、细线。**禁止用 emoji 当图标**,禁止外链网图。
|
|
58
|
+
- **动**:入场 = 渐显 + 位移 12–24px,500–900ms,`cubic-bezier(.2,.7,.2,1)`,同屏依次延迟 80–120ms;
|
|
59
|
+
只动 transform / opacity;必须写 `prefers-reduced-motion` 降级。配方见 `references/motion.md`。
|
|
60
|
+
- **反模板味**:不用紫蓝渐变 + 白卡片的通用 SaaS 皮;不要每个区块都是「居中标题 + 三张卡片」;
|
|
61
|
+
不写「欢迎来到」「尊敬的用户」式空话;不给访客看空占位框。
|
|
62
|
+
|
|
63
|
+
## 手机与微信硬规则
|
|
64
|
+
|
|
65
|
+
- `<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">`;
|
|
66
|
+
整屏区块写 `min-height:100vh; min-height:100dvh;`;贴底元素加 `env(safe-area-inset-bottom)`。
|
|
67
|
+
- 点击区 ≥ 44px;输入框字号 ≥ 16px(否则 iOS 聚焦时整页放大);任何视口都不许横向溢出。
|
|
68
|
+
- **音乐**:浏览器禁止无手势自动播放——把「点击开启」当作播放时机;`play()` 必须 `.catch()`;
|
|
69
|
+
微信里再挂一个 `WeixinJSBridgeReady` 兜底;页面切到后台要暂停。
|
|
70
|
+
- **分享**:微信卡片要公众号 JS-SDK 签名,纯前端做不到——写好 `<title>` 与 description,另给「点右上角 ··· 发送给朋友」的引导层。
|
|
71
|
+
- **下载**:微信内置浏览器不能下载文件(.ics 等),要检测 `MicroMessenger` 并改成复制文本或提示在浏览器打开。
|
|
72
|
+
|
|
73
|
+
## 内容硬规则
|
|
74
|
+
|
|
75
|
+
- 星期、农历、倒计时**用代码算**,绝不心算(农历写法见 `references/h5-mobile.md`);时间一律带时区 `+08:00`。
|
|
76
|
+
- 地图导航默认用「按名称检索」链接:不需要 key,也不会因为坐标写错把人导到别处。
|
|
77
|
+
- 页面上不出现给开发者看的话(如 `把照片放到 assets/img`、`此处替换`)——那属于交付说明。
|
|
78
|
+
- 没有素材就不要引用不存在的文件:用 CSS/SVG 画,或者数据为空时整块不渲染。
|
|
79
|
+
|
|
80
|
+
## web_inspect 用法
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
web_inspect(path="index.html") # 手机 390 / 小屏 360 / 桌面 1280 三个视口
|
|
84
|
+
web_inspect(path="index.html", actions=[ # 关键流程走查(每步都查在不在、看不看得见、有没有被挡住)
|
|
85
|
+
{"click":"text=轻触开启"}, {"wait":"#music"},
|
|
86
|
+
{"click":"#rsvpSubmit"}, {"expect_text":"请留下您的称呼"}, # 先验证空提交会被拦下
|
|
87
|
+
{"fill":"#fName","value":"张三"}, {"click":"text=欣然赴约"},
|
|
88
|
+
{"click":"#rsvpSubmit"}, {"expect_text":"期待与您相见"},
|
|
89
|
+
{"expect_js":"Object.keys(localStorage).length > 0"}])
|
|
90
|
+
web_inspect(url="http://localhost:5173/") # Vite 等工程:先后台起 dev server 再查
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
必修项清零之前不说「完成」。建议项能改就改;是设计取舍的,在交付说明里讲清楚。
|
|
94
|
+
工具查不了审美——截图路径要告诉用户,并按 `references/craft-checklist.md` 自己过一遍。
|
|
95
|
+
没有 web_inspect(本机没装 Chrome/Edge)时:`node --check` 过一遍脚本、逐条对照清单自查,并在交付说明里**如实写明未经浏览器验证**。
|
|
96
|
+
|
|
97
|
+
## 参考资料(按需 read_skill_file,不要一次全读)
|
|
98
|
+
|
|
99
|
+
- `references/design-direction.md` — 十种风格方向,各带现成令牌、字体、装饰与禁忌
|
|
100
|
+
- `references/craft-checklist.md` — 交付前的打磨清单与「AI 模板味」黑名单
|
|
101
|
+
- `references/h5-mobile.md` — 手机与微信兼容、中文字体栈、日期与农历、性能预算
|
|
102
|
+
- `references/motion.md` — 动效配方:入场编排、开门封面、印章、花瓣、整屏翻页、数字滚动
|
|
103
|
+
- `references/recipes.md` — 页面类型配方:邀请函、活动报名、产品落地页、作品集、门店、互动小游戏、工具页
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# 交付前打磨清单
|
|
2
|
+
|
|
3
|
+
web_inspect 管「算得出来的事实」(报错、缺文件、溢出、被切、对比度、点不到)。
|
|
4
|
+
这份清单管机器判不了的——它们决定页面是「能用」还是「让人想转发」。逐项过,不要默念「应该没问题」。
|
|
5
|
+
|
|
6
|
+
## 首屏三秒
|
|
7
|
+
- [ ] 不滚动就知道:这是什么、给谁的、什么时间地点/核心卖点
|
|
8
|
+
- [ ] 只有一个视觉焦点(名字 / 标题 / 主视觉),其余元素明显让位
|
|
9
|
+
- [ ] 有一个记忆点动作(封面开启、印章、描边、视差),且只有一个
|
|
10
|
+
- [ ] 首屏没有空洞:内容垂直居中偏上,底部有「向下」引导
|
|
11
|
+
|
|
12
|
+
## 版式
|
|
13
|
+
- [ ] 所有文字左右留白一致(手机 20–28px),没有贴边的
|
|
14
|
+
- [ ] 区块之间的留白一致且足够(手机 ≥72px),区块内元素间距用同一套 4/8 倍数
|
|
15
|
+
- [ ] 对齐:同一屏里的元素要么居中、要么左对齐,不混用
|
|
16
|
+
- [ ] 标题行不断在奇怪的位置(两三个字的尾巴单独一行 → 调字距或用 `text-wrap: balance`)
|
|
17
|
+
- [ ] 长名字、长地址、四位数天数都试过,不溢出不换行错乱
|
|
18
|
+
|
|
19
|
+
## 字体
|
|
20
|
+
- [ ] 字号阶梯不超过 5 级;正文 15–17px,注释 ≥12px
|
|
21
|
+
- [ ] 中文不用斜体(系统会伪斜体,很难看);英文小标签才用大字距
|
|
22
|
+
- [ ] 数字用等宽(`font-variant-numeric: tabular-nums`),倒计时跳动不抖
|
|
23
|
+
- [ ] 标点:中文全角、成对引号用「」或“”,不混英文半角逗号
|
|
24
|
+
|
|
25
|
+
## 色彩与质感
|
|
26
|
+
- [ ] 全页颜色都来自令牌,没有散落的十六进制色值
|
|
27
|
+
- [ ] 大面积底色有一点质感(极淡噪点/纸纹/渐变),不是死白或死灰
|
|
28
|
+
- [ ] 阴影用带主色倾向的半透明色,不用 `rgba(0,0,0,.5)` 这种灰黑
|
|
29
|
+
- [ ] 深浅对比:按钮、输入框、卡片边界在强光下的手机上看得清
|
|
30
|
+
|
|
31
|
+
## 交互状态(每个可点的东西都要有)
|
|
32
|
+
- [ ] 按下态(`:active` 缩放 .97 或变色)、键盘焦点态(`:focus-visible`)
|
|
33
|
+
- [ ] 提交类:加载中(按钮禁用 + 文案变化)、成功(明确的结果页/卡片)、失败(原因 + 怎么办,已填内容不丢)
|
|
34
|
+
- [ ] 空状态:没有数据时显示什么(或整块不出现),而不是空框
|
|
35
|
+
- [ ] 重复进入:已提交过的表单再打开时,显示已提交状态并允许修改
|
|
36
|
+
- [ ] 外链跳转(地图、电话)有明确文字说明会发生什么
|
|
37
|
+
|
|
38
|
+
## 文案
|
|
39
|
+
- [ ] 语气符合场合(请柬要典雅得体、活动页要有号召力、工具页要简洁准确)
|
|
40
|
+
- [ ] 没有「欢迎来到」「尊敬的用户」「一站式解决方案」这类空话
|
|
41
|
+
- [ ] 没有占位符、Lorem、「示例文字」、给开发者看的说明
|
|
42
|
+
- [ ] 事实信息(日期/星期/农历/地址/电话)全部核对过,拿不准的列进交付说明的「待确认」
|
|
43
|
+
|
|
44
|
+
## 动效
|
|
45
|
+
- [ ] 入场有编排(同屏依次出现),不是所有东西同时淡入
|
|
46
|
+
- [ ] 没有「一直在动」的干扰(循环动画只给音乐按钮、提示箭头这种小元素)
|
|
47
|
+
- [ ] `prefers-reduced-motion` 下所有动画关闭、内容直接可见
|
|
48
|
+
- [ ] 切到后台时停掉画布动画与音乐
|
|
49
|
+
|
|
50
|
+
## 手机
|
|
51
|
+
- [ ] 360px 宽也不挤、不溢出(web_inspect 默认会跑 360)
|
|
52
|
+
- [ ] 按钮 ≥44px、输入框字号 ≥16px、贴底元素避让安全区
|
|
53
|
+
- [ ] 横屏打开不崩(至少内容可读)
|
|
54
|
+
- [ ] 在微信里:音乐需要一次点击才响、下载改为复制、分享有引导
|
|
55
|
+
|
|
56
|
+
## 交付说明
|
|
57
|
+
- [ ] 怎么打开 / 怎么部署(国内分享建议已备案域名的静态托管)
|
|
58
|
+
- [ ] 怎么改内容(改哪个配置对象的哪几项)
|
|
59
|
+
- [ ] 验证了什么(web_inspect 结论、走过哪些交互)、截图在哪
|
|
60
|
+
- [ ] 待确认清单(流程时间、地址、电话等)
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 「AI 模板味」黑名单(出现即返工)
|
|
65
|
+
|
|
66
|
+
1. 紫蓝/粉紫大渐变背景 + 白色圆角卡片
|
|
67
|
+
2. 每个区块都是「居中大标题 + 一行灰色副标题 + 三张图标卡片」
|
|
68
|
+
3. 用 emoji 当图标(🎉💍📍⏰)
|
|
69
|
+
4. 满屏玻璃拟态、满屏发光描边
|
|
70
|
+
5. Inter / Roboto / Arial 做中文页面的标题字体
|
|
71
|
+
6. 所有元素同一个圆角、同一个阴影、同一个间距,没有层次
|
|
72
|
+
7. 按钮文字「了解更多」「立即体验」出现三次以上
|
|
73
|
+
8. 空洞口号:「开启美好未来」「匠心打造」「极致体验」
|
|
74
|
+
9. 虚构的数据与评价(「10000+ 用户的选择」「★★★★★ 张女士」)
|
|
75
|
+
10. 页脚一长串假链接(关于我们 / 隐私政策 / 联系我们,全部 href="#")
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# 十种风格方向(选一个,或在它上面改)
|
|
2
|
+
|
|
3
|
+
每个方向都给了能直接粘进 `:root` 的令牌。**文字色在各自底色上的对比度都已算过**:
|
|
4
|
+
正文色 ≥ 7:1、次要文字 ≥ 4.5:1、强调色做小字 ≥ 4.5:1(`--accent` 当底色时配 `--on-accent`)。
|
|
5
|
+
改色之后用 web_inspect 复检——对比度不是凭感觉调的。
|
|
6
|
+
|
|
7
|
+
选方向的判据只有一条:**这一页是给谁、在什么场合看的**。婚礼请柬选暗黑科技、发布会选童趣糖果,都是错位。
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. 新中式 · 朱砂宣纸
|
|
12
|
+
适用:中式婚礼、寿宴、春节活动、国潮品牌、茶与文化活动。
|
|
13
|
+
```css
|
|
14
|
+
--paper:#F7F1E6; --paper-2:#EFE5D3; --card:#FBF7EF;
|
|
15
|
+
--ink:#2B2420; --ink-2:#554840; --ink-3:#6F6053;
|
|
16
|
+
--accent:#B3302A; --accent-deep:#8C1F18; --on-accent:#FBEFD9;
|
|
17
|
+
--gold:#9A7438; --gold-text:#7D5E2B; --gold-soft:#D8BF8C;
|
|
18
|
+
```
|
|
19
|
+
字体:标题楷体/宋体(`--font-display` 见 h5-mobile.md),数字用 Didot/Bodoni 类高对比衬线。
|
|
20
|
+
装饰:回纹、祥云、梅枝、印章、双线边框、角花。记忆点:开门封面、印章落下。
|
|
21
|
+
禁忌:大面积纯红(只做封面/点缀)、金色小字(对比度不够,用 `--gold-text`)、繁复的描金渐变。
|
|
22
|
+
|
|
23
|
+
## 2. 法式香槟
|
|
24
|
+
适用:西式婚礼、订婚、珠宝、下午茶、花艺。
|
|
25
|
+
```css
|
|
26
|
+
--paper:#FBF7F2; --paper-2:#F3EBE1; --card:#FFFDFA;
|
|
27
|
+
--ink:#2E2A28; --ink-2:#57504B; --ink-3:#6E6560;
|
|
28
|
+
--accent:#9A5A60; --accent-deep:#7E4349; --on-accent:#FFF8F2;
|
|
29
|
+
--gold:#8F7348; --gold-text:#77603B; --gold-soft:#D9C6A3;
|
|
30
|
+
```
|
|
31
|
+
字体:英文标题 Didot/Bodoni 斜体,中文宋体;正文细一号。
|
|
32
|
+
装饰:细线花环、拱门框、蜡封、手写体签名(SVG 描边动画)。记忆点:蜡封被「揭开」。
|
|
33
|
+
|
|
34
|
+
## 3. 森系 · 鼠尾草
|
|
35
|
+
适用:户外草坪婚礼、民宿、有机/自然品牌、花艺工作室。
|
|
36
|
+
```css
|
|
37
|
+
--paper:#F5F4EE; --paper-2:#E9EBE0; --card:#FBFBF7;
|
|
38
|
+
--ink:#232923; --ink-2:#4A5248; --ink-3:#606A5E;
|
|
39
|
+
--accent:#5E7461; --accent-deep:#3F5243; --on-accent:#F6F5EE;
|
|
40
|
+
--gold:#8A7A4E; --gold-text:#6E6139; --gold-soft:#CFC6A2;
|
|
41
|
+
```
|
|
42
|
+
装饰:叶片剪影、手绘线稿、不规则圆角卡片、纸张撕边。记忆点:藤蔓随滚动生长(SVG 描边)。
|
|
43
|
+
|
|
44
|
+
## 4. 水墨极简
|
|
45
|
+
适用:艺术展、高端品牌、茶道、书法与文化活动、极简个人主页。
|
|
46
|
+
```css
|
|
47
|
+
--paper:#F6F4EF; --paper-2:#ECE9E2; --card:#FBFAF7;
|
|
48
|
+
--ink:#1F1E1C; --ink-2:#46443F; --ink-3:#5F5C56;
|
|
49
|
+
--accent:#A3312B; --accent-deep:#7D211C; --on-accent:#FAF6EE; /* 朱印:全页只出现两三次 */
|
|
50
|
+
```
|
|
51
|
+
版式:大留白、竖排标题(`writing-mode: vertical-rl`)、不对称构图、极细分隔线。
|
|
52
|
+
记忆点:墨迹晕开(径向渐变 + 缩放入场)。禁忌:任何圆角大卡片、阴影、渐变按钮。
|
|
53
|
+
|
|
54
|
+
## 5. 暗夜鎏金
|
|
55
|
+
适用:晚宴、颁奖礼、年会、会员之夜、奢华品牌。
|
|
56
|
+
```css
|
|
57
|
+
--paper:#14110D; --paper-2:#1E1A15; --card:#1E1A15;
|
|
58
|
+
--ink:#F3EAD7; --ink-2:#C9BBA0; --ink-3:#A89A80;
|
|
59
|
+
--accent:#D4B06A; --accent-deep:#B8924A; --on-accent:#1A150E;
|
|
60
|
+
```
|
|
61
|
+
装饰:金色细线网格、光斑(径向渐变 + 模糊)、星点、Art Deco 扇形纹。
|
|
62
|
+
记忆点:标题金属光泽扫过(`background-clip:text` + 移动渐变,要有纯色回退)。
|
|
63
|
+
禁忌:金色大面积平涂(像劣质奖状)、纯黑 #000 底(发闷,用带暖意的深棕黑)。
|
|
64
|
+
|
|
65
|
+
## 6. 清透科技
|
|
66
|
+
适用:产品发布会、SaaS、开发者工具、AI 产品。
|
|
67
|
+
```css
|
|
68
|
+
--paper:#0B1020; --paper-2:#121A33; --card:#121A33;
|
|
69
|
+
--ink:#E8ECF7; --ink-2:#AEB7CE; --ink-3:#8A93AD;
|
|
70
|
+
--accent:#6B97FF; --accent-2:#22D3EE; --on-accent:#0B1020;
|
|
71
|
+
```
|
|
72
|
+
装饰:细网格线、发光描边卡片、代码/终端窗口样式、数字滚动。
|
|
73
|
+
禁忌:**紫蓝大渐变 + 白色圆角卡片 + 三列特性图标**(最典型的 AI 模板味);满屏玻璃拟态。
|
|
74
|
+
|
|
75
|
+
## 7. 暖阳生活
|
|
76
|
+
适用:餐厅门店、亲子活动、社区活动、生日会、烘焙咖啡。
|
|
77
|
+
```css
|
|
78
|
+
--paper:#FFF8EE; --paper-2:#FCEBD5; --card:#FFFFFF;
|
|
79
|
+
--ink:#3A2A1E; --ink-2:#6B5646; --ink-3:#7E6A5A;
|
|
80
|
+
--accent:#C8431F; --accent-2:#F3B33D; --green:#2F7A5B; --on-accent:#FFF8EE;
|
|
81
|
+
```
|
|
82
|
+
装饰:手绘感插画(SVG)、贴纸式标签、波浪分隔、大圆角。记忆点:营业状态实时显示(按当前时间算「营业中/已打烊」)。
|
|
83
|
+
|
|
84
|
+
## 8. 杂志编辑
|
|
85
|
+
适用:个人主页、作品集、品牌故事、长文专题。
|
|
86
|
+
```css
|
|
87
|
+
--paper:#F4F1EA; --paper-2:#EAE5DA; --card:#FBFAF6;
|
|
88
|
+
--ink:#16140F; --ink-2:#4A463E; --ink-3:#6A655B;
|
|
89
|
+
--accent:#C23A2A; --on-accent:#FBFAF6;
|
|
90
|
+
```
|
|
91
|
+
版式:12 栏网格、超大衬线标题(clamp 到 9–12vw)、编号(01/02/03)、图文错位、细线分栏。
|
|
92
|
+
记忆点:标题逐字/逐行揭开(`clip-path` 或 overflow 遮罩 + translateY)。
|
|
93
|
+
|
|
94
|
+
## 9. 童趣糖果
|
|
95
|
+
适用:儿童生日、满月百日、亲子活动、游乐主题。
|
|
96
|
+
```css
|
|
97
|
+
--paper:#FFF6F2; --paper-2:#FFE9E1; --card:#FFFFFF;
|
|
98
|
+
--ink:#3B2F48; --ink-2:#5E5270; --ink-3:#716684;
|
|
99
|
+
--accent:#B8364B; --accent-2:#6EC6CA; --accent-3:#FFD166; --on-accent:#FFFFFF;
|
|
100
|
+
```
|
|
101
|
+
装饰:气球/彩旗/波点(SVG)、圆胖字形、弹性动效(`cubic-bezier(.34,1.56,.64,1)`)。
|
|
102
|
+
禁忌:荧光色大面积平涂、到处都在动(动效集中在首屏与按钮反馈)。
|
|
103
|
+
|
|
104
|
+
## 10. 复古胶片
|
|
105
|
+
适用:纪念日、旅行回忆、周年、老照片故事。
|
|
106
|
+
```css
|
|
107
|
+
--paper:#EFE6D8; --paper-2:#E4D8C4; --card:#F7F1E7;
|
|
108
|
+
--ink:#2F2A24; --ink-2:#574F45; --ink-3:#6B6256;
|
|
109
|
+
--accent:#A64B28; --teal:#3F6E6A; --on-accent:#F7F1E7;
|
|
110
|
+
```
|
|
111
|
+
装饰:胶片颗粒(SVG feTurbulence 噪点)、拍立得相框、日期戳(等宽数字 + 橙色)、轻微倾斜的照片。
|
|
112
|
+
记忆点:照片像冲洗一样由白变清(`filter: brightness(2) → 1` + 渐显)。
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 自定义方向的做法
|
|
117
|
+
|
|
118
|
+
1. 先定「场合 + 情绪」两个词(如「户外婚礼 + 轻松」);
|
|
119
|
+
2. 主色从场合里找(婚礼的喜红、海边的青、秋天的焦糖),不从色轮上随手挑;
|
|
120
|
+
3. 中性色全部往主色方向偏一点(暖主色配暖灰);
|
|
121
|
+
4. 点缀色只用在一两个地方(关键按钮、一个装饰),用多了就不是点缀;
|
|
122
|
+
5. 写完令牌先做一屏样稿跑 web_inspect,对比度过了再铺开。
|