@mandujs/mcp 0.38.4 → 0.38.6

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 (35) hide show
  1. package/README.md +3 -3
  2. package/package.json +2 -2
  3. package/src/executor/error-handler.ts +2 -76
  4. package/src/index.ts +5 -5
  5. package/src/prompts.ts +4 -4
  6. package/src/resources/skills/guides.ts +49 -49
  7. package/src/resources/skills/loader.ts +8 -8
  8. package/src/resources/skills/mandu-agent-workflow/SKILL.md +124 -124
  9. package/src/resources/skills/mandu-agent-workflow/metadata.json +7 -7
  10. package/src/resources/skills/mandu-composition/SKILL.md +47 -47
  11. package/src/resources/skills/mandu-deployment/SKILL.md +53 -53
  12. package/src/resources/skills/mandu-deployment/rules/db-provider-supabase.md +3 -3
  13. package/src/resources/skills/mandu-fs-routes/SKILL.md +47 -47
  14. package/src/resources/skills/mandu-guard/SKILL.md +58 -58
  15. package/src/resources/skills/mandu-hydration/SKILL.md +67 -67
  16. package/src/resources/skills/mandu-hydration/rules/hydration-island-setup.md +54 -54
  17. package/src/resources/skills/mandu-hydration/rules/hydration-priority-visible.md +60 -60
  18. package/src/resources/skills/mandu-performance/SKILL.md +47 -47
  19. package/src/resources/skills/mandu-security/SKILL.md +47 -47
  20. package/src/resources/skills/mandu-slot/SKILL.md +48 -48
  21. package/src/resources/skills/mandu-styling/SKILL.md +52 -52
  22. package/src/resources/skills/mandu-testing/SKILL.md +55 -55
  23. package/src/resources/skills/mandu-ui/SKILL.md +52 -52
  24. package/src/resources/skills/recipes.ts +28 -28
  25. package/src/server.ts +3 -3
  26. package/src/tools/agent.ts +443 -443
  27. package/src/tools/ate.ts +37 -37
  28. package/src/tools/composite.ts +13 -13
  29. package/src/tools/guard.ts +0 -35
  30. package/src/tools/hydration.ts +197 -197
  31. package/src/tools/index.ts +4 -18
  32. package/src/tools/kitchen.ts +72 -72
  33. package/src/tools/runtime.ts +579 -579
  34. package/src/tools/slot-validation.ts +19 -19
  35. package/src/tools/transaction.ts +4 -18
@@ -5,60 +5,60 @@ impactDescription: Proper Island structure
5
5
  tags: hydration, island, setup
6
6
  ---
7
7
 
8
- ## Use Mandu.island() with Setup Function
9
-
10
- For complex Islands, use `Mandu.island()` API to separate state logic from rendering.
11
- `Mandu.island()` takes a single definition object. The shorthand
12
- `island("visible", Component)` is not a supported Mandu runtime API.
13
-
14
- Islands are page-level client bundles. They are discovered and rendered by
15
- the framework wrapper, not embedded directly as inline JSX. Use `partial()`
16
- when a server page needs an inline interactive region.
17
-
18
- ```tsx
19
- // Simple page-level island wrapper
20
- "use client";
21
-
22
- import { wrapComponent } from "@mandujs/core/client";
23
-
24
- function Counter() {
25
- return <button>Count</button>;
26
- }
27
-
28
- export default wrapComponent(Counter);
29
- ```
30
-
31
- ```tsx
32
- // Inline client region inside a server-rendered page
33
- // app/Counter.partial.tsx
34
- import { partial } from "@mandujs/core/client";
35
- import { Counter } from "./counter.client";
36
-
37
- export default partial({
38
- id: "Counter",
39
- component: Counter,
40
- priority: "visible",
41
- });
42
- ```
43
-
44
- ```tsx
45
- // app/page.tsx
46
- import CounterPartial from "./Counter.partial";
47
-
48
- export const hydration = {
49
- strategy: "island",
50
- priority: "visible",
51
- preload: false,
52
- };
53
-
54
- export default function Page() {
55
- return <CounterPartial.Render initial={0} />;
56
- }
57
- ```
58
-
59
- **Incorrect (mixed concerns):**
60
-
61
- ```tsx
8
+ ## Use Mandu.island() with Setup Function
9
+
10
+ For complex Islands, use `Mandu.island()` API to separate state logic from rendering.
11
+ `Mandu.island()` takes a single definition object. The shorthand
12
+ `island("visible", Component)` is not a supported Mandu runtime API.
13
+
14
+ Islands are page-level client bundles. They are discovered and rendered by
15
+ the framework wrapper, not embedded directly as inline JSX. Use `partial()`
16
+ when a server page needs an inline interactive region.
17
+
18
+ ```tsx
19
+ // Simple page-level island wrapper
20
+ "use client";
21
+
22
+ import { wrapComponent } from "@mandujs/core/client";
23
+
24
+ function Counter() {
25
+ return <button>Count</button>;
26
+ }
27
+
28
+ export default wrapComponent(Counter);
29
+ ```
30
+
31
+ ```tsx
32
+ // Inline client region inside a server-rendered page
33
+ // app/Counter.partial.tsx
34
+ import { partial } from "@mandujs/core/client";
35
+ import { Counter } from "./counter.client";
36
+
37
+ export default partial({
38
+ id: "Counter",
39
+ component: Counter,
40
+ priority: "visible",
41
+ });
42
+ ```
43
+
44
+ ```tsx
45
+ // app/page.tsx
46
+ import CounterPartial from "./Counter.partial";
47
+
48
+ export const hydration = {
49
+ strategy: "island",
50
+ priority: "visible",
51
+ preload: false,
52
+ };
53
+
54
+ export default function Page() {
55
+ return <CounterPartial.Render initial={0} />;
56
+ }
57
+ ```
58
+
59
+ **Incorrect (mixed concerns):**
60
+
61
+ ```tsx
62
62
  "use client";
