claudedesk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +431 -0
  3. package/config/repos.example.json +128 -0
  4. package/config/settings.example.json +64 -0
  5. package/config/skills/code-review.md +76 -0
  6. package/config/skills/full-check.md +26 -0
  7. package/config/skills/lint-fix.md +23 -0
  8. package/dist/api/agent-routes.d.ts +2 -0
  9. package/dist/api/agent-routes.d.ts.map +1 -0
  10. package/dist/api/agent-routes.js +251 -0
  11. package/dist/api/agent-routes.js.map +1 -0
  12. package/dist/api/app-routes.d.ts +2 -0
  13. package/dist/api/app-routes.d.ts.map +1 -0
  14. package/dist/api/app-routes.js +150 -0
  15. package/dist/api/app-routes.js.map +1 -0
  16. package/dist/api/docker-routes.d.ts +2 -0
  17. package/dist/api/docker-routes.d.ts.map +1 -0
  18. package/dist/api/docker-routes.js +167 -0
  19. package/dist/api/docker-routes.js.map +1 -0
  20. package/dist/api/middleware.d.ts +6 -0
  21. package/dist/api/middleware.d.ts.map +1 -0
  22. package/dist/api/middleware.js +293 -0
  23. package/dist/api/middleware.js.map +1 -0
  24. package/dist/api/pin-auth.d.ts +65 -0
  25. package/dist/api/pin-auth.d.ts.map +1 -0
  26. package/dist/api/pin-auth.js +218 -0
  27. package/dist/api/pin-auth.js.map +1 -0
  28. package/dist/api/routes.d.ts +2 -0
  29. package/dist/api/routes.d.ts.map +1 -0
  30. package/dist/api/routes.js +473 -0
  31. package/dist/api/routes.js.map +1 -0
  32. package/dist/api/settings-routes.d.ts +2 -0
  33. package/dist/api/settings-routes.d.ts.map +1 -0
  34. package/dist/api/settings-routes.js +570 -0
  35. package/dist/api/settings-routes.js.map +1 -0
  36. package/dist/api/skill-routes.d.ts +2 -0
  37. package/dist/api/skill-routes.d.ts.map +1 -0
  38. package/dist/api/skill-routes.js +88 -0
  39. package/dist/api/skill-routes.js.map +1 -0
  40. package/dist/api/terminal-routes.d.ts +2 -0
  41. package/dist/api/terminal-routes.d.ts.map +1 -0
  42. package/dist/api/terminal-routes.js +3524 -0
  43. package/dist/api/terminal-routes.js.map +1 -0
  44. package/dist/api/tunnel-routes.d.ts +2 -0
  45. package/dist/api/tunnel-routes.d.ts.map +1 -0
  46. package/dist/api/tunnel-routes.js +196 -0
  47. package/dist/api/tunnel-routes.js.map +1 -0
  48. package/dist/api/workspace-routes.d.ts +3 -0
  49. package/dist/api/workspace-routes.d.ts.map +1 -0
  50. package/dist/api/workspace-routes.js +649 -0
  51. package/dist/api/workspace-routes.js.map +1 -0
  52. package/dist/cli.d.ts +3 -0
  53. package/dist/cli.d.ts.map +1 -0
  54. package/dist/cli.js +276 -0
  55. package/dist/cli.js.map +1 -0
  56. package/dist/client/assets/index-B4r0njGe.js +780 -0
  57. package/dist/client/assets/index-CY_9MyE0.css +1 -0
  58. package/dist/client/favicon.svg +5 -0
  59. package/dist/client/icons/icon-192.svg +5 -0
  60. package/dist/client/icons/icon-512.svg +5 -0
  61. package/dist/client/icons/logo-with-message.png +0 -0
  62. package/dist/client/icons/logo.png +0 -0
  63. package/dist/client/index.html +25 -0
  64. package/dist/client/manifest.json +62 -0
  65. package/dist/client/sw.js +243 -0
  66. package/dist/config/agent-usage.d.ts +34 -0
  67. package/dist/config/agent-usage.d.ts.map +1 -0
  68. package/dist/config/agent-usage.js +87 -0
  69. package/dist/config/agent-usage.js.map +1 -0
  70. package/dist/config/repos.d.ts +34 -0
  71. package/dist/config/repos.d.ts.map +1 -0
  72. package/dist/config/repos.js +412 -0
  73. package/dist/config/repos.js.map +1 -0
  74. package/dist/config/settings.d.ts +634 -0
  75. package/dist/config/settings.d.ts.map +1 -0
  76. package/dist/config/settings.js +459 -0
  77. package/dist/config/settings.js.map +1 -0
  78. package/dist/config/skills.d.ts +18 -0
  79. package/dist/config/skills.d.ts.map +1 -0
  80. package/dist/config/skills.js +174 -0
  81. package/dist/config/skills.js.map +1 -0
  82. package/dist/config/workspaces.d.ts +961 -0
  83. package/dist/config/workspaces.d.ts.map +1 -0
  84. package/dist/config/workspaces.js +482 -0
  85. package/dist/config/workspaces.js.map +1 -0
  86. package/dist/core/app-manager.d.ts +85 -0
  87. package/dist/core/app-manager.d.ts.map +1 -0
  88. package/dist/core/app-manager.js +447 -0
  89. package/dist/core/app-manager.js.map +1 -0
  90. package/dist/core/claude-invoker.d.ts +49 -0
  91. package/dist/core/claude-invoker.d.ts.map +1 -0
  92. package/dist/core/claude-invoker.js +583 -0
  93. package/dist/core/claude-invoker.js.map +1 -0
  94. package/dist/core/claude-session-reader.d.ts +25 -0
  95. package/dist/core/claude-session-reader.d.ts.map +1 -0
  96. package/dist/core/claude-session-reader.js +184 -0
  97. package/dist/core/claude-session-reader.js.map +1 -0
  98. package/dist/core/claude-usage-query.d.ts +78 -0
  99. package/dist/core/claude-usage-query.d.ts.map +1 -0
  100. package/dist/core/claude-usage-query.js +294 -0
  101. package/dist/core/claude-usage-query.js.map +1 -0
  102. package/dist/core/git-credential-helper.d.ts +57 -0
  103. package/dist/core/git-credential-helper.d.ts.map +1 -0
  104. package/dist/core/git-credential-helper.js +176 -0
  105. package/dist/core/git-credential-helper.js.map +1 -0
  106. package/dist/core/git-sandbox.d.ts +135 -0
  107. package/dist/core/git-sandbox.d.ts.map +1 -0
  108. package/dist/core/git-sandbox.js +907 -0
  109. package/dist/core/git-sandbox.js.map +1 -0
  110. package/dist/core/github-integration.d.ts +66 -0
  111. package/dist/core/github-integration.d.ts.map +1 -0
  112. package/dist/core/github-integration.js +350 -0
  113. package/dist/core/github-integration.js.map +1 -0
  114. package/dist/core/github-oauth.d.ts +88 -0
  115. package/dist/core/github-oauth.d.ts.map +1 -0
  116. package/dist/core/github-oauth.js +244 -0
  117. package/dist/core/github-oauth.js.map +1 -0
  118. package/dist/core/gitlab-integration.d.ts +66 -0
  119. package/dist/core/gitlab-integration.d.ts.map +1 -0
  120. package/dist/core/gitlab-integration.js +353 -0
  121. package/dist/core/gitlab-integration.js.map +1 -0
  122. package/dist/core/gitlab-oauth.d.ts +100 -0
  123. package/dist/core/gitlab-oauth.d.ts.map +1 -0
  124. package/dist/core/gitlab-oauth.js +366 -0
  125. package/dist/core/gitlab-oauth.js.map +1 -0
  126. package/dist/core/insights-extractor.d.ts +68 -0
  127. package/dist/core/insights-extractor.d.ts.map +1 -0
  128. package/dist/core/insights-extractor.js +402 -0
  129. package/dist/core/insights-extractor.js.map +1 -0
  130. package/dist/core/logger.d.ts +27 -0
  131. package/dist/core/logger.d.ts.map +1 -0
  132. package/dist/core/logger.js +70 -0
  133. package/dist/core/logger.js.map +1 -0
  134. package/dist/core/process-runner.d.ts +27 -0
  135. package/dist/core/process-runner.d.ts.map +1 -0
  136. package/dist/core/process-runner.js +147 -0
  137. package/dist/core/process-runner.js.map +1 -0
  138. package/dist/core/project-detector.d.ts +30 -0
  139. package/dist/core/project-detector.d.ts.map +1 -0
  140. package/dist/core/project-detector.js +482 -0
  141. package/dist/core/project-detector.js.map +1 -0
  142. package/dist/core/qr-generator.d.ts +18 -0
  143. package/dist/core/qr-generator.d.ts.map +1 -0
  144. package/dist/core/qr-generator.js +61 -0
  145. package/dist/core/qr-generator.js.map +1 -0
  146. package/dist/core/remote-tunnel-manager.d.ts +59 -0
  147. package/dist/core/remote-tunnel-manager.d.ts.map +1 -0
  148. package/dist/core/remote-tunnel-manager.js +235 -0
  149. package/dist/core/remote-tunnel-manager.js.map +1 -0
  150. package/dist/core/shared-docker-manager.d.ts +41 -0
  151. package/dist/core/shared-docker-manager.d.ts.map +1 -0
  152. package/dist/core/shared-docker-manager.js +409 -0
  153. package/dist/core/shared-docker-manager.js.map +1 -0
  154. package/dist/core/skill-executor.d.ts +25 -0
  155. package/dist/core/skill-executor.d.ts.map +1 -0
  156. package/dist/core/skill-executor.js +171 -0
  157. package/dist/core/skill-executor.js.map +1 -0
  158. package/dist/core/terminal-session.d.ts +149 -0
  159. package/dist/core/terminal-session.d.ts.map +1 -0
  160. package/dist/core/terminal-session.js +2340 -0
  161. package/dist/core/terminal-session.js.map +1 -0
  162. package/dist/core/tunnel-manager.d.ts +35 -0
  163. package/dist/core/tunnel-manager.d.ts.map +1 -0
  164. package/dist/core/tunnel-manager.js +137 -0
  165. package/dist/core/tunnel-manager.js.map +1 -0
  166. package/dist/core/usage-manager.d.ts +57 -0
  167. package/dist/core/usage-manager.d.ts.map +1 -0
  168. package/dist/core/usage-manager.js +363 -0
  169. package/dist/core/usage-manager.js.map +1 -0
  170. package/dist/core/ws-manager.d.ts +39 -0
  171. package/dist/core/ws-manager.d.ts.map +1 -0
  172. package/dist/core/ws-manager.js +190 -0
  173. package/dist/core/ws-manager.js.map +1 -0
  174. package/dist/index.d.ts +7 -0
  175. package/dist/index.d.ts.map +1 -0
  176. package/dist/index.js +229 -0
  177. package/dist/index.js.map +1 -0
  178. package/dist/types.d.ts +868 -0
  179. package/dist/types.d.ts.map +1 -0
  180. package/dist/types.js +119 -0
  181. package/dist/types.js.map +1 -0
  182. package/package.json +96 -0
