@cogitator-ai/koa 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 +93 -34
- package/dist/app.d.ts +7 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +31 -14
- package/dist/app.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/middleware/auth.d.ts +6 -0
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +17 -2
- package/dist/middleware/auth.js.map +1 -1
- package/dist/middleware/body-parser.d.ts.map +1 -1
- package/dist/middleware/body-parser.js +3 -4
- package/dist/middleware/body-parser.js.map +1 -1
- package/dist/middleware/context.d.ts +5 -0
- package/dist/middleware/context.d.ts.map +1 -1
- package/dist/middleware/context.js +10 -1
- package/dist/middleware/context.js.map +1 -1
- package/dist/middleware/error-handler.d.ts.map +1 -1
- package/dist/middleware/error-handler.js +16 -36
- package/dist/middleware/error-handler.js.map +1 -1
- package/dist/middleware/index.d.ts +1 -1
- package/dist/middleware/index.d.ts.map +1 -1
- package/dist/middleware/index.js +1 -1
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/unmatched.d.ts +20 -0
- package/dist/middleware/unmatched.d.ts.map +1 -0
- package/dist/middleware/unmatched.js +83 -0
- package/dist/middleware/unmatched.js.map +1 -0
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +33 -22
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/swarms.d.ts.map +1 -1
- package/dist/routes/swarms.js +32 -26
- package/dist/routes/swarms.js.map +1 -1
- package/dist/routes/threads.d.ts.map +1 -1
- package/dist/routes/threads.js +25 -26
- package/dist/routes/threads.js.map +1 -1
- package/dist/routes/workflows.d.ts.map +1 -1
- package/dist/routes/workflows.js +16 -25
- package/dist/routes/workflows.js.map +1 -1
- package/dist/types.d.ts +66 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/errors.d.ts +14 -6
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +29 -12
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/request.d.ts +10 -0
- package/dist/utils/request.d.ts.map +1 -1
- package/dist/utils/request.js +14 -0
- package/dist/utils/request.js.map +1 -1
- package/dist/websocket/handler.d.ts +6 -0
- package/dist/websocket/handler.d.ts.map +1 -1
- package/dist/websocket/handler.js +48 -18
- package/dist/websocket/handler.js.map +1 -1
- package/package.json +9 -9
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { createContextMiddleware } from './context.js';
|
|
2
|
-
export { createAuthMiddleware } from './auth.js';
|
|
2
|
+
export { createAnonymousMiddleware, createAuthMiddleware } from './auth.js';
|
|
3
3
|
export { createBodyParser } from './body-parser.js';
|
|
4
4
|
export { createErrorHandler } from './error-handler.js';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/middleware/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { createContextMiddleware } from './context.js';
|
|
2
|
-
export { createAuthMiddleware } from './auth.js';
|
|
2
|
+
export { createAnonymousMiddleware, createAuthMiddleware } from './auth.js';
|
|
3
3
|
export { createBodyParser } from './body-parser.js';
|
|
4
4
|
export { createErrorHandler } from './error-handler.js';
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type Router from '@koa/router';
|
|
2
|
+
import type { Middleware } from 'koa';
|
|
3
|
+
import type { CogitatorState } from '../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* `middleware`, for the requests a route of the router serves. Any other request passes
|
|
6
|
+
* through untouched, so the middleware downstream of the router gets it as it came.
|
|
7
|
+
*/
|
|
8
|
+
export declare function forRoutes(middleware: Middleware): Middleware;
|
|
9
|
+
/**
|
|
10
|
+
* Registers the last route of the router, the one for the requests no other route serves. It
|
|
11
|
+
* lets the middleware downstream of the router answer them first. What is left unanswered goes
|
|
12
|
+
* through `guards`, the authentication and anonymous policy of the API, and is answered with
|
|
13
|
+
* `404 NOT_FOUND` in the error envelope, so under `anonymous: 'deny'` an anonymous caller gets
|
|
14
|
+
* `401` on every path and cannot tell which paths exist. An `OPTIONS` request for a path a route
|
|
15
|
+
* serves answers `204` with the methods it serves in `Allow`, which `router.allowedMethods()`
|
|
16
|
+
* would answer for every path once this route matches them all, so the app needs no
|
|
17
|
+
* `allowedMethods()`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function routeUnmatched(router: Router<CogitatorState>, guards: readonly Middleware[]): void;
|
|
20
|
+
//# sourceMappingURL=unmatched.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unmatched.d.ts","sourceRoot":"","sources":["../../src/middleware/unmatched.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,OAAO,KAAK,EAAW,UAAU,EAAQ,MAAM,KAAK,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAqBlD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAE5D;AA8BD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,SAAS,UAAU,EAAE,GAC5B,IAAI,CAqBN"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { notFound } from '../utils/errors.js';
|
|
2
|
+
/** The name of the route that answers what no other route of the router serves */
|
|
3
|
+
const UNMATCHED_ROUTE = 'cogitator:unmatched';
|
|
4
|
+
/**
|
|
5
|
+
* A path that matches every request, in the syntax of each path-to-regexp major `@koa/router`
|
|
6
|
+
* has shipped with: 8 first, then 6. A router compiles a path when it is registered and throws
|
|
7
|
+
* on the syntax of the other one.
|
|
8
|
+
*/
|
|
9
|
+
const ANY_PATH = ['{/*rest}', '(.*)'];
|
|
10
|
+
/** Whether a route of the router other than the unmatched one serves the request */
|
|
11
|
+
function servedByRoute(ctx) {
|
|
12
|
+
const matched = ctx.matched ?? [];
|
|
13
|
+
return matched.some((layer) => layer.name !== UNMATCHED_ROUTE && layer.methods.includes(ctx.method));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* `middleware`, for the requests a route of the router serves. Any other request passes
|
|
17
|
+
* through untouched, so the middleware downstream of the router gets it as it came.
|
|
18
|
+
*/
|
|
19
|
+
export function forRoutes(middleware) {
|
|
20
|
+
return (ctx, next) => (servedByRoute(ctx) ? middleware(ctx, next) : next());
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The methods the routes of the router serve on the request's path, besides the unmatched one,
|
|
24
|
+
* with `HEAD` wherever `GET` is served and `OPTIONS`; none when no route serves the path
|
|
25
|
+
*/
|
|
26
|
+
function allowedMethods(ctx) {
|
|
27
|
+
const matched = ctx.matched ?? [];
|
|
28
|
+
const methods = new Set(matched.filter((layer) => layer.name !== UNMATCHED_ROUTE).flatMap((layer) => layer.methods));
|
|
29
|
+
if (methods.size === 0)
|
|
30
|
+
return [];
|
|
31
|
+
if (methods.has('GET'))
|
|
32
|
+
methods.add('HEAD');
|
|
33
|
+
methods.add('OPTIONS');
|
|
34
|
+
return [...methods].sort();
|
|
35
|
+
}
|
|
36
|
+
function unanswered(ctx) {
|
|
37
|
+
return ctx.respond !== false && !ctx.headerSent && ctx.status === 404 && ctx.body == null;
|
|
38
|
+
}
|
|
39
|
+
async function runChain(chain, ctx, last) {
|
|
40
|
+
const dispatch = async (at) => {
|
|
41
|
+
const middleware = chain[at];
|
|
42
|
+
if (middleware)
|
|
43
|
+
await middleware(ctx, () => dispatch(at + 1));
|
|
44
|
+
else
|
|
45
|
+
last();
|
|
46
|
+
};
|
|
47
|
+
await dispatch(0);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Registers the last route of the router, the one for the requests no other route serves. It
|
|
51
|
+
* lets the middleware downstream of the router answer them first. What is left unanswered goes
|
|
52
|
+
* through `guards`, the authentication and anonymous policy of the API, and is answered with
|
|
53
|
+
* `404 NOT_FOUND` in the error envelope, so under `anonymous: 'deny'` an anonymous caller gets
|
|
54
|
+
* `401` on every path and cannot tell which paths exist. An `OPTIONS` request for a path a route
|
|
55
|
+
* serves answers `204` with the methods it serves in `Allow`, which `router.allowedMethods()`
|
|
56
|
+
* would answer for every path once this route matches them all, so the app needs no
|
|
57
|
+
* `allowedMethods()`.
|
|
58
|
+
*/
|
|
59
|
+
export function routeUnmatched(router, guards) {
|
|
60
|
+
const answer = async (ctx, next) => {
|
|
61
|
+
const allowed = ctx.method === 'OPTIONS' ? allowedMethods(ctx) : [];
|
|
62
|
+
if (allowed.length > 0) {
|
|
63
|
+
ctx.set('Allow', allowed.join(', '));
|
|
64
|
+
ctx.status = 204;
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
await next();
|
|
68
|
+
if (!unanswered(ctx))
|
|
69
|
+
return;
|
|
70
|
+
await runChain(guards, ctx, () => notFound(ctx, 'Not found'));
|
|
71
|
+
};
|
|
72
|
+
for (const [at, path] of ANY_PATH.entries()) {
|
|
73
|
+
try {
|
|
74
|
+
router.all(UNMATCHED_ROUTE, path, answer);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
if (at === ANY_PATH.length - 1)
|
|
79
|
+
throw error;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=unmatched.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unmatched.js","sourceRoot":"","sources":["../../src/middleware/unmatched.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,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAC;AAkBrE,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,cAAc,CAAC,CAiK1D"}
|
package/dist/routes/agents.js
CHANGED
|
@@ -2,8 +2,8 @@ import Router from '@koa/router';
|
|
|
2
2
|
import { KoaStreamWriter, setupSSEHeaders } from '../streaming/index.js';
|
|
3
3
|
import { AgentStreamSession, parseResumeRequest, parseRunRequest, toAgentRunResponse, } from '@cogitator-ai/server-shared';
|
|
4
4
|
import { getOwn } from '../utils/lookup.js';
|
|
5
|
-
import {
|
|
6
|
-
import { getRequestBody, onClientDisconnect } from '../utils/request.js';
|
|
5
|
+
import { describeError, invalidInput, notFound, respondWithError, sendError, } from '../utils/errors.js';
|
|
6
|
+
import { getRequestBody, onClientDisconnect, refuseThread, runDeps } from '../utils/request.js';
|
|
7
7
|
export function createAgentRoutes() {
|
|
8
8
|
const router = new Router();
|
|
9
9
|
router.get('/agents', (ctx) => {
|
|
@@ -21,24 +21,29 @@ export function createAgentRoutes() {
|
|
|
21
21
|
const { name } = ctx.params;
|
|
22
22
|
const agent = getOwn(agents, name);
|
|
23
23
|
if (!agent) {
|
|
24
|
-
ctx
|
|
25
|
-
ctx.body = { error: { message: `Agent '${name}' not found`, code: 'NOT_FOUND' } };
|
|
24
|
+
notFound(ctx, `Agent '${name}' not found`);
|
|
26
25
|
return;
|
|
27
26
|
}
|
|
28
27
|
const parsed = parseRunRequest(getRequestBody(ctx), {
|
|
29
28
|
acceptContext: ctx.state.cogitator.acceptContext,
|
|
30
29
|
});
|
|
31
30
|
if (!parsed.ok) {
|
|
32
|
-
ctx.
|
|
33
|
-
ctx.body = { error: { message: parsed.message, code: 'INVALID_INPUT' } };
|
|
31
|
+
invalidInput(ctx, parsed.message);
|
|
34
32
|
return;
|
|
35
33
|
}
|
|
34
|
+
const refusal = await refuseThread(ctx, parsed.value.threadId);
|
|
35
|
+
if (refusal) {
|
|
36
|
+
sendError(ctx, refusal);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const deps = await runDeps(ctx);
|
|
36
40
|
const abortController = new AbortController();
|
|
37
41
|
onClientDisconnect(ctx, () => abortController.abort());
|
|
38
42
|
try {
|
|
39
43
|
const result = await runtime.run(agent, {
|
|
40
44
|
...parsed.value,
|
|
41
45
|
userId: ctx.state.auth?.userId,
|
|
46
|
+
...deps,
|
|
42
47
|
signal: abortController.signal,
|
|
43
48
|
});
|
|
44
49
|
ctx.body = toAgentRunResponse(result);
|
|
@@ -46,9 +51,7 @@ export function createAgentRoutes() {
|
|
|
46
51
|
catch (error) {
|
|
47
52
|
if (abortController.signal.aborted)
|
|
48
53
|
return;
|
|
49
|
-
|
|
50
|
-
ctx.status = status;
|
|
51
|
-
ctx.body = body;
|
|
54
|
+
respondWithError(ctx, error, 'Agent run error');
|
|
52
55
|
}
|
|
53
56
|
});
|
|
54
57
|
router.post('/agents/:name/resume', async (ctx) => {
|
|
@@ -56,22 +59,27 @@ export function createAgentRoutes() {
|
|
|
56
59
|
const { name } = ctx.params;
|
|
57
60
|
const agent = getOwn(agents, name);
|
|
58
61
|
if (!agent) {
|
|
59
|
-
ctx
|
|
60
|
-
ctx.body = { error: { message: `Agent '${name}' not found`, code: 'NOT_FOUND' } };
|
|
62
|
+
notFound(ctx, `Agent '${name}' not found`);
|
|
61
63
|
return;
|
|
62
64
|
}
|
|
63
65
|
const parsed = parseResumeRequest(getRequestBody(ctx));
|
|
64
66
|
if (!parsed.ok) {
|
|
65
|
-
ctx.
|
|
66
|
-
ctx.body = { error: { message: parsed.message, code: 'INVALID_INPUT' } };
|
|
67
|
+
invalidInput(ctx, parsed.message);
|
|
67
68
|
return;
|
|
68
69
|
}
|
|
69
70
|
const { threadId, decisions, defaultDecision } = parsed.value;
|
|
71
|
+
const refusal = await refuseThread(ctx, threadId);
|
|
72
|
+
if (refusal) {
|
|
73
|
+
sendError(ctx, refusal);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const deps = await runDeps(ctx);
|
|
70
77
|
const abortController = new AbortController();
|
|
71
78
|
onClientDisconnect(ctx, () => abortController.abort());
|
|
72
79
|
try {
|
|
73
80
|
const result = await runtime.resume(agent, threadId, {
|
|
74
81
|
userId: ctx.state.auth?.userId,
|
|
82
|
+
...deps,
|
|
75
83
|
decisions,
|
|
76
84
|
defaultDecision,
|
|
77
85
|
signal: abortController.signal,
|
|
@@ -81,9 +89,7 @@ export function createAgentRoutes() {
|
|
|
81
89
|
catch (error) {
|
|
82
90
|
if (abortController.signal.aborted)
|
|
83
91
|
return;
|
|
84
|
-
|
|
85
|
-
ctx.status = status;
|
|
86
|
-
ctx.body = body;
|
|
92
|
+
respondWithError(ctx, error, 'Agent resume error');
|
|
87
93
|
}
|
|
88
94
|
});
|
|
89
95
|
router.post('/agents/:name/stream', async (ctx) => {
|
|
@@ -91,18 +97,22 @@ export function createAgentRoutes() {
|
|
|
91
97
|
const { name } = ctx.params;
|
|
92
98
|
const agent = getOwn(agents, name);
|
|
93
99
|
if (!agent) {
|
|
94
|
-
ctx
|
|
95
|
-
ctx.body = { error: { message: `Agent '${name}' not found`, code: 'NOT_FOUND' } };
|
|
100
|
+
notFound(ctx, `Agent '${name}' not found`);
|
|
96
101
|
return;
|
|
97
102
|
}
|
|
98
103
|
const parsed = parseRunRequest(getRequestBody(ctx), {
|
|
99
104
|
acceptContext: ctx.state.cogitator.acceptContext,
|
|
100
105
|
});
|
|
101
106
|
if (!parsed.ok) {
|
|
102
|
-
ctx.
|
|
103
|
-
|
|
107
|
+
invalidInput(ctx, parsed.message);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const refusal = await refuseThread(ctx, parsed.value.threadId);
|
|
111
|
+
if (refusal) {
|
|
112
|
+
sendError(ctx, refusal);
|
|
104
113
|
return;
|
|
105
114
|
}
|
|
115
|
+
const deps = await runDeps(ctx);
|
|
106
116
|
setupSSEHeaders(ctx);
|
|
107
117
|
const writer = new KoaStreamWriter(ctx, {
|
|
108
118
|
heartbeatMs: ctx.state.cogitator.sseHeartbeatMs,
|
|
@@ -121,6 +131,7 @@ export function createAgentRoutes() {
|
|
|
121
131
|
...parsed.value,
|
|
122
132
|
threadId: session.threadId,
|
|
123
133
|
userId: ctx.state.auth?.userId,
|
|
134
|
+
...deps,
|
|
124
135
|
stream: true,
|
|
125
136
|
signal: abortController.signal,
|
|
126
137
|
...session.callbacks,
|
|
@@ -129,8 +140,8 @@ export function createAgentRoutes() {
|
|
|
129
140
|
}
|
|
130
141
|
catch (error) {
|
|
131
142
|
if (!abortController.signal.aborted) {
|
|
132
|
-
const
|
|
133
|
-
session.fail(
|
|
143
|
+
const failure = describeError(error, 'Agent stream error');
|
|
144
|
+
session.fail(failure.message, failure.code);
|
|
134
145
|
}
|
|
135
146
|
}
|
|
136
147
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,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,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"swarms.d.ts","sourceRoot":"","sources":["../../src/routes/swarms.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,aAAa,CAAC;AAuBzF,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,cAAc,CAAC,CAmM1D"}
|
package/dist/routes/swarms.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import Router from '@koa/router';
|
|
2
2
|
import { KoaStreamWriter, setupSSEHeaders } from '../streaming/index.js';
|
|
3
|
-
import { generateId, parseSwarmRunRequest, swarmAgentNames, withSwarm, } from '@cogitator-ai/server-shared';
|
|
3
|
+
import { generateId, parseSwarmRunRequest, swarmAgentNames, swarmTimeoutWithin, withSwarm, } from '@cogitator-ai/server-shared';
|
|
4
4
|
import { getOwn } from '../utils/lookup.js';
|
|
5
|
-
import { isModuleNotFoundError,
|
|
6
|
-
import { getRequestBody, onClientDisconnect } from '../utils/request.js';
|
|
5
|
+
import { describeError, invalidInput, isModuleNotFoundError, notFound, notInstalled, respondWithError, sendError, } from '../utils/errors.js';
|
|
6
|
+
import { getRequestBody, onClientDisconnect, refuseThread } from '../utils/request.js';
|
|
7
7
|
import { serializeSwarmUsage, toSwarmRunResponse } from '../utils/results.js';
|
|
8
8
|
export function createSwarmRoutes() {
|
|
9
9
|
const router = new Router();
|
|
@@ -25,18 +25,22 @@ export function createSwarmRoutes() {
|
|
|
25
25
|
const { name } = ctx.params;
|
|
26
26
|
const swarmConfig = getOwn(swarms, name);
|
|
27
27
|
if (!swarmConfig) {
|
|
28
|
-
ctx
|
|
29
|
-
ctx.body = { error: { message: `Swarm '${name}' not found`, code: 'NOT_FOUND' } };
|
|
28
|
+
notFound(ctx, `Swarm '${name}' not found`);
|
|
30
29
|
return;
|
|
31
30
|
}
|
|
32
31
|
const parsed = parseSwarmRunRequest(getRequestBody(ctx), {
|
|
33
32
|
acceptContext: ctx.state.cogitator.acceptContext,
|
|
34
33
|
});
|
|
35
34
|
if (!parsed.ok) {
|
|
36
|
-
ctx.
|
|
37
|
-
ctx.body = { error: { message: parsed.message, code: 'INVALID_INPUT' } };
|
|
35
|
+
invalidInput(ctx, parsed.message);
|
|
38
36
|
return;
|
|
39
37
|
}
|
|
38
|
+
const refusal = await refuseThread(ctx, parsed.value.threadId);
|
|
39
|
+
if (refusal) {
|
|
40
|
+
sendError(ctx, refusal);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const timeout = swarmTimeoutWithin(parsed.value.timeout, ctx.state.cogitator.limits);
|
|
40
44
|
let aborted = false;
|
|
41
45
|
let abortSwarm;
|
|
42
46
|
onClientDisconnect(ctx, () => {
|
|
@@ -49,7 +53,11 @@ export function createSwarmRoutes() {
|
|
|
49
53
|
return;
|
|
50
54
|
const response = await withSwarm(new Swarm(runtime, swarmConfig), async (swarm) => {
|
|
51
55
|
abortSwarm = () => swarm.abort();
|
|
52
|
-
const result = await swarm.run({
|
|
56
|
+
const result = await swarm.run({
|
|
57
|
+
...parsed.value,
|
|
58
|
+
timeout,
|
|
59
|
+
userId: ctx.state.auth?.userId,
|
|
60
|
+
});
|
|
53
61
|
return toSwarmRunResponse(swarm, result);
|
|
54
62
|
});
|
|
55
63
|
if (aborted)
|
|
@@ -60,13 +68,10 @@ export function createSwarmRoutes() {
|
|
|
60
68
|
if (aborted)
|
|
61
69
|
return;
|
|
62
70
|
if (isModuleNotFoundError(error)) {
|
|
63
|
-
ctx
|
|
64
|
-
ctx.body = { error: { message: 'Swarms package not installed', code: 'UNIMPLEMENTED' } };
|
|
71
|
+
notInstalled(ctx, 'Swarms');
|
|
65
72
|
return;
|
|
66
73
|
}
|
|
67
|
-
|
|
68
|
-
ctx.status = status;
|
|
69
|
-
ctx.body = body;
|
|
74
|
+
respondWithError(ctx, error, 'Swarm run error');
|
|
70
75
|
}
|
|
71
76
|
});
|
|
72
77
|
router.post('/swarms/:name/stream', async (ctx) => {
|
|
@@ -74,18 +79,22 @@ export function createSwarmRoutes() {
|
|
|
74
79
|
const { name } = ctx.params;
|
|
75
80
|
const swarmConfig = getOwn(swarms, name);
|
|
76
81
|
if (!swarmConfig) {
|
|
77
|
-
ctx
|
|
78
|
-
ctx.body = { error: { message: `Swarm '${name}' not found`, code: 'NOT_FOUND' } };
|
|
82
|
+
notFound(ctx, `Swarm '${name}' not found`);
|
|
79
83
|
return;
|
|
80
84
|
}
|
|
81
85
|
const parsed = parseSwarmRunRequest(getRequestBody(ctx), {
|
|
82
86
|
acceptContext: ctx.state.cogitator.acceptContext,
|
|
83
87
|
});
|
|
84
88
|
if (!parsed.ok) {
|
|
85
|
-
ctx.
|
|
86
|
-
|
|
89
|
+
invalidInput(ctx, parsed.message);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const refusal = await refuseThread(ctx, parsed.value.threadId);
|
|
93
|
+
if (refusal) {
|
|
94
|
+
sendError(ctx, refusal);
|
|
87
95
|
return;
|
|
88
96
|
}
|
|
97
|
+
const timeout = swarmTimeoutWithin(parsed.value.timeout, ctx.state.cogitator.limits);
|
|
89
98
|
setupSSEHeaders(ctx);
|
|
90
99
|
const writer = new KoaStreamWriter(ctx, {
|
|
91
100
|
heartbeatMs: ctx.state.cogitator.sseHeartbeatMs,
|
|
@@ -107,6 +116,7 @@ export function createSwarmRoutes() {
|
|
|
107
116
|
writer.start(messageId);
|
|
108
117
|
const result = await swarm.run({
|
|
109
118
|
...parsed.value,
|
|
119
|
+
timeout,
|
|
110
120
|
userId: ctx.state.auth?.userId,
|
|
111
121
|
onAgentStart: (agentName) => {
|
|
112
122
|
writer.swarmEvent('agent_start', { agentName, timestamp: Date.now() });
|
|
@@ -121,7 +131,7 @@ export function createSwarmRoutes() {
|
|
|
121
131
|
onAgentError: (agentName, error) => {
|
|
122
132
|
writer.swarmEvent('agent_error', {
|
|
123
133
|
agentName,
|
|
124
|
-
error:
|
|
134
|
+
error: describeError(error, `Swarm agent ${agentName} error`).message,
|
|
125
135
|
});
|
|
126
136
|
},
|
|
127
137
|
onMessage: (message) => {
|
|
@@ -148,8 +158,8 @@ export function createSwarmRoutes() {
|
|
|
148
158
|
writer.error('Swarms package not installed', 'UNIMPLEMENTED');
|
|
149
159
|
}
|
|
150
160
|
else {
|
|
151
|
-
const
|
|
152
|
-
writer.error(
|
|
161
|
+
const failure = describeError(error, 'Swarm stream error');
|
|
162
|
+
writer.error(failure.message, failure.code);
|
|
153
163
|
}
|
|
154
164
|
}
|
|
155
165
|
finally {
|
|
@@ -161,15 +171,11 @@ export function createSwarmRoutes() {
|
|
|
161
171
|
const { name } = ctx.params;
|
|
162
172
|
const swarmConfig = getOwn(swarms, name);
|
|
163
173
|
if (!swarmConfig) {
|
|
164
|
-
ctx
|
|
165
|
-
ctx.body = { error: { message: `Swarm '${name}' not found`, code: 'NOT_FOUND' } };
|
|
174
|
+
notFound(ctx, `Swarm '${name}' not found`);
|
|
166
175
|
return;
|
|
167
176
|
}
|
|
168
177
|
if (!swarmConfig.blackboard?.enabled) {
|
|
169
|
-
ctx
|
|
170
|
-
ctx.body = {
|
|
171
|
-
error: { message: 'Blackboard not enabled for this swarm', code: 'INVALID_INPUT' },
|
|
172
|
-
};
|
|
178
|
+
invalidInput(ctx, 'Blackboard not enabled for this swarm');
|
|
173
179
|
return;
|
|
174
180
|
}
|
|
175
181
|
const response = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarms.js","sourceRoot":"","sources":["../../src/routes/swarms.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,SAAS,GACV,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,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,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../src/routes/threads.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAC;AAuBlE,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,cAAc,CAAC,CAgG3D"}
|
package/dist/routes/threads.js
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import Router from '@koa/router';
|
|
2
2
|
import { assertThreadAccess, ensureThreadAccess } from '@cogitator-ai/core';
|
|
3
3
|
import { countMessageTokens } from '@cogitator-ai/memory';
|
|
4
|
-
import {
|
|
5
|
-
import { getRequestBody } from '../utils/request.js';
|
|
6
|
-
import { parseAddMessageRequest } from '@cogitator-ai/server-shared';
|
|
7
|
-
function respondWithError(ctx, error, label) {
|
|
8
|
-
const { status, body } = resolveError(error, label);
|
|
9
|
-
ctx.status = status;
|
|
10
|
-
ctx.body = body;
|
|
11
|
-
}
|
|
4
|
+
import { invalidInput, respondWithError, sendError } from '../utils/errors.js';
|
|
5
|
+
import { getRequestBody, refuseThread } from '../utils/request.js';
|
|
6
|
+
import { parseAddMessageRequest, parseThreadPageQuery, readThreadPage, } from '@cogitator-ai/server-shared';
|
|
12
7
|
function respondMemoryUnavailable(ctx) {
|
|
13
|
-
ctx
|
|
14
|
-
|
|
8
|
+
sendError(ctx, { status: 503, code: 'UNAVAILABLE', message: 'Memory not configured' });
|
|
9
|
+
}
|
|
10
|
+
/** Answers the refusal `authorizeThread` gives the thread, and says whether there was one */
|
|
11
|
+
async function threadRefused(ctx, threadId) {
|
|
12
|
+
const refusal = await refuseThread(ctx, threadId);
|
|
13
|
+
if (refusal)
|
|
14
|
+
sendError(ctx, refusal);
|
|
15
|
+
return refusal !== undefined;
|
|
15
16
|
}
|
|
16
17
|
export function createThreadRoutes() {
|
|
17
18
|
const router = new Router();
|
|
@@ -22,22 +23,17 @@ export function createThreadRoutes() {
|
|
|
22
23
|
return;
|
|
23
24
|
}
|
|
24
25
|
const { id } = ctx.params;
|
|
26
|
+
const page = parseThreadPageQuery(ctx.query);
|
|
27
|
+
if (!page.ok) {
|
|
28
|
+
invalidInput(ctx, page.message);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (await threadRefused(ctx, id))
|
|
32
|
+
return;
|
|
25
33
|
const userId = ctx.state.auth?.userId;
|
|
26
34
|
try {
|
|
27
|
-
await assertThreadAccess(memory, id, userId);
|
|
28
|
-
const
|
|
29
|
-
if (!result.success) {
|
|
30
|
-
respondWithError(ctx, new Error(result.error), 'Thread get error');
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
const entries = result.data;
|
|
34
|
-
const now = Date.now();
|
|
35
|
-
const response = {
|
|
36
|
-
id,
|
|
37
|
-
messages: entries.map((entry) => entry.message),
|
|
38
|
-
createdAt: entries.length > 0 ? entries[0].createdAt.getTime() : now,
|
|
39
|
-
updatedAt: entries.length > 0 ? entries[entries.length - 1].createdAt.getTime() : now,
|
|
40
|
-
};
|
|
35
|
+
const thread = await assertThreadAccess(memory, id, userId);
|
|
36
|
+
const response = await readThreadPage(memory, id, page.value, thread);
|
|
41
37
|
ctx.body = response;
|
|
42
38
|
}
|
|
43
39
|
catch (error) {
|
|
@@ -55,10 +51,11 @@ export function createThreadRoutes() {
|
|
|
55
51
|
roles: ctx.state.cogitator.threadMessageRoles,
|
|
56
52
|
});
|
|
57
53
|
if (!parsed.ok) {
|
|
58
|
-
ctx.
|
|
59
|
-
ctx.body = { error: { message: parsed.message, code: 'INVALID_INPUT' } };
|
|
54
|
+
invalidInput(ctx, parsed.message);
|
|
60
55
|
return;
|
|
61
56
|
}
|
|
57
|
+
if (await threadRefused(ctx, id))
|
|
58
|
+
return;
|
|
62
59
|
const message = { role: parsed.value.role, content: parsed.value.content };
|
|
63
60
|
const userId = ctx.state.auth?.userId;
|
|
64
61
|
try {
|
|
@@ -87,6 +84,8 @@ export function createThreadRoutes() {
|
|
|
87
84
|
return;
|
|
88
85
|
}
|
|
89
86
|
const { id } = ctx.params;
|
|
87
|
+
if (await threadRefused(ctx, id))
|
|
88
|
+
return;
|
|
90
89
|
const userId = ctx.state.auth?.userId;
|
|
91
90
|
try {
|
|
92
91
|
await assertThreadAccess(memory, id, userId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threads.js","sourceRoot":"","sources":["../../src/routes/threads.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"threads.js","sourceRoot":"","sources":["../../src/routes/threads.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,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/routes/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAC;AAmBxE,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,cAAc,CAAC,CA+I7D"}
|