@tpitre/story-ui 2.1.5 → 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/.env.sample +82 -11
- package/README.md +130 -4
- package/dist/cli/deploy.d.ts +17 -0
- package/dist/cli/deploy.d.ts.map +1 -0
- package/dist/cli/deploy.js +696 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +55 -2
- package/dist/cli/setup.d.ts +11 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +437 -110
- package/dist/mcp-server/index.d.ts +2 -0
- package/dist/mcp-server/index.d.ts.map +1 -0
- package/dist/mcp-server/index.js +138 -6
- package/dist/mcp-server/mcp-stdio-server.d.ts +3 -0
- package/dist/mcp-server/mcp-stdio-server.d.ts.map +1 -0
- package/dist/mcp-server/mcp-stdio-server.js +638 -0
- package/dist/mcp-server/routes/claude.d.ts +3 -0
- package/dist/mcp-server/routes/claude.d.ts.map +1 -0
- package/dist/mcp-server/routes/claude.js +60 -23
- package/dist/mcp-server/routes/components.d.ts +4 -0
- package/dist/mcp-server/routes/components.d.ts.map +1 -0
- package/dist/mcp-server/routes/frameworks.d.ts +38 -0
- package/dist/mcp-server/routes/frameworks.d.ts.map +1 -0
- package/dist/mcp-server/routes/frameworks.js +183 -0
- package/dist/mcp-server/routes/generateStory.d.ts +3 -0
- package/dist/mcp-server/routes/generateStory.d.ts.map +1 -0
- package/dist/mcp-server/routes/generateStory.js +274 -115
- package/dist/mcp-server/routes/generateStoryStream.d.ts +12 -0
- package/dist/mcp-server/routes/generateStoryStream.d.ts.map +1 -0
- package/dist/mcp-server/routes/generateStoryStream.js +947 -0
- package/dist/mcp-server/routes/hybridStories.d.ts +18 -0
- package/dist/mcp-server/routes/hybridStories.d.ts.map +1 -0
- package/dist/mcp-server/routes/hybridStories.js +214 -0
- package/dist/mcp-server/routes/mcpRemote.d.ts +14 -0
- package/dist/mcp-server/routes/mcpRemote.d.ts.map +1 -0
- package/dist/mcp-server/routes/mcpRemote.js +489 -0
- package/dist/mcp-server/routes/memoryStories.d.ts +26 -0
- package/dist/mcp-server/routes/memoryStories.d.ts.map +1 -0
- package/dist/mcp-server/routes/memoryStories.js +13 -7
- package/dist/mcp-server/routes/providers.d.ts +89 -0
- package/dist/mcp-server/routes/providers.d.ts.map +1 -0
- package/dist/mcp-server/routes/providers.js +369 -0
- package/dist/mcp-server/routes/storySync.d.ts +26 -0
- package/dist/mcp-server/routes/storySync.d.ts.map +1 -0
- package/dist/mcp-server/routes/streamTypes.d.ts +110 -0
- package/dist/mcp-server/routes/streamTypes.d.ts.map +1 -0
- package/dist/mcp-server/routes/streamTypes.js +18 -0
- package/dist/mcp-server/sessionManager.d.ts +50 -0
- package/dist/mcp-server/sessionManager.d.ts.map +1 -0
- package/dist/mcp-server/sessionManager.js +125 -0
- package/dist/story-generator/componentBlacklist.d.ts +21 -0
- package/dist/story-generator/componentBlacklist.d.ts.map +1 -0
- package/dist/story-generator/componentBlacklist.js +4 -0
- package/dist/story-generator/componentDiscovery.d.ts +28 -0
- package/dist/story-generator/componentDiscovery.d.ts.map +1 -0
- package/dist/story-generator/componentRegistryGenerator.d.ts +49 -0
- package/dist/story-generator/componentRegistryGenerator.d.ts.map +1 -0
- package/dist/story-generator/componentRegistryGenerator.js +205 -0
- package/dist/story-generator/configLoader.d.ts +33 -0
- package/dist/story-generator/configLoader.d.ts.map +1 -0
- package/dist/story-generator/configLoader.js +8 -1
- package/dist/story-generator/considerationsLoader.d.ts +32 -0
- package/dist/story-generator/considerationsLoader.d.ts.map +1 -0
- package/dist/story-generator/considerationsLoader.js +2 -1
- package/dist/story-generator/documentation-sources.d.ts +28 -0
- package/dist/story-generator/documentation-sources.d.ts.map +1 -0
- package/dist/story-generator/documentationLoader.d.ts +64 -0
- package/dist/story-generator/documentationLoader.d.ts.map +1 -0
- package/dist/story-generator/documentationLoader.js +4 -3
- package/dist/story-generator/dynamicPackageDiscovery.d.ts +97 -0
- package/dist/story-generator/dynamicPackageDiscovery.d.ts.map +1 -0
- package/dist/story-generator/dynamicPackageDiscovery.js +31 -22
- package/dist/story-generator/enhancedComponentDiscovery.d.ts +125 -0
- package/dist/story-generator/enhancedComponentDiscovery.d.ts.map +1 -0
- package/dist/story-generator/enhancedComponentDiscovery.js +162 -21
- package/dist/story-generator/framework-adapters/angular-adapter.d.ts +40 -0
- package/dist/story-generator/framework-adapters/angular-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/angular-adapter.js +427 -0
- package/dist/story-generator/framework-adapters/base-adapter.d.ts +75 -0
- package/dist/story-generator/framework-adapters/base-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/base-adapter.js +147 -0
- package/dist/story-generator/framework-adapters/framework-detector.d.ts +55 -0
- package/dist/story-generator/framework-adapters/framework-detector.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/framework-detector.js +323 -0
- package/dist/story-generator/framework-adapters/index.d.ts +97 -0
- package/dist/story-generator/framework-adapters/index.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/index.js +198 -0
- package/dist/story-generator/framework-adapters/react-adapter.d.ts +40 -0
- package/dist/story-generator/framework-adapters/react-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/react-adapter.js +316 -0
- package/dist/story-generator/framework-adapters/svelte-adapter.d.ts +40 -0
- package/dist/story-generator/framework-adapters/svelte-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/svelte-adapter.js +372 -0
- package/dist/story-generator/framework-adapters/types.d.ts +182 -0
- package/dist/story-generator/framework-adapters/types.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/types.js +8 -0
- package/dist/story-generator/framework-adapters/vue-adapter.d.ts +36 -0
- package/dist/story-generator/framework-adapters/vue-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/vue-adapter.js +336 -0
- package/dist/story-generator/framework-adapters/web-components-adapter.d.ts +54 -0
- package/dist/story-generator/framework-adapters/web-components-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/web-components-adapter.js +387 -0
- package/dist/story-generator/generateStory.d.ts +7 -0
- package/dist/story-generator/generateStory.d.ts.map +1 -0
- package/dist/story-generator/gitignoreManager.d.ts +50 -0
- package/dist/story-generator/gitignoreManager.d.ts.map +1 -0
- package/dist/story-generator/gitignoreManager.js +7 -6
- package/dist/story-generator/imageProcessor.d.ts +80 -0
- package/dist/story-generator/imageProcessor.d.ts.map +1 -0
- package/dist/story-generator/imageProcessor.js +391 -0
- package/dist/story-generator/inMemoryStoryService.d.ts +89 -0
- package/dist/story-generator/inMemoryStoryService.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/base-provider.d.ts +36 -0
- package/dist/story-generator/llm-providers/base-provider.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/base-provider.js +135 -0
- package/dist/story-generator/llm-providers/claude-provider.d.ts +23 -0
- package/dist/story-generator/llm-providers/claude-provider.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/claude-provider.js +414 -0
- package/dist/story-generator/llm-providers/gemini-provider.d.ts +24 -0
- package/dist/story-generator/llm-providers/gemini-provider.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/gemini-provider.js +406 -0
- package/dist/story-generator/llm-providers/index.d.ts +63 -0
- package/dist/story-generator/llm-providers/index.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/index.js +169 -0
- package/dist/story-generator/llm-providers/openai-provider.d.ts +24 -0
- package/dist/story-generator/llm-providers/openai-provider.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/openai-provider.js +458 -0
- package/dist/story-generator/llm-providers/settings-manager.d.ts +75 -0
- package/dist/story-generator/llm-providers/settings-manager.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/settings-manager.js +173 -0
- package/dist/story-generator/llm-providers/story-llm-service.d.ts +79 -0
- package/dist/story-generator/llm-providers/story-llm-service.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/story-llm-service.js +240 -0
- package/dist/story-generator/llm-providers/types.d.ts +153 -0
- package/dist/story-generator/llm-providers/types.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/types.js +8 -0
- package/dist/story-generator/logger.d.ts +14 -0
- package/dist/story-generator/logger.d.ts.map +1 -0
- package/dist/story-generator/logger.js +119 -0
- package/dist/story-generator/postProcessStory.d.ts +6 -0
- package/dist/story-generator/postProcessStory.d.ts.map +1 -0
- package/dist/story-generator/postProcessStory.js +8 -7
- package/dist/story-generator/productionGitignoreManager.d.ts +91 -0
- package/dist/story-generator/productionGitignoreManager.d.ts.map +1 -0
- package/dist/story-generator/productionGitignoreManager.js +11 -10
- package/dist/story-generator/promptGenerator.d.ts +48 -0
- package/dist/story-generator/promptGenerator.d.ts.map +1 -0
- package/dist/story-generator/promptGenerator.js +186 -1
- package/dist/story-generator/storyHistory.d.ts +44 -0
- package/dist/story-generator/storyHistory.d.ts.map +1 -0
- package/dist/story-generator/storySync.d.ts +68 -0
- package/dist/story-generator/storySync.d.ts.map +1 -0
- package/dist/story-generator/storyTracker.d.ts +48 -0
- package/dist/story-generator/storyTracker.d.ts.map +1 -0
- package/dist/story-generator/storyTracker.js +2 -1
- package/dist/story-generator/storyValidator.d.ts +6 -0
- package/dist/story-generator/storyValidator.d.ts.map +1 -0
- package/dist/story-generator/universalDesignSystemAdapter.d.ts +68 -0
- package/dist/story-generator/universalDesignSystemAdapter.d.ts.map +1 -0
- package/dist/story-generator/universalDesignSystemAdapter.js +141 -3
- package/dist/story-generator/urlRedirectService.d.ts +21 -0
- package/dist/story-generator/urlRedirectService.d.ts.map +1 -0
- package/dist/story-generator/urlRedirectService.js +140 -0
- package/dist/story-generator/validateStory.d.ts +19 -0
- package/dist/story-generator/validateStory.d.ts.map +1 -0
- package/dist/story-generator/validateStory.js +6 -2
- package/dist/story-generator/visionPrompts.d.ts +88 -0
- package/dist/story-generator/visionPrompts.d.ts.map +1 -0
- package/dist/story-generator/visionPrompts.js +462 -0
- package/dist/story-ui.config.d.ts +78 -0
- package/dist/story-ui.config.d.ts.map +1 -0
- package/dist/templates/StoryUI/StoryUIPanel.d.ts +4 -0
- package/dist/templates/StoryUI/StoryUIPanel.d.ts.map +1 -0
- package/dist/templates/StoryUI/StoryUIPanel.js +1874 -0
- package/dist/templates/StoryUI/StoryUIPanel.stories.d.ts +18 -0
- package/dist/templates/StoryUI/StoryUIPanel.stories.d.ts.map +1 -0
- package/dist/templates/StoryUI/StoryUIPanel.stories.js +37 -0
- package/dist/templates/StoryUI/index.d.ts +3 -0
- package/dist/templates/StoryUI/index.d.ts.map +1 -0
- package/dist/templates/StoryUI/index.js +2 -0
- package/package.json +35 -4
- package/templates/StoryUI/StoryUIPanel.tsx +1973 -388
- package/templates/StoryUI/index.tsx +1 -1
- package/templates/StoryUI/manager.tsx +264 -0
- package/templates/mcp-config-claude.json +11 -0
- package/templates/mcp-example.md +76 -0
- package/templates/production-app/.env.example +11 -0
- package/templates/production-app/index.html +66 -0
- package/templates/production-app/package.json +30 -0
- package/templates/production-app/public/favicon.svg +5 -0
- package/templates/production-app/src/App.tsx +1157 -0
- package/templates/production-app/src/LivePreviewRenderer.tsx +420 -0
- package/templates/production-app/src/componentRegistry.ts +315 -0
- package/templates/production-app/src/considerations.ts +16 -0
- package/templates/production-app/src/index.css +284 -0
- package/templates/production-app/src/main.tsx +25 -0
- package/templates/production-app/tsconfig.json +32 -0
- package/templates/production-app/tsconfig.node.json +11 -0
- package/templates/production-app/vite.config.ts +83 -0
- package/templates/react-import-rule.json +2 -2
- package/dist/index.js +0 -12
- package/dist/story-ui.config.loader.js +0 -205
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Request, Response } from 'express';
|
|
2
|
+
/**
|
|
3
|
+
* Get all stories from both memory and file system
|
|
4
|
+
*/
|
|
5
|
+
export declare function getAllStories(req: Request, res: Response): void;
|
|
6
|
+
/**
|
|
7
|
+
* Get a specific story by ID from memory or file system
|
|
8
|
+
*/
|
|
9
|
+
export declare function getStoryById(req: Request, res: Response): Response<any, Record<string, any>> | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Get story content by ID
|
|
12
|
+
*/
|
|
13
|
+
export declare function getStoryContent(req: Request, res: Response): Response<any, Record<string, any>> | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Delete a story by ID
|
|
16
|
+
*/
|
|
17
|
+
export declare function deleteStory(req: Request, res: Response): Response<any, Record<string, any>> | undefined;
|
|
18
|
+
//# sourceMappingURL=hybridStories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hybridStories.d.ts","sourceRoot":"","sources":["../../../mcp-server/routes/hybridStories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAO5C;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,QA6DxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,kDA0DvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,kDA0C1D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,kDA6CtD"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { getInMemoryStoryService } from '../../story-generator/inMemoryStoryService.js';
|
|
4
|
+
import { loadUserConfig } from '../../story-generator/configLoader.js';
|
|
5
|
+
import { setupProductionGitignore } from '../../story-generator/productionGitignoreManager.js';
|
|
6
|
+
/**
|
|
7
|
+
* Get all stories from both memory and file system
|
|
8
|
+
*/
|
|
9
|
+
export function getAllStories(req, res) {
|
|
10
|
+
try {
|
|
11
|
+
const config = loadUserConfig();
|
|
12
|
+
const gitignoreManager = setupProductionGitignore(config);
|
|
13
|
+
const storyService = getInMemoryStoryService(config);
|
|
14
|
+
let allStories = [];
|
|
15
|
+
// Get stories from memory
|
|
16
|
+
const memoryStories = storyService.getStoryMetadata();
|
|
17
|
+
allStories = [...memoryStories];
|
|
18
|
+
// In development mode, also check file system
|
|
19
|
+
if (!gitignoreManager.isProductionMode() && config.generatedStoriesPath) {
|
|
20
|
+
try {
|
|
21
|
+
if (fs.existsSync(config.generatedStoriesPath)) {
|
|
22
|
+
const files = fs.readdirSync(config.generatedStoriesPath);
|
|
23
|
+
const fileStories = files
|
|
24
|
+
.filter(file => file.endsWith('.stories.tsx'))
|
|
25
|
+
.map(file => {
|
|
26
|
+
const fileName = file;
|
|
27
|
+
const hash = file.match(/-([a-f0-9]{8})\.stories\.tsx$/)?.[1] || '';
|
|
28
|
+
const storyId = hash ? `story-${hash}` : file.replace('.stories.tsx', '');
|
|
29
|
+
// Try to read the file to get the title
|
|
30
|
+
let title = file.replace('.stories.tsx', '').replace(/-/g, ' ');
|
|
31
|
+
try {
|
|
32
|
+
const filePath = path.join(config.generatedStoriesPath, file);
|
|
33
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
34
|
+
const titleMatch = content.match(/title:\s*['"]([^'"]+)['"]/);
|
|
35
|
+
if (titleMatch) {
|
|
36
|
+
title = titleMatch[1].replace('Generated/', '');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (e) {
|
|
40
|
+
// Use filename as fallback
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
id: storyId,
|
|
44
|
+
fileName,
|
|
45
|
+
title,
|
|
46
|
+
createdAt: fs.statSync(path.join(config.generatedStoriesPath, file)).birthtime,
|
|
47
|
+
storage: 'file-system'
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
// Merge, avoiding duplicates
|
|
51
|
+
const memoryIds = new Set(memoryStories.map(s => s.id));
|
|
52
|
+
const uniqueFileStories = fileStories.filter(s => !memoryIds.has(s.id));
|
|
53
|
+
allStories = [...allStories, ...uniqueFileStories];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
console.error('Error reading file system stories:', error);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
res.json(allStories);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
console.error('Error in getAllStories:', error);
|
|
64
|
+
res.status(500).json({ error: 'Failed to retrieve stories' });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get a specific story by ID from memory or file system
|
|
69
|
+
*/
|
|
70
|
+
export function getStoryById(req, res) {
|
|
71
|
+
try {
|
|
72
|
+
const { id } = req.params;
|
|
73
|
+
const config = loadUserConfig();
|
|
74
|
+
const gitignoreManager = setupProductionGitignore(config);
|
|
75
|
+
const storyService = getInMemoryStoryService(config);
|
|
76
|
+
// First try memory
|
|
77
|
+
const memoryStory = storyService.getStory(id);
|
|
78
|
+
if (memoryStory) {
|
|
79
|
+
return res.json(memoryStory);
|
|
80
|
+
}
|
|
81
|
+
// In development, try file system
|
|
82
|
+
if (!gitignoreManager.isProductionMode() && config.generatedStoriesPath) {
|
|
83
|
+
// Try to find by story ID pattern
|
|
84
|
+
const files = fs.readdirSync(config.generatedStoriesPath);
|
|
85
|
+
// Extract hash from story ID (e.g., "story-abc123" -> "abc123")
|
|
86
|
+
const hashMatch = id.match(/^story-([a-f0-9]{8})$/);
|
|
87
|
+
const hash = hashMatch ? hashMatch[1] : null;
|
|
88
|
+
// Find file by hash or exact match
|
|
89
|
+
const matchingFile = files.find(file => {
|
|
90
|
+
if (hash && file.includes(`-${hash}.stories.tsx`))
|
|
91
|
+
return true;
|
|
92
|
+
if (file === `${id}.stories.tsx`)
|
|
93
|
+
return true;
|
|
94
|
+
if (file === id)
|
|
95
|
+
return true;
|
|
96
|
+
return false;
|
|
97
|
+
});
|
|
98
|
+
if (matchingFile) {
|
|
99
|
+
const filePath = path.join(config.generatedStoriesPath, matchingFile);
|
|
100
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
101
|
+
const stats = fs.statSync(filePath);
|
|
102
|
+
// Extract title from content
|
|
103
|
+
let title = matchingFile.replace('.stories.tsx', '').replace(/-/g, ' ');
|
|
104
|
+
const titleMatch = content.match(/title:\s*['"]([^'"]+)['"]/);
|
|
105
|
+
if (titleMatch) {
|
|
106
|
+
title = titleMatch[1].replace('Generated/', '');
|
|
107
|
+
}
|
|
108
|
+
return res.json({
|
|
109
|
+
id,
|
|
110
|
+
fileName: matchingFile,
|
|
111
|
+
title,
|
|
112
|
+
content,
|
|
113
|
+
createdAt: stats.birthtime,
|
|
114
|
+
storage: 'file-system'
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
res.status(404).json({ error: 'Story not found' });
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
console.error('Error in getStoryById:', error);
|
|
122
|
+
res.status(500).json({ error: 'Failed to retrieve story' });
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get story content by ID
|
|
127
|
+
*/
|
|
128
|
+
export function getStoryContent(req, res) {
|
|
129
|
+
try {
|
|
130
|
+
const { id } = req.params;
|
|
131
|
+
const config = loadUserConfig();
|
|
132
|
+
const gitignoreManager = setupProductionGitignore(config);
|
|
133
|
+
const storyService = getInMemoryStoryService(config);
|
|
134
|
+
// First try memory
|
|
135
|
+
const content = storyService.getStoryContent(id);
|
|
136
|
+
if (content) {
|
|
137
|
+
res.setHeader('Content-Type', 'text/plain');
|
|
138
|
+
return res.send(content);
|
|
139
|
+
}
|
|
140
|
+
// In development, try file system
|
|
141
|
+
if (!gitignoreManager.isProductionMode() && config.generatedStoriesPath) {
|
|
142
|
+
const files = fs.readdirSync(config.generatedStoriesPath);
|
|
143
|
+
// Extract hash from story ID
|
|
144
|
+
const hashMatch = id.match(/^story-([a-f0-9]{8})$/);
|
|
145
|
+
const hash = hashMatch ? hashMatch[1] : null;
|
|
146
|
+
const matchingFile = files.find(file => {
|
|
147
|
+
if (hash && file.includes(`-${hash}.stories.tsx`))
|
|
148
|
+
return true;
|
|
149
|
+
if (file === `${id}.stories.tsx`)
|
|
150
|
+
return true;
|
|
151
|
+
if (file === id)
|
|
152
|
+
return true;
|
|
153
|
+
return false;
|
|
154
|
+
});
|
|
155
|
+
if (matchingFile) {
|
|
156
|
+
const filePath = path.join(config.generatedStoriesPath, matchingFile);
|
|
157
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
158
|
+
res.setHeader('Content-Type', 'text/plain');
|
|
159
|
+
return res.send(content);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
res.status(404).json({ error: 'Story content not found' });
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
console.error('Error in getStoryContent:', error);
|
|
166
|
+
res.status(500).json({ error: 'Failed to retrieve story content' });
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Delete a story by ID
|
|
171
|
+
*/
|
|
172
|
+
export function deleteStory(req, res) {
|
|
173
|
+
try {
|
|
174
|
+
const { id } = req.params;
|
|
175
|
+
const config = loadUserConfig();
|
|
176
|
+
const gitignoreManager = setupProductionGitignore(config);
|
|
177
|
+
const storyService = getInMemoryStoryService(config);
|
|
178
|
+
console.log(`🗑️ Attempting to delete story: ${id}`);
|
|
179
|
+
// First try memory
|
|
180
|
+
const memoryDeleted = storyService.deleteStory(id);
|
|
181
|
+
if (memoryDeleted) {
|
|
182
|
+
console.log(`✅ Deleted story from memory: ${id}`);
|
|
183
|
+
return res.json({ success: true, message: 'Story deleted from memory' });
|
|
184
|
+
}
|
|
185
|
+
// In development, try file system
|
|
186
|
+
if (!gitignoreManager.isProductionMode() && config.generatedStoriesPath) {
|
|
187
|
+
const files = fs.readdirSync(config.generatedStoriesPath);
|
|
188
|
+
// Extract hash from story ID
|
|
189
|
+
const hashMatch = id.match(/^story-([a-f0-9]{8})$/);
|
|
190
|
+
const hash = hashMatch ? hashMatch[1] : null;
|
|
191
|
+
const matchingFile = files.find(file => {
|
|
192
|
+
if (hash && file.includes(`-${hash}.stories.tsx`))
|
|
193
|
+
return true;
|
|
194
|
+
if (file === `${id}.stories.tsx`)
|
|
195
|
+
return true;
|
|
196
|
+
if (file === id)
|
|
197
|
+
return true;
|
|
198
|
+
return false;
|
|
199
|
+
});
|
|
200
|
+
if (matchingFile) {
|
|
201
|
+
const filePath = path.join(config.generatedStoriesPath, matchingFile);
|
|
202
|
+
fs.unlinkSync(filePath);
|
|
203
|
+
console.log(`✅ Deleted story file: ${filePath}`);
|
|
204
|
+
return res.json({ success: true, message: 'Story deleted from file system' });
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
console.log(`❌ Story not found: ${id}`);
|
|
208
|
+
res.status(404).json({ error: 'Story not found' });
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
console.error('Error in deleteStory:', error);
|
|
212
|
+
res.status(500).json({ error: 'Failed to delete story' });
|
|
213
|
+
}
|
|
214
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Remote HTTP Transport Routes
|
|
3
|
+
*
|
|
4
|
+
* Implements the SSE transport from the MCP SDK to enable
|
|
5
|
+
* remote connections from Claude Desktop and other MCP clients.
|
|
6
|
+
*
|
|
7
|
+
* This allows Story UI to be accessed from Claude Desktop without requiring
|
|
8
|
+
* a local process - useful for cloud deployments and shared Storybook instances.
|
|
9
|
+
*
|
|
10
|
+
* Uses the SSE transport available in MCP SDK v0.5.0
|
|
11
|
+
*/
|
|
12
|
+
export declare const router: import("express-serve-static-core").Router;
|
|
13
|
+
export default router;
|
|
14
|
+
//# sourceMappingURL=mcpRemote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpRemote.d.ts","sourceRoot":"","sources":["../../../mcp-server/routes/mcpRemote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgCH,eAAO,MAAM,MAAM,4CAAW,CAAC;AAygB/B,eAAe,MAAM,CAAC"}
|