agentstudio 0.1.0 → 0.1.2

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 (162) hide show
  1. package/.cc-sessions/ppt-editor/session_1756253549429_uau1hm6lh.json +665 -0
  2. package/.cc-sessions/ppt-editor/session_1756257240855_v0wa26mde.json +394 -0
  3. package/README.md +39 -41
  4. package/dist/bin/agentstudio.js +4 -27
  5. package/dist/bin/agentstudio.js.map +1 -1
  6. package/dist/index.d.ts +1 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +121 -52
  9. package/dist/index.js.map +1 -1
  10. package/dist/routes/agents.d.ts.map +1 -1
  11. package/dist/routes/agents.js +18 -19
  12. package/dist/routes/agents.js.map +1 -1
  13. package/dist/routes/commands.d.ts +4 -0
  14. package/dist/routes/commands.d.ts.map +1 -0
  15. package/dist/routes/commands.js +395 -0
  16. package/dist/routes/commands.js.map +1 -0
  17. package/dist/routes/projects.d.ts +4 -0
  18. package/dist/routes/projects.d.ts.map +1 -0
  19. package/dist/routes/projects.js +528 -0
  20. package/dist/routes/projects.js.map +1 -0
  21. package/dist/routes/sessions.d.ts +4 -0
  22. package/dist/routes/sessions.d.ts.map +1 -0
  23. package/dist/routes/sessions.js +733 -0
  24. package/dist/routes/sessions.js.map +1 -0
  25. package/dist/routes/settings.d.ts +4 -0
  26. package/dist/routes/settings.d.ts.map +1 -0
  27. package/dist/routes/settings.js +658 -0
  28. package/dist/routes/settings.js.map +1 -0
  29. package/dist/routes/subagents.d.ts +4 -0
  30. package/dist/routes/subagents.d.ts.map +1 -0
  31. package/dist/routes/subagents.js +326 -0
  32. package/dist/routes/subagents.js.map +1 -0
  33. package/docs/chat-clean-1.svg +1 -0
  34. package/docs/chat-clean.md +60 -0
  35. package/docs/chat-comprehensive-1.svg +1 -0
  36. package/docs/chat-comprehensive.md +166 -0
  37. package/docs/chat_api_sequence_diagram.md +58 -0
  38. package/docs/command-detection-logic.md +306 -0
  39. package/docs/command-detection-sequence.md +186 -0
  40. package/frontend/dist/assets/AgentsPage-Dqb_aqAA.js +1 -0
  41. package/frontend/dist/assets/ChatPage-BvQmXfcP.css +1 -0
  42. package/frontend/dist/assets/ChatPage-L8Paywyc.js +91 -0
  43. package/frontend/dist/assets/CommandForm-DLl7EIMS.js +7 -0
  44. package/frontend/dist/assets/CommandsPage-Bzavq0Ec.js +1 -0
  45. package/frontend/dist/assets/DashboardPage-B3o4AYFT.js +15 -0
  46. package/frontend/dist/assets/FileBrowser-DL3ayaqb.js +1 -0
  47. package/frontend/dist/assets/GeneralSettingsPage-CBN_de-V.js +1 -0
  48. package/frontend/dist/assets/LandingPage-Dl4ioKos.js +1 -0
  49. package/frontend/dist/assets/LoginPage-4QqRdiSi.js +12 -0
  50. package/frontend/dist/assets/McpPage-CY3tYiqj.js +39 -0
  51. package/frontend/dist/assets/MemorySettingsPage-DGxrok5K.js +1 -0
  52. package/frontend/dist/assets/ProjectSelector-hgmGYVFh.js +1 -0
  53. package/frontend/dist/assets/ProjectsPage-D399IM0c.js +14 -0
  54. package/frontend/dist/assets/SettingsLayout-CL_K-lzJ.js +1 -0
  55. package/frontend/dist/assets/SubagentForm-DXtTTIKg.js +7 -0
  56. package/frontend/dist/assets/SubagentsPage-Chbhj8p2.js +1 -0
  57. package/frontend/dist/assets/ToastTestPage-DT4wuN5C.js +1 -0
  58. package/frontend/dist/assets/UnifiedToolSelector-CsM9qBvs.js +1 -0
  59. package/frontend/dist/assets/VersionSettingsPage-74Q-LVgA.js +5 -0
  60. package/frontend/dist/assets/agents-ClAzIJTw.js +1 -0
  61. package/frontend/dist/assets/agents-DwCY2K8p.css +1 -0
  62. package/frontend/dist/assets/authFetch-BATQyPG5.js +1 -0
  63. package/frontend/dist/assets/data-structures-DLJedtzx.js +27 -0
  64. package/frontend/dist/assets/dateFormat-CXa8VnEC.js +1 -0
  65. package/frontend/dist/assets/index-B9YHa7XT.css +1 -0
  66. package/frontend/dist/assets/index-B_CTNvca.js +268 -0
  67. package/frontend/dist/assets/monaco-editor-C7Z4sOhS.js +19 -0
  68. package/frontend/dist/assets/syntax-highlighting-YWvMU4Hm.js +24 -0
  69. package/frontend/dist/assets/tabManager-DV8urRBM.js +30 -0
  70. package/frontend/dist/assets/table-D6q1rytw.js +1 -0
  71. package/frontend/dist/assets/tools-C4EPanYi.js +1 -0
  72. package/frontend/dist/assets/ui-components-Cw21Epuw.js +481 -0
  73. package/frontend/dist/assets/useAgents-DwnOE1_k.js +2 -0
  74. package/frontend/dist/assets/useClaudeVersions-CQdGnCqv.js +1 -0
  75. package/frontend/dist/assets/useCommands-CCVaurbt.js +1 -0
  76. package/frontend/dist/cc-studio.png +0 -0
  77. package/frontend/dist/index.html +68 -84
  78. package/frontend/dist/vite.svg +1 -0
  79. package/package.json +26 -27
  80. package/scripts/README.md +76 -0
  81. package/scripts/fix-project-names.js +113 -0
  82. package/scripts/migrate-projects.js +159 -0
  83. package/shared/index.d.ts +6 -0
  84. package/shared/index.d.ts.map +1 -0
  85. package/shared/index.js +7 -0
  86. package/{dist/types/index.d.ts → shared/types/agents.d.ts} +1 -2
  87. package/shared/types/agents.d.ts.map +1 -0
  88. package/{dist/types/index.js → shared/types/agents.js} +3 -8
  89. package/shared/types/claude-history.d.ts +61 -0
  90. package/shared/types/claude-history.d.ts.map +1 -0
  91. package/shared/types/claude-history.js +2 -0
  92. package/shared/types/claude-versions.d.ts +40 -0
  93. package/shared/types/claude-versions.d.ts.map +1 -0
  94. package/shared/types/claude-versions.js +1 -0
  95. package/shared/types/commands.d.ts +48 -0
  96. package/shared/types/commands.d.ts.map +1 -0
  97. package/shared/types/commands.js +19 -0
  98. package/shared/types/projects.d.ts +35 -0
  99. package/shared/types/projects.d.ts.map +1 -0
  100. package/shared/types/projects.js +2 -0
  101. package/shared/types/subagents.d.ts +26 -0
  102. package/shared/types/subagents.d.ts.map +1 -0
  103. package/shared/types/subagents.js +1 -0
  104. package/shared/utils/agentStorage.d.ts +27 -0
  105. package/shared/utils/agentStorage.d.ts.map +1 -0
  106. package/shared/utils/agentStorage.js +392 -0
  107. package/shared/utils/claudeVersionStorage.d.ts +16 -0
  108. package/shared/utils/claudeVersionStorage.d.ts.map +1 -0
  109. package/shared/utils/claudeVersionStorage.js +230 -0
  110. package/shared/utils/projectMetadataStorage.d.ts +94 -0
  111. package/shared/utils/projectMetadataStorage.d.ts.map +1 -0
  112. package/shared/utils/projectMetadataStorage.js +422 -0
  113. package/shared/utils/toolMapping.d.ts +56 -0
  114. package/shared/utils/toolMapping.d.ts.map +1 -0
  115. package/shared/utils/toolMapping.js +71 -0
  116. package/src/bin/agentstudio.ts +90 -121
  117. package/src/index.ts +139 -57
  118. package/src/routes/agents.ts +28 -29
  119. package/src/routes/{commands.ts.bak → commands.ts} +1 -1
  120. package/src/routes/{projects.ts.bak → projects.ts} +3 -3
  121. package/src/routes/{sessions.ts.bak → sessions.ts} +2 -2
  122. package/src/routes/{settings.ts.bak → settings.ts} +11 -11
  123. package/src/routes/{subagents.ts.bak → subagents.ts} +1 -1
  124. package/tsconfig.json +13 -12
  125. package/dist/types/claude-history.d.ts +0 -48
  126. package/dist/types/claude-history.d.ts.map +0 -1
  127. package/dist/types/claude-history.js +0 -2
  128. package/dist/types/claude-history.js.map +0 -1
  129. package/dist/types/claude-versions.d.ts +0 -31
  130. package/dist/types/claude-versions.d.ts.map +0 -1
  131. package/dist/types/claude-versions.js +0 -2
  132. package/dist/types/claude-versions.js.map +0 -1
  133. package/dist/types/commands.d.ts +0 -32
  134. package/dist/types/commands.d.ts.map +0 -1
  135. package/dist/types/commands.js +0 -2
  136. package/dist/types/commands.js.map +0 -1
  137. package/dist/types/index.d.ts.map +0 -1
  138. package/dist/types/index.js.map +0 -1
  139. package/dist/types/subagents.d.ts +0 -88
  140. package/dist/types/subagents.d.ts.map +0 -1
  141. package/dist/types/subagents.js +0 -2
  142. package/dist/types/subagents.js.map +0 -1
  143. package/dist/utils/agentStorage.d.ts +0 -19
  144. package/dist/utils/agentStorage.d.ts.map +0 -1
  145. package/dist/utils/agentStorage.js +0 -110
  146. package/dist/utils/agentStorage.js.map +0 -1
  147. package/dist/utils/claudeVersionStorage.d.ts +0 -33
  148. package/dist/utils/claudeVersionStorage.d.ts.map +0 -1
  149. package/dist/utils/claudeVersionStorage.js +0 -168
  150. package/dist/utils/claudeVersionStorage.js.map +0 -1
  151. package/dist/utils/projectMetadataStorage.d.ts +0 -21
  152. package/dist/utils/projectMetadataStorage.d.ts.map +0 -1
  153. package/dist/utils/projectMetadataStorage.js +0 -68
  154. package/dist/utils/projectMetadataStorage.js.map +0 -1
  155. package/src/types/claude-history.ts +0 -50
  156. package/src/types/claude-versions.ts +0 -33
  157. package/src/types/commands.ts +0 -35
  158. package/src/types/index.ts +0 -248
  159. package/src/types/subagents.ts +0 -106
  160. package/src/utils/agentStorage.ts +0 -126
  161. package/src/utils/claudeVersionStorage.ts +0 -199
  162. package/src/utils/projectMetadataStorage.ts +0 -86
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # AgentStudio
2
2
 
