@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
package/dist/mcp-server/index.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
23
|
-
|
|
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
|
-
|
|
31
|
-
|
|
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',
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-stdio-server.d.ts","sourceRoot":"","sources":["../../mcp-server/mcp-stdio-server.ts"],"names":[],"mappings":""}
|