@cogitator-ai/fastify 0.6.10 → 0.7.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/README.md +13 -3
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +11 -1
- package/dist/plugin.js.map +1 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +16 -71
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/swarms.d.ts.map +1 -1
- package/dist/routes/swarms.js +82 -87
- package/dist/routes/swarms.js.map +1 -1
- package/dist/routes/threads.d.ts.map +1 -1
- package/dist/routes/threads.js +4 -1
- package/dist/routes/threads.js.map +1 -1
- package/dist/routes/utils.d.ts +9 -6
- package/dist/routes/utils.d.ts.map +1 -1
- package/dist/routes/utils.js +12 -15
- package/dist/routes/utils.js.map +1 -1
- package/dist/routes/workflows.d.ts.map +1 -1
- package/dist/routes/workflows.js +11 -4
- package/dist/routes/workflows.js.map +1 -1
- package/dist/streaming/fastify-stream-writer.d.ts +7 -2
- package/dist/streaming/fastify-stream-writer.d.ts.map +1 -1
- package/dist/streaming/fastify-stream-writer.js +14 -7
- package/dist/streaming/fastify-stream-writer.js.map +1 -1
- package/dist/types.d.ts +62 -19
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +39 -8
- package/dist/types.js.map +1 -1
- package/dist/websocket/handler.d.ts.map +1 -1
- package/dist/websocket/handler.js +15 -54
- package/dist/websocket/handler.js.map +1 -1
- package/package.json +10 -9
package/README.md
CHANGED
|
@@ -65,7 +65,15 @@ POST /api/threads/:id/messages - Add message to thread
|
|
|
65
65
|
DELETE /api/threads/:id - Delete thread
|
|
66
66
|
```
|
|
67
67
|
|
|
68
|
-
The routes use `cogitator.getMemory()`, which connects the configured memory adapter on first use, so threads can be read on a fresh server before any agent has run. Only a `Cogitator` without `memory` configured answers `503 UNAVAILABLE`.
|
|
68
|
+
The routes use `cogitator.getMemory()`, which connects the configured memory adapter on first use, so threads can be read on a fresh server before any agent has run. Only a `Cogitator` without `memory` configured answers `503 UNAVAILABLE`. Messages take `role` `user` or `assistant` (more with `threadMessageRoles`), and `metadata` is stored on the memory entry.
|
|
69
|
+
|
|
70
|
+
Request bodies go through the validators of `@cogitator-ai/server-shared` in a `preValidation` hook, before the JSON schema could coerce `input: 42` into `"42"`, so Fastify refuses exactly what the other adapters refuse, and the schemas document the bodies.
|
|
71
|
+
|
|
72
|
+
- A run puts `context` into the system prompt, and the model reads a `system` thread message as operator instructions, so clients may set neither unless the server allows it: `acceptContext` lists the `context` keys clients may send (`true` accepts any key, for clients trusted like your own code), and `threadMessageRoles` the roles of `POST /threads/:id/messages` (`user` and `assistant` by default). Anything else is refused with `400 INVALID_INPUT`, over HTTP and WebSocket alike.
|
|
73
|
+
- A `POST` body that is not JSON (`text/plain`, a form) is refused with `415 UNSUPPORTED_MEDIA_TYPE` before it is parsed: browsers send those across origins without a CORS preflight.
|
|
74
|
+
- `POST /agents/:name/run` and `/resume` answer `toAgentRunResponse()` of `@cogitator-ai/server-shared`: `output`, `threadId`, `usage`, `toolCalls` (`{ id, name, arguments }`), `status` and `traceId`, plus `reasoning`, `pendingApprovals`, `structured`, `structuredError`, `truncated`, `blocked` and `iterationLimitReached` when they apply. The WebSocket `complete` event carries the same object, never the system prompt, the history, trace spans or a paused run's checkpoint.
|
|
75
|
+
- The `start` event of an agent stream names the run's thread (the request's `threadId`, or a new one), and `finish` repeats it with the run's outcome, so a client that sent no thread continues the conversation with this one.
|
|
76
|
+
- Swarm routes close each swarm they build once its run ends, so a distributed swarm leaves no Redis connections behind and its state expires. `GET /swarms` lists every agent, the router and pipeline stages included.
|
|
69
77
|
|
|
70
78
|
### Workflows
|
|
71
79
|
|
|
@@ -75,7 +83,7 @@ POST /api/workflows/:name/run - Run workflow
|
|
|
75
83
|
POST /api/workflows/:name/stream - Stream workflow events
|
|
76
84
|
```
|
|
77
85
|
|
|
78
|
-
Options are limited to `maxConcurrency`/`maxIterations` (positive integers) and `checkpoint
|
|
86
|
+
Options are limited to `maxConcurrency`/`maxIterations` (positive integers), and `checkpoint: true` is refused, since the server keeps no checkpoint store to resume from. A failed workflow returns `500 WORKFLOW_FAILED` (the stream ends with an `error` event instead of `workflow_completed`). Disconnecting aborts the workflow. Stream events are `{ type: 'workflow', event, data }` with `event` one of `node_started`, `node_completed`, `node_error`, `node_progress`, `workflow_completed`.
|
|
79
87
|
|
|
80
88
|
### Swarms
|
|
81
89
|
|
|
@@ -362,6 +370,8 @@ interface CogitatorPluginOptions {
|
|
|
362
370
|
swagger?: SwaggerConfig;
|
|
363
371
|
websocket?: WebSocketConfig;
|
|
364
372
|
sseHeartbeatMs?: number; // Default: 5000, 0 turns SSE heartbeats off
|
|
373
|
+
acceptContext?: boolean | string[]; // context keys clients may send: none by default, a list, or true for any
|
|
374
|
+
threadMessageRoles?: ('user' | 'assistant' | 'system')[]; // roles of POST /threads/:id/messages, default user and assistant
|
|
365
375
|
}
|
|
366
376
|
```
|
|
367
377
|
|
|
@@ -452,7 +462,7 @@ import {
|
|
|
452
462
|
} from '@cogitator-ai/fastify';
|
|
453
463
|
```
|
|
454
464
|
|
|
455
|
-
`AgentResumeRequestSchema` requires a non-blank `threadId` and validates each decision as `{ approved: boolean, reason?: string }`. `AgentRunRequestSchema` and `SwarmRunRequestSchema` require a non-blank `input` (the swarm `timeout` must be greater than 0), `AddMessageRequestSchema` requires a non-
|
|
465
|
+
`AgentResumeRequestSchema` requires a non-blank `threadId` and validates each decision as `{ approved: boolean, reason?: string }`. `AgentRunRequestSchema` and `SwarmRunRequestSchema` require a non-blank `input` (the swarm `timeout` must be greater than 0), `AddMessageRequestSchema` requires a non-blank `content` and a `user`/`assistant`/`system` role (the routes accept `system` only with `threadMessageRoles`), and `WorkflowRunRequestSchema.options` only allows `maxConcurrency`/`maxIterations` (integers ≥ 1) and `checkpoint: false` (`additionalProperties: false`). The routes validate bodies with the shared validators first, so the schemas describe what they accept.
|
|
456
466
|
|
|
457
467
|
## Documentation
|
|
458
468
|
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,SAAS,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAoB,MAAM,YAAY,CAAC;AA0I3E,eAAO,MAAM,eAAe,4CAG1B,CAAC"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import fp from 'fastify-plugin';
|
|
2
|
-
import { resolveSseHeartbeatMs } from '@cogitator-ai/server-shared';
|
|
2
|
+
import { DEFAULT_THREAD_MESSAGE_ROLES, refuseNonJsonBody, resolveSseHeartbeatMs, } from '@cogitator-ai/server-shared';
|
|
3
3
|
import { createAuthHook, errorHandler } from './hooks/index.js';
|
|
4
4
|
import { healthRoutes, agentRoutes, threadRoutes, toolRoutes, workflowRoutes, swarmRoutes, } from './routes/index.js';
|
|
5
5
|
import { isModuleNotFound } from './routes/utils.js';
|
|
@@ -10,6 +10,8 @@ const cogitatorPluginImpl = async (fastify, opts) => {
|
|
|
10
10
|
workflows: opts.workflows ?? {},
|
|
11
11
|
swarms: opts.swarms ?? {},
|
|
12
12
|
sseHeartbeatMs: resolveSseHeartbeatMs(opts.sseHeartbeatMs),
|
|
13
|
+
acceptContext: opts.acceptContext ?? false,
|
|
14
|
+
threadMessageRoles: opts.threadMessageRoles ?? DEFAULT_THREAD_MESSAGE_ROLES,
|
|
13
15
|
};
|
|
14
16
|
fastify.decorate('cogitator', context);
|
|
15
17
|
fastify.decorateRequest('cogitatorAuth', undefined);
|
|
@@ -33,6 +35,14 @@ const cogitatorPluginImpl = async (fastify, opts) => {
|
|
|
33
35
|
}
|
|
34
36
|
}
|
|
35
37
|
}
|
|
38
|
+
instance.addHook('onRequest', async (request, reply) => {
|
|
39
|
+
const refusal = refuseNonJsonBody(request.method, request.headers);
|
|
40
|
+
if (!refusal)
|
|
41
|
+
return;
|
|
42
|
+
return reply
|
|
43
|
+
.status(refusal.status)
|
|
44
|
+
.send({ error: { message: refusal.message, code: refusal.code } });
|
|
45
|
+
});
|
|
36
46
|
instance.addHook('onRequest', createAuthHook(opts.auth));
|
|
37
47
|
if (opts.rateLimit) {
|
|
38
48
|
try {
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AA4BlD,eAAO,MAAM,WAAW,EAAE,kBA+HzB,CAAC"}
|
package/dist/routes/agents.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { AgentResumeRequestSchema, AgentRunRequestSchema } from '../types.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { AgentStreamSession, parseResumeRequest, parseRunRequest, toAgentRunResponse, } from '@cogitator-ai/server-shared';
|
|
3
|
+
import { FastifyStreamWriter } from '../streaming/index.js';
|
|
4
|
+
import { onClientDisconnect, resolveError, sendError, sendRouteError, validateBody, } from './utils.js';
|
|
4
5
|
const paramsSchema = {
|
|
5
6
|
type: 'object',
|
|
6
7
|
properties: { name: { type: 'string' } },
|
|
7
8
|
required: ['name'],
|
|
8
9
|
};
|
|
9
10
|
export const agentRoutes = async (fastify) => {
|
|
11
|
+
const runBody = validateBody((body) => parseRunRequest(body, { acceptContext: fastify.cogitator.acceptContext }));
|
|
12
|
+
const resumeBody = validateBody(parseResumeRequest);
|
|
10
13
|
const findAgent = (name) => Object.hasOwn(fastify.cogitator.agents, name) ? fastify.cogitator.agents[name] : undefined;
|
|
11
14
|
fastify.get('/agents', async () => {
|
|
12
15
|
const agentList = Object.entries(fastify.cogitator.agents).map(([name, agent]) => ({
|
|
@@ -17,7 +20,7 @@ export const agentRoutes = async (fastify) => {
|
|
|
17
20
|
const response = { agents: agentList };
|
|
18
21
|
return response;
|
|
19
22
|
});
|
|
20
|
-
fastify.post('/agents/:name/run', { schema: { params: paramsSchema, body: AgentRunRequestSchema } }, async (request, reply) => {
|
|
23
|
+
fastify.post('/agents/:name/run', { schema: { params: paramsSchema, body: AgentRunRequestSchema }, preValidation: runBody }, async (request, reply) => {
|
|
21
24
|
const { name } = request.params;
|
|
22
25
|
const agent = findAgent(name);
|
|
23
26
|
if (!agent) {
|
|
@@ -39,7 +42,7 @@ export const agentRoutes = async (fastify) => {
|
|
|
39
42
|
return sendRouteError(request, reply, error, 'agent run error');
|
|
40
43
|
}
|
|
41
44
|
});
|
|
42
|
-
fastify.post('/agents/:name/resume', { schema: { params: paramsSchema, body: AgentResumeRequestSchema } }, async (request, reply) => {
|
|
45
|
+
fastify.post('/agents/:name/resume', { schema: { params: paramsSchema, body: AgentResumeRequestSchema }, preValidation: resumeBody }, async (request, reply) => {
|
|
43
46
|
const { name } = request.params;
|
|
44
47
|
const agent = findAgent(name);
|
|
45
48
|
if (!agent) {
|
|
@@ -60,7 +63,7 @@ export const agentRoutes = async (fastify) => {
|
|
|
60
63
|
return sendRouteError(request, reply, error, 'agent resume error');
|
|
61
64
|
}
|
|
62
65
|
});
|
|
63
|
-
fastify.post('/agents/:name/stream', { schema: { params: paramsSchema, body: AgentRunRequestSchema } }, async (request, reply) => {
|
|
66
|
+
fastify.post('/agents/:name/stream', { schema: { params: paramsSchema, body: AgentRunRequestSchema }, preValidation: runBody }, async (request, reply) => {
|
|
64
67
|
const { name } = request.params;
|
|
65
68
|
const agent = findAgent(name);
|
|
66
69
|
if (!agent) {
|
|
@@ -69,89 +72,31 @@ export const agentRoutes = async (fastify) => {
|
|
|
69
72
|
const writer = new FastifyStreamWriter(reply, {
|
|
70
73
|
heartbeatMs: fastify.cogitator.sseHeartbeatMs,
|
|
71
74
|
});
|
|
72
|
-
const
|
|
75
|
+
const session = new AgentStreamSession((event) => writer.send(event), {
|
|
76
|
+
threadId: request.body.threadId,
|
|
77
|
+
});
|
|
73
78
|
const abortController = new AbortController();
|
|
74
79
|
onClientDisconnect(reply, () => {
|
|
75
80
|
abortController.abort();
|
|
76
81
|
writer.close();
|
|
77
82
|
});
|
|
78
|
-
let textId = null;
|
|
79
|
-
let reasoningId = null;
|
|
80
|
-
let streamedText = false;
|
|
81
|
-
const endText = () => {
|
|
82
|
-
if (textId === null)
|
|
83
|
-
return;
|
|
84
|
-
writer.textEnd(textId);
|
|
85
|
-
textId = null;
|
|
86
|
-
};
|
|
87
|
-
const endReasoning = () => {
|
|
88
|
-
if (reasoningId === null)
|
|
89
|
-
return;
|
|
90
|
-
writer.reasoningEnd(reasoningId);
|
|
91
|
-
reasoningId = null;
|
|
92
|
-
};
|
|
93
|
-
const endParts = () => {
|
|
94
|
-
endReasoning();
|
|
95
|
-
endText();
|
|
96
|
-
};
|
|
97
|
-
const writeText = (delta) => {
|
|
98
|
-
if (!delta)
|
|
99
|
-
return;
|
|
100
|
-
if (textId === null) {
|
|
101
|
-
endReasoning();
|
|
102
|
-
textId = generateId('txt');
|
|
103
|
-
writer.textStart(textId);
|
|
104
|
-
}
|
|
105
|
-
writer.textDelta(textId, delta);
|
|
106
|
-
};
|
|
107
|
-
const writeReasoning = (delta) => {
|
|
108
|
-
if (!delta)
|
|
109
|
-
return;
|
|
110
|
-
if (reasoningId === null) {
|
|
111
|
-
endText();
|
|
112
|
-
reasoningId = generateId('rsn');
|
|
113
|
-
writer.reasoningStart(reasoningId);
|
|
114
|
-
}
|
|
115
|
-
writer.reasoningDelta(reasoningId, delta);
|
|
116
|
-
};
|
|
117
83
|
try {
|
|
118
|
-
|
|
84
|
+
session.start();
|
|
119
85
|
const result = await fastify.cogitator.runtime.run(agent, {
|
|
120
86
|
input: request.body.input,
|
|
121
87
|
context: request.body.context,
|
|
122
|
-
threadId:
|
|
88
|
+
threadId: session.threadId,
|
|
123
89
|
userId: request.cogitatorAuth?.userId,
|
|
124
90
|
signal: abortController.signal,
|
|
125
91
|
stream: true,
|
|
126
|
-
|
|
127
|
-
if (token)
|
|
128
|
-
streamedText = true;
|
|
129
|
-
writeText(token);
|
|
130
|
-
},
|
|
131
|
-
onReasoning: writeReasoning,
|
|
132
|
-
onToolCall: (toolCall) => {
|
|
133
|
-
endParts();
|
|
134
|
-
writer.toolCallStart(toolCall.id, toolCall.name);
|
|
135
|
-
writer.toolCallDelta(toolCall.id, JSON.stringify(toolCall.arguments));
|
|
136
|
-
writer.toolCallEnd(toolCall.id);
|
|
137
|
-
},
|
|
138
|
-
onToolResult: (toolResult) => {
|
|
139
|
-
writer.toolResult(generateId('res'), toolResult.callId, toolResult.result);
|
|
140
|
-
},
|
|
92
|
+
...session.callbacks,
|
|
141
93
|
});
|
|
142
|
-
|
|
143
|
-
writeText(result.output);
|
|
144
|
-
endParts();
|
|
145
|
-
if (result.status === 'paused' && result.pendingApprovals) {
|
|
146
|
-
writer.approvalRequired(result.threadId, result.pendingApprovals);
|
|
147
|
-
}
|
|
148
|
-
writer.finish(messageId, result.usage);
|
|
94
|
+
session.complete(result);
|
|
149
95
|
}
|
|
150
96
|
catch (error) {
|
|
151
97
|
if (!abortController.signal.aborted) {
|
|
152
98
|
const resolved = resolveError(request, error, 'agent stream error');
|
|
153
|
-
|
|
154
|
-
writer.error(resolved.message, resolved.code);
|
|
99
|
+
session.fail(resolved.message, resolved.code);
|
|
155
100
|
}
|
|
156
101
|
}
|
|
157
102
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarms.d.ts","sourceRoot":"","sources":["../../src/routes/swarms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"swarms.d.ts","sourceRoot":"","sources":["../../src/routes/swarms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAgClD,eAAO,MAAM,WAAW,EAAE,kBA0MzB,CAAC"}
|
package/dist/routes/swarms.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SwarmRunRequestSchema } from '../types.js';
|
|
2
2
|
import { FastifyStreamWriter, generateId } from '../streaming/index.js';
|
|
3
|
-
import {
|
|
3
|
+
import { parseSwarmRunRequest, swarmAgentNames, withSwarm } from '@cogitator-ai/server-shared';
|
|
4
|
+
import { isModuleNotFound, onClientDisconnect, resolveError, sendError, sendRouteError, validateBody, } from './utils.js';
|
|
4
5
|
const paramsSchema = {
|
|
5
6
|
type: 'object',
|
|
6
7
|
properties: { name: { type: 'string' } },
|
|
@@ -11,15 +12,7 @@ export const swarmRoutes = async (fastify) => {
|
|
|
11
12
|
const findSwarm = (name) => Object.hasOwn(fastify.cogitator.swarms, name) ? fastify.cogitator.swarms[name] : undefined;
|
|
12
13
|
fastify.get('/swarms', async () => {
|
|
13
14
|
const swarmList = Object.entries(fastify.cogitator.swarms).map(([name, config]) => {
|
|
14
|
-
const agents =
|
|
15
|
-
if (config.supervisor)
|
|
16
|
-
agents.push(config.supervisor.name);
|
|
17
|
-
if (config.workers)
|
|
18
|
-
agents.push(...config.workers.map((w) => w.name));
|
|
19
|
-
if (config.agents)
|
|
20
|
-
agents.push(...config.agents.map((a) => a.name));
|
|
21
|
-
if (config.moderator)
|
|
22
|
-
agents.push(config.moderator.name);
|
|
15
|
+
const agents = swarmAgentNames(config);
|
|
23
16
|
return {
|
|
24
17
|
name,
|
|
25
18
|
strategy: config.strategy,
|
|
@@ -29,7 +22,8 @@ export const swarmRoutes = async (fastify) => {
|
|
|
29
22
|
const response = { swarms: swarmList };
|
|
30
23
|
return response;
|
|
31
24
|
});
|
|
32
|
-
|
|
25
|
+
const runBody = validateBody((body) => parseSwarmRunRequest(body, { acceptContext: fastify.cogitator.acceptContext }));
|
|
26
|
+
fastify.post('/swarms/:name/run', { schema: { params: paramsSchema, body: SwarmRunRequestSchema }, preValidation: runBody }, async (request, reply) => {
|
|
33
27
|
const { name } = request.params;
|
|
34
28
|
const swarmConfig = findSwarm(name);
|
|
35
29
|
if (!swarmConfig) {
|
|
@@ -43,38 +37,38 @@ export const swarmRoutes = async (fastify) => {
|
|
|
43
37
|
});
|
|
44
38
|
try {
|
|
45
39
|
const { Swarm } = await import('@cogitator-ai/swarms');
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
40
|
+
return await withSwarm(new Swarm(fastify.cogitator.runtime, swarmConfig), async (swarm) => {
|
|
41
|
+
abortSwarm = () => swarm.abort();
|
|
42
|
+
if (disconnected)
|
|
43
|
+
swarm.abort();
|
|
44
|
+
const result = await swarm.run({
|
|
45
|
+
input: request.body.input,
|
|
46
|
+
context: request.body.context,
|
|
47
|
+
threadId: request.body.threadId,
|
|
48
|
+
userId: request.cogitatorAuth?.userId,
|
|
49
|
+
timeout: request.body.timeout,
|
|
50
|
+
});
|
|
51
|
+
const agentResults = {};
|
|
52
|
+
for (const [agentName, agentResult] of result.agentResults.entries()) {
|
|
53
|
+
agentResults[agentName] = {
|
|
54
|
+
output: agentResult.output,
|
|
55
|
+
usage: agentResult.usage,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const resourceUsage = swarm.getResourceUsage();
|
|
59
|
+
return {
|
|
60
|
+
swarmId: swarm.id,
|
|
61
|
+
swarmName: swarm.name,
|
|
62
|
+
strategy: swarm.strategyType,
|
|
63
|
+
output: result.output,
|
|
64
|
+
agentResults,
|
|
65
|
+
usage: {
|
|
66
|
+
totalTokens: resourceUsage.totalTokens,
|
|
67
|
+
totalCost: resourceUsage.totalCost,
|
|
68
|
+
elapsedTime: resourceUsage.elapsedTime,
|
|
69
|
+
},
|
|
62
70
|
};
|
|
63
|
-
}
|
|
64
|
-
const resourceUsage = swarm.getResourceUsage();
|
|
65
|
-
const response = {
|
|
66
|
-
swarmId: swarm.id,
|
|
67
|
-
swarmName: swarm.name,
|
|
68
|
-
strategy: swarm.strategyType,
|
|
69
|
-
output: result.output,
|
|
70
|
-
agentResults,
|
|
71
|
-
usage: {
|
|
72
|
-
totalTokens: resourceUsage.totalTokens,
|
|
73
|
-
totalCost: resourceUsage.totalCost,
|
|
74
|
-
elapsedTime: resourceUsage.elapsedTime,
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
return response;
|
|
71
|
+
});
|
|
78
72
|
}
|
|
79
73
|
catch (error) {
|
|
80
74
|
if (isModuleNotFound(error)) {
|
|
@@ -83,7 +77,7 @@ export const swarmRoutes = async (fastify) => {
|
|
|
83
77
|
return sendRouteError(request, reply, error, 'swarm run error');
|
|
84
78
|
}
|
|
85
79
|
});
|
|
86
|
-
fastify.post('/swarms/:name/stream', { schema: { params: paramsSchema, body: SwarmRunRequestSchema } }, async (request, reply) => {
|
|
80
|
+
fastify.post('/swarms/:name/stream', { schema: { params: paramsSchema, body: SwarmRunRequestSchema }, preValidation: runBody }, async (request, reply) => {
|
|
87
81
|
const { name } = request.params;
|
|
88
82
|
const swarmConfig = findSwarm(name);
|
|
89
83
|
if (!swarmConfig) {
|
|
@@ -102,51 +96,52 @@ export const swarmRoutes = async (fastify) => {
|
|
|
102
96
|
});
|
|
103
97
|
try {
|
|
104
98
|
const { Swarm } = await import('@cogitator-ai/swarms');
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
99
|
+
await withSwarm(new Swarm(fastify.cogitator.runtime, swarmConfig), async (swarm) => {
|
|
100
|
+
abortSwarm = () => swarm.abort();
|
|
101
|
+
if (disconnected)
|
|
102
|
+
swarm.abort();
|
|
103
|
+
writer.start(messageId);
|
|
104
|
+
const result = await swarm.run({
|
|
105
|
+
input: request.body.input,
|
|
106
|
+
context: request.body.context,
|
|
107
|
+
threadId: request.body.threadId,
|
|
108
|
+
userId: request.cogitatorAuth?.userId,
|
|
109
|
+
timeout: request.body.timeout,
|
|
110
|
+
onAgentStart: (agentName) => {
|
|
111
|
+
writer.swarmEvent('agent_start', { agentName, timestamp: Date.now() });
|
|
112
|
+
},
|
|
113
|
+
onAgentComplete: (agentName, agentResult) => {
|
|
114
|
+
writer.swarmEvent('agent_complete', {
|
|
115
|
+
agentName,
|
|
116
|
+
output: agentResult.output,
|
|
117
|
+
timestamp: Date.now(),
|
|
118
|
+
});
|
|
119
|
+
},
|
|
120
|
+
onAgentError: (agentName, error) => {
|
|
121
|
+
writer.swarmEvent('agent_error', {
|
|
122
|
+
agentName,
|
|
123
|
+
error: resolveError(request, error, `swarm agent ${agentName} error`).message,
|
|
124
|
+
});
|
|
125
|
+
},
|
|
126
|
+
onMessage: (message) => {
|
|
127
|
+
writer.swarmEvent('message', message);
|
|
128
|
+
},
|
|
129
|
+
onEvent: (event) => {
|
|
130
|
+
writer.swarmEvent(event.type, event.data);
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
const resourceUsage = swarm.getResourceUsage();
|
|
134
|
+
writer.swarmEvent('swarm_completed', {
|
|
135
|
+
swarmId: swarm.id,
|
|
136
|
+
output: result.output,
|
|
137
|
+
usage: {
|
|
138
|
+
totalTokens: resourceUsage.totalTokens,
|
|
139
|
+
totalCost: resourceUsage.totalCost,
|
|
140
|
+
elapsedTime: resourceUsage.elapsedTime,
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
writer.finish(messageId);
|
|
148
144
|
});
|
|
149
|
-
writer.finish(messageId);
|
|
150
145
|
}
|
|
151
146
|
catch (error) {
|
|
152
147
|
if (isModuleNotFound(error)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarms.js","sourceRoot":"","sources":["../../src/routes/swarms.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExE,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,cAAc,
|
|
1
|
+
{"version":3,"file":"swarms.js","sourceRoot":"","sources":["../../src/routes/swarms.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../src/routes/threads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../src/routes/threads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAWlD,eAAO,MAAM,YAAY,EAAE,kBAoI1B,CAAC"}
|
package/dist/routes/threads.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { assertThreadAccess, ensureThreadAccess } from '@cogitator-ai/core';
|
|
2
2
|
import { AddMessageRequestSchema } from '../types.js';
|
|
3
|
-
import {
|
|
3
|
+
import { parseAddMessageRequest } from '@cogitator-ai/server-shared';
|
|
4
|
+
import { sendError, sendRouteError, validateBody } from './utils.js';
|
|
4
5
|
export const threadRoutes = async (fastify) => {
|
|
5
6
|
const getMemory = () => fastify.cogitator.runtime.getMemory();
|
|
7
|
+
const messageBody = validateBody((body) => parseAddMessageRequest(body, { roles: fastify.cogitator.threadMessageRoles }));
|
|
6
8
|
fastify.get('/threads/:id', {
|
|
7
9
|
schema: {
|
|
8
10
|
params: {
|
|
@@ -48,6 +50,7 @@ export const threadRoutes = async (fastify) => {
|
|
|
48
50
|
},
|
|
49
51
|
body: AddMessageRequestSchema,
|
|
50
52
|
},
|
|
53
|
+
preValidation: messageBody,
|
|
51
54
|
}, async (request, reply) => {
|
|
52
55
|
const memory = await getMemory();
|
|
53
56
|
if (!memory) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threads.js","sourceRoot":"","sources":["../../src/routes/threads.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"threads.js","sourceRoot":"","sources":["../../src/routes/threads.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/utils.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { FastifyReply, FastifyRequest } from 'fastify';
|
|
2
|
-
import {
|
|
3
|
-
import type { AgentRunResponse } from '../types.js';
|
|
1
|
+
import type { FastifyReply, FastifyRequest, preValidationAsyncHookHandler } from 'fastify';
|
|
2
|
+
import type { ParseResult } from '@cogitator-ai/server-shared';
|
|
4
3
|
export declare function sendError(reply: FastifyReply, status: number, message: string, code: string): FastifyReply;
|
|
5
4
|
export declare function isModuleNotFound(error: unknown): boolean;
|
|
6
5
|
export interface ResolvedError {
|
|
@@ -16,7 +15,11 @@ export interface ResolvedError {
|
|
|
16
15
|
export declare function resolveError(source: Pick<FastifyRequest, 'log'>, error: unknown, label: string): ResolvedError;
|
|
17
16
|
export declare function sendRouteError(request: FastifyRequest, reply: FastifyReply, error: unknown, label: string): FastifyReply;
|
|
18
17
|
export declare function onClientDisconnect(reply: FastifyReply, handler: () => void): void;
|
|
19
|
-
/**
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
/**
|
|
19
|
+
* A `preValidation` hook that reads the body with the shared validator every adapter uses
|
|
20
|
+
* and puts the validated value in its place. It runs before the JSON schema, whose type
|
|
21
|
+
* coercion would otherwise turn `input: 42` into `"42"`, so Fastify refuses exactly what
|
|
22
|
+
* the other adapters refuse, and the schema only documents the body.
|
|
23
|
+
*/
|
|
24
|
+
export declare function validateBody<T>(parse: (body: unknown) => ParseResult<T>): preValidationAsyncHookHandler;
|
|
22
25
|
//# sourceMappingURL=utils.d.ts.map
|