@teamix-evo/mcp 0.3.0 → 0.4.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.
Files changed (29) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +161 -162
  3. package/dist/cli.js.map +1 -1
  4. package/dist/data/adr/0001-three-layer-alignment.md +54 -0
  5. package/dist/data/adr/0002-package-naming.md +50 -0
  6. package/dist/data/adr/0003-update-strategy-tri-state.md +62 -0
  7. package/dist/data/adr/0004-cli-command-structure.md +61 -0
  8. package/dist/data/adr/0005-ui-no-variant.md +67 -0
  9. package/dist/data/adr/0006-ui-upgrade-no-baseline.md +67 -0
  10. package/dist/data/adr/0007-governance-docs-at-root.md +62 -0
  11. package/dist/data/adr/0008-eslint-visual-rules-warn-baseline.md +110 -0
  12. package/dist/data/adr/0009-registry-mcp-protocol-layer.md +87 -0
  13. package/dist/data/adr/0010-design-default-and-variants.md +319 -0
  14. package/dist/data/adr/0011-mcp-single-package-multi-group.md +169 -0
  15. package/dist/data/adr/0012-lint-shared-core.md +215 -0
  16. package/dist/data/adr/0013-skills-source-mirror.md +154 -0
  17. package/dist/data/adr/0014-ui-biz-ui-templates-tier.md +274 -0
  18. package/dist/data/adr/0015-skill-description-trigger-contract.md +122 -0
  19. package/dist/data/adr/0016-design-md-brand-charter.md +93 -0
  20. package/dist/data/adr/0017-mcp-design-group.md +107 -0
  21. package/dist/data/adr/0018-ai-context-routing.md +112 -0
  22. package/dist/data/adr/0019-project-upgrade-flow.md +156 -0
  23. package/dist/data/adr/0020-design-to-tokens-skill-fusion.md +139 -0
  24. package/dist/data/adr/README.md +70 -0
  25. package/dist/data/adr/_template.md +36 -0
  26. package/dist/index.d.ts +64 -59
  27. package/dist/index.js +168 -170
  28. package/dist/index.js.map +1 -1
  29. package/package.json +1 -1
