@design-ai/cli 4.60.0 → 4.62.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/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +55 -0
- package/README.ko.md +6 -6
- package/README.md +6 -6
- package/cli/commands/help.mjs +1 -1
- package/cli/commands/search.mjs +81 -2
- package/cli/lib/check.mjs +29 -0
- package/cli/lib/examples.mjs +2 -0
- package/cli/lib/pack.mjs +29 -1
- package/cli/lib/recall.mjs +2 -2
- package/cli/lib/route.mjs +26 -3
- package/cli/lib/search-eval.mjs +241 -0
- package/cli/lib/search-ranked.mjs +31 -11
- package/cli/lib/search.mjs +56 -1
- package/docs/AI-LEARNING-PHASE2.md +13 -2
- package/docs/DOGFOOD-SDK-FINDINGS.md +56 -0
- package/docs/NEXT-SURFACE-DECISION.md +36 -2
- package/docs/ROADMAP.md +77 -0
- package/docs/SDK.md +6 -0
- package/docs/external-status.md +11 -11
- package/docs/integrations/agent-sdk-walkthrough.ko.md +219 -0
- package/docs/integrations/agent-sdk-walkthrough.md +219 -0
- package/examples/README.md +6 -0
- package/examples/flow-design-report-block.md +141 -0
- package/knowledge/COVERAGE.md +7 -5
- package/knowledge/patterns/trust-safety-moderation.md +107 -0
- package/package.json +1 -1
- package/tools/audit/integration-check.py +1 -0
- package/tools/audit/smoke_assertions.py +11 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "design-ai",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.62.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,61 @@
|
|
|
2
2
|
|
|
3
3
|
User-facing release notes for design-ai. Versions follow semver.
|
|
4
4
|
|
|
5
|
+
## v4.62.0 — Dogfood loop: flow-design route, trust & safety corpus, recall purity, SDK walkthrough (2026-07)
|
|
6
|
+
|
|
7
|
+
A full dogfood cycle shipped as one release: a real design task (커뮤니티 앱 신고·차단 플로우) was driven end-to-end through the Agent SDK, and everything the run surfaced — a routing gap, recall pollution, a corpus gap, and a real byte-accounting bug — is fixed here, together with the walkthrough the run produced. See `docs/DOGFOOD-SDK-FINDINGS.md` for the evidence trail.
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- **`flow-design` route** — interaction/feature-flow briefs (신고, 차단, 온보딩, 가입, 결제 플로우, 설정, 알림 / report, block, onboarding, signup, checkout flows) now route to a dedicated route with flow-appropriate curated skills/knowledge and route-specific check requirements (states/steps, edge/error paths, entry/completion). The dogfood brief moved from `[low] design-from-brief score=1` to `[high] flow-design score=4`; compound keywords were chosen so existing routes' briefs are unaffected (route eval checkpoint still 6/6).
|
|
11
|
+
- **`knowledge/patterns/trust-safety-moderation.md`** (corpus now 95) — report flow and reason taxonomy, moderation status pipeline including the 정보통신망법 제44조의2 임시조치(30일)/이의제기 obligations, block semantics (bidirectional scope, non-notification principle), report-abuse prevention, and the accessibility floor.
|
|
12
|
+
- **`examples/flow-design-report-block.md`** (examples now 222) — the route's top worked example, expanded from the dogfooded artifact.
|
|
13
|
+
- **Agent SDK walkthrough** — `docs/integrations/agent-sdk-walkthrough.md` (+ Korean mirror): a copy-pastable Node consumer script driving `route` → `pack` → author → `check` → `learn.captureFromCheck` with temp-profile isolation, with outputs verified against a live run; linked from the README install table and `docs/SDK.md`, and guarded against drift by `cli/sdk/flow-example.test.mjs`.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
- **Recall injection now excludes everything under `docs/`** (`prompt`/`pack --with-recall`, `learn --recall`, `route --explain` related knowledge): recall injects design knowledge, and the design corpus is `knowledge/`, `examples/`, `skills/`, `agents/`, `commands/` — `docs/` is product documentation. The dogfood run showed repo-meta docs outranking real knowledge (docs/case-study.md at #1); enumerating meta files proved whack-a-mole, so the principled directory rule replaced it. Raw `search`/`search --ranked` is unchanged and still returns `docs/` hits.
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
- **`pack` could exceed `maxBytes` by 1-2 bytes** when a context file was truncated mid-UTF-8-character: the decoder's 3-byte U+FFFD replacement could outweigh the dangling bytes it replaced. `takeUtf8` now trims to the last complete character boundary before decoding. Caught by the new walkthrough regression guard (which fails on the unfixed code) and additionally covered by a Korean-content budget-sweep invariant test.
|
|
20
|
+
|
|
21
|
+
### Verified
|
|
22
|
+
- All 8 audits passed.
|
|
23
|
+
- `npm run release:check`.
|
|
24
|
+
- `npm run release:metadata`.
|
|
25
|
+
- `git diff --check`.
|
|
26
|
+
- Main-branch GitHub Actions (`Design-AI audit`, `Deploy doc site`) passed for the constituent commits.
|
|
27
|
+
|
|
28
|
+
### Versions
|
|
29
|
+
- `package.json` + `.claude-plugin/plugin.json`: 4.61.0 → 4.62.0.
|
|
30
|
+
- `vscode-extension/package.json`: remains 0.4.1.
|
|
31
|
+
|
|
32
|
+
### What this enables
|
|
33
|
+
- The dogfood loop is closed and shipped: flow briefs route correctly, recall injects only design knowledge, Korean community/social products get trust & safety guidance with the regulatory floor, `pack`'s byte budget is a hard guarantee, and SDK adopters get a verified end-to-end walkthrough.
|
|
34
|
+
|
|
35
|
+
## v4.61.0 — Ranked-search eval checkpoint (2026-07)
|
|
36
|
+
|
|
37
|
+
Closes the last open follow-up from the AI-learning Phase A review (FU-3 in `docs/AI-LEARNING-PHASE2.md`): `design-ai search` gains eval-checkpoint modes mirroring the route/prompt/pack/learn pattern, run through the shipped ranked (BM25) search path. This is the standing evidence artifact for any future decision to promote `--ranked` to the default search mode. Additive and backward-compatible; default `search` behavior is unchanged.
|
|
38
|
+
|
|
39
|
+
### Added
|
|
40
|
+
- `search --eval-template [--json]` — emit a versioned ranked-search checkpoint template. The default template ships six cases that all pass against the shipped corpus, including the Korean particle-form regression queries (`버튼`, `버튼을`, `접근성이`) from the Hangul-bigram work, so the eval doubles as the retrieval-level Korean tokenization regression.
|
|
41
|
+
- `search --eval [--strict] [--json]` with `--from-file file` / `--stdin` — run a checkpoint file's cases through the ranked search path and report pass/warn/fail per case; `--strict` exits nonzero on any failure. Case assertions: `expectRelPathIn` (top hit), `minHits`, and `matchedTokenIncludes`.
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
- `search` help/usage lines (CLI `help` topic and command help) document the new eval modes; the shared smoke assertion pins were updated in lockstep.
|
|
45
|
+
|
|
46
|
+
### Verified
|
|
47
|
+
- All 8 audits passed.
|
|
48
|
+
- `npm run release:check`.
|
|
49
|
+
- `npm run release:metadata`.
|
|
50
|
+
- `git diff --check`.
|
|
51
|
+
- Main-branch GitHub Actions (`Design-AI audit`, `Deploy doc site`) passed for the constituent commits.
|
|
52
|
+
|
|
53
|
+
### Versions
|
|
54
|
+
- `package.json` + `.claude-plugin/plugin.json`: 4.60.0 → 4.61.0.
|
|
55
|
+
- `vscode-extension/package.json`: remains 0.4.1.
|
|
56
|
+
|
|
57
|
+
### What this enables
|
|
58
|
+
- Any future `--ranked` default promotion is now evidence-backed and announced: the checkpoint demonstrates ranked-search quality (including Korean agglutinative queries) reproducibly, per the FU-3 gate set in the Phase A implementation review.
|
|
59
|
+
|
|
5
60
|
## v4.60.0 — Agent SDK types and local-write namespace (2026-07)
|
|
6
61
|
|
|
7
62
|
Extends the Agent SDK (`@design-ai/cli/sdk`) two ways, both additive and backward-compatible. First, hand-written TypeScript declarations now ship with the package, so TypeScript and editors resolve `@design-ai/cli/sdk` with full types — no `@types` install and no build step. Second, an opt-in `learn.*` namespace adds the SDK's first local-write verbs, keeping the eight Phase A verbs read-only and unchanged.
|
package/README.ko.md
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/sungjin9288/design-ai/actions/workflows/audit.yml)
|
|
4
4
|
[](https://sungjin9288.github.io/design-ai/ko/)
|
|
5
|
-
[](knowledge/PRINCIPLES.md)
|
|
6
|
+
[](examples/README.md)
|
|
7
7
|
[](skills/README.md)
|
|
8
8
|
|
|
9
9
|
> 🇰🇷 한국어 / [🇺🇸 English](https://github.com/sungjin9288/design-ai/blob/main/README.md)
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
> **모델이 아니에요. 파인튜닝도 아니에요.** 디자인 전문 지식을 구조화한 코퍼스 + 에이전트가 바로 실행할 수 있는 지시문이에요. 범용 LLM을 이번 세션에서만큼은 시니어 디자이너로 바꿔주는 셈이에요.
|
|
14
14
|
|
|
15
|
-
> **배포 상태, 2026-07-
|
|
15
|
+
> **배포 상태, 2026-07-06 확인:** 로컬 `npm run release:check`는 통과했고, GitHub Pages 문서는 live 상태이며, GitHub Release `v4.61.0`과 npm `@design-ai/cli@4.61.0`(`latest`) publish가 provenance와 함께 확인됐어요. 이번 릴리스는 ranked-search eval 체크포인트(`search --eval-template`/`--eval`, 기본 템플릿에 한글 조사형 회귀 케이스 포함)를 추가했고, additive라 기본 `search` 동작은 그대로예요. live `npm run registry:smoke`가 published `@design-ai/cli@4.61.0`에 대해 깨끗이 통과했어요(retrieval 표면과 route enrichment 포함). Homebrew formula는 `v4.61.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
|
|
|
@@ -75,7 +75,7 @@ design-ai install
|
|
|
75
75
|
/design-from-brief 프리랜서를 위한 한국 핀테크
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
CLI 명령어: `design-ai install [--json]`, `update [--dry-run] [--json]`, `uninstall [--json]`, `status [--json]`, `list [skills|commands|agents] [--json]`, `route <brief|--from-file file|--stdin|--list|--eval-template|--eval> [--limit N] [--explain] [--strict] [--json]`, `routes [--json]`, `prompt <brief|--from-file file|--stdin|--eval-template|--eval> [--out file] [--route id] [--with-learning] [--learning-category kind] [--learning-limit N] [--with-recall] [--recall-limit N] [--strict] [--json]`, `pack <brief|--from-file file|--stdin|--eval-template|--eval> [--out file] [--route id] [--with-learning] [--learning-category kind] [--learning-limit N] [--with-recall] [--recall-limit N] [--max-bytes N] [--strict] [--json]`, `learn [--init|--remember text|--feedback text|--list|--export|--query text|--explain|--recall query|--backup|--redact|--verify|--diff|--restore|--restore-backups [--prune]|--import|--audit [--fix]|--curate|--stats|--usage|--signals [--strict]|--agent-backlog [--strict]|--propose-skills [--min-evidence N] [--review-file path] [--review-check|--apply-plan] [--strict]|--eval-template|--eval [--strict]|--forget id|--clear] [--json|--report|--patch|--review-template] [--out file]`, `check <artifact.md|--stdin|--examples> [--route id|--all-routes] [--issues-only] [--strict] [--learn [--yes] [--learning-file path]] [--json]`, `workspace [--root path] [--learning-file path] [--learning-usage path] [--learning-eval path] [--strict] [--json]`, `site <workspace.json|--stdin> [--strict] [--json|--mcp-check [--probes]|--mcp-plan [--probes] [--json]|--next-actions [--json]|--graph|--tasks|--bundle|--report|--prompts|--prompt id [--task id]] [--out file] | site <bundle-dir> --bundle-check [--json] | site <bundle-dir> --bundle-compare other-bundle-dir [--json] | site <bundle-dir> --bundle-handoff [--task id] [--json] | site <bundle-dir> --bundle-repair [--yes] [--json] [--out file] | site --init --name name --live-url url [--next-actions] [--out file] | site --init --name name --live-url url --bundle --out dir | site --from-intake file.md|--stdin [--json|--next-actions [--json]|--tasks|--bundle [--tasks] --out dir] [--out file] | site --intake-template [--language en|ko] [--json] [--out file] | site --sample [--out file] | site --prompt-list [--json]`, `examples [query|--route id] [--limit N] [--json]`, `search <query> [--dir kind] [--limit N] [--ranked] [--embeddings [--provider "cmd args"]] [--json]`, `index [--build|--status|--verify] [--json] [--embeddings [--provider "cmd args"]]`, `show <file[:line]> [--lines N:M] [--context N] [--json]`, `audit [--strict] [--quiet] [--json]`, `doctor [--strict] [--json] [--fix]`, `mcp`, `version [--json]`, `help [command|--json]`.
|
|
78
|
+
CLI 명령어: `design-ai install [--json]`, `update [--dry-run] [--json]`, `uninstall [--json]`, `status [--json]`, `list [skills|commands|agents] [--json]`, `route <brief|--from-file file|--stdin|--list|--eval-template|--eval> [--limit N] [--explain] [--strict] [--json]`, `routes [--json]`, `prompt <brief|--from-file file|--stdin|--eval-template|--eval> [--out file] [--route id] [--with-learning] [--learning-category kind] [--learning-limit N] [--with-recall] [--recall-limit N] [--strict] [--json]`, `pack <brief|--from-file file|--stdin|--eval-template|--eval> [--out file] [--route id] [--with-learning] [--learning-category kind] [--learning-limit N] [--with-recall] [--recall-limit N] [--max-bytes N] [--strict] [--json]`, `learn [--init|--remember text|--feedback text|--list|--export|--query text|--explain|--recall query|--backup|--redact|--verify|--diff|--restore|--restore-backups [--prune]|--import|--audit [--fix]|--curate|--stats|--usage|--signals [--strict]|--agent-backlog [--strict]|--propose-skills [--min-evidence N] [--review-file path] [--review-check|--apply-plan] [--strict]|--eval-template|--eval [--strict]|--forget id|--clear] [--json|--report|--patch|--review-template] [--out file]`, `check <artifact.md|--stdin|--examples> [--route id|--all-routes] [--issues-only] [--strict] [--learn [--yes] [--learning-file path]] [--json]`, `workspace [--root path] [--learning-file path] [--learning-usage path] [--learning-eval path] [--strict] [--json]`, `site <workspace.json|--stdin> [--strict] [--json|--mcp-check [--probes]|--mcp-plan [--probes] [--json]|--next-actions [--json]|--graph|--tasks|--bundle|--report|--prompts|--prompt id [--task id]] [--out file] | site <bundle-dir> --bundle-check [--json] | site <bundle-dir> --bundle-compare other-bundle-dir [--json] | site <bundle-dir> --bundle-handoff [--task id] [--json] | site <bundle-dir> --bundle-repair [--yes] [--json] [--out file] | site --init --name name --live-url url [--next-actions] [--out file] | site --init --name name --live-url url --bundle --out dir | site --from-intake file.md|--stdin [--json|--next-actions [--json]|--tasks|--bundle [--tasks] --out dir] [--out file] | site --intake-template [--language en|ko] [--json] [--out file] | site --sample [--out file] | site --prompt-list [--json]`, `examples [query|--route id] [--limit N] [--json]`, `search <query|--eval-template|--eval> [--dir kind] [--limit N] [--ranked] [--embeddings [--provider "cmd args"]] [--strict] [--json]`, `index [--build|--status|--verify] [--json] [--embeddings [--provider "cmd args"]]`, `show <file[:line]> [--lines N:M] [--context N] [--json]`, `audit [--strict] [--quiet] [--json]`, `doctor [--strict] [--json] [--fix]`, `mcp`, `version [--json]`, `help [command|--json]`.
|
|
79
79
|
|
|
80
80
|
자세한 내용은 [`docs/DISTRIBUTION.ko.md`](docs/DISTRIBUTION.ko.md)를 확인하세요.
|
|
81
81
|
|
|
@@ -88,7 +88,7 @@ CLI 명령어: `design-ai install [--json]`, `update [--dry-run] [--json]`, `uni
|
|
|
88
88
|
| **Cursor** | 이 폴더를 열고 `AGENTS.md`를 `.cursorrules`로 심볼릭 링크하거나 복사해요. [워크스루](docs/integrations/cursor-walkthrough.md). |
|
|
89
89
|
| **Aider** | `AGENTS.md`를 시스템 프롬프트로 전달해요. [워크스루](docs/integrations/aider-walkthrough.md). |
|
|
90
90
|
| **Anthropic / OpenAI SDK** | 관련 스킬 `PLAYBOOK.md` 파일을 프롬프트에 포함시켜요. [워크스루](docs/integrations/sdk-walkthrough.md). |
|
|
91
|
-
| **Node.js / Agent SDK** | `import { route, prompt, pack, search, recall, check, routes, version } from "@design-ai/cli/sdk"` — CLI 셸 실행이나 MCP 서버 없이 design-ai의 결정적 기능을 함수로 바로 호출해요. 읽기 전용(Phase A). [SDK 레퍼런스](docs/SDK.md). |
|
|
91
|
+
| **Node.js / Agent SDK** | `import { route, prompt, pack, search, recall, check, routes, version } from "@design-ai/cli/sdk"` — CLI 셸 실행이나 MCP 서버 없이 design-ai의 결정적 기능을 함수로 바로 호출해요. 읽기 전용(Phase A). [SDK 레퍼런스](docs/SDK.md). [워크스루](docs/integrations/agent-sdk-walkthrough.md). |
|
|
92
92
|
| **일반 프롬프트** | 어떤 `skills/*/PLAYBOOK.md` 본문이든 붙여넣으세요 — 각각 자기 완결적이에요. |
|
|
93
93
|
|
|
94
94
|
에이전트별 설치 방법은 [`docs/USING.md`](docs/USING.md)를, 구체적인 사용 예시는 위 워크스루 링크를 참고하세요.
|
|
@@ -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.
|
|
175
|
+
전체 단계 로그는 [`docs/ROADMAP.md`](docs/ROADMAP.md), 현재 완료 범위는 [`docs/PRODUCT-READINESS.md`](docs/PRODUCT-READINESS.md)에서 확인하세요. 현재 **v4.61.0**: 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
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/sungjin9288/design-ai/actions/workflows/audit.yml)
|
|
4
4
|
[](https://sungjin9288.github.io/design-ai/)
|
|
5
|
-
[](knowledge/PRINCIPLES.md)
|
|
6
|
+
[](examples/README.md)
|
|
7
7
|
[](skills/README.md)
|
|
8
8
|
|
|
9
9
|
> 🇺🇸 English / [🇰🇷 한국어](https://github.com/sungjin9288/design-ai/blob/main/README.ko.md)
|
|
@@ -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-
|
|
15
|
+
> **Distribution status, checked 2026-07-06:** local `npm run release:check` passes, GitHub Pages docs are live, GitHub Release `v4.61.0` is published, `@design-ai/cli@4.61.0` is public on npm (`latest`) with provenance, and the live `npm run registry:smoke` passes cleanly against `@design-ai/cli@4.61.0`. The Homebrew formula is pinned to `v4.61.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
|
|
|
@@ -75,7 +75,7 @@ Any available path installs all 20 skills, 17 commands, and 4 agents under `~/.c
|
|
|
75
75
|
/design-from-brief Korean fintech for freelancers
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
CLI commands: `design-ai install [--json]`, `update [--dry-run] [--json]`, `uninstall [--json]`, `status [--json]`, `list [skills|commands|agents] [--json]`, `route <brief|--from-file file|--stdin|--list|--eval-template|--eval> [--limit N] [--explain] [--strict] [--json]`, `routes [--json]`, `prompt <brief|--from-file file|--stdin|--eval-template|--eval> [--out file] [--route id] [--with-learning] [--learning-category kind] [--learning-limit N] [--with-recall] [--recall-limit N] [--strict] [--json]`, `pack <brief|--from-file file|--stdin|--eval-template|--eval> [--out file] [--route id] [--with-learning] [--learning-category kind] [--learning-limit N] [--with-recall] [--recall-limit N] [--max-bytes N] [--strict] [--json]`, `learn [--init|--remember text|--feedback text|--list|--export|--query text|--explain|--recall query|--backup|--redact|--verify|--diff|--restore|--restore-backups [--prune]|--import|--audit [--fix]|--curate|--stats|--usage|--signals [--strict]|--agent-backlog [--strict]|--propose-skills [--min-evidence N] [--review-file path] [--review-check|--apply-plan] [--strict]|--eval-template|--eval [--strict]|--forget id|--clear] [--json|--report|--patch|--review-template] [--out file]`, `check <artifact.md|--stdin|--examples> [--route id|--all-routes] [--issues-only] [--strict] [--learn [--yes] [--learning-file path]] [--json]`, `workspace [--root path] [--learning-file path] [--learning-usage path] [--learning-eval path] [--strict] [--json]`, `site <workspace.json|--stdin> [--strict] [--json|--mcp-check [--probes]|--mcp-plan [--probes] [--json]|--next-actions [--json]|--graph|--tasks|--bundle|--report|--prompts|--prompt id [--task id]] [--out file] | site <bundle-dir> --bundle-check [--json] | site <bundle-dir> --bundle-compare other-bundle-dir [--json] | site <bundle-dir> --bundle-handoff [--task id] [--json] | site <bundle-dir> --bundle-repair [--yes] [--json] [--out file] | site --init --name name --live-url url [--next-actions] [--out file] | site --init --name name --live-url url --bundle --out dir | site --from-intake file.md|--stdin [--json|--next-actions [--json]|--tasks|--bundle [--tasks] --out dir] [--out file] | site --intake-template [--language en|ko] [--json] [--out file] | site --sample [--out file] | site --prompt-list [--json]`, `examples [query|--route id] [--limit N] [--json]`, `search <query> [--dir kind] [--limit N] [--ranked] [--embeddings [--provider "cmd args"]] [--json]`, `index [--build|--status|--verify] [--json] [--embeddings [--provider "cmd args"]]`, `show <file[:line]> [--lines N:M] [--context N] [--json]`, `audit [--strict] [--quiet] [--json]`, `doctor [--strict] [--json] [--fix]`, `mcp`, `version [--json]`, `help [command|--json]`.
|
|
78
|
+
CLI commands: `design-ai install [--json]`, `update [--dry-run] [--json]`, `uninstall [--json]`, `status [--json]`, `list [skills|commands|agents] [--json]`, `route <brief|--from-file file|--stdin|--list|--eval-template|--eval> [--limit N] [--explain] [--strict] [--json]`, `routes [--json]`, `prompt <brief|--from-file file|--stdin|--eval-template|--eval> [--out file] [--route id] [--with-learning] [--learning-category kind] [--learning-limit N] [--with-recall] [--recall-limit N] [--strict] [--json]`, `pack <brief|--from-file file|--stdin|--eval-template|--eval> [--out file] [--route id] [--with-learning] [--learning-category kind] [--learning-limit N] [--with-recall] [--recall-limit N] [--max-bytes N] [--strict] [--json]`, `learn [--init|--remember text|--feedback text|--list|--export|--query text|--explain|--recall query|--backup|--redact|--verify|--diff|--restore|--restore-backups [--prune]|--import|--audit [--fix]|--curate|--stats|--usage|--signals [--strict]|--agent-backlog [--strict]|--propose-skills [--min-evidence N] [--review-file path] [--review-check|--apply-plan] [--strict]|--eval-template|--eval [--strict]|--forget id|--clear] [--json|--report|--patch|--review-template] [--out file]`, `check <artifact.md|--stdin|--examples> [--route id|--all-routes] [--issues-only] [--strict] [--learn [--yes] [--learning-file path]] [--json]`, `workspace [--root path] [--learning-file path] [--learning-usage path] [--learning-eval path] [--strict] [--json]`, `site <workspace.json|--stdin> [--strict] [--json|--mcp-check [--probes]|--mcp-plan [--probes] [--json]|--next-actions [--json]|--graph|--tasks|--bundle|--report|--prompts|--prompt id [--task id]] [--out file] | site <bundle-dir> --bundle-check [--json] | site <bundle-dir> --bundle-compare other-bundle-dir [--json] | site <bundle-dir> --bundle-handoff [--task id] [--json] | site <bundle-dir> --bundle-repair [--yes] [--json] [--out file] | site --init --name name --live-url url [--next-actions] [--out file] | site --init --name name --live-url url --bundle --out dir | site --from-intake file.md|--stdin [--json|--next-actions [--json]|--tasks|--bundle [--tasks] --out dir] [--out file] | site --intake-template [--language en|ko] [--json] [--out file] | site --sample [--out file] | site --prompt-list [--json]`, `examples [query|--route id] [--limit N] [--json]`, `search <query|--eval-template|--eval> [--dir kind] [--limit N] [--ranked] [--embeddings [--provider "cmd args"]] [--strict] [--json]`, `index [--build|--status|--verify] [--json] [--embeddings [--provider "cmd args"]]`, `show <file[:line]> [--lines N:M] [--context N] [--json]`, `audit [--strict] [--quiet] [--json]`, `doctor [--strict] [--json] [--fix]`, `mcp`, `version [--json]`, `help [command|--json]`.
|
|
79
79
|
|
|
80
80
|
See [`docs/DISTRIBUTION.md`](docs/DISTRIBUTION.md) for the full distribution guide.
|
|
81
81
|
|
|
@@ -89,7 +89,7 @@ See [`docs/DISTRIBUTION.md`](docs/DISTRIBUTION.md) for the full distribution gui
|
|
|
89
89
|
| **Aider** | Pass `AGENTS.md` as system prompt. [Walkthrough](docs/integrations/aider-walkthrough.md). |
|
|
90
90
|
| **Anthropic / OpenAI SDK** | Embed relevant skill `PLAYBOOK.md` files in your prompt. [Walkthrough](docs/integrations/sdk-walkthrough.md). |
|
|
91
91
|
| **VS Code** | Install the public Marketplace extension for sidebar trees + quick-pick commands. [Walkthrough](docs/integrations/vscode-walkthrough.md). |
|
|
92
|
-
| **Node.js / Agent SDK** | `import { route, prompt, pack, search, recall, check, routes, version } from "@design-ai/cli/sdk"` — call design-ai's deterministic verbs as functions, no CLI shell-out or MCP server needed. Read-only (Phase A). [SDK reference](docs/SDK.md). |
|
|
92
|
+
| **Node.js / Agent SDK** | `import { route, prompt, pack, search, recall, check, routes, version } from "@design-ai/cli/sdk"` — call design-ai's deterministic verbs as functions, no CLI shell-out or MCP server needed. Read-only (Phase A). [SDK reference](docs/SDK.md). [Walkthrough](docs/integrations/agent-sdk-walkthrough.md). |
|
|
93
93
|
| **Plain prompt** | Paste any `skills/*/PLAYBOOK.md` body — each is self-contained. |
|
|
94
94
|
|
|
95
95
|
See [`docs/USING.md`](docs/USING.md) for per-agent setup details, or the linked walkthroughs for concrete example sessions.
|
|
@@ -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.
|
|
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.61.0**: 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
|
|
package/cli/commands/help.mjs
CHANGED
|
@@ -33,7 +33,7 @@ export const HELP_COMMANDS = [
|
|
|
33
33
|
{ topic: "uninstall", usage: "uninstall [--json]", description: "Remove symlinks (keeps source files)" },
|
|
34
34
|
{ topic: "status", usage: "status [--json]", description: "Show what's installed (use VERBOSE=1 for full list)" },
|
|
35
35
|
{ topic: "list", usage: "list [skills|commands|agents] [--json]", description: "List catalog from the plugin manifest" },
|
|
36
|
-
{ topic: "search", usage: "search <query> [--dir kind] [--limit N] [--ranked] [--embeddings [--provider \"cmd args\"]] [--json]", description: "Search the local markdown corpus" },
|
|
36
|
+
{ topic: "search", usage: "search <query|--eval-template|--eval> [--dir kind] [--limit N] [--ranked] [--embeddings [--provider \"cmd args\"]] [--strict] [--json]", description: "Search the local markdown corpus and ranked-search eval checkpoints" },
|
|
37
37
|
{ topic: "index", usage: "index [--build|--status|--verify] [--json] [--embeddings [--provider \"cmd args\"]]", description: "Build, inspect, and verify the local retrieval index" },
|
|
38
38
|
{ topic: "show", usage: "show <file[:line]> [--lines N:M] [--context N] [--json]", description: "Print a corpus file or line range" },
|
|
39
39
|
{ topic: "route", usage: "route <brief|--from-file file|--stdin|--list|--eval-template|--eval> [--limit N]", description: "Recommend commands, skills, knowledge, and route eval checkpoints" },
|
package/cli/commands/search.mjs
CHANGED
|
@@ -2,13 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
import { DESIGN_AI_HOME } from "../lib/paths.mjs";
|
|
4
4
|
import { dim, header, info, warn } from "../lib/log.mjs";
|
|
5
|
+
import { resolveBriefInput } from "../lib/brief.mjs";
|
|
5
6
|
import { configuredEmbeddingProvider, defaultConfigFile } from "../lib/local-config.mjs";
|
|
7
|
+
import { buildSearchEvalTemplate, searchEvalReport } from "../lib/search-eval.mjs";
|
|
6
8
|
import { embeddingRerankSearch, rankedSearchCorpus } from "../lib/search-ranked.mjs";
|
|
7
9
|
import { formatSearchJson, parseSearchArgs, searchCorpus } from "../lib/search.mjs";
|
|
8
10
|
|
|
9
11
|
function printHelp() {
|
|
10
|
-
console.log("Usage: design-ai search <query> [--limit N] [--dir kind] [--ranked] [--embeddings [--provider \"cmd args\"]] [--json]
|
|
11
|
-
console.log("
|
|
12
|
+
console.log("Usage: design-ai search <query> [--limit N] [--dir kind] [--ranked] [--embeddings [--provider \"cmd args\"]] [--json]");
|
|
13
|
+
console.log(" design-ai search --eval-template [--json]");
|
|
14
|
+
console.log(" design-ai search --eval --from-file search-eval.json [--strict] [--json]");
|
|
15
|
+
console.log(" cat search-eval.json | design-ai search --eval --stdin [--strict] [--json]\n");
|
|
16
|
+
console.log("Searches markdown files across knowledge, examples, skills, docs, agents, and commands.");
|
|
17
|
+
console.log("Search eval is read-only and checks deterministic ranked-search fixtures.\n");
|
|
12
18
|
console.log("Options:");
|
|
13
19
|
console.log(" --limit N Maximum hits to return, 1-500. Default: 20");
|
|
14
20
|
console.log(" --dir kind Restrict to one corpus directory. Repeatable.");
|
|
@@ -18,7 +24,18 @@ function printHelp() {
|
|
|
18
24
|
console.log(" Requires --ranked and a configured provider; falls back to the");
|
|
19
25
|
console.log(" lexical ranking (with a notice) if no provider or sidecar is available");
|
|
20
26
|
console.log(" --provider \"cmd args\" Embedding provider command for this invocation (overrides config)");
|
|
27
|
+
console.log(" --from-file file Read ranked-search eval JSON from a file (with --eval)");
|
|
28
|
+
console.log(" --stdin Read ranked-search eval JSON from standard input (with --eval)");
|
|
29
|
+
console.log(" --eval-template Generate a runnable ranked-search eval checkpoint JSON template");
|
|
30
|
+
console.log(" --eval Run deterministic ranked-search checkpoint cases");
|
|
31
|
+
console.log(" --strict With --eval, exit non-zero on warning or failure");
|
|
21
32
|
console.log(" --json Emit machine-readable results");
|
|
33
|
+
console.log("");
|
|
34
|
+
console.log("Examples:");
|
|
35
|
+
console.log(" design-ai search Pretendard");
|
|
36
|
+
console.log(" design-ai search \"button component\" --ranked");
|
|
37
|
+
console.log(" design-ai search --eval-template --json > search-eval.json");
|
|
38
|
+
console.log(" design-ai search --eval --from-file search-eval.json --strict --json");
|
|
22
39
|
}
|
|
23
40
|
|
|
24
41
|
function parseProviderFlag(value) {
|
|
@@ -45,6 +62,37 @@ function printRankedHits(query, hits, backend) {
|
|
|
45
62
|
info(`Hits: ${hits.length}`);
|
|
46
63
|
}
|
|
47
64
|
|
|
65
|
+
function printSearchEvalTemplate(template) {
|
|
66
|
+
header("design-ai search", "Ranked-search eval checkpoint template");
|
|
67
|
+
info(`Source: ${DESIGN_AI_HOME}`);
|
|
68
|
+
info(`Cases: ${template.cases.length}`);
|
|
69
|
+
console.log();
|
|
70
|
+
console.log("Write the JSON below to a file, edit cases if needed, then run:");
|
|
71
|
+
console.log("design-ai search --eval --from-file search-eval.json --strict");
|
|
72
|
+
console.log();
|
|
73
|
+
console.log(formatSearchJson(template));
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function printSearchEvalReport(report) {
|
|
77
|
+
header("design-ai search", "Ranked-search eval report");
|
|
78
|
+
info(`Source: ${report.source}`);
|
|
79
|
+
info(`Status: ${report.status}`);
|
|
80
|
+
info(`Cases: ${report.summary.total} (${report.summary.pass} pass, ${report.summary.warn} warn, ${report.summary.fail} fail)`);
|
|
81
|
+
console.log();
|
|
82
|
+
|
|
83
|
+
for (const result of report.cases) {
|
|
84
|
+
const top = result.topRelPath || "none";
|
|
85
|
+
console.log(`${result.status.toUpperCase()} ${result.id}`);
|
|
86
|
+
console.log(` query: ${result.query}`);
|
|
87
|
+
console.log(` top: ${top} ${dim(`(hits ${result.hitCount})`)}`);
|
|
88
|
+
if (result.matchedTokens.length > 0) {
|
|
89
|
+
console.log(` matched: ${result.matchedTokens.join(", ")}`);
|
|
90
|
+
}
|
|
91
|
+
console.log(` result: ${result.message}`);
|
|
92
|
+
console.log();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
48
96
|
export async function runSearch(args) {
|
|
49
97
|
const parsed = parseSearchArgs(args);
|
|
50
98
|
if (parsed.help) {
|
|
@@ -52,6 +100,37 @@ export async function runSearch(args) {
|
|
|
52
100
|
return;
|
|
53
101
|
}
|
|
54
102
|
|
|
103
|
+
if (parsed.evalTemplate) {
|
|
104
|
+
const template = buildSearchEvalTemplate({ sourceRoot: DESIGN_AI_HOME });
|
|
105
|
+
if (parsed.json) {
|
|
106
|
+
console.log(formatSearchJson(template));
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
printSearchEvalTemplate(template);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (parsed.eval) {
|
|
114
|
+
const evalText = resolveBriefInput(parsed);
|
|
115
|
+
const report = searchEvalReport({
|
|
116
|
+
evalText,
|
|
117
|
+
source: parsed.fromFile || "stdin",
|
|
118
|
+
sourceRoot: DESIGN_AI_HOME,
|
|
119
|
+
limit: parsed.limit,
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
if (parsed.json) {
|
|
123
|
+
console.log(formatSearchJson(report));
|
|
124
|
+
} else {
|
|
125
|
+
printSearchEvalReport(report);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (parsed.strict && report.status !== "pass") {
|
|
129
|
+
process.exitCode = 1;
|
|
130
|
+
}
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
|
|
55
134
|
if (parsed.embeddings && !parsed.ranked) {
|
|
56
135
|
throw new Error("--embeddings requires --ranked");
|
|
57
136
|
}
|
package/cli/lib/check.mjs
CHANGED
|
@@ -361,6 +361,35 @@ const ROUTE_REQUIREMENTS = {
|
|
|
361
361
|
],
|
|
362
362
|
},
|
|
363
363
|
],
|
|
364
|
+
"flow-design": [
|
|
365
|
+
{
|
|
366
|
+
id: "flow-states-steps",
|
|
367
|
+
title: "Flow states and steps coverage",
|
|
368
|
+
required: [
|
|
369
|
+
{ label: "steps or stages", patterns: [/\b(step|stage|sequence)\b/i, /단계|순서/] },
|
|
370
|
+
{ label: "state", patterns: [/\b(state|status)\b/i, /상태/] },
|
|
371
|
+
{ label: "transition between states", patterns: [/\b(transition|move[sd]? to|becomes?)\b/i, /전환|이동/] },
|
|
372
|
+
],
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
id: "flow-edge-cases",
|
|
376
|
+
title: "Flow edge case and error path coverage",
|
|
377
|
+
required: [
|
|
378
|
+
{ label: "error or failure path", patterns: [/\b(error|failure|fail(?:ed|s)?)\b/i, /에러|오류|실패/] },
|
|
379
|
+
{ label: "cancel or abandon path", patterns: [/\b(cancel|abandon|back out|dismiss)\b/i, /취소|중단/] },
|
|
380
|
+
{ label: "edge case", patterns: [/\bedge case\b/i, /예외|엣지 ?케이스/] },
|
|
381
|
+
],
|
|
382
|
+
},
|
|
383
|
+
{
|
|
384
|
+
id: "flow-entry-exit",
|
|
385
|
+
title: "Flow entry, exit, and completion coverage",
|
|
386
|
+
required: [
|
|
387
|
+
{ label: "entry point", patterns: [/\b(entry point|entry|trigger)\b/i, /진입점|진입/] },
|
|
388
|
+
{ label: "completion or success", patterns: [/\b(complete|completion|success|done)\b/i, /완료|성공/] },
|
|
389
|
+
{ label: "exit or abandonment", patterns: [/\b(exit|leave|drop[- ]?off|abandonment)\b/i, /이탈|나가기/] },
|
|
390
|
+
],
|
|
391
|
+
},
|
|
392
|
+
],
|
|
364
393
|
};
|
|
365
394
|
|
|
366
395
|
function routeRequirementResult(routeId, requirement, text) {
|
package/cli/lib/examples.mjs
CHANGED
|
@@ -31,6 +31,7 @@ const ROUTE_EXAMPLE_QUERIES = {
|
|
|
31
31
|
"figma-token-sync": "token palette",
|
|
32
32
|
"design-pr-review": "dogfood findings review",
|
|
33
33
|
"stability-review": "dogfood findings release",
|
|
34
|
+
"flow-design": "flow report block moderation onboarding",
|
|
34
35
|
};
|
|
35
36
|
|
|
36
37
|
const ROUTE_CATEGORY_BOOSTS = {
|
|
@@ -53,6 +54,7 @@ const CANONICAL_ROUTE_EXAMPLES = {
|
|
|
53
54
|
"print": ["examples/print-business-card-spec.md", "examples/print-packaging-spec.md"],
|
|
54
55
|
"game-ui": ["examples/component-game-menu.md"],
|
|
55
56
|
"slide-deck": ["examples/slide-deck-example.md"],
|
|
57
|
+
"flow-design": ["examples/flow-design-report-block.md"],
|
|
56
58
|
};
|
|
57
59
|
|
|
58
60
|
export function parseExamplesArgs(args) {
|
package/cli/lib/pack.mjs
CHANGED
|
@@ -150,6 +150,33 @@ export function parsePackArgs(args) {
|
|
|
150
150
|
};
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
+
// UTF-8 continuation bytes have the high bits `10xxxxxx` (0x80-0xBF). A slice
|
|
154
|
+
// that stops mid-character ends with 1-3 leading bytes of a multi-byte
|
|
155
|
+
// sequence and no continuation bytes yet — trimming those dangling leading
|
|
156
|
+
// bytes keeps the slice on a clean character boundary.
|
|
157
|
+
function trimIncompleteUtf8Tail(bytes) {
|
|
158
|
+
let end = bytes.length;
|
|
159
|
+
// A byte is a "leading" byte of a multi-byte sequence if its top two bits
|
|
160
|
+
// are `11` (0xC0-0xFF); continuation bytes are `10xxxxxx` (0x80-0xBF).
|
|
161
|
+
// Walk back over trailing continuation bytes, then drop the leading byte
|
|
162
|
+
// that started the (now truncated) sequence, unless that leading byte
|
|
163
|
+
// already had enough continuation bytes to be complete.
|
|
164
|
+
let back = 0;
|
|
165
|
+
while (end - back - 1 >= 0 && (bytes[end - back - 1] & 0xc0) === 0x80 && back < 3) {
|
|
166
|
+
back += 1;
|
|
167
|
+
}
|
|
168
|
+
const leadIndex = end - back - 1;
|
|
169
|
+
if (leadIndex >= 0) {
|
|
170
|
+
const lead = bytes[leadIndex];
|
|
171
|
+
const expectedLength = lead >= 0xf0 ? 4 : lead >= 0xe0 ? 3 : lead >= 0xc0 ? 2 : 1;
|
|
172
|
+
const availableLength = end - leadIndex;
|
|
173
|
+
if (expectedLength > availableLength) {
|
|
174
|
+
end = leadIndex;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return bytes.subarray(0, end);
|
|
178
|
+
}
|
|
179
|
+
|
|
153
180
|
function takeUtf8(content, maxBytes) {
|
|
154
181
|
const buf = Buffer.from(content, "utf8");
|
|
155
182
|
if (buf.byteLength <= maxBytes) {
|
|
@@ -160,7 +187,8 @@ function takeUtf8(content, maxBytes) {
|
|
|
160
187
|
};
|
|
161
188
|
}
|
|
162
189
|
|
|
163
|
-
const
|
|
190
|
+
const boundedBytes = trimIncompleteUtf8Tail(buf.subarray(0, Math.max(0, maxBytes)));
|
|
191
|
+
const sliced = boundedBytes.toString("utf8");
|
|
164
192
|
return {
|
|
165
193
|
content: sliced,
|
|
166
194
|
bytes: Buffer.byteLength(sliced, "utf8"),
|
package/cli/lib/recall.mjs
CHANGED
|
@@ -109,7 +109,7 @@ export function buildRecallContext({
|
|
|
109
109
|
const candidateCount = collectCorpusDocuments({ designAiPath, dirs }).length;
|
|
110
110
|
|
|
111
111
|
const hits = query
|
|
112
|
-
? rankedSearchCorpus({ query, designAiPath, dirs, limit: recallLimit,
|
|
112
|
+
? rankedSearchCorpus({ query, designAiPath, dirs, limit: recallLimit, excludeNonKnowledge: true }).hits
|
|
113
113
|
: [];
|
|
114
114
|
|
|
115
115
|
const selected = hits.map((hit) => ({
|
|
@@ -150,7 +150,7 @@ export function buildLearnRecall({
|
|
|
150
150
|
|
|
151
151
|
const corpusCandidateCount = collectCorpusDocuments({ designAiPath, dirs }).length;
|
|
152
152
|
const corpusHits = normalizedQuery
|
|
153
|
-
? rankedSearchCorpus({ query: normalizedQuery, designAiPath, dirs, limit,
|
|
153
|
+
? rankedSearchCorpus({ query: normalizedQuery, designAiPath, dirs, limit, excludeNonKnowledge: true }).hits
|
|
154
154
|
: [];
|
|
155
155
|
const corpusSelected = corpusHits.map((hit) => ({
|
|
156
156
|
id: hit.relPath,
|
package/cli/lib/route.mjs
CHANGED
|
@@ -284,6 +284,28 @@ export const ROUTES = [
|
|
|
284
284
|
],
|
|
285
285
|
keywords: ["release", "stability", "stale", "quarterly", "launch", "릴리스", "안정화", "오래된", "출시"],
|
|
286
286
|
},
|
|
287
|
+
{
|
|
288
|
+
id: "flow-design",
|
|
289
|
+
label: "Feature flow design",
|
|
290
|
+
command: null,
|
|
291
|
+
skills: ["skills/ux-audit/SKILL.md", "skills/design-critique/SKILL.md"],
|
|
292
|
+
agents: ["agents/a11y-reviewer.md"],
|
|
293
|
+
knowledge: [
|
|
294
|
+
"knowledge/patterns/ui-reasoning.md",
|
|
295
|
+
"knowledge/patterns/async-control.md",
|
|
296
|
+
"knowledge/patterns/trust-safety-moderation.md",
|
|
297
|
+
"knowledge/patterns/form-design.md",
|
|
298
|
+
"knowledge/patterns/error-states.md",
|
|
299
|
+
"knowledge/patterns/onboarding.md",
|
|
300
|
+
],
|
|
301
|
+
keywords: [
|
|
302
|
+
"플로우", "신고", "차단", "온보딩", "회원가입", "결제 플로우", "설정 화면", "알림 설정",
|
|
303
|
+
"모더레이션", "처리 상태", "사용자 여정",
|
|
304
|
+
"flow design", "onboarding flow", "sign-up flow", "signup flow", "checkout flow",
|
|
305
|
+
"report flow", "block flow", "moderation flow", "user journey", "wizard", "stepper",
|
|
306
|
+
"settings screen", "notification settings",
|
|
307
|
+
],
|
|
308
|
+
},
|
|
287
309
|
];
|
|
288
310
|
|
|
289
311
|
export function routeIds() {
|
|
@@ -482,9 +504,10 @@ function relatedKnowledgeFor({ brief, sourceRoot, curatedRelPaths }) {
|
|
|
482
504
|
dirs: RELATED_KNOWLEDGE_DIRS,
|
|
483
505
|
limit: RELATED_KNOWLEDGE_RECALL_LIMIT,
|
|
484
506
|
designAiPath: sourceRoot,
|
|
485
|
-
// Recall/injection surface: keep generated index/meta docs
|
|
486
|
-
//
|
|
487
|
-
|
|
507
|
+
// Recall/injection surface: keep non-knowledge docs (generated index/meta docs,
|
|
508
|
+
// package-excluded repo-meta docs, docs/integrations/ walkthroughs) out of the
|
|
509
|
+
// advisory related-knowledge list (docs/DOGFOOD-SDK-FINDINGS.md, F-2).
|
|
510
|
+
excludeNonKnowledge: true,
|
|
488
511
|
});
|
|
489
512
|
|
|
490
513
|
return hits
|