idea-manager 0.7.9 → 0.8.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "idea-manager",
3
- "version": "0.7.9",
3
+ "version": "0.8.0",
4
4
  "description": "AI 기반 브레인스토밍 → 구조화 → 프롬프트 생성 도구. MCP Server 내장.",
5
5
  "keywords": [
6
6
  "brainstorm",
@@ -51,6 +51,7 @@
51
51
  "react": "19.2.3",
52
52
  "react-dom": "19.2.3",
53
53
  "react-markdown": "^10.1.0",
54
+ "remark-gfm": "^4.0.1",
54
55
  "tsx": "^4.21.0"
55
56
  },
56
57
  "devDependencies": {
package/public/sw.js CHANGED
@@ -1,4 +1,4 @@
1
- const CACHE_NAME = 'im-v3';
1
+ const CACHE_NAME = 'im-v4';
2
2
 
3
3
  self.addEventListener('install', (event) => {
4
4
  self.skipWaiting();
@@ -1016,6 +1016,29 @@ textarea:focus {
1016
1016
  margin: 0.5em 0;
1017
1017
  }
1018
1018
 
1019
+ .chat-markdown table {
1020
+ border-collapse: collapse;
1021
+ width: 100%;
1022
+ margin: 0.5em 0;
1023
+ font-size: 0.85em;
1024
+ }
1025
+
1026
+ .chat-markdown th,
1027
+ .chat-markdown td {
1028
+ border: 1px solid hsl(var(--border));
1029
+ padding: 4px 8px;
1030
+ text-align: left;
1031
+ }
1032
+
1033
+ .chat-markdown th {
1034
+ background: hsl(var(--muted));
1035
+ font-weight: 600;
1036
+ }
1037
+
1038
+ .chat-markdown tr:nth-child(even) {
1039
+ background: hsl(var(--muted) / 0.3);
1040
+ }
1041
+
1019
1042
  /* Dialog animation */
1020
1043
  @keyframes dialogIn {
1021
1044
  from { opacity: 0; transform: scale(0.95) translateY(4px); }
@@ -57,7 +57,7 @@ export default function Editor({ projectId, onCollapse }: EditorProps) {
57
57
  return (
58
58
  <div className="flex flex-col h-full">
59
59
  <div className="flex items-center justify-between px-4 py-2 border-b border-border">
60
- <h2 className="text-sm font-medium text-muted-foreground">브레인스토밍</h2>
60
+ <h2 className="text-sm font-medium text-muted-foreground">BRAINSTORMING</h2>
61
61
  <div className="flex items-center gap-2">
62
62
  <span className="text-xs text-muted-foreground">
63
63
  {saving ? '저장 중...' : content ? '저장됨' : ''}
@@ -1,5 +1,8 @@
1
1
  'use client';
2
2
 
3
+ import ReactMarkdown from 'react-markdown';
4
+ import remarkGfm from 'remark-gfm';
5
+
3
6
  interface ChatMessageProps {
4
7
  role: 'assistant' | 'user';
5
8
  content: string;
@@ -16,11 +19,17 @@ export default function ChatMessage({ role, content, createdAt }: ChatMessagePro
16
19
  return (
17
20
  <div className={`chat-message ${isAi ? 'chat-message-ai' : 'chat-message-user'}`}>
18
21
  <div className={`chat-bubble ${isAi ? 'chat-bubble-ai' : 'chat-bubble-user'}`}>
19
- {content.split('\n').map((line, i) => (
20
- <p key={i} className={i > 0 ? 'mt-1' : ''}>
21
- {line}
22
- </p>
23
- ))}
22
+ {isAi ? (
23
+ <div className="chat-markdown">
24
+ <ReactMarkdown remarkPlugins={[remarkGfm]}>{content}</ReactMarkdown>
25
+ </div>
26
+ ) : (
27
+ content.split('\n').map((line, i) => (
28
+ <p key={i} className={i > 0 ? 'mt-1' : ''}>
29
+ {line}
30
+ </p>
31
+ ))
32
+ )}
24
33
  </div>
25
34
  <span className="chat-time">{time}</span>
26
35
  </div>
@@ -3,6 +3,7 @@
3
3
  import { useState, useEffect, useRef, useCallback } from 'react';
4
4
  import type { ITaskConversation, TaskStatus } from '@/types';
5
5
  import ReactMarkdown from 'react-markdown';
6
+ import remarkGfm from 'remark-gfm';
6
7
 
7
8
  const POLL_INTERVAL = 3000; // Poll every 3s when task is testing
8
9
 
@@ -112,7 +113,7 @@ export default function TaskChat({
112
113
  : 'bg-muted text-foreground rounded-bl-sm chat-markdown'
113
114
  }`}>
114
115
  {msg.role === 'assistant'
115
- ? <ReactMarkdown>{msg.content}</ReactMarkdown>
116
+ ? <ReactMarkdown remarkPlugins={[remarkGfm]}>{msg.content}</ReactMarkdown>
116
117
  : msg.content}
117
118
  </div>
118
119
  {msg.role === 'assistant' && (