vibe-coding-mcp 2.6.0 → 2.7.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/README.md +19 -2
- package/dist/__tests__/exportSession.test.d.ts +2 -0
- package/dist/__tests__/exportSession.test.d.ts.map +1 -0
- package/dist/__tests__/exportSession.test.js +180 -0
- package/dist/__tests__/exportSession.test.js.map +1 -0
- package/dist/__tests__/projectProfile.test.d.ts +2 -0
- package/dist/__tests__/projectProfile.test.d.ts.map +1 -0
- package/dist/__tests__/projectProfile.test.js +216 -0
- package/dist/__tests__/projectProfile.test.js.map +1 -0
- package/dist/core/profileStorage.d.ts +117 -0
- package/dist/core/profileStorage.d.ts.map +1 -0
- package/dist/core/profileStorage.js +251 -0
- package/dist/core/profileStorage.js.map +1 -0
- package/dist/core/schemas.d.ts +231 -4
- package/dist/core/schemas.d.ts.map +1 -1
- package/dist/core/schemas.js +57 -0
- package/dist/core/schemas.js.map +1 -1
- package/dist/stdio.js +13 -1
- package/dist/stdio.js.map +1 -1
- package/dist/tools/exportSession.d.ts +79 -0
- package/dist/tools/exportSession.d.ts.map +1 -0
- package/dist/tools/exportSession.js +434 -0
- package/dist/tools/exportSession.js.map +1 -0
- package/dist/tools/projectProfile.d.ts +230 -0
- package/dist/tools/projectProfile.d.ts.map +1 -0
- package/dist/tools/projectProfile.js +367 -0
- package/dist/tools/projectProfile.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ MCP server that automatically collects, summarizes, documents, and publishes cod
|
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
This MCP server provides
|
|
7
|
+
This MCP server provides 10 tools for managing vibe coding documentation:
|
|
8
8
|
|
|
9
9
|
| Tool | Description |
|
|
10
10
|
|------|-------------|
|
|
@@ -16,6 +16,8 @@ This MCP server provides 7 tools for managing vibe coding documentation:
|
|
|
16
16
|
| `muse_create_session_log` | Creates daily or session-based vibe coding session logs |
|
|
17
17
|
| `muse_analyze_code` | AST-based code analysis with Mermaid diagram generation |
|
|
18
18
|
| `muse_session_history` | Manages session history - save, retrieve, search past sessions |
|
|
19
|
+
| `muse_export_session` | Exports sessions to Markdown, JSON, or HTML formats |
|
|
20
|
+
| `muse_project_profile` | Manages project-specific settings and configurations |
|
|
19
21
|
|
|
20
22
|
### Additional Features (v2.0)
|
|
21
23
|
- **AST Parsing**: TypeScript, Python, Go code analysis
|
|
@@ -55,6 +57,21 @@ This MCP server provides 7 tools for managing vibe coding documentation:
|
|
|
55
57
|
- **Improvement Suggestions**: AI-generated recommendations for better code
|
|
56
58
|
- **Works with AST**: Combines AI insights with AST-based analysis for comprehensive results
|
|
57
59
|
|
|
60
|
+
### Session History (v2.6)
|
|
61
|
+
- **Persistent Storage**: Save coding sessions to local JSON files
|
|
62
|
+
- **CRUD Operations**: Create, read, update, delete sessions
|
|
63
|
+
- **Search & Filter**: Find past sessions by keyword, tags, or date
|
|
64
|
+
- **Statistics**: Track total sessions, code contexts, and design decisions
|
|
65
|
+
|
|
66
|
+
### Session Export & Project Profiles (v2.7)
|
|
67
|
+
- **Session Export**: Export sessions to Markdown, JSON, or HTML formats
|
|
68
|
+
- **Multiple Templates**: Default, minimal, detailed, and report templates
|
|
69
|
+
- **Project Profiles**: Manage project-specific settings and configurations
|
|
70
|
+
- **Publishing Config**: Default platforms and settings per project
|
|
71
|
+
- **Code Analysis Config**: Language preferences and diagram types
|
|
72
|
+
- **Documentation Config**: Default document types, language, author info
|
|
73
|
+
- **Team Management**: Store team member information per project
|
|
74
|
+
|
|
58
75
|
## Installation
|
|
59
76
|
|
|
60
77
|
### Claude Code (Recommended)
|
|
@@ -162,7 +179,7 @@ src/
|
|
|
162
179
|
│ ├── security.ts # Path traversal, SSRF, timeout utilities
|
|
163
180
|
│ ├── logger.ts # Structured JSON logging
|
|
164
181
|
│ └── config.ts # Platform configuration validation
|
|
165
|
-
├── tools/ #
|
|
182
|
+
├── tools/ # 10 MCP tools
|
|
166
183
|
├── platforms/ # Notion, GitHub Wiki, Obsidian, Confluence, Slack, Discord
|
|
167
184
|
├── types/ # TypeScript interfaces
|
|
168
185
|
└── utils/ # Markdown, AST, diagram utilities
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exportSession.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/exportSession.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { exportSessionTool } from '../tools/exportSession.js';
|
|
2
|
+
import { sessionHistoryTool } from '../tools/sessionHistory.js';
|
|
3
|
+
import * as sessionStorage from '../core/sessionStorage.js';
|
|
4
|
+
import { promises as fs } from 'fs';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import * as os from 'os';
|
|
7
|
+
let testDir;
|
|
8
|
+
beforeAll(async () => {
|
|
9
|
+
testDir = path.join(os.tmpdir(), `vibe-coding-export-test-${Date.now()}`);
|
|
10
|
+
await sessionStorage.initializeStorage(testDir);
|
|
11
|
+
// 테스트용 세션 생성
|
|
12
|
+
await sessionHistoryTool({
|
|
13
|
+
action: 'save',
|
|
14
|
+
title: 'Test Session 1',
|
|
15
|
+
summary: 'First test session for export',
|
|
16
|
+
tags: ['test', 'export'],
|
|
17
|
+
codeContexts: [
|
|
18
|
+
{
|
|
19
|
+
sessionId: 'ctx-1',
|
|
20
|
+
timestamp: new Date().toISOString(),
|
|
21
|
+
codeBlocks: [
|
|
22
|
+
{ language: 'typescript', code: 'const x = 1;' }
|
|
23
|
+
],
|
|
24
|
+
conversationSummary: 'Test code'
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
designDecisions: [
|
|
28
|
+
{
|
|
29
|
+
id: 'dd-1',
|
|
30
|
+
title: 'Test Decision',
|
|
31
|
+
description: 'A test decision',
|
|
32
|
+
rationale: 'For testing',
|
|
33
|
+
category: 'implementation',
|
|
34
|
+
timestamp: new Date().toISOString()
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
});
|
|
38
|
+
await sessionHistoryTool({
|
|
39
|
+
action: 'save',
|
|
40
|
+
title: 'Test Session 2',
|
|
41
|
+
summary: 'Second test session',
|
|
42
|
+
tags: ['test']
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
afterAll(async () => {
|
|
46
|
+
try {
|
|
47
|
+
const files = await fs.readdir(testDir);
|
|
48
|
+
for (const file of files) {
|
|
49
|
+
await fs.unlink(path.join(testDir, file));
|
|
50
|
+
}
|
|
51
|
+
await fs.rmdir(testDir);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Ignore cleanup errors
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
describe('exportSessionTool', () => {
|
|
58
|
+
describe('markdown export', () => {
|
|
59
|
+
it('should export all sessions as markdown', async () => {
|
|
60
|
+
const result = await exportSessionTool({
|
|
61
|
+
format: 'markdown'
|
|
62
|
+
});
|
|
63
|
+
expect(result.success).toBe(true);
|
|
64
|
+
expect(result.format).toBe('markdown');
|
|
65
|
+
expect(result.sessionCount).toBe(2);
|
|
66
|
+
expect(result.content).toContain('Test Session 1');
|
|
67
|
+
expect(result.content).toContain('Test Session 2');
|
|
68
|
+
});
|
|
69
|
+
it('should include code blocks in markdown', async () => {
|
|
70
|
+
const result = await exportSessionTool({
|
|
71
|
+
format: 'markdown',
|
|
72
|
+
includeCodeBlocks: true
|
|
73
|
+
});
|
|
74
|
+
expect(result.success).toBe(true);
|
|
75
|
+
expect(result.content).toContain('```typescript');
|
|
76
|
+
expect(result.content).toContain('const x = 1;');
|
|
77
|
+
});
|
|
78
|
+
it('should include design decisions', async () => {
|
|
79
|
+
const result = await exportSessionTool({
|
|
80
|
+
format: 'markdown',
|
|
81
|
+
includeDesignDecisions: true
|
|
82
|
+
});
|
|
83
|
+
expect(result.success).toBe(true);
|
|
84
|
+
expect(result.content).toContain('Test Decision');
|
|
85
|
+
expect(result.content).toContain('Design Decisions');
|
|
86
|
+
});
|
|
87
|
+
it('should use minimal template', async () => {
|
|
88
|
+
const result = await exportSessionTool({
|
|
89
|
+
format: 'markdown',
|
|
90
|
+
template: 'minimal'
|
|
91
|
+
});
|
|
92
|
+
expect(result.success).toBe(true);
|
|
93
|
+
expect(result.content).not.toContain('Table of Contents');
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
describe('json export', () => {
|
|
97
|
+
it('should export as valid JSON', async () => {
|
|
98
|
+
const result = await exportSessionTool({
|
|
99
|
+
format: 'json'
|
|
100
|
+
});
|
|
101
|
+
expect(result.success).toBe(true);
|
|
102
|
+
expect(result.format).toBe('json');
|
|
103
|
+
const parsed = JSON.parse(result.content);
|
|
104
|
+
expect(parsed.exportInfo).toBeDefined();
|
|
105
|
+
expect(parsed.sessions).toHaveLength(2);
|
|
106
|
+
});
|
|
107
|
+
it('should include metadata in JSON', async () => {
|
|
108
|
+
const result = await exportSessionTool({
|
|
109
|
+
format: 'json',
|
|
110
|
+
includeMetadata: true
|
|
111
|
+
});
|
|
112
|
+
const parsed = JSON.parse(result.content);
|
|
113
|
+
expect(parsed.sessions[0].createdAt).toBeDefined();
|
|
114
|
+
expect(parsed.sessions[0].tags).toBeDefined();
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
describe('html export', () => {
|
|
118
|
+
it('should export as valid HTML', async () => {
|
|
119
|
+
const result = await exportSessionTool({
|
|
120
|
+
format: 'html'
|
|
121
|
+
});
|
|
122
|
+
expect(result.success).toBe(true);
|
|
123
|
+
expect(result.format).toBe('html');
|
|
124
|
+
expect(result.content).toContain('<!DOCTYPE html>');
|
|
125
|
+
expect(result.content).toContain('Test Session 1');
|
|
126
|
+
});
|
|
127
|
+
it('should include styles in HTML', async () => {
|
|
128
|
+
const result = await exportSessionTool({
|
|
129
|
+
format: 'html'
|
|
130
|
+
});
|
|
131
|
+
expect(result.content).toContain('<style>');
|
|
132
|
+
expect(result.content).toContain('font-family');
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
describe('file output', () => {
|
|
136
|
+
it('should save to file when outputPath is provided', async () => {
|
|
137
|
+
const outputPath = path.join(testDir, 'export-test.md');
|
|
138
|
+
const result = await exportSessionTool({
|
|
139
|
+
format: 'markdown',
|
|
140
|
+
outputPath
|
|
141
|
+
});
|
|
142
|
+
expect(result.success).toBe(true);
|
|
143
|
+
expect(result.filePath).toBe(outputPath);
|
|
144
|
+
const fileContent = await fs.readFile(outputPath, 'utf-8');
|
|
145
|
+
expect(fileContent).toContain('Test Session');
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
describe('custom options', () => {
|
|
149
|
+
it('should use custom title', async () => {
|
|
150
|
+
const result = await exportSessionTool({
|
|
151
|
+
format: 'markdown',
|
|
152
|
+
title: 'My Custom Export'
|
|
153
|
+
});
|
|
154
|
+
expect(result.content).toContain('# My Custom Export');
|
|
155
|
+
});
|
|
156
|
+
it('should exclude code blocks when disabled', async () => {
|
|
157
|
+
const result = await exportSessionTool({
|
|
158
|
+
format: 'markdown',
|
|
159
|
+
includeCodeBlocks: false
|
|
160
|
+
});
|
|
161
|
+
expect(result.content).not.toContain('```typescript');
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
describe('error handling', () => {
|
|
165
|
+
it('should handle no sessions gracefully', async () => {
|
|
166
|
+
// 다른 저장소로 테스트
|
|
167
|
+
const emptyDir = path.join(os.tmpdir(), `empty-${Date.now()}`);
|
|
168
|
+
await sessionStorage.initializeStorage(emptyDir);
|
|
169
|
+
const result = await exportSessionTool({
|
|
170
|
+
format: 'markdown',
|
|
171
|
+
sessionIds: ['non-existent-id']
|
|
172
|
+
});
|
|
173
|
+
expect(result.success).toBe(false);
|
|
174
|
+
expect(result.error).toContain('No sessions found');
|
|
175
|
+
// 원래 저장소로 복원
|
|
176
|
+
await sessionStorage.initializeStorage(testDir);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
//# sourceMappingURL=exportSession.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exportSession.test.js","sourceRoot":"","sources":["../../src/__tests__/exportSession.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectProfile.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/projectProfile.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { projectProfileTool } from '../tools/projectProfile.js';
|
|
2
|
+
import * as profileStorage from '../core/profileStorage.js';
|
|
3
|
+
import { promises as fs } from 'fs';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import * as os from 'os';
|
|
6
|
+
let testDir;
|
|
7
|
+
beforeAll(async () => {
|
|
8
|
+
testDir = path.join(os.tmpdir(), `vibe-coding-profile-test-${Date.now()}`);
|
|
9
|
+
await profileStorage.initializeProfileStorage(testDir);
|
|
10
|
+
});
|
|
11
|
+
afterAll(async () => {
|
|
12
|
+
try {
|
|
13
|
+
const files = await fs.readdir(testDir);
|
|
14
|
+
for (const file of files) {
|
|
15
|
+
await fs.unlink(path.join(testDir, file));
|
|
16
|
+
}
|
|
17
|
+
await fs.rmdir(testDir);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// Ignore cleanup errors
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
describe('projectProfileTool', () => {
|
|
24
|
+
let createdProfileId;
|
|
25
|
+
describe('create action', () => {
|
|
26
|
+
it('should create a new profile', async () => {
|
|
27
|
+
const result = await projectProfileTool({
|
|
28
|
+
action: 'create',
|
|
29
|
+
name: 'Test Project',
|
|
30
|
+
description: 'A test project profile',
|
|
31
|
+
projectPath: '/path/to/project',
|
|
32
|
+
repository: 'https://github.com/test/repo',
|
|
33
|
+
version: '1.0.0',
|
|
34
|
+
publishing: {
|
|
35
|
+
defaultPlatform: 'notion',
|
|
36
|
+
autoPublish: false
|
|
37
|
+
},
|
|
38
|
+
codeAnalysis: {
|
|
39
|
+
defaultLanguage: 'typescript',
|
|
40
|
+
defaultDiagramTypes: ['class', 'flowchart'],
|
|
41
|
+
useAI: true
|
|
42
|
+
},
|
|
43
|
+
documentation: {
|
|
44
|
+
defaultDocType: 'README',
|
|
45
|
+
language: 'en',
|
|
46
|
+
author: 'Test Author'
|
|
47
|
+
},
|
|
48
|
+
defaultTags: ['project', 'test']
|
|
49
|
+
});
|
|
50
|
+
expect(result.success).toBe(true);
|
|
51
|
+
expect(result.action).toBe('create');
|
|
52
|
+
expect(result.profile).toBeDefined();
|
|
53
|
+
expect(result.profile?.name).toBe('Test Project');
|
|
54
|
+
expect(result.profile?.publishing?.defaultPlatform).toBe('notion');
|
|
55
|
+
createdProfileId = result.profile.id;
|
|
56
|
+
});
|
|
57
|
+
it('should fail without name', async () => {
|
|
58
|
+
const result = await projectProfileTool({
|
|
59
|
+
action: 'create'
|
|
60
|
+
});
|
|
61
|
+
expect(result.success).toBe(false);
|
|
62
|
+
expect(result.error).toContain('name');
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe('get action', () => {
|
|
66
|
+
it('should retrieve profile by ID', async () => {
|
|
67
|
+
const result = await projectProfileTool({
|
|
68
|
+
action: 'get',
|
|
69
|
+
profileId: createdProfileId
|
|
70
|
+
});
|
|
71
|
+
expect(result.success).toBe(true);
|
|
72
|
+
expect(result.profile?.name).toBe('Test Project');
|
|
73
|
+
});
|
|
74
|
+
it('should retrieve profile by name', async () => {
|
|
75
|
+
const result = await projectProfileTool({
|
|
76
|
+
action: 'get',
|
|
77
|
+
name: 'Test Project'
|
|
78
|
+
});
|
|
79
|
+
expect(result.success).toBe(true);
|
|
80
|
+
expect(result.profile?.id).toBe(createdProfileId);
|
|
81
|
+
});
|
|
82
|
+
it('should fail for non-existent profile', async () => {
|
|
83
|
+
const result = await projectProfileTool({
|
|
84
|
+
action: 'get',
|
|
85
|
+
profileId: 'non-existent'
|
|
86
|
+
});
|
|
87
|
+
expect(result.success).toBe(false);
|
|
88
|
+
expect(result.error).toContain('not found');
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe('update action', () => {
|
|
92
|
+
it('should update profile settings', async () => {
|
|
93
|
+
const result = await projectProfileTool({
|
|
94
|
+
action: 'update',
|
|
95
|
+
profileId: createdProfileId,
|
|
96
|
+
version: '2.0.0',
|
|
97
|
+
documentation: {
|
|
98
|
+
language: 'ko',
|
|
99
|
+
includeTableOfContents: true
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
expect(result.success).toBe(true);
|
|
103
|
+
expect(result.profile?.version).toBe('2.0.0');
|
|
104
|
+
expect(result.profile?.documentation?.language).toBe('ko');
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
describe('list action', () => {
|
|
108
|
+
beforeAll(async () => {
|
|
109
|
+
await projectProfileTool({
|
|
110
|
+
action: 'create',
|
|
111
|
+
name: 'Second Project',
|
|
112
|
+
description: 'Another project'
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
it('should list all profiles', async () => {
|
|
116
|
+
const result = await projectProfileTool({
|
|
117
|
+
action: 'list'
|
|
118
|
+
});
|
|
119
|
+
expect(result.success).toBe(true);
|
|
120
|
+
expect(result.profiles?.length).toBeGreaterThanOrEqual(2);
|
|
121
|
+
expect(result.total).toBeGreaterThanOrEqual(2);
|
|
122
|
+
});
|
|
123
|
+
it('should support pagination', async () => {
|
|
124
|
+
const result = await projectProfileTool({
|
|
125
|
+
action: 'list',
|
|
126
|
+
limit: 1,
|
|
127
|
+
offset: 0
|
|
128
|
+
});
|
|
129
|
+
expect(result.success).toBe(true);
|
|
130
|
+
expect(result.profiles?.length).toBe(1);
|
|
131
|
+
});
|
|
132
|
+
it('should support sorting', async () => {
|
|
133
|
+
const result = await projectProfileTool({
|
|
134
|
+
action: 'list',
|
|
135
|
+
sortBy: 'name',
|
|
136
|
+
sortOrder: 'asc'
|
|
137
|
+
});
|
|
138
|
+
expect(result.success).toBe(true);
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
describe('setActive and getActive actions', () => {
|
|
142
|
+
it('should set active profile', async () => {
|
|
143
|
+
const result = await projectProfileTool({
|
|
144
|
+
action: 'setActive',
|
|
145
|
+
profileId: createdProfileId
|
|
146
|
+
});
|
|
147
|
+
expect(result.success).toBe(true);
|
|
148
|
+
});
|
|
149
|
+
it('should get active profile', async () => {
|
|
150
|
+
const result = await projectProfileTool({
|
|
151
|
+
action: 'getActive'
|
|
152
|
+
});
|
|
153
|
+
expect(result.success).toBe(true);
|
|
154
|
+
expect(result.profile?.id).toBe(createdProfileId);
|
|
155
|
+
});
|
|
156
|
+
it('should clear active profile', async () => {
|
|
157
|
+
await projectProfileTool({
|
|
158
|
+
action: 'setActive',
|
|
159
|
+
profileId: undefined
|
|
160
|
+
});
|
|
161
|
+
const result = await projectProfileTool({
|
|
162
|
+
action: 'getActive'
|
|
163
|
+
});
|
|
164
|
+
expect(result.success).toBe(true);
|
|
165
|
+
expect(result.profile).toBeUndefined();
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
describe('clone action', () => {
|
|
169
|
+
it('should clone a profile', async () => {
|
|
170
|
+
const result = await projectProfileTool({
|
|
171
|
+
action: 'clone',
|
|
172
|
+
profileId: createdProfileId,
|
|
173
|
+
newName: 'Cloned Project'
|
|
174
|
+
});
|
|
175
|
+
expect(result.success).toBe(true);
|
|
176
|
+
expect(result.profile?.name).toBe('Cloned Project');
|
|
177
|
+
expect(result.profile?.id).not.toBe(createdProfileId);
|
|
178
|
+
});
|
|
179
|
+
it('should fail without newName', async () => {
|
|
180
|
+
const result = await projectProfileTool({
|
|
181
|
+
action: 'clone',
|
|
182
|
+
profileId: createdProfileId
|
|
183
|
+
});
|
|
184
|
+
expect(result.success).toBe(false);
|
|
185
|
+
expect(result.error).toContain('newName');
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
describe('delete action', () => {
|
|
189
|
+
it('should delete a profile', async () => {
|
|
190
|
+
// 삭제할 프로파일 생성
|
|
191
|
+
const createResult = await projectProfileTool({
|
|
192
|
+
action: 'create',
|
|
193
|
+
name: 'To Delete'
|
|
194
|
+
});
|
|
195
|
+
const deleteResult = await projectProfileTool({
|
|
196
|
+
action: 'delete',
|
|
197
|
+
profileId: createResult.profile.id
|
|
198
|
+
});
|
|
199
|
+
expect(deleteResult.success).toBe(true);
|
|
200
|
+
// 삭제 확인
|
|
201
|
+
const getResult = await projectProfileTool({
|
|
202
|
+
action: 'get',
|
|
203
|
+
profileId: createResult.profile.id
|
|
204
|
+
});
|
|
205
|
+
expect(getResult.success).toBe(false);
|
|
206
|
+
});
|
|
207
|
+
it('should fail for non-existent profile', async () => {
|
|
208
|
+
const result = await projectProfileTool({
|
|
209
|
+
action: 'delete',
|
|
210
|
+
profileId: 'non-existent'
|
|
211
|
+
});
|
|
212
|
+
expect(result.success).toBe(false);
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
//# sourceMappingURL=projectProfile.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectProfile.test.js","sourceRoot":"","sources":["../../src/__tests__/projectProfile.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 프로젝트 프로파일 스토리지 모듈
|
|
3
|
+
* 프로젝트별 설정을 저장하고 관리
|
|
4
|
+
* v2.7: Project Profile
|
|
5
|
+
*/
|
|
6
|
+
export interface PublishingConfig {
|
|
7
|
+
defaultPlatform?: 'notion' | 'github-wiki' | 'obsidian' | 'confluence' | 'slack' | 'discord';
|
|
8
|
+
platformSettings?: {
|
|
9
|
+
notion?: {
|
|
10
|
+
databaseId?: string;
|
|
11
|
+
};
|
|
12
|
+
obsidian?: {
|
|
13
|
+
vaultPath?: string;
|
|
14
|
+
};
|
|
15
|
+
confluence?: {
|
|
16
|
+
spaceKey?: string;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
autoPublish?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface CodeAnalysisConfig {
|
|
22
|
+
defaultLanguage?: 'typescript' | 'javascript' | 'python' | 'go';
|
|
23
|
+
defaultDiagramTypes?: ('class' | 'flowchart' | 'dependency' | 'all')[];
|
|
24
|
+
excludePatterns?: string[];
|
|
25
|
+
useAI?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface DocumentationConfig {
|
|
28
|
+
defaultDocType?: 'README' | 'DESIGN' | 'TUTORIAL' | 'CHANGELOG' | 'API' | 'ARCHITECTURE';
|
|
29
|
+
language?: 'en' | 'ko';
|
|
30
|
+
author?: string;
|
|
31
|
+
license?: string;
|
|
32
|
+
includeTableOfContents?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface ProjectProfile {
|
|
35
|
+
id: string;
|
|
36
|
+
name: string;
|
|
37
|
+
description?: string;
|
|
38
|
+
createdAt: string;
|
|
39
|
+
updatedAt: string;
|
|
40
|
+
projectPath?: string;
|
|
41
|
+
repository?: string;
|
|
42
|
+
version?: string;
|
|
43
|
+
publishing?: PublishingConfig;
|
|
44
|
+
codeAnalysis?: CodeAnalysisConfig;
|
|
45
|
+
documentation?: DocumentationConfig;
|
|
46
|
+
defaultTags?: string[];
|
|
47
|
+
tagCategories?: {
|
|
48
|
+
name: string;
|
|
49
|
+
tags: string[];
|
|
50
|
+
}[];
|
|
51
|
+
team?: {
|
|
52
|
+
name: string;
|
|
53
|
+
members?: {
|
|
54
|
+
name: string;
|
|
55
|
+
role?: string;
|
|
56
|
+
email?: string;
|
|
57
|
+
}[];
|
|
58
|
+
};
|
|
59
|
+
metadata?: Record<string, unknown>;
|
|
60
|
+
}
|
|
61
|
+
export interface StoredProfile {
|
|
62
|
+
id: string;
|
|
63
|
+
name: string;
|
|
64
|
+
description?: string;
|
|
65
|
+
createdAt: string;
|
|
66
|
+
updatedAt: string;
|
|
67
|
+
isActive: boolean;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 스토리지 초기화
|
|
71
|
+
*/
|
|
72
|
+
export declare function initializeProfileStorage(customDir?: string): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* 프로파일 생성
|
|
75
|
+
*/
|
|
76
|
+
export declare function createProfile(data: Omit<ProjectProfile, 'id' | 'createdAt' | 'updatedAt'>): Promise<ProjectProfile>;
|
|
77
|
+
/**
|
|
78
|
+
* 프로파일 조회
|
|
79
|
+
*/
|
|
80
|
+
export declare function getProfile(profileId: string): Promise<ProjectProfile | null>;
|
|
81
|
+
/**
|
|
82
|
+
* 프로파일 업데이트
|
|
83
|
+
*/
|
|
84
|
+
export declare function updateProfile(profileId: string, updates: Partial<Omit<ProjectProfile, 'id' | 'createdAt'>>): Promise<ProjectProfile>;
|
|
85
|
+
/**
|
|
86
|
+
* 프로파일 삭제
|
|
87
|
+
*/
|
|
88
|
+
export declare function deleteProfile(profileId: string): Promise<boolean>;
|
|
89
|
+
/**
|
|
90
|
+
* 모든 프로파일 목록
|
|
91
|
+
*/
|
|
92
|
+
export declare function listProfiles(options?: {
|
|
93
|
+
limit?: number;
|
|
94
|
+
offset?: number;
|
|
95
|
+
sortBy?: 'createdAt' | 'updatedAt' | 'name';
|
|
96
|
+
sortOrder?: 'asc' | 'desc';
|
|
97
|
+
}): Promise<{
|
|
98
|
+
profiles: StoredProfile[];
|
|
99
|
+
total: number;
|
|
100
|
+
}>;
|
|
101
|
+
/**
|
|
102
|
+
* 활성 프로파일 설정
|
|
103
|
+
*/
|
|
104
|
+
export declare function setActiveProfile(profileId: string | null): Promise<void>;
|
|
105
|
+
/**
|
|
106
|
+
* 활성 프로파일 조회
|
|
107
|
+
*/
|
|
108
|
+
export declare function getActiveProfile(): Promise<ProjectProfile | null>;
|
|
109
|
+
/**
|
|
110
|
+
* 이름으로 프로파일 검색
|
|
111
|
+
*/
|
|
112
|
+
export declare function findProfileByName(name: string): Promise<ProjectProfile | null>;
|
|
113
|
+
/**
|
|
114
|
+
* 프로파일 복제
|
|
115
|
+
*/
|
|
116
|
+
export declare function cloneProfile(profileId: string, newName: string): Promise<ProjectProfile>;
|
|
117
|
+
//# sourceMappingURL=profileStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profileStorage.d.ts","sourceRoot":"","sources":["../../src/core/profileStorage.ts"],"names":[],"mappings":"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"}
|