vibe-coding-mcp 2.5.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.
Files changed (40) hide show
  1. package/README.md +20 -2
  2. package/dist/__tests__/exportSession.test.d.ts +2 -0
  3. package/dist/__tests__/exportSession.test.d.ts.map +1 -0
  4. package/dist/__tests__/exportSession.test.js +180 -0
  5. package/dist/__tests__/exportSession.test.js.map +1 -0
  6. package/dist/__tests__/projectProfile.test.d.ts +2 -0
  7. package/dist/__tests__/projectProfile.test.d.ts.map +1 -0
  8. package/dist/__tests__/projectProfile.test.js +216 -0
  9. package/dist/__tests__/projectProfile.test.js.map +1 -0
  10. package/dist/__tests__/sessionHistory.test.d.ts +2 -0
  11. package/dist/__tests__/sessionHistory.test.d.ts.map +1 -0
  12. package/dist/__tests__/sessionHistory.test.js +229 -0
  13. package/dist/__tests__/sessionHistory.test.js.map +1 -0
  14. package/dist/core/profileStorage.d.ts +117 -0
  15. package/dist/core/profileStorage.d.ts.map +1 -0
  16. package/dist/core/profileStorage.js +251 -0
  17. package/dist/core/profileStorage.js.map +1 -0
  18. package/dist/core/schemas.d.ts +365 -0
  19. package/dist/core/schemas.d.ts.map +1 -1
  20. package/dist/core/schemas.js +90 -0
  21. package/dist/core/schemas.js.map +1 -1
  22. package/dist/core/sessionStorage.d.ts +95 -0
  23. package/dist/core/sessionStorage.d.ts.map +1 -0
  24. package/dist/core/sessionStorage.js +224 -0
  25. package/dist/core/sessionStorage.js.map +1 -0
  26. package/dist/stdio.js +20 -2
  27. package/dist/stdio.js.map +1 -1
  28. package/dist/tools/exportSession.d.ts +79 -0
  29. package/dist/tools/exportSession.d.ts.map +1 -0
  30. package/dist/tools/exportSession.js +434 -0
  31. package/dist/tools/exportSession.js.map +1 -0
  32. package/dist/tools/projectProfile.d.ts +230 -0
  33. package/dist/tools/projectProfile.d.ts.map +1 -0
  34. package/dist/tools/projectProfile.js +367 -0
  35. package/dist/tools/projectProfile.js.map +1 -0
  36. package/dist/tools/sessionHistory.d.ts +126 -0
  37. package/dist/tools/sessionHistory.d.ts.map +1 -0
  38. package/dist/tools/sessionHistory.js +245 -0
  39. package/dist/tools/sessionHistory.js.map +1 -0
  40. package/package.json +1 -1
