feat: Premium UI overhaul, brain management, history persistence, and IME fix
This commit is contained in:
+43
-31
@@ -465,25 +465,32 @@ export class AgentExecutor {
|
||||
return [
|
||||
`제가 실제로 \`${projectPath}\` 폴더를 읽고 1차 분석했습니다.`,
|
||||
'',
|
||||
'**제품 설명**',
|
||||
pkg?.name
|
||||
? `- 이 프로젝트는 \`${pkg.name}\`${pkg.description ? ` (${pkg.description})` : ''}로 식별됩니다.`
|
||||
: '- `package.json` 기준의 제품명은 확인되지 않았습니다.',
|
||||
readmeSummary ? `- README 기준 핵심 설명: ${readmeSummary}` : '- README 기반 제품 설명은 부족합니다. 제품 소개 문서를 보강하는 편이 좋습니다.',
|
||||
stack.length ? `- 감지된 기술 스택: ${stack.join(', ')}` : '- 기술 스택은 파일 구조만으로는 명확하지 않습니다.',
|
||||
'### 📋 제품 개요',
|
||||
'| 항목 | 내용 |',
|
||||
'| :--- | :--- |',
|
||||
pkg?.name ? `| **제품명** | \`${pkg.name}\` |` : '| **제품명** | 식별되지 않음 |',
|
||||
pkg?.description ? `| **설명** | ${pkg.description} |` : '| **설명** | - |',
|
||||
stack.length ? `| **기술 스택** | ${stack.join(', ')} |` : '| **기술 스택** | 파악 중 |',
|
||||
readmeSummary ? `| **핵심 요약** | ${readmeSummary} |` : '| **핵심 요약** | README 정보 부족 |',
|
||||
'',
|
||||
'**설계 구조**',
|
||||
topDirs.length ? topDirs.map(item => `- ${item}`).join('\n') : '- 상위 디렉터리 구조가 단순하거나 비어 있습니다.',
|
||||
entryPoints.length ? `- 주요 진입점 후보: ${entryPoints.join(', ')}` : '- 명확한 앱 진입점은 아직 식별되지 않았습니다.',
|
||||
configFiles.length ? `- 주요 설정 파일: ${configFiles.slice(0, 12).join(', ')}` : '- 주요 설정 파일이 많지 않습니다.',
|
||||
'### 🏗️ 설계 구조',
|
||||
'| 디렉토리 | 파일 수 |',
|
||||
'| :--- | :--- |',
|
||||
...(topDirs.length ? topDirs : ['| - | - |']),
|
||||
'',
|
||||
'**코드 리뷰 관점의 1차 소견**',
|
||||
reviewFindings.join('\n'),
|
||||
'**주요 진입점 및 설정**',
|
||||
entryPoints.length ? `- 진입점: ${entryPoints.map(e => `\`${e}\``).join(', ')}` : '- 명확한 진입점 미식별',
|
||||
configFiles.length ? `- 설정: ${configFiles.slice(0, 8).map(f => `\`${f}\``).join(', ')}` : '- 주요 설정 파일 없음',
|
||||
'',
|
||||
'**다음에 더 깊게 볼 부분**',
|
||||
'- 실제 비즈니스 플로우는 `src`, `app`, `lib`, `components` 내부 핵심 파일을 2차로 읽어야 정확히 판단할 수 있습니다.',
|
||||
'- 지금 단계에서는 “아무것도 안 하고 말만 하는” 답변이 아니라, 실제 파일 시스템을 기준으로 프로젝트 형태를 먼저 파악한 결과입니다.',
|
||||
'- 원하시면 다음 턴에서 제가 핵심 소스 파일을 더 읽어 아키텍처 다이어그램 수준으로 이어서 정리하겠습니다.'
|
||||
'### 🔍 코드 리뷰 1차 소견',
|
||||
...reviewFindings.map(f => f.startsWith('-') ? f : `- ${f}`),
|
||||
'',
|
||||
'### 🚀 향후 분석 제안',
|
||||
'1. **비즈니스 로직 분석**: `src`, `app`, `lib` 내부의 핵심 비즈니스 흐름 파악',
|
||||
'2. **아키텍처 시각화**: 파일 간 의존성 및 데이터 흐름 다이어그램 작성',
|
||||
'3. **상세 코드 리뷰**: 특정 파일이나 기능에 대한 심층 분석',
|
||||
'',
|
||||
'*분석을 계속하시려면 궁금한 파일이나 모듈을 말씀해 주세요.*'
|
||||
].join('\n');
|
||||
}
|
||||
|
||||
@@ -521,7 +528,7 @@ export class AgentExecutor {
|
||||
.slice(0, 12)
|
||||
.map(entry => {
|
||||
const count = this.collectProjectFiles(path.join(projectPath, entry.name), 200, projectPath).length;
|
||||
return `\`${entry.name}/\`: 약 ${count}개 파일`;
|
||||
return `| \`${entry.name}/\` | 약 ${count}개 |`;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -638,27 +645,32 @@ export class AgentExecutor {
|
||||
.map((entry) => {
|
||||
const dirPath = path.join(brainDir, entry.name);
|
||||
const count = findBrainFiles(dirPath).length;
|
||||
return `- ${entry.name}/: ${count}개 문서`;
|
||||
return `| \`${entry.name}/\` | ${count}개 문서 |`;
|
||||
});
|
||||
|
||||
const fileSummaries = entries
|
||||
.filter((entry) => entry.isFile() && entry.name.endsWith('.md'))
|
||||
.slice(0, 8)
|
||||
.slice(0, 10)
|
||||
.map((entry) => `- ${entry.name}`);
|
||||
|
||||
const sampleFiles = files
|
||||
.slice(0, 10)
|
||||
.map((file) => `- ${path.relative(brainDir, file)}`);
|
||||
|
||||
const sections = [
|
||||
`현재 연결된 제2뇌는 **${activeBrain.name}**입니다.`,
|
||||
`경로: \`${brainDir}\``,
|
||||
`총 Markdown 지식 문서: **${files.length}개**`,
|
||||
activeBrain.description ? `설명: ${activeBrain.description}` : '',
|
||||
directorySummaries.length ? `\n상위 폴더 구조는 이렇게 보입니다.\n${directorySummaries.join('\n')}` : '',
|
||||
fileSummaries.length ? `\n루트에 있는 주요 문서는 이런 것들이 있습니다.\n${fileSummaries.join('\n')}` : '',
|
||||
sampleFiles.length ? `\n제가 우선 참고할 수 있는 샘플 문서는 다음과 같습니다.\n${sampleFiles.join('\n')}` : '',
|
||||
`\n이 자료는 충분히 도움이 됩니다. 앞으로 질문을 받으면 먼저 이 제2뇌에서 관련 기준이나 맥락을 찾고, 부족할 때만 제 일반 지식으로 보완하겠습니다.`
|
||||
`현재 연결된 제2뇌 **${activeBrain.name}**의 개요입니다.`,
|
||||
'',
|
||||
'### 🧠 지식 베이스 현황',
|
||||
'| 항목 | 정보 |',
|
||||
'| :--- | :--- |',
|
||||
`| **위치** | \`${brainDir}\` |`,
|
||||
`| **문서 총계** | **${files.length}개** |`,
|
||||
activeBrain.description ? `| **설명** | ${activeBrain.description} |` : '| **설명** | 설정된 설명 없음 |',
|
||||
'',
|
||||
'### 📂 주요 카테고리',
|
||||
'| 폴더명 | 문서 수 |',
|
||||
'| :--- | :--- |',
|
||||
...(directorySummaries.length ? directorySummaries : ['| - | - |']),
|
||||
'',
|
||||
fileSummaries.length ? `### 📄 최근/주요 문서\n${fileSummaries.join('\n')}` : '',
|
||||
'',
|
||||
'이 자료들을 기반으로 답변을 최적화하겠습니다. 특정 주제에 대해 깊이 있는 분석이 필요하시면 말씀해 주세요.'
|
||||
].filter(Boolean);
|
||||
|
||||
return sections.join('\n');
|
||||
|
||||
Reference in New Issue
Block a user