refactor(prompt): 모델을 create/detail/feed/shared로 재구성#24
refactor(prompt): 모델을 create/detail/feed/shared로 재구성#24
Conversation
- prompt model을 create, detail, feed, shared 하위 폴더로 분리 - model/index.ts에서 기존 export 유지 (호환성) - CreatePromptView, HomeFeedView, PromptDetailView 및 create 스텝 import 경로 정리 - prompt-builder: usePromptRecommendations, 타입, 페이지/패널 업데이트 - prompt api, usePromptList, useSearchParamsSync 수정 Made-with: Cursor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
개요프롬프트 빌더 기능의 권장사항 시스템을 강화하고, 의미론적 설정 UI를 개선하며, 모듈 구조를 재조직화했습니다. 레거시 API 제거, 타입 확장, 다국어화(한글) 지원, 그리고 광범위한 임포트 경로 업데이트를 포함합니다. 변경사항
관련 PR 목록
예상 코드 리뷰 노력🎯 4 (복잡함) | ⏱️ ~45분 시
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
sharedPrompts/my-app/src/features/prompt/model/detail/useRelatedPrompts.ts (1)
16-35:⚠️ Potential issue | 🟡 Minor새 프롬프트로 이동하거나 요청이 실패할 때 이전 연관 프롬프트 데이터가 남아있습니다.
현재 코드는
prompt가 유효한 경우 fetch를 시작해도 기존relatedPrompts상태를 초기화하지 않아서, 프롬프트 전환 시 이전 데이터가 새 요청이 완료될 때까지 표시됩니다. 또한 요청 실패 시에도 상태를 초기화하지 않아 오래된 데이터가 계속 노출될 수 있습니다. 요청 시작 시점과 에러 발생 시 상태를 초기화해 두는 편이 안전합니다.🔧 제안 수정안
useEffect(() => { if (!prompt?.prompt_category || prompt?.id == null) { setRelatedPrompts([]); return; } let cancelled = false; + setRelatedPrompts([]); const fetchRelatedPrompts = async () => { try { const response = await promptApi.getPrompts({ page: 0, @@ if (!cancelled) { setRelatedPrompts(related); } } catch (err) { if (!cancelled) { + setRelatedPrompts([]); console.error('Failed to fetch related prompts:', err); } } };🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@sharedPrompts/my-app/src/features/prompt/model/detail/useRelatedPrompts.ts` around lines 16 - 35, The fetchRelatedPrompts function leaves previous relatedPrompts visible while a new request runs or when a request fails; to fix this, call setRelatedPrompts([]) at the start of fetchRelatedPrompts (before the API call) to clear old data and also call setRelatedPrompts([]) in the catch block when !cancelled to clear state on error; ensure you still respect the cancelled flag and only update state when cancelled is false, and keep references to prompt.prompt_category and prompt.id as in the existing fetchRelatedPrompts logic.sharedPrompts/my-app/src/features/prompt/model/detail/useComments.ts (1)
34-104:⚠️ Potential issue | 🟠 Major
promptId가 바뀔 때 이전 댓글 응답이 현재 화면 상태를 덮어쓸 수 있습니다.이 effect는
fetchComments()와 내부checkCommentLikes()모두에 취소 가드가 없어서, 상세 페이지를 빠르게 이동하면 늦게 도착한 이전 요청이comments/likedComments를 새 프롬프트 기준 상태로 잘못 덮어쓸 수 있습니다.promptId변경 시 상태 초기화와 cleanup guard를 같이 두는 편이 안전합니다. (같은 패턴이useRelatedPrompts.ts에서 이미 적용되어 있습니다.)🔧 제안 수정안
useEffect(() => { - if (!promptId) return; + if (!promptId) { + setComments([]); + setLikedComments([]); + return; + } + + let cancelled = false; + setComments([]); + setLikedComments([]); const fetchComments = async () => { try { const response = await commentApi.getComments(promptId); const commentsData = response.data.data; @@ - setComments(structuredComments); + if (cancelled) return; + setComments(structuredComments); @@ - setLikedComments(likedIds); + if (!cancelled) { + setLikedComments(likedIds); + } } catch (err) { console.error('Failed to check comment like statuses:', err); - setLikedComments([]); + if (!cancelled) { + setLikedComments([]); + } } }; checkCommentLikes(); } catch (err) { - console.error('Failed to fetch comments:', err); + if (!cancelled) { + console.error('Failed to fetch comments:', err); + } } }; fetchComments(); + return () => { + cancelled = true; + }; }, [promptId]);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@sharedPrompts/my-app/src/features/prompt/model/detail/useComments.ts` around lines 34 - 104, When promptId changes the async fetchComments and its inner checkCommentLikes can resolve after a newer promptId is active and overwrite state; update the useEffect around fetchComments to (1) reset comments and likedComments immediately when promptId changes, (2) add a cancellation guard (e.g., let cancelled = false or an AbortController) that you check before calling setComments and setLikedComments inside fetchComments and checkCommentLikes, and (3) return a cleanup function that sets cancelled = true (or aborts the controller) so late responses are ignored; modify the existing functions fetchComments and checkCommentLikes to bail out when cancelled before calling setComments/setLikedComments.sharedPrompts/my-app/src/features/prompt-builder/ui/SemanticSettingsPanel.tsx (1)
85-91:⚠️ Potential issue | 🟡 Minor
overridesprop이 destructure되지 않음
overrides가 인터페이스에서 required prop으로 선언되어 있고PromptBuilderPage에서 전달하지만, 컴포넌트에서 destructure되지 않아 사용되지 않습니다. 사용자가 직접 선택한 값을 시각적으로 표시하는 데 사용해야 할 것 같습니다.🔧 수정 제안
export const SemanticSettingsPanel: React.FC<SemanticSettingsPanelProps> = ({ selectedAxes, + overrides, axisSources, candidates = {}, onUpdateField, isLoading, }) => {그 후
overrides[id]를 사용하여 사용자가 직접 수정한 필드를 시각적으로 구분할 수 있습니다.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@sharedPrompts/my-app/src/features/prompt-builder/ui/SemanticSettingsPanel.tsx` around lines 85 - 91, The SemanticSettingsPanel component currently accepts an overrides prop in its SemanticSettingsPanelProps but does not destructure or use it; update the component signature to destructure overrides alongside selectedAxes, axisSources, candidates, onUpdateField, and isLoading, then use overrides (e.g. overrides[id]) where fields are rendered to visually indicate user-modified values (for example, apply a special class or marker when overrides[id] exists) so PromptBuilderPage-provided overrides are respected and shown in the UI.
🧹 Nitpick comments (6)
sharedPrompts/my-app/src/features/prompt-builder/ui/PromptInputPanel.tsx (1)
2-2: 미사용 import:PromptCategory
PromptCategory타입이 import되었지만 컴포넌트 내에서 사용되지 않습니다.PROMPT_CATEGORY_DISPLAY_NAMES만 사용됩니다.♻️ 제안
-import { PromptCategory, PROMPT_CATEGORY_DISPLAY_NAMES } from '@/features/prompt/types/prompt.types'; +import { PROMPT_CATEGORY_DISPLAY_NAMES } from '@/features/prompt/types/prompt.types';🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@sharedPrompts/my-app/src/features/prompt-builder/ui/PromptInputPanel.tsx` at line 2, The import statement brings in an unused type PromptCategory; remove PromptCategory from the import so only PROMPT_CATEGORY_DISPLAY_NAMES is imported (update the import in PromptInputPanel.tsx to import PROMPT_CATEGORY_DISPLAY_NAMES from '@/features/prompt/types/prompt.types' and ensure no other references to PromptCategory remain).sharedPrompts/my-app/src/features/prompt/model/feed/useHomeFeedView.ts (1)
69-79: 선택 사항: 중복된 useEffect 블록 통합 고려두 개의 useEffect가 동일한 작업(페이지네이션 리셋)을 수행합니다. 의미적으로 분리된 트리거(필터 변경 vs 검색어 변경)이지만, 하나로 통합할 수 있습니다.
♻️ 통합 제안
- useEffect(() => { - setPage(0); - setPrompts([]); - setLikedIds([]); - }, [selectedDomain, sortBy, setPrompts, setLikedIds]); - - useEffect(() => { - setPage(0); - setPrompts([]); - setLikedIds([]); - }, [debouncedSearchQuery, setPrompts, setLikedIds]); + useEffect(() => { + setPage(0); + setPrompts([]); + setLikedIds([]); + }, [selectedDomain, sortBy, debouncedSearchQuery, setPrompts, setLikedIds]);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@sharedPrompts/my-app/src/features/prompt/model/feed/useHomeFeedView.ts` around lines 69 - 79, The two useEffect blocks that reset pagination (calling setPage, setPrompts, setLikedIds) are duplicated; consolidate them into a single useEffect so the same reset logic runs when any trigger changes—include selectedDomain, sortBy, and debouncedSearchQuery (and the setter functions setPrompts, setLikedIds) in the dependency array; update the existing useEffect(s) referencing those symbols so there is one unified reset handler instead of two nearly identical effects.sharedPrompts/my-app/src/features/prompt-builder/ui/PromptBuilderPage.tsx (2)
108-109: 언어 일관성 확인헤더 제목 "AI Prompt Builder"와 설명이 영어로 작성되어 있으나, 다른 UI 요소들은 한국어입니다. 의도적인 브랜딩이라면 괜찮지만, 일관성이 필요하다면 한국어로 변경을 고려해주세요.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@sharedPrompts/my-app/src/features/prompt-builder/ui/PromptBuilderPage.tsx` around lines 108 - 109, The header text in PromptBuilderPage ("AI Prompt Builder" and the following <p> description) is in English while the rest of the UI is Korean; update the literal strings in the PromptBuilderPage component (the <h1> with text "AI Prompt Builder" and the <p> with the English description) to Korean for consistency (e.g., "AI 프롬프트 빌더" or "AI 프롬프트 생성기" and a matching Korean sentence), or if the English is intentional as branding, add a comment documenting that choice and keep both strings as-is; locate these literals in the PromptBuilderPage component and change only the displayed text (no logic changes).
44-44: Deprecated intent 필터링 - 상수로 추출 권장
ActionIntent열거형에서DEBUG,DESIGN,CODE는 명시적으로 "DEPRECATED (FOR FALLBACK)"로 표시되어 있습니다. 현재 필터링은 의도적이고 적절하며, 이 값들의 목적이 명확하게 문서화되어 있습니다.다만 유지보수 명확성을 위해 이 3개 값을 별도 상수로 추출하는 것을 선택적으로 권장합니다:
const DEPRECATED_INTENTS = ['DEBUG', 'DESIGN', 'CODE']; const fallbackIntents = Object.values(ActionIntent).filter(i => !DEPRECATED_INTENTS.includes(i));🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@sharedPrompts/my-app/src/features/prompt-builder/ui/PromptBuilderPage.tsx` at line 44, Extract the three deprecated intent strings into a named constant and use it in the filter to improve clarity and maintainability: create a constant (e.g., DEPRECATED_INTENTS) containing 'DEBUG', 'DESIGN', 'CODE' and update the existing fallbackIntents declaration to filter Object.values(ActionIntent) by checking !DEPRECATED_INTENTS.includes(i). Reference ActionIntent and fallbackIntents when making the change so the intent set and filtering remain consistent.sharedPrompts/my-app/src/features/prompt-builder/ui/SemanticSettingsPanel.tsx (1)
74-83:as any타입 단언에 대한 선택적 개선
as any단언이 타입 안전성을 우회합니다. 동적id문자열을 처리하기 위한 현실적인 접근이지만, 타입 안전성을 원한다면 다음과 같이 개선할 수 있습니다.♻️ 타입 안전한 대안
const DISPLAY_NAME_MAPS: Record<string, Record<string, string>> = { intent: INTENT_DISPLAY_NAMES_KO, actionType: ACTION_TYPE_DISPLAY_NAMES_KO, roleType: ROLE_TYPE_DISPLAY_NAMES_KO, tone: TONE_DISPLAY_NAMES, style: STYLE_DISPLAY_NAMES, language: LANGUAGE_DISPLAY_NAMES, experience: EXPERIENCE_DISPLAY_NAMES, }; const getDisplayLabel = (id: string, opt: string): string => { return DISPLAY_NAME_MAPS[id]?.[opt] || opt; };🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@sharedPrompts/my-app/src/features/prompt-builder/ui/SemanticSettingsPanel.tsx` around lines 74 - 83, Replace the ad-hoc "as any" assertions in getDisplayLabel with a typed lookup map: define a DISPLAY_NAME_MAPS constant typed as Record<string, Record<string, string>> that maps the ids (intent, actionType, roleType, tone, style, language, experience) to their respective display-name objects, then update getDisplayLabel to return DISPLAY_NAME_MAPS[id]?.[opt] || opt and give getDisplayLabel an explicit string return type; remove all "as any" casts (refer to getDisplayLabel and the new DISPLAY_NAME_MAPS symbol).sharedPrompts/my-app/src/features/prompt-builder/types/prompt-builder.types.ts (1)
2-13: 요청 DTO는 공용 enum/union을 재사용해서 계약을 좁혀주세요.지금처럼
request_mode,category,intent,tone,style,language,experience를 전부string으로 두면 잘못된 값도 컴파일을 통과해서prompt.types.ts와 쉽게 드리프트합니다. 이미 있는RequestTypeValue,PromptCategory,ActionIntent,ToneType,StyleType,LanguageType,ExperienceLevel를 그대로 재사용하는 편이 안전합니다.타입 정렬 예시
+import type { + ActionIntent, + ExperienceLevel, + LanguageType, + PromptCategory, + RequestTypeValue, + StyleType, + ToneType, +} from '@/features/prompt/types/prompt.types'; + export interface RecommendPromptRequest { - request_mode: string; // RequestMode: SIMPLE | EXTRACTION | ADVANCED - category?: string; - intent?: string; + request_mode: RequestTypeValue; + category?: PromptCategory; + intent?: ActionIntent; role_type?: string; action_type?: string; - tone?: string; - style?: string; - language?: string; - experience?: string; + tone?: ToneType; + style?: StyleType; + language?: LanguageType; + experience?: ExperienceLevel; raw_input: string; } export interface ConfirmedGeneratePromptRequest { - request_mode: string; - category: string; - intent: string; + request_mode: RequestTypeValue; + category: PromptCategory; + intent: ActionIntent; role_type?: string; action_type?: string; - tone?: string; - style?: string; - language?: string; - experience?: string; + tone?: ToneType; + style?: StyleType; + language?: LanguageType; + experience?: ExperienceLevel; input: string; json_schema?: string; title?: string;Also applies to: 35-49
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@sharedPrompts/my-app/src/features/prompt-builder/types/prompt-builder.types.ts` around lines 2 - 13, Update the RecommendPromptRequest DTO to tighten types by replacing loose string types with the existing shared unions/enums: use RequestTypeValue for request_mode, PromptCategory for category, ActionIntent for intent, ToneType for tone, StyleType for style, LanguageType for language, and ExperienceLevel for experience; keep raw_input as string and ensure the same replacements are applied to the other similar DTO block referenced (the one that corresponds to lines 35-49) so the interface names and property names (RecommendPromptRequest, request_mode, category, intent, tone, style, language, experience) reference the centralized types rather than plain string.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Outside diff comments:
In
`@sharedPrompts/my-app/src/features/prompt-builder/ui/SemanticSettingsPanel.tsx`:
- Around line 85-91: The SemanticSettingsPanel component currently accepts an
overrides prop in its SemanticSettingsPanelProps but does not destructure or use
it; update the component signature to destructure overrides alongside
selectedAxes, axisSources, candidates, onUpdateField, and isLoading, then use
overrides (e.g. overrides[id]) where fields are rendered to visually indicate
user-modified values (for example, apply a special class or marker when
overrides[id] exists) so PromptBuilderPage-provided overrides are respected and
shown in the UI.
In `@sharedPrompts/my-app/src/features/prompt/model/detail/useComments.ts`:
- Around line 34-104: When promptId changes the async fetchComments and its
inner checkCommentLikes can resolve after a newer promptId is active and
overwrite state; update the useEffect around fetchComments to (1) reset comments
and likedComments immediately when promptId changes, (2) add a cancellation
guard (e.g., let cancelled = false or an AbortController) that you check before
calling setComments and setLikedComments inside fetchComments and
checkCommentLikes, and (3) return a cleanup function that sets cancelled = true
(or aborts the controller) so late responses are ignored; modify the existing
functions fetchComments and checkCommentLikes to bail out when cancelled before
calling setComments/setLikedComments.
In `@sharedPrompts/my-app/src/features/prompt/model/detail/useRelatedPrompts.ts`:
- Around line 16-35: The fetchRelatedPrompts function leaves previous
relatedPrompts visible while a new request runs or when a request fails; to fix
this, call setRelatedPrompts([]) at the start of fetchRelatedPrompts (before the
API call) to clear old data and also call setRelatedPrompts([]) in the catch
block when !cancelled to clear state on error; ensure you still respect the
cancelled flag and only update state when cancelled is false, and keep
references to prompt.prompt_category and prompt.id as in the existing
fetchRelatedPrompts logic.
---
Nitpick comments:
In
`@sharedPrompts/my-app/src/features/prompt-builder/types/prompt-builder.types.ts`:
- Around line 2-13: Update the RecommendPromptRequest DTO to tighten types by
replacing loose string types with the existing shared unions/enums: use
RequestTypeValue for request_mode, PromptCategory for category, ActionIntent for
intent, ToneType for tone, StyleType for style, LanguageType for language, and
ExperienceLevel for experience; keep raw_input as string and ensure the same
replacements are applied to the other similar DTO block referenced (the one that
corresponds to lines 35-49) so the interface names and property names
(RecommendPromptRequest, request_mode, category, intent, tone, style, language,
experience) reference the centralized types rather than plain string.
In `@sharedPrompts/my-app/src/features/prompt-builder/ui/PromptBuilderPage.tsx`:
- Around line 108-109: The header text in PromptBuilderPage ("AI Prompt Builder"
and the following <p> description) is in English while the rest of the UI is
Korean; update the literal strings in the PromptBuilderPage component (the <h1>
with text "AI Prompt Builder" and the <p> with the English description) to
Korean for consistency (e.g., "AI 프롬프트 빌더" or "AI 프롬프트 생성기" and a matching
Korean sentence), or if the English is intentional as branding, add a comment
documenting that choice and keep both strings as-is; locate these literals in
the PromptBuilderPage component and change only the displayed text (no logic
changes).
- Line 44: Extract the three deprecated intent strings into a named constant and
use it in the filter to improve clarity and maintainability: create a constant
(e.g., DEPRECATED_INTENTS) containing 'DEBUG', 'DESIGN', 'CODE' and update the
existing fallbackIntents declaration to filter Object.values(ActionIntent) by
checking !DEPRECATED_INTENTS.includes(i). Reference ActionIntent and
fallbackIntents when making the change so the intent set and filtering remain
consistent.
In `@sharedPrompts/my-app/src/features/prompt-builder/ui/PromptInputPanel.tsx`:
- Line 2: The import statement brings in an unused type PromptCategory; remove
PromptCategory from the import so only PROMPT_CATEGORY_DISPLAY_NAMES is imported
(update the import in PromptInputPanel.tsx to import
PROMPT_CATEGORY_DISPLAY_NAMES from '@/features/prompt/types/prompt.types' and
ensure no other references to PromptCategory remain).
In
`@sharedPrompts/my-app/src/features/prompt-builder/ui/SemanticSettingsPanel.tsx`:
- Around line 74-83: Replace the ad-hoc "as any" assertions in getDisplayLabel
with a typed lookup map: define a DISPLAY_NAME_MAPS constant typed as
Record<string, Record<string, string>> that maps the ids (intent, actionType,
roleType, tone, style, language, experience) to their respective display-name
objects, then update getDisplayLabel to return DISPLAY_NAME_MAPS[id]?.[opt] ||
opt and give getDisplayLabel an explicit string return type; remove all "as any"
casts (refer to getDisplayLabel and the new DISPLAY_NAME_MAPS symbol).
In `@sharedPrompts/my-app/src/features/prompt/model/feed/useHomeFeedView.ts`:
- Around line 69-79: The two useEffect blocks that reset pagination (calling
setPage, setPrompts, setLikedIds) are duplicated; consolidate them into a single
useEffect so the same reset logic runs when any trigger changes—include
selectedDomain, sortBy, and debouncedSearchQuery (and the setter functions
setPrompts, setLikedIds) in the dependency array; update the existing
useEffect(s) referencing those symbols so there is one unified reset handler
instead of two nearly identical effects.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 7c060b80-52d8-42bb-9b21-43773fd35c0a
⛔ Files ignored due to path filters (1)
sharedPrompts/my-app/package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (36)
sharedPrompts/my-app/src/features/prompt-builder/model/usePromptRecommendations.tssharedPrompts/my-app/src/features/prompt-builder/types/prompt-builder.types.tssharedPrompts/my-app/src/features/prompt-builder/ui/PromptBuilderPage.tsxsharedPrompts/my-app/src/features/prompt-builder/ui/PromptInputPanel.tsxsharedPrompts/my-app/src/features/prompt-builder/ui/SemanticSettingsPanel.tsxsharedPrompts/my-app/src/features/prompt/api/prompt.api.tssharedPrompts/my-app/src/features/prompt/hooks/usePromptList.tssharedPrompts/my-app/src/features/prompt/hooks/useSearchParamsSync.tssharedPrompts/my-app/src/features/prompt/model/create/createPrompt.constants.tssharedPrompts/my-app/src/features/prompt/model/create/useCreatePromptView.tssharedPrompts/my-app/src/features/prompt/model/detail/useComments.tssharedPrompts/my-app/src/features/prompt/model/detail/usePromptActions.tssharedPrompts/my-app/src/features/prompt/model/detail/usePromptDetail.tssharedPrompts/my-app/src/features/prompt/model/detail/usePromptDetailView.tssharedPrompts/my-app/src/features/prompt/model/detail/useRelatedPrompts.tssharedPrompts/my-app/src/features/prompt/model/feed/homeFeed.constants.tssharedPrompts/my-app/src/features/prompt/model/feed/useHomeFeedView.tssharedPrompts/my-app/src/features/prompt/model/index.tssharedPrompts/my-app/src/features/prompt/model/shared/actionRoleDisplayNames.tssharedPrompts/my-app/src/features/prompt/model/shared/enumDisplayNames.tssharedPrompts/my-app/src/features/prompt/model/shared/enumGuidelines.tssharedPrompts/my-app/src/features/prompt/types/prompt.types.tssharedPrompts/my-app/src/features/prompt/ui/CreatePromptView.tsxsharedPrompts/my-app/src/features/prompt/ui/HomeFeedView.tsxsharedPrompts/my-app/src/features/prompt/ui/PromptDetailView.tsxsharedPrompts/my-app/src/features/prompt/ui/create/AdvancedOptionsStep.tsxsharedPrompts/my-app/src/features/prompt/ui/create/BodyStep.tsxsharedPrompts/my-app/src/features/prompt/ui/create/DomainStep.tsxsharedPrompts/my-app/src/features/prompt/ui/create/InputStep.tsxsharedPrompts/my-app/src/features/prompt/ui/create/JsonSchemaStep.tsxsharedPrompts/my-app/src/features/prompt/ui/create/LanguageStep.tsxsharedPrompts/my-app/src/features/prompt/ui/create/PublicStep.tsxsharedPrompts/my-app/src/features/prompt/ui/create/RequestTypeStep.tsxsharedPrompts/my-app/src/features/prompt/ui/create/TagsStep.tsxsharedPrompts/my-app/src/features/prompt/ui/create/TitleStep.tsxsharedPrompts/my-app/src/pages/CreatePromptPage.tsx
💤 Files with no reviewable changes (8)
- sharedPrompts/my-app/src/features/prompt/model/detail/usePromptDetail.ts
- sharedPrompts/my-app/src/features/prompt/model/create/useCreatePromptView.ts
- sharedPrompts/my-app/src/features/prompt/model/shared/enumGuidelines.ts
- sharedPrompts/my-app/src/features/prompt/model/shared/enumDisplayNames.ts
- sharedPrompts/my-app/src/features/prompt/api/prompt.api.ts
- sharedPrompts/my-app/src/features/prompt/model/create/createPrompt.constants.ts
- sharedPrompts/my-app/src/features/prompt/model/detail/usePromptDetailView.ts
- sharedPrompts/my-app/src/features/prompt/model/shared/actionRoleDisplayNames.ts
Made-with: Cursor
Summary by CodeRabbit
릴리스 노트
새로운 기능
개선 사항