@@ -0,0 +1,434 @@
1
+ /**
2
+ * 세션 Export 도구
3
+ * 세션 데이터를 다양한 형식으로 내보내기
4
+ * v2.7: Session Export
5
+ */
6
+ import { promises as fs } from 'fs';
7
+ import * as path from 'path';
8
+ import { getSession, listSessions } from '../core/sessionStorage.js';
9
+ import { logger } from '../core/logger.js';
10
+ const exportLogger = logger.child({ module: 'exportSession' });
11
+ // 마크다운 생성
12
+ function generateMarkdown(sessions, options) {
13
+ const { includeMetadata = true, includeCodeBlocks = true, includeDesignDecisions = true, template = 'default', title = 'Vibe Coding Session Export', bundleMultiple = true } = options;
14
+ const lines = [];
15
+ // 헤더
16
+ lines.push(`# ${title}`);
17
+ lines.push('');
18
+ if (includeMetadata) {
19
+ lines.push(`> Exported: ${new Date().toISOString()}`);
20
+ lines.push(`> Sessions: ${sessions.length}`);
21
+ lines.push('');
22
+ }
23
+ // 목차 (여러 세션일 경우)
24
+ if (sessions.length > 1 && template !== 'minimal') {
25
+ lines.push('## Table of Contents');
26
+ lines.push('');
27
+ sessions.forEach((session, index) => {
28
+ lines.push(`${index + 1}. [${session.title}](#${slugify(session.title)})`);
29
+ });
30
+ lines.push('');
31
+ lines.push('---');
32
+ lines.push('');
33
+ }
34
+ // 각 세션 렌더링
35
+ sessions.forEach((session, index) => {
36
+ if (sessions.length > 1) {
37
+ lines.push(`## ${session.title}`);
38
+ }
39
+ else {
40
+ lines.push(`## Session: ${session.title}`);
41
+ }
42
+ lines.push('');
43
+ // 메타데이터
44
+ if (includeMetadata && template !== 'minimal') {
45
+ lines.push('### Metadata');
46
+ lines.push('');
47
+ lines.push(`- **ID**: ${session.id}`);
48
+ lines.push(`- **Created**: ${formatDate(session.createdAt)}`);
49
+ lines.push(`- **Updated**: ${formatDate(session.updatedAt)}`);
50
+ if (session.tags && session.tags.length > 0) {
51
+ lines.push(`- **Tags**: ${session.tags.map(t => `\`${t}\``).join(', ')}`);
52
+ }
53
+ lines.push('');
54
+ }
55
+ // 요약
56
+ lines.push('### Summary');
57
+ lines.push('');
58
+ lines.push(session.summary);
59
+ lines.push('');
60
+ // 코드 컨텍스트
61
+ if (includeCodeBlocks && session.codeContexts && session.codeContexts.length > 0) {
62
+ lines.push('### Code Contexts');
63
+ lines.push('');
64
+ session.codeContexts.forEach((ctx, ctxIndex) => {
65
+ if (template === 'detailed' || template === 'report') {
66
+ lines.push(`#### Context ${ctxIndex + 1}`);
67
+ lines.push('');
68
+ lines.push(`> ${ctx.conversationSummary}`);
69
+ lines.push('');
70
+ }
71
+ ctx.codeBlocks.forEach((block, blockIndex) => {
72
+ if (block.filename) {
73
+ lines.push(`**${block.filename}**`);
74
+ lines.push('');
75
+ }
76
+ lines.push('```' + block.language);
77
+ lines.push(block.code);
78
+ lines.push('```');
79
+ lines.push('');
80
+ });
81
+ });
82
+ }
83
+ // 설계 결정
84
+ if (includeDesignDecisions && session.designDecisions && session.designDecisions.length > 0) {
85
+ lines.push('### Design Decisions');
86
+ lines.push('');
87
+ if (template === 'report') {
88
+ // 테이블 형식
89
+ lines.push('| # | Decision | Category | Rationale |');
90
+ lines.push('|---|----------|----------|-----------|');
91
+ session.designDecisions.forEach((dd, ddIndex) => {
92
+ lines.push(`| ${ddIndex + 1} | ${dd.title} | ${dd.category} | ${dd.rationale.substring(0, 50)}... |`);
93
+ });
94
+ lines.push('');
95
+ }
96
+ else {
97
+ session.designDecisions.forEach((dd, ddIndex) => {
98
+ lines.push(`#### ${ddIndex + 1}. ${dd.title}`);
99
+ lines.push('');
100
+ lines.push(`**Category**: ${dd.category}`);
101
+ lines.push('');
102
+ lines.push(dd.description);
103
+ lines.push('');
104
+ if (template !== 'minimal') {
105
+ lines.push(`**Rationale**: ${dd.rationale}`);
106
+ lines.push('');
107
+ }
108
+ });
109
+ }
110
+ }
111
+ // 세션 구분선
112
+ if (index < sessions.length - 1) {
113
+ lines.push('---');
114
+ lines.push('');
115
+ }
116
+ });
117
+ // 푸터
118
+ if (template === 'report' || template === 'detailed') {
119
+ lines.push('---');
120
+ lines.push('');
121
+ lines.push('*Generated by Vibe Coding MCP*');
122
+ }
123
+ return lines.join('\n');
124
+ }
125
+ // HTML 생성
126
+ function generateHTML(sessions, options) {
127
+ const { includeMetadata = true, includeCodeBlocks = true, includeDesignDecisions = true, title = 'Vibe Coding Session Export' } = options;
128
+ const styles = `
129
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; max-width: 900px; margin: 0 auto; padding: 2rem; line-height: 1.6; }
130
+ h1 { border-bottom: 2px solid #333; padding-bottom: 0.5rem; }
131
+ h2 { color: #2563eb; margin-top: 2rem; }
132
+ h3 { color: #4b5563; }
133
+ .metadata { background: #f3f4f6; padding: 1rem; border-radius: 8px; margin: 1rem 0; }
134
+ .metadata p { margin: 0.25rem 0; }
135
+ .tag { background: #dbeafe; color: #1d4ed8; padding: 0.25rem 0.5rem; border-radius: 4px; font-size: 0.875rem; margin-right: 0.5rem; }
136
+ pre { background: #1f2937; color: #f9fafb; padding: 1rem; border-radius: 8px; overflow-x: auto; }
137
+ code { font-family: 'Fira Code', monospace; }
138
+ .decision { border-left: 4px solid #2563eb; padding-left: 1rem; margin: 1rem 0; }
139
+ .decision-category { font-size: 0.75rem; text-transform: uppercase; color: #6b7280; }
140
+ table { width: 100%; border-collapse: collapse; margin: 1rem 0; }
141
+ th, td { border: 1px solid #e5e7eb; padding: 0.75rem; text-align: left; }
142
+ th { background: #f9fafb; }
143
+ .footer { margin-top: 3rem; padding-top: 1rem; border-top: 1px solid #e5e7eb; color: #6b7280; font-size: 0.875rem; }
144
+ `;
145
+ let html = `<!DOCTYPE html>
146
+ <html lang="en">
147
+ <head>
148
+ <meta charset="UTF-8">
149
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
150
+ <title>${escapeHtml(title)}</title>
151
+ <style>${styles}</style>
152
+ </head>
153
+ <body>
154
+ <h1>${escapeHtml(title)}</h1>
155
+ `;
156
+ if (includeMetadata) {
157
+ html += `
158
+ <div class="metadata">
159
+ <p><strong>Exported:</strong> ${new Date().toLocaleString()}</p>
160
+ <p><strong>Total Sessions:</strong> ${sessions.length}</p>
161
+ </div>
162
+ `;
163
+ }
164
+ sessions.forEach((session, index) => {
165
+ html += `
166
+ <h2>${escapeHtml(session.title)}</h2>
167
+ `;
168
+ if (includeMetadata) {
169
+ html += `
170
+ <div class="metadata">
171
+ <p><strong>ID:</strong> ${session.id}</p>
172
+ <p><strong>Created:</strong> ${formatDate(session.createdAt)}</p>
173
+ <p><strong>Updated:</strong> ${formatDate(session.updatedAt)}</p>
174
+ ${session.tags && session.tags.length > 0
175
+ ? `<p><strong>Tags:</strong> ${session.tags.map(t => `<span class="tag">${escapeHtml(t)}</span>`).join('')}</p>`
176
+ : ''}
177
+ </div>
178
+ `;
179
+ }
180
+ html += `
181
+ <h3>Summary</h3>
182
+ <p>${escapeHtml(session.summary)}</p>
183
+ `;
184
+ if (includeCodeBlocks && session.codeContexts && session.codeContexts.length > 0) {
185
+ html += `
186
+ <h3>Code Contexts</h3>
187
+ `;
188
+ session.codeContexts.forEach(ctx => {
189
+ ctx.codeBlocks.forEach(block => {
190
+ if (block.filename) {
191
+ html += `<p><strong>${escapeHtml(block.filename)}</strong></p>\n`;
192
+ }
193
+ html += `<pre><code class="language-${block.language}">${escapeHtml(block.code)}</code></pre>\n`;
194
+ });
195
+ });
196
+ }
197
+ if (includeDesignDecisions && session.designDecisions && session.designDecisions.length > 0) {
198
+ html += `
199
+ <h3>Design Decisions</h3>
200
+ `;
201
+ session.designDecisions.forEach((dd, i) => {
202
+ html += `
203
+ <div class="decision">
204
+ <span class="decision-category">${escapeHtml(dd.category)}</span>
205
+ <h4>${i + 1}. ${escapeHtml(dd.title)}</h4>
206
+ <p>${escapeHtml(dd.description)}</p>
207
+ <p><em>Rationale: ${escapeHtml(dd.rationale)}</em></p>
208
+ </div>
209
+ `;
210
+ });
211
+ }
212
+ if (index < sessions.length - 1) {
213
+ html += `<hr>\n`;
214
+ }
215
+ });
216
+ html += `
217
+ <div class="footer">
218
+ <p>Generated by Vibe Coding MCP</p>
219
+ </div>
220
+ </body>
221
+ </html>`;
222
+ return html;
223
+ }
224
+ // JSON 생성
225
+ function generateJSON(sessions, options) {
226
+ const { includeMetadata = true, includeCodeBlocks = true, includeDesignDecisions = true, title = 'Vibe Coding Session Export' } = options;
227
+ const exportData = {
228
+ exportInfo: {
229
+ title,
230
+ exportedAt: new Date().toISOString(),
231
+ version: '2.7.0',
232
+ sessionCount: sessions.length
233
+ },
234
+ sessions: sessions.map(session => {
235
+ const sessionData = {
236
+ id: session.id,
237
+ title: session.title,
238
+ summary: session.summary
239
+ };
240
+ if (includeMetadata) {
241
+ sessionData.createdAt = session.createdAt;
242
+ sessionData.updatedAt = session.updatedAt;
243
+ sessionData.tags = session.tags;
244
+ if (session.metadata) {
245
+ sessionData.metadata = session.metadata;
246
+ }
247
+ }
248
+ if (includeCodeBlocks && session.codeContexts) {
249
+ sessionData.codeContexts = session.codeContexts;
250
+ }
251
+ if (includeDesignDecisions && session.designDecisions) {
252
+ sessionData.designDecisions = session.designDecisions;
253
+ }
254
+ return sessionData;
255
+ })
256
+ };
257
+ return JSON.stringify(exportData, null, 2);
258
+ }
259
+ // 헬퍼 함수들
260
+ function slugify(text) {
261
+ return text
262
+ .toLowerCase()
263
+ .replace(/[^a-z0-9가-힣]+/g, '-')
264
+ .replace(/(^-|-$)/g, '');
265
+ }
266
+ function formatDate(isoString) {
267
+ try {
268
+ return new Date(isoString).toLocaleString();
269
+ }
270
+ catch {
271
+ return isoString;
272
+ }
273
+ }
274
+ function escapeHtml(text) {
275
+ return text
276
+ .replace(/&/g, '&amp;')
277
+ .replace(/</g, '&lt;')
278
+ .replace(/>/g, '&gt;')
279
+ .replace(/"/g, '&quot;')
280
+ .replace(/'/g, '&#039;');
281
+ }
282
+ export async function exportSessionTool(input) {
283
+ const { sessionIds, format, outputPath, bundleMultiple = true } = input;
284
+ try {
285
+ let sessions = [];
286
+ if (sessionIds && sessionIds.length > 0) {
287
+ // 특정 세션들 가져오기
288
+ for (const id of sessionIds) {
289
+ const session = await getSession(id);
290
+ if (session) {
291
+ sessions.push(session);
292
+ }
293
+ else {
294
+ exportLogger.warn('Session not found', { sessionId: id });
295
+ }
296
+ }
297
+ }
298
+ else {
299
+ // 모든 세션 가져오기
300
+ const { sessions: storedSessions } = await listSessions({ limit: 1000 });
301
+ for (const stored of storedSessions) {
302
+ const session = await getSession(stored.id);
303
+ if (session) {
304
+ sessions.push(session);
305
+ }
306
+ }
307
+ }
308
+ if (sessions.length === 0) {
309
+ return {
310
+ success: false,
311
+ format,
312
+ sessionCount: 0,
313
+ error: 'No sessions found to export'
314
+ };
315
+ }
316
+ // 형식에 따라 내용 생성
317
+ let content;
318
+ let fileExtension;
319
+ switch (format) {
320
+ case 'markdown':
321
+ content = generateMarkdown(sessions, input);
322
+ fileExtension = 'md';
323
+ break;
324
+ case 'html':
325
+ content = generateHTML(sessions, input);
326
+ fileExtension = 'html';
327
+ break;
328
+ case 'json':
329
+ content = generateJSON(sessions, input);
330
+ fileExtension = 'json';
331
+ break;
332
+ default:
333
+ return {
334
+ success: false,
335
+ format,
336
+ sessionCount: 0,
337
+ error: `Unsupported format: ${format}`
338
+ };
339
+ }
340
+ // 파일로 저장 (outputPath가 있으면)
341
+ let filePath;
342
+ if (outputPath) {
343
+ // 경로 resolve
344
+ const resolvedPath = path.resolve(outputPath);
345
+ // 디렉토리면 파일명 생성
346
+ let finalPath = resolvedPath;
347
+ try {
348
+ const stat = await fs.stat(resolvedPath);
349
+ if (stat.isDirectory()) {
350
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
351
+ finalPath = path.join(resolvedPath, `session-export-${timestamp}.${fileExtension}`);
352
+ }
353
+ }
354
+ catch {
355
+ // 파일이 없으면 그대로 사용 (새 파일 생성)
356
+ if (!resolvedPath.endsWith(`.${fileExtension}`)) {
357
+ finalPath = `${resolvedPath}.${fileExtension}`;
358
+ }
359
+ }
360
+ await fs.writeFile(finalPath, content, 'utf-8');
361
+ filePath = finalPath;
362
+ exportLogger.info('Session exported to file', { path: finalPath, sessionCount: sessions.length });
363
+ }
364
+ return {
365
+ success: true,
366
+ format,
367
+ content,
368
+ filePath,
369
+ sessionCount: sessions.length,
370
+ message: filePath
371
+ ? `Exported ${sessions.length} session(s) to ${filePath}`
372
+ : `Exported ${sessions.length} session(s) as ${format}`
373
+ };
374
+ }
375
+ catch (error) {
376
+ exportLogger.error('Failed to export sessions', error);
377
+ return {
378
+ success: false,
379
+ format,
380
+ sessionCount: 0,
381
+ error: error instanceof Error ? error.message : String(error)
382
+ };
383
+ }
384
+ }
385
+ export const exportSessionSchema = {
386
+ name: 'muse_export_session',
387
+ description: 'Exports vibe coding sessions to various formats (Markdown, JSON, HTML). Use for creating shareable documentation, backups, or reports from session history.',
388
+ inputSchema: {
389
+ type: 'object',
390
+ properties: {
391
+ sessionIds: {
392
+ type: 'array',
393
+ items: { type: 'string' },
394
+ description: 'Specific session IDs to export. If omitted, exports all sessions.'
395
+ },
396
+ format: {
397
+ type: 'string',
398
+ enum: ['markdown', 'json', 'html'],
399
+ description: 'Output format: markdown (readable docs), json (structured data), html (web page)'
400
+ },
401
+ outputPath: {
402
+ type: 'string',
403
+ description: 'File path to save the export. If omitted, returns content directly.'
404
+ },
405
+ includeMetadata: {
406
+ type: 'boolean',
407
+ description: 'Include session metadata (ID, timestamps, tags). Default: true'
408
+ },
409
+ includeCodeBlocks: {
410
+ type: 'boolean',
411
+ description: 'Include code blocks from code contexts. Default: true'
412
+ },
413
+ includeDesignDecisions: {
414
+ type: 'boolean',
415
+ description: 'Include design decisions. Default: true'
416
+ },
417
+ template: {
418
+ type: 'string',
419
+ enum: ['default', 'minimal', 'detailed', 'report'],
420
+ description: 'Template style: minimal (brief), default (balanced), detailed (comprehensive), report (formal)'
421
+ },
422
+ title: {
423
+ type: 'string',
424
+ description: 'Document title. Default: "Vibe Coding Session Export"'
425
+ },
426
+ bundleMultiple: {
427
+ type: 'boolean',
428
+ description: 'Combine multiple sessions into one document. Default: true'
429
+ }
430
+ },
431
+ required: ['format']
432
+ }
433
+ };
434
+ //# sourceMappingURL=exportSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportSession.js","sourceRoot":"","sources":["../../src/tools/exportSession.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,230 @@
1
+ /**
2
+ * 프로젝트 프로파일 도구
3
+ * 프로젝트별 설정 관리
4
+ * v2.7: Project Profile
5
+ */
6
+ import { ProjectProfile, StoredProfile, PublishingConfig, CodeAnalysisConfig, DocumentationConfig } from '../core/profileStorage.js';
7
+ export type ProfileAction = 'create' | 'get' | 'update' | 'delete' | 'list' | 'setActive' | 'getActive' | 'clone';
8
+ export interface ProjectProfileInput {
9
+ action: ProfileAction;
10
+ name?: string;
11
+ description?: string;
12
+ projectPath?: string;
13
+ repository?: string;
14
+ version?: string;
15
+ publishing?: PublishingConfig;
16
+ codeAnalysis?: CodeAnalysisConfig;
17
+ documentation?: DocumentationConfig;
18
+ defaultTags?: string[];
19
+ tagCategories?: {
20
+ name: string;
21
+ tags: string[];
22
+ }[];
23
+ team?: {
24
+ name: string;
25
+ members?: {
26
+ name: string;
27
+ role?: string;
28
+ email?: string;
29
+ }[];
30
+ };
31
+ metadata?: Record<string, unknown>;
32
+ profileId?: string;
33
+ newName?: string;
34
+ limit?: number;
35
+ offset?: number;
36
+ sortBy?: 'createdAt' | 'updatedAt' | 'name';
37
+ sortOrder?: 'asc' | 'desc';
38
+ }
39
+ export interface ProjectProfileOutput {
40
+ success: boolean;
41
+ action: ProfileAction;
42
+ profile?: ProjectProfile;
43
+ profiles?: StoredProfile[];
44
+ total?: number;
45
+ message?: string;
46
+ error?: string;
47
+ }
48
+ export declare function projectProfileTool(input: ProjectProfileInput): Promise<ProjectProfileOutput>;
49
+ export declare const projectProfileSchema: {
50
+ name: string;
51
+ description: string;
52
+ inputSchema: {
53
+ type: string;
54
+ properties: {
55
+ action: {
56
+ type: string;
57
+ enum: string[];
58
+ description: string;
59
+ };
60
+ profileId: {
61
+ type: string;
62
+ description: string;
63
+ };
64
+ name: {
65
+ type: string;
66
+ description: string;
67
+ };
68
+ newName: {
69
+ type: string;
70
+ description: string;
71
+ };
72
+ description: {
73
+ type: string;
74
+ description: string;
75
+ };
76
+ projectPath: {
77
+ type: string;
78
+ description: string;
79
+ };
80
+ repository: {
81
+ type: string;
82
+ description: string;
83
+ };
84
+ version: {
85
+ type: string;
86
+ description: string;
87
+ };
88
+ publishing: {
89
+ type: string;
90
+ description: string;
91
+ properties: {
92
+ defaultPlatform: {
93
+ type: string;
94
+ enum: string[];
95
+ };
96
+ platformSettings: {
97
+ type: string;
98
+ };
99
+ autoPublish: {
100
+ type: string;
101
+ };
102
+ };
103
+ };
104
+ codeAnalysis: {
105
+ type: string;
106
+ description: string;
107
+ properties: {
108
+ defaultLanguage: {
109
+ type: string;
110
+ enum: string[];
111
+ };
112
+ defaultDiagramTypes: {
113
+ type: string;
114
+ items: {
115
+ type: string;
116
+ enum: string[];
117
+ };
118
+ };
119
+ excludePatterns: {
120
+ type: string;
121
+ items: {
122
+ type: string;
123
+ };
124
+ };
125
+ useAI: {
126
+ type: string;
127
+ };
128
+ };
129
+ };
130
+ documentation: {
131
+ type: string;
132
+ description: string;
133
+ properties: {
134
+ defaultDocType: {
135
+ type: string;
136
+ enum: string[];
137
+ };
138
+ language: {
139
+ type: string;
140
+ enum: string[];
141
+ };
142
+ author: {
143
+ type: string;
144
+ };
145
+ license: {
146
+ type: string;
147
+ };
148
+ includeTableOfContents: {
149
+ type: string;
150
+ };
151
+ };
152
+ };
153
+ defaultTags: {
154
+ type: string;
155
+ items: {
156
+ type: string;
157
+ };
158
+ description: string;
159
+ };
160
+ tagCategories: {
161
+ type: string;
162
+ description: string;
163
+ items: {
164
+ type: string;
165
+ properties: {
166
+ name: {
167
+ type: string;
168
+ };
169
+ tags: {
170
+ type: string;
171
+ items: {
172
+ type: string;
173
+ };
174
+ };
175
+ };
176
+ };
177
+ };
178
+ team: {
179
+ type: string;
180
+ description: string;
181
+ properties: {
182
+ name: {
183
+ type: string;
184
+ };
185
+ members: {
186
+ type: string;
187
+ items: {
188
+ type: string;
189
+ properties: {
190
+ name: {
191
+ type: string;
192
+ };
193
+ role: {
194
+ type: string;
195
+ };
196
+ email: {
197
+ type: string;
198
+ };
199
+ };
200
+ };
201
+ };
202
+ };
203
+ };
204
+ metadata: {
205
+ type: string;
206
+ description: string;
207
+ };
208
+ limit: {
209
+ type: string;
210
+ description: string;
211
+ };
212
+ offset: {
213
+ type: string;
214
+ description: string;
215
+ };
216
+ sortBy: {
217
+ type: string;
218
+ enum: string[];
219
+ description: string;
220
+ };
221
+ sortOrder: {
222
+ type: string;
223
+ enum: string[];
224
+ description: string;
225
+ };
226
+ };
227
+ required: string[];
228
+ };
229
+ };
230
+ //# sourceMappingURL=projectProfile.d.ts.map