Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,16 @@ inline guidance and available tools.

## Descriptions and visibility in the host app

Document design uses the host engine's exported design contract. Purpose `profile`
and brand `theme` are independent; defaults are `standard` and `corporate`.
Page documents use `compact` by default, while decks use `report`. User templates
and existing styles take priority. File, HTML and native Google authoring skills
carry their own generated `references/design-system.json` because runtime references
must stay inside the owning skill bundle. Regenerate these files with the host
engine's `pnpm export:document-design <output paths...>` after its contract changes.
Do not hand-edit the generated catalogs or assume a deployed tool supports new fields
without checking its schema. PDF embeds NanumGothic; editable readers need it installed.

| Component | Visible before selection | Loaded content |
|---|---|---|
| Skill | Name and frontmatter description | Body on skill load; references on demand |
Expand Down
76 changes: 76 additions & 0 deletions evals/document-design.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
{
"cases": [
{
"id": "compact-file",
"prompt": "이 회의 메모를 제목을 포함한 짧은 DOCX 회의록으로 만들어 줘. 표지와 목차는 필요 없어.",
"context": "Notes are supplied. File offers profile, theme, colors and layout. No template or brand is supplied.",
"expected_skill": "document-authoring",
"required_behaviors": ["Use standard purpose and corporate theme", "Use compact layout and preserve the title and notes"],
"forbidden_behaviors": ["Add cover or contents pages", "Invent decisions or recipients"]
},
{
"id": "purpose-preserves-brand",
"prompt": "같은 회사의 기술 명세와 임원 보고서를 만들어 줘. 브랜드색은 둘 다 유지해.",
"context": "Content and an explicit corporate theme are supplied. File supports independent profile and theme.",
"expected_skill": "document-authoring",
"required_behaviors": ["Select technical and executive purposes independently of the same theme", "Keep body/font/color roles consistent across the outputs"],
"forbidden_behaviors": ["Change brand palette merely because purpose changes"]
},
{
"id": "native-template",
"prompt": "지정한 Google Docs 양식을 복사해서 이 제안서를 작성해 줘. 원래 표와 스타일을 유지해.",
"context": "An exact template ID, content, native copy/read/update tools and account access are supplied. The template has multiple tabs and named styles.",
"expected_skill": "document-authoring",
"required_behaviors": ["Copy the native file and inspect the returned ID", "Preserve tabs, tables and named-style relationships", "Constrain edits and read back their content and style"],
"forbidden_behaviors": ["Overwrite the source template", "Replace it with a DOCX artifact or the default corporate style", "Claim rendering was checked from text-only reads"]
},
{
"id": "unsupported-native-create",
"prompt": "이 원고를 새 Google Slides 발표 자료로 만들어 줘.",
"context": "Only presentation read and update are offered. There is no destination ID or create/copy capability.",
"expected_skill": "document-authoring",
"required_behaviors": ["Report the missing destination/create capability and provide usable presentation content"],
"forbidden_behaviors": ["Invent a presentation ID", "Claim a local PPTX is a newly created Google presentation"]
},
{
"id": "workbook-brand",
"prompt": "같은 브랜드의 XLSX 집계표를 만들고 수식도 넣어 줘.",
"context": "Rows and formulas are supplied. File offers theme/colors for XLSX and rejects profile/layout.",
"expected_skill": "spreadsheet-authoring",
"required_behaviors": ["Use the supplied theme with explicit formula objects", "Inspect source/output values and disclose that formulas were not recalculated"],
"forbidden_behaviors": ["Send prose profile/page layout to XLSX", "Invent formula cached values or claim calculation"]
},
{
"id": "native-design-roles",
"prompt": "이 원고로 짧은 Google Docs 문서를 만들어 줘. 양식은 없고 다른 회사 문서와 디자인을 맞춰 줘.",
"context": "Content, a shared corporate theme, native creation/read/style-update tools and the bundled design catalog are supplied. No template is supplied.",
"expected_skill": "document-authoring",
"required_behaviors": ["Use type.page.body and type.page.headings for point sizes", "Use leading.document.body and convert line spacing to percent", "Use fonts.googleBody and read back the applied styles"],
"forbidden_behaviors": ["Read missing page.body or document.body catalog fields", "Use the report cover title for a compact document", "Claim visual verification from structure-only reads"]
},
{
"id": "html-purpose-style",
"prompt": "이 기술 보고서를 HTML로 만들어 줘. corporate 브랜드를 유지하고 인쇄용 크기도 맞춰 줘.",
"context": "Content and the bundled design catalog are supplied. The technical profile has a light tableHeader. The report includes tables, code and small chart value labels.",
"expected_skill": "html-report",
"required_behaviors": ["Use brandTint and brand for light table headers without changing the theme", "Apply type.page sizes for print separately from type.web sizes", "Use readable text colors for small chart labels", "Keep inline and block code at the same role size"],
"forbidden_behaviors": ["Leave a solid table header for the technical profile", "Reuse chart series colors as small text without checking contrast", "Shrink code twice inside pre"]
},
{
"id": "legacy-workbook-schema",
"prompt": "이 자료로 corporate 브랜드의 XLSX 집계표를 만들어 줘.",
"context": "Rows are supplied. The deployed File schema supports XLSX creation but exposes neither theme nor colors. The bundled design catalog is newer than the deployed tool.",
"expected_skill": "spreadsheet-authoring",
"required_behaviors": ["Check the actual File schema before choosing arguments", "Use only supported creation fields and disclose the unperformed brand styling"],
"forbidden_behaviors": ["Send theme or colors to a schema that does not accept them", "Claim corporate colors were applied from the catalog alone"]
},
{
"id": "style-analysis-only",
"prompt": "이 문서의 글꼴과 색상 차이만 분석해 줘. 수정하지 마.",
"context": "Document metadata and style information are supplied. No write is requested.",
"expected_skill": null,
"required_behaviors": ["Compare observable style information and state rendering limits"],
"forbidden_behaviors": ["Create a replacement document", "Restyle or publish the supplied document"]
}
]
}
4 changes: 3 additions & 1 deletion plugins/design/skills/diagram-design/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@ compatibility: >
- 계층, 소유, 포함과 개념 관계: `references/relationship-diagrams.md`
6. 보안 경계, 병목, 피드백처럼 동작 의미가 핵심이면
`references/semantic-patterns.md`도 읽는다.
7. `references/design-system.md`의 토큰과 `references/svg-implementation.md`의
7. 새 기본 디자인은 [디자인 계약](references/design-system.json)의 corporate theme를 사용하고,
다른 문서와 묶는 요청이면 같은 theme·글꼴 역할을 유지한다.
`references/design-system.md`의 토큰과 `references/svg-implementation.md`의
연결선·접근성 규칙으로 그린다. HTML 산출물은 `references/template.md`에서 시작한다.
8. 발행 전 삭제 가능한 요소와 중복 연결을 걷어내고 아래 검사를 수행한다.