3
- Claude-powered AgentStudio - AI-powered presentation editor with Claude integration
3
+ AI-powered presentation editor with Claude integration
4
4
 
5
5
  ## Installation
6
6
 
@@ -8,31 +8,15 @@ Claude-powered AgentStudio - AI-powered presentation editor with Claude integrat
8
8
  npm install -g agentstudio
9
9
  ```
10
10
 
11
- ## Usage
12
-
13
- ### Start the full application
14
- ```bash
15
- agentstudio start
16
- ```
11
+ ## Quick Start
17
12
 
18
- ### Start backend only
19
- ```bash
20
- agentstudio backend
21
- ```
13
+ ### Initialize Configuration
22
14
 
23
- ### Start frontend development server (requires full source)
24
- ```bash
25
- agentstudio frontend
26
- ```
27
-
28
- ### Initialize configuration
29
15
  ```bash
30
16
  agentstudio init
31
17
  ```
32
18
 
33
- ## Configuration
34
-
35
- Create a `.env` file in your working directory:
19
+ This creates a `.env` file with default configuration. Edit it to add your API keys:
36
20
 
37
21
  ```env
38
22
  # AI Provider (choose one)
@@ -50,36 +34,50 @@ SLIDES_DIR=./slides
50
34
  CORS_ORIGINS=https://your-frontend.vercel.app,https://custom-domain.com
