modular-studio 0.2.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 +261 -0
- package/dist/assets/graphPopulator-C6jg83nL.js +1 -0
- package/dist/assets/index-CXhIX28x.js +634 -0
- package/dist/assets/index-CeNF0r-K.css +1 -0
- package/dist/assets/jszip.min-BlpRodxc.js +2 -0
- package/dist/index.html +16 -0
- package/dist/vite.svg +1 -0
- package/dist-server/bin/modular-mcp.d.ts +8 -0
- package/dist-server/bin/modular-mcp.d.ts.map +1 -0
- package/dist-server/bin/modular-mcp.js +158 -0
- package/dist-server/bin/modular-mcp.js.map +1 -0
- package/dist-server/bin/modular-studio.d.ts +3 -0
- package/dist-server/bin/modular-studio.d.ts.map +1 -0
- package/dist-server/bin/modular-studio.js +63 -0
- package/dist-server/bin/modular-studio.js.map +1 -0
- package/dist-server/server/config.d.ts +4 -0
- package/dist-server/server/config.d.ts.map +1 -0
- package/dist-server/server/config.js +33 -0
- package/dist-server/server/config.js.map +1 -0
- package/dist-server/server/data/mcp-clients.json +5 -0
- package/dist-server/server/index.d.ts +3 -0
- package/dist-server/server/index.d.ts.map +1 -0
- package/dist-server/server/index.js +174 -0
- package/dist-server/server/index.js.map +1 -0
- package/dist-server/server/mcp/manager.d.ts +47 -0
- package/dist-server/server/mcp/manager.d.ts.map +1 -0
- package/dist-server/server/mcp/manager.js +203 -0
- package/dist-server/server/mcp/manager.js.map +1 -0
- package/dist-server/server/mcp/modular-server.d.ts +55 -0
- package/dist-server/server/mcp/modular-server.d.ts.map +1 -0
- package/dist-server/server/mcp/modular-server.js +492 -0
- package/dist-server/server/mcp/modular-server.js.map +1 -0
- package/dist-server/server/mcp/transport.d.ts +29 -0
- package/dist-server/server/mcp/transport.d.ts.map +1 -0
- package/dist-server/server/mcp/transport.js +61 -0
- package/dist-server/server/mcp/transport.js.map +1 -0
- package/dist-server/server/routes/agent-sdk.d.ts +3 -0
- package/dist-server/server/routes/agent-sdk.d.ts.map +1 -0
- package/dist-server/server/routes/agent-sdk.js +99 -0
- package/dist-server/server/routes/agent-sdk.js.map +1 -0
- package/dist-server/server/routes/agents.d.ts +10 -0
- package/dist-server/server/routes/agents.d.ts.map +1 -0
- package/dist-server/server/routes/agents.js +61 -0
- package/dist-server/server/routes/agents.js.map +1 -0
- package/dist-server/server/routes/auth-codex.d.ts +3 -0
- package/dist-server/server/routes/auth-codex.d.ts.map +1 -0
- package/dist-server/server/routes/auth-codex.js +51 -0
- package/dist-server/server/routes/auth-codex.js.map +1 -0
- package/dist-server/server/routes/capabilities.d.ts +3 -0
- package/dist-server/server/routes/capabilities.d.ts.map +1 -0
- package/dist-server/server/routes/capabilities.js +32 -0
- package/dist-server/server/routes/capabilities.js.map +1 -0
- package/dist-server/server/routes/claude-config.d.ts +3 -0
- package/dist-server/server/routes/claude-config.d.ts.map +1 -0
- package/dist-server/server/routes/claude-config.js +146 -0
- package/dist-server/server/routes/claude-config.js.map +1 -0
- package/dist-server/server/routes/connectors.d.ts +12 -0
- package/dist-server/server/routes/connectors.d.ts.map +1 -0
- package/dist-server/server/routes/connectors.js +325 -0
- package/dist-server/server/routes/connectors.js.map +1 -0
- package/dist-server/server/routes/embeddings.d.ts +6 -0
- package/dist-server/server/routes/embeddings.d.ts.map +1 -0
- package/dist-server/server/routes/embeddings.js +130 -0
- package/dist-server/server/routes/embeddings.js.map +1 -0
- package/dist-server/server/routes/health.d.ts +9 -0
- package/dist-server/server/routes/health.d.ts.map +1 -0
- package/dist-server/server/routes/health.js +284 -0
- package/dist-server/server/routes/health.js.map +1 -0
- package/dist-server/server/routes/knowledge.d.ts +3 -0
- package/dist-server/server/routes/knowledge.d.ts.map +1 -0
- package/dist-server/server/routes/knowledge.js +534 -0
- package/dist-server/server/routes/knowledge.js.map +1 -0
- package/dist-server/server/routes/llm.d.ts +3 -0
- package/dist-server/server/routes/llm.d.ts.map +1 -0
- package/dist-server/server/routes/llm.js +200 -0
- package/dist-server/server/routes/llm.js.map +1 -0
- package/dist-server/server/routes/mcp-oauth.d.ts +12 -0
- package/dist-server/server/routes/mcp-oauth.d.ts.map +1 -0
- package/dist-server/server/routes/mcp-oauth.js +137 -0
- package/dist-server/server/routes/mcp-oauth.js.map +1 -0
- package/dist-server/server/routes/mcp.d.ts +3 -0
- package/dist-server/server/routes/mcp.d.ts.map +1 -0
- package/dist-server/server/routes/mcp.js +177 -0
- package/dist-server/server/routes/mcp.js.map +1 -0
- package/dist-server/server/routes/pipeline.d.ts +45 -0
- package/dist-server/server/routes/pipeline.d.ts.map +1 -0
- package/dist-server/server/routes/pipeline.js +483 -0
- package/dist-server/server/routes/pipeline.js.map +1 -0
- package/dist-server/server/routes/providers.d.ts +3 -0
- package/dist-server/server/routes/providers.d.ts.map +1 -0
- package/dist-server/server/routes/providers.js +204 -0
- package/dist-server/server/routes/providers.js.map +1 -0
- package/dist-server/server/routes/qualification.d.ts +3 -0
- package/dist-server/server/routes/qualification.d.ts.map +1 -0
- package/dist-server/server/routes/qualification.js +105 -0
- package/dist-server/server/routes/qualification.js.map +1 -0
- package/dist-server/server/routes/repo-index.d.ts +4 -0
- package/dist-server/server/routes/repo-index.d.ts.map +1 -0
- package/dist-server/server/routes/repo-index.js +318 -0
- package/dist-server/server/routes/repo-index.js.map +1 -0
- package/dist-server/server/routes/runtime.d.ts +3 -0
- package/dist-server/server/routes/runtime.d.ts.map +1 -0
- package/dist-server/server/routes/runtime.js +122 -0
- package/dist-server/server/routes/runtime.js.map +1 -0
- package/dist-server/server/routes/skills-search.d.ts +3 -0
- package/dist-server/server/routes/skills-search.d.ts.map +1 -0
- package/dist-server/server/routes/skills-search.js +198 -0
- package/dist-server/server/routes/skills-search.js.map +1 -0
- package/dist-server/server/routes/worktrees.d.ts +3 -0
- package/dist-server/server/routes/worktrees.d.ts.map +1 -0
- package/dist-server/server/routes/worktrees.js +70 -0
- package/dist-server/server/routes/worktrees.js.map +1 -0
- package/dist-server/server/services/__tests__/embeddingService.test.d.ts +5 -0
- package/dist-server/server/services/__tests__/embeddingService.test.d.ts.map +1 -0
- package/dist-server/server/services/__tests__/embeddingService.test.js +233 -0
- package/dist-server/server/services/__tests__/embeddingService.test.js.map +1 -0
- package/dist-server/server/services/agentRunner.d.ts +46 -0
- package/dist-server/server/services/agentRunner.d.ts.map +1 -0
- package/dist-server/server/services/agentRunner.js +295 -0
- package/dist-server/server/services/agentRunner.js.map +1 -0
- package/dist-server/server/services/agentStore.d.ts +40 -0
- package/dist-server/server/services/agentStore.d.ts.map +1 -0
- package/dist-server/server/services/agentStore.js +62 -0
- package/dist-server/server/services/agentStore.js.map +1 -0
- package/dist-server/server/services/contentStore.d.ts +32 -0
- package/dist-server/server/services/contentStore.d.ts.map +1 -0
- package/dist-server/server/services/contentStore.js +68 -0
- package/dist-server/server/services/contentStore.js.map +1 -0
- package/dist-server/server/services/embeddingService.d.ts +53 -0
- package/dist-server/server/services/embeddingService.d.ts.map +1 -0
- package/dist-server/server/services/embeddingService.js +199 -0
- package/dist-server/server/services/embeddingService.js.map +1 -0
- package/dist-server/server/services/factExtractor.d.ts +14 -0
- package/dist-server/server/services/factExtractor.d.ts.map +1 -0
- package/dist-server/server/services/factExtractor.js +126 -0
- package/dist-server/server/services/factExtractor.js.map +1 -0
- package/dist-server/server/services/githubIndexer.d.ts +59 -0
- package/dist-server/server/services/githubIndexer.d.ts.map +1 -0
- package/dist-server/server/services/githubIndexer.js +183 -0
- package/dist-server/server/services/githubIndexer.js.map +1 -0
- package/dist-server/server/services/mcpOAuth.d.ts +32 -0
- package/dist-server/server/services/mcpOAuth.d.ts.map +1 -0
- package/dist-server/server/services/mcpOAuth.js +264 -0
- package/dist-server/server/services/mcpOAuth.js.map +1 -0
- package/dist-server/server/services/memoryScorer.d.ts +19 -0
- package/dist-server/server/services/memoryScorer.d.ts.map +1 -0
- package/dist-server/server/services/memoryScorer.js +147 -0
- package/dist-server/server/services/memoryScorer.js.map +1 -0
- package/dist-server/server/services/repoIndexer.d.ts +91 -0
- package/dist-server/server/services/repoIndexer.d.ts.map +1 -0
- package/dist-server/server/services/repoIndexer.js +512 -0
- package/dist-server/server/services/repoIndexer.js.map +1 -0
- package/dist-server/server/services/teamRunner.d.ts +39 -0
- package/dist-server/server/services/teamRunner.d.ts.map +1 -0
- package/dist-server/server/services/teamRunner.js +76 -0
- package/dist-server/server/services/teamRunner.js.map +1 -0
- package/dist-server/server/services/worktreeManager.d.ts +27 -0
- package/dist-server/server/services/worktreeManager.d.ts.map +1 -0
- package/dist-server/server/services/worktreeManager.js +107 -0
- package/dist-server/server/services/worktreeManager.js.map +1 -0
- package/dist-server/server/types.d.ts +30 -0
- package/dist-server/server/types.d.ts.map +1 -0
- package/dist-server/server/types.js +2 -0
- package/dist-server/server/types.js.map +1 -0
- package/dist-server/server/utils/pathSecurity.d.ts +34 -0
- package/dist-server/server/utils/pathSecurity.d.ts.map +1 -0
- package/dist-server/server/utils/pathSecurity.js +78 -0
- package/dist-server/server/utils/pathSecurity.js.map +1 -0
- package/dist-server/src/services/budgetAllocator.d.ts +37 -0
- package/dist-server/src/services/budgetAllocator.d.ts.map +1 -0
- package/dist-server/src/services/budgetAllocator.js +120 -0
- package/dist-server/src/services/budgetAllocator.js.map +1 -0
- package/dist-server/src/services/contradictionDetector.d.ts +18 -0
- package/dist-server/src/services/contradictionDetector.d.ts.map +1 -0
- package/dist-server/src/services/contradictionDetector.js +111 -0
- package/dist-server/src/services/contradictionDetector.js.map +1 -0
- package/dist-server/src/services/treeIndexer.d.ts +91 -0
- package/dist-server/src/services/treeIndexer.d.ts.map +1 -0
- package/dist-server/src/services/treeIndexer.js +289 -0
- package/dist-server/src/services/treeIndexer.js.map +1 -0
- package/dist-server/src/store/knowledgeBase.d.ts +130 -0
- package/dist-server/src/store/knowledgeBase.d.ts.map +1 -0
- package/dist-server/src/store/knowledgeBase.js +299 -0
- package/dist-server/src/store/knowledgeBase.js.map +1 -0
- package/dist-server/tsconfig.server.tsbuildinfo +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Router } from "express";
|
|
2
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
const router = Router();
|
|
6
|
+
// POST /api/agent-sdk/chat — streaming chat via Agent SDK
|
|
7
|
+
router.post("/chat", async (req, res) => {
|
|
8
|
+
const { prompt, model, mcpServers, systemPrompt, maxTurns } = req.body;
|
|
9
|
+
res.setHeader("Content-Type", "text/event-stream");
|
|
10
|
+
res.setHeader("Cache-Control", "no-cache");
|
|
11
|
+
res.setHeader("Connection", "keep-alive");
|
|
12
|
+
try {
|
|
13
|
+
const { query } = await import("@anthropic-ai/claude-agent-sdk");
|
|
14
|
+
for await (const message of query({
|
|
15
|
+
prompt,
|
|
16
|
+
options: {
|
|
17
|
+
model: model || undefined,
|
|
18
|
+
allowedTools: ["Read", "Edit", "Bash", "Glob", "Grep", "WebSearch", "WebFetch"],
|
|
19
|
+
permissionMode: "acceptEdits",
|
|
20
|
+
maxTurns: Math.min(maxTurns || 10, 25), // Cap to prevent runaway agents
|
|
21
|
+
systemPrompt: systemPrompt || undefined,
|
|
22
|
+
...(mcpServers ? { mcpServers } : {}),
|
|
23
|
+
},
|
|
24
|
+
})) {
|
|
25
|
+
if (message.type === "assistant" && message.message?.content) {
|
|
26
|
+
for (const block of message.message.content) {
|
|
27
|
+
if ("text" in block) {
|
|
28
|
+
res.write(`data: ${JSON.stringify({ type: "text", content: block.text })}\n\n`);
|
|
29
|
+
}
|
|
30
|
+
else if ("name" in block) {
|
|
31
|
+
const toolBlock = block;
|
|
32
|
+
res.write(`data: ${JSON.stringify({ type: "tool_use", name: toolBlock.name, input: toolBlock.input })}\n\n`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else if (message.type === "result") {
|
|
37
|
+
res.write(`data: ${JSON.stringify({ type: "result", subtype: message.subtype })}\n\n`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
res.write("data: [DONE]\n\n");
|
|
41
|
+
res.end();
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
45
|
+
res.write(`data: ${JSON.stringify({ type: "error", message: msg })}\n\n`);
|
|
46
|
+
res.end();
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
// GET /api/agent-sdk/status — check if Claude Code is authenticated
|
|
50
|
+
router.get("/status", async (_req, res) => {
|
|
51
|
+
try {
|
|
52
|
+
// Check for Claude Code credentials on disk (no CLI process needed)
|
|
53
|
+
const home = homedir();
|
|
54
|
+
const credPath = join(home, ".claude", ".credentials.json");
|
|
55
|
+
const configPath = join(home, ".claude.json");
|
|
56
|
+
if (!existsSync(configPath)) {
|
|
57
|
+
res.json({
|
|
58
|
+
status: "ok",
|
|
59
|
+
data: { authenticated: false, error: "Claude Code not installed — run: curl -fsSL https://claude.ai/install.sh | bash" },
|
|
60
|
+
});
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (!existsSync(credPath)) {
|
|
64
|
+
res.json({
|
|
65
|
+
status: "ok",
|
|
66
|
+
data: { authenticated: false, error: "Not logged in — run: claude login" },
|
|
67
|
+
});
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// Read config for account info
|
|
71
|
+
const config = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
72
|
+
const account = config?.oauthAccount;
|
|
73
|
+
// Claude Agent SDK supports these models
|
|
74
|
+
const models = [
|
|
75
|
+
"claude-sonnet-4-20250514",
|
|
76
|
+
"claude-opus-4-20250514",
|
|
77
|
+
"claude-haiku-4-20250514",
|
|
78
|
+
];
|
|
79
|
+
res.json({
|
|
80
|
+
status: "ok",
|
|
81
|
+
data: {
|
|
82
|
+
authenticated: true,
|
|
83
|
+
email: account?.emailAddress,
|
|
84
|
+
displayName: account?.displayName,
|
|
85
|
+
organization: account?.organizationUuid,
|
|
86
|
+
models,
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
92
|
+
res.json({
|
|
93
|
+
status: "ok",
|
|
94
|
+
data: { authenticated: false, error: msg },
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
export default router;
|
|
99
|
+
//# sourceMappingURL=agent-sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-sdk.js","sourceRoot":"","sources":["../../../server/routes/agent-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent CRUD Routes
|
|
3
|
+
* GET /api/agents — list all (summary only)
|
|
4
|
+
* GET /api/agents/:id — full state
|
|
5
|
+
* PUT /api/agents/:id — save/update
|
|
6
|
+
* DELETE /api/agents/:id — delete
|
|
7
|
+
*/
|
|
8
|
+
declare const router: import("express-serve-static-core").Router;
|
|
9
|
+
export default router;
|
|
10
|
+
//# sourceMappingURL=agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../server/routes/agents.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,QAAA,MAAM,MAAM,4CAAW,CAAC;AAmDxB,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent CRUD Routes
|
|
3
|
+
* GET /api/agents — list all (summary only)
|
|
4
|
+
* GET /api/agents/:id — full state
|
|
5
|
+
* PUT /api/agents/:id — save/update
|
|
6
|
+
* DELETE /api/agents/:id — delete
|
|
7
|
+
*/
|
|
8
|
+
import { Router } from 'express';
|
|
9
|
+
import { saveAgent, loadAgent, listAgents, deleteAgent } from '../services/agentStore.js';
|
|
10
|
+
const router = Router();
|
|
11
|
+
router.get('/', (_req, res) => {
|
|
12
|
+
try {
|
|
13
|
+
const agents = listAgents();
|
|
14
|
+
res.json({ status: 'ok', data: agents });
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
res.status(500).json({ status: 'error', error: err.message });
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
router.get('/:id', (req, res) => {
|
|
21
|
+
try {
|
|
22
|
+
const agent = loadAgent(req.params.id);
|
|
23
|
+
if (!agent) {
|
|
24
|
+
res.status(404).json({ status: 'error', error: 'Agent not found' });
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
res.json({ status: 'ok', data: agent });
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
res.status(500).json({ status: 'error', error: err.message });
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
router.put('/:id', (req, res) => {
|
|
34
|
+
try {
|
|
35
|
+
const state = req.body;
|
|
36
|
+
if (!state || typeof state !== 'object') {
|
|
37
|
+
res.status(400).json({ status: 'error', error: 'Invalid body' });
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
saveAgent(req.params.id, state);
|
|
41
|
+
res.json({ status: 'ok', data: { id: req.params.id } });
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
res.status(500).json({ status: 'error', error: err.message });
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
router.delete('/:id', (req, res) => {
|
|
48
|
+
try {
|
|
49
|
+
const deleted = deleteAgent(req.params.id);
|
|
50
|
+
if (!deleted) {
|
|
51
|
+
res.status(404).json({ status: 'error', error: 'Agent not found' });
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
res.json({ status: 'ok' });
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
res.status(500).json({ status: 'error', error: err.message });
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
export default router;
|
|
61
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../server/routes/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-codex.d.ts","sourceRoot":"","sources":["../../../server/routes/auth-codex.ts"],"names":[],"mappings":"AAWA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAuDxB,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
const sessions = new Map();
|
|
4
|
+
const router = Router();
|
|
5
|
+
router.post('/start', (_req, res) => {
|
|
6
|
+
const id = randomUUID();
|
|
7
|
+
const session = { id, status: 'pending', createdAt: Date.now() };
|
|
8
|
+
sessions.set(id, session);
|
|
9
|
+
const resp = {
|
|
10
|
+
status: 'ok',
|
|
11
|
+
data: {
|
|
12
|
+
sessionId: id,
|
|
13
|
+
authUrl: 'https://platform.openai.com/settings/organization/api-keys',
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
res.json(resp);
|
|
17
|
+
});
|
|
18
|
+
router.get('/status/:sessionId', (req, res) => {
|
|
19
|
+
const session = sessions.get(req.params.sessionId);
|
|
20
|
+
if (!session) {
|
|
21
|
+
const resp = { status: 'error', error: 'Session not found' };
|
|
22
|
+
res.status(404).json(resp);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (Date.now() - session.createdAt > 10 * 60_000) {
|
|
26
|
+
session.status = 'expired';
|
|
27
|
+
sessions.set(session.id, session);
|
|
28
|
+
}
|
|
29
|
+
const resp = { status: 'ok', data: { status: session.status } };
|
|
30
|
+
res.json(resp);
|
|
31
|
+
});
|
|
32
|
+
router.post('/complete/:sessionId', (req, res) => {
|
|
33
|
+
const session = sessions.get(req.params.sessionId);
|
|
34
|
+
if (!session) {
|
|
35
|
+
const resp = { status: 'error', error: 'Session not found' };
|
|
36
|
+
res.status(404).json(resp);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const apiKey = String(req.body?.apiKey || '').trim();
|
|
40
|
+
if (!apiKey) {
|
|
41
|
+
const resp = { status: 'error', error: 'Missing apiKey' };
|
|
42
|
+
res.status(400).json(resp);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
session.status = 'connected';
|
|
46
|
+
sessions.set(session.id, session);
|
|
47
|
+
const resp = { status: 'ok', data: { apiKey } };
|
|
48
|
+
res.json(resp);
|
|
49
|
+
});
|
|
50
|
+
export default router;
|
|
51
|
+
//# sourceMappingURL=auth-codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-codex.js","sourceRoot":"","sources":["../../../server/routes/auth-codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AASzC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;AACrD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;AAExB,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IAClC,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,OAAO,GAAqB,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACnF,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAE1B,MAAM,IAAI,GAAwD;QAChE,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE;YACJ,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,4DAA4D;SACtE;KACF,CAAC;IACF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,GAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;QAC1E,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QACjD,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;QAC3B,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,IAAI,GAAwD,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IACrH,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,GAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;QAC1E,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,GAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;QACvE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC;IAC7B,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,IAAI,GAAoC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;IACjF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../server/routes/capabilities.ts"],"names":[],"mappings":"AA0BA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAcxB,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import { readConfig } from '../config.js';
|
|
3
|
+
const S = 'supported';
|
|
4
|
+
const D = 'degraded';
|
|
5
|
+
const U = 'unsupported';
|
|
6
|
+
const PROVIDER_CAPABILITIES = {
|
|
7
|
+
anthropic: { toolCalling: { status: S }, streaming: { status: S }, structuredOutput: { status: S }, memoryHooks: { status: S }, agentLoop: { status: S }, mcpBridge: { status: S } },
|
|
8
|
+
'claude-agent-sdk': { toolCalling: { status: S }, streaming: { status: S }, structuredOutput: { status: S }, memoryHooks: { status: S }, agentLoop: { status: S }, mcpBridge: { status: S } },
|
|
9
|
+
openai: { toolCalling: { status: S }, streaming: { status: S }, structuredOutput: { status: S }, memoryHooks: { status: D, note: 'Requires external memory layer' }, agentLoop: { status: S }, mcpBridge: { status: D, note: 'Via OpenAI-compatible proxy' } },
|
|
10
|
+
google: { toolCalling: { status: S }, streaming: { status: S }, structuredOutput: { status: D, note: 'JSON mode only, no strict schema' }, memoryHooks: { status: U, note: 'Not natively supported' }, agentLoop: { status: D, note: 'Manual orchestration required' }, mcpBridge: { status: U, note: 'No MCP support' } },
|
|
11
|
+
openrouter: { toolCalling: { status: D, note: 'Depends on underlying model' }, streaming: { status: S }, structuredOutput: { status: D, note: 'Depends on underlying model' }, memoryHooks: { status: D, note: 'Depends on underlying model' }, agentLoop: { status: D, note: 'Depends on underlying model' }, mcpBridge: { status: U, note: 'Not available through proxy' } },
|
|
12
|
+
custom: { toolCalling: { status: D, note: 'Depends on implementation' }, streaming: { status: D, note: 'Depends on implementation' }, structuredOutput: { status: D, note: 'Depends on implementation' }, memoryHooks: { status: U, note: 'Unknown provider' }, agentLoop: { status: D, note: 'Depends on implementation' }, mcpBridge: { status: U, note: 'Unknown provider' } },
|
|
13
|
+
};
|
|
14
|
+
function resolveMatrix(id) {
|
|
15
|
+
return PROVIDER_CAPABILITIES[id] ?? (id.startsWith('custom') ? PROVIDER_CAPABILITIES.custom : PROVIDER_CAPABILITIES.custom);
|
|
16
|
+
}
|
|
17
|
+
const router = Router();
|
|
18
|
+
router.get('/', (_req, res) => {
|
|
19
|
+
const config = readConfig();
|
|
20
|
+
const result = {};
|
|
21
|
+
for (const p of config.providers)
|
|
22
|
+
result[p.id] = resolveMatrix(p.id);
|
|
23
|
+
for (const key of Object.keys(PROVIDER_CAPABILITIES))
|
|
24
|
+
if (!result[key])
|
|
25
|
+
result[key] = PROVIDER_CAPABILITIES[key];
|
|
26
|
+
res.json({ status: 'ok', data: result });
|
|
27
|
+
});
|
|
28
|
+
router.get('/:providerId', (req, res) => {
|
|
29
|
+
res.json({ status: 'ok', data: resolveMatrix(req.params.providerId) });
|
|
30
|
+
});
|
|
31
|
+
export default router;
|
|
32
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../server/routes/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAQ1C,MAAM,CAAC,GAAG,WAAoB,CAAC;AAC/B,MAAM,CAAC,GAAG,UAAmB,CAAC;AAC9B,MAAM,CAAC,GAAG,aAAsB,CAAC;AAEjC,MAAM,qBAAqB,GAAqC;IAC9D,SAAS,EAAE,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;IACpL,kBAAkB,EAAE,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;IAC7L,MAAM,EAAE,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,gCAAgC,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,EAAE;IAC9P,MAAM,EAAE,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,kCAAkC,EAAE,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,+BAA+B,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE;IAC1T,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,EAAE;IAC9W,MAAM,EAAE,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE;CAClX,CAAC;AAEF,SAAS,aAAa,CAAC,EAAU;IAC/B,OAAO,qBAAqB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC9H,CAAC;AAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;AAExB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IAC5B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAqC,EAAE,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS;QAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC;QAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACjH,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAA0D,CAAC,CAAC;AACnG,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACtC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,UAAoB,CAAC,EAA0C,CAAC,CAAC;AAC3H,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-config.d.ts","sourceRoot":"","sources":["../../../server/routes/claude-config.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAwKxB,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
|
|
3
|
+
import { join, resolve } from 'node:path';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
const router = Router();
|
|
6
|
+
function getClaudeConfig() {
|
|
7
|
+
const configPath = join(homedir(), '.claude.json');
|
|
8
|
+
if (!existsSync(configPath))
|
|
9
|
+
return null;
|
|
10
|
+
try {
|
|
11
|
+
return JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
// GET /api/claude-config/mcp — list MCP servers from Claude Code config
|
|
18
|
+
router.get('/mcp', (_req, res) => {
|
|
19
|
+
const config = getClaudeConfig();
|
|
20
|
+
if (!config?.mcpServers) {
|
|
21
|
+
res.json({ status: 'ok', data: [] });
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const servers = Object.entries(config.mcpServers).map(([id, cfg]) => {
|
|
25
|
+
// Determine status from toolConfiguration
|
|
26
|
+
const toolConfig = cfg.toolConfiguration;
|
|
27
|
+
const defaults = toolConfig?.defaults;
|
|
28
|
+
let status = 'enabled';
|
|
29
|
+
if (defaults?.deferred)
|
|
30
|
+
status = 'deferred';
|
|
31
|
+
if (defaults?.disabled)
|
|
32
|
+
status = 'disabled';
|
|
33
|
+
return {
|
|
34
|
+
id,
|
|
35
|
+
name: id.charAt(0).toUpperCase() + id.slice(1).replace(/-/g, ' '),
|
|
36
|
+
type: (cfg.type || 'stdio'),
|
|
37
|
+
command: cfg.command,
|
|
38
|
+
args: cfg.args,
|
|
39
|
+
url: cfg.url,
|
|
40
|
+
env: cfg.env,
|
|
41
|
+
headers: cfg.headers,
|
|
42
|
+
status,
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
res.json({ status: 'ok', data: servers });
|
|
46
|
+
});
|
|
47
|
+
// GET /api/claude-config/skills — list skills from ~/.claude/skills
|
|
48
|
+
router.get('/skills', (_req, res) => {
|
|
49
|
+
const skillsDir = join(homedir(), '.claude', 'skills');
|
|
50
|
+
if (!existsSync(skillsDir)) {
|
|
51
|
+
// Also check .agents/skills
|
|
52
|
+
const agentsSkillsDir = join(homedir(), '.agents', 'skills');
|
|
53
|
+
if (!existsSync(agentsSkillsDir)) {
|
|
54
|
+
res.json({ status: 'ok', data: [] });
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const skills = [];
|
|
59
|
+
const dirs = [
|
|
60
|
+
{ path: join(homedir(), '.claude', 'skills'), scope: 'global' },
|
|
61
|
+
{ path: join(homedir(), '.agents', 'skills'), scope: 'user' },
|
|
62
|
+
];
|
|
63
|
+
for (const { path: dir, scope } of dirs) {
|
|
64
|
+
if (!existsSync(dir))
|
|
65
|
+
continue;
|
|
66
|
+
try {
|
|
67
|
+
const entries = readdirSync(dir);
|
|
68
|
+
for (const entry of entries) {
|
|
69
|
+
const entryPath = join(dir, entry);
|
|
70
|
+
if (!statSync(entryPath).isDirectory())
|
|
71
|
+
continue;
|
|
72
|
+
const skillMdPath = join(entryPath, 'SKILL.md');
|
|
73
|
+
const hasSkillMd = existsSync(skillMdPath);
|
|
74
|
+
let description = '';
|
|
75
|
+
if (hasSkillMd) {
|
|
76
|
+
try {
|
|
77
|
+
const content = readFileSync(skillMdPath, 'utf-8');
|
|
78
|
+
// Extract first non-empty, non-header line as description
|
|
79
|
+
const lines = content.split('\n');
|
|
80
|
+
for (const line of lines) {
|
|
81
|
+
const trimmed = line.trim();
|
|
82
|
+
if (trimmed && !trimmed.startsWith('#') && !trimmed.startsWith('---')) {
|
|
83
|
+
description = trimmed.slice(0, 200);
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch { /* ignore */ }
|
|
89
|
+
}
|
|
90
|
+
skills.push({
|
|
91
|
+
id: `${scope}:${entry}`,
|
|
92
|
+
name: entry.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase()),
|
|
93
|
+
path: entryPath,
|
|
94
|
+
hasSkillMd,
|
|
95
|
+
description: description || undefined,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch { /* ignore */ }
|
|
100
|
+
}
|
|
101
|
+
res.json({ status: 'ok', data: skills });
|
|
102
|
+
});
|
|
103
|
+
// GET /api/claude-config/project-mcp?dir=... — list project-level MCP from .mcp.json
|
|
104
|
+
router.get('/project-mcp', (req, res) => {
|
|
105
|
+
const dir = req.query.dir;
|
|
106
|
+
if (!dir) {
|
|
107
|
+
res.json({ status: 'ok', data: [] });
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const resolved = resolve(dir);
|
|
111
|
+
const mcpJsonPath = join(resolved, '.mcp.json');
|
|
112
|
+
if (!existsSync(mcpJsonPath)) {
|
|
113
|
+
res.json({ status: 'ok', data: [] });
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
const mcpJson = JSON.parse(readFileSync(mcpJsonPath, 'utf-8'));
|
|
118
|
+
const mcpServers = mcpJson.mcpServers || {};
|
|
119
|
+
const servers = Object.entries(mcpServers).map(([id, cfg]) => {
|
|
120
|
+
const toolConfig = cfg.toolConfiguration;
|
|
121
|
+
const defaults = toolConfig?.defaults;
|
|
122
|
+
let status = 'enabled';
|
|
123
|
+
if (defaults?.deferred)
|
|
124
|
+
status = 'deferred';
|
|
125
|
+
if (defaults?.disabled)
|
|
126
|
+
status = 'disabled';
|
|
127
|
+
return {
|
|
128
|
+
id: `project:${id}`,
|
|
129
|
+
name: id.charAt(0).toUpperCase() + id.slice(1).replace(/-/g, ' '),
|
|
130
|
+
type: (cfg.type || 'stdio'),
|
|
131
|
+
command: cfg.command,
|
|
132
|
+
args: cfg.args,
|
|
133
|
+
url: cfg.url,
|
|
134
|
+
env: cfg.env,
|
|
135
|
+
headers: cfg.headers,
|
|
136
|
+
status,
|
|
137
|
+
};
|
|
138
|
+
});
|
|
139
|
+
res.json({ status: 'ok', data: servers });
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
res.json({ status: 'ok', data: [] });
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
export default router;
|
|
146
|
+
//# sourceMappingURL=claude-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-config.js","sourceRoot":"","sources":["../../../server/routes/claude-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;AAsBxB,SAAS,eAAe;IACtB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;IACnD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;IAClD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;QACxB,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAsB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAqD,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;QAChI,0CAA0C;QAC1C,MAAM,UAAU,GAAG,GAAG,CAAC,iBAAwE,CAAC;QAChG,MAAM,QAAQ,GAAG,UAAU,EAAE,QAA+C,CAAC;QAC7E,IAAI,MAAM,GAAwC,SAAS,CAAC;QAC5D,IAAI,QAAQ,EAAE,QAAQ;YAAE,MAAM,GAAG,UAAU,CAAC;QAC5C,IAAI,QAAQ,EAAE,QAAQ;YAAE,MAAM,GAAG,UAAU,CAAC;QAE5C,OAAO;YACL,EAAE;YACF,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;YACjE,IAAI,EAAE,CAAC,GAAG,CAAC,IAAc,IAAI,OAAO,CAA6B;YACjE,OAAO,EAAE,GAAG,CAAC,OAA6B;YAC1C,IAAI,EAAE,GAAG,CAAC,IAA4B;YACtC,GAAG,EAAE,GAAG,CAAC,GAAyB;YAClC,GAAG,EAAE,GAAG,CAAC,GAAyC;YAClD,OAAO,EAAE,GAAG,CAAC,OAA6C;YAC1D,MAAM;SACP,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEH,oEAAoE;AACpE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;IACrD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,4BAA4B;QAC5B,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACjC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG;QACX,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC/D,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;KAC9D,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAC/B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YACjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACnC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;oBAAE,SAAS;gBAEjD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBAChD,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;gBAC3C,IAAI,WAAW,GAAG,EAAE,CAAC;gBAErB,IAAI,UAAU,EAAE,CAAC;oBACf,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;wBACnD,0DAA0D;wBAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;4BACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;4BAC5B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gCACtE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gCACpC,MAAM;4BACR,CAAC;wBACH,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC1B,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,GAAG,KAAK,IAAI,KAAK,EAAE;oBACvB,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;oBACvE,IAAI,EAAE,SAAS;oBACf,UAAU;oBACV,WAAW,EAAE,WAAW,IAAI,SAAS;iBACtC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEH,qFAAqF;AACrF,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACzD,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAa,CAAC;IACpC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAqD,IAAI,EAAE,CAAC;QAEvF,MAAM,OAAO,GAAsB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;YAC9E,MAAM,UAAU,GAAG,GAAG,CAAC,iBAAwE,CAAC;YAChG,MAAM,QAAQ,GAAG,UAAU,EAAE,QAA+C,CAAC;YAC7E,IAAI,MAAM,GAAwC,SAAS,CAAC;YAC5D,IAAI,QAAQ,EAAE,QAAQ;gBAAE,MAAM,GAAG,UAAU,CAAC;YAC5C,IAAI,QAAQ,EAAE,QAAQ;gBAAE,MAAM,GAAG,UAAU,CAAC;YAE5C,OAAO;gBACL,EAAE,EAAE,WAAW,EAAE,EAAE;gBACnB,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;gBACjE,IAAI,EAAE,CAAC,GAAG,CAAC,IAAc,IAAI,OAAO,CAA6B;gBACjE,OAAO,EAAE,GAAG,CAAC,OAA6B;gBAC1C,IAAI,EAAE,GAAG,CAAC,IAA4B;gBACtC,GAAG,EAAE,GAAG,CAAC,GAAyB;gBAClC,GAAG,EAAE,GAAG,CAAC,GAAyC;gBAClD,OAAO,EAAE,GAAG,CAAC,OAA6C;gBAC1D,MAAM;aACP,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connector Auth Routes — OAuth and API key management for service connectors.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - API key storage (encrypted at rest via config)
|
|
6
|
+
* - OAuth flow initiation + callback
|
|
7
|
+
* - Connection testing
|
|
8
|
+
* - Status checks
|
|
9
|
+
*/
|
|
10
|
+
declare const router: import("express-serve-static-core").Router;
|
|
11
|
+
export default router;
|
|
12
|
+
//# sourceMappingURL=connectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectors.d.ts","sourceRoot":"","sources":["../../../server/routes/connectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,QAAA,MAAM,MAAM,4CAAW,CAAC;AAsXxB,eAAe,MAAM,CAAC"}
|