@brandsystem/mcp 0.3.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/README.md +515 -0
- package/bin/brandsystem-mcp.mjs +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/brand-dir.d.ts +56 -0
- package/dist/lib/brand-dir.d.ts.map +1 -0
- package/dist/lib/brand-dir.js +270 -0
- package/dist/lib/brand-dir.js.map +1 -0
- package/dist/lib/color-namer.d.ts +28 -0
- package/dist/lib/color-namer.d.ts.map +1 -0
- package/dist/lib/color-namer.js +155 -0
- package/dist/lib/color-namer.js.map +1 -0
- package/dist/lib/confidence.d.ts +19 -0
- package/dist/lib/confidence.d.ts.map +1 -0
- package/dist/lib/confidence.js +66 -0
- package/dist/lib/confidence.js.map +1 -0
- package/dist/lib/content-scorer.d.ts +38 -0
- package/dist/lib/content-scorer.d.ts.map +1 -0
- package/dist/lib/content-scorer.js +571 -0
- package/dist/lib/content-scorer.js.map +1 -0
- package/dist/lib/css-parser.d.ts +45 -0
- package/dist/lib/css-parser.d.ts.map +1 -0
- package/dist/lib/css-parser.js +330 -0
- package/dist/lib/css-parser.js.map +1 -0
- package/dist/lib/dtcg-compiler.d.ts +7 -0
- package/dist/lib/dtcg-compiler.d.ts.map +1 -0
- package/dist/lib/dtcg-compiler.js +89 -0
- package/dist/lib/dtcg-compiler.js.map +1 -0
- package/dist/lib/interaction-policy-compiler.d.ts +40 -0
- package/dist/lib/interaction-policy-compiler.d.ts.map +1 -0
- package/dist/lib/interaction-policy-compiler.js +60 -0
- package/dist/lib/interaction-policy-compiler.js.map +1 -0
- package/dist/lib/logo-extractor.d.ts +49 -0
- package/dist/lib/logo-extractor.d.ts.map +1 -0
- package/dist/lib/logo-extractor.js +384 -0
- package/dist/lib/logo-extractor.js.map +1 -0
- package/dist/lib/report-html.d.ts +20 -0
- package/dist/lib/report-html.d.ts.map +1 -0
- package/dist/lib/report-html.js +938 -0
- package/dist/lib/report-html.js.map +1 -0
- package/dist/lib/response.d.ts +20 -0
- package/dist/lib/response.d.ts.map +1 -0
- package/dist/lib/response.js +54 -0
- package/dist/lib/response.js.map +1 -0
- package/dist/lib/runtime-compiler.d.ts +60 -0
- package/dist/lib/runtime-compiler.d.ts.map +1 -0
- package/dist/lib/runtime-compiler.js +96 -0
- package/dist/lib/runtime-compiler.js.map +1 -0
- package/dist/lib/svg-resolver.d.ts +21 -0
- package/dist/lib/svg-resolver.d.ts.map +1 -0
- package/dist/lib/svg-resolver.js +115 -0
- package/dist/lib/svg-resolver.js.map +1 -0
- package/dist/lib/url-validator.d.ts +11 -0
- package/dist/lib/url-validator.d.ts.map +1 -0
- package/dist/lib/url-validator.js +93 -0
- package/dist/lib/url-validator.js.map +1 -0
- package/dist/lib/version.d.ts +2 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +19 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/lib/vim-generator.d.ts +13 -0
- package/dist/lib/vim-generator.d.ts.map +1 -0
- package/dist/lib/vim-generator.js +718 -0
- package/dist/lib/vim-generator.js.map +1 -0
- package/dist/resources/brand-resources.d.ts +4 -0
- package/dist/resources/brand-resources.d.ts.map +1 -0
- package/dist/resources/brand-resources.js +34 -0
- package/dist/resources/brand-resources.js.map +1 -0
- package/dist/schemas/brand-config.d.ts +28 -0
- package/dist/schemas/brand-config.d.ts.map +1 -0
- package/dist/schemas/brand-config.js +11 -0
- package/dist/schemas/brand-config.js.map +1 -0
- package/dist/schemas/brand-runtime.d.ts +251 -0
- package/dist/schemas/brand-runtime.d.ts.map +1 -0
- package/dist/schemas/brand-runtime.js +54 -0
- package/dist/schemas/brand-runtime.js.map +1 -0
- package/dist/schemas/core-identity.d.ts +302 -0
- package/dist/schemas/core-identity.d.ts.map +1 -0
- package/dist/schemas/core-identity.js +51 -0
- package/dist/schemas/core-identity.js.map +1 -0
- package/dist/schemas/index.d.ts +11 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +11 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/interaction-policy.d.ts +150 -0
- package/dist/schemas/interaction-policy.d.ts.map +1 -0
- package/dist/schemas/interaction-policy.js +34 -0
- package/dist/schemas/interaction-policy.js.map +1 -0
- package/dist/schemas/messaging.d.ts +776 -0
- package/dist/schemas/messaging.d.ts.map +1 -0
- package/dist/schemas/messaging.js +68 -0
- package/dist/schemas/messaging.js.map +1 -0
- package/dist/schemas/needs-clarification.d.ts +62 -0
- package/dist/schemas/needs-clarification.d.ts.map +1 -0
- package/dist/schemas/needs-clarification.js +13 -0
- package/dist/schemas/needs-clarification.js.map +1 -0
- package/dist/schemas/strategy.d.ts +537 -0
- package/dist/schemas/strategy.d.ts.map +1 -0
- package/dist/schemas/strategy.js +71 -0
- package/dist/schemas/strategy.js.map +1 -0
- package/dist/schemas/tokens.d.ts +35 -0
- package/dist/schemas/tokens.d.ts.map +1 -0
- package/dist/schemas/tokens.js +15 -0
- package/dist/schemas/tokens.js.map +1 -0
- package/dist/schemas/visual-identity.d.ts +224 -0
- package/dist/schemas/visual-identity.d.ts.map +1 -0
- package/dist/schemas/visual-identity.js +42 -0
- package/dist/schemas/visual-identity.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +75 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/brand-audit-content.d.ts +3 -0
- package/dist/tools/brand-audit-content.d.ts.map +1 -0
- package/dist/tools/brand-audit-content.js +116 -0
- package/dist/tools/brand-audit-content.js.map +1 -0
- package/dist/tools/brand-audit-drift.d.ts +3 -0
- package/dist/tools/brand-audit-drift.d.ts.map +1 -0
- package/dist/tools/brand-audit-drift.js +301 -0
- package/dist/tools/brand-audit-drift.js.map +1 -0
- package/dist/tools/brand-audit.d.ts +3 -0
- package/dist/tools/brand-audit.d.ts.map +1 -0
- package/dist/tools/brand-audit.js +129 -0
- package/dist/tools/brand-audit.js.map +1 -0
- package/dist/tools/brand-build-journey.d.ts +3 -0
- package/dist/tools/brand-build-journey.d.ts.map +1 -0
- package/dist/tools/brand-build-journey.js +312 -0
- package/dist/tools/brand-build-journey.js.map +1 -0
- package/dist/tools/brand-build-matrix.d.ts +3 -0
- package/dist/tools/brand-build-matrix.d.ts.map +1 -0
- package/dist/tools/brand-build-matrix.js +525 -0
- package/dist/tools/brand-build-matrix.js.map +1 -0
- package/dist/tools/brand-build-personas.d.ts +3 -0
- package/dist/tools/brand-build-personas.d.ts.map +1 -0
- package/dist/tools/brand-build-personas.js +436 -0
- package/dist/tools/brand-build-personas.js.map +1 -0
- package/dist/tools/brand-build-themes.d.ts +3 -0
- package/dist/tools/brand-build-themes.d.ts.map +1 -0
- package/dist/tools/brand-build-themes.js +476 -0
- package/dist/tools/brand-build-themes.js.map +1 -0
- package/dist/tools/brand-check-compliance.d.ts +3 -0
- package/dist/tools/brand-check-compliance.d.ts.map +1 -0
- package/dist/tools/brand-check-compliance.js +243 -0
- package/dist/tools/brand-check-compliance.js.map +1 -0
- package/dist/tools/brand-clarify.d.ts +21 -0
- package/dist/tools/brand-clarify.d.ts.map +1 -0
- package/dist/tools/brand-clarify.js +497 -0
- package/dist/tools/brand-clarify.js.map +1 -0
- package/dist/tools/brand-compile-messaging.d.ts +3 -0
- package/dist/tools/brand-compile-messaging.d.ts.map +1 -0
- package/dist/tools/brand-compile-messaging.js +759 -0
- package/dist/tools/brand-compile-messaging.js.map +1 -0
- package/dist/tools/brand-compile.d.ts +3 -0
- package/dist/tools/brand-compile.d.ts.map +1 -0
- package/dist/tools/brand-compile.js +182 -0
- package/dist/tools/brand-compile.js.map +1 -0
- package/dist/tools/brand-deepen-identity.d.ts +3 -0
- package/dist/tools/brand-deepen-identity.d.ts.map +1 -0
- package/dist/tools/brand-deepen-identity.js +483 -0
- package/dist/tools/brand-deepen-identity.js.map +1 -0
- package/dist/tools/brand-export.d.ts +17 -0
- package/dist/tools/brand-export.d.ts.map +1 -0
- package/dist/tools/brand-export.js +730 -0
- package/dist/tools/brand-export.js.map +1 -0
- package/dist/tools/brand-extract-figma.d.ts +3 -0
- package/dist/tools/brand-extract-figma.d.ts.map +1 -0
- package/dist/tools/brand-extract-figma.js +174 -0
- package/dist/tools/brand-extract-figma.js.map +1 -0
- package/dist/tools/brand-extract-messaging.d.ts +3 -0
- package/dist/tools/brand-extract-messaging.d.ts.map +1 -0
- package/dist/tools/brand-extract-messaging.js +620 -0
- package/dist/tools/brand-extract-messaging.js.map +1 -0
- package/dist/tools/brand-extract-web.d.ts +3 -0
- package/dist/tools/brand-extract-web.d.ts.map +1 -0
- package/dist/tools/brand-extract-web.js +477 -0
- package/dist/tools/brand-extract-web.js.map +1 -0
- package/dist/tools/brand-feedback.d.ts +3 -0
- package/dist/tools/brand-feedback.d.ts.map +1 -0
- package/dist/tools/brand-feedback.js +366 -0
- package/dist/tools/brand-feedback.js.map +1 -0
- package/dist/tools/brand-ingest-assets.d.ts +3 -0
- package/dist/tools/brand-ingest-assets.d.ts.map +1 -0
- package/dist/tools/brand-ingest-assets.js +233 -0
- package/dist/tools/brand-ingest-assets.js.map +1 -0
- package/dist/tools/brand-init.d.ts +3 -0
- package/dist/tools/brand-init.d.ts.map +1 -0
- package/dist/tools/brand-init.js +66 -0
- package/dist/tools/brand-init.js.map +1 -0
- package/dist/tools/brand-preflight.d.ts +3 -0
- package/dist/tools/brand-preflight.d.ts.map +1 -0
- package/dist/tools/brand-preflight.js +608 -0
- package/dist/tools/brand-preflight.js.map +1 -0
- package/dist/tools/brand-report.d.ts +3 -0
- package/dist/tools/brand-report.d.ts.map +1 -0
- package/dist/tools/brand-report.js +154 -0
- package/dist/tools/brand-report.js.map +1 -0
- package/dist/tools/brand-runtime.d.ts +3 -0
- package/dist/tools/brand-runtime.d.ts.map +1 -0
- package/dist/tools/brand-runtime.js +37 -0
- package/dist/tools/brand-runtime.js.map +1 -0
- package/dist/tools/brand-set-logo.d.ts +3 -0
- package/dist/tools/brand-set-logo.d.ts.map +1 -0
- package/dist/tools/brand-set-logo.js +170 -0
- package/dist/tools/brand-set-logo.js.map +1 -0
- package/dist/tools/brand-start.d.ts +3 -0
- package/dist/tools/brand-start.d.ts.map +1 -0
- package/dist/tools/brand-start.js +686 -0
- package/dist/tools/brand-start.js.map +1 -0
- package/dist/tools/brand-status.d.ts +3 -0
- package/dist/tools/brand-status.d.ts.map +1 -0
- package/dist/tools/brand-status.js +175 -0
- package/dist/tools/brand-status.js.map +1 -0
- package/dist/tools/brand-write.d.ts +3 -0
- package/dist/tools/brand-write.d.ts.map +1 -0
- package/dist/tools/brand-write.js +442 -0
- package/dist/tools/brand-write.js.map +1 -0
- package/dist/types/index.d.ts +331 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +52 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +60 -0
package/README.md
ADDED
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
[](https://github.com/Brand-System/brandsystem-mcp/actions/workflows/ci.yml)
|
|
2
|
+
[](https://www.npmjs.com/package/@brandsystem/mcp)
|
|
3
|
+
[](https://www.npmjs.com/package/@brandsystem/mcp)
|
|
4
|
+
|
|
5
|
+
# @brandsystem/mcp
|
|
6
|
+
|
|
7
|
+
Extract and manage brand identity for AI tools -- logo, colors, typography, voice, and visual rules.
|
|
8
|
+
|
|
9
|
+
## What It Solves
|
|
10
|
+
|
|
11
|
+
AI tools produce generic output because they have no brand context. Brand guidelines live in PDFs, Figma files, and people's heads -- none of which AI tools can read.
|
|
12
|
+
|
|
13
|
+
This MCP server extracts brand identity from live sources (websites, Figma files), compiles it into structured design tokens, and makes it available to any AI tool through the [Model Context Protocol](https://modelcontextprotocol.io). The result is a `.brand/` directory with your colors, fonts, logos, voice rules, and DTCG tokens -- portable, version-controlled, and ready for any AI tool to consume.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Quick Start
|
|
18
|
+
|
|
19
|
+
### 1. Add to your MCP config
|
|
20
|
+
|
|
21
|
+
Copy this into `.mcp.json` (Claude Code), `.cursor/mcp.json` (Cursor), or Windsurf MCP settings:
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"mcpServers": {
|
|
26
|
+
"brandsystem": {
|
|
27
|
+
"command": "npx",
|
|
28
|
+
"args": ["-y", "@brandsystem/mcp"]
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 2. Create your brand system
|
|
35
|
+
|
|
36
|
+
Tell your AI tool:
|
|
37
|
+
|
|
38
|
+
> Run brand_start for "Acme Corp" with website https://acme.com in auto mode
|
|
39
|
+
|
|
40
|
+
That single command extracts colors, fonts, and logo from the website, compiles DTCG tokens, and generates a portable HTML brand report -- all in under 60 seconds.
|
|
41
|
+
|
|
42
|
+
### 3. Use it
|
|
43
|
+
|
|
44
|
+
> Run brand_write for a social-graphic about "Q3 product launch"
|
|
45
|
+
|
|
46
|
+
The AI now has your full brand context -- colors, typography, logo, anti-patterns, voice rules -- and generates on-brand content.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## What It Does
|
|
51
|
+
|
|
52
|
+
**Session 1: Core Identity** -- Extract colors, fonts, and logo from a website or Figma file. Compile into DTCG tokens. Generate a portable HTML report.
|
|
53
|
+
|
|
54
|
+
**Session 2: Visual Identity** -- Define composition rules, pattern language, illustration style, and anti-patterns through a guided interview. Anti-patterns become enforceable compliance rules.
|
|
55
|
+
|
|
56
|
+
**Session 3: Messaging** -- Audit existing website voice, then define perspective, voice codex (tone, vocabulary, AI-ism detection), and brand story through a guided interview.
|
|
57
|
+
|
|
58
|
+
**Session 4: Content Strategy** -- Build buyer personas, journey stages, editorial themes, and a persona x stage messaging matrix.
|
|
59
|
+
|
|
60
|
+
Each session builds on the previous. Stop anywhere -- you get value immediately.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Tools Reference
|
|
65
|
+
|
|
66
|
+
### Entry Points
|
|
67
|
+
|
|
68
|
+
| Tool | What it does |
|
|
69
|
+
|------|-------------|
|
|
70
|
+
| `brand_start` | **Begin here.** Creates a brand system from a website URL in under 60 seconds. Use `mode='auto'` for one-call setup. |
|
|
71
|
+
| `brand_status` | Check progress, get next steps, or see a getting-started guide if no brand exists yet. |
|
|
72
|
+
|
|
73
|
+
### Session 1: Core Identity
|
|
74
|
+
|
|
75
|
+
| Tool | What it does |
|
|
76
|
+
|------|-------------|
|
|
77
|
+
| `brand_extract_web` | Extract logo (SVG/PNG), colors, and fonts from any website URL. |
|
|
78
|
+
| `brand_extract_figma` | Extract from Figma design files (higher accuracy). Two-phase: plan then ingest. |
|
|
79
|
+
| `brand_set_logo` | Add/replace logo via SVG markup, URL, or data URI. |
|
|
80
|
+
| `brand_compile` | Generate DTCG design tokens, brand runtime contract, and interaction policy from extracted data. |
|
|
81
|
+
| `brand_clarify` | Resolve ambiguous brand values interactively (color roles, font confirmations). |
|
|
82
|
+
| `brand_audit` | Validate .brand/ directory for completeness and correctness. |
|
|
83
|
+
| `brand_report` | Generate portable HTML brand report. Upload to any AI chat as instant guidelines. |
|
|
84
|
+
| `brand_init` | Low-level directory scaffolding. Prefer `brand_start` instead. |
|
|
85
|
+
|
|
86
|
+
### Session 2: Visual Identity
|
|
87
|
+
|
|
88
|
+
| Tool | What it does |
|
|
89
|
+
|------|-------------|
|
|
90
|
+
| `brand_deepen_identity` | Define composition rules, patterns, illustration style, and anti-patterns (6 interview sections). |
|
|
91
|
+
| `brand_ingest_assets` | Scan and catalog brand assets with MANIFEST.yaml metadata. |
|
|
92
|
+
| `brand_preflight` | Check HTML/CSS against brand rules -- catches off-brand colors, wrong fonts, anti-pattern violations. |
|
|
93
|
+
|
|
94
|
+
### Session 3: Messaging
|
|
95
|
+
|
|
96
|
+
| Tool | What it does |
|
|
97
|
+
|------|-------------|
|
|
98
|
+
| `brand_extract_messaging` | Audit existing website voice -- fingerprint, vocabulary, claims, AI-isms, gaps. |
|
|
99
|
+
| `brand_compile_messaging` | Define perspective, voice codex (tone, vocabulary, AI-ism detection), and brand story. |
|
|
100
|
+
|
|
101
|
+
### Session 4: Content Strategy
|
|
102
|
+
|
|
103
|
+
| Tool | What it does |
|
|
104
|
+
|------|-------------|
|
|
105
|
+
| `brand_build_personas` | Build buyer personas through a 7-question guided interview. |
|
|
106
|
+
| `brand_build_journey` | Define buyer journey stages (ships with 4 proven defaults). |
|
|
107
|
+
| `brand_build_themes` | Define editorial content themes balanced across awareness, engagement, and conversion. |
|
|
108
|
+
| `brand_build_matrix` | Generate messaging variants for every persona x journey stage combination. |
|
|
109
|
+
|
|
110
|
+
### Content Scoring
|
|
111
|
+
|
|
112
|
+
| Tool | What it does |
|
|
113
|
+
|------|-------------|
|
|
114
|
+
| `brand_audit_content` | Score content against brand rules (0-100) across multiple dimensions. |
|
|
115
|
+
| `brand_check_compliance` | Quick pass/fail compliance gate before publishing. |
|
|
116
|
+
| `brand_audit_drift` | Detect systematic brand drift across multiple pieces of content. |
|
|
117
|
+
|
|
118
|
+
### Runtime + Utilities
|
|
119
|
+
|
|
120
|
+
| Tool | What it does |
|
|
121
|
+
|------|-------------|
|
|
122
|
+
| `brand_runtime` | Read the compiled brand runtime contract (single-document brand context for AI agents). |
|
|
123
|
+
| `brand_write` | Load full brand context (visual + voice + strategy) for content generation. |
|
|
124
|
+
| `brand_export` | Generate portable brand files for Chat, Code, team sharing, or email. |
|
|
125
|
+
| `brand_feedback` | Report bugs, friction, or feature ideas to the brandsystem team. |
|
|
126
|
+
|
|
127
|
+
### Tool Flow
|
|
128
|
+
|
|
129
|
+
Tools auto-chain -- each tool's response tells the LLM what to run next:
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
Session 1: brand_start → brand_extract_web → brand_compile → brand_clarify → brand_report
|
|
133
|
+
Session 2: brand_deepen_identity (interview x 6) → brand_compile (generates VIM)
|
|
134
|
+
Session 3: brand_extract_messaging → brand_compile_messaging (interview x 3) → brand_write
|
|
135
|
+
Session 4: brand_build_personas → brand_build_journey → brand_build_themes → brand_build_matrix
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
`brand_status` can be called at any point. `brand_preflight` runs after any content generation.
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## The `.brand/` Directory
|
|
143
|
+
|
|
144
|
+
After running the full pipeline, your `.brand/` directory looks like this:
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
.brand/
|
|
148
|
+
brand.config.yaml # Client name, industry, source URLs, session state
|
|
149
|
+
core-identity.yaml # Colors, typography, logos with confidence scores
|
|
150
|
+
tokens.json # DTCG design tokens (compiled output)
|
|
151
|
+
brand-runtime.json # Compiled runtime contract (single-doc brand context)
|
|
152
|
+
interaction-policy.json # Enforceable rules (anti-patterns, voice, claims)
|
|
153
|
+
needs-clarification.yaml # Items requiring human review
|
|
154
|
+
brand-report.html # Portable HTML brand report
|
|
155
|
+
visual-identity.yaml # Session 2: composition, patterns, anti-patterns
|
|
156
|
+
visual-identity-manifest.md # Session 2: compiled VIM document
|
|
157
|
+
system-integration.md # Session 2: CLAUDE.md / .cursorrules setup guide
|
|
158
|
+
messaging.yaml # Session 3: perspective, voice, brand story
|
|
159
|
+
messaging-audit.md # Session 3: voice fingerprint analysis
|
|
160
|
+
brand-story.md # Session 3: compiled brand narrative
|
|
161
|
+
assets/
|
|
162
|
+
logo/
|
|
163
|
+
logo-wordmark.svg # Extracted logo files
|
|
164
|
+
illustrations/ # Brand illustrations with MANIFEST.yaml
|
|
165
|
+
stickers/ # Brand stickers with MANIFEST.yaml
|
|
166
|
+
patterns/ # Brand patterns with MANIFEST.yaml
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### File Details
|
|
170
|
+
|
|
171
|
+
| File | Format | Purpose |
|
|
172
|
+
|------|--------|---------|
|
|
173
|
+
| `brand.config.yaml` | YAML | Project metadata: client name, industry, website URL, Figma file key, session number, schema version |
|
|
174
|
+
| `core-identity.yaml` | YAML | All extracted brand data: colors (with roles and confidence), typography (with families and weights), logo specs (with inline SVG and data URIs), spacing |
|
|
175
|
+
| `tokens.json` | JSON | [DTCG](https://tr.designtokens.org/format/) design tokens. Only includes values with medium+ confidence. Each token carries `$extensions` with source and confidence metadata |
|
|
176
|
+
| `brand-runtime.json` | JSON | Single-document brand contract for AI agents. Merges all 4 session YAMLs into flat, fast-access format. Only medium+ confidence values. Compiled by `brand_compile`, read by `brand_runtime` |
|
|
177
|
+
| `interaction-policy.json` | JSON | Enforceable rules engine. Visual anti-patterns, voice constraints (never-say, AI-ism patterns), and content claims policies. Used by preflight and scoring tools |
|
|
178
|
+
| `needs-clarification.yaml` | YAML | Prioritized list of items the system could not resolve confidently: missing primary color, low-confidence values, unassigned roles |
|
|
179
|
+
| `brand-report.html` | HTML | Self-contained brand report. Works offline, embeds all assets inline. Paste into any AI tool as brand guidelines |
|
|
180
|
+
| `assets/logo/` | SVG/PNG | Extracted logo files. SVGs include inline path data in `core-identity.yaml` for portability |
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Platform Setup
|
|
185
|
+
|
|
186
|
+
### Claude Code
|
|
187
|
+
|
|
188
|
+
Create `.mcp.json` in your project root:
|
|
189
|
+
|
|
190
|
+
```json
|
|
191
|
+
{
|
|
192
|
+
"mcpServers": {
|
|
193
|
+
"brandsystem": {
|
|
194
|
+
"command": "npx",
|
|
195
|
+
"args": ["-y", "@brandsystem/mcp"]
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Cursor
|
|
202
|
+
|
|
203
|
+
Create `.cursor/mcp.json` in your project root:
|
|
204
|
+
|
|
205
|
+
```json
|
|
206
|
+
{
|
|
207
|
+
"mcpServers": {
|
|
208
|
+
"brandsystem": {
|
|
209
|
+
"command": "npx",
|
|
210
|
+
"args": ["-y", "@brandsystem/mcp"]
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Windsurf
|
|
217
|
+
|
|
218
|
+
Create `~/.codeium/windsurf/mcp_config.json`:
|
|
219
|
+
|
|
220
|
+
```json
|
|
221
|
+
{
|
|
222
|
+
"mcpServers": {
|
|
223
|
+
"brandsystem": {
|
|
224
|
+
"command": "npx",
|
|
225
|
+
"args": ["-y", "@brandsystem/mcp"]
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Claude Desktop
|
|
232
|
+
|
|
233
|
+
Open Settings > Developer > Edit Config (`claude_desktop_config.json`):
|
|
234
|
+
|
|
235
|
+
```json
|
|
236
|
+
{
|
|
237
|
+
"mcpServers": {
|
|
238
|
+
"brandsystem": {
|
|
239
|
+
"command": "npx",
|
|
240
|
+
"args": ["-y", "@brandsystem/mcp"]
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Claude Chat (no MCP)
|
|
247
|
+
|
|
248
|
+
If you are using Claude Chat without MCP support:
|
|
249
|
+
|
|
250
|
+
1. Run the pipeline in a code environment first to generate `brand-report.html`
|
|
251
|
+
2. Upload the HTML file to your Claude Chat conversation
|
|
252
|
+
3. Say: "Use this as my brand guidelines for everything we create"
|
|
253
|
+
|
|
254
|
+
The report HTML is self-contained and works as a standalone brand reference in any AI tool.
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Troubleshooting
|
|
259
|
+
|
|
260
|
+
### "No .brand/ directory found"
|
|
261
|
+
|
|
262
|
+
Every tool except `brand_start`, `brand_init`, and `brand_feedback` requires a `.brand/` directory. Run `brand_start` first.
|
|
263
|
+
|
|
264
|
+
### Empty extraction (no colors or fonts found)
|
|
265
|
+
|
|
266
|
+
This usually means the website loads CSS dynamically via JavaScript. `brand_extract_web` only parses static CSS from `<style>` blocks and linked stylesheets. Solutions:
|
|
267
|
+
|
|
268
|
+
- **Try a different page** that uses more inline/linked CSS (e.g., the homepage, a blog post)
|
|
269
|
+
- **Use Figma extraction** (`brand_extract_figma`) for higher accuracy
|
|
270
|
+
- **Set values manually** using `brand_clarify` after extraction
|
|
271
|
+
|
|
272
|
+
### Figma extraction fails
|
|
273
|
+
|
|
274
|
+
`brand_extract_figma` doesn't connect to Figma directly. It works in two phases:
|
|
275
|
+
|
|
276
|
+
1. **Plan** returns instructions for what data to fetch (variables, styles, logo)
|
|
277
|
+
2. **Ingest** processes data you pass back from the Figma MCP tools
|
|
278
|
+
|
|
279
|
+
Make sure you have a separate Figma MCP server connected (e.g., `@anthropics/figma-mcp`) and pass the fetched data to `brand_extract_figma` in ingest mode.
|
|
280
|
+
|
|
281
|
+
### Logo not detected
|
|
282
|
+
|
|
283
|
+
Web extraction looks for `<img>`, `<svg>`, and `<link rel="icon">` elements. If your logo is rendered via JavaScript or embedded as a CSS background, use `brand_set_logo` to add it manually with SVG markup, a URL, or a data URI.
|
|
284
|
+
|
|
285
|
+
### "Response size exceeds 5K target" (console warning)
|
|
286
|
+
|
|
287
|
+
This is a soft warning, not an error. Some tools (brand_write, brand_deepen_identity) return rich conversation guides that exceed 5K characters. The hard limit is 50K, which triggers truncation.
|
|
288
|
+
|
|
289
|
+
### Server won't start
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
# Verify Node.js >= 18
|
|
293
|
+
node --version
|
|
294
|
+
|
|
295
|
+
# Test the server manually
|
|
296
|
+
npx @brandsystem/mcp
|
|
297
|
+
|
|
298
|
+
# Check for port conflicts (stdio transport shouldn't have any)
|
|
299
|
+
# The server uses stdio, not HTTP -- it reads from stdin and writes to stdout
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
## How It Works
|
|
305
|
+
|
|
306
|
+
### Confidence Scoring
|
|
307
|
+
|
|
308
|
+
Every extracted value carries a confidence level:
|
|
309
|
+
|
|
310
|
+
| Level | Meaning | Token Behavior |
|
|
311
|
+
|-------|---------|----------------|
|
|
312
|
+
| `confirmed` | Human-verified | Included in tokens |
|
|
313
|
+
| `high` | Strong signal (e.g., Figma variable, CSS custom property named `--brand-primary`) | Included in tokens |
|
|
314
|
+
| `medium` | Reasonable inference (e.g., most-frequent chromatic color in CSS) | Included in tokens |
|
|
315
|
+
| `low` | Weak signal (e.g., color appears once in a generic property) | Excluded from tokens, added to `needs-clarification.yaml` |
|
|
316
|
+
|
|
317
|
+
### Source Precedence
|
|
318
|
+
|
|
319
|
+
When the same brand element is found in multiple sources, the higher-precedence source wins:
|
|
320
|
+
|
|
321
|
+
```
|
|
322
|
+
figma > manual > web
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
A Figma-sourced primary color will replace a web-extracted one. A manually confirmed value overrides both automated sources. Within the same source, higher confidence wins.
|
|
326
|
+
|
|
327
|
+
### Web Extraction
|
|
328
|
+
|
|
329
|
+
`brand_extract_web` fetches the target URL and:
|
|
330
|
+
|
|
331
|
+
1. Parses all `<style>` blocks and up to 5 linked stylesheets
|
|
332
|
+
2. Extracts color values from CSS properties and custom properties
|
|
333
|
+
3. Infers color roles from property names (e.g., `--primary`, `--brand-accent`)
|
|
334
|
+
4. Promotes the most-frequent chromatic color to "primary" if no explicit primary is found
|
|
335
|
+
5. Extracts font families and ranks by frequency
|
|
336
|
+
6. Finds logo candidates from `<img>`, `<svg>`, and `<link rel="icon">` elements
|
|
337
|
+
7. Downloads and embeds logos as inline SVG or base64 data URIs
|
|
338
|
+
|
|
339
|
+
### Figma Extraction
|
|
340
|
+
|
|
341
|
+
`brand_extract_figma` works in two steps to bridge between the Figma MCP and brandsystem:
|
|
342
|
+
|
|
343
|
+
1. **Plan mode** -- Returns specific instructions for what data to fetch from Figma (variables, text styles, logo components)
|
|
344
|
+
2. **Ingest mode** -- Processes the collected Figma data, maps variable names to roles, and merges into `core-identity.yaml` at `high` confidence
|
|
345
|
+
|
|
346
|
+
### DTCG Token Compilation
|
|
347
|
+
|
|
348
|
+
`brand_compile` transforms `core-identity.yaml` into [Design Tokens Community Group](https://tr.designtokens.org/format/) format:
|
|
349
|
+
|
|
350
|
+
- Colors become `$type: "color"` tokens keyed by role
|
|
351
|
+
- Typography becomes grouped tokens with `fontFamily`, `dimension` (size), and `fontWeight` entries
|
|
352
|
+
- Spacing becomes `dimension` tokens with scale values
|
|
353
|
+
- Each token includes `$extensions["com.brandsystem"]` with source and confidence metadata
|
|
354
|
+
- Only values with `medium` or higher confidence are included
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
## The Bigger Picture
|
|
359
|
+
|
|
360
|
+
brandsystem.app is a standalone product — it works for any brand, in any AI tool, with no external dependencies. But it's also the first-touch onramp into a larger system.
|
|
361
|
+
|
|
362
|
+
### Relationship to Brandcode
|
|
363
|
+
|
|
364
|
+
[Brandcode](https://github.com/Brand-System/column-five-prototypes) is an end-to-end content system that governs everything from brand identity to production to measurement — and loops measurement insights back into the brand. brandsystem.app is the marketing-first entry point that creates the Brand OS, which naturally draws clients into operationalizing it within Brandcode.
|
|
365
|
+
|
|
366
|
+
```
|
|
367
|
+
┌──────────────────────┐
|
|
368
|
+
│ Brand OS Creation │
|
|
369
|
+
│ ★ brandsystem.app │
|
|
370
|
+
└──────────┬───────────┘
|
|
371
|
+
│ creates
|
|
372
|
+
▼
|
|
373
|
+
┌──────────────────────────────────────────────────┐
|
|
374
|
+
│ Brandcode │
|
|
375
|
+
│ │
|
|
376
|
+
│ Market Intelligence ──→ Brand Perspective │
|
|
377
|
+
│ ▲ │ │
|
|
378
|
+
│ │ Governance layer │
|
|
379
|
+
│ │ (claims, narratives, rules) │
|
|
380
|
+
│ │ │ │
|
|
381
|
+
│ │ Production engines │
|
|
382
|
+
│ │ (web, PDF, viz, copywriting) │
|
|
383
|
+
│ │ │ │
|
|
384
|
+
│ └──── Measurement ◄────┘ │
|
|
385
|
+
│ (performance → insights → loop) │
|
|
386
|
+
└──────────────────────────────────────────────────┘
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
**brandsystem.app creates the Brand OS** — the first artifact of Brandcode. Colors, typography, voice, composition rules, messaging. This is valuable on its own: paste the report into any AI tool and get better brand compliance immediately.
|
|
390
|
+
|
|
391
|
+
**The pull into Brandcode comes naturally.** Once you have a Brand OS, the next questions are operational: What can we claim? How should different content types use this identity? How do we measure whether it's working? That's the Brandcode governance and production loop — Market Intelligence feeds new insights into the brand perspective, production creates governed content, measurement evaluates performance, and those insights loop back to evolve the Brand OS.
|
|
392
|
+
|
|
393
|
+
**You don't need the full loop.** brandsystem.app delivers standalone value at every session. The Brandcode ecosystem is there when you're ready to operationalize.
|
|
394
|
+
|
|
395
|
+
### Progressive Depth
|
|
396
|
+
|
|
397
|
+
Each stage builds on the previous. Stop anywhere — you get value immediately.
|
|
398
|
+
|
|
399
|
+
| Stage | What You Get | How |
|
|
400
|
+
|-------|-------------|-----|
|
|
401
|
+
| **1. Free scan** | Brand tokens + HTML report with platform setup guides | `brand_extract_web` → `brand_compile` → `brand_report` |
|
|
402
|
+
| **2. MCP depth** | Figma extraction, clarification, full audit | Session 1 with `brand_extract_figma` + `brand_clarify` |
|
|
403
|
+
| **3. Visual identity** | Composition rules, patterns, anti-patterns, VIM | Session 2: `brand_deepen_identity` → `brand_compile` |
|
|
404
|
+
| **4. Core messaging** | Voice profile, perspective, brand story | Session 3: `brand_extract_messaging` → `brand_compile_messaging` |
|
|
405
|
+
| **5. Brandcode governance** | Claims, narratives, application rules, scoring, measurement | Operationalize the Brand OS within Brandcode |
|
|
406
|
+
| **6. Full loop** | Market Intelligence → production → measurement → insights back into Brand OS | Brandcode end-to-end |
|
|
407
|
+
|
|
408
|
+
Stages 1–4 are brandsystem.app. Open source, fully portable, no dependencies.
|
|
409
|
+
|
|
410
|
+
Stages 5–6 are the full Brandcode ecosystem — where the Brand OS becomes operational. Available through [Column Five Media](https://columnfivemedia.com).
|
|
411
|
+
|
|
412
|
+
### What's Portable
|
|
413
|
+
|
|
414
|
+
| Artifact | Portable? | Owned By |
|
|
415
|
+
|----------|-----------|----------|
|
|
416
|
+
| brandsystem.app (tools) | Fully — open source, any brand | MIT license |
|
|
417
|
+
| `.brand/` directory (outputs) | Fully — works in any tool | Client |
|
|
418
|
+
| Brandcode framework (schema + workflows) | Yes — universal | Open |
|
|
419
|
+
| Client claims, narratives, rules | Per-instance | Client |
|
|
420
|
+
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
## Development
|
|
424
|
+
|
|
425
|
+
```bash
|
|
426
|
+
# Install dependencies
|
|
427
|
+
npm install
|
|
428
|
+
|
|
429
|
+
# Build TypeScript
|
|
430
|
+
npm run build
|
|
431
|
+
|
|
432
|
+
# Watch mode for development
|
|
433
|
+
npm run dev
|
|
434
|
+
|
|
435
|
+
# Run tests
|
|
436
|
+
npm test
|
|
437
|
+
|
|
438
|
+
# Watch mode for tests
|
|
439
|
+
npm run test:watch
|
|
440
|
+
|
|
441
|
+
# Type check without emitting
|
|
442
|
+
npm run lint
|
|
443
|
+
|
|
444
|
+
# Start the server (stdio transport)
|
|
445
|
+
npm start
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
### Project Structure
|
|
449
|
+
|
|
450
|
+
```
|
|
451
|
+
src/
|
|
452
|
+
index.ts # Entry point -- stdio transport
|
|
453
|
+
server.ts # MCP server creation and tool registration (28 tools)
|
|
454
|
+
tools/ # One file per tool (26 files, 28 tools)
|
|
455
|
+
brand-start.ts # Entry point (Session 1)
|
|
456
|
+
brand-status.ts # Progress dashboard
|
|
457
|
+
brand-extract-web.ts # Website extraction
|
|
458
|
+
brand-extract-figma.ts # Figma extraction (plan/ingest)
|
|
459
|
+
brand-set-logo.ts # Manual logo add/replace
|
|
460
|
+
brand-compile.ts # Token + VIM + runtime compilation
|
|
461
|
+
brand-clarify.ts # Interactive clarification
|
|
462
|
+
brand-audit.ts # Schema validation
|
|
463
|
+
brand-report.ts # HTML report generation
|
|
464
|
+
brand-init.ts # Low-level directory scaffolding
|
|
465
|
+
brand-deepen-identity.ts # Session 2: visual identity interview
|
|
466
|
+
brand-ingest-assets.ts # Session 2: asset cataloging
|
|
467
|
+
brand-preflight.ts # Session 2: HTML compliance checking
|
|
468
|
+
brand-extract-messaging.ts # Session 3: voice/messaging audit
|
|
469
|
+
brand-compile-messaging.ts # Session 3: perspective + voice interview
|
|
470
|
+
brand-build-personas.ts # Session 4: buyer personas
|
|
471
|
+
brand-build-journey.ts # Session 4: buyer journey stages
|
|
472
|
+
brand-build-themes.ts # Session 4: editorial themes
|
|
473
|
+
brand-build-matrix.ts # Session 4: messaging matrix
|
|
474
|
+
brand-audit-content.ts # Content scoring (0-100)
|
|
475
|
+
brand-check-compliance.ts # Binary pass/fail compliance gate
|
|
476
|
+
brand-audit-drift.ts # Batch drift detection
|
|
477
|
+
brand-runtime.ts # Read compiled brand runtime contract
|
|
478
|
+
brand-write.ts # Content generation context loader
|
|
479
|
+
brand-export.ts # Portable brand file export
|
|
480
|
+
brand-feedback.ts # Bug reports + feedback (3 tools)
|
|
481
|
+
lib/ # Shared utilities
|
|
482
|
+
brand-dir.ts # .brand/ directory I/O (YAML, JSON, markdown, assets)
|
|
483
|
+
confidence.ts # Confidence scoring and source precedence
|
|
484
|
+
css-parser.ts # CSS color and font extraction
|
|
485
|
+
dtcg-compiler.ts # DTCG token compilation
|
|
486
|
+
color-namer.ts # Human-readable color name generation
|
|
487
|
+
content-scorer.ts # Brand compliance scoring engine
|
|
488
|
+
logo-extractor.ts # Logo candidate detection
|
|
489
|
+
svg-resolver.ts # SVG inlining and base64 encoding
|
|
490
|
+
report-html.ts # HTML report generation
|
|
491
|
+
vim-generator.ts # Visual Identity Manifest + system integration markdown
|
|
492
|
+
runtime-compiler.ts # Compile brand-runtime.json from 4 source YAMLs
|
|
493
|
+
interaction-policy-compiler.ts # Compile interaction-policy.json (enforceable rules)
|
|
494
|
+
response.ts # Structured MCP response builder
|
|
495
|
+
version.ts # Package version reader
|
|
496
|
+
types/
|
|
497
|
+
index.ts # TypeScript type definitions
|
|
498
|
+
schemas/
|
|
499
|
+
index.ts # Zod schemas for validation (7 schema files)
|
|
500
|
+
bin/
|
|
501
|
+
brandsystem-mcp.mjs # CLI entry point
|
|
502
|
+
specs/
|
|
503
|
+
brand-runtime-schema.md # Runtime contract documentation
|
|
504
|
+
interaction-policy-schema.md # Interaction policy documentation
|
|
505
|
+
test/
|
|
506
|
+
lib/ # Library unit tests (9 files)
|
|
507
|
+
tools/ # Tool tests (2 files: export + smoke)
|
|
508
|
+
server.test.ts # Server creation smoke test
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
---
|
|
512
|
+
|
|
513
|
+
## License
|
|
514
|
+
|
|
515
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
2
|
+
import { createServer } from "./server.js";
|
|
3
|
+
process.on("uncaughtException", (err) => {
|
|
4
|
+
console.error("[brandsystem-mcp] Uncaught exception:", err);
|
|
5
|
+
process.exit(1);
|
|
6
|
+
});
|
|
7
|
+
process.on("unhandledRejection", (reason) => {
|
|
8
|
+
console.error("[brandsystem-mcp] Unhandled rejection:", reason);
|
|
9
|
+
process.exit(1);
|
|
10
|
+
});
|
|
11
|
+
try {
|
|
12
|
+
const server = createServer();
|
|
13
|
+
const transport = new StdioServerTransport();
|
|
14
|
+
await server.connect(transport);
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
console.error("[brandsystem-mcp] Failed to start server:", err);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;IACtC,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,MAAM,CAAC,CAAC;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC;IACH,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,GAAG,CAAC,CAAC;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { BrandConfigData, CoreIdentityData, NeedsClarificationData, VisualIdentityData, MessagingData, ContentStrategyData, BrandRuntimeData, InteractionPolicyData } from "../schemas/index.js";
|
|
2
|
+
import type { TokensFileData } from "../schemas/index.js";
|
|
3
|
+
import type { AssetManifestEntry } from "../types/index.js";
|
|
4
|
+
export interface AssetManifest {
|
|
5
|
+
assets: AssetManifestEntry[];
|
|
6
|
+
}
|
|
7
|
+
export declare class BrandDir {
|
|
8
|
+
readonly root: string;
|
|
9
|
+
readonly brandPath: string;
|
|
10
|
+
private locks;
|
|
11
|
+
constructor(cwd: string);
|
|
12
|
+
private withLock;
|
|
13
|
+
private path;
|
|
14
|
+
exists(): Promise<boolean>;
|
|
15
|
+
scaffold(): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Scaffold + write initial config and empty core identity in one call.
|
|
18
|
+
* Shared by brand_start and brand_init to avoid duplicated init logic.
|
|
19
|
+
*/
|
|
20
|
+
initBrand(config: BrandConfigData): Promise<void>;
|
|
21
|
+
private readYaml;
|
|
22
|
+
private writeYaml;
|
|
23
|
+
private readJson;
|
|
24
|
+
private writeJson;
|
|
25
|
+
readConfig(): Promise<BrandConfigData>;
|
|
26
|
+
writeConfig(data: BrandConfigData): Promise<void>;
|
|
27
|
+
readCoreIdentity(): Promise<CoreIdentityData>;
|
|
28
|
+
writeCoreIdentity(data: CoreIdentityData): Promise<void>;
|
|
29
|
+
readTokens(): Promise<TokensFileData>;
|
|
30
|
+
writeTokens(data: Record<string, unknown>): Promise<void>;
|
|
31
|
+
readClarifications(): Promise<NeedsClarificationData>;
|
|
32
|
+
writeClarifications(data: NeedsClarificationData): Promise<void>;
|
|
33
|
+
readVisualIdentity(): Promise<VisualIdentityData>;
|
|
34
|
+
writeVisualIdentity(data: VisualIdentityData): Promise<void>;
|
|
35
|
+
hasVisualIdentity(): Promise<boolean>;
|
|
36
|
+
writeMarkdown(filename: string, content: string): Promise<void>;
|
|
37
|
+
readMarkdown(filename: string): Promise<string>;
|
|
38
|
+
readMessaging(): Promise<MessagingData>;
|
|
39
|
+
writeMessaging(data: MessagingData): Promise<void>;
|
|
40
|
+
hasMessaging(): Promise<boolean>;
|
|
41
|
+
readStrategy(): Promise<ContentStrategyData>;
|
|
42
|
+
writeStrategy(data: ContentStrategyData): Promise<void>;
|
|
43
|
+
hasStrategy(): Promise<boolean>;
|
|
44
|
+
readRuntime(): Promise<BrandRuntimeData>;
|
|
45
|
+
writeRuntime(data: unknown): Promise<void>;
|
|
46
|
+
readPolicy(): Promise<InteractionPolicyData>;
|
|
47
|
+
writePolicy(data: unknown): Promise<void>;
|
|
48
|
+
hasRuntime(): Promise<boolean>;
|
|
49
|
+
listAssets(subdir: string): Promise<string[]>;
|
|
50
|
+
listAssetDirs(): Promise<string[]>;
|
|
51
|
+
writeAsset(relativePath: string, content: string | Buffer): Promise<void>;
|
|
52
|
+
readAsset(relativePath: string): Promise<string>;
|
|
53
|
+
readManifest(subdir: string): Promise<AssetManifest>;
|
|
54
|
+
writeManifest(subdir: string, data: AssetManifest): Promise<void>;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=brand-dir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand-dir.d.ts","sourceRoot":"","sources":["../../src/lib/brand-dir.ts"],"names":[],"mappings":"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"}
|