51
35
  ```
52
36
 
53
- ## Features
37
+ ### Start AgentStudio
38
+
39
+ ```bash
40
+ agentstudio start
41
+ ```
42
+
43
+ This starts both the backend API server and serves the frontend application.
54
44
 
55
- - 🤖 **AI-Powered Agents**: Built-in agents for presentations, code, and documents
56
- - 🎨 **Real-time Editing**: Live collaboration with AI agents
57
- - 📊 **Project Management**: Organize and manage multiple projects
58
- - 🔧 **Custom Tools**: Extensible tool system for agent interactions
59
- - 🌐 **Web Interface**: Modern React-based user interface
60
- - 🚀 **Easy Deployment**: Simple CLI for quick setup and deployment
45
+ ## Usage
61
46
 
62
- ## API Endpoints
47
+ ### Start Backend Only
63
48
 
64
- - `GET /api/health` - Health check
65
- - `GET /api/agents` - List available agents
66
- - `POST /api/agents/:id/chat` - Chat with an agent
67
- - `GET /api/projects` - List projects
68
- - `POST /api/projects` - Create a project
69
- - `GET /api/sessions` - List chat sessions
70
- - `POST /api/sessions` - Create a new session
49
+ ```bash
50
+ agentstudio backend
51
+ ```
71
52
 
72
- ## Development
53
+ ### Start with Custom Ports
73
54
 
74
- For full development environment with hot reloading, clone the full repository:
55
+ ```bash
56
+ agentstudio start --port 8080 --frontend-port 3000
57
+ ```
58
+
59
+ ### Development Mode (No Authentication)
75
60
 
76
61
  ```bash
