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.
- package/.cc-sessions/ppt-editor/session_1756253549429_uau1hm6lh.json +665 -0
- package/.cc-sessions/ppt-editor/session_1756257240855_v0wa26mde.json +394 -0
- package/README.md +39 -41
- package/dist/bin/agentstudio.js +4 -27
- package/dist/bin/agentstudio.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +121 -52
- package/dist/index.js.map +1 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +18 -19
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/commands.d.ts +4 -0
- package/dist/routes/commands.d.ts.map +1 -0
- package/dist/routes/commands.js +395 -0
- package/dist/routes/commands.js.map +1 -0
- package/dist/routes/projects.d.ts +4 -0
- package/dist/routes/projects.d.ts.map +1 -0
- package/dist/routes/projects.js +528 -0
- package/dist/routes/projects.js.map +1 -0
- package/dist/routes/sessions.d.ts +4 -0
- package/dist/routes/sessions.d.ts.map +1 -0
- package/dist/routes/sessions.js +733 -0
- package/dist/routes/sessions.js.map +1 -0
- package/dist/routes/settings.d.ts +4 -0
- package/dist/routes/settings.d.ts.map +1 -0
- package/dist/routes/settings.js +658 -0
- package/dist/routes/settings.js.map +1 -0
- package/dist/routes/subagents.d.ts +4 -0
- package/dist/routes/subagents.d.ts.map +1 -0
- package/dist/routes/subagents.js +326 -0
- package/dist/routes/subagents.js.map +1 -0
- package/docs/chat-clean-1.svg +1 -0
- package/docs/chat-clean.md +60 -0
- package/docs/chat-comprehensive-1.svg +1 -0
- package/docs/chat-comprehensive.md +166 -0
- package/docs/chat_api_sequence_diagram.md +58 -0
- package/docs/command-detection-logic.md +306 -0
- package/docs/command-detection-sequence.md +186 -0
- package/frontend/dist/assets/AgentsPage-Dqb_aqAA.js +1 -0
- package/frontend/dist/assets/ChatPage-BvQmXfcP.css +1 -0
- package/frontend/dist/assets/ChatPage-L8Paywyc.js +91 -0
- package/frontend/dist/assets/CommandForm-DLl7EIMS.js +7 -0
- package/frontend/dist/assets/CommandsPage-Bzavq0Ec.js +1 -0
- package/frontend/dist/assets/DashboardPage-B3o4AYFT.js +15 -0
- package/frontend/dist/assets/FileBrowser-DL3ayaqb.js +1 -0
- package/frontend/dist/assets/GeneralSettingsPage-CBN_de-V.js +1 -0
- package/frontend/dist/assets/LandingPage-Dl4ioKos.js +1 -0
- package/frontend/dist/assets/LoginPage-4QqRdiSi.js +12 -0
- package/frontend/dist/assets/McpPage-CY3tYiqj.js +39 -0
- package/frontend/dist/assets/MemorySettingsPage-DGxrok5K.js +1 -0
- package/frontend/dist/assets/ProjectSelector-hgmGYVFh.js +1 -0
- package/frontend/dist/assets/ProjectsPage-D399IM0c.js +14 -0
- package/frontend/dist/assets/SettingsLayout-CL_K-lzJ.js +1 -0
- package/frontend/dist/assets/SubagentForm-DXtTTIKg.js +7 -0
- package/frontend/dist/assets/SubagentsPage-Chbhj8p2.js +1 -0
- package/frontend/dist/assets/ToastTestPage-DT4wuN5C.js +1 -0
- package/frontend/dist/assets/UnifiedToolSelector-CsM9qBvs.js +1 -0
- package/frontend/dist/assets/VersionSettingsPage-74Q-LVgA.js +5 -0
- package/frontend/dist/assets/agents-ClAzIJTw.js +1 -0
- package/frontend/dist/assets/agents-DwCY2K8p.css +1 -0
- package/frontend/dist/assets/authFetch-BATQyPG5.js +1 -0
- package/frontend/dist/assets/data-structures-DLJedtzx.js +27 -0
- package/frontend/dist/assets/dateFormat-CXa8VnEC.js +1 -0
- package/frontend/dist/assets/index-B9YHa7XT.css +1 -0
- package/frontend/dist/assets/index-B_CTNvca.js +268 -0
- package/frontend/dist/assets/monaco-editor-C7Z4sOhS.js +19 -0
- package/frontend/dist/assets/syntax-highlighting-YWvMU4Hm.js +24 -0
- package/frontend/dist/assets/tabManager-DV8urRBM.js +30 -0
- package/frontend/dist/assets/table-D6q1rytw.js +1 -0
- package/frontend/dist/assets/tools-C4EPanYi.js +1 -0
- package/frontend/dist/assets/ui-components-Cw21Epuw.js +481 -0
- package/frontend/dist/assets/useAgents-DwnOE1_k.js +2 -0
- package/frontend/dist/assets/useClaudeVersions-CQdGnCqv.js +1 -0
- package/frontend/dist/assets/useCommands-CCVaurbt.js +1 -0
- package/frontend/dist/cc-studio.png +0 -0
- package/frontend/dist/index.html +68 -84
- package/frontend/dist/vite.svg +1 -0
- package/package.json +26 -27
- package/scripts/README.md +76 -0
- package/scripts/fix-project-names.js +113 -0
- package/scripts/migrate-projects.js +159 -0
- package/shared/index.d.ts +6 -0
- package/shared/index.d.ts.map +1 -0
- package/shared/index.js +7 -0
- package/{dist/types/index.d.ts → shared/types/agents.d.ts} +1 -2
- package/shared/types/agents.d.ts.map +1 -0
- package/{dist/types/index.js → shared/types/agents.js} +3 -8
- package/shared/types/claude-history.d.ts +61 -0
- package/shared/types/claude-history.d.ts.map +1 -0
- package/shared/types/claude-history.js +2 -0
- package/shared/types/claude-versions.d.ts +40 -0
- package/shared/types/claude-versions.d.ts.map +1 -0
- package/shared/types/claude-versions.js +1 -0
- package/shared/types/commands.d.ts +48 -0
- package/shared/types/commands.d.ts.map +1 -0
- package/shared/types/commands.js +19 -0
- package/shared/types/projects.d.ts +35 -0
- package/shared/types/projects.d.ts.map +1 -0
- package/shared/types/projects.js +2 -0
- package/shared/types/subagents.d.ts +26 -0
- package/shared/types/subagents.d.ts.map +1 -0
- package/shared/types/subagents.js +1 -0
- package/shared/utils/agentStorage.d.ts +27 -0
- package/shared/utils/agentStorage.d.ts.map +1 -0
- package/shared/utils/agentStorage.js +392 -0
- package/shared/utils/claudeVersionStorage.d.ts +16 -0
- package/shared/utils/claudeVersionStorage.d.ts.map +1 -0
- package/shared/utils/claudeVersionStorage.js +230 -0
- package/shared/utils/projectMetadataStorage.d.ts +94 -0
- package/shared/utils/projectMetadataStorage.d.ts.map +1 -0
- package/shared/utils/projectMetadataStorage.js +422 -0
- package/shared/utils/toolMapping.d.ts +56 -0
- package/shared/utils/toolMapping.d.ts.map +1 -0
- package/shared/utils/toolMapping.js +71 -0
- package/src/bin/agentstudio.ts +90 -121
- package/src/index.ts +139 -57
- package/src/routes/agents.ts +28 -29
- package/src/routes/{commands.ts.bak → commands.ts} +1 -1
- package/src/routes/{projects.ts.bak → projects.ts} +3 -3
- package/src/routes/{sessions.ts.bak → sessions.ts} +2 -2
- package/src/routes/{settings.ts.bak → settings.ts} +11 -11
- package/src/routes/{subagents.ts.bak → subagents.ts} +1 -1
- package/tsconfig.json +13 -12
- package/dist/types/claude-history.d.ts +0 -48
- package/dist/types/claude-history.d.ts.map +0 -1
- package/dist/types/claude-history.js +0 -2
- package/dist/types/claude-history.js.map +0 -1
- package/dist/types/claude-versions.d.ts +0 -31
- package/dist/types/claude-versions.d.ts.map +0 -1
- package/dist/types/claude-versions.js +0 -2
- package/dist/types/claude-versions.js.map +0 -1
- package/dist/types/commands.d.ts +0 -32
- package/dist/types/commands.d.ts.map +0 -1
- package/dist/types/commands.js +0 -2
- package/dist/types/commands.js.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/types/subagents.d.ts +0 -88
- package/dist/types/subagents.d.ts.map +0 -1
- package/dist/types/subagents.js +0 -2
- package/dist/types/subagents.js.map +0 -1
- package/dist/utils/agentStorage.d.ts +0 -19
- package/dist/utils/agentStorage.d.ts.map +0 -1
- package/dist/utils/agentStorage.js +0 -110
- package/dist/utils/agentStorage.js.map +0 -1
- package/dist/utils/claudeVersionStorage.d.ts +0 -33
- package/dist/utils/claudeVersionStorage.d.ts.map +0 -1
- package/dist/utils/claudeVersionStorage.js +0 -168
- package/dist/utils/claudeVersionStorage.js.map +0 -1
- package/dist/utils/projectMetadataStorage.d.ts +0 -21
- package/dist/utils/projectMetadataStorage.d.ts.map +0 -1
- package/dist/utils/projectMetadataStorage.js +0 -68
- package/dist/utils/projectMetadataStorage.js.map +0 -1
- package/src/types/claude-history.ts +0 -50
- package/src/types/claude-versions.ts +0 -33
- package/src/types/commands.ts +0 -35
- package/src/types/index.ts +0 -248
- package/src/types/subagents.ts +0 -106
- package/src/utils/agentStorage.ts +0 -126
- package/src/utils/claudeVersionStorage.ts +0 -199
- package/src/utils/projectMetadataStorage.ts +0 -86
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# AgentStudio
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
##
|
|
12
|
-
|
|
13
|
-
### Start the full application
|
|
14
|
-
```bash
|
|
15
|
-
agentstudio start
|
|
16
|
-
```
|
|
11
|
+
## Quick Start
|
|
17
12
|
|
|
18
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
47
|
+
### Start Backend Only
|
|
63
48
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
53
|
+
### Start with Custom Ports
|
|
73
54
|
|
|
74
|
-
|
|
55
|
+
```bash
|
|
56
|
+
agentstudio start --port 8080 --frontend-port 3000
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Development Mode (No Authentication)
|
|
75
60
|
|
|
76
61
|
```bash
|
|
77
|
-
|
|
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
|
package/dist/bin/agentstudio.js
CHANGED
|
@@ -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
|
-
|
|
41
|
-
console.log(
|
|
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":";
|
|
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<
|
|
1
|
+
export declare function startServer(): Promise<unknown>;
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
36
|
-
const
|
|
37
|
-
|
|
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
|
-
'
|
|
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:
|
|
45
|
-
|
|
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
|
-
|
|
48
|
-
app.use(express.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
57
|
-
app.use('/api/
|
|
58
|
-
app.use('/api/
|
|
59
|
-
app.use('/api/
|
|
60
|
-
|
|
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
|
-
//
|
|
69
|
-
app.
|
|
70
|
-
|
|
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
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
//
|
|
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":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,
|
|
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;
|
|
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"}
|
package/dist/routes/agents.js
CHANGED
|
@@ -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 '
|
|
9
|
-
import { ProjectMetadataStorage } from '
|
|
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 '
|
|
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('/',
|
|
116
|
+
router.get('/', (req, res) => {
|
|
116
117
|
try {
|
|
117
118
|
const { enabled, type } = req.query;
|
|
118
|
-
let agents =
|
|
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',
|
|
137
|
+
router.get('/:agentId', (req, res) => {
|
|
137
138
|
try {
|
|
138
139
|
const { agentId } = req.params;
|
|
139
|
-
const agent =
|
|
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('/',
|
|
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 =
|
|
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 =
|
|
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',
|
|
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 =
|
|
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
|
-
|
|
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',
|
|
202
|
+
router.delete('/:agentId', (req, res) => {
|
|
203
203
|
try {
|
|
204
204
|
const { agentId } = req.params;
|
|
205
|
-
const
|
|
206
|
-
if (!
|
|
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 =
|
|
621
|
+
const agent = globalAgentStorage.getAgent(agentId);
|
|
623
622
|
if (!agent) {
|
|
624
623
|
return res.status(404).json({ error: 'Agent not found' });
|
|
625
624
|
}
|