63
63
 
64
64
  export default function TodoList({ initialTodos }) {
@@ -18,66 +18,66 @@ Set hydration priority based on when the component needs to be interactive.
18
18
  | `idle` | Browser idle | Non-critical features (analytics widgets) |
19
19
  | `interaction` | User action | Click-to-activate components |
20
20
 
21
- ## Examples
22
-
23
- Inline client regions live in `*.partial.tsx` files and use
24
- `partial({ id, component, priority })`, then render the returned `.Render`
25
- component from the server page. The page must export a non-`none` hydration
26
- config.
27
-
28
- ### Immediate: Always-visible interactions
29
-
30
- ```tsx
31
- // Header with navigation - needs to work immediately
32
- import { partial } from "@mandujs/core/client";
33
-
34
- const HeaderNavPartial = partial({
35
- id: "HeaderNav",
36
- component: HeaderNav,
37
- priority: "immediate",
38
- });
39
-
40
- <HeaderNavPartial.Render />
41
- ```
42
-
43
- ### Visible: Below-fold content (default)
44
-
45
- ```tsx
46
- // Comments section - load when scrolled into view
47
- const CommentsPartial = partial({
48
- id: "Comments",
49
- component: CommentsSection,
50
- priority: "visible",
51
- });
52
-
53
- <CommentsPartial.Render postId={postId} />
54
- ```
55
-
56
- ### Idle: Background features
57
-
58
- ```tsx
59
- // Chat widget - can wait until browser is idle
60
- const ChatPartial = partial({
61
- id: "Chat",
62
- component: ChatWidget,
63
- priority: "idle",
64
- });
65
-
66
- <ChatPartial.Render />
67
- ```
68
-
69
- ### Interaction: On-demand activation
70
-
71
- ```tsx
72
- // Video player - only hydrate when user clicks play
73
- const VideoPartial = partial({
74
- id: "Video",
75
- component: VideoPlayer,
76
- priority: "interaction",
77
- });
78
-
79
- <VideoPartial.Render videoId={videoId} />
80
- ```
21
+ ## Examples
22
+
23
+ Inline client regions live in `*.partial.tsx` files and use
24
+ `partial({ id, component, priority })`, then render the returned `.Render`
25
+ component from the server page. The page must export a non-`none` hydration
26
+ config.
27
+
28
+ ### Immediate: Always-visible interactions
29
+
30
+ ```tsx
31
+ // Header with navigation - needs to work immediately
32
+ import { partial } from "@mandujs/core/client";
33
+
34
+ const HeaderNavPartial = partial({
35
+ id: "HeaderNav",
36
+ component: HeaderNav,
37
+ priority: "immediate",
38
+ });
39
+
40
+ <HeaderNavPartial.Render />
41
+ ```
42
+
43
+ ### Visible: Below-fold content (default)
44
+
45
+ ```tsx
46
+ // Comments section - load when scrolled into view
47
+ const CommentsPartial = partial({
48
+ id: "Comments",
49
+ component: CommentsSection,
50
+ priority: "visible",
51
+ });
52
+
53
+ <CommentsPartial.Render postId={postId} />
54
+ ```
55
+
56
+ ### Idle: Background features
57
+
58
+ ```tsx
59
+ // Chat widget - can wait until browser is idle
60
+ const ChatPartial = partial({
61
+ id: "Chat",
62
+ component: ChatWidget,
63
+ priority: "idle",
64
+ });
65
+
66
+ <ChatPartial.Render />
67
+ ```
68
+
69
+ ### Interaction: On-demand activation
70
+
71
+ ```tsx
72
+ // Video player - only hydrate when user clicks play
73
+ const VideoPartial = partial({
74
+ id: "Video",
75
+ component: VideoPlayer,
76
+ priority: "interaction",
77
+ });
78
+
79
+ <VideoPartial.Render videoId={videoId} />
80
+ ```
81
81
 
82
82
  ## Performance Impact
83
83
 
@@ -10,53 +10,53 @@ metadata:
10
10
  version: "1.0.0"
11
11
  ---
12
12
 
13
- # Mandu Performance
14
-
15
- Mandu 애플리케이션의 성능 최적화 가이드. 워터폴 제거, 번들 최적화, 캐싱 패턴, Bun 런타임 활용법을 다룹니다. Vercel의 React Best Practices를 Mandu 컨텍스트로 변환하여 적용합니다.
16
-
17
- ## Agent Workflow Contract
18
-
19
- This skill is a Domain addendum. It must not replace `mandu-agent-workflow`.
20
- Use it only after `mandu.agent.plan` selects performance, hydration, route, API, or runtime domains.
21
-
22
- Canonical workflow step: `plan -> verify -> repair`.
23
-
24
- Preferred MCP tools:
25
-
26
- | Step | Tools |
27
- |------|-------|
28
- | plan | `mandu.agent.plan`, `mandu.agent.context` |
29
- | apply | `mandu.agent.apply` |
30
- | verify | `mandu.agent.verify`, `mandu.build`, `mandu.run.tests` |
31
- | repair | `mandu.agent.repair` |
32
-
33
- Allowed file edits:
34
-
35
- - Route, slot, island, or cache code named in the plan
36
- - Import boundaries that reduce bundle/runtime cost
37
- - Benchmark/test files scoped to the performance claim
38
-
39
- Verification command:
40
-
41
- ```bash
42
- mandu agent verify --changed --json --write
43
- ```
44
-
45
- Common failures:
46
-
47
- - Optimizing without a measurable route, bundle, or runtime target
48
- - Moving server-only code into client islands for convenience
49
- - Skipping typecheck or targeted tests after cache/import rewrites
50
-
51
- Repair path:
52
-
53
- ```bash
54
- mandu agent repair --from .mandu/agent-verify.json --json
55
- ```
56
-
57
- ## When to Apply
58
-
59
- Reference these guidelines when:
13
+ # Mandu Performance
14
+
15
+ Mandu 애플리케이션의 성능 최적화 가이드. 워터폴 제거, 번들 최적화, 캐싱 패턴, Bun 런타임 활용법을 다룹니다. Vercel의 React Best Practices를 Mandu 컨텍스트로 변환하여 적용합니다.
16
+
17
+ ## Agent Workflow Contract
18
+
19
+ This skill is a Domain addendum. It must not replace `mandu-agent-workflow`.
20
+ Use it only after `mandu.agent.plan` selects performance, hydration, route, API, or runtime domains.
21
+
22
+ Canonical workflow step: `plan -> verify -> repair`.
23
+
24
+ Preferred MCP tools:
25
+
26
+ | Step | Tools |
27
+ |------|-------|
28
+ | plan | `mandu.agent.plan`, `mandu.agent.context` |
29
+ | apply | `mandu.agent.apply` |
30
+ | verify | `mandu.agent.verify`, `mandu.build`, `mandu.run.tests` |
31
+ | repair | `mandu.agent.repair` |
32
+
33
+ Allowed file edits:
34
+
35
+ - Route, slot, island, or cache code named in the plan
36
+ - Import boundaries that reduce bundle/runtime cost
37
+ - Benchmark/test files scoped to the performance claim
38
+
39
+ Verification command:
40
+
41
+ ```bash
42
+ mandu agent verify --changed --json --write
43
+ ```
44
+
45
+ Common failures:
46
+
47
+ - Optimizing without a measurable route, bundle, or runtime target
48
+ - Moving server-only code into client islands for convenience
49
+ - Skipping typecheck or targeted tests after cache/import rewrites
50
+
51
+ Repair path:
52
+
53
+ ```bash
54
+ mandu agent repair --from .mandu/agent-verify.json --json
55
+ ```
56
+
57
+ ## When to Apply
58
+
59
+ Reference these guidelines when:
60
60
  - Optimizing slot handler response times
61
61
  - Reducing Island component bundle size
62
62
  - Implementing caching strategies
@@ -10,53 +10,53 @@ metadata:
10
10
  version: "1.0.0"
11
11
  ---
12
12
 
13
- # Mandu Security
14
-
15
- Mandu 애플리케이션의 보안 모범 사례 가이드. slot guard를 통한 인증/인가, 입력 검증, CSRF/XSS 방어, 환경 변수 관리를 다룹니다.
16
-
17
- ## Agent Workflow Contract
18
-
19
- This skill is a Domain addendum. It must not replace `mandu-agent-workflow`.
20
- Use it only after `mandu.agent.plan` selects security, auth, slot, API, or runtime domains.
21
-
22
- Canonical workflow step: `plan -> verify -> repair`.
23
-
24
- Preferred MCP tools:
25
-
26
- | Step | Tools |
27
- |------|-------|
28
- | plan | `mandu.agent.plan`, `mandu.docs.search` |
29
- | apply | `mandu.agent.apply` |
30
- | verify | `mandu.agent.verify`, `mandu.guard.check`, `mandu.contract.validate` |
31
- | repair | `mandu.agent.repair`, `mandu.guard.explain` |
32
-
33
- Allowed file edits:
34
-
35
- - Auth/session slot logic named in the plan
36
- - Server-only validation and security header configuration
37
- - Environment templates, never secret values
38
-
39
- Verification command:
40
-
41
- ```bash
42
- mandu agent verify --changed --json --write
43
- ```
44
-
45
- Common failures:
46
-
47
- - Exposing secrets through client bundles or sync artifacts
48
- - Changing auth behavior without route/API/slot verification
49
- - Treating guard findings as policy problems before checking source boundaries
50
-
51
- Repair path:
52
-
53
- ```bash
54
- mandu agent repair --from .mandu/agent-verify.json --json
55
- ```
56
-
57
- ## When to Apply
58
-
59
- Reference these guidelines when:
13
+ # Mandu Security
14
+
15
+ Mandu 애플리케이션의 보안 모범 사례 가이드. slot guard를 통한 인증/인가, 입력 검증, CSRF/XSS 방어, 환경 변수 관리를 다룹니다.
16
+
17
+ ## Agent Workflow Contract
18
+
19
+ This skill is a Domain addendum. It must not replace `mandu-agent-workflow`.
20
+ Use it only after `mandu.agent.plan` selects security, auth, slot, API, or runtime domains.
21
+
22
+ Canonical workflow step: `plan -> verify -> repair`.
23
+
24
+ Preferred MCP tools:
25
+
26
+ | Step | Tools |
27
+ |------|-------|
28
+ | plan | `mandu.agent.plan`, `mandu.docs.search` |
29
+ | apply | `mandu.agent.apply` |
30
+ | verify | `mandu.agent.verify`, `mandu.guard.check`, `mandu.contract.validate` |
31
+ | repair | `mandu.agent.repair`, `mandu.guard.explain` |
32
+
33
+ Allowed file edits:
34
+
35
+ - Auth/session slot logic named in the plan
36
+ - Server-only validation and security header configuration
37
+ - Environment templates, never secret values
38
+
39
+ Verification command:
40
+
41
+ ```bash
42
+ mandu agent verify --changed --json --write
43
+ ```
44
+
45
+ Common failures:
46
+
47
+ - Exposing secrets through client bundles or sync artifacts
48
+ - Changing auth behavior without route/API/slot verification
49
+ - Treating guard findings as policy problems before checking source boundaries
50
+
51
+ Repair path:
52
+
53
+ ```bash
54
+ mandu agent repair --from .mandu/agent-verify.json --json
55
+ ```
56
+
57
+ ## When to Apply
58
+
59
+ Reference these guidelines when:
60
60
  - Implementing authentication in slots
61
61
  - Adding authorization guards
62
62
  - Validating user input
@@ -11,54 +11,54 @@ metadata:
11
11
  version: "1.0.0"
12
12
  ---
13
13
 
14
- # Mandu Slot
15
-
16
- Slot은 비즈니스 로직을 작성하는 파일입니다. `Mandu.filling()` API를 사용하여
17
- API 핸들러, 인증 가드, 라이프사이클 훅을 구현합니다.
18
-
19
- ## Agent Workflow Contract
20
-
21
- This skill is a Domain addendum. It must not replace `mandu-agent-workflow`.
22
- Use it only after `mandu.agent.plan` selects the slot, API, or security domain.
23
-
24
- Canonical workflow step: `plan -> apply -> verify -> repair`.
25
-
26
- Preferred MCP tools:
27
-
28
- | Step | Tools |
29
- |------|-------|
30
- | plan | `mandu.agent.plan`, `mandu.slot.read`, `mandu.slot.constraints` |
31
- | apply | `mandu.agent.apply`, `mandu.generate` |
32
- | verify | `mandu.agent.verify`, `mandu.slot.validate`, `mandu.contract.validate` |
33
- | repair | `mandu.agent.repair` |
34
-
35
- Allowed file edits:
36
-
37
- - `spec/slots/**/*.slot.ts`
38
- - Route handlers that bind to the planned slot
39
- - Contract files only when the plan includes contract work
40
-
41
- Verification command:
42
-
43
- ```bash
44
- mandu agent verify --changed --json --write
45
- ```
46
-
47
- Common failures:
48
-
49
- - Creating slot logic without checking `mandu.slot.constraints`
50
- - Mixing auth/security changes into slot edits without security verification
51
- - Returning untyped responses that drift from the linked contract
52
-
53
- Repair path:
54
-
55
- ```bash
56
- mandu agent repair --from .mandu/agent-verify.json --json
57
- ```
58
-
59
- ## When to Apply
60
-
61
- Reference these guidelines when:
14
+ # Mandu Slot
15
+
16
+ Slot은 비즈니스 로직을 작성하는 파일입니다. `Mandu.filling()` API를 사용하여
17
+ API 핸들러, 인증 가드, 라이프사이클 훅을 구현합니다.
18
+
19
+ ## Agent Workflow Contract
20
+
21
+ This skill is a Domain addendum. It must not replace `mandu-agent-workflow`.
22
+ Use it only after `mandu.agent.plan` selects the slot, API, or security domain.
23
+
24
+ Canonical workflow step: `plan -> apply -> verify -> repair`.
25
+
26
+ Preferred MCP tools:
27
+
28
+ | Step | Tools |
29
+ |------|-------|
30
+ | plan | `mandu.agent.plan`, `mandu.slot.read`, `mandu.slot.constraints` |
31
+ | apply | `mandu.agent.apply`, `mandu.generate` |
32
+ | verify | `mandu.agent.verify`, `mandu.slot.validate`, `mandu.contract.validate` |
33
+ | repair | `mandu.agent.repair` |
34
+
35
+ Allowed file edits:
36
+
37
+ - `spec/slots/**/*.slot.ts`
38
+ - Route handlers that bind to the planned slot
39
+ - Contract files only when the plan includes contract work
40
+
41
+ Verification command:
42
+
43
+ ```bash
44
+ mandu agent verify --changed --json --write
45
+ ```
46
+
47
+ Common failures:
48
+
49
+ - Creating slot logic without checking `mandu.slot.constraints`
50
+ - Mixing auth/security changes into slot edits without security verification
51
+ - Returning untyped responses that drift from the linked contract
52
+
53
+ Repair path:
54
+
55
+ ```bash
56
+ mandu agent repair --from .mandu/agent-verify.json --json
57
+ ```
58
+
59
+ ## When to Apply
60
+
61
+ Reference these guidelines when:
62
62
  - Creating new API endpoints with business logic
63
63
  - Implementing authentication or authorization
64
64
  - Adding request/response lifecycle hooks
@@ -11,53 +11,53 @@ globs:
11
11
  - "app/globals.css"
12
12
  ---
13
13
 
14
- # Mandu Styling Skill
15
-
16
- Mandu Island 아키텍처에 최적화된 Tailwind CSS v4 스타일링 가이드입니다.
17
-
18
- ## Agent Workflow Contract
19
-
20
- This skill is a Domain addendum. It must not replace `mandu-agent-workflow`.
21
- Use it only after `mandu.agent.plan` selects styling, design, UI, hydration, or component domains.
22
-
23
- Canonical workflow step: `plan -> apply -> verify`.
24
-
25
- Preferred MCP tools:
26
-
27
- | Step | Tools |
28
- |------|-------|
29
- | plan | `mandu.agent.plan`, `mandu.design.get` |
30
- | apply | `mandu.agent.apply`, `mandu.design.patch` |
31
- | verify | `mandu.agent.verify`, `mandu.design.check`, `mandu.lint` |
32
- | repair | `mandu.agent.repair` |
33
-
34
- Allowed file edits:
35
-
36
- - CSS files named in the plan, especially `app/globals.css`
37
- - Component className changes scoped to the target UI
38
- - Theme tokens only after inspecting the project's design source
39
-
40
- Verification command:
41
-
42
- ```bash
43
- mandu agent verify --changed --json --write
44
- ```
45
-
46
- Common failures:
47
-
48
- - Installing or changing styling stacks before checking the existing project style
49
- - Editing broad theme tokens for a local component issue
50
- - Skipping design/lint verification after Tailwind v4 syntax changes
51
-
52
- Repair path:
53
-
54
- ```bash
55
- mandu agent repair --from .mandu/agent-verify.json --json
56
- ```
57
-
58
- ## 핵심 원칙
59
-
60
- 1. **Zero-Runtime**: 빌드 타임 CSS 생성 (SSR 호환)
14
+ # Mandu Styling Skill
15
+
16
+ Mandu Island 아키텍처에 최적화된 Tailwind CSS v4 스타일링 가이드입니다.
17
+
18
+ ## Agent Workflow Contract
19
+
20
+ This skill is a Domain addendum. It must not replace `mandu-agent-workflow`.
21
+ Use it only after `mandu.agent.plan` selects styling, design, UI, hydration, or component domains.
22
+
23
+ Canonical workflow step: `plan -> apply -> verify`.
24
+
25
+ Preferred MCP tools:
26
+
27
+ | Step | Tools |
28
+ |------|-------|
29
+ | plan | `mandu.agent.plan`, `mandu.design.get` |
30
+ | apply | `mandu.agent.apply`, `mandu.design.patch` |
31
+ | verify | `mandu.agent.verify`, `mandu.design.check`, `mandu.lint` |
32
+ | repair | `mandu.agent.repair` |
33
+
34
+ Allowed file edits:
35
+
36
+ - CSS files named in the plan, especially `app/globals.css`
37
+ - Component className changes scoped to the target UI
38
+ - Theme tokens only after inspecting the project's design source
39
+
40
+ Verification command:
41
+
42
+ ```bash
43
+ mandu agent verify --changed --json --write
44
+ ```
45
+
46
+ Common failures:
47
+
48
+ - Installing or changing styling stacks before checking the existing project style
49
+ - Editing broad theme tokens for a local component issue
50
+ - Skipping design/lint verification after Tailwind v4 syntax changes
51
+
52
+ Repair path:
53
+
54
+ ```bash
55
+ mandu agent repair --from .mandu/agent-verify.json --json
56
+ ```
57
+
58
+ ## 핵심 원칙
59
+
60
+ 1. **Zero-Runtime**: 빌드 타임 CSS 생성 (SSR 호환)
61
61
  2. **CSS-First**: JavaScript 설정 대신 CSS에서 테마 정의
62
62
  3. **Island 격리**: 컴포넌트 간 스타일 충돌 방지
63
63
  4. **Auto Integration**: Mandu가 Tailwind v4 자동 감지 및 빌드
@@ -69,11 +69,11 @@ Primary: Tailwind CSS v4 + clsx/tailwind-merge
69
69
  Alternative: CSS Modules (최소 의존성)
70
70
  ```
71
71
 
72
- ## Setup Examples
73
-
74
- Use these examples only after `mandu.agent.plan` selects styling setup or migration.
75
-
76
- ### 1. 설치
72
+ ## Setup Examples
73
+
74
+ Use these examples only after `mandu.agent.plan` selects styling setup or migration.
75
+
76
+ ### 1. 설치
77
77
 
78
78
  ```bash
79
79
  bun add -d tailwindcss@^4.1 @tailwindcss/cli@^4.1