@nexus-cortex/server 4.26.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/.cortex/agents/AGENT_PROFILE_GUIDE.md +307 -0
- package/.cortex/agents/README.md +268 -0
- package/.cortex/agents/a-frontend-landing-page-designer.md +41 -0
- package/.cortex/agents/autoresearch-agent.md +49 -0
- package/.cortex/agents/code-reviewer.md +63 -0
- package/.cortex/agents/context-research.md +26 -0
- package/.cortex/agents/doc-writer.md +92 -0
- package/.cortex/agents/explore.md +63 -0
- package/.cortex/agents/new-model-api-integrator-analyst.md +41 -0
- package/.cortex/agents/plan.md +109 -0
- package/.cortex/agents/pr-architecture-reviewer.md +77 -0
- package/.cortex/agents/pr-code-quality.md +78 -0
- package/.cortex/agents/pr-implementer.md +50 -0
- package/.cortex/agents/pr-security-auditor.md +62 -0
- package/.cortex/agents/pr-test-writer.md +67 -0
- package/.cortex/agents/refactor.md +118 -0
- package/.cortex/agents/test-writer.md +72 -0
- package/.cortex/agents/web-researcher.md +72 -0
- package/.cortex/bench/tasks/sample-tasks.json +20 -0
- package/.cortex/commands/compare.md +14 -0
- package/.cortex/commands/deps.md +16 -0
- package/.cortex/commands/diff.md +14 -0
- package/.cortex/commands/explain.md +16 -0
- package/.cortex/commands/find-bug.md +13 -0
- package/.cortex/commands/profile.md +15 -0
- package/.cortex/commands/review.md +18 -0
- package/.cortex/commands/search.md +16 -0
- package/.cortex/commands/test.md +15 -0
- package/.cortex/permissions.dev.json +20 -0
- package/.cortex/permissions.example.json +71 -0
- package/.cortex/permissions.prod.json +63 -0
- package/.cortex/permissions.test.json +19 -0
- package/.cortex/skills/autoresearch/SKILL.md +77 -0
- package/.cortex/skills/autoresearch/personas/README.md +45 -0
- package/.cortex/skills/autoresearch/personas/aggressive-refactor.md +25 -0
- package/.cortex/skills/autoresearch/personas/creative.md +29 -0
- package/.cortex/skills/autoresearch/personas/perf-hunter.md +27 -0
- package/.cortex/skills/autoresearch/personas/precise.md +23 -0
- package/.cortex/skills/autoresearch/personas/root-cause.md +26 -0
- package/.cortex/skills/autoresearch/personas/security-auditor.md +29 -0
- package/.cortex/skills/autoresearch/personas/skeptic-reviewer.md +31 -0
- package/.cortex/skills/autoresearch/personas/test-first.md +25 -0
- package/.cortex/skills/best-of-n/SKILL.md +76 -0
- package/.cortex/skills/cortex/SKILL.md +834 -0
- package/.cortex/skills/cortex-bench/SKILL.md +354 -0
- package/.cortex/skills/docx/SKILL.md +83 -0
- package/.cortex/skills/pdf-documents/SKILL.md +297 -0
- package/.cortex/skills/pdf-documents/sections/01-image-acquisition.md +132 -0
- package/.cortex/skills/pdf-documents/sections/02-ai-image-generation.md +274 -0
- package/.cortex/skills/pdf-documents/sections/03-paper-sizes.md +89 -0
- package/.cortex/skills/pdf-documents/sections/04-design-system.md +549 -0
- package/.cortex/skills/pdf-documents/sections/05-css-print-rules.md +135 -0
- package/.cortex/skills/pdf-documents/sections/06-svg-charts.md +100 -0
- package/.cortex/skills/pdf-documents/sections/07-templates.md +224 -0
- package/.cortex/skills/pdf-documents/sections/08-scaled-output.md +164 -0
- package/.cortex/skills/pdf-documents/sections/09-preview-qa.md +66 -0
- package/.cortex/skills/pdf-documents/sections/10-reading-pdfs.md +499 -0
- package/.cortex/skills/pdf-documents/sections/11-form-filling.md +241 -0
- package/.cortex/skills/pptx/SKILL.md +90 -0
- package/.cortex/skills/resume-analyst/SKILL.md +373 -0
- package/.cortex/skills/verify-work/SKILL.md +74 -0
- package/.cortex/skills/xlsx/SKILL.md +101 -0
- package/.cortex/system-messages/messages/WORK_QUALITY.md +159 -0
- package/.cortex/system-messages/registry.json +18 -0
- package/LICENSE +202 -0
- package/NOTICE +2 -0
- package/README.md +13 -0
- package/bin/cortex-daemon.js +47 -0
- package/bin/cortex-server.js +15 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +513 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/cors.d.ts +10 -0
- package/dist/middleware/cors.d.ts.map +1 -0
- package/dist/middleware/cors.js +11 -0
- package/dist/middleware/cors.js.map +1 -0
- package/dist/middleware/errorHandler.d.ts +10 -0
- package/dist/middleware/errorHandler.d.ts.map +1 -0
- package/dist/middleware/errorHandler.js +15 -0
- package/dist/middleware/errorHandler.js.map +1 -0
- package/dist/routes/approval.d.ts +2 -0
- package/dist/routes/approval.d.ts.map +1 -0
- package/dist/routes/approval.js +96 -0
- package/dist/routes/approval.js.map +1 -0
- package/dist/routes/config.d.ts +2 -0
- package/dist/routes/config.d.ts.map +1 -0
- package/dist/routes/config.js +70 -0
- package/dist/routes/config.js.map +1 -0
- package/dist/routes/health.d.ts +2 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +1031 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/mcp.d.ts +2 -0
- package/dist/routes/mcp.d.ts.map +1 -0
- package/dist/routes/mcp.js +251 -0
- package/dist/routes/mcp.js.map +1 -0
- package/dist/routes/messages.d.ts +5 -0
- package/dist/routes/messages.d.ts.map +1 -0
- package/dist/routes/messages.js +136 -0
- package/dist/routes/messages.js.map +1 -0
- package/dist/routes/middleware.d.ts +2 -0
- package/dist/routes/middleware.d.ts.map +1 -0
- package/dist/routes/middleware.js +146 -0
- package/dist/routes/middleware.js.map +1 -0
- package/dist/routes/models.d.ts +2 -0
- package/dist/routes/models.d.ts.map +1 -0
- package/dist/routes/models.js +29 -0
- package/dist/routes/models.js.map +1 -0
- package/dist/routes/permissions.d.ts +2 -0
- package/dist/routes/permissions.d.ts.map +1 -0
- package/dist/routes/permissions.js +253 -0
- package/dist/routes/permissions.js.map +1 -0
- package/dist/routes/pr.d.ts +2 -0
- package/dist/routes/pr.d.ts.map +1 -0
- package/dist/routes/pr.js +222 -0
- package/dist/routes/pr.js.map +1 -0
- package/dist/routes/sessions.d.ts +2 -0
- package/dist/routes/sessions.d.ts.map +1 -0
- package/dist/routes/sessions.js +628 -0
- package/dist/routes/sessions.js.map +1 -0
- package/dist/routes/system-messages.d.ts +2 -0
- package/dist/routes/system-messages.d.ts.map +1 -0
- package/dist/routes/system-messages.js +146 -0
- package/dist/routes/system-messages.js.map +1 -0
- package/dist/routes/tools.d.ts +2 -0
- package/dist/routes/tools.d.ts.map +1 -0
- package/dist/routes/tools.js +79 -0
- package/dist/routes/tools.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/routes/mcp.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,SAAS,4CAAW,CAAC"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Management Routes
|
|
3
|
+
* Exposes MCP server management operations
|
|
4
|
+
*/
|
|
5
|
+
import { Router } from 'express';
|
|
6
|
+
import { getServerOrchestrator } from './messages.js';
|
|
7
|
+
export const mcpRouter = Router();
|
|
8
|
+
/**
|
|
9
|
+
* GET /mcp/servers
|
|
10
|
+
* List all MCP servers with their status
|
|
11
|
+
*/
|
|
12
|
+
mcpRouter.get('/mcp/servers', async (req, res) => {
|
|
13
|
+
try {
|
|
14
|
+
const orchestrator = getServerOrchestrator();
|
|
15
|
+
if (!orchestrator) {
|
|
16
|
+
return res.status(503).json({
|
|
17
|
+
error: { message: 'Server not initialized', type: 'server_error' }
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
// Check if MCP is enabled
|
|
21
|
+
const mcpEnabled = orchestrator.isMcpEnabled?.() ?? false;
|
|
22
|
+
if (!mcpEnabled) {
|
|
23
|
+
return res.json({
|
|
24
|
+
enabled: false,
|
|
25
|
+
servers: []
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
// Get server info
|
|
29
|
+
const serverInfo = orchestrator.getMcpServerInfo?.() ?? [];
|
|
30
|
+
res.json({
|
|
31
|
+
enabled: true,
|
|
32
|
+
servers: serverInfo
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
res.status(500).json({
|
|
37
|
+
error: { message: error.message, type: 'server_error' }
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* GET /mcp/servers/:name
|
|
43
|
+
* Get specific MCP server details
|
|
44
|
+
*/
|
|
45
|
+
mcpRouter.get('/mcp/servers/:name', async (req, res) => {
|
|
46
|
+
try {
|
|
47
|
+
const { name } = req.params;
|
|
48
|
+
const orchestrator = getServerOrchestrator();
|
|
49
|
+
if (!orchestrator) {
|
|
50
|
+
return res.status(503).json({
|
|
51
|
+
error: { message: 'Server not initialized', type: 'server_error' }
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
const mcpEnabled = orchestrator.isMcpEnabled?.() ?? false;
|
|
55
|
+
if (!mcpEnabled) {
|
|
56
|
+
return res.status(404).json({
|
|
57
|
+
error: { message: 'MCP not enabled', type: 'not_found' }
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
const serverInfo = orchestrator.getMcpServerInfo?.() ?? [];
|
|
61
|
+
const server = serverInfo.find((s) => s.name === name);
|
|
62
|
+
if (!server) {
|
|
63
|
+
return res.status(404).json({
|
|
64
|
+
error: { message: `MCP server ${name} not found`, type: 'not_found' }
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
res.json(server);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
res.status(500).json({
|
|
71
|
+
error: { message: error.message, type: 'server_error' }
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
/**
|
|
76
|
+
* GET /mcp/servers/:name/tools
|
|
77
|
+
* Get tools provided by a specific MCP server
|
|
78
|
+
*/
|
|
79
|
+
mcpRouter.get('/mcp/servers/:name/tools', async (req, res) => {
|
|
80
|
+
try {
|
|
81
|
+
const { name } = req.params;
|
|
82
|
+
const orchestrator = getServerOrchestrator();
|
|
83
|
+
if (!orchestrator) {
|
|
84
|
+
return res.status(503).json({
|
|
85
|
+
error: { message: 'Server not initialized', type: 'server_error' }
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
const mcpEnabled = orchestrator.isMcpEnabled?.() ?? false;
|
|
89
|
+
if (!mcpEnabled) {
|
|
90
|
+
return res.status(404).json({
|
|
91
|
+
error: { message: 'MCP not enabled', type: 'not_found' }
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
// Get all MCP tools
|
|
95
|
+
const allMcpTools = orchestrator.getMcpTools?.() ?? [];
|
|
96
|
+
// Filter tools from this server
|
|
97
|
+
const serverTools = allMcpTools.filter((t) => t.serverName === name);
|
|
98
|
+
res.json({
|
|
99
|
+
serverName: name,
|
|
100
|
+
toolCount: serverTools.length,
|
|
101
|
+
tools: serverTools
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
res.status(500).json({
|
|
106
|
+
error: { message: error.message, type: 'server_error' }
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
/**
|
|
111
|
+
* GET /mcp/tools
|
|
112
|
+
* Get all MCP tools across all servers
|
|
113
|
+
*/
|
|
114
|
+
mcpRouter.get('/mcp/tools', async (req, res) => {
|
|
115
|
+
try {
|
|
116
|
+
const orchestrator = getServerOrchestrator();
|
|
117
|
+
if (!orchestrator) {
|
|
118
|
+
return res.status(503).json({
|
|
119
|
+
error: { message: 'Server not initialized', type: 'server_error' }
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
const mcpEnabled = orchestrator.isMcpEnabled?.() ?? false;
|
|
123
|
+
if (!mcpEnabled) {
|
|
124
|
+
return res.json({
|
|
125
|
+
enabled: false,
|
|
126
|
+
tools: []
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
const allMcpTools = orchestrator.getMcpTools?.() ?? [];
|
|
130
|
+
res.json({
|
|
131
|
+
enabled: true,
|
|
132
|
+
toolCount: allMcpTools.length,
|
|
133
|
+
tools: allMcpTools
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
res.status(500).json({
|
|
138
|
+
error: { message: error.message, type: 'server_error' }
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
/**
|
|
143
|
+
* POST /mcp/servers/:name/connect
|
|
144
|
+
* Connect to an MCP server
|
|
145
|
+
*/
|
|
146
|
+
mcpRouter.post('/mcp/servers/:name/connect', async (req, res) => {
|
|
147
|
+
try {
|
|
148
|
+
const { name } = req.params;
|
|
149
|
+
const orchestrator = getServerOrchestrator();
|
|
150
|
+
if (!orchestrator) {
|
|
151
|
+
return res.status(503).json({
|
|
152
|
+
error: { message: 'Server not initialized', type: 'server_error' }
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
const mcpManager = orchestrator.mcpManager;
|
|
156
|
+
if (!mcpManager) {
|
|
157
|
+
return res.status(503).json({
|
|
158
|
+
error: { message: 'MCP not enabled', type: 'server_error' }
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
// Connect to server
|
|
162
|
+
await mcpManager.connectToServer(name);
|
|
163
|
+
// Discover tools
|
|
164
|
+
await mcpManager.discoverAll();
|
|
165
|
+
res.json({
|
|
166
|
+
success: true,
|
|
167
|
+
message: `Connected to MCP server: ${name}`
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
res.status(500).json({
|
|
172
|
+
error: { message: error.message, type: 'server_error' }
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
/**
|
|
177
|
+
* POST /mcp/servers/:name/disconnect
|
|
178
|
+
* Disconnect from an MCP server
|
|
179
|
+
*/
|
|
180
|
+
mcpRouter.post('/mcp/servers/:name/disconnect', async (req, res) => {
|
|
181
|
+
try {
|
|
182
|
+
const { name } = req.params;
|
|
183
|
+
const orchestrator = getServerOrchestrator();
|
|
184
|
+
if (!orchestrator) {
|
|
185
|
+
return res.status(503).json({
|
|
186
|
+
error: { message: 'Server not initialized', type: 'server_error' }
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
const mcpManager = orchestrator.mcpManager;
|
|
190
|
+
if (!mcpManager) {
|
|
191
|
+
return res.status(503).json({
|
|
192
|
+
error: { message: 'MCP not enabled', type: 'server_error' }
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
// Disconnect from server
|
|
196
|
+
await mcpManager.disconnectFromServer(name);
|
|
197
|
+
res.json({
|
|
198
|
+
success: true,
|
|
199
|
+
message: `Disconnected from MCP server: ${name}`
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
res.status(500).json({
|
|
204
|
+
error: { message: error.message, type: 'server_error' }
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
/**
|
|
209
|
+
* GET /mcp/status
|
|
210
|
+
* Get overall MCP status
|
|
211
|
+
*/
|
|
212
|
+
mcpRouter.get('/mcp/status', async (req, res) => {
|
|
213
|
+
try {
|
|
214
|
+
const orchestrator = getServerOrchestrator();
|
|
215
|
+
if (!orchestrator) {
|
|
216
|
+
return res.status(503).json({
|
|
217
|
+
error: { message: 'Server not initialized', type: 'server_error' }
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
const mcpEnabled = orchestrator.isMcpEnabled?.() ?? false;
|
|
221
|
+
if (!mcpEnabled) {
|
|
222
|
+
return res.json({
|
|
223
|
+
enabled: false,
|
|
224
|
+
serverCount: 0,
|
|
225
|
+
connectedCount: 0,
|
|
226
|
+
toolCount: 0
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
const serverInfo = orchestrator.getMcpServerInfo?.() ?? [];
|
|
230
|
+
const connectedCount = serverInfo.filter((s) => s.status === 'connected').length;
|
|
231
|
+
const allMcpTools = orchestrator.getMcpTools?.() ?? [];
|
|
232
|
+
res.json({
|
|
233
|
+
enabled: true,
|
|
234
|
+
serverCount: serverInfo.length,
|
|
235
|
+
connectedCount,
|
|
236
|
+
toolCount: allMcpTools.length,
|
|
237
|
+
servers: serverInfo.map((s) => ({
|
|
238
|
+
name: s.name,
|
|
239
|
+
status: s.status,
|
|
240
|
+
toolCount: s.toolCount,
|
|
241
|
+
lastError: s.lastError
|
|
242
|
+
}))
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
res.status(500).json({
|
|
247
|
+
error: { message: error.message, type: 'server_error' }
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/routes/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type CortexOrchestrator } from '@nexus-cortex/core';
|
|
2
|
+
export declare function setServerOrchestrator(orchestrator: CortexOrchestrator): void;
|
|
3
|
+
export declare function getServerOrchestrator(): CortexOrchestrator | null;
|
|
4
|
+
export declare const messagesRouter: import("express-serve-static-core").Router;
|
|
5
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/routes/messages.ts"],"names":[],"mappings":"AAKA,OAAO,EAA+C,KAAK,kBAAkB,EAAe,MAAM,oBAAoB,CAAC;AAUvH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI,CAE5E;AAED,wBAAgB,qBAAqB,IAAI,kBAAkB,GAAG,IAAI,CAEjE;AAED,eAAO,MAAM,cAAc,4CAAW,CAAC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main /v1/messages endpoint
|
|
3
|
+
* Thin wrapper around CortexOrchestrator
|
|
4
|
+
*/
|
|
5
|
+
import { Router } from 'express';
|
|
6
|
+
import { createOrchestrator } from '@nexus-cortex/core';
|
|
7
|
+
// Read lazily — ESM hoists imports before index.ts sets process.env.PROJECT_ROOT
|
|
8
|
+
function getProjectRoot() {
|
|
9
|
+
return process.env.PROJECT_ROOT || process.cwd();
|
|
10
|
+
}
|
|
11
|
+
// Persistent orchestrator instance (set by server.ts on startup)
|
|
12
|
+
let serverOrchestrator = null;
|
|
13
|
+
export function setServerOrchestrator(orchestrator) {
|
|
14
|
+
serverOrchestrator = orchestrator;
|
|
15
|
+
}
|
|
16
|
+
export function getServerOrchestrator() {
|
|
17
|
+
return serverOrchestrator;
|
|
18
|
+
}
|
|
19
|
+
export const messagesRouter = Router();
|
|
20
|
+
messagesRouter.post('/v1/messages', async (req, res, next) => {
|
|
21
|
+
try {
|
|
22
|
+
const { model: requestModel, messages, system, tools, max_tokens, temperature, top_p, stream } = req.body;
|
|
23
|
+
// Model resolution order:
|
|
24
|
+
// 1. Explicit request.model (client override)
|
|
25
|
+
// 2. Persistent orchestrator's currentModelId (session's effective model
|
|
26
|
+
// after resume — this is what preserves the Responses API chain
|
|
27
|
+
// across restarts; if we fell through to DEFAULT_MODEL_ID here, the
|
|
28
|
+
// chain's modelMatches check would fail on the next turn)
|
|
29
|
+
// 3. .env DEFAULT_MODEL_ID
|
|
30
|
+
// 4. hard fallback
|
|
31
|
+
const sessionModel = serverOrchestrator?.getCurrentModelId?.();
|
|
32
|
+
const model = requestModel || sessionModel || process.env.DEFAULT_MODEL_ID || 'grok-code-fast-1';
|
|
33
|
+
// Validate required fields
|
|
34
|
+
if (!messages || !Array.isArray(messages)) {
|
|
35
|
+
return res.status(400).json({
|
|
36
|
+
error: {
|
|
37
|
+
message: 'Missing or invalid field: messages',
|
|
38
|
+
type: 'invalid_request_error'
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
// sendMessage/streamMessage take a SINGLE user turn's content (a string,
|
|
43
|
+
// or canonical content blocks for tool results) — every other caller
|
|
44
|
+
// passes a string, and the stateful orchestrator owns session history.
|
|
45
|
+
// Passing the whole `messages` array made the orchestrator wrap it as one
|
|
46
|
+
// message and JSON.stringify each {role,content} element into the user
|
|
47
|
+
// text (R27: garbled input → empty xAI Responses output; tolerated only
|
|
48
|
+
// because chat models could still read the JSON). Pass just the new turn.
|
|
49
|
+
const lastMessage = messages[messages.length - 1];
|
|
50
|
+
const turnContent = lastMessage?.content ?? '';
|
|
51
|
+
// Use provided tools, or empty array to enable built-in tools
|
|
52
|
+
// Empty array [] triggers: factoryTools + mcpTools + mcpManagementTools in orchestrator
|
|
53
|
+
const toolsToUse = tools !== undefined ? tools : [];
|
|
54
|
+
// Get orchestrator (persistent instance or create ephemeral for stateless mode)
|
|
55
|
+
let orchestrator;
|
|
56
|
+
if (serverOrchestrator) {
|
|
57
|
+
// Use persistent orchestrator (stateful mode)
|
|
58
|
+
// NOTE: Do NOT call switchModel() here — it mutates shared orchestrator state
|
|
59
|
+
// and creates race conditions with concurrent requests. Instead, pass modelId
|
|
60
|
+
// per-request via messageOptions (sendMessage/streamMessage support options.modelId).
|
|
61
|
+
orchestrator = serverOrchestrator;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
// Create ephemeral orchestrator (stateless mode)
|
|
65
|
+
const projectRoot = getProjectRoot();
|
|
66
|
+
const orchestratorConfig = {
|
|
67
|
+
defaultModelId: model,
|
|
68
|
+
projectPath: projectRoot,
|
|
69
|
+
workingDirectory: projectRoot,
|
|
70
|
+
enableTimeline: true,
|
|
71
|
+
debug: process.env.DEBUG === 'true'
|
|
72
|
+
};
|
|
73
|
+
// Use auto-approve if YOLO=true, otherwise disable permissions
|
|
74
|
+
const yolo = process.env.YOLO === 'true';
|
|
75
|
+
orchestrator = await createOrchestrator(orchestratorConfig, {
|
|
76
|
+
permissionMode: yolo ? 'auto' : 'disabled'
|
|
77
|
+
});
|
|
78
|
+
await orchestrator.createSession(projectRoot, model);
|
|
79
|
+
}
|
|
80
|
+
// Build message options.
|
|
81
|
+
// Sampling params MUST be nested under `parameters` — the orchestrator
|
|
82
|
+
// reads `options.parameters?.temperature` / `?.maxTokens` / `?.topP` and
|
|
83
|
+
// nothing remaps top-level keys, so a flat `temperature` was silently
|
|
84
|
+
// dropped (every request ran at the model-card default). Include each
|
|
85
|
+
// only when the client actually sent it: an omitted param falls through
|
|
86
|
+
// to the card default rather than being force-overridden.
|
|
87
|
+
const parameters = {};
|
|
88
|
+
if (temperature !== undefined)
|
|
89
|
+
parameters.temperature = temperature;
|
|
90
|
+
if (max_tokens !== undefined)
|
|
91
|
+
parameters.maxTokens = max_tokens;
|
|
92
|
+
if (top_p !== undefined)
|
|
93
|
+
parameters.topP = top_p;
|
|
94
|
+
const messageOptions = {
|
|
95
|
+
modelId: model,
|
|
96
|
+
system,
|
|
97
|
+
...(toolsToUse !== undefined && { tools: toolsToUse }),
|
|
98
|
+
...(Object.keys(parameters).length > 0 && { parameters })
|
|
99
|
+
};
|
|
100
|
+
// Handle streaming vs non-streaming
|
|
101
|
+
if (stream) {
|
|
102
|
+
// Set SSE headers
|
|
103
|
+
res.setHeader('Content-Type', 'text/event-stream');
|
|
104
|
+
res.setHeader('Cache-Control', 'no-cache');
|
|
105
|
+
res.setHeader('Connection', 'keep-alive');
|
|
106
|
+
res.setHeader('X-Accel-Buffering', 'no'); // Disable nginx buffering
|
|
107
|
+
try {
|
|
108
|
+
for await (const event of orchestrator.streamMessage(turnContent, messageOptions)) {
|
|
109
|
+
// Send SSE formatted events
|
|
110
|
+
res.write(`data: ${JSON.stringify(event)}\n\n`);
|
|
111
|
+
}
|
|
112
|
+
res.end();
|
|
113
|
+
}
|
|
114
|
+
catch (streamError) {
|
|
115
|
+
// Send error as SSE event
|
|
116
|
+
res.write(`data: ${JSON.stringify({
|
|
117
|
+
type: 'error',
|
|
118
|
+
error: {
|
|
119
|
+
message: streamError.message,
|
|
120
|
+
type: 'stream_error'
|
|
121
|
+
}
|
|
122
|
+
})}\n\n`);
|
|
123
|
+
res.end();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
// Non-streaming request
|
|
128
|
+
const response = await orchestrator.sendMessage(turnContent, messageOptions);
|
|
129
|
+
res.json(response);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
next(error);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/routes/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/routes/middleware.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,gBAAgB,4CAAW,CAAC"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware Configuration Routes
|
|
3
|
+
* Exposes middleware configuration and management
|
|
4
|
+
*/
|
|
5
|
+
import { Router } from 'express';
|
|
6
|
+
import { getServerOrchestrator } from './messages.js';
|
|
7
|
+
export const middlewareRouter = Router();
|
|
8
|
+
/**
|
|
9
|
+
* GET /middleware/config
|
|
10
|
+
* Get middleware configuration
|
|
11
|
+
*/
|
|
12
|
+
middlewareRouter.get('/middleware/config', async (req, res) => {
|
|
13
|
+
try {
|
|
14
|
+
const orchestrator = getServerOrchestrator();
|
|
15
|
+
if (!orchestrator) {
|
|
16
|
+
return res.status(503).json({
|
|
17
|
+
error: { message: 'Server not initialized', type: 'server_error' }
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
// Collect middleware status
|
|
21
|
+
const middlewareStatus = {
|
|
22
|
+
errorClassifier: !!orchestrator.errorClassifier,
|
|
23
|
+
retry: !!orchestrator.retryMiddleware,
|
|
24
|
+
permissions: !!orchestrator.permissionsMiddleware,
|
|
25
|
+
systemMessage: !!orchestrator.systemMessageMiddleware,
|
|
26
|
+
mentorship: !!orchestrator.mentorshipMiddleware,
|
|
27
|
+
helper: !!orchestrator.helperMiddleware
|
|
28
|
+
};
|
|
29
|
+
// Get config from each middleware if available
|
|
30
|
+
const config = {};
|
|
31
|
+
if (orchestrator.retryMiddleware) {
|
|
32
|
+
config.retry = {
|
|
33
|
+
enabled: true,
|
|
34
|
+
maxRetries: orchestrator.retryMiddleware.maxRetries || 3
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
if (orchestrator.permissionsMiddleware) {
|
|
38
|
+
config.permissions = {
|
|
39
|
+
enabled: true,
|
|
40
|
+
mode: orchestrator.getApprovalMode()
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (orchestrator.mentorshipMiddleware) {
|
|
44
|
+
config.mentorship = {
|
|
45
|
+
enabled: !!orchestrator.config.reactiveMentorship?.enabled
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
res.json({
|
|
49
|
+
middleware: middlewareStatus,
|
|
50
|
+
config,
|
|
51
|
+
enabledCount: Object.values(middlewareStatus).filter(Boolean).length
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
res.status(500).json({
|
|
56
|
+
error: { message: error.message, type: 'server_error' }
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
/**
|
|
61
|
+
* POST /middleware/:name/enable
|
|
62
|
+
* Enable a middleware component
|
|
63
|
+
*/
|
|
64
|
+
middlewareRouter.post('/middleware/:name/enable', async (req, res) => {
|
|
65
|
+
try {
|
|
66
|
+
const { name } = req.params;
|
|
67
|
+
return res.status(501).json({
|
|
68
|
+
error: {
|
|
69
|
+
message: 'Middleware enable/disable requires server restart',
|
|
70
|
+
type: 'not_implemented',
|
|
71
|
+
details: 'Middleware components are configured at server startup and cannot be dynamically enabled'
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
res.status(500).json({
|
|
77
|
+
error: { message: error.message, type: 'server_error' }
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
/**
|
|
82
|
+
* POST /middleware/:name/disable
|
|
83
|
+
* Disable a middleware component
|
|
84
|
+
*/
|
|
85
|
+
middlewareRouter.post('/middleware/:name/disable', async (req, res) => {
|
|
86
|
+
try {
|
|
87
|
+
const { name } = req.params;
|
|
88
|
+
return res.status(501).json({
|
|
89
|
+
error: {
|
|
90
|
+
message: 'Middleware enable/disable requires server restart',
|
|
91
|
+
type: 'not_implemented',
|
|
92
|
+
details: 'Middleware components are configured at server startup and cannot be dynamically disabled'
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
res.status(500).json({
|
|
98
|
+
error: { message: error.message, type: 'server_error' }
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
/**
|
|
103
|
+
* GET /middleware/:name/status
|
|
104
|
+
* Get status of a specific middleware
|
|
105
|
+
*/
|
|
106
|
+
middlewareRouter.get('/middleware/:name/status', async (req, res) => {
|
|
107
|
+
try {
|
|
108
|
+
const { name } = req.params;
|
|
109
|
+
const orchestrator = getServerOrchestrator();
|
|
110
|
+
if (!orchestrator) {
|
|
111
|
+
return res.status(503).json({
|
|
112
|
+
error: { message: 'Server not initialized', type: 'server_error' }
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
// Map friendly names to internal properties
|
|
116
|
+
const middlewareMap = {
|
|
117
|
+
'error-classifier': 'errorClassifier',
|
|
118
|
+
'retry': 'retryMiddleware',
|
|
119
|
+
'permissions': 'permissionsMiddleware',
|
|
120
|
+
'system-message': 'systemMessageMiddleware',
|
|
121
|
+
'mentorship': 'mentorshipMiddleware',
|
|
122
|
+
'helper': 'helperMiddleware'
|
|
123
|
+
};
|
|
124
|
+
const internalName = middlewareMap[name] || name;
|
|
125
|
+
const middleware = orchestrator[internalName];
|
|
126
|
+
if (!middleware) {
|
|
127
|
+
return res.json({
|
|
128
|
+
name,
|
|
129
|
+
enabled: false,
|
|
130
|
+
message: `Middleware '${name}' is not enabled or does not exist`
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
res.json({
|
|
134
|
+
name,
|
|
135
|
+
enabled: true,
|
|
136
|
+
internalName,
|
|
137
|
+
config: middleware.getConfig?.() || {}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
res.status(500).json({
|
|
142
|
+
error: { message: error.message, type: 'server_error' }
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/routes/middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/routes/models.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY,4CAAW,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* /models endpoint - list available models
|
|
3
|
+
*/
|
|
4
|
+
import { Router } from 'express';
|
|
5
|
+
import { ModularModelRegistry } from '@nexus-cortex/core';
|
|
6
|
+
export const modelsRouter = Router();
|
|
7
|
+
modelsRouter.get('/models', (req, res) => {
|
|
8
|
+
const registry = new ModularModelRegistry();
|
|
9
|
+
const modelIds = registry.listModels();
|
|
10
|
+
res.json({
|
|
11
|
+
object: 'list',
|
|
12
|
+
data: modelIds.map(modelId => {
|
|
13
|
+
const model = registry.getModel(modelId);
|
|
14
|
+
return {
|
|
15
|
+
id: model.id,
|
|
16
|
+
object: 'model',
|
|
17
|
+
created: Date.now(),
|
|
18
|
+
owned_by: model.provider,
|
|
19
|
+
displayName: model.displayName,
|
|
20
|
+
apiPattern: model.api.pattern,
|
|
21
|
+
contextWindow: model.limits.contextWindow,
|
|
22
|
+
maxOutputTokens: model.limits.outputTokens,
|
|
23
|
+
inputCostPer1M: model.cost?.inputPerMillion || 0,
|
|
24
|
+
outputCostPer1M: model.cost?.outputPerMillion || 0
|
|
25
|
+
};
|
|
26
|
+
})
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/routes/models.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC;AAErC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAC1D,MAAM,QAAQ,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;IAEvC,GAAG,CAAC,IAAI,CAAC;QACP,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO;gBACL,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;gBACnB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO;gBAC7B,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa;gBACzC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY;gBAC1C,cAAc,EAAE,KAAK,CAAC,IAAI,EAAE,eAAe,IAAI,CAAC;gBAChD,eAAe,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,IAAI,CAAC;aACnD,CAAC;QACJ,CAAC,CAAC;KACH,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/routes/permissions.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,iBAAiB,4CAAW,CAAC"}
|