vibe-coding-mcp 2.3.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 +179 -0
- package/dist/__tests__/collectCodeContext.test.d.ts +2 -0
- package/dist/__tests__/collectCodeContext.test.d.ts.map +1 -0
- package/dist/__tests__/collectCodeContext.test.js +139 -0
- package/dist/__tests__/collectCodeContext.test.js.map +1 -0
- package/dist/__tests__/createSessionLog.test.d.ts +2 -0
- package/dist/__tests__/createSessionLog.test.d.ts.map +1 -0
- package/dist/__tests__/createSessionLog.test.js +130 -0
- package/dist/__tests__/createSessionLog.test.js.map +1 -0
- package/dist/__tests__/generateDevDocument.test.d.ts +2 -0
- package/dist/__tests__/generateDevDocument.test.d.ts.map +1 -0
- package/dist/__tests__/generateDevDocument.test.js +174 -0
- package/dist/__tests__/generateDevDocument.test.js.map +1 -0
- package/dist/__tests__/normalizeForPlatform.test.d.ts +2 -0
- package/dist/__tests__/normalizeForPlatform.test.d.ts.map +1 -0
- package/dist/__tests__/normalizeForPlatform.test.js +171 -0
- package/dist/__tests__/normalizeForPlatform.test.js.map +1 -0
- package/dist/__tests__/publishDocument.test.d.ts +2 -0
- package/dist/__tests__/publishDocument.test.d.ts.map +1 -0
- package/dist/__tests__/publishDocument.test.js +93 -0
- package/dist/__tests__/publishDocument.test.js.map +1 -0
- package/dist/__tests__/summarizeDesignDecisions.test.d.ts +2 -0
- package/dist/__tests__/summarizeDesignDecisions.test.d.ts.map +1 -0
- package/dist/__tests__/summarizeDesignDecisions.test.js +158 -0
- package/dist/__tests__/summarizeDesignDecisions.test.js.map +1 -0
- package/dist/core/cache.d.ts +39 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +112 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/config.d.ts +30 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +90 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/errors.d.ts +52 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +99 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/logger.d.ts +57 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +114 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/schemas.d.ts +690 -0
- package/dist/core/schemas.d.ts.map +1 -0
- package/dist/core/schemas.js +136 -0
- package/dist/core/schemas.js.map +1 -0
- package/dist/core/security.d.ts +28 -0
- package/dist/core/security.d.ts.map +1 -0
- package/dist/core/security.js +103 -0
- package/dist/core/security.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +168 -0
- package/dist/index.js.map +1 -0
- package/dist/platforms/confluence.d.ts +13 -0
- package/dist/platforms/confluence.d.ts.map +1 -0
- package/dist/platforms/confluence.js +178 -0
- package/dist/platforms/confluence.js.map +1 -0
- package/dist/platforms/discord.d.ts +54 -0
- package/dist/platforms/discord.d.ts.map +1 -0
- package/dist/platforms/discord.js +176 -0
- package/dist/platforms/discord.js.map +1 -0
- package/dist/platforms/github-wiki.d.ts +3 -0
- package/dist/platforms/github-wiki.d.ts.map +1 -0
- package/dist/platforms/github-wiki.js +120 -0
- package/dist/platforms/github-wiki.js.map +1 -0
- package/dist/platforms/notion.d.ts +3 -0
- package/dist/platforms/notion.d.ts.map +1 -0
- package/dist/platforms/notion.js +205 -0
- package/dist/platforms/notion.js.map +1 -0
- package/dist/platforms/obsidian.d.ts +3 -0
- package/dist/platforms/obsidian.d.ts.map +1 -0
- package/dist/platforms/obsidian.js +43 -0
- package/dist/platforms/obsidian.js.map +1 -0
- package/dist/platforms/slack.d.ts +21 -0
- package/dist/platforms/slack.d.ts.map +1 -0
- package/dist/platforms/slack.js +217 -0
- package/dist/platforms/slack.js.map +1 -0
- package/dist/stdio.d.ts +6 -0
- package/dist/stdio.d.ts.map +1 -0
- package/dist/stdio.js +98 -0
- package/dist/stdio.js.map +1 -0
- package/dist/tools/analyzeCode.d.ts +65 -0
- package/dist/tools/analyzeCode.d.ts.map +1 -0
- package/dist/tools/analyzeCode.js +113 -0
- package/dist/tools/analyzeCode.js.map +1 -0
- package/dist/tools/collectCodeContext.d.ts +86 -0
- package/dist/tools/collectCodeContext.d.ts.map +1 -0
- package/dist/tools/collectCodeContext.js +275 -0
- package/dist/tools/collectCodeContext.js.map +1 -0
- package/dist/tools/createSessionLog.d.ts +79 -0
- package/dist/tools/createSessionLog.d.ts.map +1 -0
- package/dist/tools/createSessionLog.js +160 -0
- package/dist/tools/createSessionLog.js.map +1 -0
- package/dist/tools/generateDevDocument.d.ts +216 -0
- package/dist/tools/generateDevDocument.d.ts.map +1 -0
- package/dist/tools/generateDevDocument.js +659 -0
- package/dist/tools/generateDevDocument.js.map +1 -0
- package/dist/tools/normalizeForPlatform.d.ts +95 -0
- package/dist/tools/normalizeForPlatform.d.ts.map +1 -0
- package/dist/tools/normalizeForPlatform.js +340 -0
- package/dist/tools/normalizeForPlatform.js.map +1 -0
- package/dist/tools/publishDocument.d.ts +60 -0
- package/dist/tools/publishDocument.d.ts.map +1 -0
- package/dist/tools/publishDocument.js +117 -0
- package/dist/tools/publishDocument.js.map +1 -0
- package/dist/tools/summarizeDesignDecisions.d.ts +82 -0
- package/dist/tools/summarizeDesignDecisions.d.ts.map +1 -0
- package/dist/tools/summarizeDesignDecisions.js +361 -0
- package/dist/tools/summarizeDesignDecisions.js.map +1 -0
- package/dist/types/index.d.ts +63 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/astParser.d.ts +55 -0
- package/dist/utils/astParser.d.ts.map +1 -0
- package/dist/utils/astParser.js +333 -0
- package/dist/utils/astParser.js.map +1 -0
- package/dist/utils/i18n.d.ts +67 -0
- package/dist/utils/i18n.d.ts.map +1 -0
- package/dist/utils/i18n.js +193 -0
- package/dist/utils/i18n.js.map +1 -0
- package/dist/utils/markdown.d.ts +9 -0
- package/dist/utils/markdown.d.ts.map +1 -0
- package/dist/utils/markdown.js +99 -0
- package/dist/utils/markdown.js.map +1 -0
- package/dist/utils/mermaidGenerator.d.ts +69 -0
- package/dist/utils/mermaidGenerator.d.ts.map +1 -0
- package/dist/utils/mermaidGenerator.js +315 -0
- package/dist/utils/mermaidGenerator.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Zod schemas for input validation
|
|
4
|
+
* Aligned with existing type definitions in types/index.ts
|
|
5
|
+
*/
|
|
6
|
+
// Common schemas - matching existing types
|
|
7
|
+
export const CodeBlockSchema = z.object({
|
|
8
|
+
language: z.string().default('text'),
|
|
9
|
+
code: z.string(),
|
|
10
|
+
filename: z.string().optional(),
|
|
11
|
+
description: z.string().optional()
|
|
12
|
+
});
|
|
13
|
+
export const DesignDecisionSchema = z.object({
|
|
14
|
+
id: z.string(),
|
|
15
|
+
title: z.string(),
|
|
16
|
+
description: z.string(),
|
|
17
|
+
rationale: z.string(),
|
|
18
|
+
alternatives: z.array(z.string()).optional(),
|
|
19
|
+
category: z.enum(['architecture', 'library', 'pattern', 'implementation', 'other']).default('other'),
|
|
20
|
+
timestamp: z.string().default(() => new Date().toISOString())
|
|
21
|
+
});
|
|
22
|
+
export const CodeContextSchema = z.object({
|
|
23
|
+
sessionId: z.string(),
|
|
24
|
+
timestamp: z.string(),
|
|
25
|
+
codeBlocks: z.array(CodeBlockSchema),
|
|
26
|
+
conversationSummary: z.string(),
|
|
27
|
+
tags: z.array(z.string()).optional()
|
|
28
|
+
});
|
|
29
|
+
export const SessionLogOptionsSchema = z.object({
|
|
30
|
+
logType: z.enum(['daily', 'session']).default('session'),
|
|
31
|
+
outputPath: z.string().optional(),
|
|
32
|
+
format: z.enum(['markdown', 'json']).optional().default('markdown')
|
|
33
|
+
});
|
|
34
|
+
// Tool input schemas - matching existing tool interfaces
|
|
35
|
+
export const CollectCodeContextSchema = z.object({
|
|
36
|
+
codeBlocks: z.array(CodeBlockSchema).optional(),
|
|
37
|
+
rawText: z.string().optional(),
|
|
38
|
+
conversationSummary: z.string().min(1, 'Conversation summary is required'),
|
|
39
|
+
tags: z.array(z.string()).optional(),
|
|
40
|
+
autoDetectLanguage: z.boolean().optional().default(true),
|
|
41
|
+
removeDuplicates: z.boolean().optional().default(true),
|
|
42
|
+
includeStats: z.boolean().optional().default(false)
|
|
43
|
+
});
|
|
44
|
+
export const SummarizeDesignDecisionsSchema = z.object({
|
|
45
|
+
conversationLog: z.string().min(1, 'Conversation log is required'),
|
|
46
|
+
language: z.enum(['en', 'ko']).optional().default('en')
|
|
47
|
+
});
|
|
48
|
+
export const GenerateDevDocumentSchema = z.object({
|
|
49
|
+
documentType: z.enum(['README', 'DESIGN', 'TUTORIAL', 'CHANGELOG', 'API', 'ARCHITECTURE']),
|
|
50
|
+
title: z.string().optional(),
|
|
51
|
+
description: z.string().optional(),
|
|
52
|
+
projectName: z.string().optional(),
|
|
53
|
+
author: z.string().optional(),
|
|
54
|
+
version: z.string().optional(),
|
|
55
|
+
license: z.string().optional(),
|
|
56
|
+
language: z.enum(['en', 'ko']).optional().default('en'),
|
|
57
|
+
features: z.array(z.string()).optional(),
|
|
58
|
+
installation: z.object({
|
|
59
|
+
requirements: z.array(z.string()).optional(),
|
|
60
|
+
steps: z.array(z.string()).optional()
|
|
61
|
+
}).optional(),
|
|
62
|
+
apiReference: z.array(z.object({
|
|
63
|
+
name: z.string(),
|
|
64
|
+
description: z.string(),
|
|
65
|
+
params: z.array(z.string()).optional(),
|
|
66
|
+
returns: z.string().optional()
|
|
67
|
+
})).optional(),
|
|
68
|
+
designDecisions: z.array(DesignDecisionSchema).optional(),
|
|
69
|
+
codeContexts: z.array(CodeContextSchema).optional(),
|
|
70
|
+
changelog: z.array(z.object({
|
|
71
|
+
version: z.string(),
|
|
72
|
+
date: z.string(),
|
|
73
|
+
changes: z.array(z.string())
|
|
74
|
+
})).optional(),
|
|
75
|
+
includeTableOfContents: z.boolean().optional().default(false),
|
|
76
|
+
faq: z.array(z.object({
|
|
77
|
+
question: z.string(),
|
|
78
|
+
answer: z.string()
|
|
79
|
+
})).optional(),
|
|
80
|
+
contributors: z.array(z.object({
|
|
81
|
+
name: z.string(),
|
|
82
|
+
role: z.string().optional()
|
|
83
|
+
})).optional()
|
|
84
|
+
});
|
|
85
|
+
export const NormalizeForPlatformSchema = z.object({
|
|
86
|
+
document: z.string().min(1, 'Document is required'),
|
|
87
|
+
platform: z.enum(['notion', 'github-wiki', 'obsidian']),
|
|
88
|
+
options: z.object({
|
|
89
|
+
addFrontmatter: z.boolean().optional(),
|
|
90
|
+
addTimestamp: z.boolean().optional(),
|
|
91
|
+
customMetadata: z.record(z.string()).optional()
|
|
92
|
+
}).optional()
|
|
93
|
+
});
|
|
94
|
+
export const PublishDocumentSchema = z.object({
|
|
95
|
+
document: z.string().min(1, 'Document is required'),
|
|
96
|
+
platform: z.enum(['notion', 'github-wiki', 'obsidian', 'confluence', 'slack', 'discord']),
|
|
97
|
+
title: z.string().min(1, 'Title is required'),
|
|
98
|
+
options: z.object({
|
|
99
|
+
filename: z.string().optional(),
|
|
100
|
+
wikiPath: z.string().optional(),
|
|
101
|
+
vaultPath: z.string().optional(),
|
|
102
|
+
tags: z.array(z.string()).optional()
|
|
103
|
+
}).optional()
|
|
104
|
+
});
|
|
105
|
+
export const CreateSessionLogSchema = z.object({
|
|
106
|
+
title: z.string().min(1, 'Title is required'),
|
|
107
|
+
summary: z.string().min(1, 'Summary is required'),
|
|
108
|
+
codeContexts: z.array(CodeContextSchema).optional(),
|
|
109
|
+
designDecisions: z.array(DesignDecisionSchema).optional(),
|
|
110
|
+
duration: z.number().optional(),
|
|
111
|
+
tags: z.array(z.string()).optional(),
|
|
112
|
+
options: SessionLogOptionsSchema.optional()
|
|
113
|
+
});
|
|
114
|
+
export const AnalyzeCodeSchema = z.object({
|
|
115
|
+
code: z.string().min(1, 'Code is required'),
|
|
116
|
+
language: z.enum(['typescript', 'javascript', 'python', 'go']),
|
|
117
|
+
filename: z.string().optional(),
|
|
118
|
+
options: z.object({
|
|
119
|
+
includeComplexity: z.boolean().optional().default(true),
|
|
120
|
+
includeDependencies: z.boolean().optional().default(true),
|
|
121
|
+
generateDiagram: z.boolean().optional().default(true),
|
|
122
|
+
diagramType: z.enum(['class', 'flowchart', 'dependency', 'architecture']).optional().default('class')
|
|
123
|
+
}).optional()
|
|
124
|
+
});
|
|
125
|
+
/**
|
|
126
|
+
* Validates input against schema and returns typed result
|
|
127
|
+
*/
|
|
128
|
+
export function validateInput(schema, input) {
|
|
129
|
+
const result = schema.safeParse(input);
|
|
130
|
+
if (!result.success) {
|
|
131
|
+
const errors = result.error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ');
|
|
132
|
+
throw new Error(`Validation failed: ${errors}`);
|
|
133
|
+
}
|
|
134
|
+
return result.data;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security utilities for path validation, network requests, and URL validation
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Validates that a file path stays within the allowed directory (prevents path traversal)
|
|
6
|
+
*/
|
|
7
|
+
export declare function validatePathWithinDirectory(filePath: string, allowedDir: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* Sanitizes a filename to prevent path traversal and invalid characters
|
|
10
|
+
*/
|
|
11
|
+
export declare function sanitizeFilename(filename: string, maxLength?: number): string;
|
|
12
|
+
/**
|
|
13
|
+
* Validates webhook URL for Slack or Discord (SSRF prevention)
|
|
14
|
+
*/
|
|
15
|
+
export declare function validateWebhookUrl(url: string, allowedHosts: string[]): void;
|
|
16
|
+
export declare const SLACK_ALLOWED_HOSTS: string[];
|
|
17
|
+
export declare const DISCORD_ALLOWED_HOSTS: string[];
|
|
18
|
+
/**
|
|
19
|
+
* Fetch with timeout and retry support
|
|
20
|
+
*/
|
|
21
|
+
export interface FetchWithRetryOptions {
|
|
22
|
+
timeout?: number;
|
|
23
|
+
maxRetries?: number;
|
|
24
|
+
retryDelay?: number;
|
|
25
|
+
retryStatusCodes?: number[];
|
|
26
|
+
}
|
|
27
|
+
export declare function fetchWithRetry(url: string, options?: RequestInit, retryOptions?: FetchWithRetryOptions): Promise<Response>;
|
|
28
|
+
//# sourceMappingURL=security.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/core/security.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAaxF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,CAQlF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAiC5E;AAGD,eAAO,MAAM,mBAAmB,UAAsB,CAAC;AACvD,eAAO,MAAM,qBAAqB,UAAoC,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,EACzB,YAAY,GAAE,qBAA0B,GACvC,OAAO,CAAC,QAAQ,CAAC,CA2DnB"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security utilities for path validation, network requests, and URL validation
|
|
3
|
+
*/
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import { ToolError } from './errors.js';
|
|
6
|
+
/**
|
|
7
|
+
* Validates that a file path stays within the allowed directory (prevents path traversal)
|
|
8
|
+
*/
|
|
9
|
+
export function validatePathWithinDirectory(filePath, allowedDir) {
|
|
10
|
+
const resolvedPath = path.resolve(filePath);
|
|
11
|
+
const resolvedAllowedDir = path.resolve(allowedDir);
|
|
12
|
+
if (!resolvedPath.startsWith(resolvedAllowedDir + path.sep) && resolvedPath !== resolvedAllowedDir) {
|
|
13
|
+
throw new ToolError('Path traversal detected: file path escapes allowed directory', 'VALIDATION_ERROR', { filePath, allowedDir });
|
|
14
|
+
}
|
|
15
|
+
return resolvedPath;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Sanitizes a filename to prevent path traversal and invalid characters
|
|
19
|
+
*/
|
|
20
|
+
export function sanitizeFilename(filename, maxLength = 200) {
|
|
21
|
+
return filename
|
|
22
|
+
.replace(/\.\./g, '') // Remove parent directory references
|
|
23
|
+
.replace(/[<>:"/\\|?*\x00-\x1f]/g, '-') // Remove invalid characters
|
|
24
|
+
.replace(/\s+/g, '-') // Replace whitespace with dashes
|
|
25
|
+
.replace(/-+/g, '-') // Collapse multiple dashes
|
|
26
|
+
.replace(/^-|-$/g, '') // Remove leading/trailing dashes
|
|
27
|
+
.slice(0, maxLength);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Validates webhook URL for Slack or Discord (SSRF prevention)
|
|
31
|
+
*/
|
|
32
|
+
export function validateWebhookUrl(url, allowedHosts) {
|
|
33
|
+
try {
|
|
34
|
+
const parsed = new URL(url);
|
|
35
|
+
// Must be HTTPS
|
|
36
|
+
if (parsed.protocol !== 'https:') {
|
|
37
|
+
throw new ToolError('Webhook URL must use HTTPS protocol', 'VALIDATION_ERROR', { url: url.slice(0, 50) });
|
|
38
|
+
}
|
|
39
|
+
// Must match allowed hosts
|
|
40
|
+
const isAllowed = allowedHosts.some(host => parsed.hostname === host || parsed.hostname.endsWith('.' + host));
|
|
41
|
+
if (!isAllowed) {
|
|
42
|
+
throw new ToolError(`Webhook URL must be from allowed hosts: ${allowedHosts.join(', ')}`, 'VALIDATION_ERROR', { hostname: parsed.hostname });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if (error instanceof ToolError)
|
|
47
|
+
throw error;
|
|
48
|
+
throw new ToolError('Invalid webhook URL format', 'VALIDATION_ERROR', { url: url.slice(0, 50) });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Allowed webhook hosts
|
|
52
|
+
export const SLACK_ALLOWED_HOSTS = ['hooks.slack.com'];
|
|
53
|
+
export const DISCORD_ALLOWED_HOSTS = ['discord.com', 'discordapp.com'];
|
|
54
|
+
export async function fetchWithRetry(url, options = {}, retryOptions = {}) {
|
|
55
|
+
const { timeout = 30000, maxRetries = 3, retryDelay = 1000, retryStatusCodes = [429, 500, 502, 503, 504] } = retryOptions;
|
|
56
|
+
let lastError = null;
|
|
57
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
58
|
+
const controller = new AbortController();
|
|
59
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
60
|
+
try {
|
|
61
|
+
const response = await fetch(url, {
|
|
62
|
+
...options,
|
|
63
|
+
signal: controller.signal
|
|
64
|
+
});
|
|
65
|
+
clearTimeout(timeoutId);
|
|
66
|
+
// Check if we should retry
|
|
67
|
+
if (retryStatusCodes.includes(response.status) && attempt < maxRetries) {
|
|
68
|
+
// Get retry-after header if available
|
|
69
|
+
const retryAfter = response.headers.get('retry-after');
|
|
70
|
+
const delay = retryAfter
|
|
71
|
+
? parseInt(retryAfter) * 1000
|
|
72
|
+
: retryDelay * Math.pow(2, attempt); // Exponential backoff
|
|
73
|
+
await sleep(delay);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
return response;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
clearTimeout(timeoutId);
|
|
80
|
+
if (error instanceof Error) {
|
|
81
|
+
if (error.name === 'AbortError') {
|
|
82
|
+
lastError = new ToolError(`Request timed out after ${timeout}ms`, 'TIMEOUT', { url: url.slice(0, 100), attempt });
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
lastError = error;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Retry on network errors
|
|
89
|
+
if (attempt < maxRetries) {
|
|
90
|
+
await sleep(retryDelay * Math.pow(2, attempt));
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
throw lastError || new ToolError('Request failed after retries', 'NETWORK_ERROR');
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Sleep utility for retry delays
|
|
99
|
+
*/
|
|
100
|
+
function sleep(ms) {
|
|
101
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/core/security.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAUA,OAAO,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import express from 'express';
|
|
3
|
+
import cors from 'cors';
|
|
4
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
5
|
+
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
|
|
6
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
7
|
+
import 'dotenv/config';
|
|
8
|
+
// Core
|
|
9
|
+
import { createErrorResponse, ToolError } from './core/errors.js';
|
|
10
|
+
import { validateInput, CollectCodeContextSchema, SummarizeDesignDecisionsSchema, GenerateDevDocumentSchema, NormalizeForPlatformSchema, PublishDocumentSchema, CreateSessionLogSchema, AnalyzeCodeSchema, } from './core/schemas.js';
|
|
11
|
+
// Tools
|
|
12
|
+
import { collectCodeContext, collectCodeContextSchema } from './tools/collectCodeContext.js';
|
|
13
|
+
import { summarizeDesignDecisions, summarizeDesignDecisionsSchema } from './tools/summarizeDesignDecisions.js';
|
|
14
|
+
import { generateDevDocument, generateDevDocumentSchema } from './tools/generateDevDocument.js';
|
|
15
|
+
import { normalizeForPlatform, normalizeForPlatformSchema } from './tools/normalizeForPlatform.js';
|
|
16
|
+
import { publishDocument, publishDocumentSchema } from './tools/publishDocument.js';
|
|
17
|
+
import { createSessionLog, createSessionLogSchema } from './tools/createSessionLog.js';
|
|
18
|
+
import { analyzeCodeTool, analyzeCodeSchema } from './tools/analyzeCode.js';
|
|
19
|
+
const app = express();
|
|
20
|
+
const PORT = process.env.PORT || 3000;
|
|
21
|
+
// Middleware
|
|
22
|
+
app.use(cors());
|
|
23
|
+
app.use(express.json());
|
|
24
|
+
// Store active transports
|
|
25
|
+
const transports = new Map();
|
|
26
|
+
// Tool handlers with validation
|
|
27
|
+
const toolHandlers = {
|
|
28
|
+
muse_collect_code_context: (args) => {
|
|
29
|
+
const validated = validateInput(CollectCodeContextSchema, args);
|
|
30
|
+
return collectCodeContext(validated);
|
|
31
|
+
},
|
|
32
|
+
muse_summarize_design_decisions: (args) => {
|
|
33
|
+
const validated = validateInput(SummarizeDesignDecisionsSchema, args);
|
|
34
|
+
return summarizeDesignDecisions(validated);
|
|
35
|
+
},
|
|
36
|
+
muse_generate_dev_document: (args) => {
|
|
37
|
+
const validated = validateInput(GenerateDevDocumentSchema, args);
|
|
38
|
+
return generateDevDocument(validated);
|
|
39
|
+
},
|
|
40
|
+
muse_normalize_for_platform: (args) => {
|
|
41
|
+
const validated = validateInput(NormalizeForPlatformSchema, args);
|
|
42
|
+
return normalizeForPlatform(validated);
|
|
43
|
+
},
|
|
44
|
+
muse_publish_document: async (args) => {
|
|
45
|
+
const validated = validateInput(PublishDocumentSchema, args);
|
|
46
|
+
return publishDocument(validated);
|
|
47
|
+
},
|
|
48
|
+
muse_create_session_log: async (args) => {
|
|
49
|
+
const validated = validateInput(CreateSessionLogSchema, args);
|
|
50
|
+
return createSessionLog(validated);
|
|
51
|
+
},
|
|
52
|
+
muse_analyze_code: (args) => {
|
|
53
|
+
const validated = validateInput(AnalyzeCodeSchema, args);
|
|
54
|
+
return analyzeCodeTool(validated);
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
function isValidToolName(name) {
|
|
58
|
+
return name in toolHandlers;
|
|
59
|
+
}
|
|
60
|
+
// Create MCP Server instance
|
|
61
|
+
function createMCPServer() {
|
|
62
|
+
const server = new Server({
|
|
63
|
+
name: 'vibe-coding-mcp',
|
|
64
|
+
version: '2.0.0',
|
|
65
|
+
}, {
|
|
66
|
+
capabilities: {
|
|
67
|
+
tools: {},
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
// List available tools
|
|
71
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
72
|
+
return {
|
|
73
|
+
tools: [
|
|
74
|
+
collectCodeContextSchema,
|
|
75
|
+
summarizeDesignDecisionsSchema,
|
|
76
|
+
generateDevDocumentSchema,
|
|
77
|
+
normalizeForPlatformSchema,
|
|
78
|
+
publishDocumentSchema,
|
|
79
|
+
createSessionLogSchema,
|
|
80
|
+
analyzeCodeSchema,
|
|
81
|
+
],
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
// Handle tool calls
|
|
85
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
86
|
+
const { name, arguments: args } = request.params;
|
|
87
|
+
try {
|
|
88
|
+
if (!isValidToolName(name)) {
|
|
89
|
+
throw new ToolError(`Unknown tool: ${name}`, 'NOT_FOUND', { tool: name });
|
|
90
|
+
}
|
|
91
|
+
const handler = toolHandlers[name];
|
|
92
|
+
const result = await handler(args);
|
|
93
|
+
return {
|
|
94
|
+
content: [
|
|
95
|
+
{
|
|
96
|
+
type: 'text',
|
|
97
|
+
text: JSON.stringify(result, null, 2),
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
return createErrorResponse(error);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
return server;
|
|
107
|
+
}
|
|
108
|
+
// Health check endpoint
|
|
109
|
+
app.get('/', (_req, res) => {
|
|
110
|
+
res.json({
|
|
111
|
+
name: 'vibe-coding-mcp',
|
|
112
|
+
version: '2.0.0',
|
|
113
|
+
description: 'MCP server for vibe coding documentation - Enhanced with AST analysis, Mermaid diagrams, multi-language support',
|
|
114
|
+
status: 'running',
|
|
115
|
+
tools: Object.keys(toolHandlers),
|
|
116
|
+
features: [
|
|
117
|
+
'AST parsing (TypeScript, Python, Go)',
|
|
118
|
+
'Mermaid diagram generation',
|
|
119
|
+
'Multi-language support (Korean/English)',
|
|
120
|
+
'Multiple document types (README, DESIGN, TUTORIAL, CHANGELOG, API, ARCHITECTURE)',
|
|
121
|
+
'Multiple platforms (Notion, GitHub Wiki, Obsidian, Confluence, Slack, Discord)',
|
|
122
|
+
'Input validation with Zod',
|
|
123
|
+
'Structured error handling'
|
|
124
|
+
]
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
// SSE endpoint for MCP connection
|
|
128
|
+
app.get('/sse', async (_req, res) => {
|
|
129
|
+
console.log('New SSE connection established');
|
|
130
|
+
const transport = new SSEServerTransport('/message', res);
|
|
131
|
+
const sessionId = crypto.randomUUID();
|
|
132
|
+
transports.set(sessionId, transport);
|
|
133
|
+
const server = createMCPServer();
|
|
134
|
+
res.on('close', () => {
|
|
135
|
+
console.log('SSE connection closed');
|
|
136
|
+
transports.delete(sessionId);
|
|
137
|
+
});
|
|
138
|
+
await server.connect(transport);
|
|
139
|
+
});
|
|
140
|
+
// Message endpoint for MCP communication
|
|
141
|
+
app.post('/message', async (req, res) => {
|
|
142
|
+
const sessionId = req.query.sessionId;
|
|
143
|
+
if (!sessionId) {
|
|
144
|
+
// Handle direct message without session
|
|
145
|
+
const transport = Array.from(transports.values())[0];
|
|
146
|
+
if (transport) {
|
|
147
|
+
await transport.handlePostMessage(req, res);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
res.status(400).json({ error: 'No active session' });
|
|
151
|
+
}
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const transport = transports.get(sessionId);
|
|
155
|
+
if (transport) {
|
|
156
|
+
await transport.handlePostMessage(req, res);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
res.status(404).json({ error: 'Session not found' });
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
// Start server
|
|
163
|
+
app.listen(PORT, () => {
|
|
164
|
+
console.log(`Vibe Coding MCP Server v2.0.0 running on http://localhost:${PORT}`);
|
|
165
|
+
console.log(`SSE endpoint: http://localhost:${PORT}/sse`);
|
|
166
|
+
console.log(`Message endpoint: http://localhost:${PORT}/message`);
|
|
167
|
+
});
|
|
168
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,OAA8B,MAAM,SAAS,CAAC;AACrD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,eAAe,CAAC;AAEvB,OAAO;AACP,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,8BAA8B,EAC9B,yBAAyB,EACzB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,QAAQ;AACR,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,EAAE,wBAAwB,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AAC/G,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChG,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACnG,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE5E,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AACtB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;AAEtC,aAAa;AACb,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AAChB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAExB,0BAA0B;AAC1B,MAAM,UAAU,GAAG,IAAI,GAAG,EAA8B,CAAC;AAEzD,gCAAgC;AAChC,MAAM,YAAY,GAAG;IACnB,yBAAyB,EAAE,CAAC,IAAa,EAAE,EAAE;QAC3C,MAAM,SAAS,GAAG,aAAa,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;QAChE,OAAO,kBAAkB,CAAC,SAAqD,CAAC,CAAC;IACnF,CAAC;IAED,+BAA+B,EAAE,CAAC,IAAa,EAAE,EAAE;QACjD,MAAM,SAAS,GAAG,aAAa,CAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC;QACtE,OAAO,wBAAwB,CAAC,SAA2D,CAAC,CAAC;IAC/F,CAAC;IAED,0BAA0B,EAAE,CAAC,IAAa,EAAE,EAAE;QAC5C,MAAM,SAAS,GAAG,aAAa,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;QACjE,OAAO,mBAAmB,CAAC,SAAsD,CAAC,CAAC;IACrF,CAAC;IAED,2BAA2B,EAAE,CAAC,IAAa,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAG,aAAa,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;QAClE,OAAO,oBAAoB,CAAC,SAAuD,CAAC,CAAC;IACvF,CAAC;IAED,qBAAqB,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAG,aAAa,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;QAC7D,OAAO,eAAe,CAAC,SAAkD,CAAC,CAAC;IAC7E,CAAC;IAED,uBAAuB,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/C,MAAM,SAAS,GAAG,aAAa,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;QAC9D,OAAO,gBAAgB,CAAC,SAAmD,CAAC,CAAC;IAC/E,CAAC;IAED,iBAAiB,EAAE,CAAC,IAAa,EAAE,EAAE;QACnC,MAAM,SAAS,GAAG,aAAa,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QACzD,OAAO,eAAe,CAAC,SAAkD,CAAC,CAAC;IAC7E,CAAC;CACO,CAAC;AAIX,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,IAAI,IAAI,YAAY,CAAC;AAC9B,CAAC;AAED,6BAA6B;AAC7B,SAAS,eAAe;IACtB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;QACE,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;SACV;KACF,CACF,CAAC;IAEF,uBAAuB;IACvB,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QAC1D,OAAO;YACL,KAAK,EAAE;gBACL,wBAAwB;gBACxB,8BAA8B;gBAC9B,yBAAyB;gBACzB,0BAA0B;gBAC1B,qBAAqB;gBACrB,sBAAsB;gBACtB,iBAAiB;aAClB;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAEjD,IAAI,CAAC;YACH,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,SAAS,CAAC,iBAAiB,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5E,CAAC;YAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;YAEnC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;qBACtC;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wBAAwB;AACxB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;IAC5C,GAAG,CAAC,IAAI,CAAC;QACP,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,iHAAiH;QAC9H,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;QAChC,QAAQ,EAAE;YACR,sCAAsC;YACtC,4BAA4B;YAC5B,yCAAyC;YACzC,kFAAkF;YAClF,gFAAgF;YAChF,2BAA2B;YAC3B,2BAA2B;SAC5B;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,kCAAkC;AAClC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,IAAa,EAAE,GAAa,EAAE,EAAE;IACrD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,MAAM,SAAS,GAAG,IAAI,kBAAkB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACtC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAErC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IAEjC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACnB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEH,yCAAyC;AACzC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACzD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,SAAmB,CAAC;IAEhD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,wCAAwC;QACxC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,eAAe;AACf,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IACpB,OAAO,CAAC,GAAG,CAAC,6DAA6D,IAAI,EAAE,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,kCAAkC,IAAI,MAAM,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,sCAAsC,IAAI,UAAU,CAAC,CAAC;AACpE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Confluence 발행 플랫폼
|
|
3
|
+
*/
|
|
4
|
+
import { PublishOptions, PublishResult } from '../types/index.js';
|
|
5
|
+
export interface ConfluenceConfig {
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
username: string;
|
|
8
|
+
apiToken: string;
|
|
9
|
+
spaceKey: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function publishToConfluence(document: string, title: string, options?: Partial<PublishOptions>): Promise<PublishResult>;
|
|
12
|
+
export declare function updateConfluencePage(pageId: string, document: string, title: string): Promise<PublishResult>;
|
|
13
|
+
//# sourceMappingURL=confluence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confluence.d.ts","sourceRoot":"","sources":["../../src/platforms/confluence.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAsFD,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAChC,OAAO,CAAC,aAAa,CAAC,CAsDxB;AAGD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,CAAC,CA6DxB"}
|