@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
@@ -12,23 +12,78 @@ import cors from 'cors';
12
12
  import { getComponents, getProps } from './routes/components.js';
13
13
  import { claudeProxy } from './routes/claude.js';
14
14
  import { generateStoryFromPrompt } from './routes/generateStory.js';
15
- import { getStoriesMetadata, getStoryById, getStoryContent, deleteStory, clearAllStories, getMemoryStats } from './routes/memoryStories.js';
15
+ import { generateStoryFromPromptStream } from './routes/generateStoryStream.js';
16
+ import { clearAllStories, getMemoryStats } from './routes/memoryStories.js';
17
+ import { getAllStories, getStoryById, getStoryContent, deleteStory } from './routes/hybridStories.js';
16
18
  import { getSyncedStories, deleteSyncedStory, clearAllSyncedStories, syncChatHistory, validateChatSession, getSyncedStoryById } from './routes/storySync.js';
17
19
  import { setupProductionGitignore } from '../story-generator/productionGitignoreManager.js';
18
20
  import { getInMemoryStoryService } from '../story-generator/inMemoryStoryService.js';
19
21
  import { loadUserConfig } from '../story-generator/configLoader.js';
22
+ import { loadConsiderations, considerationsToPrompt } from '../story-generator/considerationsLoader.js';
23
+ import { DocumentationLoader } from '../story-generator/documentationLoader.js';
20
24
  import fs from 'fs';
25
+ import { UrlRedirectService } from '../story-generator/urlRedirectService.js';
26
+ import { getProviders, getModels, configureProviderRoute, validateApiKey, setDefaultProvider, setModel, getUISettings, applyUISettings, getSettingsConfig } from './routes/providers.js';
27
+ import { listFrameworks, detectCurrentFramework, getFrameworkDetails, validateStoryForFramework, postProcessStoryForFramework, } from './routes/frameworks.js';
28
+ import mcpRemoteRouter from './routes/mcpRemote.js';
21
29
  const app = express();
22
- app.use(cors());
23
- app.use(express.json());
30
+ // CORS configuration
31
+ // - Allow all origins for /story-ui/* routes (public API for production Storybooks)
32
+ // - Restrict to localhost + configured origins for other routes
33
+ const corsOptions = {
34
+ origin: (origin, callback) => {
35
+ // Allow requests with no origin (like mobile apps or curl)
36
+ if (!origin)
37
+ return callback(null, true);
38
+ // Allow localhost on any port (development)
39
+ const localhostPattern = /^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?$/;
40
+ if (localhostPattern.test(origin)) {
41
+ return callback(null, true);
42
+ }
43
+ // Allow Cloudflare Pages domains (*.pages.dev)
44
+ const cloudflarePattern = /^https:\/\/[a-z0-9-]+\.pages\.dev$/;
45
+ if (cloudflarePattern.test(origin)) {
46
+ return callback(null, true);
47
+ }
48
+ // Allow custom origins from environment
49
+ const allowedOrigins = process.env.STORY_UI_ALLOWED_ORIGINS?.split(',') || [];
50
+ if (allowedOrigins.includes(origin)) {
51
+ return callback(null, true);
52
+ }
53
+ // For production, allow any origin to access /story-ui/* endpoints
54
+ // These are public read-only endpoints for accessing generated stories
55
+ callback(null, true);
56
+ },
57
+ credentials: true,
58
+ };
59
+ app.use(cors(corsOptions));
60
+ app.use(express.json({ limit: '10mb' })); // Increased limit for file uploads
24
61
  // Component discovery routes
25
62
  app.get('/mcp/components', getComponents);
26
63
  app.get('/mcp/props', getProps);
27
64
  // AI generation routes
28
65
  app.post('/mcp/claude', claudeProxy);
29
66
  app.post('/mcp/generate-story', generateStoryFromPrompt);
30
- // In-memory story management routes (production)
31
- app.get('/mcp/stories', getStoriesMetadata);
67
+ app.post('/mcp/generate-story-stream', generateStoryFromPromptStream);
68
+ // LLM Provider management routes
69
+ app.get('/mcp/providers', getProviders);
70
+ app.get('/mcp/providers/models', getModels);
71
+ app.post('/mcp/providers/configure', configureProviderRoute);
72
+ app.post('/mcp/providers/validate', validateApiKey);
73
+ app.post('/mcp/providers/default', setDefaultProvider);
74
+ app.post('/mcp/providers/model', setModel);
75
+ // UI Settings routes (hybrid model selection for non-technical users)
76
+ app.get('/mcp/providers/settings', getUISettings);
77
+ app.post('/mcp/providers/settings', applyUISettings);
78
+ app.get('/mcp/providers/config', getSettingsConfig);
79
+ // Framework detection and adapter routes
80
+ app.get('/mcp/frameworks', listFrameworks);
81
+ app.get('/mcp/frameworks/detect', detectCurrentFramework);
82
+ app.get('/mcp/frameworks/:type', getFrameworkDetails);
83
+ app.post('/mcp/frameworks/validate', validateStoryForFramework);
84
+ app.post('/mcp/frameworks/post-process', postProcessStoryForFramework);
85
+ // Hybrid story management routes (works in both dev and production)
86
+ app.get('/mcp/stories', getAllStories);
32
87
  app.get('/mcp/stories/:id', getStoryById);
33
88
  app.get('/mcp/stories/:id/content', getStoryContent);
34
89
  app.delete('/mcp/stories/:id', deleteStory);
@@ -42,16 +97,77 @@ app.delete('/mcp/sync/stories', clearAllSyncedStories);
42
97
  app.get('/mcp/sync/chat-history', syncChatHistory);
43
98
  app.get('/mcp/sync/validate/:id', validateChatSession);