@@ -0,0 +1,139 @@
1
+ # 0020. Design 包降级为 Tokens 包,设计知识全面迁入 Skills
2
+
3
+ - **Status**: Accepted
4
+ - **Date**: 2026-05-27
5
+ - **Region**: 0100–0999 协议与工具
6
+ - **Related ADR**: 0010 (supersedes design default-and-variants), 0016 (supersedes DESIGN.md brand charter ownership), 0017 (supersedes MCP design group)
7
+
8
+ ## Context
9
+
10
+ ### 问题
11
+
12
+ 1. **design 包职责过重**:同时承载构建时资产(tokens)和 AI 知识(philosophy / patterns / scenarios),两类内容的消费者完全不同(CSS bundler vs AI assistant)。
13
+ 2. **内容重复**:design 包的 patterns/page-types.md 等内容与 skills 包的 design-rules skill 有概念重复,维护时需要双处同步。
14
+ 3. **装机产物臃肿**:`design init` 向消费者项目写入大量 `.teamix-evo/design/**` 文件,而这些文件只有 AI 在运行时才读取——业务开发者实际只需要 tokens。
15
+ 4. **设计师侧已有完整规则体系**(`teamix-evo-design` 独立仓库),需要融合吸收到我们的工程体系中。
16
+ 5. **Tailwind v4 的 CSS-native 配置**使得 `tailwind.preset.ts` 已不需要,token 传递只需一个 `theme.css`。
17
+
18
+ ### 约束
19
+
20
+ - 消费者的 Tailwind CSS v4 构建工具链必须能 `@import` 到真实的 token CSS 文件
21
+ - AI 技能(skills)是跨 IDE 工作的唯一知识载体(Qoder / Claude / Cursor 均支持)
22
+ - 变体(opentrek / uni-manager)需要独立的完整技能包,不依赖"基线 + overlay"模式
23
+ - 与设计师侧 `teamix-evo-design` 仓库的融合路径要明确
24
+
25
+ ## Options Considered
26
+
27
+ | 选项 | 优点 | 缺点 |
28
+ | ---------------------------------------------------------- | ------------------ | ---------------------------------------- |
29
+ | A. 保持 design 包现有架构,手动同步 | 零改动 | 永远双处维护、新人困惑 |
30
+ | B. design 包保留但 "瘦身"(移除 patterns 等) | 改动较小 | 包名暗示它承载"设计",新人仍会在此找规则 |
31
+ | **C. design 改名 tokens,设计知识全量迁入 skills(选定)** | 包名即职责、零歧义 | 改动面大、需废弃多个 ADR |
32
+
33
+ ## Decision
34
+
35
+ ### 1. 包重命名与精简
36
+
37
+ - `packages/design/` → `packages/tokens/`,npm 包名 `@teamix-evo/design` → `@teamix-evo/tokens`
38
+ - tokens 包只保留:
39
+ - `tokens/` — token 源文件(theme.css + overrides.css 模板),按变体分目录
40
+ - `manifest.json` — 变体列表(供 CLI 枚举)
41
+ - 各变体的 `pack.json`(身份标识)
42
+ - 移除:`default/philosophy/`、`default/foundations/`(非 token 文件如 spacing.md)、`default/patterns/`、`default/scenarios/`、`variants/*/brand/`、所有 AGENTS.md/CLAUDE.md/DESIGN.md 模板
43
+
44
+ ### 2. Skills 目录重命名
45
+
46
+ - `packages/skills/skills/` → `packages/skills/src/`,消除冗余嵌套
47
+
48
+ ### 3. 设计基线 Skill 废弃,变体 Skill 自包含
49
+
50
+ - **删除** `teamix-evo-design-rules`(原基线 skill)
51
+ - **删除** `teamix-evo-design-rules-uni-manager`(暂不研发)
52
+ - `teamix-evo-design-rules-opentrek` 升级为**完整自包含技能**,含:
53
+ - SKILL.md(trigger + dispatcher)
54
+ - generation-flow.md(AI 行为流程)
55
+ - boundaries.md(硬约束)
56
+ - checklist.md(自检清单)
57
+ - rules/(页面类型、布局、组件规格、样式规则等)
58
+ - patterns/(列表页、详情页、表单页等具体模式)
59
+ - Skill 中**不硬写 token 具体值**,统一写"参照 `tokens/theme.css` 中的 `--spacing` 等变量"——让 AI 运行时读 token 文件获取实际值
60
+
61
+ ### 4. DESIGN.md 归属变更
62
+
63
+ - DESIGN.md 模板从 design 包移入 `packages/create/`,在 `npm create teamix-evo` 时生成到项目根目录
64
+ - 内容:品牌身份 + 设计理念 + 工具链指引(skills / eslint / ui / tokens 索引)
65
+
66
+ ### 5. Token 装机位置
67
+
68
+ - `teamix-evo design init <variant>` 改为 `teamix-evo tokens init <variant>`(或保留 design 作为 CLI alias)
69
+ - 装机产物位于**业务项目根目录**:
70
+ ```
71
+ my-project/
72
+ ├── tokens/
73
+ │ ├── theme.css ← @theme 声明(regenerable)
74
+ │ └── overrides.css ← 用户覆盖(frozen)
75
+ └── ...
76
+ ```
77
+ - 不再有 `.teamix-evo/design/` 和 `.teamix-evo/tokens/` 嵌套目录,tokens 直接在根 `tokens/`
78
+
79
+ ### 6. MCP 精简
80
+
81
+ - **移除** `design_list_principles`、`design_list_patterns`、`design_get_pattern`、`design_get_brand`
82
+ - **保留并重命名** `design_get_tokens` → `tokens_get`(从项目根 `tokens/` 读取)
83
+ - 设计知识 AI 直接从 skill 文件读取,不绕 MCP
84
+
85
+ ### 7. 通用 vs 变体内容治理
86
+
87
+ - 通过 ADR 文档约束研发时哪些内容是"通用知识"(可跨变体复用),哪些是"变体独有"
88
+ - 通用知识(如"间距必须 4px 倍数""危险操作必须二次确认")在 ADR 中定义,各变体 skill 引用 ADR 编号
89
+ - 变体独有内容(如"OpenTrek 品牌色用法""AI 副驾驶场景")仅在对应 skill 中维护
90
+ - 新增变体时,从现有变体 skill 复制并修改,通过 ADR 引用确保通用规则一致
91
+
92
+ ### 8. preferences.css 归属
93
+
94
+ - `preferences.css` 从 design 包迁入 `packages/ui/`,随 `ui init` 装机
95
+
96
+ ## Consequences
97
+
98
+ - **Positive**:
99
+ - 包名即职责(tokens 包只有 tokens,skills 包只有 AI 知识)
100
+ - 消费者项目更干净(根 tokens/ + DESIGN.md,无 `.teamix-evo/design/` 树)
101
+ - AI 单次读取 skill 即获得完整上下文(无需先读 skill 再跳转 `.teamix-evo/design/` 读内容)
102
+ - 设计师侧内容融合路径明确(→ opentrek skill 的 rules/ 和 patterns/)
103
+ - Tailwind v4 对齐(只需 `@import "../../tokens/theme.css"`)
104
+ - **Negative**:
105
+ - 改动面大(20+ 文件,多个 CLI/MCP 源码文件需修改)
106
+ - ADR 0010 / 0016 / 0017 废弃,需要时间收敛文档
107
+ - 旧版本消费者项目升级只需 `mv .teamix-evo/tokens tokens`
108
+ - **Trade-off**:
109
+ - 为了包名语义清晰和 AI-first 体验,放弃了 design 包作为"设计体系知识中心"的传统定位
110
+ - 为了变体 skill 自包含,放弃了"基线 + overlay"的 DRY 复用,接受少量跨变体内容重复(通过 ADR 引用治理)
111
+
112
+ ## Migration Path
113
+
114
+ ### Phase 1: 结构变更(本次执行)
115
+
116
+ 1. `packages/design/` → `packages/tokens/`,更新 package.json name
117
+ 2. tokens 包精简内容(只留 token 文件 + manifest)
118
+ 3. `packages/skills/skills/` → `packages/skills/src/`
119
+ 4. 删除 `teamix-evo-design-rules` 和 `teamix-evo-design-rules-uni-manager`
120
+ 5. 重构 `teamix-evo-design-rules-opentrek` 为完整技能(吸收设计师规则)
121
+ 6. MCP design group 精简为 tokens_get
122
+ 7. CLI design-init 核心逻辑适配
123
+
124
+ ### Phase 2: 引用收敛
125
+
126
+ 8. 更新所有文档(AGENTS.md、architecture.md、ADR 索引)
127
+ 9. 更新 CLI 命令实现(design → tokens 或保持 design alias)
128
+ 10. 更新 registry schema(design-pack → tokens-pack)
129
+ 11. 更新 check-variant-sync 等脚本
130
+
131
+ ### Phase 3: 消费者侧迁移
132
+
133
+ 12. CLI 新增 `tokens migrate` 命令(`.teamix-evo/tokens/` → 根 `tokens/`,已实现核心路径变更)
134
+ 13. create 包 preset 模板直接使用根 `tokens/` 结构
135
+ 14. 文档站更新安装指引
136
+
137
+ ## Source
138
+
139
+ 对话决策(2026-05-27)— 设计师侧 `teamix-evo-design` 仓库与工程侧 design 包融合分析中,确认了"按消费者分包"原则:tokens 归构建工具链,设计知识归 AI skills。
@@ -0,0 +1,70 @@
1
+ # Architecture Decision Records
2
+
3
+ > 本目录沉淀 Teamix Evo 的"为什么这么做"——决策的上下文、选项、取舍与后果。
4
+ > 设计参照 [Michael Nygard. *Documenting Architecture Decisions*. 2011](https://www.cognitect.com/blog/2011/11/15/documenting-architecture-decisions)。
5
+
6
+ ## 为什么需要 ADR
7
+
8
+ [`PLAN.md`](../../PLAN.md) 是 71KB 的路线图,记录"做什么 / 怎么做 / 何时做"。但当问"为什么当初选了 A 而不是 B"时,PLAN.md 给不出答案——它的附录 B 变更记录只有"做了什么",没有"为什么是这个选项"。
9
+
10
+ ADR 补这一层。每条 ADR 是一份**单决策档案**:在某一时刻、某一上下文下、为什么我们选了这个选项、付出了什么代价。
11
+
12
+ ## 编号区段约定
13
+
14
+ ADR 按编号区段对应 [PLAN §12](../../PLAN.md#12-五层模型驱动的演进规划v05) 的抽象层:
15
+
16
+ | 编号区段 | 抽象层 | 内容 |
17
+ | --- | --- | --- |
18
+ | 0001–0099 | 工程哲学(Philosophy) | 跨工种共享、几乎不变的工程理念 |
19
+ | 0100–0999 | 协议与工具(Foundations + Patterns) | CLI 命令、Schema、组件、Skills、MCP 等具体协议决策 |
20
+ | 1000+ | 业务消费方决策(Scenarios) | 真实业务团队装机后的领域决策 |
21
+
22
+ > **种子 ADR 的特殊处理**:0001–0006 是 P0-1 任务从 PLAN.md §1 / §10 / §11 / 附录 B 反向沉淀的"已发生决策",作为种子条目使用顺序号,不严格按区段分配。从 0007 起按区段约定执行。
23
+
24
+ ## 当前 ADR 索引
25
+
26
+ | # | 标题 | 状态 | 日期 |
27
+ | --- | --- | --- | --- |
28
+ | 0001 | [三层对齐(能力/理念/工程)](0001-three-layer-alignment.md) | Accepted | 2026-05-15 |
29
+ | 0002 | [包命名方案](0002-package-naming.md) | Accepted | 2026-05-13 |
30
+ | 0003 | [资源升级三态语义](0003-update-strategy-tri-state.md) | Accepted | 2026-05-13 |
31
+ | 0004 | [CLI 命令结构](0004-cli-command-structure.md) | Accepted | 2026-05-13 |
32
+ | 0005 | [UI 包不分 variant](0005-ui-no-variant.md) | Accepted | 2026-05-14 |
33
+ | 0006 | [UI 升级机制无 baseline](0006-ui-upgrade-no-baseline.md) | Accepted | 2026-05-14 |
34
+ | 0007 | [治理文档放根目录,与 packages/docs/ 分离](0007-governance-docs-at-root.md) | Accepted | 2026-05-17 |
35
+ | 0008 | [ESLint 视觉规则暂为 warn 级,等待 design 补 token](0008-eslint-visual-rules-warn-baseline.md) | Accepted | 2026-05-17 |
36
+ | 0009 | [registry-mcp 作为 AI 协议层的第一个 MCP server](0009-registry-mcp-protocol-layer.md) | Superseded in part by 0011 | 2026-05-17 |
37
+ | 0010 | [design 默认+变体模型(default + variants/ + extends,文件级覆盖)](0010-design-default-and-variants.md) | Proposed | 2026-05-18 |
38
+ | 0011 | [MCP 单包单 bin 多 group + registry-mcp 改名 mcp](0011-mcp-single-package-multi-group.md) | Proposed | 2026-05-18 |
39
+ | 0012 | [ESLint/Stylelint 双包共享 lint-core 内核](0012-lint-shared-core.md) | Proposed | 2026-05-18 |
40
+ | 0013 | [Skills source-mirror 模型(.teamix-evo/skills/ 为源)](0013-skills-source-mirror.md) | Proposed | 2026-05-18 |
41
+ | 0014 | [ui / biz-ui / templates 三层包分层(三包共享变体名空间)](0014-ui-biz-ui-templates-tier.md) | Proposed | 2026-05-18 |
42
+ | 0019 | [已有工程升级 Teamix Evo 流程(语义合并 / 变体迁移 / cva codemod)](0019-project-upgrade-flow.md) | Proposed | 2026-05-21 |
43
+
44
+ ## 写新 ADR 的流程
45
+
46
+ 1. **触发**:遇到"两条以上路都能跑通,需要选一条且代价不可逆"的决策
47
+ 2. **复制模板**:`cp _template.md NNNN-<short-slug>.md`(NNNN 按所属区段递增)
48
+ 3. **填写五段**:Status / Context / Decision / Consequences / Source
49
+ 4. **PR**:同 PR 内修改对应代码 + 此 ADR
50
+ 5. **登记**:更新本 README 索引表
51
+ 6. **生命周期**:Accepted → Superseded(被新 ADR 替代时不删,标 Superseded by NNNN)/ Deprecated(决策不再适用但无替代方案)
52
+
53
+ ## 状态值
54
+
55
+ | 状态 | 含义 |
56
+ | ---- | ---- |
57
+ | Proposed | 草案,等待评审 |
58
+ | Accepted | 已采纳并执行 |
59
+ | Superseded by NNNN | 被另一条 ADR 替代 |
60
+ | Deprecated | 决策不再适用,但无新替代 |
61
+
62
+ ## 反向约束
63
+
64
+ reviewer subagent(规划于 [v0.7](../../PLAN.md#126-v07--协议层升级15-22-人日))会在 PR 时主动引用相关 ADR,检测变更是否违反某条已 Accepted 的决策。当代码改动需要绕开某条 ADR 时,正确流程是:
65
+
66
+ 1. 写一条新 ADR(状态 Proposed)说明为什么要修改
67
+ 2. 评审通过后将旧 ADR 标 Superseded by 新 ADR
68
+ 3. 再修改代码
69
+
70
+ 不允许"改代码绕开已有 ADR 而不留任何 ADR 痕迹"。
@@ -0,0 +1,36 @@
1
+ # NNNN. <一句话决策标题>
2
+
3
+ - **Status**: Proposed | Accepted | Superseded by NNNN | Deprecated
4
+ - **Date**: YYYY-MM-DD
5
+ - **Region**: 0001–0099 工程哲学 | 0100–0999 协议与工具 | 1000+ 业务消费方
6
+ - **Related ADR**: (引用相关 ADR 编号,可空)
7
+
8
+ ## Context
9
+
10
+ <决策的背景:面对什么问题、有哪些约束、为什么不能不做。>
11
+
12
+ ## Options Considered
13
+
14
+ | 选项 | 优点 | 缺点 |
15
+ | ---- | ---- | ---- |
16
+ | A | | |
17
+ | B | | |
18
+
19
+ (若决策本身只有一个明显选项,可省略本节)
20
+
21
+ ## Decision
22
+
23
+ <决策内容,陈述句。能用一句话概括最好,否则用编号 list。>
24
+
25
+ ## Consequences
26
+
27
+ - **Positive**:
28
+ - <好的后果>
29
+ - **Negative**:
30
+ - <代价、风险>
31
+ - **Trade-off**:
32
+ - <为了得到 X 我们放弃了 Y>
33
+
34
+ ## Source
35
+
36
+ <决策的原始出处:PLAN.md §X / 某次对话 / 某个 issue / 某份外部资料>
package/dist/index.d.ts CHANGED
@@ -100,9 +100,11 @@ interface LoadedAdrs {
100
100
  * Resolves the ADR directory using a layered strategy:
101
101
  *
102
102
  * 1. `TEAMIX_EVO_ADR_ROOT` env var (absolute path)
103
- * 2. Walk up from cwd looking for `docs/adr/` (monorepo layout)
104
- * 3. Walk up from cwd looking for `.teamix-evo/adr/` (consumer layout future)
105
- * 4. Throws with a clear error
103
+ * 2. Bundled snapshot at `<mcp-pkg>/dist/data/adr/` (works in consumer projects
104
+ * after `pnpm add @teamix-evo/mcp` see tsup.config.ts onSuccess copy)
105
+ * 3. Walk up from cwd looking for `docs/adr/` (monorepo layout)
106
+ * 4. Walk up from cwd looking for `.teamix-evo/adr/` (consumer override)
107
+ * 5. Throws with a clear error
106
108
  */
107
109
  declare function resolveAdrRoot(startDir?: string): string;
108
110
  declare function loadAdrIndex(rootDir?: string): LoadedAdrs;
@@ -151,34 +153,17 @@ interface SkillsGroupOptions {
151
153
  }
152
154
  declare function createSkillsGroup(opts?: SkillsGroupOptions): ToolGroup;
153
155
 
154
- interface LoadedDesign {
155
- /** Absolute path to `.teamix-evo/design/` in the consumer project. */
156
+ interface LoadedTokens {
157
+ /** Absolute path to `.teamix-evo/` in the consumer project. */
156
158
  rootDir: string;
157
- /** Variant name read from `pack.lock.json`, or null if missing. */
159
+ /** Variant name read from `tokens-lock.json`, or null if missing. */
158
160
  variant: string | null;
159
161
  }
160
- declare function resolveDesignRoot(startDir?: string): string | null;
161
- declare function loadDesign(rootDir?: string): LoadedDesign | null;
162
- interface PrincipleEntry {
163
- id: string;
164
- name: string;
165
- oneLineDef: string;
166
- }
167
- /**
168
- * Parse `philosophy/principles.md` for headings of the form `## P1 · Name`.
169
- * Returns the principle id, display name, and the first non-blank line below
170
- * the heading as a one-line definition.
171
- */
172
- declare function readPrinciples(loaded: LoadedDesign): {
173
- principles: PrincipleEntry[];
174
- sourcePath: string | null;
175
- note?: string;
176
- };
162
+ declare function resolveTokensRoot(startDir?: string): string | null;
163
+ declare function loadTokens(rootDir?: string): LoadedTokens | null;
177
164
  interface TokenSnapshot {
178
165
  /** Parsed contents of `base.tokens.json` if present. */
179
166
  base?: unknown;
180
- /** Parsed contents of `semantic.tokens.json` if present. */
181
- semantic?: unknown;
182
167
  /** Raw text of `tokens.theme.css` if present. */
183
168
  themeCss?: string;
184
169
  /** Raw text of `tokens.overrides.css` if present (user-owned overrides). */
@@ -187,50 +172,70 @@ interface TokenSnapshot {
187
172
  sources: string[];
188
173
  note?: string;
189
174
  }
190
- declare function readTokens(loaded: LoadedDesign): TokenSnapshot;
191
- interface PatternIndexEntry {
192
- id: string;
193
- title: string;
194
- sourcePath: string;
195
- variantSpecific: boolean;
175
+ declare function readTokens(loaded: LoadedTokens): TokenSnapshot;
176
+ interface TokenEntry {
177
+ /** Top-level group from base.tokens.json, e.g. "color" / "radius" / "spacing". */
178
+ category: string;
179
+ /** Token leaf name within the category, e.g. "primary" / "card-foreground". */
180
+ name: string;
181
+ /** W3C `$type` declared on the token, when present. */
182
+ type?: string;
183
+ /**
184
+ * Resolved values keyed by mode. For W3C tokens with `light` / `dark`
185
+ * sub-objects we emit both; for flat tokens (single `$value`) we emit
186
+ * `default`.
187
+ */
188
+ values: Record<string, string>;
189
+ /** First non-empty `$description` found on the token or its modes. */
190
+ description?: string;
196
191
  }
197
- declare function readPatternIndex(loaded: LoadedDesign): PatternIndexEntry[];
198
- declare function readPatternContent(loaded: LoadedDesign, id: string): {
199
- id: string;
200
- sourcePath: string;
201
- content: string;
202
- } | null;
203
- interface BrandSnapshot {
204
- tone?: {
205
- sourcePath: string;
206
- content: string;
207
- };
208
- voice?: {
209
- sourcePath: string;
210
- content: string;
211
- };
212
- examples?: {
213
- sourcePath: string;
214
- content: string;
215
- };
192
+ /**
193
+ * Flatten a W3C-format design-token JSON tree into a list of token entries.
194
+ *
195
+ * The format we ingest is the one shipped by `@teamix-evo/tokens`:
196
+ *
197
+ * { color: { primary: { $type, light: { $value, $description }, dark: { ... } } } }
198
+ *
199
+ * For tokens with `$value` directly under the leaf (no light/dark split) we
200
+ * emit `values = { default: <value> }`.
201
+ *
202
+ * Top-level keys starting with `$` (e.g. `$schema`, `$version`) are skipped.
203
+ */
204
+ declare function flattenTokens(base: unknown): TokenEntry[];
205
+ interface TokenListResult {
206
+ variant: string | null;
207
+ tokens: TokenEntry[];
208
+ sources: string[];
216
209
  note?: string;
217
210
  }
218
- declare function readBrand(loaded: LoadedDesign): BrandSnapshot;
211
+ declare function listTokens(loaded: LoadedTokens): TokenListResult;
212
+ interface TokenSearchResult {
213
+ variant: string | null;
214
+ query: string;
215
+ matches: TokenEntry[];
216
+ sources: string[];
217
+ note?: string;
218
+ }
219
+ /**
220
+ * Substring match across category / name / description / values. Case-insensitive.
221
+ * Returns up to `limit` (default 20) matches ordered by category > name.
222
+ */
223
+ declare function searchTokens(loaded: LoadedTokens, query: string, limit?: number): TokenSearchResult;
219
224
 
220
- interface DesignGroupOptions {
221
- /** Pre-loaded design snapshot (used by tests). When omitted, the loader walks cwd. */
222
- loaded?: LoadedDesign | null;
225
+ interface TokensGroupOptions {
226
+ /** Pre-loaded tokens snapshot (used by tests). When omitted, the loader walks cwd. */
227
+ loaded?: LoadedTokens | null;
223
228
  /** Override the start directory for cwd-relative resolution (used by tests). */
224
229
  rootDir?: string;
225
230
  }
226
- declare function createDesignGroup(opts?: DesignGroupOptions): ToolGroup;
231
+ declare function createTokensGroup(opts?: TokensGroupOptions): ToolGroup;
227
232
 
228
233
  /**
229
234
  * Main MCP server — composes multiple tool groups into one stdio process.
230
235
  *
231
236
  * Architecture per [ADR 0011](../../../docs/adr/0011-mcp-single-package-multi-group.md):
232
237
  * single package / single bin / multiple tool groups. Groups added in later
233
- * milestones (design v0.6, adr v0.7, scenario v0.8) plug in here without
238
+ * milestones (tokens v0.6, adr v0.7, scenario v0.8) plug in here without
234
239
  * touching the transport or ListTools/CallTool handler logic.
235
240
  *
236
241
  * Tool dispatch:
@@ -249,9 +254,9 @@ interface ServerOptions {
249
254
  adr?: AdrGroupOptions;
250
255
  /** Options forwarded to the skills group. Pass `loaded` in tests. */
251
256
  skills?: SkillsGroupOptions;
252
- /** Options forwarded to the design group. Pass `loaded` in tests. */
253
- design?: DesignGroupOptions;
257
+ /** Options forwarded to the tokens group. Pass `loaded` in tests. */
258
+ tokens?: TokensGroupOptions;
254
259
  }
255
260
  declare function createServer(opts?: ServerOptions): Server;
256
261
 
257
- export { type AdrEntry, type AdrGroupOptions, type BrandSnapshot, type DesignGroupOptions, type LoadedAdrs, type LoadedDesign, type LoadedManifest, type LoadedSkills, type ParsedMeta, type PatternIndexEntry, type PrincipleEntry, type RegistryGroupOptions, type ServerOptions, type SkillContent, type SkillsGroupOptions, type TokenSnapshot, type ToolGroup, type ToolResult, createAdrGroup, createDesignGroup, createRegistryGroup, createServer, createSkillsGroup, findAdr, findSkill, loadAdrContent, loadAdrIndex, loadDesign, loadManifest, loadMeta, loadSkillContent, loadSkillsManifest, readBrand, readPatternContent, readPatternIndex, readPrinciples, readTokens, resolveAdrRoot, resolveDesignRoot, resolveManifestPath, resolveSkillsRoot };
262
+ export { type AdrEntry, type AdrGroupOptions, type LoadedAdrs, type LoadedManifest, type LoadedSkills, type LoadedTokens, type ParsedMeta, type RegistryGroupOptions, type ServerOptions, type SkillContent, type SkillsGroupOptions, type TokenEntry, type TokenListResult, type TokenSearchResult, type TokenSnapshot, type TokensGroupOptions, type ToolGroup, type ToolResult, createAdrGroup, createRegistryGroup, createServer, createSkillsGroup, createTokensGroup, findAdr, findSkill, flattenTokens, listTokens, loadAdrContent, loadAdrIndex, loadManifest, loadMeta, loadSkillContent, loadSkillsManifest, loadTokens, readTokens, resolveAdrRoot, resolveManifestPath, resolveSkillsRoot, resolveTokensRoot, searchTokens };