@@ -0,0 +1,76 @@
1
+ ---
2
+ id: code-review
3
+ name: Code Review
4
+ description: Performs a comprehensive code review focusing on best practices, security, and maintainability
5
+ version: "1.0.0"
6
+ type: prompt
7
+ inputs:
8
+ - name: focus
9
+ type: select
10
+ description: Area to focus the review on
11
+ options: ["security", "performance", "readability", "all"]
12
+ default: "all"
13
+ - name: severity
14
+ type: select
15
+ description: Minimum severity level to report
16
+ options: ["low", "medium", "high"]
17
+ default: "medium"
18
+ tags:
19
+ - review
20
+ - quality
21
+ - best-practices
22
+ ---
23
+
24
+ # Code Review Task
25
+
26
+ You are performing a code review for the repository **{{repo.id}}**.
27
+
28
+ ## Focus Area: {{inputs.focus}}
29
+ ## Minimum Severity: {{inputs.severity}}
30
+
31
+ ## Review Guidelines
32
+
33
+ Please analyze the codebase with focus on the following areas:
34
+
35
+ ### 1. Security
36
+ - Check for vulnerabilities (injection, XSS, CSRF)
37
+ - Identify exposed secrets or credentials
38
+ - Verify proper input validation
39
+ - Check authentication/authorization patterns
40
+
41
+ ### 2. Performance
42
+ - Identify potential bottlenecks
43
+ - Check for unnecessary computations or memory usage
44
+ - Look for N+1 query patterns
45
+ - Verify proper caching strategies
46
+
47
+ ### 3. Readability & Maintainability
48
+ - Assess naming conventions
49
+ - Check code organization and structure
50
+ - Verify proper error handling
51
+ - Look for code duplication
52
+
53
+ ### 4. Best Practices
54
+ - Verify proper testing coverage
55
+ - Check for edge case handling
56
+ - Ensure consistent coding patterns
57
+ - Validate documentation adequacy
58
+
59
+ ## Output Format
60
+
61
+ For each issue found, provide:
62
+
63
+ ```
64
+ ## [SEVERITY] Issue Title
65
+
66
+ **File:** `path/to/file.ts`
67
+ **Line:** 42
68
+
69
+ **Description:**
70
+ Brief description of the issue.
71
+
72
+ **Recommendation:**
73
+ How to fix it with code example if applicable.
74
+ ```
75
+
76
+ Start by examining the recent changes or the most critical files in the repository.
@@ -0,0 +1,26 @@
1
+ ---
2
+ id: full-check
3
+ name: Full Quality Check
4
+ description: Runs a complete quality check pipeline - lint, typecheck, and tests
5
+ version: "1.0.0"
6
+ type: workflow
7
+ workflow:
8
+ steps:
9
+ - command: npm run lint
10
+ - command: npm run typecheck
11
+ - command: npm test
12
+ tags:
13
+ - ci
14
+ - quality
15
+ - pipeline
16
+ ---
17
+
18
+ # Full Quality Check
19
+
20
+ This workflow skill runs a complete quality assurance pipeline:
21
+
22
+ 1. **Lint** - Check code style and potential issues
23
+ 2. **Typecheck** - Verify TypeScript types
24
+ 3. **Test** - Run the test suite
25
+
26
+ If any step fails, the workflow stops and reports the error.
@@ -0,0 +1,23 @@
1
+ ---
2
+ id: lint-fix
3
+ name: Lint and Fix
4
+ description: Runs linter with auto-fix on the codebase
5
+ version: "1.0.0"
6
+ type: command
7
+ command:
8
+ run: npm run lint -- --fix
9
+ timeout: 120000
10
+ tags:
11
+ - lint
12
+ - code-quality
13
+ - automation
14
+ ---
15
+
16
+ # Lint and Fix
17
+
18
+ This skill runs the project's linter with the `--fix` flag to automatically fix any fixable issues.
19
+
20
+ The command will:
21
+ 1. Run ESLint (or configured linter)
22
+ 2. Auto-fix all fixable issues
23
+ 3. Report remaining issues that require manual intervention
@@ -0,0 +1,2 @@
1
+ export declare const agentRouter: import("express-serve-static-core").Router;
2
+ //# sourceMappingURL=agent-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-routes.d.ts","sourceRoot":"","sources":["../../src/api/agent-routes.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW,4CAAW,CAAC"}
@@ -0,0 +1,251 @@
1
+ import { Router } from 'express';
2
+ import { readdir, readFile } from 'fs/promises';
3
+ import { existsSync } from 'fs';
4
+ import { join } from 'path';
5
+ import { homedir } from 'os';
6
+ import { agentUsageManager } from '../config/agent-usage.js';
7
+ export const agentRouter = Router();
8
+ // Built-in Claude Code agents (these are part of Claude Code itself)
9
+ const BUILTIN_AGENTS = [
10
+ {
11
+ id: 'bash',
12
+ name: 'Bash',
13
+ description: 'Execute shell commands and scripts',
14
+ model: 'inherit',
15
+ source: 'builtin',
16
+ },
17
+ {
18
+ id: 'general-purpose',
19
+ name: 'general-purpose',
20
+ description: 'General purpose assistant for various tasks',
21
+ model: 'inherit',
22
+ source: 'builtin',
23
+ },
24
+ {
25
+ id: 'statusline-setup',
26
+ name: 'statusline-setup',
27
+ description: 'Configure terminal status line',
28
+ model: 'sonnet',
29
+ source: 'builtin',
30
+ },
31
+ {
32
+ id: 'explore',
33
+ name: 'Explore',
34
+ description: 'Explore and understand codebases',
35
+ model: 'haiku',
36
+ source: 'builtin',
37
+ },
38
+ {
39
+ id: 'plan',
40
+ name: 'Plan',
41
+ description: 'Create implementation plans for features',
42
+ model: 'inherit',
43
+ source: 'builtin',
44
+ },
45
+ {
46
+ id: 'claude-code-guide',
47
+ name: 'claude-code-guide',
48
+ description: 'Guide for using Claude Code effectively',
49
+ model: 'haiku',
50
+ source: 'builtin',
51
+ },
52
+ ];
53
+ /**
54
+ * Parse YAML frontmatter from markdown content
55
+ */
56
+ function parseFrontmatter(content) {
57
+ const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
58
+ if (!frontmatterMatch) {
59
+ return {};
60
+ }
61
+ const frontmatter = {};
62
+ const lines = frontmatterMatch[1].split(/\r?\n/);
63
+ for (const line of lines) {
64
+ const colonIndex = line.indexOf(':');
65
+ if (colonIndex === -1)
66
+ continue;
67
+ const key = line.substring(0, colonIndex).trim();
68
+ let value = line.substring(colonIndex + 1).trim();
69
+ // Remove surrounding quotes if present
70
+ if ((value.startsWith('"') && value.endsWith('"')) ||
71
+ (value.startsWith("'") && value.endsWith("'"))) {
72
+ value = value.slice(1, -1);
73
+ }
74
+ frontmatter[key] = value;
75
+ }
76
+ return frontmatter;
77
+ }
78
+ /**
79
+ * Read user agents from ~/.claude/agents directory
80
+ */
81
+ async function getUserAgents() {
82
+ const home = homedir();
83
+ const agentsDir = join(home, '.claude', 'agents');
84
+ if (!existsSync(agentsDir)) {
85
+ return [];
86
+ }
87
+ try {
88
+ const files = await readdir(agentsDir);
89
+ const mdFiles = files.filter((f) => f.endsWith('.md'));
90
+ const agents = [];
91
+ for (const file of mdFiles) {
92
+ try {
93
+ const filePath = join(agentsDir, file);
94
+ const content = await readFile(filePath, 'utf-8');
95
+ const frontmatter = parseFrontmatter(content);
96
+ // Extract agent ID from filename (without .md extension)
97
+ const id = file.replace(/\.md$/, '');
98
+ // Parse model, default to 'inherit' if not specified
99
+ let model = 'inherit';
100
+ if (frontmatter.model) {
101
+ const m = frontmatter.model.toLowerCase();
102
+ if (m === 'opus' || m === 'sonnet' || m === 'haiku' || m === 'inherit') {
103
+ model = m;
104
+ }
105
+ }
106
+ // Handle description - may be a long escaped string, just take first sentence
107
+ let description = frontmatter.description || '';
108
+ if (description.startsWith('"')) {
109
+ description = description.slice(1);
110
+ }
111
+ // Truncate at first sentence or 200 chars
112
+ const firstSentence = description.split(/[.!?]/)[0];
113
+ description = firstSentence.length > 200 ? firstSentence.substring(0, 200) + '...' : firstSentence;
114
+ agents.push({
115
+ id,
116
+ name: frontmatter.name || id,
117
+ description: description || undefined,
118
+ model,
119
+ color: frontmatter.color,
120
+ source: 'user',
121
+ });
122
+ }
123
+ catch (err) {
124
+ console.error(`[AgentRoutes] Failed to parse agent file ${file}:`, err);
125
+ }
126
+ }
127
+ return agents;
128
+ }
129
+ catch (err) {
130
+ console.error('[AgentRoutes] Failed to read agents directory:', err);
131
+ return [];
132
+ }
133
+ }
134
+ // GET /api/agents - List all agents (user + builtin)
135
+ agentRouter.get('/', async (_req, res) => {
136
+ try {
137
+ const userAgents = await getUserAgents();
138
+ const allAgents = [...userAgents, ...BUILTIN_AGENTS];
139
+ res.json({ success: true, data: allAgents });
140
+ }
141
+ catch (error) {
142
+ const errorMsg = error instanceof Error ? error.message : String(error);
143
+ console.error('[AgentRoutes] Error fetching agents:', error);
144
+ res.status(500).json({ success: false, error: errorMsg });
145
+ }
146
+ });
147
+ // GET /api/agents/user - List only user agents
148
+ agentRouter.get('/user', async (_req, res) => {
149
+ try {
150
+ const userAgents = await getUserAgents();
151
+ res.json({ success: true, data: userAgents });
152
+ }
153
+ catch (error) {
154
+ const errorMsg = error instanceof Error ? error.message : String(error);
155
+ res.status(500).json({ success: false, error: errorMsg });
156
+ }
157
+ });
158
+ // GET /api/agents/builtin - List only builtin agents
159
+ agentRouter.get('/builtin', (_req, res) => {
160
+ res.json({ success: true, data: BUILTIN_AGENTS });
161
+ });
162
+ // GET /api/agents/recent - Get recently used agents
163
+ agentRouter.get('/recent', (_req, res) => {
164
+ try {
165
+ const recentAgents = agentUsageManager.getRecentAgents(3);
166
+ res.json({ success: true, data: recentAgents });
167
+ }
168
+ catch (error) {
169
+ const errorMsg = error instanceof Error ? error.message : String(error);
170
+ res.status(500).json({ success: false, error: errorMsg });
171
+ }
172
+ });
173
+ // GET /api/agents/:agentId - Get a specific agent
174
+ agentRouter.get('/:agentId', async (req, res) => {
175
+ try {
176
+ const { agentId } = req.params;
177
+ // Check builtin first
178
+ const builtin = BUILTIN_AGENTS.find((a) => a.id === agentId);
179
+ if (builtin) {
180
+ res.json({ success: true, data: builtin });
181
+ return;
182
+ }
183
+ // Check user agents
184
+ const userAgents = await getUserAgents();
185
+ const userAgent = userAgents.find((a) => a.id === agentId);
186
+ if (userAgent) {
187
+ res.json({ success: true, data: userAgent });
188
+ return;
189
+ }
190
+ res.status(404).json({ success: false, error: 'Agent not found' });
191
+ }
192
+ catch (error) {
193
+ const errorMsg = error instanceof Error ? error.message : String(error);
194
+ res.status(500).json({ success: false, error: errorMsg });
195
+ }
196
+ });
197
+ // POST /api/agents/detect - Auto-detect best agent for a prompt
198
+ agentRouter.post('/detect', async (req, res) => {
199
+ try {
200
+ const { prompt } = req.body;
201
+ if (!prompt || typeof prompt !== 'string') {
202
+ res.status(400).json({ success: false, error: 'Prompt is required' });
203
+ return;
204
+ }
205
+ // Simple keyword-based detection logic
206
+ const lowerPrompt = prompt.toLowerCase();
207
+ // Check for bash/shell commands
208
+ if (lowerPrompt.includes('run ') ||
209
+ lowerPrompt.includes('execute ') ||
210
+ lowerPrompt.includes('shell ') ||
211
+ lowerPrompt.includes('bash ') ||
212
+ lowerPrompt.includes('command ')) {
213
+ const bashAgent = BUILTIN_AGENTS.find((a) => a.id === 'bash');
214
+ if (bashAgent) {
215
+ res.json({ success: true, data: { agentId: bashAgent.id, agentName: bashAgent.name, autoDetected: true } });
216
+ return;
217
+ }
218
+ }
219
+ // Check for exploration/understanding tasks
220
+ if (lowerPrompt.includes('explore ') ||
221
+ lowerPrompt.includes('understand ') ||
222
+ lowerPrompt.includes('what is ') ||
223
+ lowerPrompt.includes('how does ') ||
224
+ lowerPrompt.includes('explain ')) {
225
+ const exploreAgent = BUILTIN_AGENTS.find((a) => a.id === 'explore');
226
+ if (exploreAgent) {
227
+ res.json({ success: true, data: { agentId: exploreAgent.id, agentName: exploreAgent.name, autoDetected: true } });
228
+ return;
229
+ }
230
+ }
231
+ // Check for planning tasks
232
+ if (lowerPrompt.includes('plan ') ||
233
+ lowerPrompt.includes('design ') ||
234
+ lowerPrompt.includes('architect ') ||
235
+ lowerPrompt.includes('strategy ')) {
236
+ const planAgent = BUILTIN_AGENTS.find((a) => a.id === 'plan');
237
+ if (planAgent) {
238
+ res.json({ success: true, data: { agentId: planAgent.id, agentName: planAgent.name, autoDetected: true } });
239
+ return;
240
+ }
241
+ }
242
+ // Default: no specific agent detected (use default Claude)
243
+ res.json({ success: true, data: null });
244
+ }
245
+ catch (error) {
246
+ const errorMsg = error instanceof Error ? error.message : String(error);
247
+ console.error('[AgentRoutes] Error detecting agent:', error);
248
+ res.status(500).json({ success: false, error: errorMsg });
249
+ }
250
+ });
251
+ //# sourceMappingURL=agent-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-routes.js","sourceRoot":"","sources":["../../src/api/agent-routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC;AAYpC,qEAAqE;AACrE,MAAM,cAAc,GAAkB;IACpC;QACE,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,oCAAoC;QACjD,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,SAAS;KAClB;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,6CAA6C;QAC1D,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,SAAS;KAClB;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,gCAAgC;QAC7C,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,SAAS;KAClB;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,kCAAkC;QAC/C,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,SAAS;KAClB;IACD;QACE,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,0CAA0C;QACvD,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,SAAS;KAClB;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,yCAAyC;QACtD,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,SAAS;KAClB;CACF,CAAC;AAEF;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACtE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,UAAU,KAAK,CAAC,CAAC;YAAE,SAAS;QAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAElD,uCAAuC;QACvC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACnD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa;IAC1B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAElD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAkB,EAAE,CAAC;QAEjC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACvC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAClD,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAE9C,yDAAyD;gBACzD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAErC,qDAAqD;gBACrD,IAAI,KAAK,GAAyB,SAAS,CAAC;gBAC5C,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;oBACtB,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;oBAC1C,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;wBACvE,KAAK,GAAG,CAAC,CAAC;oBACZ,CAAC;gBACH,CAAC;gBAED,8EAA8E;gBAC9E,IAAI,WAAW,GAAG,WAAW,CAAC,WAAW,IAAI,EAAE,CAAC;gBAChD,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACrC,CAAC;gBACD,0CAA0C;gBAC1C,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpD,WAAW,GAAG,aAAa,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC;gBAEnG,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE;oBACF,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,EAAE;oBAC5B,WAAW,EAAE,WAAW,IAAI,SAAS;oBACrC,KAAK;oBACL,KAAK,EAAE,WAAW,CAAC,KAAK;oBACxB,MAAM,EAAE,MAAM;iBACf,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,4CAA4C,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,GAAG,CAAC,CAAC;QACrE,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,qDAAqD;AACrD,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAa,EAAE,GAAa,EAAE,EAAE;IAC1D,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,cAAc,CAAC,CAAC;QAErD,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;QAC7D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,+CAA+C;AAC/C,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,GAAa,EAAE,EAAE;IAC9D,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;QACzC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,qDAAqD;AACrD,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;IAC3D,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,oDAAoD;AACpD,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;IAC1D,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,kDAAkD;AAClD,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACjE,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAE/B,sBAAsB;QACtB,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;QAC7D,IAAI,OAAO,EAAE,CAAC;YACZ,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,oBAAoB;QACpB,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;QAC3D,IAAI,SAAS,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,gEAAgE;AAChE,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAChE,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QAE5B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QAED,uCAAuC;QACvC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QAEzC,gCAAgC;QAChC,IACE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5B,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;YAChC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC9B,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC7B,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAChC,CAAC;YACD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;YAC9D,IAAI,SAAS,EAAE,CAAC;gBACd,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC5G,OAAO;YACT,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,IACE,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;YAChC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC;YACnC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;YAChC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC;YACjC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAChC,CAAC;YACD,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;YACpE,IAAI,YAAY,EAAE,CAAC;gBACjB,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;gBAClH,OAAO;YACT,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,IACE,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC7B,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC/B,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC;YAClC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,EACjC,CAAC;YACD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;YAC9D,IAAI,SAAS,EAAE,CAAC;gBACd,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC5G,OAAO;YACT,CAAC;QACH,CAAC;QAED,2DAA2D;QAC3D,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;QAC7D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const appRouter: import("express-serve-static-core").Router;
2
+ //# sourceMappingURL=app-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-routes.d.ts","sourceRoot":"","sources":["../../src/api/app-routes.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,SAAS,4CAAW,CAAC"}
@@ -0,0 +1,150 @@
1
+ import { Router } from 'express';
2
+ import { appManager } from '../core/app-manager.js';
3
+ import { sharedDockerManager } from '../core/shared-docker-manager.js';
4
+ export const appRouter = Router();
5
+ /**
6
+ * GET /api/apps
7
+ * List all running applications
8
+ */
9
+ appRouter.get('/', async (_req, res) => {
10
+ try {
11
+ const apps = appManager.getApps();
12
+ res.json({ success: true, data: apps });
13
+ }
14
+ catch (error) {
15
+ const errorMsg = error instanceof Error ? error.message : String(error);
16
+ console.error('[app-routes] Failed to list apps:', errorMsg);
17
+ res.status(500).json({ success: false, error: errorMsg });
18
+ }
19
+ });
20
+ /**
21
+ * POST /api/apps/start
22
+ * Start a new application
23
+ * Body: { repoId, port?, command?, env?, tunnel?, docker? }
24
+ */
25
+ appRouter.post('/start', async (req, res) => {
26
+ try {
27
+ const { repoId, port, command, env, tunnel, docker } = req.body;
28
+ if (!repoId) {
29
+ res.status(400).json({ success: false, error: 'repoId is required' });
30
+ return;
31
+ }
32
+ const app = await appManager.startApp({
33
+ repoId,
34
+ port,
35
+ command,
36
+ env,
37
+ tunnel,
38
+ docker,
39
+ });
40
+ res.json({ success: true, data: app });
41
+ }
42
+ catch (error) {
43
+ const errorMsg = error instanceof Error ? error.message : String(error);
44
+ console.error('[app-routes] Failed to start app:', errorMsg);
45
+ res.status(500).json({ success: false, error: errorMsg });
46
+ }
47
+ });
48
+ /**
49
+ * POST /api/apps/:id/stop
50
+ * Stop a running application
51
+ */
52
+ appRouter.post('/:id/stop', async (req, res) => {
53
+ try {
54
+ const { id } = req.params;
55
+ await appManager.stopApp(id);
56
+ res.json({ success: true, data: { message: 'App stopped' } });
57
+ }
58
+ catch (error) {
59
+ const errorMsg = error instanceof Error ? error.message : String(error);
60
+ console.error('[app-routes] Failed to stop app:', errorMsg);
61
+ res.status(500).json({ success: false, error: errorMsg });
62
+ }
63
+ });
64
+ /**
65
+ * POST /api/apps/:id/restart
66
+ * Restart a running application
67
+ */
68
+ appRouter.post('/:id/restart', async (req, res) => {
69
+ try {
70
+ const { id } = req.params;
71
+ const app = await appManager.restartApp(id);
72
+ res.json({ success: true, data: app });
73
+ }
74
+ catch (error) {
75
+ const errorMsg = error instanceof Error ? error.message : String(error);
76
+ console.error('[app-routes] Failed to restart app:', errorMsg);
77
+ res.status(500).json({ success: false, error: errorMsg });
78
+ }
79
+ });
80
+ /**
81
+ * GET /api/apps/:id/logs
82
+ * Get logs for an application
83
+ */
84
+ appRouter.get('/:id/logs', async (req, res) => {
85
+ try {
86
+ const { id } = req.params;
87
+ const logs = appManager.getAppLogs(id);
88
+ res.json({ success: true, data: { logs } });
89
+ }
90
+ catch (error) {
91
+ const errorMsg = error instanceof Error ? error.message : String(error);
92
+ console.error('[app-routes] Failed to get app logs:', errorMsg);
93
+ res.status(500).json({ success: false, error: errorMsg });
94
+ }
95
+ });
96
+ /**
97
+ * GET /api/apps/:repoId/monorepo-info
98
+ * Detect monorepo services for a repository
99
+ */
100
+ appRouter.get('/:repoId/monorepo-info', async (req, res) => {
101
+ try {
102
+ const { repoId } = req.params;
103
+ const info = await appManager.detectMonorepoServices(repoId);
104
+ res.json({ success: true, data: info });
105
+ }
106
+ catch (error) {
107
+ const errorMsg = error instanceof Error ? error.message : String(error);
108
+ console.error('[app-routes] Failed to detect monorepo info:', errorMsg);
109
+ res.status(500).json({ success: false, error: errorMsg });
110
+ }
111
+ });
112
+ /**
113
+ * GET /api/apps/:repoId/docker-info
114
+ * Get Docker configuration info for a repository
115
+ */
116
+ appRouter.get('/:repoId/docker-info', async (req, res) => {
117
+ try {
118
+ const { repoId } = req.params;
119
+ const info = await appManager.getDockerInfo(repoId);
120
+ res.json({ success: true, data: info });
121
+ }
122
+ catch (error) {
123
+ const errorMsg = error instanceof Error ? error.message : String(error);
124
+ console.error('[app-routes] Failed to get docker info:', errorMsg);
125
+ res.status(500).json({ success: false, error: errorMsg });
126
+ }
127
+ });
128
+ /**
129
+ * GET /api/apps/docker/status
130
+ * Get Docker availability status
131
+ */
132
+ appRouter.get('/docker/status', async (_req, res) => {
133
+ try {
134
+ const available = await sharedDockerManager.isDockerAvailable();
135
+ const message = available ? 'Docker is available' : 'Docker is not available or not running';
136
+ res.json({
137
+ success: true,
138
+ data: {
139
+ available,
140
+ message,
141
+ },
142
+ });
143
+ }
144
+ catch (error) {
145
+ const errorMsg = error instanceof Error ? error.message : String(error);
146
+ console.error('[app-routes] Failed to check docker status:', errorMsg);
147
+ res.status(500).json({ success: false, error: errorMsg });
148
+ }
149
+ });
150
+ //# sourceMappingURL=app-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-routes.js","sourceRoot":"","sources":["../../src/api/app-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const dockerRouter: import("express-serve-static-core").Router;
2
+ //# sourceMappingURL=docker-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-routes.d.ts","sourceRoot":"","sources":["../../src/api/docker-routes.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,YAAY,4CAAW,CAAC"}