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.
- package/LICENSE +21 -0
- package/README.md +431 -0
- package/config/repos.example.json +128 -0
- package/config/settings.example.json +64 -0
- package/config/skills/code-review.md +76 -0
- package/config/skills/full-check.md +26 -0
- package/config/skills/lint-fix.md +23 -0
- package/dist/api/agent-routes.d.ts +2 -0
- package/dist/api/agent-routes.d.ts.map +1 -0
- package/dist/api/agent-routes.js +251 -0
- package/dist/api/agent-routes.js.map +1 -0
- package/dist/api/app-routes.d.ts +2 -0
- package/dist/api/app-routes.d.ts.map +1 -0
- package/dist/api/app-routes.js +150 -0
- package/dist/api/app-routes.js.map +1 -0
- package/dist/api/docker-routes.d.ts +2 -0
- package/dist/api/docker-routes.d.ts.map +1 -0
- package/dist/api/docker-routes.js +167 -0
- package/dist/api/docker-routes.js.map +1 -0
- package/dist/api/middleware.d.ts +6 -0
- package/dist/api/middleware.d.ts.map +1 -0
- package/dist/api/middleware.js +293 -0
- package/dist/api/middleware.js.map +1 -0
- package/dist/api/pin-auth.d.ts +65 -0
- package/dist/api/pin-auth.d.ts.map +1 -0
- package/dist/api/pin-auth.js +218 -0
- package/dist/api/pin-auth.js.map +1 -0
- package/dist/api/routes.d.ts +2 -0
- package/dist/api/routes.d.ts.map +1 -0
- package/dist/api/routes.js +473 -0
- package/dist/api/routes.js.map +1 -0
- package/dist/api/settings-routes.d.ts +2 -0
- package/dist/api/settings-routes.d.ts.map +1 -0
- package/dist/api/settings-routes.js +570 -0
- package/dist/api/settings-routes.js.map +1 -0
- package/dist/api/skill-routes.d.ts +2 -0
- package/dist/api/skill-routes.d.ts.map +1 -0
- package/dist/api/skill-routes.js +88 -0
- package/dist/api/skill-routes.js.map +1 -0
- package/dist/api/terminal-routes.d.ts +2 -0
- package/dist/api/terminal-routes.d.ts.map +1 -0
- package/dist/api/terminal-routes.js +3524 -0
- package/dist/api/terminal-routes.js.map +1 -0
- package/dist/api/tunnel-routes.d.ts +2 -0
- package/dist/api/tunnel-routes.d.ts.map +1 -0
- package/dist/api/tunnel-routes.js +196 -0
- package/dist/api/tunnel-routes.js.map +1 -0
- package/dist/api/workspace-routes.d.ts +3 -0
- package/dist/api/workspace-routes.d.ts.map +1 -0
- package/dist/api/workspace-routes.js +649 -0
- package/dist/api/workspace-routes.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +276 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/assets/index-B4r0njGe.js +780 -0
- package/dist/client/assets/index-CY_9MyE0.css +1 -0
- package/dist/client/favicon.svg +5 -0
- package/dist/client/icons/icon-192.svg +5 -0
- package/dist/client/icons/icon-512.svg +5 -0
- package/dist/client/icons/logo-with-message.png +0 -0
- package/dist/client/icons/logo.png +0 -0
- package/dist/client/index.html +25 -0
- package/dist/client/manifest.json +62 -0
- package/dist/client/sw.js +243 -0
- package/dist/config/agent-usage.d.ts +34 -0
- package/dist/config/agent-usage.d.ts.map +1 -0
- package/dist/config/agent-usage.js +87 -0
- package/dist/config/agent-usage.js.map +1 -0
- package/dist/config/repos.d.ts +34 -0
- package/dist/config/repos.d.ts.map +1 -0
- package/dist/config/repos.js +412 -0
- package/dist/config/repos.js.map +1 -0
- package/dist/config/settings.d.ts +634 -0
- package/dist/config/settings.d.ts.map +1 -0
- package/dist/config/settings.js +459 -0
- package/dist/config/settings.js.map +1 -0
- package/dist/config/skills.d.ts +18 -0
- package/dist/config/skills.d.ts.map +1 -0
- package/dist/config/skills.js +174 -0
- package/dist/config/skills.js.map +1 -0
- package/dist/config/workspaces.d.ts +961 -0
- package/dist/config/workspaces.d.ts.map +1 -0
- package/dist/config/workspaces.js +482 -0
- package/dist/config/workspaces.js.map +1 -0
- package/dist/core/app-manager.d.ts +85 -0
- package/dist/core/app-manager.d.ts.map +1 -0
- package/dist/core/app-manager.js +447 -0
- package/dist/core/app-manager.js.map +1 -0
- package/dist/core/claude-invoker.d.ts +49 -0
- package/dist/core/claude-invoker.d.ts.map +1 -0
- package/dist/core/claude-invoker.js +583 -0
- package/dist/core/claude-invoker.js.map +1 -0
- package/dist/core/claude-session-reader.d.ts +25 -0
- package/dist/core/claude-session-reader.d.ts.map +1 -0
- package/dist/core/claude-session-reader.js +184 -0
- package/dist/core/claude-session-reader.js.map +1 -0
- package/dist/core/claude-usage-query.d.ts +78 -0
- package/dist/core/claude-usage-query.d.ts.map +1 -0
- package/dist/core/claude-usage-query.js +294 -0
- package/dist/core/claude-usage-query.js.map +1 -0
- package/dist/core/git-credential-helper.d.ts +57 -0
- package/dist/core/git-credential-helper.d.ts.map +1 -0
- package/dist/core/git-credential-helper.js +176 -0
- package/dist/core/git-credential-helper.js.map +1 -0
- package/dist/core/git-sandbox.d.ts +135 -0
- package/dist/core/git-sandbox.d.ts.map +1 -0
- package/dist/core/git-sandbox.js +907 -0
- package/dist/core/git-sandbox.js.map +1 -0
- package/dist/core/github-integration.d.ts +66 -0
- package/dist/core/github-integration.d.ts.map +1 -0
- package/dist/core/github-integration.js +350 -0
- package/dist/core/github-integration.js.map +1 -0
- package/dist/core/github-oauth.d.ts +88 -0
- package/dist/core/github-oauth.d.ts.map +1 -0
- package/dist/core/github-oauth.js +244 -0
- package/dist/core/github-oauth.js.map +1 -0
- package/dist/core/gitlab-integration.d.ts +66 -0
- package/dist/core/gitlab-integration.d.ts.map +1 -0
- package/dist/core/gitlab-integration.js +353 -0
- package/dist/core/gitlab-integration.js.map +1 -0
- package/dist/core/gitlab-oauth.d.ts +100 -0
- package/dist/core/gitlab-oauth.d.ts.map +1 -0
- package/dist/core/gitlab-oauth.js +366 -0
- package/dist/core/gitlab-oauth.js.map +1 -0
- package/dist/core/insights-extractor.d.ts +68 -0
- package/dist/core/insights-extractor.d.ts.map +1 -0
- package/dist/core/insights-extractor.js +402 -0
- package/dist/core/insights-extractor.js.map +1 -0
- package/dist/core/logger.d.ts +27 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +70 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/process-runner.d.ts +27 -0
- package/dist/core/process-runner.d.ts.map +1 -0
- package/dist/core/process-runner.js +147 -0
- package/dist/core/process-runner.js.map +1 -0
- package/dist/core/project-detector.d.ts +30 -0
- package/dist/core/project-detector.d.ts.map +1 -0
- package/dist/core/project-detector.js +482 -0
- package/dist/core/project-detector.js.map +1 -0
- package/dist/core/qr-generator.d.ts +18 -0
- package/dist/core/qr-generator.d.ts.map +1 -0
- package/dist/core/qr-generator.js +61 -0
- package/dist/core/qr-generator.js.map +1 -0
- package/dist/core/remote-tunnel-manager.d.ts +59 -0
- package/dist/core/remote-tunnel-manager.d.ts.map +1 -0
- package/dist/core/remote-tunnel-manager.js +235 -0
- package/dist/core/remote-tunnel-manager.js.map +1 -0
- package/dist/core/shared-docker-manager.d.ts +41 -0
- package/dist/core/shared-docker-manager.d.ts.map +1 -0
- package/dist/core/shared-docker-manager.js +409 -0
- package/dist/core/shared-docker-manager.js.map +1 -0
- package/dist/core/skill-executor.d.ts +25 -0
- package/dist/core/skill-executor.d.ts.map +1 -0
- package/dist/core/skill-executor.js +171 -0
- package/dist/core/skill-executor.js.map +1 -0
- package/dist/core/terminal-session.d.ts +149 -0
- package/dist/core/terminal-session.d.ts.map +1 -0
- package/dist/core/terminal-session.js +2340 -0
- package/dist/core/terminal-session.js.map +1 -0
- package/dist/core/tunnel-manager.d.ts +35 -0
- package/dist/core/tunnel-manager.d.ts.map +1 -0
- package/dist/core/tunnel-manager.js +137 -0
- package/dist/core/tunnel-manager.js.map +1 -0
- package/dist/core/usage-manager.d.ts +57 -0
- package/dist/core/usage-manager.d.ts.map +1 -0
- package/dist/core/usage-manager.js +363 -0
- package/dist/core/usage-manager.js.map +1 -0
- package/dist/core/ws-manager.d.ts +39 -0
- package/dist/core/ws-manager.d.ts.map +1 -0
- package/dist/core/ws-manager.js +190 -0
- package/dist/core/ws-manager.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +229 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +868 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +119 -0
- package/dist/types.js.map +1 -0
- 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 @@
|
|
|
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":"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"}
|
|
@@ -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":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAEvE,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC;AAElC;;;GAGG;AACH,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAa,EAAE,GAAa,EAAE,EAAE;IACxD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;QAClC,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,mCAAmC,EAAE,QAAQ,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;;;;GAIG;AACH,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAC7D,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QAEhE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,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,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC;YACpC,MAAM;YACN,IAAI;YACJ,OAAO;YACP,GAAG;YACH,MAAM;YACN,MAAM;SACP,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,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,mCAAmC,EAAE,QAAQ,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;;;GAGG;AACH,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAChE,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAE1B,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE7B,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;IAChE,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,kCAAkC,EAAE,QAAQ,CAAC,CAAC;QAC5D,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;;;GAGG;AACH,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACnE,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAE1B,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAE5C,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,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,qCAAqC,EAAE,QAAQ,CAAC,CAAC;QAC/D,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;;;GAGG;AACH,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAC/D,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAE1B,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAEvC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9C,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,QAAQ,CAAC,CAAC;QAChE,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;;;GAGG;AACH,SAAS,CAAC,GAAG,CAAC,wBAAwB,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAC5E,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAE9B,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAE7D,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,8CAA8C,EAAE,QAAQ,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;;;GAGG;AACH,SAAS,CAAC,GAAG,CAAC,sBAAsB,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAC1E,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAE9B,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAEpD,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,yCAAyC,EAAE,QAAQ,CAAC,CAAC;QACnE,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;;;GAGG;AACH,SAAS,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAa,EAAE,GAAa,EAAE,EAAE;IACrE,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,iBAAiB,EAAE,CAAC;QAChE,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,wCAAwC,CAAC;QAE7F,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,IAAI,EAAE;gBACJ,SAAS;gBACT,OAAO;aACR;SACF,CAAC,CAAC;IACL,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,6CAA6C,EAAE,QAAQ,CAAC,CAAC;QACvE,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 @@
|
|
|
1
|
+
{"version":3,"file":"docker-routes.d.ts","sourceRoot":"","sources":["../../src/api/docker-routes.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,YAAY,4CAAW,CAAC"}
|