77
- git clone https://github.com/jeffkit/agentstudio.git
78
- cd agentstudio
79
- npm install
80
- npm run dev
62
+ agentstudio start --no-auth
81
63
  ```
82
64
 
65
+ ## API Endpoints
66
+
67
+ - `GET /api/health` - Health check
68
+ - `POST /api/agents/chat` - AI chat with agents
69
+ - `GET /api/slides/:index` - Get slide content
70
+ - `PUT /api/slides/:index` - Update slide content
71
+
72
+ ## Environment Variables
73
+
74
+ - `PORT` - Backend server port (default: 4936)
75
+ - `NODE_ENV` - Environment (development/production)
76
+ - `SLIDES_DIR` - Directory for slide files
77
+ - `OPENAI_API_KEY` - OpenAI API key
78
+ - `ANTHROPIC_API_KEY` - Anthropic API key
79
+ - `CORS_ORIGINS` - Allowed CORS origins
80
+
83
81
  ## License
84
82
 
85
83
  MIT
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { program } from 'commander';
3
3
  import { startServer } from '../index.js';
4
- import { spawn } from 'child_process';
5
4
  import path from 'path';
6
5
  import { fileURLToPath } from 'url';
7
6
  const __filename = fileURLToPath(import.meta.url);
@@ -35,10 +34,12 @@ program
35
34
  process.env.NO_AUTH = 'true';
36
35
  }
37
36
  try {
37
+ // Start backend server
38
38
  await startServer();
39
39
  console.log(`✅ Backend running on http://${options.host}:${options.port}`);
40
- console.log(`✅ Frontend running on http://${options.host}:${options.frontendPort}`);
41
- console.log('📖 Open your browser to http://localhost:3000 to start using AgentStudio');
40
+ // Serve frontend static files
41
+ console.log(`✅ Frontend available at http://${options.host}:${options.port}`);
42
+ console.log('📖 Open your browser to start using AgentStudio');
42
43
  }
43
44
  catch (error) {
44
45
  console.error('❌ Failed to start AgentStudio:', error);
@@ -76,30 +77,6 @@ program
76
77
  process.exit(1);
77
78
  }
78
79
  });
79
- // Start frontend only (development mode)
80
- program
81
- .command('frontend')
82
- .description('Start frontend development server only')
83
- .option('-p, --port <port>', 'frontend server port', '3000')
84
- .option('-h, --host <host>', 'server host', 'localhost')
85
- .action((options) => {
86
- console.log('🚀 Starting AgentStudio Frontend...');
87
- const frontendDir = path.join(__dirname, '../../frontend');
88
- const frontendProcess = spawn('npm', ['run', 'dev'], {
89
- cwd: frontendDir,
90
- stdio: 'inherit',
91
- shell: true,
92
- env: {
93
- ...process.env,
94
- PORT: options.port,
95
- HOST: options.host
96
- }
97
- });
98
- frontendProcess.on('error', (error) => {
99
- console.error('❌ Failed to start frontend:', error);
100
- process.exit(1);
101
- });
102
- });
103
80
  // Initialize configuration
104
81
  program
105
82
  .command('init')
