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
@@ -0,0 +1,528 @@
1
+ import express from 'express';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import * as os from 'os';
5
+ import { promisify } from 'util';
6
+ import { ProjectMetadataStorage } from '@agentstudio/shared/utils/projectMetadataStorage';
7
+ import { AgentStorage } from '@agentstudio/shared/utils/agentStorage';
8
+ const router = express.Router();
9
+ const readFile = promisify(fs.readFile);
10
+ const writeFile = promisify(fs.writeFile);
11
+ const mkdir = promisify(fs.mkdir);
12
+ const stat = promisify(fs.stat);
13
+ // Use the new project metadata storage
14
+ const projectStorage = new ProjectMetadataStorage();
15
+ // Global agent storage for agent management
16
+ const globalAgentStorage = new AgentStorage();
17
+ // Ensure directory exists
18
+ async function ensureDir(dirPath) {
19
+ try {
20
+ await mkdir(dirPath, { recursive: true });
21
+ }
22
+ catch (error) {
23
+ // Directory already exists
24
+ }
25
+ }
26
+ // GET /api/projects - Get all projects
27
+ router.get('/', async (_req, res) => {
28
+ try {
29
+ const projects = projectStorage.getAllProjects();
30
+ res.json({ projects });
31
+ }
32
+ catch (error) {
33
+ console.error('Error fetching projects:', error);
34
+ res.status(500).json({ error: 'Failed to fetch projects' });
35
+ }
36
+ });
37
+ // GET /api/projects/:dirName - Get specific project
38
+ router.get('/:dirName', async (req, res) => {
39
+ try {
40
+ const { dirName } = req.params;
41
+ const project = projectStorage.getProject(dirName);
42
+ if (!project) {
43
+ return res.status(404).json({ error: 'Project not found' });
44
+ }
45
+ res.json({ project });
46
+ }
47
+ catch (error) {
48
+ console.error('Error fetching project:', error);
49
+ res.status(500).json({ error: 'Failed to fetch project' });
50
+ }
51
+ });
52
+ // POST /api/projects - Create new project
53
+ router.post('/', async (req, res) => {
54
+ try {
55
+ const { name, dirName, agentId, description, tags, metadata } = req.body;
56
+ if (!dirName) {
57
+ return res.status(400).json({ error: 'Directory name is required' });
58
+ }
59
+ // Check if project directory already exists
60
+ const existingProject = projectStorage.getProject(dirName);
61
+ if (existingProject) {
62
+ return res.status(409).json({ error: 'Project directory already exists' });
63
+ }
64
+ const projectMetadata = projectStorage.createProject(dirName, {
65
+ name: name || dirName,
66
+ description,
67
+ agentId,
68
+ tags,
69
+ metadata
70
+ });
71
+ const project = projectStorage.getProject(dirName);
72
+ res.json({ project, metadata: projectMetadata });
73
+ }
74
+ catch (error) {
75
+ console.error('Error creating project:', error);
76
+ res.status(500).json({ error: 'Failed to create project' });
77
+ }
78
+ });
79
+ // PUT /api/projects/:dirName - Update project info
80
+ router.put('/:dirName', async (req, res) => {
81
+ try {
82
+ const { dirName } = req.params;
83
+ const { name, description, tags, metadata } = req.body;
84
+ const project = projectStorage.getProject(dirName);
85
+ if (!project) {
86
+ return res.status(404).json({ error: 'Project not found' });
87
+ }
88
+ // Update basic info
89
+ if (name !== undefined || description !== undefined) {
90
+ projectStorage.updateProjectInfo(dirName, { name, description });
91
+ }
92
+ // Update tags
93
+ if (tags !== undefined) {
94
+ projectStorage.updateProjectTags(dirName, tags);
95
+ }
96
+ // Update metadata
97
+ if (metadata !== undefined) {
98
+ projectStorage.updateProjectMetadata(dirName, metadata);
99
+ }
100
+ const updatedProject = projectStorage.getProject(dirName);
101
+ res.json({ project: updatedProject });
102
+ }
103
+ catch (error) {
104
+ console.error('Error updating project:', error);
105
+ res.status(500).json({ error: 'Failed to update project' });
106
+ }
107
+ });
108
+ // DELETE /api/projects/:dirName - Delete project metadata
109
+ router.delete('/:dirName', async (req, res) => {
110
+ try {
111
+ const { dirName } = req.params;
112
+ const success = projectStorage.deleteProject(dirName);
113
+ if (!success) {
114
+ return res.status(404).json({ error: 'Project not found' });
115
+ }
116
+ res.json({ success: true });
117
+ }
118
+ catch (error) {
119
+ console.error('Error deleting project:', error);
120
+ res.status(500).json({ error: 'Failed to delete project' });
121
+ }
122
+ });
123
+ // PUT /api/projects/:dirName/default-agent - Set default agent
124
+ router.put('/:dirName/default-agent', async (req, res) => {
125
+ try {
126
+ const { dirName } = req.params;
127
+ const { agentId } = req.body;
128
+ if (!agentId) {
129
+ return res.status(400).json({ error: 'Agent ID is required' });
130
+ }
131
+ projectStorage.setDefaultAgent(dirName, agentId);
132
+ const updatedProject = projectStorage.getProject(dirName);
133
+ res.json({ project: updatedProject });
134
+ }
135
+ catch (error) {
136
+ console.error('Error setting default agent:', error);
137
+ res.status(500).json({ error: 'Failed to set default agent' });
138
+ }
139
+ });
140
+ // PUT /api/projects/:dirName/agents/:agentId - Enable/disable agent for project
141
+ router.put('/:dirName/agents/:agentId', async (req, res) => {
142
+ try {
143
+ const { dirName, agentId } = req.params;
144
+ const { enabled } = req.body;
145
+ if (typeof enabled !== 'boolean') {
146
+ return res.status(400).json({ error: 'Enabled must be a boolean' });
147
+ }
148
+ if (enabled) {
149
+ projectStorage.addAgentToProject(dirName, agentId);
150
+ }
151
+ else {
152
+ projectStorage.removeAgentFromProject(dirName, agentId);
153
+ }
154
+ const updatedProject = projectStorage.getProject(dirName);
155
+ res.json({ project: updatedProject });
156
+ }
157
+ catch (error) {
158
+ console.error('Error updating project agent:', error);
159
+ res.status(500).json({ error: 'Failed to update project agent' });
160
+ }
161
+ });
162
+ // GET /api/projects/:dirName/check-agent - Check if project needs agent selection
163
+ router.get('/:dirName/check-agent', async (req, res) => {
164
+ try {
165
+ const { dirName } = req.params;
166
+ const project = projectStorage.getProject(dirName);
167
+ if (!project) {
168
+ return res.status(404).json({ error: 'Project not found' });
169
+ }
170
+ const needsAgent = project.agents.length === 0 || !project.defaultAgent;
171
+ res.json({
172
+ needsAgent,
173
+ project: {
174
+ name: project.name,
175
+ path: project.path,
176
+ agents: project.agents,
177
+ defaultAgent: project.defaultAgent
178
+ }
179
+ });
180
+ }
181
+ catch (error) {
182
+ console.error('Error checking project agent:', error);
183
+ res.status(500).json({ error: 'Failed to check project agent' });
184
+ }
185
+ });
186
+ // POST /api/projects/:dirName/select-agent - Select first agent for project
187
+ router.post('/:dirName/select-agent', async (req, res) => {
188
+ try {
189
+ const { dirName } = req.params;
190
+ const { agentId } = req.body;
191
+ if (!agentId) {
192
+ return res.status(400).json({ error: 'Agent ID is required' });
193
+ }
194
+ // Add the agent to the project and set it as default
195
+ projectStorage.addAgentToProject(dirName, agentId);
196
+ projectStorage.setDefaultAgent(dirName, agentId);
197
+ const updatedProject = projectStorage.getProject(dirName);
198
+ res.json({
199
+ success: true,
200
+ project: updatedProject
201
+ });
202
+ }
203
+ catch (error) {
204
+ console.error('Error selecting agent for project:', error);
205
+ res.status(500).json({ error: 'Failed to select agent for project' });
206
+ }
207
+ });
208
+ // GET /api/projects/:dirName/claude-md - Get project CLAUDE.md content
209
+ router.get('/:dirName/claude-md', async (req, res) => {
210
+ try {
211
+ const { dirName } = req.params;
212
+ const project = projectStorage.getProject(dirName);
213
+ if (!project) {
214
+ return res.status(404).json({ error: 'Project not found' });
215
+ }
216
+ // Try to find CLAUDE.md in project directory first, then parent directory
217
+ let claudeFilePath = path.join(project.path, 'CLAUDE.md');
218
+ console.log('Looking for CLAUDE.md at:', claudeFilePath);
219
+ try {
220
+ const content = await readFile(claudeFilePath, 'utf-8');
221
+ console.log('Successfully read CLAUDE.md, content length:', content.length);
222
+ res.json({ content });
223
+ }
224
+ catch (error) {
225
+ console.log('Error reading CLAUDE.md from project dir:', error.code);
226
+ if (error.code === 'ENOENT') {
227
+ // Try parent directory
228
+ const parentClaudeFilePath = path.join(path.dirname(project.path), 'CLAUDE.md');
229
+ console.log('Trying parent directory:', parentClaudeFilePath);
230
+ try {
231
+ const content = await readFile(parentClaudeFilePath, 'utf-8');
232
+ console.log('Successfully read CLAUDE.md from parent dir, content length:', content.length);
233
+ res.json({ content });
234
+ }
235
+ catch (parentError) {
236
+ console.log('Error reading CLAUDE.md from parent dir:', parentError.code);
237
+ if (parentError.code === 'ENOENT') {
238
+ // File doesn't exist in either location, return empty content
239
+ res.json({ content: '' });
240
+ }
241
+ else {
242
+ throw parentError;
243
+ }
244
+ }
245
+ }
246
+ else {
247
+ throw error;
248
+ }
249
+ }
250
+ }
251
+ catch (error) {
252
+ console.error('Error reading CLAUDE.md:', error);
253
+ res.status(500).json({ error: 'Failed to read CLAUDE.md file' });
254
+ }
255
+ });
256
+ // PUT /api/projects/:dirName/claude-md - Update project CLAUDE.md content
257
+ router.put('/:dirName/claude-md', async (req, res) => {
258
+ try {
259
+ const { dirName } = req.params;
260
+ const { content } = req.body;
261
+ if (typeof content !== 'string') {
262
+ return res.status(400).json({ error: 'Content must be a string' });
263
+ }
264
+ const project = projectStorage.getProject(dirName);
265
+ if (!project) {
266
+ return res.status(404).json({ error: 'Project not found' });
267
+ }
268
+ // Decide where to save the file - prefer project directory, but check if parent has existing file
269
+ let claudeFilePath = path.join(project.path, 'CLAUDE.md');
270
+ const parentClaudeFilePath = path.join(path.dirname(project.path), 'CLAUDE.md');
271
+ // Check if parent directory already has CLAUDE.md
272
+ try {
273
+ await stat(parentClaudeFilePath);
274
+ // Parent file exists, use that location
275
+ claudeFilePath = parentClaudeFilePath;
276
+ console.log('Using existing CLAUDE.md in parent directory:', claudeFilePath);
277
+ }
278
+ catch (error) {
279
+ // Parent file doesn't exist, use project directory
280
+ console.log('Using project directory for CLAUDE.md:', claudeFilePath);
281
+ }
282
+ // Ensure directory exists
283
+ await ensureDir(path.dirname(claudeFilePath));
284
+ // Write the content
285
+ await writeFile(claudeFilePath, content, 'utf-8');
286
+ res.json({ success: true });
287
+ }
288
+ catch (error) {
289
+ console.error('Error writing CLAUDE.md:', error);
290
+ res.status(500).json({ error: 'Failed to write CLAUDE.md file' });
291
+ }
292
+ });
293
+ // ========== ROUTES MIGRATED FROM AGENTS.TS ==========
294
+ // GET /api/projects/agents/:agentId - Get projects for a specific agent
295
+ router.get('/agents/:agentId', (req, res) => {
296
+ try {
297
+ const { agentId } = req.params;
298
+ // Verify agent exists
299
+ const agent = globalAgentStorage.getAgent(agentId);
300
+ if (!agent) {
301
+ return res.status(404).json({ error: 'Agent not found' });
302
+ }
303
+ // Get all projects and filter by agent
304
+ const allProjects = projectStorage.getAllProjects();
305
+ const agentProjects = allProjects.filter(project => project.agents.includes(agentId));
306
+ res.json({ projects: agentProjects });
307
+ }
308
+ catch (error) {
309
+ console.error('Failed to get agent projects:', error);
310
+ res.status(500).json({ error: 'Failed to retrieve agent projects' });
311
+ }
312
+ });
313
+ // POST /api/projects/create - Create new project directory in ~/.claude/projects
314
+ router.post('/create', (req, res) => {
315
+ try {
316
+ const { agentId, projectName, parentDirectory, description } = req.body;
317
+ if (!agentId || !projectName) {
318
+ return res.status(400).json({ error: 'Agent ID and project name are required' });
319
+ }
320
+ // Verify agent exists
321
+ const agent = globalAgentStorage.getAgent(agentId);
322
+ if (!agent) {
323
+ return res.status(404).json({ error: 'Agent not found' });
324
+ }
325
+ // Use custom parent directory if provided, otherwise default to ~/claude-code-projects
326
+ let projectPath;
327
+ if (parentDirectory && parentDirectory !== '~/claude-code-projects') {
328
+ // Expand tilde if present
329
+ const expandedParent = parentDirectory.startsWith('~/')
330
+ ? path.join(os.homedir(), parentDirectory.slice(2))
331
+ : parentDirectory;
332
+ projectPath = path.join(expandedParent, projectName);
333
+ }
334
+ else {
335
+ const homeDir = os.homedir();
336
+ const projectsDir = path.join(homeDir, 'claude-code-projects');
337
+ projectPath = path.join(projectsDir, projectName);
338
+ // Create projects directory if it doesn't exist
339
+ if (!fs.existsSync(projectsDir)) {
340
+ fs.mkdirSync(projectsDir, { recursive: true });
341
+ }
342
+ }
343
+ // Create project directory
344
+ if (!fs.existsSync(projectPath)) {
345
+ fs.mkdirSync(projectPath, { recursive: true });
346
+ // Create .cc-sessions directory and project metadata
347
+ const sessionsDir = path.join(projectPath, '.cc-sessions');
348
+ fs.mkdirSync(sessionsDir, { recursive: true });
349
+ const projectMetadata = {
350
+ name: projectName,
351
+ description: description || '',
352
+ agentId,
353
+ agentName: agent.name,
354
+ createdAt: new Date().toISOString(),
355
+ updatedAt: new Date().toISOString()
356
+ };
357
+ fs.writeFileSync(path.join(sessionsDir, 'project.json'), JSON.stringify(projectMetadata, null, 2));
358
+ // Create a basic README file
359
+ const readmeContent = `# ${projectName}
360
+
361
+ Created with ${agent.name} on ${new Date().toLocaleString()}
362
+
363
+ ${description ? `## Description\n${description}\n\n` : ''}This is your project workspace. You can:
364
+ - Store your files here
365
+ - Create subdirectories for organization
366
+ - Use this directory for your ${agent.name} sessions
367
+
368
+ The conversation history will be saved in \`.cc-sessions/${agentId}/\` within this directory.
369
+ `;
370
+ fs.writeFileSync(path.join(projectPath, 'README.md'), readmeContent);
371
+ // Add project path to agent's projects list
372
+ if (!agent.projects) {
373
+ agent.projects = [];
374
+ }
375
+ const normalizedPath = path.resolve(projectPath);
376
+ if (!agent.projects.includes(normalizedPath)) {
377
+ agent.projects.unshift(normalizedPath); // Add to beginning for most recent
378
+ agent.updatedAt = new Date().toISOString();
379
+ globalAgentStorage.saveAgent(agent);
380
+ }
381
+ // Return project info that matches frontend interface
382
+ const projectId = `${agentId}-${Buffer.from(normalizedPath).toString('base64').replace(/[+/=]/g, '').slice(-8)}`;
383
+ res.json({
384
+ success: true,
385
+ project: {
386
+ id: projectId,
387
+ name: projectName,
388
+ path: normalizedPath,
389
+ agentId,
390
+ agentName: agent.name,
391
+ agentIcon: agent.ui.icon,
392
+ agentColor: agent.ui.icon, // Use icon as color fallback since primaryColor doesn't exist
393
+ createdAt: new Date().toISOString(),
394
+ lastAccessed: new Date().toISOString(),
395
+ description: description || ''
396
+ },
397
+ message: `Project "${projectName}" created successfully`
398
+ });
399
+ }
400
+ else {
401
+ res.status(409).json({ error: 'Project directory already exists' });
402
+ }
403
+ }
404
+ catch (error) {
405
+ console.error('Failed to create project:', error);
406
+ res.status(500).json({
407
+ error: 'Failed to create project directory',
408
+ details: error instanceof Error ? error.message : String(error)
409
+ });
410
+ }
411
+ });
412
+ // PUT /api/projects/by-id/:projectId - Update project metadata (legacy format support)
413
+ router.put('/by-id/:projectId', (req, res) => {
414
+ try {
415
+ const { projectId } = req.params;
416
+ const { description } = req.body;
417
+ // Find project by ID
418
+ const agents = globalAgentStorage.getAllAgents();
419
+ let targetProject = null;
420
+ for (const agent of agents) {
421
+ if (agent.projects && agent.projects.length > 0) {
422
+ for (const projectPath of agent.projects) {
423
+ const id = `${agent.id}-${Buffer.from(projectPath).toString('base64').replace(/[+/=]/g, '').slice(-8)}`;
424
+ if (id === projectId) {
425
+ targetProject = projectPath;
426
+ break;
427
+ }
428
+ }
429
+ if (targetProject)
430
+ break;
431
+ }
432
+ }
433
+ if (!targetProject || !fs.existsSync(targetProject)) {
434
+ return res.status(404).json({ error: 'Project not found' });
435
+ }
436
+ // Update project metadata
437
+ const sessionsDir = path.join(targetProject, '.cc-sessions');
438
+ if (!fs.existsSync(sessionsDir)) {
439
+ fs.mkdirSync(sessionsDir, { recursive: true });
440
+ }
441
+ const metadataPath = path.join(sessionsDir, 'project.json');
442
+ let metadata = {};
443
+ if (fs.existsSync(metadataPath)) {
444
+ try {
445
+ metadata = JSON.parse(fs.readFileSync(metadataPath, 'utf-8'));
446
+ }
447
+ catch (error) {
448
+ // Start with empty metadata if file is corrupted
449
+ }
450
+ }
451
+ const updatedMetadata = {
452
+ ...metadata,
453
+ description: description || '',
454
+ updatedAt: new Date().toISOString(),
455
+ createdAt: metadata.createdAt || fs.statSync(targetProject).birthtime.toISOString()
456
+ };
457
+ fs.writeFileSync(metadataPath, JSON.stringify(updatedMetadata, null, 2));
458
+ res.json({
459
+ success: true,
460
+ message: 'Project updated successfully'
461
+ });
462
+ }
463
+ catch (error) {
464
+ console.error('Failed to update project:', error);
465
+ res.status(500).json({ error: 'Failed to update project' });
466
+ }
467
+ });
468
+ // DELETE /api/projects/by-id/:projectId - Remove project from agent's list (legacy format support)
469
+ router.delete('/by-id/:projectId', (req, res) => {
470
+ try {
471
+ const { projectId } = req.params;
472
+ // Check if it's a new format project ID (starts with "project_")
473
+ if (projectId.startsWith('project_')) {
474
+ // Handle new project metadata format
475
+ const allProjects = projectStorage.getAllProjects();
476
+ const project = allProjects.find(p => p.id === projectId);
477
+ if (!project) {
478
+ return res.status(404).json({ error: 'Project not found' });
479
+ }
480
+ // Delete project metadata
481
+ const success = projectStorage.deleteProject(project.dirName);
482
+ if (!success) {
483
+ return res.status(404).json({ error: 'Project not found' });
484
+ }
485
+ res.json({
486
+ success: true,
487
+ message: 'Project removed successfully',
488
+ note: 'Project directory was not deleted from filesystem'
489
+ });
490
+ return;
491
+ }
492
+ // Handle legacy agent project format
493
+ const agents = globalAgentStorage.getAllAgents();
494
+ let targetProject = null;
495
+ for (const agent of agents) {
496
+ if (agent.projects && agent.projects.length > 0) {
497
+ for (let i = 0; i < agent.projects.length; i++) {
498
+ const projectPath = agent.projects[i];
499
+ const id = `${agent.id}-${Buffer.from(projectPath).toString('base64').replace(/[+/=]/g, '').slice(-8)}`;
500
+ if (id === projectId) {
501
+ targetProject = projectPath;
502
+ // Remove project from agent's projects list
503
+ agent.projects.splice(i, 1);
504
+ agent.updatedAt = new Date().toISOString();
505
+ globalAgentStorage.saveAgent(agent);
506
+ break;
507
+ }
508
+ }
509
+ if (targetProject)
510
+ break;
511
+ }
512
+ }
513
+ if (!targetProject) {
514
+ return res.status(404).json({ error: 'Project not found' });
515
+ }
516
+ res.json({
517
+ success: true,
518
+ message: 'Project removed from list successfully',
519
+ note: 'Project directory was not deleted from filesystem'
520
+ });
521
+ }
522
+ catch (error) {
523
+ console.error('Failed to delete project:', error);
524
+ res.status(500).json({ error: 'Failed to delete project' });
525
+ }
526
+ });
527
+ export default router;
528
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/routes/projects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import express from 'express';
2
+ declare const router: express.Router;
3
+ export default router;
4
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/routes/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAQ9B,QAAA,MAAM,MAAM,EAAE,OAAO,CAAC,MAAyB,CAAC;AAgyBhD,eAAe,MAAM,CAAC"}