@design-ai/cli 4.64.0 → 4.65.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "design-ai",
3
- "version": "4.64.0",
3
+ "version": "4.65.0",
4
4
  "description": "Senior product designer for any AI coding agent. 20 skills, 17 commands, 4 review agents covering UI/UX, website improvement, design systems, motion, illustration, print, video, game UI, conversational, and spatial design. Korean market depth.",
5
5
  "author": {
6
6
  "name": "Sungjin Park",
package/CHANGELOG.md CHANGED
@@ -2,6 +2,32 @@
2
2
 
3
3
  User-facing release notes for design-ai. Versions follow semver.
4
4
 
5
+ ## v4.65.0 — MCP ↔ SDK parity: recall and opt-in learning-write tools (2026-07)
6
+
7
+ Closes the parity gap the 2026-07-07 planning window fact-checked: the MCP server — the primary agent surface — had no recall tool and no learning-write tools, while the SDK shipped both. An MCP-connected agent can now run the same recall → author → check → capture loop the Agent SDK walkthrough demonstrates. The MCP server grows from 10 to **14 tools**; all additions are additive and the write tools are strictly opt-in.
8
+
9
+ ### Added
10
+ - **`design_ai_recall`** (read-only) — combined corpus + learning-profile recall for a query, ranked by the deterministic lexical scorer (wraps `learn --recall`), with `limit` (1-20) and learning-`category` filters.
11
+ - **`design_ai_learn_remember`**, **`design_ai_learn_feedback`** (outcome enum `keep`/`improve`/`avoid`, mirroring the CLI's real `--outcome` flag), **`design_ai_learn_capture`** (check an artifact, then capture its non-pass results — the only compound read+write tool). All three mirror the SDK `learn.*` boundary: they write ONLY the local learning profile (`DESIGN_AI_LEARNING_FILE` or its default), only when explicitly called, and never the network. The shared write-boundary language in the tool descriptions is guarded by a test, and the server's instructions name the write set explicitly so agents keep preferring read-only tools by default.
12
+
13
+ ### Changed
14
+ - MCP input validation gains enum support: `category` and `outcome` are validated against the CLI's own value sets before any CLI invocation.
15
+
16
+ ### Verified
17
+ - All 8 audits passed.
18
+ - `npm run release:check`.
19
+ - `npm run release:metadata`.
20
+ - `git diff --check`.
21
+ - Real-server stdio E2E: initialize → tools/list (14) → live recall query → remember/capture against a temp learning profile with the file verified after each write.
22
+ - Main-branch GitHub Actions (`Design-AI audit`, `Deploy doc site`) passed for the constituent commits.
23
+
24
+ ### Versions
25
+ - `package.json` + `.claude-plugin/plugin.json`: 4.64.0 → 4.65.0.
26
+ - `vscode-extension/package.json`: remains 0.4.1.
27
+
28
+ ### What this enables
29
+ - MCP consumers (Claude Code, Codex, any MCP client) get full parity with the Agent SDK: standalone combined recall, and an explicit, clearly-bounded way to record preferences, feedback, and check-derived learnings into the local profile — completing the learn loop on the surface where design-ai is most consumed.
30
+
5
31
  ## v4.64.0 — Route coverage sweep: marketing-page route and 18-class routing (2026-07)
6
32
 
7
33
  Generalizes the two dogfood rounds' converged finding — route-table coverage is the recurring gap class — into one systematic batch. Eighteen common task classes were probed through `route()`; thirteen were low/misrouted/zero-match despite the knowledge corpus already covering nearly every one of them (a pricing-page brief scored 0 with `pricing-page-design.md` sitting in the corpus). All fixed in one pass; evidence tables in `docs/ROUTE-COVERAGE-SWEEP.md`. Additive and backward-compatible.
package/README.ko.md CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  > **모델이 아니에요. 파인튜닝도 아니에요.** 디자인 전문 지식을 구조화한 코퍼스 + 에이전트가 바로 실행할 수 있는 지시문이에요. 범용 LLM을 이번 세션에서만큼은 시니어 디자이너로 바꿔주는 셈이에요.
14
14
 
15
- > **배포 상태, 2026-07-07 확인:** 로컬 `npm run release:check`는 통과했고, GitHub Pages 문서는 live 상태이며, GitHub Release `v4.63.0`과 npm `@design-ai/cli@4.63.0`(`latest`) publish가 provenance와 함께 확인됐어요. 이번 릴리스는 도그푸드 루프 2회전이에요데이터 밀집 화면 클래스를 위한 `dashboard-design` 라우트(금액 표기·테이블 접근성·밀도 check 요건)와 정산 워크드 예제, 그리고 `flow-design` 키워드 심화(한글 스텝 플로우 어휘 + 상태 설계 복합어, illustration 라우트와 양방향 검증). live `npm run registry:smoke`가 published `@design-ai/cli@4.63.0`에 대해 깨끗이 통과했어요(retrieval 표면과 route enrichment 포함). Homebrew formula는 `v4.63.0`에 pinning되어 있고, VS Code Marketplace에는 `sungjin.design-ai-vscode@0.4.1`이 공개되어 있어요. 자세한 내용은 [`docs/external-status.md`](docs/external-status.md)를 확인하세요.
15
+ > **배포 상태, 2026-07-07 확인:** 로컬 `npm run release:check`는 통과했고, GitHub Pages 문서는 live 상태이며, GitHub Release `v4.64.0`과 npm `@design-ai/cli@4.64.0`(`latest`) publish가 provenance와 함께 확인됐어요. 이번 릴리스는 라우트 커버리지 스윕이에요신규 `marketing-page` 라우트(랜딩·가격 페이지·이메일 템플릿, CTA/위계/이메일 클라이언트 check 요건)와 SaaS 랜딩 워크드 예제, `dashboard-design` 차트·권한 확장, `flow-design` 9클래스 키워드 배치로 프로브한 18개 클래스 전부가 medium+ 신뢰도로 라우팅돼요. live `npm run registry:smoke`가 published `@design-ai/cli@4.64.0`에 대해 깨끗이 통과했어요(retrieval 표면과 route enrichment 포함). Homebrew formula는 `v4.64.0`에 pinning되어 있고, VS Code Marketplace에는 `sungjin.design-ai-vscode@0.4.1`이 공개되어 있어요. 자세한 내용은 [`docs/external-status.md`](docs/external-status.md)를 확인하세요.
16
16
 
17
17
  ## 한눈에 보는 커버리지
18
18
 
@@ -172,7 +172,7 @@ design-ai는 한국 시장을 1순위로 만들어졌고, 글로벌 시장 패
172
172
 
173
173
  ## 상태
174
174
 
175
- 전체 단계 로그는 [`docs/ROADMAP.md`](docs/ROADMAP.md), 현재 완료 범위는 [`docs/PRODUCT-READINESS.md`](docs/PRODUCT-READINESS.md)에서 확인하세요. 현재 **v4.63.0**: 도그푸드 루프 2회전(`flow-design`+`dashboard-design` 라우트, trust & safety 코퍼스, 디자인 지식 전용 recall, `pack` 바이트 예산 보장, SDK 워크스루), ranked-search eval 체크포인트(`search --eval`), Agent SDK(`@design-ai/cli/sdk`) — TypeScript 선언 + opt-in `learn.*` 로컬 쓰기 네임스페이스, public npm publish, provenance-backed GitHub Actions release, public registry smoke, Website Console MCP readiness, workspace learning restore/eval coverage, handoff bundle verification, 90%+ component coverage가 완료됐어요.
175
+ 전체 단계 로그는 [`docs/ROADMAP.md`](docs/ROADMAP.md), 현재 완료 범위는 [`docs/PRODUCT-READINESS.md`](docs/PRODUCT-READINESS.md)에서 확인하세요. 현재 **v4.64.0**: 18개 태스크 클래스 전면 라우트 커버리지(`flow-design`·`dashboard-design`·`marketing-page` 라우트, trust & safety 코퍼스, 디자인 지식 전용 recall, `pack` 바이트 예산 보장, SDK 워크스루), ranked-search eval 체크포인트(`search --eval`), Agent SDK(`@design-ai/cli/sdk`) — TypeScript 선언 + opt-in `learn.*` 로컬 쓰기 네임스페이스, public npm publish, provenance-backed GitHub Actions release, public registry smoke, Website Console MCP readiness, workspace learning restore/eval coverage, handoff bundle verification, 90%+ component coverage가 완료됐어요.
176
176
 
177
177
  핵심 디자인 컨설팅 워크플로우는 로컬 릴리스 기준으로 준비되어 있어요. 웹사이트 개선 컨트롤 타워는 zero-dependency static Web App과 `website-improvement` route/skill/command로 제공되고, Site Profile, audit checklist, MCP readiness, refactor prompt, handoff evidence tracking, bundle export/verify/repair를 한 번에 다뤄요. 로컬 학습 선호도는 `design-ai learn`으로 관리해요 — profile bootstrap, feedback 캡처, 읽기 전용 signal registry, 반복 QA 신호에서 만드는 skill 제안, 그리고 backup/restore/curate/audit까지 전부 로컬에서만 동작하는 opt-in 기능이에요. AI 모델 학습이나 fine-tuning은 여전히 현재 배포 범위 밖이에요.
178
178
 
package/README.md CHANGED
@@ -12,7 +12,7 @@ A model-agnostic design knowledge base + skill system. Drop it in front of any A
12
12
 
13
13
  > **Not a model. Not a fine-tune.** A structured corpus of design expertise + agent-ready instructions that turn a general-purpose LLM into an expert.
14
14
 
15
- > **Distribution status, checked 2026-07-07:** local `npm run release:check` passes, GitHub Pages docs are live, GitHub Release `v4.63.0` is published, `@design-ai/cli@4.63.0` is public on npm (`latest`) with provenance, and the live `npm run registry:smoke` passes cleanly against `@design-ai/cli@4.63.0`. The Homebrew formula is pinned to `v4.63.0`, and `sungjin.design-ai-vscode@0.4.1` is public on the VS Code Marketplace. See [`docs/external-status.md`](docs/external-status.md).
15
+ > **Distribution status, checked 2026-07-07:** local `npm run release:check` passes, GitHub Pages docs are live, GitHub Release `v4.64.0` is published, `@design-ai/cli@4.64.0` is public on npm (`latest`) with provenance, and the live `npm run registry:smoke` passes cleanly against `@design-ai/cli@4.64.0`. The Homebrew formula is pinned to `v4.64.0`, and `sungjin.design-ai-vscode@0.4.1` is public on the VS Code Marketplace. See [`docs/external-status.md`](docs/external-status.md).
16
16
 
17
17
  ## Coverage at a glance
18
18
 
@@ -214,7 +214,7 @@ Refresh refs/ on demand: `./tools/extractors/run-all.sh`.
214
214
 
215
215
  ## Status
216
216
 
217
- See [`docs/ROADMAP.md`](docs/ROADMAP.md) for the full phase log and [`docs/PRODUCT-READINESS.md`](docs/PRODUCT-READINESS.md) for the current completion boundary. Currently at **v4.63.0**: two dogfood-loop turns (`flow-design` + `dashboard-design` routes, trust & safety corpus, design-knowledge-only recall, `pack` byte-budget guarantee, SDK walkthrough), the ranked-search eval checkpoint (`search --eval`), the Agent SDK (`@design-ai/cli/sdk`) with shipped TypeScript types and the opt-in `learn.*` local-write namespace, public npm publish, provenance-backed GitHub Actions release, public registry smoke, Website Console MCP readiness, workspace learning restore/eval coverage, handoff bundle verification, and 90%+ component coverage are complete.
217
+ See [`docs/ROADMAP.md`](docs/ROADMAP.md) for the full phase log and [`docs/PRODUCT-READINESS.md`](docs/PRODUCT-READINESS.md) for the current completion boundary. Currently at **v4.64.0**: full route coverage across 18 probed task classes (`flow-design`, `dashboard-design`, `marketing-page` routes, trust & safety corpus, design-knowledge-only recall, `pack` byte-budget guarantee, SDK walkthrough), the ranked-search eval checkpoint (`search --eval`), the Agent SDK (`@design-ai/cli/sdk`) with shipped TypeScript types and the opt-in `learn.*` local-write namespace, public npm publish, provenance-backed GitHub Actions release, public registry smoke, Website Console MCP readiness, workspace learning restore/eval coverage, handoff bundle verification, and 90%+ component coverage are complete.
218
218
 
219
219
  Core design consulting workflows are locally release-ready. The website improvement control tower ships as a zero-dependency static Web App plus a `website-improvement` route/skill/command, covering Site Profiles, audit checklists, MCP readiness, refactor prompts, handoff evidence tracking, and bundle export/verify/repair. Local learning preferences are available through `design-ai learn` — profile bootstrap, feedback capture, a read-only signals registry, skill-proposal generation from repeated QA signals, and full backup/restore/curate/audit tooling, all local-only and opt-in. AI model training or fine-tuning remains outside the shipped scope.
220
220
 
@@ -6,8 +6,10 @@ import { readFileSync } from "node:fs";
6
6
  import path from "node:path";
7
7
 
8
8
  import { DESIGN_AI_HOME, PACKAGE_ROOT } from "./paths.mjs";
9
+ import { LEARNING_CATEGORIES, LEARNING_FEEDBACK_OUTCOMES } from "./learn-args.mjs";
9
10
 
10
11
  const PROTOCOL_VERSION = "2025-11-25";
12
+ const LEARNING_WRITE_BOUNDARY = "Writes ONLY the local learning profile (DESIGN_AI_LEARNING_FILE or its default), and only when explicitly called.";
11
13
  const MAX_TOOL_OUTPUT_BYTES = 220_000;
12
14
  const DESIGN_AI_BIN = path.join(PACKAGE_ROOT, "cli", "bin", "design-ai.mjs");
13
15
  const MCP_RESPONSE_METHODS = new Set([
@@ -23,6 +25,10 @@ function optionalString(description = "") {
23
25
  return { type: "string", description };
24
26
  }
25
27
 
28
+ function optionalEnumString(values, description = "") {
29
+ return { type: "string", enum: values, description };
30
+ }
31
+
26
32
  function optionalBoolean(description = "") {
27
33
  return { type: "boolean", description };
28
34
  }
@@ -133,6 +139,21 @@ export const MCP_TOOLS = [
133
139
  additionalProperties: false,
134
140
  },
135
141
  },
142
+ {
143
+ name: "design_ai_recall",
144
+ title: "Recall corpus and learning context",
145
+ description: "Recall brief-relevant shipped corpus knowledge plus local learning-profile entries for a query, ranked by the deterministic lexical scorer. Read-only.",
146
+ inputSchema: {
147
+ type: "object",
148
+ properties: {
149
+ query: { type: "string", minLength: 1, description: "Recall query text." },
150
+ limit: optionalInteger({ description: "Maximum results per list (corpus and learning), 1-20.", minimum: 1, maximum: 20 }),
151
+ category: optionalEnumString(LEARNING_CATEGORIES, "Optional learning category filter, scopes only the learning list."),
152
+ },
153
+ required: ["query"],
154
+ additionalProperties: false,
155
+ },
156
+ },
136
157
  {
137
158
  name: "design_ai_check",
138
159
  title: "Check Markdown artifact quality",
@@ -182,6 +203,49 @@ export const MCP_TOOLS = [
182
203
  additionalProperties: false,
183
204
  },
184
205
  },
206
+ {
207
+ name: "design_ai_learn_remember",
208
+ title: "Remember a learning preference",
209
+ description: `Record a local learning-profile preference for prompt personalization. ${LEARNING_WRITE_BOUNDARY}`,
210
+ inputSchema: {
211
+ type: "object",
212
+ properties: {
213
+ text: { type: "string", minLength: 1, description: "Preference text to remember." },
214
+ category: optionalEnumString(LEARNING_CATEGORIES, "Optional learning category. Defaults to preference."),
215
+ },
216
+ required: ["text"],
217
+ additionalProperties: false,
218
+ },
219
+ },
220
+ {
221
+ name: "design_ai_learn_feedback",
222
+ title: "Record learning feedback",
223
+ description: `Record keep/improve/avoid feedback as a local learning-profile entry. ${LEARNING_WRITE_BOUNDARY}`,
224
+ inputSchema: {
225
+ type: "object",
226
+ properties: {
227
+ text: { type: "string", minLength: 1, description: "Feedback text." },
228
+ outcome: optionalEnumString(LEARNING_FEEDBACK_OUTCOMES, "Optional feedback outcome: keep, improve, or avoid. Defaults to improve."),
229
+ category: optionalEnumString(LEARNING_CATEGORIES, "Optional learning category. Defaults to workflow."),
230
+ },
231
+ required: ["text"],
232
+ additionalProperties: false,
233
+ },
234
+ },
235
+ {
236
+ name: "design_ai_learn_capture",
237
+ title: "Check artifact and capture learning",
238
+ description: `Check a Markdown artifact, then capture its non-pass results as local learning-profile entries. The only compound read+write tool. ${LEARNING_WRITE_BOUNDARY}`,
239
+ inputSchema: {
240
+ type: "object",
241
+ properties: {
242
+ content: { type: "string", minLength: 1, description: "Markdown artifact content to check via stdin, then capture." },
243
+ route: optionalString("Optional route id, such as component-spec."),
244
+ },
245
+ required: ["content"],
246
+ additionalProperties: false,
247
+ },
248
+ },
185
249
  {
186
250
  name: "design_ai_version",
187
251
  title: "Show design-ai version",
@@ -218,6 +282,9 @@ function assertMcpInputValue(name, value, schema) {
218
282
  if (schema.minLength && value.length < schema.minLength) {
219
283
  throw new Error(`${name} must be at least ${schema.minLength} characters`);
220
284
  }
285
+ if (schema.enum && !schema.enum.includes(value)) {
286
+ throw new Error(`${name} must be one of: ${schema.enum.join(", ")}`);
287
+ }
221
288
  return;
222
289
  }
223
290
 
@@ -328,6 +395,13 @@ export function buildCliInvocation(toolName, input = {}) {
328
395
  return { args, stdin };
329
396
  }
330
397
 
398
+ if (toolName === "design_ai_recall") {
399
+ args.push("learn", "--recall", assertString(input.query, "query"), "--json");
400
+ maybePush(args, "--limit", input.limit);
401
+ maybePush(args, "--category", input.category);
402
+ return { args, stdin };
403
+ }
404
+
331
405
  if (toolName === "design_ai_check") {
332
406
  args.push("check", "--stdin");
333
407
  stdin = assertString(input.artifact, "artifact");
@@ -356,6 +430,26 @@ export function buildCliInvocation(toolName, input = {}) {
356
430
  return { args, stdin };
357
431
  }
358
432
 
433
+ if (toolName === "design_ai_learn_remember") {
434
+ args.push("learn", "--remember", assertString(input.text, "text"), "--json");
435
+ maybePush(args, "--category", input.category);
436
+ return { args, stdin };
437
+ }
438
+
439
+ if (toolName === "design_ai_learn_feedback") {
440
+ args.push("learn", "--feedback", assertString(input.text, "text"), "--json");
441
+ maybePush(args, "--outcome", input.outcome);
442
+ maybePush(args, "--category", input.category);
443
+ return { args, stdin };
444
+ }
445
+
446
+ if (toolName === "design_ai_learn_capture") {
447
+ args.push("check", "--stdin", "--learn", "--yes", "--json");
448
+ stdin = assertString(input.content, "content");
449
+ maybePush(args, "--route", input.route);
450
+ return { args, stdin };
451
+ }
452
+
359
453
  if (toolName === "design_ai_version") {
360
454
  args.push("version", "--json");
361
455
  return { args, stdin };
@@ -547,7 +641,7 @@ export async function handleMcpRequest(message, { runCli = runDesignAiCli } = {}
547
641
  name: "design-ai",
548
642
  version: readPackageVersion(),
549
643
  },
550
- instructions: "Use design-ai MCP tools for local, deterministic design expertise: route briefs, generate prompts/packs, search/show the design corpus, check Markdown artifacts, and validate Website Improvement MCP readiness. Prefer read-only tools unless the user explicitly asks to record local learning usage.",
644
+ instructions: "Use design-ai MCP tools for local, deterministic design expertise: route briefs, generate prompts/packs, search/show the design corpus, recall combined corpus+learning context, check Markdown artifacts, and validate Website Improvement MCP readiness. Prefer read-only tools unless the user explicitly asks to record local learning usage. The opt-in write tool set is design_ai_learn_remember, design_ai_learn_feedback, and design_ai_learn_capture — each writes only the local learning profile, and only when explicitly called.",
551
645
  });
552
646
  }
553
647
 
@@ -1,7 +1,7 @@
1
1
  # Next surface decision
2
2
 
3
- > Status: proposedawaiting maintainer sign-off
4
- > Date: 2026-07-03
3
+ > Status: living decision record original recommendation accepted and executed (v4.57–v4.61); re-evaluated 2026-07-06 (composed slice, executed v4.62–v4.64) and 2026-07-07 (MCP ↔ SDK parity, accepted). See the dated sections below for each decision's status.
4
+ > Date: 2026-07-03 (original) / 2026-07-07 (latest re-evaluation)
5
5
 
6
6
  This record answers option 3 of the "Recommended next decision" in [`PRODUCT-READINESS.md`](PRODUCT-READINESS.md): if the goal is "best design tool" as a broader product, which surface do we deepen next — CLI, VS Code extension, web UI, Figma plugin, or agent SDK?
7
7
 
@@ -157,3 +157,28 @@ Scored with the same seven criteria, in the post-execution landscape: CLI deepen
157
157
  **Run the two leaders as one composed slice: a real SDK consumer example that drives a design task end-to-end (`route` → `pack` → `check` → `learn.captureFromCheck`), documented as the SDK walkthrough.** The example is simultaneously the SDK adoption artifact (D) and a dogfood pass (G): building it exercises the shipped surfaces against a genuine task, and any friction or corpus gaps it surfaces become the evidence-backed next backlog — the same loop that produced the v4.58 corpus additions.
158
158
 
159
159
  - **Status:** accepted — maintainer signed off 2026-07-06; the composed slice is the next work item
160
+
161
+ ## Re-evaluation (2026-07-07)
162
+
163
+ The 2026-07-06 composed slice executed and compounded: two dogfood rounds plus a systematic 18-class route-coverage sweep shipped as v4.62.0–v4.64.0. Route coverage has converged (18/18 probed classes at medium+; 22 routes; example-qa 22/22), so further sweeps are diminishing returns. Scored against the same seven criteria in the new landscape:
164
+
165
+ | Candidate | Leverage | Reach | Build cost | Maintenance | Distribution | Risk | Synergy | Total |
166
+ |---|---|---|---|---|---|---|---|---|
167
+ | MCP ↔ SDK surface parity | 5 | 5 | 5 | 4 | 5 | 4 | 5 | **33** |
168
+ | Dogfood round 3 (browse/IA class) | 4 | 3 | 4 | 5 | 3 | 5 | 4 | 28 |
169
+ | Corpus automation (spec extractor v2) | 3 | 3 | 3 | 4 | 3 | 4 | 2 | 22 |
170
+ | VS Code deepening | 4 | 3 | 3 | 3 | 4 | 3 | 3 | 23 |
171
+ | Web UI expansion | 4 | 3 | 3 | 4 | 3 | 4 | 3 | 24 |
172
+ | Skill-proposal apply path | 3 | 3 | 3 | 3 | 4 | 2 | 4 | 22 |
173
+
174
+ - **MCP ↔ SDK surface parity** — fact-checked gap: the MCP server exposes 10 tools with **no `design_ai_recall`** and **no learning-write tools**, while the SDK ships `recall` plus the `learn.*` namespace (remember/feedback/captureFromCheck). MCP is the primary agent surface, yet an MCP-connected agent today cannot recall combined corpus+learning context as a standalone verb, nor record what it learned — the exact loop the SDK walkthrough demonstrates. The fix is the proven playbook: thin wrappers over the same `cli/lib` functions, with the write tools opt-in and clearly marked (the server instructions already say "prefer read-only tools unless the user explicitly asks to record local learning"). Highest leverage (serves every MCP consumer), lowest cost (adapter-only), direct synergy with everything shipped this month.
175
+ - Dogfood round 3 stays the standing loop — cheap to rerun, but its route-coverage yield has converged; next run should target curation quality (browse/IA) rather than routing.
176
+ - VS Code / Web UI / Figma: unchanged triggers, still no demand signal — deferred.
177
+
178
+ ### Recommendation (2026-07-07)
179
+
180
+ **Close the MCP ↔ SDK parity gap: add `design_ai_recall` (read-only) and an opt-in learning-write tool set (`design_ai_learn_remember`, `design_ai_learn_feedback`, `design_ai_learn_capture`) mirroring the SDK's `learn.*` boundary — writes only the local learning profile, clearly marked in tool descriptions, never enabled implicitly.** Same verification pattern as every surface addition: MCP protocol tests, smoke assertions, docs (MCP server guide + SDK/MCP parity note).
181
+
182
+ - **Status:** accepted — maintainer signed off 2026-07-07; MCP ↔ SDK parity is the next work item
183
+
184
+ _Done (2026-07-07): added all four tools to `cli/lib/mcp-server.mjs` (14 tools total, up from 10). `design_ai_recall` maps to `learn --recall <query> --json [--limit N] [--category kind]`; `design_ai_learn_remember` maps to `learn --remember <text> --json [--category kind]`; `design_ai_learn_feedback` maps to `learn --feedback <text> --json [--outcome keep|improve|avoid] [--category kind]` (the CLI does expose `--outcome`, verified in `cli/lib/learn-args.mjs`'s `normalizeFeedbackOutcome`/`LEARNING_FEEDBACK_OUTCOMES`, so the MCP schema mirrors it rather than omitting it); `design_ai_learn_capture` maps to `check --stdin --learn --yes --json [--route id]` (verified the full flag combination runs cleanly, matching the SDK's `learn.captureFromCheck` path). All three write tools carry the shared "Writes ONLY the local learning profile ... and only when explicitly called" marker in their descriptions, and the serverInfo `instructions` string now names the write set explicitly. Added `category`/`outcome` enum validation to the MCP schema layer (`assertMcpInputValue` gained an `enum` branch) so invalid values are rejected before CLI invocation, mirroring `LEARNING_CATEGORIES`/`LEARNING_FEEDBACK_OUTCOMES`. Added mapping tests for all four tools (all param combinations), a 14-tool tools/list assertion, a write-boundary-marker description test, and a tools/call happy-path test for `design_ai_recall` with an injected runner, in `cli/lib/mcp-server.test.mjs`. `tools/audit/smoke_assertions.py`'s MCP assertion checks tool presence (`design_ai_route`, `design_ai_search`), not an exact count or full name list, so no smoke-assertion change was required; verified by grepping `package-smoke.py`/`registry-smoke.py` for the same presence-only pattern. Documented the new tools and the write-boundary note in `docs/integrations/design-ai-mcp-server.md` (no `.ko` variant exists) and added a one-line SDK/MCP parity cross-reference to `docs/SDK.md`. Full verification: `npm test` (593/593 pass), `npm run audit` (8/8), `npm run release:metadata` (pass), `npm run package:smoke`, `npm run registry:smoke:self-test`, and `npm run ci:local` all green. Live stdio E2E: initialize → tools/list (14 tools confirmed) → `design_ai_recall` with a real Korean query ("접근성 버튼") → `design_ai_learn_remember` against a temp `DESIGN_AI_LEARNING_FILE` (verified the file gained the entry) → `design_ai_learn_capture` against the same temp profile (verified entry count went from 1 to 9, one remembered plus eight captured from the failing check)._
package/docs/ROADMAP.md CHANGED
@@ -1,5 +1,41 @@
1
1
  # Roadmap
2
2
 
3
+ ## Phase 771 — MCP Parity Release (v4.65.0) ✓ ready
4
+
5
+ Ships the Phase 770 MCP ↔ SDK parity work as an npm version: `design_ai_recall` plus the opt-in learning-write tool set (`design_ai_learn_remember`/`feedback`/`capture`), growing the MCP server from 10 to 14 tools with the SDK `learn.*` write boundary mirrored and test-guarded. Additive; write tools are strictly opt-in.
6
+
7
+ ### Verified
8
+ - All 8 audits passed.
9
+ - `npm run release:check` (unit tests incl. MCP mapping/boundary tests, strict audits, whitespace, package contents, release metadata, release self-tests, packed-tarball smoke).
10
+ - `npm run release:metadata`.
11
+ - `git diff --check`.
12
+ - Real-server stdio E2E (14 tools; live recall; temp-profile writes verified).
13
+ - Main-branch GitHub Actions (`Design-AI audit`, `Deploy doc site`) passed for the constituent commits.
14
+
15
+ ### Versions
16
+ - `package.json` + `.claude-plugin/plugin.json`: 4.64.0 → 4.65.0.
17
+ - `vscode-extension/package.json`: remains 0.4.1.
18
+
19
+ ### What this enables
20
+ - The learn loop closes on the primary agent surface: MCP clients recall combined corpus+learning context and record learnings with the same explicit write boundary the SDK ships — CLI, SDK, and MCP are now at full surface parity.
21
+
22
+ ### What's still ahead
23
+ - Next planning window per [NEXT-SURFACE-DECISION.md](NEXT-SURFACE-DECISION.md); dogfood loop remains cheap to rerun on curation-quality questions (browse/IA).
24
+
25
+ ## Phase 770 — MCP ↔ SDK parity (implemented, unreleased)
26
+
27
+ Closes the parity gap the 2026-07-07 planning window fact-checked ([NEXT-SURFACE-DECISION.md](NEXT-SURFACE-DECISION.md)): the MCP server had no recall tool and no learning-write tools while the SDK shipped both, so an MCP-connected agent could not run the recall→learn loop the SDK walkthrough demonstrates.
28
+
29
+ ### Delivered
30
+ - [x] `design_ai_recall` (read-only): combined corpus+learning recall over `learn --recall`, with limit and category-enum validation.
31
+ - [x] Opt-in write set mirroring the SDK `learn.*` boundary: `design_ai_learn_remember`, `design_ai_learn_feedback` (outcome enum keep/improve/avoid — mirrored only after verifying the CLI's `--outcome` flag exists), `design_ai_learn_capture` (check + capture, the only compound read+write tool). All three carry a shared write-boundary description (writes ONLY the local learning profile, only when explicitly called), guarded by a test that fails if the safety language is dropped; serverInfo instructions name the write set explicitly.
32
+ - [x] `assertMcpInputValue` gains enum validation (category/outcome checked against `LEARNING_CATEGORIES`/`LEARNING_FEEDBACK_OUTCOMES` before CLI invocation).
33
+ - [x] Real-server stdio E2E: initialize → tools/list (10 → **14** tools) → live `design_ai_recall` query → `learn_remember` and `learn_capture` against a temp `DESIGN_AI_LEARNING_FILE` with the profile file verified after each write. 593/593 tests; smoke assertions are presence-based (no drift risk, verified in both smoke files).
34
+ - [x] Docs: MCP server guide tool table + write-boundary note; SDK ↔ MCP parity cross-reference in `docs/SDK.md`.
35
+
36
+ ### Remaining
37
+ - [ ] Release: bundle into the next npm version (external-status "10 tools" evidence line updates at release handoff).
38
+
3
39
  ## Phase 769 — Route Coverage Sweep Release (v4.64.0) ✓ ready
4
40
 
5
41
  Ships the Phase 768 route-coverage sweep as an npm version: the `marketing-page` route with its worked example, the `dashboard-design` chart/permissions enrichment, and the `flow-design` nine-class keyword batch — 18/18 probed task classes now land on target routes at medium+ confidence. Additive and backward-compatible.
package/docs/SDK.md CHANGED
@@ -6,6 +6,8 @@
6
6
 
7
7
  See [`AGENT-SDK.md`](AGENT-SDK.md) for the full design rationale, phased plan, and open questions. This page is the public reference for the shipped Phase A (read-only) and Phase B (local-write) surface.
8
8
 
9
+ MCP parity: the SDK's `recall` and `learn.*` (`remember`, `feedback`, `captureFromCheck`) map 1:1 to the MCP tools `design_ai_recall` and `design_ai_learn_*` (`design_ai_learn_remember`, `design_ai_learn_feedback`, `design_ai_learn_capture`) — see [`integrations/design-ai-mcp-server.md`](integrations/design-ai-mcp-server.md).
10
+
9
11
  ## Install and import
10
12
 
11
13
  The SDK ships inside the `@design-ai/cli` package (no separate install):
@@ -5,25 +5,25 @@
5
5
 
6
6
  ## Summary
7
7
 
8
- npm is publicly published at `@design-ai/cli@4.63.0` (npm dist-tag `latest` = `4.63.0`); publish run from tag `v4.63.0` succeeded with provenance and all pre-publish gates green. This release ships the dogfood loop's second turn: the `dashboard-design` route (data-dense screen class with money-format/table-a11y/density check requirements) with its settlement worked example, and `flow-design` keyword depth (Korean step-flow vocabulary + states-design compounds, verified in both directions against the illustration route). The live `npm run registry:smoke` passes cleanly against published `@design-ai/cli@4.63.0` ("Registry smoke passed"), covering the retrieval surfaces (index/ranked/embeddings/recall) and route enrichment. GitHub Release `v4.63.0` is published, and the Homebrew tap formula points at the `v4.63.0` release source tarball with a verified SHA-256. The VS Code extension `sungjin.design-ai-vscode` remains published at `0.4.1`. GitHub Pages docs are publicly reachable.
8
+ npm is publicly published at `@design-ai/cli@4.64.0` (npm dist-tag `latest` = `4.64.0`); publish run from tag `v4.64.0` succeeded with provenance and all pre-publish gates green. This release ships the route coverage sweep: the new `marketing-page` route (landing/pricing/email-template classes with conversion/hierarchy/email-client check requirements) with its SaaS-landing worked example, plus `dashboard-design` chart/permissions enrichment and the `flow-design` nine-class keyword batch 18/18 probed task classes now route at medium+ confidence. The live `npm run registry:smoke` passes cleanly against published `@design-ai/cli@4.64.0` ("Registry smoke passed"), covering the retrieval surfaces (index/ranked/embeddings/recall) and route enrichment. GitHub Release `v4.64.0` is published, and the Homebrew tap formula points at the `v4.64.0` release source tarball with a verified SHA-256. The VS Code extension `sungjin.design-ai-vscode` remains published at `0.4.1`. GitHub Pages docs are publicly reachable.
9
9
 
10
10
  ## Results
11
11
 
12
12
  | Surface | Checked target | Result | Evidence |
13
13
  |---|---|---|---|
14
- | npm registry | `@design-ai/cli` | Published latest is `4.63.0` (tag `v4.63.0`, provenance). Pre-publish packed-tarball smoke (incl. SDK import + `learn.remember` write) and live `npm run registry:smoke` both pass for `@design-ai/cli@4.63.0`. | `npm view @design-ai/cli version` → `4.63.0`; live registry smoke "Registry smoke passed" |
14
+ | npm registry | `@design-ai/cli` | Published latest is `4.64.0` (tag `v4.64.0`, provenance). Pre-publish packed-tarball smoke (incl. SDK import + `learn.remember` write) and live `npm run registry:smoke` both pass for `@design-ai/cli@4.64.0`. | `npm view @design-ai/cli version` → `4.64.0`; live registry smoke "Registry smoke passed" |
15
15
  | GitHub Pages | `https://sungjin9288.github.io/design-ai/` | Published and reachable: HTTP `200`, design-ai MkDocs page rendered | `evidence/cli-logs/github-pages-status.log` |
16
- | Homebrew tap | `Formula/design-ai.rb` | Formula pinned to `v4.63.0` release source tarball with SHA-256 `024a720cfe1a18a1b77751232818f01d9a2826fac4772865b889bd3d91ce1ae8` (recomputed from the published tag tarball) | `Formula/design-ai.rb` |
16
+ | Homebrew tap | `Formula/design-ai.rb` | Formula pinned to `v4.64.0` release source tarball with SHA-256 `96396304643902a55a8bae605e6efcf169c6131892236f7fb58a0a0ced152bf4` (recomputed from the published tag tarball) | `Formula/design-ai.rb` |
17
17
  | VS Code Marketplace | `sungjin.design-ai-vscode` | Published: run `28431571256` published `v0.4.1`, and the Marketplace Gallery API returned visible version `0.4.1` on 2026-07-02. | `evidence/cli-logs/vscode-marketplace-status.log`, `evidence/cli-logs/vscode-marketplace-secret-status.log`, `evidence/cli-logs/vscode-extension-vsce-package.log`, `evidence/cli-logs/vscode-publish-workflow-status.log` |
18
- | GitHub Release | `v4.63.0` | Published for tag `v4.63.0` at commit `d6ce680` | `gh release view v4.63.0` |
19
- | MCP server | `@design-ai/cli@4.63.0` / local clone | Public npm `design-ai-mcp` responds to initialize and tools/list with 10 tools; local Codex and Claude Code both report `design-ai` MCP as configured and connected. | `evidence/cli-logs/npm-registry-smoke.log`, `evidence/cli-logs/design-ai-mcp-client-status.log` |
18
+ | GitHub Release | `v4.64.0` | Published for tag `v4.64.0` at commit `d0c5283` | `gh release view v4.64.0` |
19
+ | MCP server | `@design-ai/cli@4.64.0` / local clone | Public npm `design-ai-mcp` responds to initialize and tools/list with 10 tools; local Codex and Claude Code both report `design-ai` MCP as configured and connected. | `evidence/cli-logs/npm-registry-smoke.log`, `evidence/cli-logs/design-ai-mcp-client-status.log` |
20
20
 
21
21
  ## Interpretation
22
22
 
23
23
  - The repository is locally release-ready based on `npm run release:check`.
24
24
  - GitHub Pages docs can now be described as publicly deployed.
25
- - Public npm install can now be described as published and smoke-tested at `4.63.0`.
26
- - Homebrew tap install can now be described as pinned to the `v4.63.0` release tarball; full tap audit/install/test remains a maintainer-side verification step because this Homebrew version rejects path-based `brew audit Formula/...` calls.
25
+ - Public npm install can now be described as published and smoke-tested at `4.64.0`.
26
+ - Homebrew tap install can now be described as pinned to the `v4.64.0` release tarball; full tap audit/install/test remains a maintainer-side verification step because this Homebrew version rejects path-based `brew audit Formula/...` calls.
27
27
  - VS Code Marketplace can now be described as published and publicly reachable at version `0.4.1`.
28
28
  - Claude Code and Codex can now be described as locally connected to the clone-backed `design-ai` MCP server, while public npm users can verify the published `design-ai-mcp` entrypoint from a clean working directory.
29
29
 
@@ -32,12 +32,12 @@ npm is publicly published at `@design-ai/cli@4.63.0` (npm dist-tag `latest` = `4
32
32
  ```bash
33
33
  npm view @design-ai/cli version name time.modified dist-tags --json
34
34
  curl -sS -L -o /tmp/design-ai-pages.html -w 'http_code=%{http_code}\nurl_effective=%{url_effective}\n' https://sungjin9288.github.io/design-ai/
35
- curl -sL https://github.com/sungjin9288/design-ai/archive/refs/tags/v4.63.0.tar.gz | shasum -a 256
35
+ curl -sL https://github.com/sungjin9288/design-ai/archive/refs/tags/v4.64.0.tar.gz | shasum -a 256
36
36
  ruby -c Formula/design-ai.rb
37
37
  brew style Formula/design-ai.rb
38
- gh release view v4.63.0 --repo sungjin9288/design-ai --json tagName,isDraft,isPrerelease,publishedAt,name,url,assets
38
+ gh release view v4.64.0 --repo sungjin9288/design-ai --json tagName,isDraft,isPrerelease,publishedAt,name,url,assets
39
39
  gh run view 28569283984 --repo sungjin9288/design-ai --json status,conclusion,name,url,createdAt,updatedAt
40
- npm exec --yes --package=@design-ai/cli@4.63.0 -- design-ai-mcp
40
+ npm exec --yes --package=@design-ai/cli@4.64.0 -- design-ai-mcp
41
41
  codex mcp get design-ai
42
42
  claude mcp list
43
43
  curl -sS -H 'Content-Type: application/json' \
@@ -14,11 +14,19 @@ The server is local, stdio-based, and deterministic. It wraps existing `design-a
14
14
  | `design_ai_search` | Search `knowledge/`, `examples/`, `skills/`, `docs/`, `agents/`, and `commands/`. Optional `ranked` opts into deterministic BM25-style results (`design-ai search --ranked`); requires no index and never builds one. | Read-only |
15
15
  | `design_ai_show` | Read a corpus file or line range. | Read-only |
16
16
  | `design_ai_examples` | Find worked examples by query or route. | Read-only |
17
+ | `design_ai_recall` | Recall brief-relevant shipped corpus knowledge plus local learning-profile entries for a query, ranked by the deterministic lexical scorer (`design-ai learn --recall`). | Read-only |
17
18
  | `design_ai_check` | Check generated Markdown artifacts for grounding, accessibility, responsive notes, and unresolved markers. | Read-only |
18
19
  | `design_ai_site_mcp_check` | Validate Website Improvement MCP readiness from workspace JSON. | Read-only |
19
20
  | `design_ai_site_mcp_plan` | Generate a Website Improvement MCP action plan. | Read-only |
21
+ | `design_ai_learn_remember` | Record a local learning-profile preference for prompt personalization. | Writes only the local learning profile, opt-in |
22
+ | `design_ai_learn_feedback` | Record keep/improve/avoid feedback as a local learning-profile entry. | Writes only the local learning profile, opt-in |
23
+ | `design_ai_learn_capture` | Check a Markdown artifact, then capture its non-pass results as local learning-profile entries. The only compound read+write tool. | Writes only the local learning profile, opt-in |
20
24
  | `design_ai_version` | Return CLI and corpus version metadata. | Read-only |
21
25
 
26
+ ### Opt-in write tools
27
+
28
+ `design_ai_learn_remember`, `design_ai_learn_feedback`, and `design_ai_learn_capture` are the MCP mirror of the SDK's `learn.*` namespace (see [`../SDK.md`](../SDK.md)). Each writes ONLY the local learning profile (`DESIGN_AI_LEARNING_FILE` or its default path), and only when explicitly called by name — no other tool call implicitly triggers a write. `design_ai_learn_capture` maps to `design-ai check --stdin --learn --yes --json`, the same path as the CLI's `--learn --yes` capture flow.
29
+
22
30
  ## Start the server manually
23
31
 
24
32
  From a local clone:
@@ -147,6 +155,7 @@ Then generate a design_ai_site_mcp_plan and summarize blocking MCP gaps.
147
155
  - The default tools do not call external MCP servers.
148
156
  - Website Improvement MCP readiness tools inspect local workspace JSON only.
149
157
  - `design_ai_prompt` and `design_ai_pack` are read-only unless `withLearning` is set.
158
+ - `design_ai_learn_remember`, `design_ai_learn_feedback`, and `design_ai_learn_capture` write only the local learning profile, never the network, and only when called explicitly.
150
159
  - The server does not mutate target repositories.
151
160
  - Do not pass secrets in briefs, workspace JSON, or artifacts.
152
161
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design-ai/cli",
3
- "version": "4.64.0",
3
+ "version": "4.65.0",
4
4
  "description": "Senior product designer for any AI coding agent. Installs design-ai (20 skills, 17 commands, 4 agents) into Claude Code globally. Korean market depth plus website improvement control tower.",
5
5
  "bin": {
6
6
  "design-ai": "cli/bin/design-ai.mjs",