@cogitator-ai/fastify 0.8.5 → 0.9.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 +70 -23
- package/dist/hooks/auth.d.ts +6 -0
- package/dist/hooks/auth.d.ts.map +1 -1
- package/dist/hooks/auth.js +14 -6
- package/dist/hooks/auth.js.map +1 -1
- package/dist/hooks/error-handler.d.ts.map +1 -1
- package/dist/hooks/error-handler.js +12 -25
- package/dist/hooks/error-handler.js.map +1 -1
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +25 -15
- package/dist/plugin.js.map +1 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +13 -1
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/swarms.d.ts.map +1 -1
- package/dist/routes/swarms.js +12 -7
- package/dist/routes/swarms.js.map +1 -1
- package/dist/routes/threads.d.ts.map +1 -1
- package/dist/routes/threads.js +15 -17
- package/dist/routes/threads.js.map +1 -1
- package/dist/routes/utils.d.ts +18 -10
- package/dist/routes/utils.d.ts.map +1 -1
- package/dist/routes/utils.js +39 -15
- package/dist/routes/utils.js.map +1 -1
- package/dist/routes/workflows.d.ts.map +1 -1
- package/dist/routes/workflows.js +15 -10
- package/dist/routes/workflows.js.map +1 -1
- package/dist/types.d.ts +147 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +81 -21
- package/dist/types.js.map +1 -1
- package/dist/websocket/handler.d.ts.map +1 -1
- package/dist/websocket/handler.js +100 -19
- package/dist/websocket/handler.js.map +1 -1
- package/package.json +8 -8
package/dist/routes/swarms.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { swarmRunRequestSchema } from '../types.js';
|
|
2
2
|
import { FastifyStreamWriter, generateId } from '../streaming/index.js';
|
|
3
|
-
import { parseSwarmRunRequest, swarmAgentNames, withSwarm } from '@cogitator-ai/server-shared';
|
|
4
|
-
import { isModuleNotFound, onClientDisconnect, resolveError, sendError, sendRouteError, validateBody, } from './utils.js';
|
|
3
|
+
import { parseSwarmRunRequest, swarmAgentNames, swarmTimeoutWithin, withSwarm, } from '@cogitator-ai/server-shared';
|
|
4
|
+
import { isModuleNotFound, onClientDisconnect, refuseThread, resolveError, sendError, sendRouteError, validateBody, } from './utils.js';
|
|
5
5
|
const paramsSchema = {
|
|
6
6
|
type: 'object',
|
|
7
7
|
properties: { name: { type: 'string' } },
|
|
@@ -23,12 +23,15 @@ export const swarmRoutes = async (fastify) => {
|
|
|
23
23
|
return response;
|
|
24
24
|
});
|
|
25
25
|
const runBody = validateBody((body) => parseSwarmRunRequest(body, { acceptContext: fastify.cogitator.acceptContext }));
|
|
26
|
-
|
|
26
|
+
const runSchema = { params: paramsSchema, body: swarmRunRequestSchema(fastify.cogitator.limits) };
|
|
27
|
+
fastify.post('/swarms/:name/run', { schema: runSchema, preValidation: runBody }, async (request, reply) => {
|
|
27
28
|
const { name } = request.params;
|
|
28
29
|
const swarmConfig = findSwarm(name);
|
|
29
30
|
if (!swarmConfig) {
|
|
30
31
|
return sendError(reply, 404, `Swarm '${name}' not found`, 'NOT_FOUND');
|
|
31
32
|
}
|
|
33
|
+
if (await refuseThread(request, reply, request.body.threadId))
|
|
34
|
+
return reply;
|
|
32
35
|
let disconnected = false;
|
|
33
36
|
let abortSwarm;
|
|
34
37
|
onClientDisconnect(reply, () => {
|
|
@@ -46,7 +49,7 @@ export const swarmRoutes = async (fastify) => {
|
|
|
46
49
|
context: request.body.context,
|
|
47
50
|
threadId: request.body.threadId,
|
|
48
51
|
userId: request.cogitatorAuth?.userId,
|
|
49
|
-
timeout: request.body.timeout,
|
|
52
|
+
timeout: swarmTimeoutWithin(request.body.timeout, fastify.cogitator.limits),
|
|
50
53
|
});
|
|
51
54
|
const agentResults = {};
|
|
52
55
|
for (const [agentName, agentResult] of result.agentResults.entries()) {
|
|
@@ -77,12 +80,14 @@ export const swarmRoutes = async (fastify) => {
|
|
|
77
80
|
return sendRouteError(request, reply, error, 'swarm run error');
|
|
78
81
|
}
|
|
79
82
|
});
|
|
80
|
-
fastify.post('/swarms/:name/stream', { schema:
|
|
83
|
+
fastify.post('/swarms/:name/stream', { schema: runSchema, preValidation: runBody }, async (request, reply) => {
|
|
81
84
|
const { name } = request.params;
|
|
82
85
|
const swarmConfig = findSwarm(name);
|
|
83
86
|
if (!swarmConfig) {
|
|
84
87
|
return sendError(reply, 404, `Swarm '${name}' not found`, 'NOT_FOUND');
|
|
85
88
|
}
|
|
89
|
+
if (await refuseThread(request, reply, request.body.threadId))
|
|
90
|
+
return reply;
|
|
86
91
|
const writer = new FastifyStreamWriter(reply, {
|
|
87
92
|
heartbeatMs: fastify.cogitator.sseHeartbeatMs,
|
|
88
93
|
});
|
|
@@ -106,7 +111,7 @@ export const swarmRoutes = async (fastify) => {
|
|
|
106
111
|
context: request.body.context,
|
|
107
112
|
threadId: request.body.threadId,
|
|
108
113
|
userId: request.cogitatorAuth?.userId,
|
|
109
|
-
timeout: request.body.timeout,
|
|
114
|
+
timeout: swarmTimeoutWithin(request.body.timeout, fastify.cogitator.limits),
|
|
110
115
|
onAgentStart: (agentName) => {
|
|
111
116
|
writer.swarmEvent('agent_start', { agentName, timestamp: Date.now() });
|
|
112
117
|
},
|
|
@@ -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,
|
|
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;AAelD,eAAO,MAAM,YAAY,EAAE,kBAiI1B,CAAC"}
|
package/dist/routes/threads.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { assertThreadAccess, ensureThreadAccess } from '@cogitator-ai/core';
|
|
2
|
-
import { AddMessageRequestSchema } from '../types.js';
|
|
3
|
-
import { parseAddMessageRequest } from '@cogitator-ai/server-shared';
|
|
4
|
-
import { sendError, sendRouteError, validateBody } from './utils.js';
|
|
2
|
+
import { AddMessageRequestSchema, ThreadPageQuerySchema, ThreadResponseSchema } from '../types.js';
|
|
3
|
+
import { parseAddMessageRequest, parseThreadPageQuery, readThreadPage, } from '@cogitator-ai/server-shared';
|
|
4
|
+
import { refuseThread, sendError, sendRouteError, validateBody, validateQuery } from './utils.js';
|
|
5
5
|
export const threadRoutes = async (fastify) => {
|
|
6
6
|
const getMemory = () => fastify.cogitator.runtime.getMemory();
|
|
7
7
|
const messageBody = validateBody((body) => parseAddMessageRequest(body, { roles: fastify.cogitator.threadMessageRoles }));
|
|
8
|
+
const pageQuery = validateQuery(parseThreadPageQuery);
|
|
8
9
|
fastify.get('/threads/:id', {
|
|
9
10
|
schema: {
|
|
10
11
|
params: {
|
|
@@ -12,7 +13,10 @@ export const threadRoutes = async (fastify) => {
|
|
|
12
13
|
properties: { id: { type: 'string' } },
|
|
13
14
|
required: ['id'],
|
|
14
15
|
},
|
|
16
|
+
querystring: ThreadPageQuerySchema,
|
|
17
|
+
response: { 200: ThreadResponseSchema },
|
|
15
18
|
},
|
|
19
|
+
preValidation: pageQuery,
|
|
16
20
|
}, async (request, reply) => {
|
|
17
21
|
const memory = await getMemory();
|
|
18
22
|
if (!memory) {
|
|
@@ -20,21 +24,11 @@ export const threadRoutes = async (fastify) => {
|
|
|
20
24
|
}
|
|
21
25
|
const { id } = request.params;
|
|
22
26
|
const userId = request.cogitatorAuth?.userId;
|
|
27
|
+
if (await refuseThread(request, reply, id))
|
|
28
|
+
return reply;
|
|
23
29
|
try {
|
|
24
|
-
await assertThreadAccess(memory, id, userId);
|
|
25
|
-
const
|
|
26
|
-
if (!result.success) {
|
|
27
|
-
return sendRouteError(request, reply, new Error(result.error), 'thread get error');
|
|
28
|
-
}
|
|
29
|
-
const entries = result.data;
|
|
30
|
-
const messages = entries.map((entry) => entry.message);
|
|
31
|
-
const now = Date.now();
|
|
32
|
-
const response = {
|
|
33
|
-
id,
|
|
34
|
-
messages,
|
|
35
|
-
createdAt: entries.length > 0 ? entries[0].createdAt.getTime() : now,
|
|
36
|
-
updatedAt: entries.length > 0 ? entries[entries.length - 1].createdAt.getTime() : now,
|
|
37
|
-
};
|
|
30
|
+
const thread = await assertThreadAccess(memory, id, userId);
|
|
31
|
+
const response = await readThreadPage(memory, id, request.query, thread);
|
|
38
32
|
return response;
|
|
39
33
|
}
|
|
40
34
|
catch (error) {
|
|
@@ -59,6 +53,8 @@ export const threadRoutes = async (fastify) => {
|
|
|
59
53
|
const { id } = request.params;
|
|
60
54
|
const body = request.body;
|
|
61
55
|
const userId = request.cogitatorAuth?.userId;
|
|
56
|
+
if (await refuseThread(request, reply, id))
|
|
57
|
+
return reply;
|
|
62
58
|
try {
|
|
63
59
|
await ensureThreadAccess(memory, id, { agentId: '', userId });
|
|
64
60
|
const result = await memory.addEntry({
|
|
@@ -94,6 +90,8 @@ export const threadRoutes = async (fastify) => {
|
|
|
94
90
|
}
|
|
95
91
|
const { id } = request.params;
|
|
96
92
|
const userId = request.cogitatorAuth?.userId;
|
|
93
|
+
if (await refuseThread(request, reply, id))
|
|
94
|
+
return reply;
|
|
97
95
|
try {
|
|
98
96
|
await assertThreadAccess(memory, id, userId);
|
|
99
97
|
const result = await memory.clearThread(id);
|
|
@@ -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;
|
|
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,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,GACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAMlG,MAAM,CAAC,MAAM,YAAY,GAAuB,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;IAC9D,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE,CACxC,sBAAsB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAC9E,CAAC;IACF,MAAM,SAAS,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAEtD,OAAO,CAAC,GAAG,CACT,cAAc,EACd;QACE,MAAM,EAAE;YACN,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;gBACtC,QAAQ,EAAE,CAAC,IAAI,CAAC;aACjB;YACD,WAAW,EAAE,qBAAqB;YAClC,QAAQ,EAAE,EAAE,GAAG,EAAE,oBAAoB,EAAE;SACxC;QACD,aAAa,EAAE,SAAS;KACzB,EACD,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,uBAAuB,EAAE,aAAa,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC;QAE7C,IAAI,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QAEzD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YAC5D,MAAM,QAAQ,GAAmB,MAAM,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACzF,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;QACnE,CAAC;IACH,CAAC,CACF,CAAC;IAEF,OAAO,CAAC,IAAI,CACV,uBAAuB,EACvB;QACE,MAAM,EAAE;YACN,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;gBACtC,QAAQ,EAAE,CAAC,IAAI,CAAC;aACjB;YACD,IAAI,EAAE,uBAAuB;SAC9B;QACD,aAAa,EAAE,WAAW;KAC3B,EACD,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,uBAAuB,EAAE,aAAa,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC;QAE7C,IAAI,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QAEzD,IAAI,CAAC;YACH,MAAM,kBAAkB,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;gBACnC,QAAQ,EAAE,EAAE;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,OAAO,EAAE,IAAI,CAAC,OAAO;iBACtB;gBACD,UAAU,EAAE,CAAC;gBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,cAAc,CACnB,OAAO,EACP,KAAK,EACL,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EACvB,0BAA0B,CAC3B,CAAC;YACJ,CAAC;YAED,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,0BAA0B,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC,CACF,CAAC;IAEF,OAAO,CAAC,MAAM,CACZ,cAAc,EACd;QACE,MAAM,EAAE;YACN,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;gBACtC,QAAQ,EAAE,CAAC,IAAI,CAAC;aACjB;SACF;KACF,EACD,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,uBAAuB,EAAE,aAAa,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC;QAE7C,IAAI,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QAEzD,IAAI,CAAC;YACH,MAAM,kBAAkB,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,qBAAqB,CAAC,CAAC;YACxF,CAAC;YACD,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/routes/utils.d.ts
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
import type { FastifyReply, FastifyRequest, preValidationAsyncHookHandler } from 'fastify';
|
|
2
|
-
import type
|
|
2
|
+
import { type HttpErrorDescription, type ParseResult } from '@cogitator-ai/server-shared';
|
|
3
|
+
/** Answers an error with the shared envelope and its `Retry-After` */
|
|
4
|
+
export declare function sendFailure(reply: FastifyReply, error: HttpErrorDescription): FastifyReply;
|
|
3
5
|
export declare function sendError(reply: FastifyReply, status: number, message: string, code: string): FastifyReply;
|
|
4
6
|
export declare function isModuleNotFound(error: unknown): boolean;
|
|
5
|
-
export interface ResolvedError {
|
|
6
|
-
status: number;
|
|
7
|
-
message: string;
|
|
8
|
-
code: string;
|
|
9
|
-
}
|
|
10
7
|
/**
|
|
11
|
-
* What a client may see of an error:
|
|
12
|
-
*
|
|
13
|
-
* or the server)
|
|
8
|
+
* What a client may see of an error: what `describeHttpError` makes of it, or, for an
|
|
9
|
+
* internal error, `500 Internal server error` after it is logged through `source.log`
|
|
10
|
+
* (a request or the server)
|
|
14
11
|
*/
|
|
15
|
-
export declare function resolveError(source: Pick<FastifyRequest, 'log'>, error: unknown, label: string):
|
|
12
|
+
export declare function resolveError(source: Pick<FastifyRequest, 'log'>, error: unknown, label: string): HttpErrorDescription;
|
|
16
13
|
export declare function sendRouteError(request: FastifyRequest, reply: FastifyReply, error: unknown, label: string): FastifyReply;
|
|
17
14
|
export declare function onClientDisconnect(reply: FastifyReply, handler: () => void): void;
|
|
18
15
|
/**
|
|
@@ -22,4 +19,15 @@ export declare function onClientDisconnect(reply: FastifyReply, handler: () => v
|
|
|
22
19
|
* the other adapters refuse, and the schema only documents the body.
|
|
23
20
|
*/
|
|
24
21
|
export declare function validateBody<T>(parse: (body: unknown) => ParseResult<T>): preValidationAsyncHookHandler;
|
|
22
|
+
/** {@link validateBody} for the query string */
|
|
23
|
+
export declare function validateQuery<T>(parse: (query: Record<string, unknown>) => ParseResult<T>): preValidationAsyncHookHandler;
|
|
24
|
+
/**
|
|
25
|
+
* Answers the refusal `authorizeThread` gives a request on the thread it names, and says
|
|
26
|
+
* whether it did: `false` when the request may go on
|
|
27
|
+
*/
|
|
28
|
+
export declare function refuseThread(request: FastifyRequest, reply: FastifyReply, threadId: string | undefined): Promise<boolean>;
|
|
29
|
+
/** The `deps` an agent run gets for a request from the `deps` hook, none without the hook */
|
|
30
|
+
export declare function requestDeps(request: FastifyRequest): Promise<{
|
|
31
|
+
deps?: unknown;
|
|
32
|
+
}>;
|
|
25
33
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/routes/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/routes/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAC3F,OAAO,EAML,KAAK,oBAAoB,EACzB,KAAK,WAAW,EACjB,MAAM,6BAA6B,CAAC;AAErC,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,oBAAoB,GAAG,YAAY,CAE1F;AAED,wBAAgB,SAAS,CACvB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,YAAY,CAEd;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOxD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,EACnC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,oBAAoB,CAKtB;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,YAAY,CAEd;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI,CAIjF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,GACvC,6BAA6B,CAM/B;AAED,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,CAAC,EAC7B,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,GACxD,6BAA6B,CAM/B;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAAC,OAAO,CAAC,CASlB;AAED,6FAA6F;AAC7F,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAGtF"}
|
package/dist/routes/utils.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { INTERNAL_ERROR, authorizeThreadAccess, describeHttpError, errorEnvelope, errorHeaders, } from '@cogitator-ai/server-shared';
|
|
2
|
+
/** Answers an error with the shared envelope and its `Retry-After` */
|
|
3
|
+
export function sendFailure(reply, error) {
|
|
4
|
+
return reply.status(error.status).headers(errorHeaders(error)).send(errorEnvelope(error));
|
|
5
|
+
}
|
|
2
6
|
export function sendError(reply, status, message, code) {
|
|
3
|
-
return reply
|
|
7
|
+
return sendFailure(reply, { status, code, message });
|
|
4
8
|
}
|
|
5
9
|
export function isModuleNotFound(error) {
|
|
6
10
|
return (typeof error === 'object' &&
|
|
@@ -9,24 +13,19 @@ export function isModuleNotFound(error) {
|
|
|
9
13
|
(error.code === 'ERR_MODULE_NOT_FOUND' || error.code === 'MODULE_NOT_FOUND'));
|
|
10
14
|
}
|
|
11
15
|
/**
|
|
12
|
-
* What a client may see of an error:
|
|
13
|
-
*
|
|
14
|
-
* or the server)
|
|
16
|
+
* What a client may see of an error: what `describeHttpError` makes of it, or, for an
|
|
17
|
+
* internal error, `500 Internal server error` after it is logged through `source.log`
|
|
18
|
+
* (a request or the server)
|
|
15
19
|
*/
|
|
16
20
|
export function resolveError(source, error, label) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
message: error.message,
|
|
21
|
-
code: error.code,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
21
|
+
const described = describeHttpError(error);
|
|
22
|
+
if (described)
|
|
23
|
+
return described;
|
|
24
24
|
source.log.error({ err: error }, label);
|
|
25
|
-
return
|
|
25
|
+
return INTERNAL_ERROR;
|
|
26
26
|
}
|
|
27
27
|
export function sendRouteError(request, reply, error, label) {
|
|
28
|
-
|
|
29
|
-
return sendError(reply, resolved.status, resolved.message, resolved.code);
|
|
28
|
+
return sendFailure(reply, resolveError(request, error, label));
|
|
30
29
|
}
|
|
31
30
|
export function onClientDisconnect(reply, handler) {
|
|
32
31
|
reply.raw.on('close', () => {
|
|
@@ -48,4 +47,29 @@ export function validateBody(parse) {
|
|
|
48
47
|
request.body = parsed.value;
|
|
49
48
|
};
|
|
50
49
|
}
|
|
50
|
+
/** {@link validateBody} for the query string */
|
|
51
|
+
export function validateQuery(parse) {
|
|
52
|
+
return async (request, reply) => {
|
|
53
|
+
const parsed = parse(request.query);
|
|
54
|
+
if (!parsed.ok)
|
|
55
|
+
return sendError(reply, 400, parsed.message, 'INVALID_INPUT');
|
|
56
|
+
request.query = parsed.value;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Answers the refusal `authorizeThread` gives a request on the thread it names, and says
|
|
61
|
+
* whether it did: `false` when the request may go on
|
|
62
|
+
*/
|
|
63
|
+
export async function refuseThread(request, reply, threadId) {
|
|
64
|
+
const refusal = await authorizeThreadAccess(request.server.cogitator.authorizeThread, request.cogitatorAuth, threadId);
|
|
65
|
+
if (!refusal)
|
|
66
|
+
return false;
|
|
67
|
+
sendFailure(reply, refusal);
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
/** The `deps` an agent run gets for a request from the `deps` hook, none without the hook */
|
|
71
|
+
export async function requestDeps(request) {
|
|
72
|
+
const { deps } = request.server.cogitator;
|
|
73
|
+
return deps ? { deps: await deps(request) } : {};
|
|
74
|
+
}
|
|
51
75
|
//# sourceMappingURL=utils.js.map
|
package/dist/routes/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/routes/utils.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/routes/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/routes/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/routes/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAwClD,eAAO,MAAM,cAAc,EAAE,kBAkJ5B,CAAC"}
|
package/dist/routes/workflows.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { workflowRunRequestSchema } from '../types.js';
|
|
2
2
|
import { FastifyStreamWriter, generateId } from '../streaming/index.js';
|
|
3
|
-
import { parseWorkflowRunRequest } from '@cogitator-ai/server-shared';
|
|
3
|
+
import { parseWorkflowRunRequest, workflowOptionsWithin, } from '@cogitator-ai/server-shared';
|
|
4
4
|
import { isModuleNotFound, onClientDisconnect, resolveError, sendError, sendRouteError, validateBody, } from './utils.js';
|
|
5
5
|
const workflowBody = validateBody(parseWorkflowRunRequest);
|
|
6
6
|
const paramsSchema = {
|
|
@@ -9,8 +9,8 @@ const paramsSchema = {
|
|
|
9
9
|
required: ['name'],
|
|
10
10
|
};
|
|
11
11
|
const WORKFLOWS_MISSING = 'Workflows package not installed';
|
|
12
|
-
function executorOptions(body) {
|
|
13
|
-
const options = body?.options ?? {};
|
|
12
|
+
function executorOptions(body, limits) {
|
|
13
|
+
const options = workflowOptionsWithin(body?.options ?? {}, limits);
|
|
14
14
|
return {
|
|
15
15
|
maxConcurrency: options.maxConcurrency,
|
|
16
16
|
maxIterations: options.maxIterations,
|
|
@@ -20,6 +20,10 @@ export const workflowRoutes = async (fastify) => {
|
|
|
20
20
|
const findWorkflow = (name) => Object.hasOwn(fastify.cogitator.workflows, name)
|
|
21
21
|
? fastify.cogitator.workflows[name]
|
|
22
22
|
: undefined;
|
|
23
|
+
const runSchema = {
|
|
24
|
+
params: paramsSchema,
|
|
25
|
+
body: workflowRunRequestSchema(fastify.cogitator.limits),
|
|
26
|
+
};
|
|
23
27
|
fastify.get('/workflows', async () => {
|
|
24
28
|
const workflowList = Object.entries(fastify.cogitator.workflows).map(([name, workflow]) => ({
|
|
25
29
|
name,
|
|
@@ -30,7 +34,7 @@ export const workflowRoutes = async (fastify) => {
|
|
|
30
34
|
return response;
|
|
31
35
|
});
|
|
32
36
|
fastify.post('/workflows/:name/run', {
|
|
33
|
-
schema:
|
|
37
|
+
schema: runSchema,
|
|
34
38
|
preValidation: workflowBody,
|
|
35
39
|
}, async (request, reply) => {
|
|
36
40
|
const { name } = request.params;
|
|
@@ -44,11 +48,11 @@ export const workflowRoutes = async (fastify) => {
|
|
|
44
48
|
const { WorkflowExecutor } = await import('@cogitator-ai/workflows');
|
|
45
49
|
const executor = new WorkflowExecutor(fastify.cogitator.runtime);
|
|
46
50
|
const result = await executor.execute(workflow, request.body?.input, {
|
|
47
|
-
...executorOptions(request.body),
|
|
51
|
+
...executorOptions(request.body, fastify.cogitator.limits),
|
|
48
52
|
signal: abortController.signal,
|
|
49
53
|
});
|
|
50
54
|
if (result.error) {
|
|
51
|
-
return
|
|
55
|
+
return sendRouteError(request, reply, result.error, 'workflow run error');
|
|
52
56
|
}
|
|
53
57
|
const response = {
|
|
54
58
|
workflowId: result.workflowId,
|
|
@@ -67,7 +71,7 @@ export const workflowRoutes = async (fastify) => {
|
|
|
67
71
|
}
|
|
68
72
|
});
|
|
69
73
|
fastify.post('/workflows/:name/stream', {
|
|
70
|
-
schema:
|
|
74
|
+
schema: runSchema,
|
|
71
75
|
preValidation: workflowBody,
|
|
72
76
|
}, async (request, reply) => {
|
|
73
77
|
const { name } = request.params;
|
|
@@ -89,7 +93,7 @@ export const workflowRoutes = async (fastify) => {
|
|
|
89
93
|
const executor = new WorkflowExecutor(fastify.cogitator.runtime);
|
|
90
94
|
writer.start(messageId);
|
|
91
95
|
const result = await executor.execute(workflow, request.body?.input, {
|
|
92
|
-
...executorOptions(request.body),
|
|
96
|
+
...executorOptions(request.body, fastify.cogitator.limits),
|
|
93
97
|
signal: abortController.signal,
|
|
94
98
|
onNodeStart: (node) => {
|
|
95
99
|
writer.workflowEvent('node_started', { nodeName: node, timestamp: Date.now() });
|
|
@@ -108,7 +112,8 @@ export const workflowRoutes = async (fastify) => {
|
|
|
108
112
|
},
|
|
109
113
|
});
|
|
110
114
|
if (result.error) {
|
|
111
|
-
|
|
115
|
+
const failure = resolveError(request, result.error, 'workflow stream error');
|
|
116
|
+
writer.error(failure.message, failure.code);
|
|
112
117
|
}
|
|
113
118
|
else {
|
|
114
119
|
writer.workflowEvent('workflow_completed', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/routes/workflows.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,
|
|
1
|
+
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/routes/workflows.ts"],"names":[],"mappings":"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"}
|