@@ -1 +1 @@
1
- {"version":3,"file":"agentstudio.js","sourceRoot":"","sources":["../../src/bin/agentstudio.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agentstudio.js","sourceRoot":"","sources":["../../src/bin/agentstudio.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare function startServer(): Promise<void>;
1
+ export declare function startServer(): Promise<unknown>;
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoFA,wBAAgB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAU3C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsKA,wBAAgB,WAAW,qBAU1B"}
package/dist/index.js CHANGED
@@ -2,85 +2,154 @@ import express from 'express';
2
2
  import cors from 'cors';
3
3
  import helmet from 'helmet';
4
4
  import dotenv from 'dotenv';
5
- import path from 'path';
6
5
  import { fileURLToPath } from 'url';
7
- // Import routes
8
- import agentsRouter from './routes/agents.js';
9
- import authRouter from './routes/auth.js';
6
+ import { dirname, join } from 'path';
10
7
  import filesRouter from './routes/files.js';
8
+ import agentsRouter from './routes/agents.js';
11
9
  import mcpRouter from './routes/mcp.js';
10
+ import sessionsRouter from './routes/sessions.js';
12
11
  import mediaRouter from './routes/media.js';
13
- import slidesRouter from './routes/slides.js';
12
+ import settingsRouter from './routes/settings.js';
13
+ import commandsRouter from './routes/commands.js';
14
+ import subagentsRouter from './routes/subagents.js';
15
+ import projectsRouter from './routes/projects.js';
16
+ import authRouter from './routes/auth.js';
17
+ import { authMiddleware } from './middleware/auth.js';
18
+ dotenv.config();
14
19
  const __filename = fileURLToPath(import.meta.url);
15
- const __dirname = path.dirname(__filename);
16
- // Load environment variables
17
- const envPath = process.env.ENV_PATH || '.env';
18
- dotenv.config({ path: envPath });
20
+ const __dirname = dirname(__filename);
19
21
  const app = express();
20
22
  const PORT = process.env.PORT || 4936;
21
- const HOST = process.env.HOST || 'localhost';
22
- // Security middleware
23
+ // Middleware
23
24
  app.use(helmet({
24
- crossOriginEmbedderPolicy: false,
25
25
  contentSecurityPolicy: {
26
26
  directives: {
27
27
  defaultSrc: ["'self'"],
28
28
  scriptSrc: ["'self'", "'unsafe-inline'"],
29
- styleSrc: ["'self'", "'unsafe-inline'"],
30
- imgSrc: ["'self'", "data:", "blob:"],
29
+ styleSrc: ["'self'", "'unsafe-inline'", "https://fonts.googleapis.com", "https://cdn.jsdelivr.net"],
30
+ fontSrc: ["'self'", "https://fonts.gstatic.com", "https://cdn.jsdelivr.net"],
31
+ imgSrc: ["'self'", "data:", "https:"],
31
32
  connectSrc: ["'self'", "ws:", "wss:"],
32
- },
33
- },
33
+ frameAncestors: ["'self'", "http://localhost:3000", "https://localhost:3000", "http://localhost:3001"] // Allow iframe embedding
34
+ }
35
+ }
34
36
  }));
35
- // CORS configuration
36
- const corsOrigins = process.env.CORS_ORIGINS ?
37
- process.env.CORS_ORIGINS.split(',').map(origin => origin.trim()) :
38
- [
37
+ // Configure CORS origins
38
+ const getAllowedOrigins = () => {
39
+ const defaultOrigins = [
39
40
  'http://localhost:3000',
40
41
  'http://127.0.0.1:3000',
41
- 'https://*.vercel.app'
42
+ 'http://localhost:3001',
43
+ 'https://localhost:3000',
44
+ 'https://localhost:3001'
42
45
  ];
46
+ // Add custom origins from environment variable
47
+ const customOrigins = process.env.CORS_ORIGINS ?
48
+ process.env.CORS_ORIGINS.split(',').map(origin => origin.trim()) : [];
49
+ return [...defaultOrigins, ...customOrigins];
50
+ };
43
51
  app.use(cors({
44
- origin: corsOrigins,
45
- credentials: true
52
+ origin: (origin, callback) => {
53
+ const allowedOrigins = getAllowedOrigins();
54
+ // Allow requests with no origin (like mobile apps or curl requests)
55
+ if (!origin)
56
+ return callback(null, true);
57
+ // Check if the origin is allowed
58
+ if (allowedOrigins.includes(origin)) {
59
+ return callback(null, true);
60
+ }
61
+ // Allow Vercel preview URLs (*.vercel.app)
62
+ if (origin.endsWith('.vercel.app')) {
63
+ return callback(null, true);
64
+ }
65
+ // Allow agentstudio.cc and its subdomains (*.agentstudio.cc) - hardcoded
66
+ if (origin === 'https://agentstudio.cc' || origin.endsWith('.agentstudio.cc')) {
67
+ return callback(null, true);
68
+ }
69
+ // Allow custom domains from environment variable (CORS_ALLOWED_DOMAINS)
70
+ const customDomains = process.env.CORS_ALLOWED_DOMAINS ?
71
+ process.env.CORS_ALLOWED_DOMAINS.split(',').map(domain => domain.trim()) : [];
72
+ for (const domain of customDomains) {
73
+ // Match exact domain (https://example.com)
74
+ if (origin === `https://${domain}` || origin === `http://${domain}`) {
75
+ return callback(null, true);
76
+ }
77
+ // Match subdomains (https://*.example.com)
78
+ if (origin.endsWith(`.${domain}`)) {
79
+ return callback(null, true);
80
+ }
81
+ }
82
+ // Allow any localhost with any port for development
83
+ if (origin.match(/^https?:\/\/localhost(:\d+)?$/)) {
84
+ return callback(null, true);
85
+ }
86
+ // Allow 127.0.0.1 with any port for development
87
+ if (origin.match(/^https?:\/\/127\.0\.0\.1(:\d+)?$/)) {
88
+ return callback(null, true);
89
+ }
90
+ const msg = `The CORS policy for this site does not allow access from the specified Origin: ${origin}`;
91
+ return callback(new Error(msg), false);
92
+ },
93
+ credentials: true,
94
+ methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'PATCH'],
95
+ allowedHeaders: ['Content-Type', 'Authorization', 'Cache-Control', 'X-Requested-With'],
96
+ exposedHeaders: ['Content-Range', 'X-Content-Range']
46
97
  }));
47
- // Body parsing middleware
48
- app.use(express.json({ limit: '50mb' }));
49
- app.use(express.urlencoded({ extended: true, limit: '50mb' }));
50
- // Serve static files
51
- const frontendDistPath = path.join(__dirname, '../frontend/dist');
52
- app.use(express.static(frontendDistPath));
53
- // API routes
54
- app.use('/api/agents', agentsRouter);
98
+ app.use(express.json({ limit: '10mb' }));
99
+ app.use(express.urlencoded({ extended: true, limit: '10mb' }));
100
+ // Static files - serve slides directory
101
+ const slidesDir = join(__dirname, '../..', process.env.SLIDES_DIR || 'slides');
102
+ app.use('/slides', express.static(slidesDir));
103
+ // Serve frontend static files in production
104
+ const frontendDir = join(__dirname, '../frontend/dist');
105
+ if (process.env.NODE_ENV === 'production') {
106
+ app.use(express.static(frontendDir));
107
+ // Handle SPA routing - serve index.html for all other routes
108
+ app.get('*', (req, res) => {
109
+ res.sendFile(join(frontendDir, 'index.html'));
110
+ });
111
+ }
112
+ // Routes - Public routes
55
113
  app.use('/api/auth', authRouter);
56
- app.use('/api/files', filesRouter);
57
- app.use('/api/mcp', mcpRouter);
58
- app.use('/api/media', mediaRouter);
59
- app.use('/api/slides', slidesRouter);
60
- // Health check endpoint
114
+ // Protected routes - Require authentication
115
+ app.use('/api/files', authMiddleware, filesRouter);
116
+ app.use('/api/agents', authMiddleware, agentsRouter);
117
+ app.use('/api/mcp', authMiddleware, mcpRouter);
118
+ app.use('/api/sessions', authMiddleware, sessionsRouter);
119
+ app.use('/api/settings', authMiddleware, settingsRouter);
120
+ app.use('/api/commands', authMiddleware, commandsRouter);
121
+ app.use('/api/subagents', authMiddleware, subagentsRouter);
122
+ app.use('/api/projects', authMiddleware, projectsRouter);
123
+ app.use('/media', authMiddleware, mediaRouter);
124
+ // Health check
61
125
  app.get('/api/health', (req, res) => {
62
- res.json({
63
- status: 'ok',
64
- timestamp: new Date().toISOString(),
65
- version: '0.1.0'
66
- });
126
+ res.json({ status: 'ok', timestamp: new Date().toISOString() });
67
127
  });
68
- // Serve frontend for all other routes (SPA routing)
69
- app.get('*', (req, res) => {
70
- res.sendFile(path.join(frontendDistPath, 'index.html'));
128
+ // Error handling
129
+ app.use((err, req, res, next) => {
130
+ console.error('Error:', err);
131
+ res.status(500).json({
132
+ error: 'Internal server error',
133
+ message: process.env.NODE_ENV === 'development' ? err.message : 'Something went wrong'
134
+ });
71
135
  });
136
+ // 404 handler - only for API routes in production
137
+ if (process.env.NODE_ENV !== 'production') {
138
+ app.use('*', (req, res) => {
139
+ res.status(404).json({ error: 'Route not found' });
140
+ });
141
+ }
72
142
  export function startServer() {
73
- return new Promise((resolve) => {
74
- const port = parseInt(process.env.PORT || PORT.toString());
75
- const host = process.env.HOST || HOST;
76
- const server = app.listen(port, host, () => {
77
- console.log(`🚀 AgentStudio running on http://${host}:${port}`);
78
- console.log('📖 Open your browser to start using AgentStudio');
79
- resolve();
143
+ return new Promise((resolve, reject) => {
144
+ const server = app.listen(PORT, () => {
145
+ console.log(`AI PPT Editor backend running on http://localhost:${PORT}`);
146
+ console.log(`Serving slides from: ${slidesDir}`);
147
+ resolve(server);
80
148
  });
149
+ server.on('error', reject);
81
150
  });
82
151
  }
83
- // Only start server if this file is run directly
152
+ // Start server if this file is run directly
84
153
  if (import.meta.url === `file://${process.argv[1]}`) {
85
154
  startServer().catch(console.error);
86
155
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAe9B,QAAA,MAAM,MAAM,EAAE,OAAO,CAAC,MAAyB,CAAC;AAq2BhD,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAe9B,QAAA,MAAM,MAAM,EAAE,OAAO,CAAC,MAAyB,CAAC;AAo2BhD,eAAe,MAAM,CAAC"}
@@ -5,10 +5,10 @@ import * as fs from 'fs';
5
5
  import * as os from 'os';
6
6
  import { exec } from 'child_process';
7
7
  import { promisify } from 'util';
8
- import { AgentStorage } from '../utils/agentStorage.js';
9
- import { ProjectMetadataStorage } from '../utils/projectMetadataStorage.js';
8
+ import { AgentStorage } from '@agentstudio/shared/utils/agentStorage';
9
+ import { ProjectMetadataStorage } from '@agentstudio/shared/utils/projectMetadataStorage';
10
10
  import { sessionManager } from '../services/sessionManager.js';
11
- import { getAllVersions, getDefaultVersionId } from '../utils/claudeVersionStorage.js';
11
+ import { getAllVersions, getDefaultVersionId } from '@agentstudio/shared/utils/claudeVersionStorage';
12
12
  const router = express.Router();
13
13
  const execAsync = promisify(exec);
14
14
  // Storage instances
@@ -22,6 +22,7 @@ const CreateAgentSchema = z.object({
22
22
  systemPrompt: z.string().min(1),
23
23
  maxTurns: z.number().min(1).max(100).optional().default(25),
24
24
  permissionMode: z.enum(['default', 'acceptEdits', 'bypassPermissions', 'plan']).optional().default('acceptEdits'),
25
+ model: z.string().min(1).optional().default('claude-3-5-sonnet-20241022'),
25
26
  allowedTools: z.array(z.object({
26
27
  name: z.string(),
27
28
  enabled: z.boolean(),
@@ -112,10 +113,10 @@ router.post('/sessions/:sessionId/interrupt', async (req, res) => {
112
113
  }
113
114
  });
114
115
  // Get all agents
115
- router.get('/', async (req, res) => {
116
+ router.get('/', (req, res) => {
116
117
  try {
117
118
  const { enabled, type } = req.query;
118
- let agents = await globalAgentStorage.getAllAgents();
119
+ let agents = globalAgentStorage.getAllAgents();
119
120
  // Filter by enabled status
120
121
  if (enabled !== undefined) {
121
122
  const isEnabled = enabled === 'true';
@@ -133,10 +134,10 @@ router.get('/', async (req, res) => {
133
134
  }
134
135
  });
135
136
  // Get specific agent
136
- router.get('/:agentId', async (req, res) => {
137
+ router.get('/:agentId', (req, res) => {
137
138
  try {
138
139
  const { agentId } = req.params;
139
- const agent = await globalAgentStorage.getAgent(agentId);
140
+ const agent = globalAgentStorage.getAgent(agentId);
140
141
  if (!agent) {
141
142
  return res.status(404).json({ error: 'Agent not found' });
142
143
  }
@@ -148,7 +149,7 @@ router.get('/:agentId', async (req, res) => {
148
149
  }
149
150
  });
150
151
  // Create new agent
151
- router.post('/', async (req, res) => {
152
+ router.post('/', (req, res) => {
152
153
  try {
153
154
  const validation = CreateAgentSchema.safeParse(req.body);
154
155
  if (!validation.success) {
@@ -156,13 +157,12 @@ router.post('/', async (req, res) => {
156
157
  }
157
158
  const agentData = validation.data;
158
159
  // Check if agent ID already exists
159
- const existingAgent = await globalAgentStorage.getAgent(agentData.id);
160
+ const existingAgent = globalAgentStorage.getAgent(agentData.id);
160
161
  if (existingAgent) {
161
162
  return res.status(409).json({ error: 'Agent with this ID already exists' });
162
163
  }
163
- const agent = await globalAgentStorage.createAgent({
164
+ const agent = globalAgentStorage.createAgent({
164
165
  version: '1.0.0',
165
- model: 'claude-3-5-sonnet-20241022',
166
166
  ...agentData
167
167
  });
168
168
  res.json({ agent, message: 'Agent created successfully' });
@@ -173,14 +173,14 @@ router.post('/', async (req, res) => {
173
173
  }
174
174
  });
175
175
  // Update agent
176
- router.put('/:agentId', async (req, res) => {
176
+ router.put('/:agentId', (req, res) => {
177
177
  try {
178
178
  const { agentId } = req.params;
179
179
  const validation = UpdateAgentSchema.safeParse(req.body);
180
180
  if (!validation.success) {
181
181
  return res.status(400).json({ error: 'Invalid agent data', details: validation.error });
182
182
  }
183
- const existingAgent = await globalAgentStorage.getAgent(agentId);
183
+ const existingAgent = globalAgentStorage.getAgent(agentId);
184
184
  if (!existingAgent) {
185
185
  return res.status(404).json({ error: 'Agent not found' });
186
186
  }
@@ -190,7 +190,7 @@ router.put('/:agentId', async (req, res) => {
190
190
  id: agentId, // Ensure ID doesn't change
191
191
  updatedAt: new Date().toISOString()
192
192
  };
193
- await globalAgentStorage.saveAgent(updatedAgent);
193
+ globalAgentStorage.saveAgent(updatedAgent);
194
194
  res.json({ agent: updatedAgent, message: 'Agent updated successfully' });
195
195
  }
196
196
  catch (error) {
@@ -199,14 +199,13 @@ router.put('/:agentId', async (req, res) => {
199
199
  }
200
200
  });
201
201
  // Delete agent
202
- router.delete('/:agentId', async (req, res) => {
202
+ router.delete('/:agentId', (req, res) => {
203
203
  try {
204
204
  const { agentId } = req.params;
205
- const existingAgent = await globalAgentStorage.getAgent(agentId);
206
- if (!existingAgent) {
205
+ const deleted = globalAgentStorage.deleteAgent(agentId);
206
+ if (!deleted) {
207
207
  return res.status(404).json({ error: 'Agent not found' });
208
208
  }
209
- await globalAgentStorage.deleteAgent(agentId);
210
209
  res.json({ success: true, message: 'Agent deleted successfully' });
211
210
  }
212
211
  catch (error) {
@@ -619,7 +618,7 @@ router.post('/chat', async (req, res) => {
619
618
  }
620
619
  const { message, images, agentId, sessionId, projectPath, mcpTools, permissionMode, model, claudeVersion } = validation.data;
621
620
  // 获取 agent 配置
622
- const agent = await globalAgentStorage.getAgent(agentId);
621
+ const agent = globalAgentStorage.getAgent(agentId);
623
622
  if (!agent) {
624
623
  return res.status(404).json({ error: 'Agent not found' });
625
624
  }