44
99
  // Proxy routes for frontend compatibility (maps /story-ui/ to /mcp/)
45
- app.get('/story-ui/stories', getStoriesMetadata);
100
+ app.get('/story-ui/stories', getAllStories);
46
101
  app.get('/story-ui/stories/:id', getStoryById);
47
102
  app.get('/story-ui/stories/:id/content', getStoryContent);
48
103
  app.delete('/story-ui/stories/:id', deleteStory);
49
104
  app.delete('/story-ui/stories', clearAllStories);
50
105
  app.post('/story-ui/generate', generateStoryFromPrompt);
106
+ app.post('/story-ui/generate-stream', generateStoryFromPromptStream);
51
107
  app.post('/story-ui/claude', claudeProxy);
52
108
  app.get('/story-ui/components', getComponents);
53
109
  app.get('/story-ui/props', getProps);
54
110
  app.get('/story-ui/memory-stats', getMemoryStats);
111
+ // Design system considerations endpoint - serves considerations for environment parity
112
+ app.get('/story-ui/considerations', async (req, res) => {
113
+ try {
114
+ const projectRoot = process.cwd();
115
+ // First try directory-based documentation (story-ui-docs/)
116
+ const docLoader = new DocumentationLoader(projectRoot);
117
+ if (docLoader.hasDocumentation()) {
118
+ const docs = await docLoader.loadDocumentation();
119
+ // Use the formatForPrompt method to properly format all documentation
120
+ const considerationsText = docLoader.formatForPrompt(docs);
121
+ return res.json({
122
+ hasConsiderations: considerationsText.length > 0,
123
+ source: 'story-ui-docs',
124
+ considerations: considerationsText
125
+ });
126
+ }
127
+ // Fall back to legacy single-file considerations
128
+ const considerations = loadConsiderations(config.considerationsPath);
129
+ if (considerations) {
130
+ const considerationsText = considerationsToPrompt(considerations);
131
+ return res.json({
132
+ hasConsiderations: true,
133
+ source: 'story-ui-considerations',
134
+ considerations: considerationsText
135
+ });
136
+ }
137
+ // No considerations found
138
+ return res.json({
139
+ hasConsiderations: false,
140
+ source: null,
141
+ considerations: ''
142
+ });
143
+ }
144
+ catch (error) {
145
+ console.error('Error loading considerations:', error);
146
+ return res.json({
147
+ hasConsiderations: false,
148
+ source: null,
149
+ considerations: '',
150
+ error: error instanceof Error ? error.message : 'Unknown error'
151
+ });
152
+ }
153
+ });
154
+ // Provider management proxy routes
155
+ app.get('/story-ui/providers', getProviders);
156
+ app.get('/story-ui/providers/models', getModels);
157
+ app.post('/story-ui/providers/configure', configureProviderRoute);
158
+ app.post('/story-ui/providers/validate', validateApiKey);
159
+ app.post('/story-ui/providers/default', setDefaultProvider);
160
+ app.post('/story-ui/providers/model', setModel);
161
+ // UI Settings proxy routes (for non-technical users)
162
+ app.get('/story-ui/providers/settings', getUISettings);
163
+ app.post('/story-ui/providers/settings', applyUISettings);
164
+ app.get('/story-ui/providers/config', getSettingsConfig);
165
+ // Framework management proxy routes
166
+ app.get('/story-ui/frameworks', listFrameworks);
167
+ app.get('/story-ui/frameworks/detect', detectCurrentFramework);
168
+ app.get('/story-ui/frameworks/:type', getFrameworkDetails);
169
+ app.post('/story-ui/frameworks/validate', validateStoryForFramework);
170
+ app.post('/story-ui/frameworks/post-process', postProcessStoryForFramework);
55
171
  // Legacy delete route for backwards compatibility
56
172
  app.post('/story-ui/delete', async (req, res) => {
57
173
  try {
@@ -107,10 +223,26 @@ app.delete('/story-ui/sync/stories/:id', deleteSyncedStory);
107
223
  app.delete('/story-ui/sync/stories', clearAllSyncedStories);
108
224
  app.get('/story-ui/sync/chat-history', syncChatHistory);
109
225
  app.get('/story-ui/sync/validate/:id', validateChatSession);
226
+ // MCP Remote HTTP transport routes (for Claude Desktop remote connections)
227
+ // Provides Streamable HTTP and legacy SSE endpoints for remote MCP access
228
+ app.use('/mcp-remote', mcpRemoteRouter);
229
+ app.use('/story-ui/mcp-remote', mcpRemoteRouter); // Also available at story-ui prefix
230
+ // Redirect service endpoint
231
+ app.get('/mcp/redirects.js', (req, res) => {
232
+ res.set('Content-Type', 'application/javascript');
233
+ res.send(redirectService.getRedirectScript());
234
+ });
235
+ // Also serve at story-ui path for compatibility
236
+ app.get('/story-ui/redirects.js', (req, res) => {
237
+ res.set('Content-Type', 'application/javascript');
238
+ res.send(redirectService.getRedirectScript());
239
+ });
110
240
  // Set up production-ready gitignore and directory structure on startup
111
241
  const config = loadUserConfig();
112
242
  const gitignoreManager = setupProductionGitignore(config);
113
243
  const storyService = getInMemoryStoryService(config);
244
+ // Initialize URL redirect service
245
+ const redirectService = new UrlRedirectService(process.cwd());
114
246
  const PORT = parseInt(process.env.PORT || '4001', 10);
115
247
  // Start server
116
248
  app.listen(PORT, () => {
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=mcp-stdio-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-stdio-server.d.ts","sourceRoot":"","sources":["../../mcp-server/mcp-stdio-server.ts"],"names":[],"mappings":""}