@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.
Files changed (203) hide show
  1. package/.env.sample +82 -11
  2. package/README.md +130 -4
  3. package/dist/cli/deploy.d.ts +17 -0
  4. package/dist/cli/deploy.d.ts.map +1 -0
  5. package/dist/cli/deploy.js +696 -0
  6. package/dist/cli/index.d.ts +3 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +55 -2
  9. package/dist/cli/setup.d.ts +11 -0
  10. package/dist/cli/setup.d.ts.map +1 -0
  11. package/dist/cli/setup.js +437 -110
  12. package/dist/mcp-server/index.d.ts +2 -0
  13. package/dist/mcp-server/index.d.ts.map +1 -0
  14. package/dist/mcp-server/index.js +138 -6
  15. package/dist/mcp-server/mcp-stdio-server.d.ts +3 -0
  16. package/dist/mcp-server/mcp-stdio-server.d.ts.map +1 -0
  17. package/dist/mcp-server/mcp-stdio-server.js +638 -0
  18. package/dist/mcp-server/routes/claude.d.ts +3 -0
  19. package/dist/mcp-server/routes/claude.d.ts.map +1 -0
  20. package/dist/mcp-server/routes/claude.js +60 -23
  21. package/dist/mcp-server/routes/components.d.ts +4 -0
  22. package/dist/mcp-server/routes/components.d.ts.map +1 -0
  23. package/dist/mcp-server/routes/frameworks.d.ts +38 -0
  24. package/dist/mcp-server/routes/frameworks.d.ts.map +1 -0
  25. package/dist/mcp-server/routes/frameworks.js +183 -0
  26. package/dist/mcp-server/routes/generateStory.d.ts +3 -0
  27. package/dist/mcp-server/routes/generateStory.d.ts.map +1 -0
  28. package/dist/mcp-server/routes/generateStory.js +274 -115
  29. package/dist/mcp-server/routes/generateStoryStream.d.ts +12 -0
  30. package/dist/mcp-server/routes/generateStoryStream.d.ts.map +1 -0
  31. package/dist/mcp-server/routes/generateStoryStream.js +947 -0
  32. package/dist/mcp-server/routes/hybridStories.d.ts +18 -0
  33. package/dist/mcp-server/routes/hybridStories.d.ts.map +1 -0
  34. package/dist/mcp-server/routes/hybridStories.js +214 -0
  35. package/dist/mcp-server/routes/mcpRemote.d.ts +14 -0
  36. package/dist/mcp-server/routes/mcpRemote.d.ts.map +1 -0
  37. package/dist/mcp-server/routes/mcpRemote.js +489 -0
  38. package/dist/mcp-server/routes/memoryStories.d.ts +26 -0
  39. package/dist/mcp-server/routes/memoryStories.d.ts.map +1 -0
  40. package/dist/mcp-server/routes/memoryStories.js +13 -7
  41. package/dist/mcp-server/routes/providers.d.ts +89 -0
  42. package/dist/mcp-server/routes/providers.d.ts.map +1 -0
  43. package/dist/mcp-server/routes/providers.js +369 -0
  44. package/dist/mcp-server/routes/storySync.d.ts +26 -0
  45. package/dist/mcp-server/routes/storySync.d.ts.map +1 -0
  46. package/dist/mcp-server/routes/streamTypes.d.ts +110 -0
  47. package/dist/mcp-server/routes/streamTypes.d.ts.map +1 -0
  48. package/dist/mcp-server/routes/streamTypes.js +18 -0
  49. package/dist/mcp-server/sessionManager.d.ts +50 -0
  50. package/dist/mcp-server/sessionManager.d.ts.map +1 -0
  51. package/dist/mcp-server/sessionManager.js +125 -0
  52. package/dist/story-generator/componentBlacklist.d.ts +21 -0
  53. package/dist/story-generator/componentBlacklist.d.ts.map +1 -0
  54. package/dist/story-generator/componentBlacklist.js +4 -0
  55. package/dist/story-generator/componentDiscovery.d.ts +28 -0
  56. package/dist/story-generator/componentDiscovery.d.ts.map +1 -0
  57. package/dist/story-generator/componentRegistryGenerator.d.ts +49 -0
  58. package/dist/story-generator/componentRegistryGenerator.d.ts.map +1 -0
  59. package/dist/story-generator/componentRegistryGenerator.js +205 -0
  60. package/dist/story-generator/configLoader.d.ts +33 -0
  61. package/dist/story-generator/configLoader.d.ts.map +1 -0
  62. package/dist/story-generator/configLoader.js +8 -1
  63. package/dist/story-generator/considerationsLoader.d.ts +32 -0
  64. package/dist/story-generator/considerationsLoader.d.ts.map +1 -0
  65. package/dist/story-generator/considerationsLoader.js +2 -1
  66. package/dist/story-generator/documentation-sources.d.ts +28 -0
  67. package/dist/story-generator/documentation-sources.d.ts.map +1 -0
  68. package/dist/story-generator/documentationLoader.d.ts +64 -0
  69. package/dist/story-generator/documentationLoader.d.ts.map +1 -0
  70. package/dist/story-generator/documentationLoader.js +4 -3
  71. package/dist/story-generator/dynamicPackageDiscovery.d.ts +97 -0
  72. package/dist/story-generator/dynamicPackageDiscovery.d.ts.map +1 -0
  73. package/dist/story-generator/dynamicPackageDiscovery.js +31 -22
  74. package/dist/story-generator/enhancedComponentDiscovery.d.ts +125 -0
  75. package/dist/story-generator/enhancedComponentDiscovery.d.ts.map +1 -0
  76. package/dist/story-generator/enhancedComponentDiscovery.js +162 -21
  77. package/dist/story-generator/framework-adapters/angular-adapter.d.ts +40 -0
  78. package/dist/story-generator/framework-adapters/angular-adapter.d.ts.map +1 -0
  79. package/dist/story-generator/framework-adapters/angular-adapter.js +427 -0
  80. package/dist/story-generator/framework-adapters/base-adapter.d.ts +75 -0
  81. package/dist/story-generator/framework-adapters/base-adapter.d.ts.map +1 -0
  82. package/dist/story-generator/framework-adapters/base-adapter.js +147 -0
  83. package/dist/story-generator/framework-adapters/framework-detector.d.ts +55 -0
  84. package/dist/story-generator/framework-adapters/framework-detector.d.ts.map +1 -0
  85. package/dist/story-generator/framework-adapters/framework-detector.js +323 -0
  86. package/dist/story-generator/framework-adapters/index.d.ts +97 -0
  87. package/dist/story-generator/framework-adapters/index.d.ts.map +1 -0
  88. package/dist/story-generator/framework-adapters/index.js +198 -0
  89. package/dist/story-generator/framework-adapters/react-adapter.d.ts +40 -0
  90. package/dist/story-generator/framework-adapters/react-adapter.d.ts.map +1 -0
  91. package/dist/story-generator/framework-adapters/react-adapter.js +316 -0
  92. package/dist/story-generator/framework-adapters/svelte-adapter.d.ts +40 -0
  93. package/dist/story-generator/framework-adapters/svelte-adapter.d.ts.map +1 -0
  94. package/dist/story-generator/framework-adapters/svelte-adapter.js +372 -0
  95. package/dist/story-generator/framework-adapters/types.d.ts +182 -0
  96. package/dist/story-generator/framework-adapters/types.d.ts.map +1 -0
  97. package/dist/story-generator/framework-adapters/types.js +8 -0
  98. package/dist/story-generator/framework-adapters/vue-adapter.d.ts +36 -0
  99. package/dist/story-generator/framework-adapters/vue-adapter.d.ts.map +1 -0
  100. package/dist/story-generator/framework-adapters/vue-adapter.js +336 -0
  101. package/dist/story-generator/framework-adapters/web-components-adapter.d.ts +54 -0
  102. package/dist/story-generator/framework-adapters/web-components-adapter.d.ts.map +1 -0
  103. package/dist/story-generator/framework-adapters/web-components-adapter.js +387 -0
  104. package/dist/story-generator/generateStory.d.ts +7 -0
  105. package/dist/story-generator/generateStory.d.ts.map +1 -0
  106. package/dist/story-generator/gitignoreManager.d.ts +50 -0
  107. package/dist/story-generator/gitignoreManager.d.ts.map +1 -0
  108. package/dist/story-generator/gitignoreManager.js +7 -6
  109. package/dist/story-generator/imageProcessor.d.ts +80 -0
  110. package/dist/story-generator/imageProcessor.d.ts.map +1 -0
  111. package/dist/story-generator/imageProcessor.js +391 -0
  112. package/dist/story-generator/inMemoryStoryService.d.ts +89 -0
  113. package/dist/story-generator/inMemoryStoryService.d.ts.map +1 -0
  114. package/dist/story-generator/llm-providers/base-provider.d.ts +36 -0
  115. package/dist/story-generator/llm-providers/base-provider.d.ts.map +1 -0
  116. package/dist/story-generator/llm-providers/base-provider.js +135 -0
  117. package/dist/story-generator/llm-providers/claude-provider.d.ts +23 -0
  118. package/dist/story-generator/llm-providers/claude-provider.d.ts.map +1 -0
  119. package/dist/story-generator/llm-providers/claude-provider.js +414 -0
  120. package/dist/story-generator/llm-providers/gemini-provider.d.ts +24 -0
  121. package/dist/story-generator/llm-providers/gemini-provider.d.ts.map +1 -0
  122. package/dist/story-generator/llm-providers/gemini-provider.js +406 -0
  123. package/dist/story-generator/llm-providers/index.d.ts +63 -0
  124. package/dist/story-generator/llm-providers/index.d.ts.map +1 -0
  125. package/dist/story-generator/llm-providers/index.js +169 -0
  126. package/dist/story-generator/llm-providers/openai-provider.d.ts +24 -0
  127. package/dist/story-generator/llm-providers/openai-provider.d.ts.map +1 -0
  128. package/dist/story-generator/llm-providers/openai-provider.js +458 -0
  129. package/dist/story-generator/llm-providers/settings-manager.d.ts +75 -0
  130. package/dist/story-generator/llm-providers/settings-manager.d.ts.map +1 -0
  131. package/dist/story-generator/llm-providers/settings-manager.js +173 -0
  132. package/dist/story-generator/llm-providers/story-llm-service.d.ts +79 -0
  133. package/dist/story-generator/llm-providers/story-llm-service.d.ts.map +1 -0
  134. package/dist/story-generator/llm-providers/story-llm-service.js +240 -0
  135. package/dist/story-generator/llm-providers/types.d.ts +153 -0
  136. package/dist/story-generator/llm-providers/types.d.ts.map +1 -0
  137. package/dist/story-generator/llm-providers/types.js +8 -0
  138. package/dist/story-generator/logger.d.ts +14 -0
  139. package/dist/story-generator/logger.d.ts.map +1 -0
  140. package/dist/story-generator/logger.js +119 -0
  141. package/dist/story-generator/postProcessStory.d.ts +6 -0
  142. package/dist/story-generator/postProcessStory.d.ts.map +1 -0
  143. package/dist/story-generator/postProcessStory.js +8 -7
  144. package/dist/story-generator/productionGitignoreManager.d.ts +91 -0
  145. package/dist/story-generator/productionGitignoreManager.d.ts.map +1 -0
  146. package/dist/story-generator/productionGitignoreManager.js +11 -10
  147. package/dist/story-generator/promptGenerator.d.ts +48 -0
  148. package/dist/story-generator/promptGenerator.d.ts.map +1 -0
  149. package/dist/story-generator/promptGenerator.js +186 -1
  150. package/dist/story-generator/storyHistory.d.ts +44 -0
  151. package/dist/story-generator/storyHistory.d.ts.map +1 -0
  152. package/dist/story-generator/storySync.d.ts +68 -0
  153. package/dist/story-generator/storySync.d.ts.map +1 -0
  154. package/dist/story-generator/storyTracker.d.ts +48 -0
  155. package/dist/story-generator/storyTracker.d.ts.map +1 -0
  156. package/dist/story-generator/storyTracker.js +2 -1
  157. package/dist/story-generator/storyValidator.d.ts +6 -0
  158. package/dist/story-generator/storyValidator.d.ts.map +1 -0
  159. package/dist/story-generator/universalDesignSystemAdapter.d.ts +68 -0
  160. package/dist/story-generator/universalDesignSystemAdapter.d.ts.map +1 -0
  161. package/dist/story-generator/universalDesignSystemAdapter.js +141 -3
  162. package/dist/story-generator/urlRedirectService.d.ts +21 -0
  163. package/dist/story-generator/urlRedirectService.d.ts.map +1 -0
  164. package/dist/story-generator/urlRedirectService.js +140 -0
  165. package/dist/story-generator/validateStory.d.ts +19 -0
  166. package/dist/story-generator/validateStory.d.ts.map +1 -0
  167. package/dist/story-generator/validateStory.js +6 -2
  168. package/dist/story-generator/visionPrompts.d.ts +88 -0
  169. package/dist/story-generator/visionPrompts.d.ts.map +1 -0
  170. package/dist/story-generator/visionPrompts.js +462 -0
  171. package/dist/story-ui.config.d.ts +78 -0
  172. package/dist/story-ui.config.d.ts.map +1 -0
  173. package/dist/templates/StoryUI/StoryUIPanel.d.ts +4 -0
  174. package/dist/templates/StoryUI/StoryUIPanel.d.ts.map +1 -0
  175. package/dist/templates/StoryUI/StoryUIPanel.js +1874 -0
  176. package/dist/templates/StoryUI/StoryUIPanel.stories.d.ts +18 -0
  177. package/dist/templates/StoryUI/StoryUIPanel.stories.d.ts.map +1 -0
  178. package/dist/templates/StoryUI/StoryUIPanel.stories.js +37 -0
  179. package/dist/templates/StoryUI/index.d.ts +3 -0
  180. package/dist/templates/StoryUI/index.d.ts.map +1 -0
  181. package/dist/templates/StoryUI/index.js +2 -0
  182. package/package.json +35 -4
  183. package/templates/StoryUI/StoryUIPanel.tsx +1973 -388
  184. package/templates/StoryUI/index.tsx +1 -1
  185. package/templates/StoryUI/manager.tsx +264 -0
  186. package/templates/mcp-config-claude.json +11 -0
  187. package/templates/mcp-example.md +76 -0
  188. package/templates/production-app/.env.example +11 -0
  189. package/templates/production-app/index.html +66 -0
  190. package/templates/production-app/package.json +30 -0
  191. package/templates/production-app/public/favicon.svg +5 -0
  192. package/templates/production-app/src/App.tsx +1157 -0
  193. package/templates/production-app/src/LivePreviewRenderer.tsx +420 -0
  194. package/templates/production-app/src/componentRegistry.ts +315 -0
  195. package/templates/production-app/src/considerations.ts +16 -0
  196. package/templates/production-app/src/index.css +284 -0
  197. package/templates/production-app/src/main.tsx +25 -0
  198. package/templates/production-app/tsconfig.json +32 -0
  199. package/templates/production-app/tsconfig.node.json +11 -0
  200. package/templates/production-app/vite.config.ts +83 -0
  201. package/templates/react-import-rule.json +2 -2
  202. package/dist/index.js +0 -12
  203. 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"}