Expand Down
250 changes: 250 additions & 0 deletions plugins/design/skills/diagram-design/references/design-system.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,250 @@
{
"version": 1,
"defaults": {
"profile": "standard",
"theme": "corporate",
"pageLayout": "compact",
"deckLayout": "report"
},
"colors": [
"brand",
"brandLight",
"brandDeep",
"brandTint",
"surfaceTint",
"ink",
"inkMuted",
"rule",
"onBrand",
"positive",
"negative"
],
"fonts": {
"body": "NanumGothic",
"googleBody": "Nanum Gothic",
"webBody": "\"NanumGothic\", \"Nanum Gothic\", system-ui, -apple-system, \"Segoe UI\", sans-serif",
"code": {
"docx": "Consolas",
"pptx": "Consolas",
"hwpx": "굴림체",
"pdf": "Courier",
"web": "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"
},
"editableFontRequirement": "NanumGothic must be installed on the reader's device; PDF embeds the font."
},
"page": {
"unit": "pt",
"width": 595.28,
"height": 841.89,
"margin": 56.7,
"header": 28.35,
"footer": 28.35,
"background": "FFFFFF"
},
"type": {
"page": {
"unit": "pt",
"body": 11,
"code": 9.5,
"headings": [
20,
17,
15,
13,
12,
11
],
"caption": 8.5,
"coverTitle": 30,
"subtitle": 13,
"ordinal": 36,
"metric": 26
},
"deck": {
"unit": "pt",
"coverTitle": 44,
"subtitle": 20,
"title": 32,
"sectionTitle": 40,
"ordinal": 66,
"closingTitle": 36,
"body": 18,
"code": 14,
"subheadings": [
22,
20,
18,
18
],
"caption": 11,
"cardTitle": 18,
"cardBody": 14,
"metric": 44,
"metricLabel": 13,
"quote": 24
},
"web": {
"unit": "px",
"body": 17,
"coverTitle": 40,
"title": 24,
"subtitle": 20,
"caption": 13,
"code": 14.875
}
},
"leading": {
"document": {
"body": 1.5,
"heading": 1.2,
"coverTitle": 1.15,
"subtitle": 1.4,
"compact": 1.35
},
"deck": {
"body": 1.35,
"title": 1.15,
"coverTitle": 1.1,
"subtitle": 1.3
}
},
"chart": [
"2A78D6",
"EB6834",
"1BAF7A",
"EDA100",
"E87BA4",
"4A3AA7",
"E34948",
"898781"
],
"themes": {
"corporate": {
"brand": "17324D",
"brandLight": "2D6A78",
"brandDeep": "0B5D7A",
"brandTint": "EAF1F3",
"surfaceTint": "F5F7F8",
"ink": "18222B",
"inkMuted": "4F5D68",
"rule": "CBD5DB",
"onBrand": "FFFFFF",
"positive": "147D64",
"negative": "B8433F"
},
"classic": {
"brand": "1F4E79",
"brandLight": "4472C4",
"brandDeep": "0563C1",
"brandTint": "EEF3F9",
"surfaceTint": "F4F6F9",
"ink": "212529",
"inkMuted": "595959",
"rule": "D9DEE5",
"onBrand": "FFFFFF",
"positive": "147D64",
"negative": "B8433F"
},
"ocean": {
"brand": "0B2D4D",
"brandLight": "007481",
"brandDeep": "005A8D",
"brandTint": "E7F3F4",
"surfaceTint": "F2F6F8",
"ink": "17232D",
"inkMuted": "52616D",
"rule": "C9D5DB",
"onBrand": "FFFFFF",
"positive": "147D64",
"negative": "B8433F"
},
"slate": {
"brand": "334E68",
"brandLight": "627D98",
"brandDeep": "245B78",
"brandTint": "EDF1F4",
"surfaceTint": "F7F7F5",
"ink": "20252A",
"inkMuted": "525A61",
"rule": "CDD2D6",
"onBrand": "FFFFFF",
"positive": "287A62",
"negative": "A94743"
},
"teal": {
"brand": "0F4C5C",
"brandLight": "147D75",
"brandDeep": "075A72",
"brandTint": "E8F3F1",
"surfaceTint": "F2F7F6",
"ink": "162629",
"inkMuted": "4C6063",
"rule": "C6D6D3",
"onBrand": "FFFFFF",
"positive": "147D64",
"negative": "B8433F"
}
},
"profiles": {
"executive": {
"label": "Executive",
"purpose": "Leadership decisions, board reports and approval documents.",
"tableHeader": "solid",
"doc": {
"coverRulePoints": 48
},
"deck": {
"coverBandPoints": 12,
"cornerRadiusFraction": 0.015
}
},
"consulting": {
"label": "Consulting",
"purpose": "Strategy proposals and conclusion-led presentations.",
"tableHeader": "solid",
"doc": {
"coverRulePoints": 72
},
"deck": {
"coverBandPoints": 36,
"cornerRadiusFraction": 0.05
}
},
"formal": {
"label": "Formal",
"purpose": "Public-sector and external submissions designed first for print.",
"tableHeader": "light",
"doc": {
"coverRulePoints": 36
},
"deck": {
"coverBandPoints": 0,
"cornerRadiusFraction": 0
}
},
"technical": {
"label": "Technical",
"purpose": "Architecture, RFC and engineering documents with restrained structure.",
"tableHeader": "light",
"doc": {
"coverRulePoints": 42
},
"deck": {
"coverBandPoints": 6,
"cornerRadiusFraction": 0.01
}
},
"standard": {
"label": "Standard",
"purpose": "General-purpose business documents with a neutral layout.",
"tableHeader": "solid",
"doc": {
"coverRulePoints": 60
},
"deck": {
"coverBandPoints": 21.6,
"cornerRadiusFraction": 0.08
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# 디자인 시스템

기존 브랜드나 제품의 design token이 있으면 그것을 우선한다. 없으면 아래 기본값을 사용한다.
기본값은 [디자인 계약](design-system.json)과 맞춘다. 이 파일은 엔진의 내보내기 결과다.
색상 값은 SVG 곳곳에 직접 반복하지 말고 CSS custom property로 선언한다.

## 토큰
Expand All @@ -19,7 +20,7 @@
--on-brand: #FFFFFF;
--positive: #147D64;
--negative: #B8433F;
--font-sans: system-ui, -apple-system, "Segoe UI", sans-serif;
--font-sans: "NanumGothic", "Nanum Gothic", system-ui, -apple-system, "Segoe UI", sans-serif;
--font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
```
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
--brand-light: #2D6A78;
--brand-deep: #0B5D7A;
--on-brand: #FFFFFF;
--font-sans: system-ui, -apple-system, "Segoe UI", sans-serif;
--font-sans: "NanumGothic", "Nanum Gothic", system-ui, -apple-system, "Segoe UI", sans-serif;
--font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
*, *::before, *::after { box-sizing: border-box; }
Expand Down Expand Up @@ -80,6 +80,7 @@ h1 {
main { padding: 32px 16px 48px; }
.diagram-frame svg { width: 900px; }
}
@page { size: A4; margin: 20mm; }
@media print {
main { max-width: none; padding: 0; }
.diagram-frame { overflow: visible; }
Expand Down
Loading
Loading